ERC-721
Overview
Max Total Supply
235 SLIMEYS
Holders
74
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
5 SLIMEYSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Slimeys
Compiler Version
v0.8.3+commit.8d00100c
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-04-27 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } pragma solidity ^0.8.0; pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } pragma solidity ^0.8.0; pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping (uint256 => address) private _owners; // Mapping owner address to token count mapping (address => uint256) private _balances; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || ERC721.isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || ERC721.isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } /** * @dev This is a fork of openzeppelin ERC721Enumerable. It is gas-optimizated for NFT collection * with sequential token IDs. The updated part includes: * - replaced the array `_allToken` with a simple uint `_totalSupply`, * - updated the functions `totalSupply` and `_beforeTokenTransfer`. */ abstract contract ERC721EnumerableSimple is ERC721, IERC721Enumerable { // user => tokenId[] mapping(address => mapping(uint => uint)) private _ownedTokens; // tokenId => index of _ownedTokens[user] (used when changing token ownership) mapping(uint => uint) private _ownedTokensIndex; // current total amount of token minted uint private _totalSupply; /// @dev See {IERC165-supportsInterface}. function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /// @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /// @dev See {IERC721Enumerable-totalSupply}. function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /// @dev See {IERC721Enumerable-tokenByIndex}. function tokenByIndex(uint index) public view virtual override returns (uint) { require(index < ERC721EnumerableSimple.totalSupply(), "ERC721Enumerable: global index out of bounds"); return index; } /// @dev Hook that is called before any token transfer. This includes minting function _beforeTokenTransfer( address from, address to, uint tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { assert(tokenId == _totalSupply); // Ensure token is minted sequentially _totalSupply += 1; } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { // do nothing } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint tokenId) private { uint length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev See {ERC721Enumerable-_removeTokenFromOwnerEnumeration}. * @param from address representing the previous owner of the given token ID * @param tokenId uint ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint lastTokenIndex = ERC721.balanceOf(from) - 1; uint tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } } //Slimeys Contract contract Slimeys is ERC721EnumerableSimple, Ownable { uint public constant MAX_SLIMEY_SUPPLY = 10000; bool public hasSaleStarted = false; string private baseURI; constructor() ERC721("Slimeys", "SLIMEYS") {} // Owner Functions function setBaseURI(string memory newBaseUri) public onlyOwner { baseURI = newBaseUri; } function startSale() public onlyOwner { hasSaleStarted = true; } function pauseSale() public onlyOwner { hasSaleStarted = false; } function withdrawAll() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } function reserveGiveaway(uint numSlimeys) public onlyOwner { uint currentSupply = totalSupply(); require(currentSupply + numSlimeys <= 30, "Exceeded giveaway limit"); for (uint index = 0; index < numSlimeys; index++) { _safeMint(owner(), currentSupply + index); } } //Public functions function _baseURI() internal view override returns (string memory) { return baseURI; } function calculatePriceForToken(uint256 slimeyId) public pure returns (uint) { require(slimeyId < MAX_SLIMEY_SUPPLY, "Sale has already ended"); if (slimeyId >= 9000) { return 0.10 ether; //9000 - 10000 : 0.10 ETH }else if (slimeyId >=8000){ return 0.09 ether; //8000 - 8999 : 0.09 ETH }else if (slimeyId >=7000){ return 0.08 ether; //7000 - 7999 : 0.08 ETH }else if (slimeyId >=6000){ return 0.07 ether; //6000 - 6999 : 0.07 ETH }else if (slimeyId >=5000){ return 0.06 ether; //5000 - 5999 : 0.06 ETH }else if (slimeyId >=4000){ return 0.05 ether; //4000 - 4999 : 0.05 ETH } else if (slimeyId >=3000){ return 0.04 ether; //3000 - 3999 : 0.04 ETH } else if (slimeyId >=2000){ return 0.03 ether; //2000 - 2999 : 0.03 ETH } else if (slimeyId >= 1000){ return 0.02 ether; //1000 - 1999 : 0.02 ETH }else { return 0.01 ether; // 30 - 999 : 0.01 ETH } } function calculatePrice() public view returns (uint) { require(hasSaleStarted, "Sale hasn't started"); return calculatePriceForToken(totalSupply()); } function getSlimeys(uint8 numSlimeys) public payable { uint256 currentId = totalSupply(); require(currentId < MAX_SLIMEY_SUPPLY, "Sale has already ended"); require(numSlimeys > 0 && numSlimeys <= 30, "You can adopt minimum 1, maximum 20 Slimeys"); require(currentId + numSlimeys <= MAX_SLIMEY_SUPPLY, "Exceeds maximum Slimeys supply"); require(msg.value >= calculatePrice() * numSlimeys, "Ether value sent is below the price"); for (uint8 i = 0; i < numSlimeys; i++) { uint256 mintIndex = totalSupply(); _safeMint(msg.sender, mintIndex); } } function tokensOfOwner(address _owner) external view returns (uint[] memory) { uint tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint[](0); // Return an empty array } else { uint[] memory result = new uint[](tokenCount); for (uint index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } } /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++PROJECT BY HEAVEN AND LUNA+++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++yyyyyyyyyyyyysssssssssssssssssso++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++oooddddddddddddhyyyyyyyyyyyyyyyyyysooo+++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++ddddddhyyyyyyyyyyyyyyyyyyyyyyyyyyyyyysooo++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++ddddddhyyyyyyyyyyyyyyyyyyyyyyyyyyyyyysooo++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++ddddddhyyyyyyyyyyyyyyyyyyyyyyyyyyyyyysooo++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++ddddddhyyyyy+---------------......+yysooo++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++ddddddhyyyyy/...```````````` +yysooo++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++ddddddhyyyyy/..` +yysooo++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++ddddddhyyyyy/..` `+++ /++. +yyyyysooo+++++++++++++++++++++++++++++++ ++++++++++++++++++++++oooddddddhyyyyy/..` `yyy syy. +yyyyyyooo+++++++++++++++++++++++++++++++ +++++++++++++++++++++odddddddddhyyyyy/..` `yyy syy. +yyyyyyooo+++++++++++++++++++++++++++++++ ++++++++++++oyyyyyyyyyddddddhhhyyyyyy/..` `yyy syy. +yyyyyyssssssooo+++++++++++++++++++++++++ ++++++++++ooydddddddddddddddyyyyyyyyy+..` `yyy syy-``+yyyyyyyyyyyysss+++++++++++++++++++++++++ +++++++++yhhddddddddddhhhhhhyyyyyyyyysss/``` ... ...+ooyyyyyyyyyyyyyyyyoooooo+++++++++++++++++++ ++++++osshddddddddddddyyyyyyyyyyyyyyyyyy+..` oyyyyyyyyyyyyyyyyyyssssooo++++++++++++++++++ ++++++hdddddhyyyyyyyyyyyyyyyyyyyyyyyyyyy+..` oyyyyyyyyyyyyyyyyyyyyysooo++++++++++++++++++ ++++++hdddddhyyyyyyyyyyyyyyyyyyyyyyyyyyysooo++++++++++++syyyyyyyyyyyyyyyyyyyyysooo++++++++++++++++++ ++++++hdddddhyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyysooo++++++++++++++++++ ++++++hdddddhyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyysooo++++++++++++++++++ ++++++hdddddhyyysssssssssyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyooo++++++++++++++++++++++ ++++++hdddddhyysoooooooooyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy////////////+++++++++++++ ++++++hddhyysoooooooooooooooyyyo+++++++++++++++++++++++++++++++++++++++++++///////////////++++++++++ ++++++yddysssoooooo///yyy///ooo////++++++++osss+++++++++++++++++++++++++//////////////////++++++++++ ++++++syysoooooooo+ .NNN -::-../++++++++sNNm+++++++++++++++++++++++++//////---/////////++++++++++ ++++++hddysssooooo/ .NNN -::---://sdddddmNNm+++++++++hdddddddddddh+++//////////////////++++++++++ ++++++yhhyyysooooo+``-ddd -:::::://yNNNNNNmmd+++++++++hmmNNNNNNNmmh++++++///////////////++++++++++ ++++++ooosyysooooooooo::: :////////yNNNNNd+++++++++++++++dNNNNNd++++++sss///////////////++++++++++ +++++++++ooossssoooooo+++:::+oo+/////yNNd++++++++++++++++++hNNh+++++++++sss///////////////++++++++++ ++++++++++++osssooooooooooooyyyo+++++hNNy``.+++++++++++++++hNNo``-++++++sss///+++++++++////+++++++++ ++++++ssssss+::/++ooooooooooossssso++hNNmddh+++++++++++++++hNNmddy++++++sss---hhhhhhhyy+--:+++++++++ +++ooosyyyyy+::/+++sssooooooooosyyo++hNNNNNd+++++++++++++++hNNNNNh++++++sss+++dddddddhhs//++++++++++ +++syyyyyyyy+::/++oyysooooooooosyyo++hNNNNNd+++++++++++++++hNNNNNh++++++sssddddddddddddhhhs+++++++++ sssyyyyyy+/////+++oyysooooooooosyyo++ossssso+++++++++++++++ossssso++++++sssddddddddddddhhhs+++++++++ yyyyyyyyy+::/+++ooosssoooooosssssso++++++++++++++++++++++++++++++++++++osssddddddddddddhhhs+++++++++ yyyyyyyyy+::/++osssoooooooooyyyo+++++++++++++++++++++++++++++++++++++ssssssddddddddddddhhhs+++++++++ oooyyyyyy+//+oossssssssssssssssoooooo+++++++++++++++++++++++++++++oosssssssddddddddddddhhhs+++++++++ +++syyyyyo++oyyssssyyyyyyyyyoooooooooo+++++++++++++++++++++++++++osssssssssddddddddddddhhhs+++++++++ +++oooooosssyyyyddhyyhdddssssssssssssssssssssssssssssssssssssssssssssssssssddddddddddddhhhs+++++++++ +++++++++ossssssyyysssyyyssssssssssssssssssssssssssssssssssssssssssssssssssyyyyyyyyyyyyysss+++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SLIMEY_SUPPLY","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":"calculatePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"slimeyId","type":"uint256"}],"name":"calculatePriceForToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"numSlimeys","type":"uint8"}],"name":"getSlimeys","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"hasSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"pauseSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numSlimeys","type":"uint256"}],"name":"reserveGiveaway","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":[],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526009805460ff60a01b191690553480156200001e57600080fd5b5060405180604001604052806007815260200166536c696d65797360c81b81525060405180604001604052806007815260200166534c494d45595360c81b815250816000908051906020019062000077929190620000fa565b5080516200008d906001906020840190620000fa565b5050506000620000a2620000f660201b60201c565b600980546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620001dd565b3390565b8280546200010890620001a0565b90600052602060002090601f0160209004810192826200012c576000855562000177565b82601f106200014757805160ff191683800117855562000177565b8280016001018555821562000177579182015b82811115620001775782518255916020019190600101906200015a565b506200018592915062000189565b5090565b5b808211156200018557600081556001016200018a565b600181811c90821680620001b557607f821691505b60208210811415620001d757634e487b7160e01b600052602260045260246000fd5b50919050565b61235380620001ed6000396000f3fe6080604052600436106101cd5760003560e01c806370a08231116100f7578063a40f1aa511610095578063c87b56dd11610064578063c87b56dd146104f3578063d348b40914610513578063e985e9c514610528578063f2fde38b14610571576101cd565b8063a40f1aa51461048b578063b407936a146104ab578063b66a0e5d146104be578063b88d4fde146104d3576101cd565b8063853828b6116100d1578063853828b6146104305780638da5cb5b1461043857806395d89b4114610456578063a22cb4651461046b576101cd565b806370a08231146103ce578063715018a6146103ee5780638462151c14610403576101cd565b80632f745c591161016f57806355367ba91161013e57806355367ba91461035957806355f804b31461036e5780636352211e1461038e5780636fd9537f146103ae576101cd565b80632f745c59146102e357806342842e0e146103035780634ebfff3d146103235780634f6ccce714610339576101cd565b8063095ea7b3116101ab578063095ea7b31461026157806318160ddd146102835780631c8b232d146102a257806323b872dd146102c3576101cd565b806301ffc9a7146101d257806306fdde0314610207578063081812fc14610229575b600080fd5b3480156101de57600080fd5b506101f26101ed366004611f32565b610591565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5061021c6105be565b6040516101fe91906120c5565b34801561023557600080fd5b50610249610244366004611fb0565b610650565b6040516001600160a01b0390911681526020016101fe565b34801561026d57600080fd5b5061028161027c366004611f09565b6106ea565b005b34801561028f57600080fd5b506008545b6040519081526020016101fe565b3480156102ae57600080fd5b506009546101f290600160a01b900460ff1681565b3480156102cf57600080fd5b506102816102de366004611e1b565b610800565b3480156102ef57600080fd5b506102946102fe366004611f09565b610831565b34801561030f57600080fd5b5061028161031e366004611e1b565b6108c7565b34801561032f57600080fd5b5061029461271081565b34801561034557600080fd5b50610294610354366004611fb0565b6108e2565b34801561036557600080fd5b50610281610954565b34801561037a57600080fd5b50610281610389366004611f6a565b61098d565b34801561039a57600080fd5b506102496103a9366004611fb0565b6109ce565b3480156103ba57600080fd5b506102946103c9366004611fb0565b610a45565b3480156103da57600080fd5b506102946103e9366004611dcf565b610b71565b3480156103fa57600080fd5b50610281610bf8565b34801561040f57600080fd5b5061042361041e366004611dcf565b610c6c565b6040516101fe9190612081565b610281610d4d565b34801561044457600080fd5b506009546001600160a01b0316610249565b34801561046257600080fd5b5061021c610d9d565b34801561047757600080fd5b50610281610486366004611ecf565b610dac565b34801561049757600080fd5b506102816104a6366004611fb0565b610e7e565b6102816104b9366004611fc8565b610f50565b3480156104ca57600080fd5b50610281611128565b3480156104df57600080fd5b506102816104ee366004611e56565b611167565b3480156104ff57600080fd5b5061021c61050e366004611fb0565b61119f565b34801561051f57600080fd5b5061029461127a565b34801561053457600080fd5b506101f2610543366004611de9565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561057d57600080fd5b5061028161058c366004611dcf565b6112dd565b60006001600160e01b0319821663780e9d6360e01b14806105b657506105b6826113c8565b90505b919050565b6060600080546105cd9061223e565b80601f01602080910402602001604051908101604052809291908181526020018280546105f99061223e565b80156106465780601f1061061b57610100808354040283529160200191610646565b820191906000526020600020905b81548152906001019060200180831161062957829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166106ce5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006106f5826109ce565b9050806001600160a01b0316836001600160a01b031614156107635760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106c5565b336001600160a01b038216148061077f575061077f8133610543565b6107f15760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106c5565b6107fb8383611418565b505050565b61080a3382611486565b6108265760405162461bcd60e51b81526004016106c59061215f565b6107fb83838361157d565b600061083c83610b71565b821061089e5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016106c5565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6107fb83838360405180602001604052806000815250611167565b60006108ed60085490565b82106109505760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016106c5565b5090565b6009546001600160a01b0316331461097e5760405162461bcd60e51b81526004016106c59061212a565b6009805460ff60a01b19169055565b6009546001600160a01b031633146109b75760405162461bcd60e51b81526004016106c59061212a565b80516109ca90600a906020840190611cb2565b5050565b6000818152600260205260408120546001600160a01b0316806105b65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016106c5565b60006127108210610a915760405162461bcd60e51b815260206004820152601660248201527514d85b19481a185cc8185b1c9958591e48195b99195960521b60448201526064016106c5565b6123288210610aa9575067016345785d8a00006105b9565b611f408210610ac1575067013fbe85edc900006105b9565b611b588210610ad9575067011c37937e0800006105b9565b6117708210610af0575066f8b0a10e4700006105b9565b6113888210610b07575066d529ae9e8600006105b9565b610fa08210610b1e575066b1a2bc2ec500006105b9565b610bb88210610b355750668e1bc9bf0400006105b9565b6107d08210610b4c5750666a94d74f4300006105b9565b6103e88210610b63575066470de4df8200006105b9565b50662386f26fc100006105b9565b60006001600160a01b038216610bdc5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016106c5565b506001600160a01b031660009081526003602052604090205490565b6009546001600160a01b03163314610c225760405162461bcd60e51b81526004016106c59061212a565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b60606000610c7983610b71565b905080610c965750506040805160008152602081019091526105b9565b60008167ffffffffffffffff811115610cbf57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610ce8578160200160208202803683370190505b50905060005b82811015610d3d57610d008582610831565b828281518110610d2057634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610d3581612273565b915050610cee565b5091506105b99050565b50919050565b6009546001600160a01b03163314610d775760405162461bcd60e51b81526004016106c59061212a565b60405133904780156108fc02916000818181858888f19350505050610d9b57600080fd5b565b6060600180546105cd9061223e565b6001600160a01b038216331415610e055760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106c5565b3360008181526005602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e72911515815260200190565b60405180910390a35050565b6009546001600160a01b03163314610ea85760405162461bcd60e51b81526004016106c59061212a565b6000610eb360085490565b9050601e610ec183836121b0565b1115610f0f5760405162461bcd60e51b815260206004820152601760248201527f4578636565646564206769766561776179206c696d697400000000000000000060448201526064016106c5565b60005b828110156107fb57610f3e610f2f6009546001600160a01b031690565b610f3983856121b0565b611728565b80610f4881612273565b915050610f12565b6000610f5b60085490565b90506127108110610fa75760405162461bcd60e51b815260206004820152601660248201527514d85b19481a185cc8185b1c9958591e48195b99195960521b60448201526064016106c5565b60008260ff16118015610fbe5750601e8260ff1611155b61101e5760405162461bcd60e51b815260206004820152602b60248201527f596f752063616e2061646f7074206d696e696d756d20312c206d6178696d756d60448201526a20323020536c696d65797360a81b60648201526084016106c5565b61271061102e60ff8416836121b0565b111561107c5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d20536c696d65797320737570706c79000060448201526064016106c5565b8160ff1661108861127a565b61109291906121dc565b3410156110ed5760405162461bcd60e51b815260206004820152602360248201527f45746865722076616c75652073656e742069732062656c6f772074686520707260448201526269636560e81b60648201526084016106c5565b60005b8260ff168160ff1610156107fb57600061110960085490565b90506111153382611728565b50806111208161228e565b9150506110f0565b6009546001600160a01b031633146111525760405162461bcd60e51b81526004016106c59061212a565b6009805460ff60a01b1916600160a01b179055565b6111713383611486565b61118d5760405162461bcd60e51b81526004016106c59061215f565b61119984848484611742565b50505050565b6000818152600260205260409020546060906001600160a01b031661121e5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016106c5565b6000611228611775565b905060008151116112485760405180602001604052806000815250611273565b8061125284611784565b604051602001611263929190612015565b6040516020818303038152906040525b9392505050565b600954600090600160a01b900460ff166112cc5760405162461bcd60e51b815260206004820152601360248201527214d85b19481a185cdb89dd081cdd185c9d1959606a1b60448201526064016106c5565b6112d86103c960085490565b905090565b6009546001600160a01b031633146113075760405162461bcd60e51b81526004016106c59061212a565b6001600160a01b03811661136c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c5565b6009546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b031982166380ac58cd60e01b14806113f957506001600160e01b03198216635b5e139f60e01b145b806105b657506301ffc9a760e01b6001600160e01b03198316146105b6565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061144d826109ce565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166114ff5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106c5565b600061150a836109ce565b9050806001600160a01b0316846001600160a01b031614806115455750836001600160a01b031661153a84610650565b6001600160a01b0316145b8061157557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611590826109ce565b6001600160a01b0316146115f85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016106c5565b6001600160a01b03821661165a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106c5565b61166583838361189f565b611670600082611418565b6001600160a01b03831660009081526003602052604081208054600192906116999084906121fb565b90915550506001600160a01b03821660009081526003602052604081208054600192906116c79084906121b0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6109ca828260405180602001604052806000815250611943565b61174d84848461157d565b61175984848484611976565b6111995760405162461bcd60e51b81526004016106c5906120d8565b6060600a80546105cd9061223e565b6060816117a957506040805180820190915260018152600360fc1b60208201526105b9565b8160005b81156117d357806117bd81612273565b91506117cc9050600a836121c8565b91506117ad565b60008167ffffffffffffffff8111156117fc57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611826576020820181803683370190505b5090505b84156115755761183b6001836121fb565b9150611848600a866122ae565b6118539060306121b0565b60f81b81838151811061187657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611898600a866121c8565b945061182a565b6001600160a01b0383166118ea5760085481146118cc57634e487b7160e01b600052600160045260246000fd5b6001600860008282546118df91906121b0565b9091555061190d9050565b816001600160a01b0316836001600160a01b03161461190d5761190d8382611a83565b6001600160a01b038216611920576107fb565b826001600160a01b0316826001600160a01b0316146107fb576107fb8282611b20565b61194d8383611b64565b61195a6000848484611976565b6107fb5760405162461bcd60e51b81526004016106c5906120d8565b60006001600160a01b0384163b15611a7857604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906119ba903390899088908890600401612044565b602060405180830381600087803b1580156119d457600080fd5b505af1925050508015611a04575060408051601f3d908101601f19168201909252611a0191810190611f4e565b60015b611a5e573d808015611a32576040519150601f19603f3d011682016040523d82523d6000602084013e611a37565b606091505b508051611a565760405162461bcd60e51b81526004016106c5906120d8565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611575565b506001949350505050565b60006001611a9084610b71565b611a9a91906121fb565b600083815260076020526040902054909150808214611aed576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6000611b2b83610b71565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611bba5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106c5565b6000818152600260205260409020546001600160a01b031615611c1f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106c5565b611c2b6000838361189f565b6001600160a01b0382166000908152600360205260408120805460019290611c549084906121b0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611cbe9061223e565b90600052602060002090601f016020900481019282611ce05760008555611d26565b82601f10611cf957805160ff1916838001178555611d26565b82800160010185558215611d26579182015b82811115611d26578251825591602001919060010190611d0b565b506109509291505b808211156109505760008155600101611d2e565b600067ffffffffffffffff80841115611d5d57611d5d6122ee565b604051601f8501601f19908116603f01168101908282118183101715611d8557611d856122ee565b81604052809350858152868686011115611d9e57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146105b957600080fd5b600060208284031215611de0578081fd5b61127382611db8565b60008060408385031215611dfb578081fd5b611e0483611db8565b9150611e1260208401611db8565b90509250929050565b600080600060608486031215611e2f578081fd5b611e3884611db8565b9250611e4660208501611db8565b9150604084013590509250925092565b60008060008060808587031215611e6b578081fd5b611e7485611db8565b9350611e8260208601611db8565b925060408501359150606085013567ffffffffffffffff811115611ea4578182fd5b8501601f81018713611eb4578182fd5b611ec387823560208401611d42565b91505092959194509250565b60008060408385031215611ee1578182fd5b611eea83611db8565b915060208301358015158114611efe578182fd5b809150509250929050565b60008060408385031215611f1b578182fd5b611f2483611db8565b946020939093013593505050565b600060208284031215611f43578081fd5b813561127381612304565b600060208284031215611f5f578081fd5b815161127381612304565b600060208284031215611f7b578081fd5b813567ffffffffffffffff811115611f91578182fd5b8201601f81018413611fa1578182fd5b61157584823560208401611d42565b600060208284031215611fc1578081fd5b5035919050565b600060208284031215611fd9578081fd5b813560ff81168114611273578182fd5b60008151808452612001816020860160208601612212565b601f01601f19169290920160200192915050565b60008351612027818460208801612212565b83519083019061203b818360208801612212565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061207790830184611fe9565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156120b95783518352928401929184019160010161209d565b50909695505050505050565b6000602082526112736020830184611fe9565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156121c3576121c36122c2565b500190565b6000826121d7576121d76122d8565b500490565b60008160001904831182151516156121f6576121f66122c2565b500290565b60008282101561220d5761220d6122c2565b500390565b60005b8381101561222d578181015183820152602001612215565b838111156111995750506000910152565b600181811c9082168061225257607f821691505b60208210811415610d4757634e487b7160e01b600052602260045260246000fd5b6000600019821415612287576122876122c2565b5060010190565b600060ff821660ff8114156122a5576122a56122c2565b60010192915050565b6000826122bd576122bd6122d8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461231a57600080fd5b5056fea2646970667358221220319f6f8295dc3a8d1fdf4d537ef9da36998c48c9203878ae78825c1d4cd2bc9164736f6c63430008030033
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c806370a08231116100f7578063a40f1aa511610095578063c87b56dd11610064578063c87b56dd146104f3578063d348b40914610513578063e985e9c514610528578063f2fde38b14610571576101cd565b8063a40f1aa51461048b578063b407936a146104ab578063b66a0e5d146104be578063b88d4fde146104d3576101cd565b8063853828b6116100d1578063853828b6146104305780638da5cb5b1461043857806395d89b4114610456578063a22cb4651461046b576101cd565b806370a08231146103ce578063715018a6146103ee5780638462151c14610403576101cd565b80632f745c591161016f57806355367ba91161013e57806355367ba91461035957806355f804b31461036e5780636352211e1461038e5780636fd9537f146103ae576101cd565b80632f745c59146102e357806342842e0e146103035780634ebfff3d146103235780634f6ccce714610339576101cd565b8063095ea7b3116101ab578063095ea7b31461026157806318160ddd146102835780631c8b232d146102a257806323b872dd146102c3576101cd565b806301ffc9a7146101d257806306fdde0314610207578063081812fc14610229575b600080fd5b3480156101de57600080fd5b506101f26101ed366004611f32565b610591565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5061021c6105be565b6040516101fe91906120c5565b34801561023557600080fd5b50610249610244366004611fb0565b610650565b6040516001600160a01b0390911681526020016101fe565b34801561026d57600080fd5b5061028161027c366004611f09565b6106ea565b005b34801561028f57600080fd5b506008545b6040519081526020016101fe565b3480156102ae57600080fd5b506009546101f290600160a01b900460ff1681565b3480156102cf57600080fd5b506102816102de366004611e1b565b610800565b3480156102ef57600080fd5b506102946102fe366004611f09565b610831565b34801561030f57600080fd5b5061028161031e366004611e1b565b6108c7565b34801561032f57600080fd5b5061029461271081565b34801561034557600080fd5b50610294610354366004611fb0565b6108e2565b34801561036557600080fd5b50610281610954565b34801561037a57600080fd5b50610281610389366004611f6a565b61098d565b34801561039a57600080fd5b506102496103a9366004611fb0565b6109ce565b3480156103ba57600080fd5b506102946103c9366004611fb0565b610a45565b3480156103da57600080fd5b506102946103e9366004611dcf565b610b71565b3480156103fa57600080fd5b50610281610bf8565b34801561040f57600080fd5b5061042361041e366004611dcf565b610c6c565b6040516101fe9190612081565b610281610d4d565b34801561044457600080fd5b506009546001600160a01b0316610249565b34801561046257600080fd5b5061021c610d9d565b34801561047757600080fd5b50610281610486366004611ecf565b610dac565b34801561049757600080fd5b506102816104a6366004611fb0565b610e7e565b6102816104b9366004611fc8565b610f50565b3480156104ca57600080fd5b50610281611128565b3480156104df57600080fd5b506102816104ee366004611e56565b611167565b3480156104ff57600080fd5b5061021c61050e366004611fb0565b61119f565b34801561051f57600080fd5b5061029461127a565b34801561053457600080fd5b506101f2610543366004611de9565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561057d57600080fd5b5061028161058c366004611dcf565b6112dd565b60006001600160e01b0319821663780e9d6360e01b14806105b657506105b6826113c8565b90505b919050565b6060600080546105cd9061223e565b80601f01602080910402602001604051908101604052809291908181526020018280546105f99061223e565b80156106465780601f1061061b57610100808354040283529160200191610646565b820191906000526020600020905b81548152906001019060200180831161062957829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166106ce5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006106f5826109ce565b9050806001600160a01b0316836001600160a01b031614156107635760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106c5565b336001600160a01b038216148061077f575061077f8133610543565b6107f15760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106c5565b6107fb8383611418565b505050565b61080a3382611486565b6108265760405162461bcd60e51b81526004016106c59061215f565b6107fb83838361157d565b600061083c83610b71565b821061089e5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016106c5565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6107fb83838360405180602001604052806000815250611167565b60006108ed60085490565b82106109505760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016106c5565b5090565b6009546001600160a01b0316331461097e5760405162461bcd60e51b81526004016106c59061212a565b6009805460ff60a01b19169055565b6009546001600160a01b031633146109b75760405162461bcd60e51b81526004016106c59061212a565b80516109ca90600a906020840190611cb2565b5050565b6000818152600260205260408120546001600160a01b0316806105b65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016106c5565b60006127108210610a915760405162461bcd60e51b815260206004820152601660248201527514d85b19481a185cc8185b1c9958591e48195b99195960521b60448201526064016106c5565b6123288210610aa9575067016345785d8a00006105b9565b611f408210610ac1575067013fbe85edc900006105b9565b611b588210610ad9575067011c37937e0800006105b9565b6117708210610af0575066f8b0a10e4700006105b9565b6113888210610b07575066d529ae9e8600006105b9565b610fa08210610b1e575066b1a2bc2ec500006105b9565b610bb88210610b355750668e1bc9bf0400006105b9565b6107d08210610b4c5750666a94d74f4300006105b9565b6103e88210610b63575066470de4df8200006105b9565b50662386f26fc100006105b9565b60006001600160a01b038216610bdc5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016106c5565b506001600160a01b031660009081526003602052604090205490565b6009546001600160a01b03163314610c225760405162461bcd60e51b81526004016106c59061212a565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b60606000610c7983610b71565b905080610c965750506040805160008152602081019091526105b9565b60008167ffffffffffffffff811115610cbf57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610ce8578160200160208202803683370190505b50905060005b82811015610d3d57610d008582610831565b828281518110610d2057634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610d3581612273565b915050610cee565b5091506105b99050565b50919050565b6009546001600160a01b03163314610d775760405162461bcd60e51b81526004016106c59061212a565b60405133904780156108fc02916000818181858888f19350505050610d9b57600080fd5b565b6060600180546105cd9061223e565b6001600160a01b038216331415610e055760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106c5565b3360008181526005602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e72911515815260200190565b60405180910390a35050565b6009546001600160a01b03163314610ea85760405162461bcd60e51b81526004016106c59061212a565b6000610eb360085490565b9050601e610ec183836121b0565b1115610f0f5760405162461bcd60e51b815260206004820152601760248201527f4578636565646564206769766561776179206c696d697400000000000000000060448201526064016106c5565b60005b828110156107fb57610f3e610f2f6009546001600160a01b031690565b610f3983856121b0565b611728565b80610f4881612273565b915050610f12565b6000610f5b60085490565b90506127108110610fa75760405162461bcd60e51b815260206004820152601660248201527514d85b19481a185cc8185b1c9958591e48195b99195960521b60448201526064016106c5565b60008260ff16118015610fbe5750601e8260ff1611155b61101e5760405162461bcd60e51b815260206004820152602b60248201527f596f752063616e2061646f7074206d696e696d756d20312c206d6178696d756d60448201526a20323020536c696d65797360a81b60648201526084016106c5565b61271061102e60ff8416836121b0565b111561107c5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d20536c696d65797320737570706c79000060448201526064016106c5565b8160ff1661108861127a565b61109291906121dc565b3410156110ed5760405162461bcd60e51b815260206004820152602360248201527f45746865722076616c75652073656e742069732062656c6f772074686520707260448201526269636560e81b60648201526084016106c5565b60005b8260ff168160ff1610156107fb57600061110960085490565b90506111153382611728565b50806111208161228e565b9150506110f0565b6009546001600160a01b031633146111525760405162461bcd60e51b81526004016106c59061212a565b6009805460ff60a01b1916600160a01b179055565b6111713383611486565b61118d5760405162461bcd60e51b81526004016106c59061215f565b61119984848484611742565b50505050565b6000818152600260205260409020546060906001600160a01b031661121e5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016106c5565b6000611228611775565b905060008151116112485760405180602001604052806000815250611273565b8061125284611784565b604051602001611263929190612015565b6040516020818303038152906040525b9392505050565b600954600090600160a01b900460ff166112cc5760405162461bcd60e51b815260206004820152601360248201527214d85b19481a185cdb89dd081cdd185c9d1959606a1b60448201526064016106c5565b6112d86103c960085490565b905090565b6009546001600160a01b031633146113075760405162461bcd60e51b81526004016106c59061212a565b6001600160a01b03811661136c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c5565b6009546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b031982166380ac58cd60e01b14806113f957506001600160e01b03198216635b5e139f60e01b145b806105b657506301ffc9a760e01b6001600160e01b03198316146105b6565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061144d826109ce565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166114ff5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106c5565b600061150a836109ce565b9050806001600160a01b0316846001600160a01b031614806115455750836001600160a01b031661153a84610650565b6001600160a01b0316145b8061157557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611590826109ce565b6001600160a01b0316146115f85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016106c5565b6001600160a01b03821661165a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106c5565b61166583838361189f565b611670600082611418565b6001600160a01b03831660009081526003602052604081208054600192906116999084906121fb565b90915550506001600160a01b03821660009081526003602052604081208054600192906116c79084906121b0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6109ca828260405180602001604052806000815250611943565b61174d84848461157d565b61175984848484611976565b6111995760405162461bcd60e51b81526004016106c5906120d8565b6060600a80546105cd9061223e565b6060816117a957506040805180820190915260018152600360fc1b60208201526105b9565b8160005b81156117d357806117bd81612273565b91506117cc9050600a836121c8565b91506117ad565b60008167ffffffffffffffff8111156117fc57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611826576020820181803683370190505b5090505b84156115755761183b6001836121fb565b9150611848600a866122ae565b6118539060306121b0565b60f81b81838151811061187657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611898600a866121c8565b945061182a565b6001600160a01b0383166118ea5760085481146118cc57634e487b7160e01b600052600160045260246000fd5b6001600860008282546118df91906121b0565b9091555061190d9050565b816001600160a01b0316836001600160a01b03161461190d5761190d8382611a83565b6001600160a01b038216611920576107fb565b826001600160a01b0316826001600160a01b0316146107fb576107fb8282611b20565b61194d8383611b64565b61195a6000848484611976565b6107fb5760405162461bcd60e51b81526004016106c5906120d8565b60006001600160a01b0384163b15611a7857604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906119ba903390899088908890600401612044565b602060405180830381600087803b1580156119d457600080fd5b505af1925050508015611a04575060408051601f3d908101601f19168201909252611a0191810190611f4e565b60015b611a5e573d808015611a32576040519150601f19603f3d011682016040523d82523d6000602084013e611a37565b606091505b508051611a565760405162461bcd60e51b81526004016106c5906120d8565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611575565b506001949350505050565b60006001611a9084610b71565b611a9a91906121fb565b600083815260076020526040902054909150808214611aed576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6000611b2b83610b71565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611bba5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106c5565b6000818152600260205260409020546001600160a01b031615611c1f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106c5565b611c2b6000838361189f565b6001600160a01b0382166000908152600360205260408120805460019290611c549084906121b0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611cbe9061223e565b90600052602060002090601f016020900481019282611ce05760008555611d26565b82601f10611cf957805160ff1916838001178555611d26565b82800160010185558215611d26579182015b82811115611d26578251825591602001919060010190611d0b565b506109509291505b808211156109505760008155600101611d2e565b600067ffffffffffffffff80841115611d5d57611d5d6122ee565b604051601f8501601f19908116603f01168101908282118183101715611d8557611d856122ee565b81604052809350858152868686011115611d9e57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146105b957600080fd5b600060208284031215611de0578081fd5b61127382611db8565b60008060408385031215611dfb578081fd5b611e0483611db8565b9150611e1260208401611db8565b90509250929050565b600080600060608486031215611e2f578081fd5b611e3884611db8565b9250611e4660208501611db8565b9150604084013590509250925092565b60008060008060808587031215611e6b578081fd5b611e7485611db8565b9350611e8260208601611db8565b925060408501359150606085013567ffffffffffffffff811115611ea4578182fd5b8501601f81018713611eb4578182fd5b611ec387823560208401611d42565b91505092959194509250565b60008060408385031215611ee1578182fd5b611eea83611db8565b915060208301358015158114611efe578182fd5b809150509250929050565b60008060408385031215611f1b578182fd5b611f2483611db8565b946020939093013593505050565b600060208284031215611f43578081fd5b813561127381612304565b600060208284031215611f5f578081fd5b815161127381612304565b600060208284031215611f7b578081fd5b813567ffffffffffffffff811115611f91578182fd5b8201601f81018413611fa1578182fd5b61157584823560208401611d42565b600060208284031215611fc1578081fd5b5035919050565b600060208284031215611fd9578081fd5b813560ff81168114611273578182fd5b60008151808452612001816020860160208601612212565b601f01601f19169290920160200192915050565b60008351612027818460208801612212565b83519083019061203b818360208801612212565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061207790830184611fe9565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156120b95783518352928401929184019160010161209d565b50909695505050505050565b6000602082526112736020830184611fe9565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156121c3576121c36122c2565b500190565b6000826121d7576121d76122d8565b500490565b60008160001904831182151516156121f6576121f66122c2565b500290565b60008282101561220d5761220d6122c2565b500390565b60005b8381101561222d578181015183820152602001612215565b838111156111995750506000910152565b600181811c9082168061225257607f821691505b60208210811415610d4757634e487b7160e01b600052602260045260246000fd5b6000600019821415612287576122876122c2565b5060010190565b600060ff821660ff8114156122a5576122a56122c2565b60010192915050565b6000826122bd576122bd6122d8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461231a57600080fd5b5056fea2646970667358221220319f6f8295dc3a8d1fdf4d537ef9da36998c48c9203878ae78825c1d4cd2bc9164736f6c63430008030033
Deployed Bytecode Sourcemap
39289:3776:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35792:224;;;;;;;;;;-1:-1:-1;35792:224:0;;;;;:::i;:::-;;:::i;:::-;;;6730:14:1;;6723:22;6705:41;;6693:2;6678:18;35792:224:0;;;;;;;;24142:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25609:221::-;;;;;;;;;;-1:-1:-1;25609:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5388:32:1;;;5370:51;;5358:2;5343:18;25609:221:0;5325:102:1;25139:404:0;;;;;;;;;;-1:-1:-1;25139:404:0;;;;;:::i;:::-;;:::i;:::-;;36398:108;;;;;;;;;;-1:-1:-1;36486:12:0;;36398:108;;;16560:25:1;;;16548:2;16533:18;36398:108:0;16515:76:1;39401:34:0;;;;;;;;;;-1:-1:-1;39401:34:0;;;;-1:-1:-1;;;39401:34:0;;;;;;26499:305;;;;;;;;;;-1:-1:-1;26499:305:0;;;;;:::i;:::-;;:::i;36083:256::-;;;;;;;;;;-1:-1:-1;36083:256:0;;;;;:::i;:::-;;:::i;26875:151::-;;;;;;;;;;-1:-1:-1;26875:151:0;;;;;:::i;:::-;;:::i;39348:46::-;;;;;;;;;;;;39389:5;39348:46;;36566:221;;;;;;;;;;-1:-1:-1;36566:221:0;;;;;:::i;:::-;;:::i;39758:79::-;;;;;;;;;;;;;:::i;39554:102::-;;;;;;;;;;-1:-1:-1;39554:102:0;;;;;:::i;:::-;;:::i;23836:239::-;;;;;;;;;;-1:-1:-1;23836:239:0;;;;;:::i;:::-;;:::i;40451:1270::-;;;;;;;;;;-1:-1:-1;40451:1270:0;;;;;:::i;:::-;;:::i;23566:208::-;;;;;;;;;;-1:-1:-1;23566:208:0;;;;;:::i;:::-;;:::i;11007:148::-;;;;;;;;;;;;;:::i;42573:489::-;;;;;;;;;;-1:-1:-1;42573:489:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;39849:123::-;;;:::i;10356:87::-;;;;;;;;;;-1:-1:-1;10429:6:0;;-1:-1:-1;;;;;10429:6:0;10356:87;;24311:104;;;;;;;;;;;;;:::i;25902:295::-;;;;;;;;;;-1:-1:-1;25902:295:0;;;;;:::i;:::-;;:::i;39984:319::-;;;;;;;;;;-1:-1:-1;39984:319:0;;;;;:::i;:::-;;:::i;41914:647::-;;;;;;:::i;:::-;;:::i;39668:78::-;;;;;;;;;;;;;:::i;27097:285::-;;;;;;;;;;-1:-1:-1;27097:285:0;;;;;:::i;:::-;;:::i;24486:360::-;;;;;;;;;;-1:-1:-1;24486:360:0;;;;;:::i;:::-;;:::i;41733:173::-;;;;;;;;;;;;;:::i;26268:164::-;;;;;;;;;;-1:-1:-1;26268:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;26389:25:0;;;26365:4;26389:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;26268:164;11310:244;;;;;;;;;;-1:-1:-1;11310:244:0;;;;;:::i;:::-;;:::i;35792:224::-;35894:4;-1:-1:-1;;;;;;35918:50:0;;-1:-1:-1;;;35918:50:0;;:90;;;35972:36;35996:11;35972:23;:36::i;:::-;35911:97;;35792:224;;;;:::o;24142:100::-;24196:13;24229:5;24222:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24142:100;:::o;25609:221::-;25685:7;28938:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28938:16:0;25705:73;;;;-1:-1:-1;;;25705:73:0;;12732:2:1;25705:73:0;;;12714:21:1;12771:2;12751:18;;;12744:30;12810:34;12790:18;;;12783:62;-1:-1:-1;;;12861:18:1;;;12854:42;12913:19;;25705:73:0;;;;;;;;;-1:-1:-1;25798:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;25798:24:0;;25609:221::o;25139:404::-;25220:13;25236:23;25251:7;25236:14;:23::i;:::-;25220:39;;25284:5;-1:-1:-1;;;;;25278:11:0;:2;-1:-1:-1;;;;;25278:11:0;;;25270:57;;;;-1:-1:-1;;;25270:57:0;;14332:2:1;25270:57:0;;;14314:21:1;14371:2;14351:18;;;14344:30;14410:34;14390:18;;;14383:62;-1:-1:-1;;;14461:18:1;;;14454:31;14502:19;;25270:57:0;14304:223:1;25270:57:0;9020:10;-1:-1:-1;;;;;25348:21:0;;;;:69;;-1:-1:-1;25373:44:0;25397:5;9020:10;25404:12;8940:98;25373:44;25340:161;;;;-1:-1:-1;;;25340:161:0;;10721:2:1;25340:161:0;;;10703:21:1;10760:2;10740:18;;;10733:30;10799:34;10779:18;;;10772:62;10870:26;10850:18;;;10843:54;10914:19;;25340:161:0;10693:246:1;25340:161:0;25514:21;25523:2;25527:7;25514:8;:21::i;:::-;25139:404;;;:::o;26499:305::-;26660:41;9020:10;26693:7;26660:18;:41::i;:::-;26652:103;;;;-1:-1:-1;;;26652:103:0;;;;;;;:::i;:::-;26768:28;26778:4;26784:2;26788:7;26768:9;:28::i;36083:256::-;36180:7;36216:23;36233:5;36216:16;:23::i;:::-;36208:5;:31;36200:87;;;;-1:-1:-1;;;36200:87:0;;7542:2:1;36200:87:0;;;7524:21:1;7581:2;7561:18;;;7554:30;7620:34;7600:18;;;7593:62;-1:-1:-1;;;7671:18:1;;;7664:41;7722:19;;36200:87:0;7514:233:1;36200:87:0;-1:-1:-1;;;;;;36305:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;36083:256::o;26875:151::-;26979:39;26996:4;27002:2;27006:7;26979:39;;;;;;;;;;;;:16;:39::i;36566:221::-;36638:4;36671:36;36486:12;;36398:108;;36671:36;36663:5;:44;36655:101;;;;-1:-1:-1;;;36655:101:0;;15503:2:1;36655:101:0;;;15485:21:1;15542:2;15522:18;;;15515:30;15581:34;15561:18;;;15554:62;-1:-1:-1;;;15632:18:1;;;15625:42;15684:19;;36655:101:0;15475:234:1;36655:101:0;-1:-1:-1;36774:5:0;36566:221::o;39758:79::-;10429:6;;-1:-1:-1;;;;;10429:6:0;9020:10;10576:23;10568:68;;;;-1:-1:-1;;;10568:68:0;;;;;;;:::i;:::-;39807:14:::1;:22:::0;;-1:-1:-1;;;;39807:22:0::1;::::0;;39758:79::o;39554:102::-;10429:6;;-1:-1:-1;;;;;10429:6:0;9020:10;10576:23;10568:68;;;;-1:-1:-1;;;10568:68:0;;;;;;;:::i;:::-;39628:20;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;;39554:102:::0;:::o;23836:239::-;23908:7;23944:16;;;:7;:16;;;;;;-1:-1:-1;;;;;23944:16:0;23979:19;23971:73;;;;-1:-1:-1;;;23971:73:0;;11557:2:1;23971:73:0;;;11539:21:1;11596:2;11576:18;;;11569:30;11635:34;11615:18;;;11608:62;-1:-1:-1;;;11686:18:1;;;11679:39;11735:19;;23971:73:0;11529:231:1;40451:1270:0;40522:4;39389:5;40547:8;:28;40539:63;;;;-1:-1:-1;;;40539:63:0;;14734:2:1;40539:63:0;;;14716:21:1;14773:2;14753:18;;;14746:30;-1:-1:-1;;;14792:18:1;;;14785:52;14854:18;;40539:63:0;14706:172:1;40539:63:0;40629:4;40617:8;:16;40613:1101;;-1:-1:-1;40657:10:0;40650:17;;40613:1101;40742:4;40731:8;:15;40727:987;;-1:-1:-1;40769:10:0;40762:17;;40727:987;40854:4;40843:8;:15;40839:875;;-1:-1:-1;40881:10:0;40874:17;;40839:875;40966:4;40955:8;:15;40951:763;;-1:-1:-1;40993:10:0;40986:17;;40951:763;41078:4;41067:8;:15;41063:651;;-1:-1:-1;41105:10:0;41098:17;;41063:651;41190:4;41179:8;:15;41175:539;;-1:-1:-1;41217:10:0;41210:17;;41175:539;41303:4;41292:8;:15;41288:426;;-1:-1:-1;41330:10:0;41323:17;;41288:426;41416:4;41405:8;:15;41401:313;;-1:-1:-1;41443:10:0;41436:17;;41401:313;41530:4;41518:8;:16;41514:200;;-1:-1:-1;41557:10:0;41550:17;;41514:200;-1:-1:-1;41649:10:0;41642:17;;23566:208;23638:7;-1:-1:-1;;;;;23666:19:0;;23658:74;;;;-1:-1:-1;;;23658:74:0;;11146:2:1;23658:74:0;;;11128:21:1;11185:2;11165:18;;;11158:30;11224:34;11204:18;;;11197:62;-1:-1:-1;;;11275:18:1;;;11268:40;11325:19;;23658:74:0;11118:232:1;23658:74:0;-1:-1:-1;;;;;;23750:16:0;;;;;:9;:16;;;;;;;23566:208::o;11007:148::-;10429:6;;-1:-1:-1;;;;;10429:6:0;9020:10;10576:23;10568:68;;;;-1:-1:-1;;;10568:68:0;;;;;;;:::i;:::-;11098:6:::1;::::0;11077:40:::1;::::0;11114:1:::1;::::0;-1:-1:-1;;;;;11098:6:0::1;::::0;11077:40:::1;::::0;11114:1;;11077:40:::1;11128:6;:19:::0;;-1:-1:-1;;;;;;11128:19:0::1;::::0;;11007:148::o;42573:489::-;42635:13;42661:15;42679:17;42689:6;42679:9;:17::i;:::-;42661:35;-1:-1:-1;42711:15:0;42707:348;;-1:-1:-1;;42750:13:0;;;42761:1;42750:13;;;;;;;;42743:20;;42707:348;42821:20;42855:10;42844:22;;;;;;-1:-1:-1;;;42844:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42844:22:0;;42821:45;;42886:10;42881:135;42910:10;42902:5;:18;42881:135;;;42966:34;42986:6;42994:5;42966:19;:34::i;:::-;42950:6;42957:5;42950:13;;;;;;-1:-1:-1;;;42950:13:0;;;;;;;;;;;;;;;;;;:50;42922:7;;;;:::i;:::-;;;;42881:135;;;-1:-1:-1;43037:6:0;-1:-1:-1;43030:13:0;;-1:-1:-1;43030:13:0;42707:348;42573:489;;;;:::o;39849:123::-;10429:6;;-1:-1:-1;;;;;10429:6:0;9020:10;10576:23;10568:68;;;;-1:-1:-1;;;10568:68:0;;;;;;;:::i;:::-;39916:47:::1;::::0;39924:10:::1;::::0;39941:21:::1;39916:47:::0;::::1;;;::::0;::::1;::::0;;;39941:21;39924:10;39916:47;::::1;;;;;;39908:56;;;::::0;::::1;;39849:123::o:0;24311:104::-;24367:13;24400:7;24393:14;;;;;:::i;25902:295::-;-1:-1:-1;;;;;26005:24:0;;9020:10;26005:24;;25997:62;;;;-1:-1:-1;;;25997:62:0;;9954:2:1;25997:62:0;;;9936:21:1;9993:2;9973:18;;;9966:30;10032:27;10012:18;;;10005:55;10077:18;;25997:62:0;9926:175:1;25997:62:0;9020:10;26072:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;26072:42:0;;;;;;;;;;:53;;-1:-1:-1;;26072:53:0;;;;;;;:42;-1:-1:-1;;;;;26141:48:0;;26180:8;26141:48;;;;6730:14:1;6723:22;6705:41;;6693:2;6678:18;;6660:92;26141:48:0;;;;;;;;25902:295;;:::o;39984:319::-;10429:6;;-1:-1:-1;;;;;10429:6:0;9020:10;10576:23;10568:68;;;;-1:-1:-1;;;10568:68:0;;;;;;;:::i;:::-;40054:18:::1;40075:13;36486:12:::0;;36398:108;;40075:13:::1;40054:34:::0;-1:-1:-1;40137:2:0::1;40107:26;40123:10:::0;40054:34;40107:26:::1;:::i;:::-;:32;;40099:68;;;::::0;-1:-1:-1;;;40099:68:0;;16264:2:1;40099:68:0::1;::::0;::::1;16246:21:1::0;16303:2;16283:18;;;16276:30;16342:25;16322:18;;;16315:53;16385:18;;40099:68:0::1;16236:173:1::0;40099:68:0::1;40183:10;40178:118;40207:10;40199:5;:18;40178:118;;;40243:41;40253:7;10429:6:::0;;-1:-1:-1;;;;;10429:6:0;10356:87;;40253:7:::1;40262:21;40278:5:::0;40262:13;:21:::1;:::i;:::-;40243:9;:41::i;:::-;40219:7:::0;::::1;::::0;::::1;:::i;:::-;;;;40178:118;;41914:647:::0;41978:17;41998:13;36486:12;;36398:108;;41998:13;41978:33;;39389:5;42030:9;:29;42022:64;;;;-1:-1:-1;;;42022:64:0;;14734:2:1;42022:64:0;;;14716:21:1;14773:2;14753:18;;;14746:30;-1:-1:-1;;;14792:18:1;;;14785:52;14854:18;;42022:64:0;14706:172:1;42022:64:0;42118:1;42105:10;:14;;;:34;;;;;42137:2;42123:10;:16;;;;42105:34;42097:90;;;;-1:-1:-1;;;42097:90:0;;7954:2:1;42097:90:0;;;7936:21:1;7993:2;7973:18;;;7966:30;8032:34;8012:18;;;8005:62;-1:-1:-1;;;8083:18:1;;;8076:41;8134:19;;42097:90:0;7926:233:1;42097:90:0;39389:5;42206:22;;;;:9;:22;:::i;:::-;:43;;42198:86;;;;-1:-1:-1;;;42198:86:0;;7183:2:1;42198:86:0;;;7165:21:1;7222:2;7202:18;;;7195:30;7261:32;7241:18;;;7234:60;7311:18;;42198:86:0;7155:180:1;42198:86:0;42335:10;42316:29;;:16;:14;:16::i;:::-;:29;;;;:::i;:::-;42303:9;:42;;42295:90;;;;-1:-1:-1;;;42295:90:0;;11967:2:1;42295:90:0;;;11949:21:1;12006:2;11986:18;;;11979:30;12045:34;12025:18;;;12018:62;-1:-1:-1;;;12096:18:1;;;12089:33;12139:19;;42295:90:0;11939:225:1;42295:90:0;42403:7;42398:156;42420:10;42416:14;;:1;:14;;;42398:156;;;42462:17;42482:13;36486:12;;36398:108;;42482:13;42462:33;;42510:32;42520:10;42532:9;42510;:32::i;:::-;-1:-1:-1;42432:3:0;;;;:::i;:::-;;;;42398:156;;39668:78;10429:6;;-1:-1:-1;;;;;10429:6:0;9020:10;10576:23;10568:68;;;;-1:-1:-1;;;10568:68:0;;;;;;;:::i;:::-;39717:14:::1;:21:::0;;-1:-1:-1;;;;39717:21:0::1;-1:-1:-1::0;;;39717:21:0::1;::::0;;39668:78::o;27097:285::-;27229:41;9020:10;27262:7;27229:18;:41::i;:::-;27221:103;;;;-1:-1:-1;;;27221:103:0;;;;;;;:::i;:::-;27335:39;27349:4;27355:2;27359:7;27368:5;27335:13;:39::i;:::-;27097:285;;;;:::o;24486:360::-;28914:4;28938:16;;;:7;:16;;;;;;24559:13;;-1:-1:-1;;;;;28938:16:0;24585:76;;;;-1:-1:-1;;;24585:76:0;;13916:2:1;24585:76:0;;;13898:21:1;13955:2;13935:18;;;13928:30;13994:34;13974:18;;;13967:62;-1:-1:-1;;;14045:18:1;;;14038:45;14100:19;;24585:76:0;13888:237:1;24585:76:0;24674:21;24698:10;:8;:10::i;:::-;24674:34;;24750:1;24732:7;24726:21;:25;:112;;;;;;;;;;;;;;;;;24791:7;24800:18;:7;:16;:18::i;:::-;24774:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24726:112;24719:119;24486:360;-1:-1:-1;;;24486:360:0:o;41733:173::-;41805:14;;41780:4;;-1:-1:-1;;;41805:14:0;;;;41797:46;;;;-1:-1:-1;;;41797:46:0;;15916:2:1;41797:46:0;;;15898:21:1;15955:2;15935:18;;;15928:30;-1:-1:-1;;;15974:18:1;;;15967:49;16033:18;;41797:46:0;15888:169:1;41797:46:0;41861:37;41884:13;36486:12;;36398:108;;41861:37;41854:44;;41733:173;:::o;11310:244::-;10429:6;;-1:-1:-1;;;;;10429:6:0;9020:10;10576:23;10568:68;;;;-1:-1:-1;;;10568:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11399:22:0;::::1;11391:73;;;::::0;-1:-1:-1;;;11391:73:0;;8785:2:1;11391:73:0::1;::::0;::::1;8767:21:1::0;8824:2;8804:18;;;8797:30;8863:34;8843:18;;;8836:62;-1:-1:-1;;;8914:18:1;;;8907:36;8960:19;;11391:73:0::1;8757:228:1::0;11391:73:0::1;11501:6;::::0;11480:38:::1;::::0;-1:-1:-1;;;;;11480:38:0;;::::1;::::0;11501:6:::1;::::0;11480:38:::1;::::0;11501:6:::1;::::0;11480:38:::1;11529:6;:17:::0;;-1:-1:-1;;;;;;11529:17:0::1;-1:-1:-1::0;;;;;11529:17:0;;;::::1;::::0;;;::::1;::::0;;11310:244::o;23210:292::-;23312:4;-1:-1:-1;;;;;;23336:40:0;;-1:-1:-1;;;23336:40:0;;:105;;-1:-1:-1;;;;;;;23393:48:0;;-1:-1:-1;;;23393:48:0;23336:105;:158;;;-1:-1:-1;;;;;;;;;;21920:40:0;;;23458:36;21811:157;32733:174;32808:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;32808:29:0;-1:-1:-1;;;;;32808:29:0;;;;;;;;:24;;32862:23;32808:24;32862:14;:23::i;:::-;-1:-1:-1;;;;;32853:46:0;;;;;;;;;;;32733:174;;:::o;29143:355::-;29236:4;28938:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28938:16:0;29253:73;;;;-1:-1:-1;;;29253:73:0;;10308:2:1;29253:73:0;;;10290:21:1;10347:2;10327:18;;;10320:30;10386:34;10366:18;;;10359:62;-1:-1:-1;;;10437:18:1;;;10430:42;10489:19;;29253:73:0;10280:234:1;29253:73:0;29337:13;29353:23;29368:7;29353:14;:23::i;:::-;29337:39;;29406:5;-1:-1:-1;;;;;29395:16:0;:7;-1:-1:-1;;;;;29395:16:0;;:51;;;;29439:7;-1:-1:-1;;;;;29415:31:0;:20;29427:7;29415:11;:20::i;:::-;-1:-1:-1;;;;;29415:31:0;;29395:51;:94;;;-1:-1:-1;;;;;;26389:25:0;;;26365:4;26389:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;29450:39;29387:103;29143:355;-1:-1:-1;;;;29143:355:0:o;32071:544::-;32196:4;-1:-1:-1;;;;;32169:31:0;:23;32184:7;32169:14;:23::i;:::-;-1:-1:-1;;;;;32169:31:0;;32161:85;;;;-1:-1:-1;;;32161:85:0;;13506:2:1;32161:85:0;;;13488:21:1;13545:2;13525:18;;;13518:30;13584:34;13564:18;;;13557:62;-1:-1:-1;;;13635:18:1;;;13628:39;13684:19;;32161:85:0;13478:231:1;32161:85:0;-1:-1:-1;;;;;32265:16:0;;32257:65;;;;-1:-1:-1;;;32257:65:0;;9549:2:1;32257:65:0;;;9531:21:1;9588:2;9568:18;;;9561:30;9627:34;9607:18;;;9600:62;-1:-1:-1;;;9678:18:1;;;9671:34;9722:19;;32257:65:0;9521:226:1;32257:65:0;32335:39;32356:4;32362:2;32366:7;32335:20;:39::i;:::-;32439:29;32456:1;32460:7;32439:8;:29::i;:::-;-1:-1:-1;;;;;32481:15:0;;;;;;:9;:15;;;;;:20;;32500:1;;32481:15;:20;;32500:1;;32481:20;:::i;:::-;;;;-1:-1:-1;;;;;;;32512:13:0;;;;;;:9;:13;;;;;:18;;32529:1;;32512:13;:18;;32529:1;;32512:18;:::i;:::-;;;;-1:-1:-1;;32541:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32541:21:0;-1:-1:-1;;;;;32541:21:0;;;;;;;;;32580:27;;32541:16;;32580:27;;;;;;;32071:544;;;:::o;29840:110::-;29916:26;29926:2;29930:7;29916:26;;;;;;;;;;;;:9;:26::i;28264:272::-;28378:28;28388:4;28394:2;28398:7;28378:9;:28::i;:::-;28425:48;28448:4;28454:2;28458:7;28467:5;28425:22;:48::i;:::-;28417:111;;;;-1:-1:-1;;;28417:111:0;;;;;;;:::i;40339:100::-;40391:13;40424:7;40417:14;;;;;:::i;6615:723::-;6671:13;6892:10;6888:53;;-1:-1:-1;6919:10:0;;;;;;;;;;;;-1:-1:-1;;;6919:10:0;;;;;;6888:53;6966:5;6951:12;7007:78;7014:9;;7007:78;;7040:8;;;;:::i;:::-;;-1:-1:-1;7063:10:0;;-1:-1:-1;7071:2:0;7063:10;;:::i;:::-;;;7007:78;;;7095:19;7127:6;7117:17;;;;;;-1:-1:-1;;;7117:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7117:17:0;;7095:39;;7145:154;7152:10;;7145:154;;7179:11;7189:1;7179:11;;:::i;:::-;;-1:-1:-1;7248:10:0;7256:2;7248:5;:10;:::i;:::-;7235:24;;:2;:24;:::i;:::-;7222:39;;7205:6;7212;7205:14;;;;;;-1:-1:-1;;;7205:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;7205:56:0;;;;;;;;-1:-1:-1;7276:11:0;7285:2;7276:11;;:::i;:::-;;;7145:154;;36878:617;-1:-1:-1;;;;;37081:18:0;;37077:249;;37134:12;;37123:7;:23;37116:31;;-1:-1:-1;;;37116:31:0;;;;;;;;;37217:1;37201:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;37077:249:0;;-1:-1:-1;37077:249:0;;37248:2;-1:-1:-1;;;;;37240:10:0;:4;-1:-1:-1;;;;;37240:10:0;;37236:90;;37267:47;37300:4;37306:7;37267:32;:47::i;:::-;-1:-1:-1;;;;;37342:16:0;;37338:150;;;;;37415:4;-1:-1:-1;;;;;37409:10:0;:2;-1:-1:-1;;;;;37409:10:0;;37405:83;;37436:40;37464:2;37468:7;37436:27;:40::i;30177:250::-;30273:18;30279:2;30283:7;30273:5;:18::i;:::-;30310:54;30341:1;30345:2;30349:7;30358:5;30310:22;:54::i;:::-;30302:117;;;;-1:-1:-1;;;30302:117:0;;;;;;;:::i;33472:843::-;33593:4;-1:-1:-1;;;;;33619:13:0;;14182:20;14221:8;33615:693;;33655:72;;-1:-1:-1;;;33655:72:0;;-1:-1:-1;;;;;33655:36:0;;;;;:72;;9020:10;;33706:4;;33712:7;;33721:5;;33655:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33655:72:0;;;;;;;;-1:-1:-1;;33655:72:0;;;;;;;;;;;;:::i;:::-;;;33651:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33901:13:0;;33897:341;;33944:60;;-1:-1:-1;;;33944:60:0;;;;;;;:::i;33897:341::-;34188:6;34182:13;34173:6;34169:2;34165:15;34158:38;33651:602;-1:-1:-1;;;;;;33778:55:0;-1:-1:-1;;;33778:55:0;;-1:-1:-1;33771:62:0;;33615:693;-1:-1:-1;34292:4:0;33472:843;;;;;;:::o;38286:976::-;38549:19;38596:1;38571:22;38588:4;38571:16;:22::i;:::-;:26;;;;:::i;:::-;38608:15;38626:26;;;:17;:26;;;;;;38549:48;;-1:-1:-1;38759:28:0;;;38755:325;;-1:-1:-1;;;;;38823:18:0;;38804:16;38823:18;;;:12;:18;;;;;;;;:34;;;;;;;;;38874:30;;;;;;:44;;;38991:30;;:17;:30;;;;;:43;;;38755:325;-1:-1:-1;39176:26:0;;;;:17;:26;;;;;;;;39169:33;;;-1:-1:-1;;;;;39220:18:0;;;;;:12;:18;;;;;:34;;;;;;;39213:41;38286:976::o;37793:215::-;37875:11;37889:20;37906:2;37889:16;:20::i;:::-;-1:-1:-1;;;;;37920:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;37965:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;37793:215:0:o;30763:382::-;-1:-1:-1;;;;;30843:16:0;;30835:61;;;;-1:-1:-1;;;30835:61:0;;12371:2:1;30835:61:0;;;12353:21:1;;;12390:18;;;12383:30;12449:34;12429:18;;;12422:62;12501:18;;30835:61:0;12343:182:1;30835:61:0;28914:4;28938:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28938:16:0;:30;30907:58;;;;-1:-1:-1;;;30907:58:0;;9192:2:1;30907:58:0;;;9174:21:1;9231:2;9211:18;;;9204:30;9270;9250:18;;;9243:58;9318:18;;30907:58:0;9164:178:1;30907:58:0;30978:45;31007:1;31011:2;31015:7;30978:20;:45::i;:::-;-1:-1:-1;;;;;31036:13:0;;;;;;:9;:13;;;;;:18;;31053:1;;31036:13;:18;;31053:1;;31036:18;:::i;:::-;;;;-1:-1:-1;;31065:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31065:21:0;-1:-1:-1;;;;;31065:21:0;;;;;;;;31104:33;;31065:16;;;31104:33;;31065:16;;31104:33;30763:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:631:1;;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;828:196;;940:2;928:9;919:7;915:23;911:32;908:2;;;961:6;953;946:22;908:2;989:29;1008:9;989:29;:::i;1029:270::-;;;1158:2;1146:9;1137:7;1133:23;1129:32;1126:2;;;1179:6;1171;1164:22;1126:2;1207:29;1226:9;1207:29;:::i;:::-;1197:39;;1255:38;1289:2;1278:9;1274:18;1255:38;:::i;:::-;1245:48;;1116:183;;;;;:::o;1304:338::-;;;;1450:2;1438:9;1429:7;1425:23;1421:32;1418:2;;;1471:6;1463;1456:22;1418:2;1499:29;1518:9;1499:29;:::i;:::-;1489:39;;1547:38;1581:2;1570:9;1566:18;1547:38;:::i;:::-;1537:48;;1632:2;1621:9;1617:18;1604:32;1594:42;;1408:234;;;;;:::o;1647:696::-;;;;;1819:3;1807:9;1798:7;1794:23;1790:33;1787:2;;;1841:6;1833;1826:22;1787:2;1869:29;1888:9;1869:29;:::i;:::-;1859:39;;1917:38;1951:2;1940:9;1936:18;1917:38;:::i;:::-;1907:48;;2002:2;1991:9;1987:18;1974:32;1964:42;;2057:2;2046:9;2042:18;2029:32;2084:18;2076:6;2073:30;2070:2;;;2121:6;2113;2106:22;2070:2;2149:22;;2202:4;2194:13;;2190:27;-1:-1:-1;2180:2:1;;2236:6;2228;2221:22;2180:2;2264:73;2329:7;2324:2;2311:16;2306:2;2302;2298:11;2264:73;:::i;:::-;2254:83;;;1777:566;;;;;;;:::o;2348:367::-;;;2474:2;2462:9;2453:7;2449:23;2445:32;2442:2;;;2495:6;2487;2480:22;2442:2;2523:29;2542:9;2523:29;:::i;:::-;2513:39;;2602:2;2591:9;2587:18;2574:32;2649:5;2642:13;2635:21;2628:5;2625:32;2615:2;;2676:6;2668;2661:22;2615:2;2704:5;2694:15;;;2432:283;;;;;:::o;2720:264::-;;;2849:2;2837:9;2828:7;2824:23;2820:32;2817:2;;;2870:6;2862;2855:22;2817:2;2898:29;2917:9;2898:29;:::i;:::-;2888:39;2974:2;2959:18;;;;2946:32;;-1:-1:-1;;;2807:177:1:o;2989:255::-;;3100:2;3088:9;3079:7;3075:23;3071:32;3068:2;;;3121:6;3113;3106:22;3068:2;3165:9;3152:23;3184:30;3208:5;3184:30;:::i;3249:259::-;;3371:2;3359:9;3350:7;3346:23;3342:32;3339:2;;;3392:6;3384;3377:22;3339:2;3429:9;3423:16;3448:30;3472:5;3448:30;:::i;3513:480::-;;3635:2;3623:9;3614:7;3610:23;3606:32;3603:2;;;3656:6;3648;3641:22;3603:2;3701:9;3688:23;3734:18;3726:6;3723:30;3720:2;;;3771:6;3763;3756:22;3720:2;3799:22;;3852:4;3844:13;;3840:27;-1:-1:-1;3830:2:1;;3886:6;3878;3871:22;3830:2;3914:73;3979:7;3974:2;3961:16;3956:2;3952;3948:11;3914:73;:::i;3998:190::-;;4110:2;4098:9;4089:7;4085:23;4081:32;4078:2;;;4131:6;4123;4116:22;4078:2;-1:-1:-1;4159:23:1;;4068:120;-1:-1:-1;4068:120:1:o;4193:289::-;;4303:2;4291:9;4282:7;4278:23;4274:32;4271:2;;;4324:6;4316;4309:22;4271:2;4368:9;4355:23;4418:4;4411:5;4407:16;4400:5;4397:27;4387:2;;4443:6;4435;4428:22;4487:257;;4566:5;4560:12;4593:6;4588:3;4581:19;4609:63;4665:6;4658:4;4653:3;4649:14;4642:4;4635:5;4631:16;4609:63;:::i;:::-;4726:2;4705:15;-1:-1:-1;;4701:29:1;4692:39;;;;4733:4;4688:50;;4536:208;-1:-1:-1;;4536:208:1:o;4749:470::-;;4966:6;4960:13;4982:53;5028:6;5023:3;5016:4;5008:6;5004:17;4982:53;:::i;:::-;5098:13;;5057:16;;;;5120:57;5098:13;5057:16;5154:4;5142:17;;5120:57;:::i;:::-;5193:20;;4936:283;-1:-1:-1;;;;4936:283:1:o;5432:488::-;-1:-1:-1;;;;;5701:15:1;;;5683:34;;5753:15;;5748:2;5733:18;;5726:43;5800:2;5785:18;;5778:34;;;5848:3;5843:2;5828:18;;5821:31;;;5432:488;;5869:45;;5894:19;;5886:6;5869:45;:::i;:::-;5861:53;5635:285;-1:-1:-1;;;;;;5635:285:1:o;5925:635::-;6096:2;6148:21;;;6218:13;;6121:18;;;6240:22;;;5925:635;;6096:2;6319:15;;;;6293:2;6278:18;;;5925:635;6365:169;6379:6;6376:1;6373:13;6365:169;;;6440:13;;6428:26;;6509:15;;;;6474:12;;;;6401:1;6394:9;6365:169;;;-1:-1:-1;6551:3:1;;6076:484;-1:-1:-1;;;;;;6076:484:1:o;6757:219::-;;6906:2;6895:9;6888:21;6926:44;6966:2;6955:9;6951:18;6943:6;6926:44;:::i;8164:414::-;8366:2;8348:21;;;8405:2;8385:18;;;8378:30;8444:34;8439:2;8424:18;;8417:62;-1:-1:-1;;;8510:2:1;8495:18;;8488:48;8568:3;8553:19;;8338:240::o;12943:356::-;13145:2;13127:21;;;13164:18;;;13157:30;13223:34;13218:2;13203:18;;13196:62;13290:2;13275:18;;13117:182::o;14883:413::-;15085:2;15067:21;;;15124:2;15104:18;;;15097:30;15163:34;15158:2;15143:18;;15136:62;-1:-1:-1;;;15229:2:1;15214:18;;15207:47;15286:3;15271:19;;15057:239::o;16596:128::-;;16667:1;16663:6;16660:1;16657:13;16654:2;;;16673:18;;:::i;:::-;-1:-1:-1;16709:9:1;;16644:80::o;16729:120::-;;16795:1;16785:2;;16800:18;;:::i;:::-;-1:-1:-1;16834:9:1;;16775:74::o;16854:168::-;;16960:1;16956;16952:6;16948:14;16945:1;16942:21;16937:1;16930:9;16923:17;16919:45;16916:2;;;16967:18;;:::i;:::-;-1:-1:-1;17007:9:1;;16906:116::o;17027:125::-;;17095:1;17092;17089:8;17086:2;;;17100:18;;:::i;:::-;-1:-1:-1;17137:9:1;;17076:76::o;17157:258::-;17229:1;17239:113;17253:6;17250:1;17247:13;17239:113;;;17329:11;;;17323:18;17310:11;;;17303:39;17275:2;17268:10;17239:113;;;17370:6;17367:1;17364:13;17361:2;;;-1:-1:-1;;17405:1:1;17387:16;;17380:27;17210:205::o;17420:380::-;17499:1;17495:12;;;;17542;;;17563:2;;17617:4;17609:6;17605:17;17595:27;;17563:2;17670;17662:6;17659:14;17639:18;17636:38;17633:2;;;17716:10;17711:3;17707:20;17704:1;17697:31;17751:4;17748:1;17741:15;17779:4;17776:1;17769:15;17805:135;;-1:-1:-1;;17865:17:1;;17862:2;;;17885:18;;:::i;:::-;-1:-1:-1;17932:1:1;17921:13;;17852:88::o;17945:175::-;;18026:4;18019:5;18015:16;18055:4;18046:7;18043:17;18040:2;;;18063:18;;:::i;:::-;18112:1;18099:15;;17990:130;-1:-1:-1;;17990:130:1:o;18125:112::-;;18183:1;18173:2;;18188:18;;:::i;:::-;-1:-1:-1;18222:9:1;;18163:74::o;18242:127::-;18303:10;18298:3;18294:20;18291:1;18284:31;18334:4;18331:1;18324:15;18358:4;18355:1;18348:15;18374:127;18435:10;18430:3;18426:20;18423:1;18416:31;18466:4;18463:1;18456:15;18490:4;18487:1;18480:15;18506:127;18567:10;18562:3;18558:20;18555:1;18548:31;18598:4;18595:1;18588:15;18622:4;18619:1;18612:15;18638:131;-1:-1:-1;;;;;;18712:32:1;;18702:43;;18692:2;;18759:1;18756;18749:12;18692:2;18682:87;:::o
Swarm Source
ipfs://319f6f8295dc3a8d1fdf4d537ef9da36998c48c9203878ae78825c1d4cd2bc91
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.