Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 16016643 | 711 days ago | IN | 0 ETH | 0.03409175 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
EarPhone
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-21 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // 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 v4.4.1 (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 internal _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.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 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.6.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 be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // 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.6.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 internal _name; // Token symbol string internal _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 See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: EarPhone.sol pragma solidity ^0.8.4; contract EarPhone is ERC721, Ownable { bool initialized; string public baseURI = "https://www.google.com/"; uint256 public COUNTER; using Strings for uint256; function initialize() public { require(!initialized, "already initialized"); COUNTER++; _transferOwnership(_msgSender()); _name = "earPhone"; _symbol = "EP"; initialized = true; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } function batchSafeTransferFrom( uint256[] memory _id,address[] memory _adr) public{ require(_id.length == _adr.length,"_id len must == _adr len"); for(uint256 i = 0;i < _adr.length;i++){ safeTransferFrom(msg.sender,_adr[i], _id[i], ''); } } function singleBatchSafeTransferFrom( uint256[] memory _id,address _adr) public{ require(_id.length > 0,"_id len must > 0"); for(uint256 i = 0;i < _id.length;i++){ safeTransferFrom(msg.sender,_adr, _id[i], ''); } } function mint( address[] memory _adr ) external onlyOwner { require(_adr.length > 0,"_adr len must > 0"); for(uint256 i = 0;i < _adr.length;i++){ _safeMint(_adr[i], COUNTER); COUNTER++; } } function singleMint( uint256 num,address _adr ) external onlyOwner { require(num > 0,"num must > 0"); for(uint256 i = 0;i < num;i++){ _safeMint(_adr, COUNTER); COUNTER++; } } function implodeMint( address[] memory _adr,uint256[] memory _id ) external onlyOwner { require(_adr.length > 0,"_adr len must > 0"); require(_adr.length == _id.length,"_adr len must > 0"); for(uint256 i = 0;i < _adr.length;i++){ require( _id[i] >= 100000000,"_adr num is err"); _safeMint(_adr[i], _id[i]); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"COUNTER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_id","type":"uint256[]"},{"internalType":"address[]","name":"_adr","type":"address[]"}],"name":"batchSafeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_adr","type":"address[]"},{"internalType":"uint256[]","name":"_id","type":"uint256[]"}],"name":"implodeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_adr","type":"address[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_id","type":"uint256[]"},{"internalType":"address","name":"_adr","type":"address"}],"name":"singleBatchSafeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"address","name":"_adr","type":"address"}],"name":"singleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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"}]
Contract Creation Code
60806040526040518060400160405280601781526020017f68747470733a2f2f7777772e676f6f676c652e636f6d2f000000000000000000815250600790805190602001906200005192919062000066565b503480156200005f57600080fd5b506200017b565b828054620000749062000116565b90600052602060002090601f016020900481019282620000985760008555620000e4565b82601f10620000b357805160ff1916838001178555620000e4565b82800160010185558215620000e4579182015b82811115620000e3578251825591602001919060010190620000c6565b5b509050620000f39190620000f7565b5090565b5b8082111562000112576000816000905550600101620000f8565b5090565b600060028204905060018216806200012f57607f821691505b602082108114156200014657620001456200014c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613b1d806200018b6000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c8063715018a6116100de57806399b7057911610097578063bd075b8411610071578063bd075b84146103fa578063c87b56dd14610416578063e985e9c514610446578063f2fde38b1461047657610173565b806399b70579146103a4578063a22cb465146103c2578063b88d4fde146103de57610173565b8063715018a61461031c5780637a003a72146103265780638129fc1c146103425780638a8495f61461034c5780638da5cb5b1461036857806395d89b411461038657610173565b80633c2579a8116101305780633c2579a81461024a57806342842e0e1461026657806355f804b3146102825780636352211e1461029e5780636c0360eb146102ce57806370a08231146102ec57610173565b806301ffc9a71461017857806304aedc37146101a857806306fdde03146101c4578063081812fc146101e2578063095ea7b31461021257806323b872dd1461022e575b600080fd5b610192600480360381019061018d9190612831565b610492565b60405161019f9190612dfa565b60405180910390f35b6101c260048036038101906101bd91906126e5565b610574565b005b6101cc61073b565b6040516101d99190612e15565b60405180910390f35b6101fc60048036038101906101f791906128d4565b6107cd565b6040516102099190612d93565b60405180910390f35b61022c6004803603810190610227919061265c565b610852565b005b61024860048036038101906102439190612546565b61096a565b005b610264600480360381019061025f919061275d565b6109ca565b005b610280600480360381019061027b9190612546565b610a67565b005b61029c6004803603810190610297919061288b565b610a87565b005b6102b860048036038101906102b391906128d4565b610b1d565b6040516102c59190612d93565b60405180910390f35b6102d6610bcf565b6040516102e39190612e15565b60405180910390f35b610306600480360381019061030191906124d9565b610c5d565b60405161031391906130d7565b60405180910390f35b610324610d15565b005b610340600480360381019061033b9190612901565b610d9d565b005b61034a610ea3565b005b610366600480360381019061036191906127b9565b610fd0565b005b610370611087565b60405161037d9190612d93565b60405180910390f35b61038e6110b1565b60405161039b9190612e15565b60405180910390f35b6103ac611143565b6040516103b991906130d7565b60405180910390f35b6103dc60048036038101906103d7919061261c565b611149565b005b6103f860048036038101906103f39190612599565b61115f565b005b610414600480360381019061040f919061269c565b6111c1565b005b610430600480360381019061042b91906128d4565b6112e2565b60405161043d9190612e15565b60405180910390f35b610460600480360381019061045b9190612506565b611342565b60405161046d9190612dfa565b60405180910390f35b610490600480360381019061048b91906124d9565b6113d6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061055d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061056d575061056c826114ce565b5b9050919050565b61057c611538565b73ffffffffffffffffffffffffffffffffffffffff1661059a611087565b73ffffffffffffffffffffffffffffffffffffffff16146105f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e790613037565b60405180910390fd5b6000825111610634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062b90613077565b60405180910390fd5b8051825114610678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066f90613077565b60405180910390fd5b60005b8251811015610736576305f5e10082828151811061069c5761069b613504565b5b602002602001015110156106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dc906130b7565b60405180910390fd5b6107238382815181106106fb576106fa613504565b5b602002602001015183838151811061071657610715613504565b5b6020026020010151611540565b808061072e906133fd565b91505061067b565b505050565b60606000805461074a9061339a565b80601f01602080910402602001604051908101604052809291908181526020018280546107769061339a565b80156107c35780601f10610798576101008083540402835291602001916107c3565b820191906000526020600020905b8154815290600101906020018083116107a657829003601f168201915b5050505050905090565b60006107d88261155e565b610817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080e90612ff7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085d82610b1d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c590613057565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108ed611538565b73ffffffffffffffffffffffffffffffffffffffff16148061091c575061091b81610916611538565b611342565b5b61095b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095290612f37565b60405180910390fd5b61096583836115ca565b505050565b61097b610975611538565b82611683565b6109ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b190613097565b60405180910390fd5b6109c5838383611761565b505050565b6000825111610a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0590613017565b60405180910390fd5b60005b8251811015610a6257610a4f3383858481518110610a3257610a31613504565b5b60200260200101516040518060200160405280600081525061115f565b8080610a5a906133fd565b915050610a11565b505050565b610a828383836040518060200160405280600081525061115f565b505050565b610a8f611538565b73ffffffffffffffffffffffffffffffffffffffff16610aad611087565b73ffffffffffffffffffffffffffffffffffffffff1614610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa90613037565b60405180910390fd5b8060079080519060200190610b199291906121b1565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbd90612f97565b60405180910390fd5b80915050919050565b60078054610bdc9061339a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c089061339a565b8015610c555780601f10610c2a57610100808354040283529160200191610c55565b820191906000526020600020905b815481529060010190602001808311610c3857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590612f77565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d1d611538565b73ffffffffffffffffffffffffffffffffffffffff16610d3b611087565b73ffffffffffffffffffffffffffffffffffffffff1614610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890613037565b60405180910390fd5b610d9b60006119c8565b565b610da5611538565b73ffffffffffffffffffffffffffffffffffffffff16610dc3611087565b73ffffffffffffffffffffffffffffffffffffffff1614610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090613037565b60405180910390fd5b60008211610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5390612fb7565b60405180910390fd5b60005b82811015610e9e57610e7382600854611540565b60086000815480929190610e86906133fd565b91905055508080610e96906133fd565b915050610e5f565b505050565b600660149054906101000a900460ff1615610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90612f57565b60405180910390fd5b60086000815480929190610f06906133fd565b9190505550610f1b610f16611538565b6119c8565b6040518060400160405280600881526020017f65617250686f6e6500000000000000000000000000000000000000000000000081525060009080519060200190610f669291906121b1565b506040518060400160405280600281526020017f455000000000000000000000000000000000000000000000000000000000000081525060019080519060200190610fb29291906121b1565b506001600660146101000a81548160ff021916908315150217905550565b8051825114611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90612f17565b60405180910390fd5b60005b81518110156110825761106f3383838151811061103757611036613504565b5b602002602001015185848151811061105257611051613504565b5b60200260200101516040518060200160405280600081525061115f565b808061107a906133fd565b915050611017565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546110c09061339a565b80601f01602080910402602001604051908101604052809291908181526020018280546110ec9061339a565b80156111395780601f1061110e57610100808354040283529160200191611139565b820191906000526020600020905b81548152906001019060200180831161111c57829003601f168201915b5050505050905090565b60085481565b61115b611154611538565b8383611a8e565b5050565b61117061116a611538565b83611683565b6111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690613097565b60405180910390fd5b6111bb84848484611bfb565b50505050565b6111c9611538565b73ffffffffffffffffffffffffffffffffffffffff166111e7611087565b73ffffffffffffffffffffffffffffffffffffffff161461123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490613037565b60405180910390fd5b6000815111611281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127890613077565b60405180910390fd5b60005b81518110156112de576112b38282815181106112a3576112a2613504565b5b6020026020010151600854611540565b600860008154809291906112c6906133fd565b919050555080806112d6906133fd565b915050611284565b5050565b60606000600780546112f39061339a565b90501161130f576040518060200160405280600081525061133b565b600761131a83611c57565b60405160200161132b929190612d6f565b6040516020818303038152906040525b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113de611538565b73ffffffffffffffffffffffffffffffffffffffff166113fc611087565b73ffffffffffffffffffffffffffffffffffffffff1614611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990613037565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b990612e57565b60405180910390fd5b6114cb816119c8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b61155a828260405180602001604052806000815250611db8565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661163d83610b1d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061168e8261155e565b6116cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c490612ef7565b60405180910390fd5b60006116d883610b1d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061171a57506117198185611342565b5b8061175857508373ffffffffffffffffffffffffffffffffffffffff16611740846107cd565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661178182610b1d565b73ffffffffffffffffffffffffffffffffffffffff16146117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ce90612e77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e90612eb7565b60405180910390fd5b611852838383611e13565b61185d6000826115ca565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118ad91906132b0565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119049190613229565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119c3838383611e18565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af490612ed7565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bee9190612dfa565b60405180910390a3505050565b611c06848484611761565b611c1284848484611e1d565b611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890612e37565b60405180910390fd5b50505050565b60606000821415611c9f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611db3565b600082905060005b60008214611cd1578080611cba906133fd565b915050600a82611cca919061327f565b9150611ca7565b60008167ffffffffffffffff811115611ced57611cec613533565b5b6040519080825280601f01601f191660200182016040528015611d1f5781602001600182028036833780820191505090505b5090505b60008514611dac57600182611d3891906132b0565b9150600a85611d479190613446565b6030611d539190613229565b60f81b818381518110611d6957611d68613504565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611da5919061327f565b9450611d23565b8093505050505b919050565b611dc28383611fb4565b611dcf6000848484611e1d565b611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0590612e37565b60405180910390fd5b505050565b505050565b505050565b6000611e3e8473ffffffffffffffffffffffffffffffffffffffff1661218e565b15611fa7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e67611538565b8786866040518563ffffffff1660e01b8152600401611e899493929190612dae565b602060405180830381600087803b158015611ea357600080fd5b505af1925050508015611ed457506040513d601f19601f82011682018060405250810190611ed1919061285e565b60015b611f57573d8060008114611f04576040519150601f19603f3d011682016040523d82523d6000602084013e611f09565b606091505b50600081511415611f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4690612e37565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611fac565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201b90612fd7565b60405180910390fd5b61202d8161155e565b1561206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490612e97565b60405180910390fd5b61207960008383611e13565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120c99190613229565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461218a60008383611e18565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546121bd9061339a565b90600052602060002090601f0160209004810192826121df5760008555612226565b82601f106121f857805160ff1916838001178555612226565b82800160010185558215612226579182015b8281111561222557825182559160200191906001019061220a565b5b5090506122339190612237565b5090565b5b80821115612250576000816000905550600101612238565b5090565b600061226761226284613117565b6130f2565b9050808382526020820190508285602086028201111561228a57612289613567565b5b60005b858110156122ba57816122a088826123b8565b84526020840193506020830192505060018101905061228d565b5050509392505050565b60006122d76122d284613143565b6130f2565b905080838252602082019050828560208602820111156122fa576122f9613567565b5b60005b8581101561232a578161231088826124c4565b8452602084019350602083019250506001810190506122fd565b5050509392505050565b60006123476123428461316f565b6130f2565b9050828152602081018484840111156123635761236261356c565b5b61236e848285613358565b509392505050565b6000612389612384846131a0565b6130f2565b9050828152602081018484840111156123a5576123a461356c565b5b6123b0848285613358565b509392505050565b6000813590506123c781613a8b565b92915050565b600082601f8301126123e2576123e1613562565b5b81356123f2848260208601612254565b91505092915050565b600082601f8301126124105761240f613562565b5b81356124208482602086016122c4565b91505092915050565b60008135905061243881613aa2565b92915050565b60008135905061244d81613ab9565b92915050565b60008151905061246281613ab9565b92915050565b600082601f83011261247d5761247c613562565b5b813561248d848260208601612334565b91505092915050565b600082601f8301126124ab576124aa613562565b5b81356124bb848260208601612376565b91505092915050565b6000813590506124d381613ad0565b92915050565b6000602082840312156124ef576124ee613576565b5b60006124fd848285016123b8565b91505092915050565b6000806040838503121561251d5761251c613576565b5b600061252b858286016123b8565b925050602061253c858286016123b8565b9150509250929050565b60008060006060848603121561255f5761255e613576565b5b600061256d868287016123b8565b935050602061257e868287016123b8565b925050604061258f868287016124c4565b9150509250925092565b600080600080608085870312156125b3576125b2613576565b5b60006125c1878288016123b8565b94505060206125d2878288016123b8565b93505060406125e3878288016124c4565b925050606085013567ffffffffffffffff81111561260457612603613571565b5b61261087828801612468565b91505092959194509250565b6000806040838503121561263357612632613576565b5b6000612641858286016123b8565b925050602061265285828601612429565b9150509250929050565b6000806040838503121561267357612672613576565b5b6000612681858286016123b8565b9250506020612692858286016124c4565b9150509250929050565b6000602082840312156126b2576126b1613576565b5b600082013567ffffffffffffffff8111156126d0576126cf613571565b5b6126dc848285016123cd565b91505092915050565b600080604083850312156126fc576126fb613576565b5b600083013567ffffffffffffffff81111561271a57612719613571565b5b612726858286016123cd565b925050602083013567ffffffffffffffff81111561274757612746613571565b5b612753858286016123fb565b9150509250929050565b6000806040838503121561277457612773613576565b5b600083013567ffffffffffffffff81111561279257612791613571565b5b61279e858286016123fb565b92505060206127af858286016123b8565b9150509250929050565b600080604083850312156127d0576127cf613576565b5b600083013567ffffffffffffffff8111156127ee576127ed613571565b5b6127fa858286016123fb565b925050602083013567ffffffffffffffff81111561281b5761281a613571565b5b612827858286016123cd565b9150509250929050565b60006020828403121561284757612846613576565b5b60006128558482850161243e565b91505092915050565b60006020828403121561287457612873613576565b5b600061288284828501612453565b91505092915050565b6000602082840312156128a1576128a0613576565b5b600082013567ffffffffffffffff8111156128bf576128be613571565b5b6128cb84828501612496565b91505092915050565b6000602082840312156128ea576128e9613576565b5b60006128f8848285016124c4565b91505092915050565b6000806040838503121561291857612917613576565b5b6000612926858286016124c4565b9250506020612937858286016123b8565b9150509250929050565b61294a816132e4565b82525050565b612959816132f6565b82525050565b600061296a826131e6565b61297481856131fc565b9350612984818560208601613367565b61298d8161357b565b840191505092915050565b60006129a3826131f1565b6129ad818561320d565b93506129bd818560208601613367565b6129c68161357b565b840191505092915050565b60006129dc826131f1565b6129e6818561321e565b93506129f6818560208601613367565b80840191505092915050565b60008154612a0f8161339a565b612a19818661321e565b94506001821660008114612a345760018114612a4557612a78565b60ff19831686528186019350612a78565b612a4e856131d1565b60005b83811015612a7057815481890152600182019150602081019050612a51565b838801955050505b50505092915050565b6000612a8e60328361320d565b9150612a998261358c565b604082019050919050565b6000612ab160268361320d565b9150612abc826135db565b604082019050919050565b6000612ad460258361320d565b9150612adf8261362a565b604082019050919050565b6000612af7601c8361320d565b9150612b0282613679565b602082019050919050565b6000612b1a60248361320d565b9150612b25826136a2565b604082019050919050565b6000612b3d60198361320d565b9150612b48826136f1565b602082019050919050565b6000612b60602c8361320d565b9150612b6b8261371a565b604082019050919050565b6000612b8360188361320d565b9150612b8e82613769565b602082019050919050565b6000612ba660388361320d565b9150612bb182613792565b604082019050919050565b6000612bc960138361320d565b9150612bd4826137e1565b602082019050919050565b6000612bec602a8361320d565b9150612bf78261380a565b604082019050919050565b6000612c0f60298361320d565b9150612c1a82613859565b604082019050919050565b6000612c32600c8361320d565b9150612c3d826138a8565b602082019050919050565b6000612c5560208361320d565b9150612c60826138d1565b602082019050919050565b6000612c78602c8361320d565b9150612c83826138fa565b604082019050919050565b6000612c9b60108361320d565b9150612ca682613949565b602082019050919050565b6000612cbe60208361320d565b9150612cc982613972565b602082019050919050565b6000612ce160218361320d565b9150612cec8261399b565b604082019050919050565b6000612d0460118361320d565b9150612d0f826139ea565b602082019050919050565b6000612d2760318361320d565b9150612d3282613a13565b604082019050919050565b6000612d4a600f8361320d565b9150612d5582613a62565b602082019050919050565b612d698161334e565b82525050565b6000612d7b8285612a02565b9150612d8782846129d1565b91508190509392505050565b6000602082019050612da86000830184612941565b92915050565b6000608082019050612dc36000830187612941565b612dd06020830186612941565b612ddd6040830185612d60565b8181036060830152612def818461295f565b905095945050505050565b6000602082019050612e0f6000830184612950565b92915050565b60006020820190508181036000830152612e2f8184612998565b905092915050565b60006020820190508181036000830152612e5081612a81565b9050919050565b60006020820190508181036000830152612e7081612aa4565b9050919050565b60006020820190508181036000830152612e9081612ac7565b9050919050565b60006020820190508181036000830152612eb081612aea565b9050919050565b60006020820190508181036000830152612ed081612b0d565b9050919050565b60006020820190508181036000830152612ef081612b30565b9050919050565b60006020820190508181036000830152612f1081612b53565b9050919050565b60006020820190508181036000830152612f3081612b76565b9050919050565b60006020820190508181036000830152612f5081612b99565b9050919050565b60006020820190508181036000830152612f7081612bbc565b9050919050565b60006020820190508181036000830152612f9081612bdf565b9050919050565b60006020820190508181036000830152612fb081612c02565b9050919050565b60006020820190508181036000830152612fd081612c25565b9050919050565b60006020820190508181036000830152612ff081612c48565b9050919050565b6000602082019050818103600083015261301081612c6b565b9050919050565b6000602082019050818103600083015261303081612c8e565b9050919050565b6000602082019050818103600083015261305081612cb1565b9050919050565b6000602082019050818103600083015261307081612cd4565b9050919050565b6000602082019050818103600083015261309081612cf7565b9050919050565b600060208201905081810360008301526130b081612d1a565b9050919050565b600060208201905081810360008301526130d081612d3d565b9050919050565b60006020820190506130ec6000830184612d60565b92915050565b60006130fc61310d565b905061310882826133cc565b919050565b6000604051905090565b600067ffffffffffffffff82111561313257613131613533565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561315e5761315d613533565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561318a57613189613533565b5b6131938261357b565b9050602081019050919050565b600067ffffffffffffffff8211156131bb576131ba613533565b5b6131c48261357b565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006132348261334e565b915061323f8361334e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561327457613273613477565b5b828201905092915050565b600061328a8261334e565b91506132958361334e565b9250826132a5576132a46134a6565b5b828204905092915050565b60006132bb8261334e565b91506132c68361334e565b9250828210156132d9576132d8613477565b5b828203905092915050565b60006132ef8261332e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561338557808201518184015260208101905061336a565b83811115613394576000848401525b50505050565b600060028204905060018216806133b257607f821691505b602082108114156133c6576133c56134d5565b5b50919050565b6133d58261357b565b810181811067ffffffffffffffff821117156133f4576133f3613533565b5b80604052505050565b60006134088261334e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561343b5761343a613477565b5b600182019050919050565b60006134518261334e565b915061345c8361334e565b92508261346c5761346b6134a6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5f6964206c656e206d757374203d3d205f616472206c656e0000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f616c726561647920696e697469616c697a656400000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6e756d206d757374203e20300000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5f6964206c656e206d757374203e203000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5f616472206c656e206d757374203e2030000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f5f616472206e756d206973206572720000000000000000000000000000000000600082015250565b613a94816132e4565b8114613a9f57600080fd5b50565b613aab816132f6565b8114613ab657600080fd5b50565b613ac281613302565b8114613acd57600080fd5b50565b613ad98161334e565b8114613ae457600080fd5b5056fea2646970667358221220c7e05697eb8aa39c8ee7bdcb1b95ecf2a3fa6ca9c65f19fddd4f024b4fa97c2564736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c8063715018a6116100de57806399b7057911610097578063bd075b8411610071578063bd075b84146103fa578063c87b56dd14610416578063e985e9c514610446578063f2fde38b1461047657610173565b806399b70579146103a4578063a22cb465146103c2578063b88d4fde146103de57610173565b8063715018a61461031c5780637a003a72146103265780638129fc1c146103425780638a8495f61461034c5780638da5cb5b1461036857806395d89b411461038657610173565b80633c2579a8116101305780633c2579a81461024a57806342842e0e1461026657806355f804b3146102825780636352211e1461029e5780636c0360eb146102ce57806370a08231146102ec57610173565b806301ffc9a71461017857806304aedc37146101a857806306fdde03146101c4578063081812fc146101e2578063095ea7b31461021257806323b872dd1461022e575b600080fd5b610192600480360381019061018d9190612831565b610492565b60405161019f9190612dfa565b60405180910390f35b6101c260048036038101906101bd91906126e5565b610574565b005b6101cc61073b565b6040516101d99190612e15565b60405180910390f35b6101fc60048036038101906101f791906128d4565b6107cd565b6040516102099190612d93565b60405180910390f35b61022c6004803603810190610227919061265c565b610852565b005b61024860048036038101906102439190612546565b61096a565b005b610264600480360381019061025f919061275d565b6109ca565b005b610280600480360381019061027b9190612546565b610a67565b005b61029c6004803603810190610297919061288b565b610a87565b005b6102b860048036038101906102b391906128d4565b610b1d565b6040516102c59190612d93565b60405180910390f35b6102d6610bcf565b6040516102e39190612e15565b60405180910390f35b610306600480360381019061030191906124d9565b610c5d565b60405161031391906130d7565b60405180910390f35b610324610d15565b005b610340600480360381019061033b9190612901565b610d9d565b005b61034a610ea3565b005b610366600480360381019061036191906127b9565b610fd0565b005b610370611087565b60405161037d9190612d93565b60405180910390f35b61038e6110b1565b60405161039b9190612e15565b60405180910390f35b6103ac611143565b6040516103b991906130d7565b60405180910390f35b6103dc60048036038101906103d7919061261c565b611149565b005b6103f860048036038101906103f39190612599565b61115f565b005b610414600480360381019061040f919061269c565b6111c1565b005b610430600480360381019061042b91906128d4565b6112e2565b60405161043d9190612e15565b60405180910390f35b610460600480360381019061045b9190612506565b611342565b60405161046d9190612dfa565b60405180910390f35b610490600480360381019061048b91906124d9565b6113d6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061055d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061056d575061056c826114ce565b5b9050919050565b61057c611538565b73ffffffffffffffffffffffffffffffffffffffff1661059a611087565b73ffffffffffffffffffffffffffffffffffffffff16146105f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e790613037565b60405180910390fd5b6000825111610634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062b90613077565b60405180910390fd5b8051825114610678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066f90613077565b60405180910390fd5b60005b8251811015610736576305f5e10082828151811061069c5761069b613504565b5b602002602001015110156106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dc906130b7565b60405180910390fd5b6107238382815181106106fb576106fa613504565b5b602002602001015183838151811061071657610715613504565b5b6020026020010151611540565b808061072e906133fd565b91505061067b565b505050565b60606000805461074a9061339a565b80601f01602080910402602001604051908101604052809291908181526020018280546107769061339a565b80156107c35780601f10610798576101008083540402835291602001916107c3565b820191906000526020600020905b8154815290600101906020018083116107a657829003601f168201915b5050505050905090565b60006107d88261155e565b610817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080e90612ff7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085d82610b1d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c590613057565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108ed611538565b73ffffffffffffffffffffffffffffffffffffffff16148061091c575061091b81610916611538565b611342565b5b61095b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095290612f37565b60405180910390fd5b61096583836115ca565b505050565b61097b610975611538565b82611683565b6109ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b190613097565b60405180910390fd5b6109c5838383611761565b505050565b6000825111610a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0590613017565b60405180910390fd5b60005b8251811015610a6257610a4f3383858481518110610a3257610a31613504565b5b60200260200101516040518060200160405280600081525061115f565b8080610a5a906133fd565b915050610a11565b505050565b610a828383836040518060200160405280600081525061115f565b505050565b610a8f611538565b73ffffffffffffffffffffffffffffffffffffffff16610aad611087565b73ffffffffffffffffffffffffffffffffffffffff1614610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa90613037565b60405180910390fd5b8060079080519060200190610b199291906121b1565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbd90612f97565b60405180910390fd5b80915050919050565b60078054610bdc9061339a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c089061339a565b8015610c555780601f10610c2a57610100808354040283529160200191610c55565b820191906000526020600020905b815481529060010190602001808311610c3857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590612f77565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d1d611538565b73ffffffffffffffffffffffffffffffffffffffff16610d3b611087565b73ffffffffffffffffffffffffffffffffffffffff1614610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890613037565b60405180910390fd5b610d9b60006119c8565b565b610da5611538565b73ffffffffffffffffffffffffffffffffffffffff16610dc3611087565b73ffffffffffffffffffffffffffffffffffffffff1614610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090613037565b60405180910390fd5b60008211610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5390612fb7565b60405180910390fd5b60005b82811015610e9e57610e7382600854611540565b60086000815480929190610e86906133fd565b91905055508080610e96906133fd565b915050610e5f565b505050565b600660149054906101000a900460ff1615610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90612f57565b60405180910390fd5b60086000815480929190610f06906133fd565b9190505550610f1b610f16611538565b6119c8565b6040518060400160405280600881526020017f65617250686f6e6500000000000000000000000000000000000000000000000081525060009080519060200190610f669291906121b1565b506040518060400160405280600281526020017f455000000000000000000000000000000000000000000000000000000000000081525060019080519060200190610fb29291906121b1565b506001600660146101000a81548160ff021916908315150217905550565b8051825114611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90612f17565b60405180910390fd5b60005b81518110156110825761106f3383838151811061103757611036613504565b5b602002602001015185848151811061105257611051613504565b5b60200260200101516040518060200160405280600081525061115f565b808061107a906133fd565b915050611017565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546110c09061339a565b80601f01602080910402602001604051908101604052809291908181526020018280546110ec9061339a565b80156111395780601f1061110e57610100808354040283529160200191611139565b820191906000526020600020905b81548152906001019060200180831161111c57829003601f168201915b5050505050905090565b60085481565b61115b611154611538565b8383611a8e565b5050565b61117061116a611538565b83611683565b6111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690613097565b60405180910390fd5b6111bb84848484611bfb565b50505050565b6111c9611538565b73ffffffffffffffffffffffffffffffffffffffff166111e7611087565b73ffffffffffffffffffffffffffffffffffffffff161461123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490613037565b60405180910390fd5b6000815111611281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127890613077565b60405180910390fd5b60005b81518110156112de576112b38282815181106112a3576112a2613504565b5b6020026020010151600854611540565b600860008154809291906112c6906133fd565b919050555080806112d6906133fd565b915050611284565b5050565b60606000600780546112f39061339a565b90501161130f576040518060200160405280600081525061133b565b600761131a83611c57565b60405160200161132b929190612d6f565b6040516020818303038152906040525b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113de611538565b73ffffffffffffffffffffffffffffffffffffffff166113fc611087565b73ffffffffffffffffffffffffffffffffffffffff1614611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990613037565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b990612e57565b60405180910390fd5b6114cb816119c8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b61155a828260405180602001604052806000815250611db8565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661163d83610b1d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061168e8261155e565b6116cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c490612ef7565b60405180910390fd5b60006116d883610b1d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061171a57506117198185611342565b5b8061175857508373ffffffffffffffffffffffffffffffffffffffff16611740846107cd565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661178182610b1d565b73ffffffffffffffffffffffffffffffffffffffff16146117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ce90612e77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e90612eb7565b60405180910390fd5b611852838383611e13565b61185d6000826115ca565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118ad91906132b0565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119049190613229565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119c3838383611e18565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af490612ed7565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bee9190612dfa565b60405180910390a3505050565b611c06848484611761565b611c1284848484611e1d565b611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890612e37565b60405180910390fd5b50505050565b60606000821415611c9f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611db3565b600082905060005b60008214611cd1578080611cba906133fd565b915050600a82611cca919061327f565b9150611ca7565b60008167ffffffffffffffff811115611ced57611cec613533565b5b6040519080825280601f01601f191660200182016040528015611d1f5781602001600182028036833780820191505090505b5090505b60008514611dac57600182611d3891906132b0565b9150600a85611d479190613446565b6030611d539190613229565b60f81b818381518110611d6957611d68613504565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611da5919061327f565b9450611d23565b8093505050505b919050565b611dc28383611fb4565b611dcf6000848484611e1d565b611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0590612e37565b60405180910390fd5b505050565b505050565b505050565b6000611e3e8473ffffffffffffffffffffffffffffffffffffffff1661218e565b15611fa7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e67611538565b8786866040518563ffffffff1660e01b8152600401611e899493929190612dae565b602060405180830381600087803b158015611ea357600080fd5b505af1925050508015611ed457506040513d601f19601f82011682018060405250810190611ed1919061285e565b60015b611f57573d8060008114611f04576040519150601f19603f3d011682016040523d82523d6000602084013e611f09565b606091505b50600081511415611f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4690612e37565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611fac565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201b90612fd7565b60405180910390fd5b61202d8161155e565b1561206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490612e97565b60405180910390fd5b61207960008383611e13565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120c99190613229565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461218a60008383611e18565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546121bd9061339a565b90600052602060002090601f0160209004810192826121df5760008555612226565b82601f106121f857805160ff1916838001178555612226565b82800160010185558215612226579182015b8281111561222557825182559160200191906001019061220a565b5b5090506122339190612237565b5090565b5b80821115612250576000816000905550600101612238565b5090565b600061226761226284613117565b6130f2565b9050808382526020820190508285602086028201111561228a57612289613567565b5b60005b858110156122ba57816122a088826123b8565b84526020840193506020830192505060018101905061228d565b5050509392505050565b60006122d76122d284613143565b6130f2565b905080838252602082019050828560208602820111156122fa576122f9613567565b5b60005b8581101561232a578161231088826124c4565b8452602084019350602083019250506001810190506122fd565b5050509392505050565b60006123476123428461316f565b6130f2565b9050828152602081018484840111156123635761236261356c565b5b61236e848285613358565b509392505050565b6000612389612384846131a0565b6130f2565b9050828152602081018484840111156123a5576123a461356c565b5b6123b0848285613358565b509392505050565b6000813590506123c781613a8b565b92915050565b600082601f8301126123e2576123e1613562565b5b81356123f2848260208601612254565b91505092915050565b600082601f8301126124105761240f613562565b5b81356124208482602086016122c4565b91505092915050565b60008135905061243881613aa2565b92915050565b60008135905061244d81613ab9565b92915050565b60008151905061246281613ab9565b92915050565b600082601f83011261247d5761247c613562565b5b813561248d848260208601612334565b91505092915050565b600082601f8301126124ab576124aa613562565b5b81356124bb848260208601612376565b91505092915050565b6000813590506124d381613ad0565b92915050565b6000602082840312156124ef576124ee613576565b5b60006124fd848285016123b8565b91505092915050565b6000806040838503121561251d5761251c613576565b5b600061252b858286016123b8565b925050602061253c858286016123b8565b9150509250929050565b60008060006060848603121561255f5761255e613576565b5b600061256d868287016123b8565b935050602061257e868287016123b8565b925050604061258f868287016124c4565b9150509250925092565b600080600080608085870312156125b3576125b2613576565b5b60006125c1878288016123b8565b94505060206125d2878288016123b8565b93505060406125e3878288016124c4565b925050606085013567ffffffffffffffff81111561260457612603613571565b5b61261087828801612468565b91505092959194509250565b6000806040838503121561263357612632613576565b5b6000612641858286016123b8565b925050602061265285828601612429565b9150509250929050565b6000806040838503121561267357612672613576565b5b6000612681858286016123b8565b9250506020612692858286016124c4565b9150509250929050565b6000602082840312156126b2576126b1613576565b5b600082013567ffffffffffffffff8111156126d0576126cf613571565b5b6126dc848285016123cd565b91505092915050565b600080604083850312156126fc576126fb613576565b5b600083013567ffffffffffffffff81111561271a57612719613571565b5b612726858286016123cd565b925050602083013567ffffffffffffffff81111561274757612746613571565b5b612753858286016123fb565b9150509250929050565b6000806040838503121561277457612773613576565b5b600083013567ffffffffffffffff81111561279257612791613571565b5b61279e858286016123fb565b92505060206127af858286016123b8565b9150509250929050565b600080604083850312156127d0576127cf613576565b5b600083013567ffffffffffffffff8111156127ee576127ed613571565b5b6127fa858286016123fb565b925050602083013567ffffffffffffffff81111561281b5761281a613571565b5b612827858286016123cd565b9150509250929050565b60006020828403121561284757612846613576565b5b60006128558482850161243e565b91505092915050565b60006020828403121561287457612873613576565b5b600061288284828501612453565b91505092915050565b6000602082840312156128a1576128a0613576565b5b600082013567ffffffffffffffff8111156128bf576128be613571565b5b6128cb84828501612496565b91505092915050565b6000602082840312156128ea576128e9613576565b5b60006128f8848285016124c4565b91505092915050565b6000806040838503121561291857612917613576565b5b6000612926858286016124c4565b9250506020612937858286016123b8565b9150509250929050565b61294a816132e4565b82525050565b612959816132f6565b82525050565b600061296a826131e6565b61297481856131fc565b9350612984818560208601613367565b61298d8161357b565b840191505092915050565b60006129a3826131f1565b6129ad818561320d565b93506129bd818560208601613367565b6129c68161357b565b840191505092915050565b60006129dc826131f1565b6129e6818561321e565b93506129f6818560208601613367565b80840191505092915050565b60008154612a0f8161339a565b612a19818661321e565b94506001821660008114612a345760018114612a4557612a78565b60ff19831686528186019350612a78565b612a4e856131d1565b60005b83811015612a7057815481890152600182019150602081019050612a51565b838801955050505b50505092915050565b6000612a8e60328361320d565b9150612a998261358c565b604082019050919050565b6000612ab160268361320d565b9150612abc826135db565b604082019050919050565b6000612ad460258361320d565b9150612adf8261362a565b604082019050919050565b6000612af7601c8361320d565b9150612b0282613679565b602082019050919050565b6000612b1a60248361320d565b9150612b25826136a2565b604082019050919050565b6000612b3d60198361320d565b9150612b48826136f1565b602082019050919050565b6000612b60602c8361320d565b9150612b6b8261371a565b604082019050919050565b6000612b8360188361320d565b9150612b8e82613769565b602082019050919050565b6000612ba660388361320d565b9150612bb182613792565b604082019050919050565b6000612bc960138361320d565b9150612bd4826137e1565b602082019050919050565b6000612bec602a8361320d565b9150612bf78261380a565b604082019050919050565b6000612c0f60298361320d565b9150612c1a82613859565b604082019050919050565b6000612c32600c8361320d565b9150612c3d826138a8565b602082019050919050565b6000612c5560208361320d565b9150612c60826138d1565b602082019050919050565b6000612c78602c8361320d565b9150612c83826138fa565b604082019050919050565b6000612c9b60108361320d565b9150612ca682613949565b602082019050919050565b6000612cbe60208361320d565b9150612cc982613972565b602082019050919050565b6000612ce160218361320d565b9150612cec8261399b565b604082019050919050565b6000612d0460118361320d565b9150612d0f826139ea565b602082019050919050565b6000612d2760318361320d565b9150612d3282613a13565b604082019050919050565b6000612d4a600f8361320d565b9150612d5582613a62565b602082019050919050565b612d698161334e565b82525050565b6000612d7b8285612a02565b9150612d8782846129d1565b91508190509392505050565b6000602082019050612da86000830184612941565b92915050565b6000608082019050612dc36000830187612941565b612dd06020830186612941565b612ddd6040830185612d60565b8181036060830152612def818461295f565b905095945050505050565b6000602082019050612e0f6000830184612950565b92915050565b60006020820190508181036000830152612e2f8184612998565b905092915050565b60006020820190508181036000830152612e5081612a81565b9050919050565b60006020820190508181036000830152612e7081612aa4565b9050919050565b60006020820190508181036000830152612e9081612ac7565b9050919050565b60006020820190508181036000830152612eb081612aea565b9050919050565b60006020820190508181036000830152612ed081612b0d565b9050919050565b60006020820190508181036000830152612ef081612b30565b9050919050565b60006020820190508181036000830152612f1081612b53565b9050919050565b60006020820190508181036000830152612f3081612b76565b9050919050565b60006020820190508181036000830152612f5081612b99565b9050919050565b60006020820190508181036000830152612f7081612bbc565b9050919050565b60006020820190508181036000830152612f9081612bdf565b9050919050565b60006020820190508181036000830152612fb081612c02565b9050919050565b60006020820190508181036000830152612fd081612c25565b9050919050565b60006020820190508181036000830152612ff081612c48565b9050919050565b6000602082019050818103600083015261301081612c6b565b9050919050565b6000602082019050818103600083015261303081612c8e565b9050919050565b6000602082019050818103600083015261305081612cb1565b9050919050565b6000602082019050818103600083015261307081612cd4565b9050919050565b6000602082019050818103600083015261309081612cf7565b9050919050565b600060208201905081810360008301526130b081612d1a565b9050919050565b600060208201905081810360008301526130d081612d3d565b9050919050565b60006020820190506130ec6000830184612d60565b92915050565b60006130fc61310d565b905061310882826133cc565b919050565b6000604051905090565b600067ffffffffffffffff82111561313257613131613533565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561315e5761315d613533565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561318a57613189613533565b5b6131938261357b565b9050602081019050919050565b600067ffffffffffffffff8211156131bb576131ba613533565b5b6131c48261357b565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006132348261334e565b915061323f8361334e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561327457613273613477565b5b828201905092915050565b600061328a8261334e565b91506132958361334e565b9250826132a5576132a46134a6565b5b828204905092915050565b60006132bb8261334e565b91506132c68361334e565b9250828210156132d9576132d8613477565b5b828203905092915050565b60006132ef8261332e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561338557808201518184015260208101905061336a565b83811115613394576000848401525b50505050565b600060028204905060018216806133b257607f821691505b602082108114156133c6576133c56134d5565b5b50919050565b6133d58261357b565b810181811067ffffffffffffffff821117156133f4576133f3613533565b5b80604052505050565b60006134088261334e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561343b5761343a613477565b5b600182019050919050565b60006134518261334e565b915061345c8361334e565b92508261346c5761346b6134a6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5f6964206c656e206d757374203d3d205f616472206c656e0000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f616c726561647920696e697469616c697a656400000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6e756d206d757374203e20300000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5f6964206c656e206d757374203e203000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5f616472206c656e206d757374203e2030000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f5f616472206e756d206973206572720000000000000000000000000000000000600082015250565b613a94816132e4565b8114613a9f57600080fd5b50565b613aab816132f6565b8114613ab657600080fd5b50565b613ac281613302565b8114613acd57600080fd5b50565b613ad98161334e565b8114613ae457600080fd5b5056fea2646970667358221220c7e05697eb8aa39c8ee7bdcb1b95ecf2a3fa6ca9c65f19fddd4f024b4fa97c2564736f6c63430008070033
Deployed Bytecode Sourcemap
39688:2234:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26519:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41523:386;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27464:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29024:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28547:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29774:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40757:251;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30184:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40140:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27158:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39755:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26888:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7336:103;;;:::i;:::-;;41282:232;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39881:253;;;:::i;:::-;;40461:282;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6685:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27633:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39815:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29317:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30440:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41022:246;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40250:200;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29543:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7594:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26519:305;26621:4;26673:25;26658:40;;;:11;:40;;;;:105;;;;26730:33;26715:48;;;:11;:48;;;;26658:105;:158;;;;26780:36;26804:11;26780:23;:36::i;:::-;26658:158;26638:178;;26519:305;;;:::o;41523:386::-;6916:12;:10;:12::i;:::-;6905:23;;:7;:5;:7::i;:::-;:23;;;6897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41651:1:::1;41637:4;:11;:15;41629:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;41707:3;:10;41692:4;:11;:25;41684:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;41753:9;41749:153;41771:4;:11;41767:1;:15;41749:153;;;41821:9;41811:3;41815:1;41811:6;;;;;;;;:::i;:::-;;;;;;;;:19;;41802:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;41864:26;41874:4;41879:1;41874:7;;;;;;;;:::i;:::-;;;;;;;;41883:3;41887:1;41883:6;;;;;;;;:::i;:::-;;;;;;;;41864:9;:26::i;:::-;41783:3;;;;;:::i;:::-;;;;41749:153;;;;41523:386:::0;;:::o;27464:100::-;27518:13;27551:5;27544:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27464:100;:::o;29024:221::-;29100:7;29128:16;29136:7;29128;:16::i;:::-;29120:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29213:15;:24;29229:7;29213:24;;;;;;;;;;;;;;;;;;;;;29206:31;;29024:221;;;:::o;28547:411::-;28628:13;28644:23;28659:7;28644:14;:23::i;:::-;28628:39;;28692:5;28686:11;;:2;:11;;;;28678:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28786:5;28770:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28795:37;28812:5;28819:12;:10;:12::i;:::-;28795:16;:37::i;:::-;28770:62;28748:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28929:21;28938:2;28942:7;28929:8;:21::i;:::-;28617:341;28547:411;;:::o;29774:339::-;29969:41;29988:12;:10;:12::i;:::-;30002:7;29969:18;:41::i;:::-;29961:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30077:28;30087:4;30093:2;30097:7;30077:9;:28::i;:::-;29774:339;;;:::o;40757:251::-;40863:1;40850:3;:10;:14;40842:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;40899:9;40895:109;40917:3;:10;40913:1;:14;40895:109;;;40947:45;40964:10;40975:4;40981:3;40985:1;40981:6;;;;;;;;:::i;:::-;;;;;;;;40947:45;;;;;;;;;;;;:16;:45::i;:::-;40928:3;;;;;:::i;:::-;;;;40895:109;;;;40757:251;;:::o;30184:185::-;30322:39;30339:4;30345:2;30349:7;30322:39;;;;;;;;;;;;:16;:39::i;:::-;30184:185;;;:::o;40140:104::-;6916:12;:10;:12::i;:::-;6905:23;;:7;:5;:7::i;:::-;:23;;;6897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40225:11:::1;40215:7;:21;;;;;;;;;;;;:::i;:::-;;40140:104:::0;:::o;27158:239::-;27230:7;27250:13;27266:7;:16;27274:7;27266:16;;;;;;;;;;;;;;;;;;;;;27250:32;;27318:1;27301:19;;:5;:19;;;;27293:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27384:5;27377:12;;;27158:239;;;:::o;39755:49::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26888:208::-;26960:7;27005:1;26988:19;;:5;:19;;;;26980:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27072:9;:16;27082:5;27072:16;;;;;;;;;;;;;;;;27065:23;;26888:208;;;:::o;7336:103::-;6916:12;:10;:12::i;:::-;6905:23;;:7;:5;:7::i;:::-;:23;;;6897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7401:30:::1;7428:1;7401:18;:30::i;:::-;7336:103::o:0;41282:232::-;6916:12;:10;:12::i;:::-;6905:23;;:7;:5;:7::i;:::-;:23;;;6897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41383:1:::1;41377:3;:7;41369:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;41415:9;41411:96;41433:3;41429:1;:7;41411:96;;;41456:24;41466:4;41472:7;;41456:9;:24::i;:::-;41486:7;;:9;;;;;;;;;:::i;:::-;;;;;;41437:3;;;;;:::i;:::-;;;;41411:96;;;;41282:232:::0;;:::o;39881:253::-;39936:11;;;;;;;;;;;39935:12;39927:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;39982:7;;:9;;;;;;;;;:::i;:::-;;;;;;40002:32;40021:12;:10;:12::i;:::-;40002:18;:32::i;:::-;40045:18;;;;;;;;;;;;;;;;;:5;:18;;;;;;;;;;;;:::i;:::-;;40074:14;;;;;;;;;;;;;;;;;:7;:14;;;;;;;;;;;;:::i;:::-;;40113:4;40099:11;;:18;;;;;;;;;;;;;;;;;;39881:253::o;40461:282::-;40576:4;:11;40562:3;:10;:25;40554:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40630:9;40626:113;40648:4;:11;40644:1;:15;40626:113;;;40679:48;40696:10;40707:4;40712:1;40707:7;;;;;;;;:::i;:::-;;;;;;;;40716:3;40720:1;40716:6;;;;;;;;:::i;:::-;;;;;;;;40679:48;;;;;;;;;;;;:16;:48::i;:::-;40660:3;;;;;:::i;:::-;;;;40626:113;;;;40461:282;;:::o;6685:87::-;6731:7;6758:6;;;;;;;;;;;6751:13;;6685:87;:::o;27633:104::-;27689:13;27722:7;27715:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27633:104;:::o;39815:22::-;;;;:::o;29317:155::-;29412:52;29431:12;:10;:12::i;:::-;29445:8;29455;29412:18;:52::i;:::-;29317:155;;:::o;30440:328::-;30615:41;30634:12;:10;:12::i;:::-;30648:7;30615:18;:41::i;:::-;30607:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30721:39;30735:4;30741:2;30745:7;30754:5;30721:13;:39::i;:::-;30440:328;;;;:::o;41022:246::-;6916:12;:10;:12::i;:::-;6905:23;;:7;:5;:7::i;:::-;:23;;;6897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41121:1:::1;41107:4;:11;:15;41099:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;41158:9;41154:107;41176:4;:11;41172:1;:15;41154:107;;;41207:27;41217:4;41222:1;41217:7;;;;;;;;:::i;:::-;;;;;;;;41226;;41207:9;:27::i;:::-;41240:7;;:9;;;;;;;;;:::i;:::-;;;;;;41188:3;;;;;:::i;:::-;;;;41154:107;;;;41022:246:::0;:::o;40250:200::-;40323:13;40380:1;40362:7;40356:21;;;;;:::i;:::-;;;:25;:86;;;;;;;;;;;;;;;;;40408:7;40417:18;:7;:16;:18::i;:::-;40391:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40356:86;40349:93;;40250:200;;;:::o;29543:164::-;29640:4;29664:18;:25;29683:5;29664:25;;;;;;;;;;;;;;;:35;29690:8;29664:35;;;;;;;;;;;;;;;;;;;;;;;;;29657:42;;29543:164;;;;:::o;7594:201::-;6916:12;:10;:12::i;:::-;6905:23;;:7;:5;:7::i;:::-;:23;;;6897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7703:1:::1;7683:22;;:8;:22;;;;7675:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7759:28;7778:8;7759:18;:28::i;:::-;7594:201:::0;:::o;19492:157::-;19577:4;19616:25;19601:40;;;:11;:40;;;;19594:47;;19492:157;;;:::o;5578:98::-;5631:7;5658:10;5651:17;;5578:98;:::o;33262:110::-;33338:26;33348:2;33352:7;33338:26;;;;;;;;;;;;:9;:26::i;:::-;33262:110;;:::o;32278:127::-;32343:4;32395:1;32367:30;;:7;:16;32375:7;32367:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32360:37;;32278:127;;;:::o;36424:174::-;36526:2;36499:15;:24;36515:7;36499:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36582:7;36578:2;36544:46;;36553:23;36568:7;36553:14;:23::i;:::-;36544:46;;;;;;;;;;;;36424:174;;:::o;32572:348::-;32665:4;32690:16;32698:7;32690;:16::i;:::-;32682:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32766:13;32782:23;32797:7;32782:14;:23::i;:::-;32766:39;;32835:5;32824:16;;:7;:16;;;:52;;;;32844:32;32861:5;32868:7;32844:16;:32::i;:::-;32824:52;:87;;;;32904:7;32880:31;;:20;32892:7;32880:11;:20::i;:::-;:31;;;32824:87;32816:96;;;32572:348;;;;:::o;35681:625::-;35840:4;35813:31;;:23;35828:7;35813:14;:23::i;:::-;:31;;;35805:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35919:1;35905:16;;:2;:16;;;;35897:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35975:39;35996:4;36002:2;36006:7;35975:20;:39::i;:::-;36079:29;36096:1;36100:7;36079:8;:29::i;:::-;36140:1;36121:9;:15;36131:4;36121:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36169:1;36152:9;:13;36162:2;36152:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36200:2;36181:7;:16;36189:7;36181:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36239:7;36235:2;36220:27;;36229:4;36220:27;;;;;;;;;;;;36260:38;36280:4;36286:2;36290:7;36260:19;:38::i;:::-;35681:625;;;:::o;7955:191::-;8029:16;8048:6;;;;;;;;;;;8029:25;;8074:8;8065:6;;:17;;;;;;;;;;;;;;;;;;8129:8;8098:40;;8119:8;8098:40;;;;;;;;;;;;8018:128;7955:191;:::o;36740:315::-;36895:8;36886:17;;:5;:17;;;;36878:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36982:8;36944:18;:25;36963:5;36944:25;;;;;;;;;;;;;;;:35;36970:8;36944:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37028:8;37006:41;;37021:5;37006:41;;;37038:8;37006:41;;;;;;:::i;:::-;;;;;;;;36740:315;;;:::o;31650:::-;31807:28;31817:4;31823:2;31827:7;31807:9;:28::i;:::-;31854:48;31877:4;31883:2;31887:7;31896:5;31854:22;:48::i;:::-;31846:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31650:315;;;;:::o;3140:723::-;3196:13;3426:1;3417:5;:10;3413:53;;;3444:10;;;;;;;;;;;;;;;;;;;;;3413:53;3476:12;3491:5;3476:20;;3507:14;3532:78;3547:1;3539:4;:9;3532:78;;3565:8;;;;;:::i;:::-;;;;3596:2;3588:10;;;;;:::i;:::-;;;3532:78;;;3620:19;3652:6;3642:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3620:39;;3670:154;3686:1;3677:5;:10;3670:154;;3714:1;3704:11;;;;;:::i;:::-;;;3781:2;3773:5;:10;;;;:::i;:::-;3760:2;:24;;;;:::i;:::-;3747:39;;3730:6;3737;3730:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3810:2;3801:11;;;;;:::i;:::-;;;3670:154;;;3848:6;3834:21;;;;;3140:723;;;;:::o;33599:321::-;33729:18;33735:2;33739:7;33729:5;:18::i;:::-;33780:54;33811:1;33815:2;33819:7;33828:5;33780:22;:54::i;:::-;33758:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33599:321;;;:::o;38991:126::-;;;;:::o;39502:125::-;;;;:::o;37620:799::-;37775:4;37796:15;:2;:13;;;:15::i;:::-;37792:620;;;37848:2;37832:36;;;37869:12;:10;:12::i;:::-;37883:4;37889:7;37898:5;37832:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37828:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38091:1;38074:6;:13;:18;38070:272;;;38117:60;;;;;;;;;;:::i;:::-;;;;;;;;38070:272;38292:6;38286:13;38277:6;38273:2;38269:15;38262:38;37828:529;37965:41;;;37955:51;;;:6;:51;;;;37948:58;;;;;37792:620;38396:4;38389:11;;37620:799;;;;;;;:::o;34256:439::-;34350:1;34336:16;;:2;:16;;;;34328:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34409:16;34417:7;34409;:16::i;:::-;34408:17;34400:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34471:45;34500:1;34504:2;34508:7;34471:20;:45::i;:::-;34546:1;34529:9;:13;34539:2;34529:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34577:2;34558:7;:16;34566:7;34558:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34622:7;34618:2;34597:33;;34614:1;34597:33;;;;;;;;;;;;34643:44;34671:1;34675:2;34679:7;34643:19;:44::i;:::-;34256:439;;:::o;9386:326::-;9446:4;9703:1;9681:7;:19;;;:23;9674:30;;9386:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:619::-;5445:6;5453;5461;5510:2;5498:9;5489:7;5485:23;5481:32;5478:119;;;5516:79;;:::i;:::-;5478:119;5636:1;5661:53;5706:7;5697:6;5686:9;5682:22;5661:53;:::i;:::-;5651:63;;5607:117;5763:2;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5734:118;5891:2;5917:53;5962:7;5953:6;5942:9;5938:22;5917:53;:::i;:::-;5907:63;;5862:118;5368:619;;;;;:::o;5993:943::-;6088:6;6096;6104;6112;6161:3;6149:9;6140:7;6136:23;6132:33;6129:120;;;6168:79;;:::i;:::-;6129:120;6288:1;6313:53;6358:7;6349:6;6338:9;6334:22;6313:53;:::i;:::-;6303:63;;6259:117;6415:2;6441:53;6486:7;6477:6;6466:9;6462:22;6441:53;:::i;:::-;6431:63;;6386:118;6543:2;6569:53;6614:7;6605:6;6594:9;6590:22;6569:53;:::i;:::-;6559:63;;6514:118;6699:2;6688:9;6684:18;6671:32;6730:18;6722:6;6719:30;6716:117;;;6752:79;;:::i;:::-;6716:117;6857:62;6911:7;6902:6;6891:9;6887:22;6857:62;:::i;:::-;6847:72;;6642:287;5993:943;;;;;;;:::o;6942:468::-;7007:6;7015;7064:2;7052:9;7043:7;7039:23;7035:32;7032:119;;;7070:79;;:::i;:::-;7032:119;7190:1;7215:53;7260:7;7251:6;7240:9;7236:22;7215:53;:::i;:::-;7205:63;;7161:117;7317:2;7343:50;7385:7;7376:6;7365:9;7361:22;7343:50;:::i;:::-;7333:60;;7288:115;6942:468;;;;;:::o;7416:474::-;7484:6;7492;7541:2;7529:9;7520:7;7516:23;7512:32;7509:119;;;7547:79;;:::i;:::-;7509:119;7667:1;7692:53;7737:7;7728:6;7717:9;7713:22;7692:53;:::i;:::-;7682:63;;7638:117;7794:2;7820:53;7865:7;7856:6;7845:9;7841:22;7820:53;:::i;:::-;7810:63;;7765:118;7416:474;;;;;:::o;7896:539::-;7980:6;8029:2;8017:9;8008:7;8004:23;8000:32;7997:119;;;8035:79;;:::i;:::-;7997:119;8183:1;8172:9;8168:17;8155:31;8213:18;8205:6;8202:30;8199:117;;;8235:79;;:::i;:::-;8199:117;8340:78;8410:7;8401:6;8390:9;8386:22;8340:78;:::i;:::-;8330:88;;8126:302;7896:539;;;;:::o;8441:894::-;8559:6;8567;8616:2;8604:9;8595:7;8591:23;8587:32;8584:119;;;8622:79;;:::i;:::-;8584:119;8770:1;8759:9;8755:17;8742:31;8800:18;8792:6;8789:30;8786:117;;;8822:79;;:::i;:::-;8786:117;8927:78;8997:7;8988:6;8977:9;8973:22;8927:78;:::i;:::-;8917:88;;8713:302;9082:2;9071:9;9067:18;9054:32;9113:18;9105:6;9102:30;9099:117;;;9135:79;;:::i;:::-;9099:117;9240:78;9310:7;9301:6;9290:9;9286:22;9240:78;:::i;:::-;9230:88;;9025:303;8441:894;;;;;:::o;9341:684::-;9434:6;9442;9491:2;9479:9;9470:7;9466:23;9462:32;9459:119;;;9497:79;;:::i;:::-;9459:119;9645:1;9634:9;9630:17;9617:31;9675:18;9667:6;9664:30;9661:117;;;9697:79;;:::i;:::-;9661:117;9802:78;9872:7;9863:6;9852:9;9848:22;9802:78;:::i;:::-;9792:88;;9588:302;9929:2;9955:53;10000:7;9991:6;9980:9;9976:22;9955:53;:::i;:::-;9945:63;;9900:118;9341:684;;;;;:::o;10031:894::-;10149:6;10157;10206:2;10194:9;10185:7;10181:23;10177:32;10174:119;;;10212:79;;:::i;:::-;10174:119;10360:1;10349:9;10345:17;10332:31;10390:18;10382:6;10379:30;10376:117;;;10412:79;;:::i;:::-;10376:117;10517:78;10587:7;10578:6;10567:9;10563:22;10517:78;:::i;:::-;10507:88;;10303:302;10672:2;10661:9;10657:18;10644:32;10703:18;10695:6;10692:30;10689:117;;;10725:79;;:::i;:::-;10689:117;10830:78;10900:7;10891:6;10880:9;10876:22;10830:78;:::i;:::-;10820:88;;10615:303;10031:894;;;;;:::o;10931:327::-;10989:6;11038:2;11026:9;11017:7;11013:23;11009:32;11006:119;;;11044:79;;:::i;:::-;11006:119;11164:1;11189:52;11233:7;11224:6;11213:9;11209:22;11189:52;:::i;:::-;11179:62;;11135:116;10931:327;;;;:::o;11264:349::-;11333:6;11382:2;11370:9;11361:7;11357:23;11353:32;11350:119;;;11388:79;;:::i;:::-;11350:119;11508:1;11533:63;11588:7;11579:6;11568:9;11564:22;11533:63;:::i;:::-;11523:73;;11479:127;11264:349;;;;:::o;11619:509::-;11688:6;11737:2;11725:9;11716:7;11712:23;11708:32;11705:119;;;11743:79;;:::i;:::-;11705:119;11891:1;11880:9;11876:17;11863:31;11921:18;11913:6;11910:30;11907:117;;;11943:79;;:::i;:::-;11907:117;12048:63;12103:7;12094:6;12083:9;12079:22;12048:63;:::i;:::-;12038:73;;11834:287;11619:509;;;;:::o;12134:329::-;12193:6;12242:2;12230:9;12221:7;12217:23;12213:32;12210:119;;;12248:79;;:::i;:::-;12210:119;12368:1;12393:53;12438:7;12429:6;12418:9;12414:22;12393:53;:::i;:::-;12383:63;;12339:117;12134:329;;;;:::o;12469:474::-;12537:6;12545;12594:2;12582:9;12573:7;12569:23;12565:32;12562:119;;;12600:79;;:::i;:::-;12562:119;12720:1;12745:53;12790:7;12781:6;12770:9;12766:22;12745:53;:::i;:::-;12735:63;;12691:117;12847:2;12873:53;12918:7;12909:6;12898:9;12894:22;12873:53;:::i;:::-;12863:63;;12818:118;12469:474;;;;;:::o;12949:118::-;13036:24;13054:5;13036:24;:::i;:::-;13031:3;13024:37;12949:118;;:::o;13073:109::-;13154:21;13169:5;13154:21;:::i;:::-;13149:3;13142:34;13073:109;;:::o;13188:360::-;13274:3;13302:38;13334:5;13302:38;:::i;:::-;13356:70;13419:6;13414:3;13356:70;:::i;:::-;13349:77;;13435:52;13480:6;13475:3;13468:4;13461:5;13457:16;13435:52;:::i;:::-;13512:29;13534:6;13512:29;:::i;:::-;13507:3;13503:39;13496:46;;13278:270;13188:360;;;;:::o;13554:364::-;13642:3;13670:39;13703:5;13670:39;:::i;:::-;13725:71;13789:6;13784:3;13725:71;:::i;:::-;13718:78;;13805:52;13850:6;13845:3;13838:4;13831:5;13827:16;13805:52;:::i;:::-;13882:29;13904:6;13882:29;:::i;:::-;13877:3;13873:39;13866:46;;13646:272;13554:364;;;;:::o;13924:377::-;14030:3;14058:39;14091:5;14058:39;:::i;:::-;14113:89;14195:6;14190:3;14113:89;:::i;:::-;14106:96;;14211:52;14256:6;14251:3;14244:4;14237:5;14233:16;14211:52;:::i;:::-;14288:6;14283:3;14279:16;14272:23;;14034:267;13924:377;;;;:::o;14331:845::-;14434:3;14471:5;14465:12;14500:36;14526:9;14500:36;:::i;:::-;14552:89;14634:6;14629:3;14552:89;:::i;:::-;14545:96;;14672:1;14661:9;14657:17;14688:1;14683:137;;;;14834:1;14829:341;;;;14650:520;;14683:137;14767:4;14763:9;14752;14748:25;14743:3;14736:38;14803:6;14798:3;14794:16;14787:23;;14683:137;;14829:341;14896:38;14928:5;14896:38;:::i;:::-;14956:1;14970:154;14984:6;14981:1;14978:13;14970:154;;;15058:7;15052:14;15048:1;15043:3;15039:11;15032:35;15108:1;15099:7;15095:15;15084:26;;15006:4;15003:1;14999:12;14994:17;;14970:154;;;15153:6;15148:3;15144:16;15137:23;;14836:334;;14650:520;;14438:738;;14331:845;;;;:::o;15182:366::-;15324:3;15345:67;15409:2;15404:3;15345:67;:::i;:::-;15338:74;;15421:93;15510:3;15421:93;:::i;:::-;15539:2;15534:3;15530:12;15523:19;;15182:366;;;:::o;15554:::-;15696:3;15717:67;15781:2;15776:3;15717:67;:::i;:::-;15710:74;;15793:93;15882:3;15793:93;:::i;:::-;15911:2;15906:3;15902:12;15895:19;;15554:366;;;:::o;15926:::-;16068:3;16089:67;16153:2;16148:3;16089:67;:::i;:::-;16082:74;;16165:93;16254:3;16165:93;:::i;:::-;16283:2;16278:3;16274:12;16267:19;;15926:366;;;:::o;16298:::-;16440:3;16461:67;16525:2;16520:3;16461:67;:::i;:::-;16454:74;;16537:93;16626:3;16537:93;:::i;:::-;16655:2;16650:3;16646:12;16639:19;;16298:366;;;:::o;16670:::-;16812:3;16833:67;16897:2;16892:3;16833:67;:::i;:::-;16826:74;;16909:93;16998:3;16909:93;:::i;:::-;17027:2;17022:3;17018:12;17011:19;;16670:366;;;:::o;17042:::-;17184:3;17205:67;17269:2;17264:3;17205:67;:::i;:::-;17198:74;;17281:93;17370:3;17281:93;:::i;:::-;17399:2;17394:3;17390:12;17383:19;;17042:366;;;:::o;17414:::-;17556:3;17577:67;17641:2;17636:3;17577:67;:::i;:::-;17570:74;;17653:93;17742:3;17653:93;:::i;:::-;17771:2;17766:3;17762:12;17755:19;;17414:366;;;:::o;17786:::-;17928:3;17949:67;18013:2;18008:3;17949:67;:::i;:::-;17942:74;;18025:93;18114:3;18025:93;:::i;:::-;18143:2;18138:3;18134:12;18127:19;;17786:366;;;:::o;18158:::-;18300:3;18321:67;18385:2;18380:3;18321:67;:::i;:::-;18314:74;;18397:93;18486:3;18397:93;:::i;:::-;18515:2;18510:3;18506:12;18499:19;;18158:366;;;:::o;18530:::-;18672:3;18693:67;18757:2;18752:3;18693:67;:::i;:::-;18686:74;;18769:93;18858:3;18769:93;:::i;:::-;18887:2;18882:3;18878:12;18871:19;;18530:366;;;:::o;18902:::-;19044:3;19065:67;19129:2;19124:3;19065:67;:::i;:::-;19058:74;;19141:93;19230:3;19141:93;:::i;:::-;19259:2;19254:3;19250:12;19243:19;;18902:366;;;:::o;19274:::-;19416:3;19437:67;19501:2;19496:3;19437:67;:::i;:::-;19430:74;;19513:93;19602:3;19513:93;:::i;:::-;19631:2;19626:3;19622:12;19615:19;;19274:366;;;:::o;19646:::-;19788:3;19809:67;19873:2;19868:3;19809:67;:::i;:::-;19802:74;;19885:93;19974:3;19885:93;:::i;:::-;20003:2;19998:3;19994:12;19987:19;;19646:366;;;:::o;20018:::-;20160:3;20181:67;20245:2;20240:3;20181:67;:::i;:::-;20174:74;;20257:93;20346:3;20257:93;:::i;:::-;20375:2;20370:3;20366:12;20359:19;;20018:366;;;:::o;20390:::-;20532:3;20553:67;20617:2;20612:3;20553:67;:::i;:::-;20546:74;;20629:93;20718:3;20629:93;:::i;:::-;20747:2;20742:3;20738:12;20731:19;;20390:366;;;:::o;20762:::-;20904:3;20925:67;20989:2;20984:3;20925:67;:::i;:::-;20918:74;;21001:93;21090:3;21001:93;:::i;:::-;21119:2;21114:3;21110:12;21103:19;;20762:366;;;:::o;21134:::-;21276:3;21297:67;21361:2;21356:3;21297:67;:::i;:::-;21290:74;;21373:93;21462:3;21373:93;:::i;:::-;21491:2;21486:3;21482:12;21475:19;;21134:366;;;:::o;21506:::-;21648:3;21669:67;21733:2;21728:3;21669:67;:::i;:::-;21662:74;;21745:93;21834:3;21745:93;:::i;:::-;21863:2;21858:3;21854:12;21847:19;;21506:366;;;:::o;21878:::-;22020:3;22041:67;22105:2;22100:3;22041:67;:::i;:::-;22034:74;;22117:93;22206:3;22117:93;:::i;:::-;22235:2;22230:3;22226:12;22219:19;;21878:366;;;:::o;22250:::-;22392:3;22413:67;22477:2;22472:3;22413:67;:::i;:::-;22406:74;;22489:93;22578:3;22489:93;:::i;:::-;22607:2;22602:3;22598:12;22591:19;;22250:366;;;:::o;22622:::-;22764:3;22785:67;22849:2;22844:3;22785:67;:::i;:::-;22778:74;;22861:93;22950:3;22861:93;:::i;:::-;22979:2;22974:3;22970:12;22963:19;;22622:366;;;:::o;22994:118::-;23081:24;23099:5;23081:24;:::i;:::-;23076:3;23069:37;22994:118;;:::o;23118:429::-;23295:3;23317:92;23405:3;23396:6;23317:92;:::i;:::-;23310:99;;23426:95;23517:3;23508:6;23426:95;:::i;:::-;23419:102;;23538:3;23531:10;;23118:429;;;;;:::o;23553:222::-;23646:4;23684:2;23673:9;23669:18;23661:26;;23697:71;23765:1;23754:9;23750:17;23741:6;23697:71;:::i;:::-;23553:222;;;;:::o;23781:640::-;23976:4;24014:3;24003:9;23999:19;23991:27;;24028:71;24096:1;24085:9;24081:17;24072:6;24028:71;:::i;:::-;24109:72;24177:2;24166:9;24162:18;24153:6;24109:72;:::i;:::-;24191;24259:2;24248:9;24244:18;24235:6;24191:72;:::i;:::-;24310:9;24304:4;24300:20;24295:2;24284:9;24280:18;24273:48;24338:76;24409:4;24400:6;24338:76;:::i;:::-;24330:84;;23781:640;;;;;;;:::o;24427:210::-;24514:4;24552:2;24541:9;24537:18;24529:26;;24565:65;24627:1;24616:9;24612:17;24603:6;24565:65;:::i;:::-;24427:210;;;;:::o;24643:313::-;24756:4;24794:2;24783:9;24779:18;24771:26;;24843:9;24837:4;24833:20;24829:1;24818:9;24814:17;24807:47;24871:78;24944:4;24935:6;24871:78;:::i;:::-;24863:86;;24643:313;;;;:::o;24962:419::-;25128:4;25166:2;25155:9;25151:18;25143:26;;25215:9;25209:4;25205:20;25201:1;25190:9;25186:17;25179:47;25243:131;25369:4;25243:131;:::i;:::-;25235:139;;24962:419;;;:::o;25387:::-;25553:4;25591:2;25580:9;25576:18;25568:26;;25640:9;25634:4;25630:20;25626:1;25615:9;25611:17;25604:47;25668:131;25794:4;25668:131;:::i;:::-;25660:139;;25387:419;;;:::o;25812:::-;25978:4;26016:2;26005:9;26001:18;25993:26;;26065:9;26059:4;26055:20;26051:1;26040:9;26036:17;26029:47;26093:131;26219:4;26093:131;:::i;:::-;26085:139;;25812:419;;;:::o;26237:::-;26403:4;26441:2;26430:9;26426:18;26418:26;;26490:9;26484:4;26480:20;26476:1;26465:9;26461:17;26454:47;26518:131;26644:4;26518:131;:::i;:::-;26510:139;;26237:419;;;:::o;26662:::-;26828:4;26866:2;26855:9;26851:18;26843:26;;26915:9;26909:4;26905:20;26901:1;26890:9;26886:17;26879:47;26943:131;27069:4;26943:131;:::i;:::-;26935:139;;26662:419;;;:::o;27087:::-;27253:4;27291:2;27280:9;27276:18;27268:26;;27340:9;27334:4;27330:20;27326:1;27315:9;27311:17;27304:47;27368:131;27494:4;27368:131;:::i;:::-;27360:139;;27087:419;;;:::o;27512:::-;27678:4;27716:2;27705:9;27701:18;27693:26;;27765:9;27759:4;27755:20;27751:1;27740:9;27736:17;27729:47;27793:131;27919:4;27793:131;:::i;:::-;27785:139;;27512:419;;;:::o;27937:::-;28103:4;28141:2;28130:9;28126:18;28118:26;;28190:9;28184:4;28180:20;28176:1;28165:9;28161:17;28154:47;28218:131;28344:4;28218:131;:::i;:::-;28210:139;;27937:419;;;:::o;28362:::-;28528:4;28566:2;28555:9;28551:18;28543:26;;28615:9;28609:4;28605:20;28601:1;28590:9;28586:17;28579:47;28643:131;28769:4;28643:131;:::i;:::-;28635:139;;28362:419;;;:::o;28787:::-;28953:4;28991:2;28980:9;28976:18;28968:26;;29040:9;29034:4;29030:20;29026:1;29015:9;29011:17;29004:47;29068:131;29194:4;29068:131;:::i;:::-;29060:139;;28787:419;;;:::o;29212:::-;29378:4;29416:2;29405:9;29401:18;29393:26;;29465:9;29459:4;29455:20;29451:1;29440:9;29436:17;29429:47;29493:131;29619:4;29493:131;:::i;:::-;29485:139;;29212:419;;;:::o;29637:::-;29803:4;29841:2;29830:9;29826:18;29818:26;;29890:9;29884:4;29880:20;29876:1;29865:9;29861:17;29854:47;29918:131;30044:4;29918:131;:::i;:::-;29910:139;;29637:419;;;:::o;30062:::-;30228:4;30266:2;30255:9;30251:18;30243:26;;30315:9;30309:4;30305:20;30301:1;30290:9;30286:17;30279:47;30343:131;30469:4;30343:131;:::i;:::-;30335:139;;30062:419;;;:::o;30487:::-;30653:4;30691:2;30680:9;30676:18;30668:26;;30740:9;30734:4;30730:20;30726:1;30715:9;30711:17;30704:47;30768:131;30894:4;30768:131;:::i;:::-;30760:139;;30487:419;;;:::o;30912:::-;31078:4;31116:2;31105:9;31101:18;31093:26;;31165:9;31159:4;31155:20;31151:1;31140:9;31136:17;31129:47;31193:131;31319:4;31193:131;:::i;:::-;31185:139;;30912:419;;;:::o;31337:::-;31503:4;31541:2;31530:9;31526:18;31518:26;;31590:9;31584:4;31580:20;31576:1;31565:9;31561:17;31554:47;31618:131;31744:4;31618:131;:::i;:::-;31610:139;;31337:419;;;:::o;31762:::-;31928:4;31966:2;31955:9;31951:18;31943:26;;32015:9;32009:4;32005:20;32001:1;31990:9;31986:17;31979:47;32043:131;32169:4;32043:131;:::i;:::-;32035:139;;31762:419;;;:::o;32187:::-;32353:4;32391:2;32380:9;32376:18;32368:26;;32440:9;32434:4;32430:20;32426:1;32415:9;32411:17;32404:47;32468:131;32594:4;32468:131;:::i;:::-;32460:139;;32187:419;;;:::o;32612:::-;32778:4;32816:2;32805:9;32801:18;32793:26;;32865:9;32859:4;32855:20;32851:1;32840:9;32836:17;32829:47;32893:131;33019:4;32893:131;:::i;:::-;32885:139;;32612:419;;;:::o;33037:::-;33203:4;33241:2;33230:9;33226:18;33218:26;;33290:9;33284:4;33280:20;33276:1;33265:9;33261:17;33254:47;33318:131;33444:4;33318:131;:::i;:::-;33310:139;;33037:419;;;:::o;33462:::-;33628:4;33666:2;33655:9;33651:18;33643:26;;33715:9;33709:4;33705:20;33701:1;33690:9;33686:17;33679:47;33743:131;33869:4;33743:131;:::i;:::-;33735:139;;33462:419;;;:::o;33887:222::-;33980:4;34018:2;34007:9;34003:18;33995:26;;34031:71;34099:1;34088:9;34084:17;34075:6;34031:71;:::i;:::-;33887:222;;;;:::o;34115:129::-;34149:6;34176:20;;:::i;:::-;34166:30;;34205:33;34233:4;34225:6;34205:33;:::i;:::-;34115:129;;;:::o;34250:75::-;34283:6;34316:2;34310:9;34300:19;;34250:75;:::o;34331:311::-;34408:4;34498:18;34490:6;34487:30;34484:56;;;34520:18;;:::i;:::-;34484:56;34570:4;34562:6;34558:17;34550:25;;34630:4;34624;34620:15;34612:23;;34331:311;;;:::o;34648:::-;34725:4;34815:18;34807:6;34804:30;34801:56;;;34837:18;;:::i;:::-;34801:56;34887:4;34879:6;34875:17;34867:25;;34947:4;34941;34937:15;34929:23;;34648:311;;;:::o;34965:307::-;35026:4;35116:18;35108:6;35105:30;35102:56;;;35138:18;;:::i;:::-;35102:56;35176:29;35198:6;35176:29;:::i;:::-;35168:37;;35260:4;35254;35250:15;35242:23;;34965:307;;;:::o;35278:308::-;35340:4;35430:18;35422:6;35419:30;35416:56;;;35452:18;;:::i;:::-;35416:56;35490:29;35512:6;35490:29;:::i;:::-;35482:37;;35574:4;35568;35564:15;35556:23;;35278:308;;;:::o;35592:141::-;35641:4;35664:3;35656:11;;35687:3;35684:1;35677:14;35721:4;35718:1;35708:18;35700:26;;35592:141;;;:::o;35739:98::-;35790:6;35824:5;35818:12;35808:22;;35739:98;;;:::o;35843:99::-;35895:6;35929:5;35923:12;35913:22;;35843:99;;;:::o;35948:168::-;36031:11;36065:6;36060:3;36053:19;36105:4;36100:3;36096:14;36081:29;;35948:168;;;;:::o;36122:169::-;36206:11;36240:6;36235:3;36228:19;36280:4;36275:3;36271:14;36256:29;;36122:169;;;;:::o;36297:148::-;36399:11;36436:3;36421:18;;36297:148;;;;:::o;36451:305::-;36491:3;36510:20;36528:1;36510:20;:::i;:::-;36505:25;;36544:20;36562:1;36544:20;:::i;:::-;36539:25;;36698:1;36630:66;36626:74;36623:1;36620:81;36617:107;;;36704:18;;:::i;:::-;36617:107;36748:1;36745;36741:9;36734:16;;36451:305;;;;:::o;36762:185::-;36802:1;36819:20;36837:1;36819:20;:::i;:::-;36814:25;;36853:20;36871:1;36853:20;:::i;:::-;36848:25;;36892:1;36882:35;;36897:18;;:::i;:::-;36882:35;36939:1;36936;36932:9;36927:14;;36762:185;;;;:::o;36953:191::-;36993:4;37013:20;37031:1;37013:20;:::i;:::-;37008:25;;37047:20;37065:1;37047:20;:::i;:::-;37042:25;;37086:1;37083;37080:8;37077:34;;;37091:18;;:::i;:::-;37077:34;37136:1;37133;37129:9;37121:17;;36953:191;;;;:::o;37150:96::-;37187:7;37216:24;37234:5;37216:24;:::i;:::-;37205:35;;37150:96;;;:::o;37252:90::-;37286:7;37329:5;37322:13;37315:21;37304:32;;37252:90;;;:::o;37348:149::-;37384:7;37424:66;37417:5;37413:78;37402:89;;37348:149;;;:::o;37503:126::-;37540:7;37580:42;37573:5;37569:54;37558:65;;37503:126;;;:::o;37635:77::-;37672:7;37701:5;37690:16;;37635:77;;;:::o;37718:154::-;37802:6;37797:3;37792;37779:30;37864:1;37855:6;37850:3;37846:16;37839:27;37718:154;;;:::o;37878:307::-;37946:1;37956:113;37970:6;37967:1;37964:13;37956:113;;;38055:1;38050:3;38046:11;38040:18;38036:1;38031:3;38027:11;38020:39;37992:2;37989:1;37985:10;37980:15;;37956:113;;;38087:6;38084:1;38081:13;38078:101;;;38167:1;38158:6;38153:3;38149:16;38142:27;38078:101;37927:258;37878:307;;;:::o;38191:320::-;38235:6;38272:1;38266:4;38262:12;38252:22;;38319:1;38313:4;38309:12;38340:18;38330:81;;38396:4;38388:6;38384:17;38374:27;;38330:81;38458:2;38450:6;38447:14;38427:18;38424:38;38421:84;;;38477:18;;:::i;:::-;38421:84;38242:269;38191:320;;;:::o;38517:281::-;38600:27;38622:4;38600:27;:::i;:::-;38592:6;38588:40;38730:6;38718:10;38715:22;38694:18;38682:10;38679:34;38676:62;38673:88;;;38741:18;;:::i;:::-;38673:88;38781:10;38777:2;38770:22;38560:238;38517:281;;:::o;38804:233::-;38843:3;38866:24;38884:5;38866:24;:::i;:::-;38857:33;;38912:66;38905:5;38902:77;38899:103;;;38982:18;;:::i;:::-;38899:103;39029:1;39022:5;39018:13;39011:20;;38804:233;;;:::o;39043:176::-;39075:1;39092:20;39110:1;39092:20;:::i;:::-;39087:25;;39126:20;39144:1;39126:20;:::i;:::-;39121:25;;39165:1;39155:35;;39170:18;;:::i;:::-;39155:35;39211:1;39208;39204:9;39199:14;;39043:176;;;;:::o;39225:180::-;39273:77;39270:1;39263:88;39370:4;39367:1;39360:15;39394:4;39391:1;39384:15;39411:180;39459:77;39456:1;39449:88;39556:4;39553:1;39546:15;39580:4;39577:1;39570:15;39597:180;39645:77;39642:1;39635:88;39742:4;39739:1;39732:15;39766:4;39763:1;39756:15;39783:180;39831:77;39828:1;39821:88;39928:4;39925:1;39918:15;39952:4;39949:1;39942:15;39969:180;40017:77;40014:1;40007:88;40114:4;40111:1;40104:15;40138:4;40135:1;40128:15;40155:117;40264:1;40261;40254:12;40278:117;40387:1;40384;40377:12;40401:117;40510:1;40507;40500:12;40524:117;40633:1;40630;40623:12;40647:117;40756:1;40753;40746:12;40770:102;40811:6;40862:2;40858:7;40853:2;40846:5;40842:14;40838:28;40828:38;;40770:102;;;:::o;40878:237::-;41018:34;41014:1;41006:6;41002:14;40995:58;41087:20;41082:2;41074:6;41070:15;41063:45;40878:237;:::o;41121:225::-;41261:34;41257:1;41249:6;41245:14;41238:58;41330:8;41325:2;41317:6;41313:15;41306:33;41121:225;:::o;41352:224::-;41492:34;41488:1;41480:6;41476:14;41469:58;41561:7;41556:2;41548:6;41544:15;41537:32;41352:224;:::o;41582:178::-;41722:30;41718:1;41710:6;41706:14;41699:54;41582:178;:::o;41766:223::-;41906:34;41902:1;41894:6;41890:14;41883:58;41975:6;41970:2;41962:6;41958:15;41951:31;41766:223;:::o;41995:175::-;42135:27;42131:1;42123:6;42119:14;42112:51;41995:175;:::o;42176:231::-;42316:34;42312:1;42304:6;42300:14;42293:58;42385:14;42380:2;42372:6;42368:15;42361:39;42176:231;:::o;42413:174::-;42553:26;42549:1;42541:6;42537:14;42530:50;42413:174;:::o;42593:243::-;42733:34;42729:1;42721:6;42717:14;42710:58;42802:26;42797:2;42789:6;42785:15;42778:51;42593:243;:::o;42842:169::-;42982:21;42978:1;42970:6;42966:14;42959:45;42842:169;:::o;43017:229::-;43157:34;43153:1;43145:6;43141:14;43134:58;43226:12;43221:2;43213:6;43209:15;43202:37;43017:229;:::o;43252:228::-;43392:34;43388:1;43380:6;43376:14;43369:58;43461:11;43456:2;43448:6;43444:15;43437:36;43252:228;:::o;43486:162::-;43626:14;43622:1;43614:6;43610:14;43603:38;43486:162;:::o;43654:182::-;43794:34;43790:1;43782:6;43778:14;43771:58;43654:182;:::o;43842:231::-;43982:34;43978:1;43970:6;43966:14;43959:58;44051:14;44046:2;44038:6;44034:15;44027:39;43842:231;:::o;44079:166::-;44219:18;44215:1;44207:6;44203:14;44196:42;44079:166;:::o;44251:182::-;44391:34;44387:1;44379:6;44375:14;44368:58;44251:182;:::o;44439:220::-;44579:34;44575:1;44567:6;44563:14;44556:58;44648:3;44643:2;44635:6;44631:15;44624:28;44439:220;:::o;44665:167::-;44805:19;44801:1;44793:6;44789:14;44782:43;44665:167;:::o;44838:236::-;44978:34;44974:1;44966:6;44962:14;44955:58;45047:19;45042:2;45034:6;45030:15;45023:44;44838:236;:::o;45080:165::-;45220:17;45216:1;45208:6;45204:14;45197:41;45080:165;:::o;45251:122::-;45324:24;45342:5;45324:24;:::i;:::-;45317:5;45314:35;45304:63;;45363:1;45360;45353:12;45304:63;45251:122;:::o;45379:116::-;45449:21;45464:5;45449:21;:::i;:::-;45442:5;45439:32;45429:60;;45485:1;45482;45475:12;45429:60;45379:116;:::o;45501:120::-;45573:23;45590:5;45573:23;:::i;:::-;45566:5;45563:34;45553:62;;45611:1;45608;45601:12;45553:62;45501:120;:::o;45627:122::-;45700:24;45718:5;45700:24;:::i;:::-;45693:5;45690:35;45680:63;;45739:1;45736;45729:12;45680:63;45627:122;:::o
Swarm Source
ipfs://c7e05697eb8aa39c8ee7bdcb1b95ecf2a3fa6ca9c65f19fddd4f024b4fa97c25
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.