Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 722 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 16387330 | 723 days ago | IN | 0 ETH | 0.00147694 | ||||
Set Approval For... | 16235180 | 744 days ago | IN | 0 ETH | 0.00072137 | ||||
Set Approval For... | 15895035 | 792 days ago | IN | 0 ETH | 0.00039484 | ||||
Mint SSK | 15872100 | 795 days ago | IN | 0 ETH | 0.001062 | ||||
Set Approval For... | 15672956 | 823 days ago | IN | 0 ETH | 0.00029741 | ||||
Mint SSK | 15656484 | 825 days ago | IN | 0 ETH | 0.00312239 | ||||
Mint SSK | 15656452 | 825 days ago | IN | 0 ETH | 0.00899973 | ||||
Mint SSK | 15624025 | 830 days ago | IN | 0 ETH | 0.0018448 | ||||
Mint SSK | 15624017 | 830 days ago | IN | 0 ETH | 0.00120175 | ||||
Set Approval For... | 15608185 | 832 days ago | IN | 0 ETH | 0.0002568 | ||||
Set Approval For... | 15600141 | 833 days ago | IN | 0 ETH | 0.00029132 | ||||
Set Approval For... | 15600111 | 833 days ago | IN | 0 ETH | 0.00029749 | ||||
Set Approval For... | 15599966 | 833 days ago | IN | 0 ETH | 0.00036625 | ||||
Mint SSK | 15598660 | 833 days ago | IN | 0 ETH | 0.00377437 | ||||
Mint SSK | 15596571 | 833 days ago | IN | 0 ETH | 0.00318191 | ||||
Mint SSK | 15596417 | 833 days ago | IN | 0 ETH | 0.00087505 | ||||
Mint SSK | 15596416 | 833 days ago | IN | 0 ETH | 0.00090019 | ||||
Mint SSK | 15596412 | 833 days ago | IN | 0 ETH | 0.00087417 | ||||
Mint SSK | 15596409 | 833 days ago | IN | 0 ETH | 0.00096513 | ||||
Set Approval For... | 15595980 | 833 days ago | IN | 0 ETH | 0.00062325 | ||||
Set Approval For... | 15595830 | 833 days ago | IN | 0 ETH | 0.00031419 | ||||
Mint SSK | 15595434 | 834 days ago | IN | 0 ETH | 0.00141743 | ||||
Mint SSK | 15595322 | 834 days ago | IN | 0 ETH | 0.00261266 | ||||
Set Approval For... | 15594205 | 834 days ago | IN | 0 ETH | 0.00025814 | ||||
Mint SSK | 15593387 | 834 days ago | IN | 0 ETH | 0.0006535 |
Loading...
Loading
Contract Name:
swimskin
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-20 */ /** *Submitted for verification at Etherscan.io on 21/04/2022 */ // File: @openzeppelin/contracts/utils/Context.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN 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 payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } // File: @openzeppelin/contracts/token/ERC721/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 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); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } // File: @openzeppelin/contracts/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts may inherit from this and call {_registerInterface} to declare * their support of an interface. */ abstract contract ERC165 is IERC165 { /* * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7 */ bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /** * @dev Mapping of interface ids to whether or not it's supported. */ mapping(bytes4 => bool) private _supportedInterfaces; constructor () internal { // Derived contracts need only register support for their own interfaces, // we register support for ERC165 itself here _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev See {IERC165-supportsInterface}. * * Time complexity O(1), guaranteed to always use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev Registers the contract as an implementer of the interface defined by * `interfaceId`. Support of the actual ERC165 interface is automatic and * registering its interface id is not required. * * See {IERC165-supportsInterface}. * * Requirements: * * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). */ function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "e6"); _supportedInterfaces[interfaceId] = true; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // 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, "e7"); } /** * @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, "e9"); } /** * @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, "e10"); require(isContract(target), "e11"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(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); } } } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ /*function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); }*/ /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ /*function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); }*/ } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @title ERC721 Non-Fungible Token Standard basic implementation * @dev see https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; //using EnumerableSet for EnumerableSet.UintSet; //using EnumerableMap for EnumerableMap.UintToAddressMap; using Strings for uint256; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; // Mapping from holder address to their (enumerable) set of owned tokens //mapping (address => EnumerableSet.UintSet) private _holderTokens; // Enumerable mapping from token ids to their owners //EnumerableMap.UintToAddressMap private _tokenOwners; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; mapping (address => uint256) private tokenBalance; mapping (uint256 => address) private tokenOwner; mapping (uint256 => bool) private tokenExists; mapping (address => uint8) public mintedQty; uint256 public tokensMinted = 0; // Token name string private _name; // Token symbol string private _symbol; uint256 public MAX_SSK; // Optional mapping for token URIs //mapping (uint256 => string) private _tokenURIs; // Base URI string private _baseURI = "QmXXbUQLsL7iDjTdmqKVWAMzx6C9Sds4na2kvr8BFJCyLr"; /* * bytes4(keccak256('balanceOf(address)')) == 0x70a08231 * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3 * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465 * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5 * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde * * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^ * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd */ bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; /* * bytes4(keccak256('name()')) == 0x06fdde03 * bytes4(keccak256('symbol()')) == 0x95d89b41 * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd * * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f */ bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; /* * bytes4(keccak256('totalSupply()')) == 0x18160ddd * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59 * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7 * * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63 */ bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor (string memory name_, string memory symbol_) public { _name = name_; _symbol = symbol_; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); _registerInterface(_INTERFACE_ID_ERC721_METADATA); _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "e12"); //return _holderTokens[owner].length(); return tokenBalance[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { //return _tokenOwners.get(tokenId, "ERC721: owner query for nonexistent token"); require(tokenId > 0, "e13"); return tokenOwner[tokenId]; } /** * @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), "e14"); //string memory _tokenURI = _tokenURIs[tokenId]; string memory base = baseURI(); // If there is no base URI, return the token URI. /*if (bytes(base).length == 0) { return _tokenURI; }*/ // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). /*if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); }*/ // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI. return string(abi.encodePacked("ipfs://", base, "/", tokenId.toString())); } /** * @dev Returns the base URI set via {_setBaseURI}. This will be * automatically added as a prefix in {tokenURI} to each token's URI, or * to the token ID if no specific URI is set for that token ID. */ function baseURI() public view virtual returns (string memory) { return _baseURI; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ /*function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { return _holderTokens[owner].at(index); }*/ /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds //return _tokenOwners.length(); //return tokenBalance[]; return tokensMinted; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ /*function tokenByIndex(uint256 index) public view virtual override returns (uint256) { (uint256 tokenId, ) = _tokenOwners.at(index); return tokenId; }*/ /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "e15"); require(_msgSender() == owner || ERC721.isApprovedForAll(owner, _msgSender()), "e16" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "e17"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "e18"); _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), "e19"); _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), "e20"); _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), "e21"); } /** * @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 _tokenOwners.contains(tokenId); return tokenExists[tokenId]; } /** * @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), "e22"); 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: d* * - `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), "e23"); } /** * @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 random() private view returns (uint) { uint randomHash = uint(keccak256(abi.encodePacked(block.difficulty, block.timestamp))); return randomHash % 1000; } function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "e24"); require(!_exists(tokenId), "e25"); _beforeTokenTransfer(address(0), to, tokenId); tokenOwner[tokenId] = to; tokenExists[tokenId] = true; tokenBalance[to] = tokenBalance[to] + 1; tokensMinted = tokensMinted + 1; 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. */ /** * @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, "e26"); // internal owner require(to != address(0), "e27"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); tokenBalance[from]--; tokenOwner[tokenId] = to; tokenBalance[to]++; emit Transfer(from, to, tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ /*function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; }*/ /** * @dev Internal function to set the base URI for all token IDs. It is * automatically added as a prefix to the value returned in {tokenURI}, * or to the token ID if {tokenURI} is empty. */ function _setBaseURI(string memory baseURI_) internal virtual { _baseURI = baseURI_; } /** * @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()) { return true; } bytes memory returndata = to.functionCall(abi.encodeWithSelector( IERC721Receiver(to).onERC721Received.selector, _msgSender(), from, tokenId, _data ), "e28"); bytes4 retval = abi.decode(returndata, (bytes4)); return (retval == _ERC721_RECEIVED); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); // internal owner } /** * @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 { } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { 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(), "e29"); _; } /** * @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; /* * @title SSK contract */ contract swimskin is Ownable, ERC721 { uint256 public tokenPrice = 20000000000000000; //0.02 ETH uint256 public constant maxSSKPurchase = 5; uint256 public preMaxPerWallet = 5; uint256 public mintContrib = 0; mapping (address => bool) public withdrawn; mapping (address => bool) public freeMint; bool public saleIsActive = false; uint256 public ownerWithdrawals = 0; uint256 public deposited = 0; uint256[] public firstWinners; uint256[] public secondWinners; mapping (address => bool) public firstWinningsWithdrawn; mapping (address => bool) public secondWinningsWithdrawn; constructor(string memory name, string memory symbol, uint256 maxNftSupply) ERC721(name, symbol) { MAX_SSK = maxNftSupply; } function withdraw(uint256 amount) public onlyOwner { payable(msg.sender).transfer(amount); } function changeWalletLimit(uint256 amount) public onlyOwner { preMaxPerWallet = amount; } function addFree(address userAddy) public onlyOwner { freeMint[userAddy] = true; } function removeFree(address userAddy) public onlyOwner { freeMint[userAddy] = false; } function emergencyDeposit() public payable { require(msg.value > 0, "e1"); deposited = deposited + msg.value; } function setBaseURI(string memory baseURI) public onlyOwner { _setBaseURI(baseURI); } function flipState() public onlyOwner { saleIsActive = !saleIsActive; } function reserveSSK(uint8 numberOfTokens) public onlyOwner { uint256 supply = totalSupply(); require(numberOfTokens <= maxSSKPurchase, "e2"); require((supply + numberOfTokens) <= MAX_SSK, "e3"); require(saleIsActive, "e4"); //require((balanceOf(msg.sender) + numberOfTokens) <= preMaxPerWallet, "e5"); //require((tokenPrice * numberOfTokens) <= msg.value, "E15"); for(uint256 i = 1; i <= numberOfTokens; i++) { if (supply < MAX_SSK) { _safeMint(msg.sender, supply + i); } } } function setFirstWinners(uint256[] memory winningTokens) public onlyOwner{ require(winningTokens.length == 5, "E30"); firstWinners = winningTokens; } function setSecondWinners(uint256[] memory winningTokens) public onlyOwner{ require(winningTokens.length == 10, "E31"); secondWinners = winningTokens; } function firstWithdraw() public { for (uint256 counter = 0; counter < firstWinners.length; counter++) { if (ownerOf(firstWinners[counter]) == msg.sender && firstWinningsWithdrawn[msg.sender] != true) { firstWinningsWithdrawn[msg.sender] = true; payable(msg.sender).transfer(2000000000000000000); break; } } } function secondWithdraw() public { for (uint256 counter = 0; counter < secondWinners.length; counter++) { if (ownerOf(secondWinners[counter]) == msg.sender && secondWinningsWithdrawn[msg.sender] != true) { secondWinningsWithdrawn[msg.sender] = true; payable(msg.sender).transfer(2000000000000000000); break; } } } function priceUpdate(uint256 amount) public onlyOwner { tokenPrice = amount; } function mintSSK(uint8 numberOfTokens) public payable { uint256 supply = totalSupply(); require(numberOfTokens <= maxSSKPurchase, "e2"); require((supply + numberOfTokens) <= MAX_SSK, "e3"); require(saleIsActive, "e4"); require((balanceOf(msg.sender) + numberOfTokens) <= preMaxPerWallet, "e5"); if (freeMint[msg.sender] != true) { require((tokenPrice * numberOfTokens) <= msg.value, "E15"); } for(uint256 i = 1; i <= numberOfTokens; i++) { if (supply < MAX_SSK) { _safeMint(msg.sender, supply + i); } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"maxNftSupply","type":"uint256"}],"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_SSK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddy","type":"address"}],"name":"addFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyDeposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"firstWinners","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"firstWinningsWithdrawn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSSKPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintContrib","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"numberOfTokens","type":"uint8"}],"name":"mintSSK","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedQty","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":"ownerWithdrawals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMaxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"priceUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddy","type":"address"}],"name":"removeFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"numberOfTokens","type":"uint8"}],"name":"reserveSSK","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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"secondWinners","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"secondWinningsWithdrawn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"winningTokens","type":"uint256[]"}],"name":"setFirstWinners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"winningTokens","type":"uint256[]"}],"name":"setSecondWinners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMinted","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":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"withdrawn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
600060085560e0604052602e6080818152906200298f60a03980516200002e91600c91602090910190620001c4565b5066470de4df820000600d556005600e556000600f8190556012805460ff1916905560138190556014553480156200006557600080fd5b50604051620029bd380380620029bd833981016040819052620000889162000315565b828260006200009662000162565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000f26301ffc9a760e01b62000166565b815162000107906009906020850190620001c4565b5080516200011d90600a906020840190620001c4565b50620001306380ac58cd60e01b62000166565b62000142635b5e139f60e01b62000166565b6200015463780e9d6360e01b62000166565b5050600b5550620003f49050565b3390565b6001600160e01b031980821614156200019c5760405162461bcd60e51b8152600401620001939062000385565b60405180910390fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b828054620001d290620003a1565b90600052602060002090601f016020900481019282620001f6576000855562000241565b82601f106200021157805160ff191683800117855562000241565b8280016001018555821562000241579182015b828111156200024157825182559160200191906001019062000224565b506200024f92915062000253565b5090565b5b808211156200024f576000815560010162000254565b600082601f8301126200027b578081fd5b81516001600160401b0380821115620002985762000298620003de565b6040516020601f8401601f1916820181018381118382101715620002c057620002c0620003de565b6040528382528584018101871015620002d7578485fd5b8492505b83831015620002fa5785830181015182840182015291820191620002db565b838311156200030b57848185840101525b5095945050505050565b6000806000606084860312156200032a578283fd5b83516001600160401b038082111562000341578485fd5b6200034f878388016200026a565b9450602086015191508082111562000365578384fd5b5062000374868287016200026a565b925050604084015190509250925092565b602080825260029082015261329b60f11b604082015260600190565b600281046001821680620003b657607f821691505b60208210811415620003d857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61258b80620004046000396000f3fe6080604052600436106102885760003560e01c8063735263561161015a578063bb7471fe116100c1578063d885a21e1161007a578063d885a21e14610747578063e985e9c51461074f578063e9b5a2f71461076f578063eb8d244414610784578063eef49ee314610799578063fa07ce1d146107ae57610288565b8063bb7471fe14610685578063c2e1debf146106a5578063c44644d0146106ba578063c87b56dd146106da578063cfb15ef0146106fa578063d8795f5c1461072757610288565b80638da5cb5b116101135780638da5cb5b146105e65780638e920351146105fb57806395d89b4114610610578063a22cb46514610625578063a930aa6814610645578063b88d4fde1461066557610288565b806373526356146105545780637db1342c146105745780637ff9b59614610594578063807f54f6146105a9578063861d47b4146105be57806388dba7fd146105d357610288565b80634a2eeebb116101fe578063686e1079116101b7578063686e1079146104c05780636c0360eb146104d55780636de9f32b146104ea5780636ef61092146104ff57806370a082311461051f578063715018a61461053f57610288565b80634a2eeebb1461040b5780634a6b07af1461042057806354e05b871461044057806355f804b3146104605780636352211e1461048057806366ebc7d3146104a057610288565b80631c2f8211116102505780631c2f82111461035657806323b872dd146103765780632e1a7d4d146103965780633d363f15146103b657806342842e0e146103cb57806345e13a0c146103eb57610288565b806301ffc9a71461028d57806306fdde03146102c3578063081812fc146102e5578063095ea7b31461031257806318160ddd14610334575b600080fd5b34801561029957600080fd5b506102ad6102a8366004611ee6565b6107ce565b6040516102ba9190612085565b60405180910390f35b3480156102cf57600080fd5b506102d86107f1565b6040516102ba9190612090565b3480156102f157600080fd5b50610305610300366004611f64565b610883565b6040516102ba9190612034565b34801561031e57600080fd5b5061033261032d366004611e16565b6108cf565b005b34801561034057600080fd5b50610349610967565b6040516102ba91906123ad565b34801561036257600080fd5b50610349610371366004611f64565b61096d565b34801561038257600080fd5b50610332610391366004611d28565b61098e565b3480156103a257600080fd5b506103326103b1366004611f64565b6109c6565b3480156103c257600080fd5b50610332610a36565b3480156103d757600080fd5b506103326103e6366004611d28565b610b10565b3480156103f757600080fd5b50610332610406366004611f64565b610b2b565b34801561041757600080fd5b50610349610b6f565b34801561042c57600080fd5b506102ad61043b366004611cdc565b610b75565b34801561044c57600080fd5b506102ad61045b366004611cdc565b610b8a565b34801561046c57600080fd5b5061033261047b366004611f1e565b610b9f565b34801561048c57600080fd5b5061030561049b366004611f64565b610be7565b3480156104ac57600080fd5b506103496104bb366004611f64565b610c24565b3480156104cc57600080fd5b50610349610c34565b3480156104e157600080fd5b506102d8610c3a565b3480156104f657600080fd5b50610349610c49565b34801561050b57600080fd5b506102ad61051a366004611cdc565b610c4f565b34801561052b57600080fd5b5061034961053a366004611cdc565b610c64565b34801561054b57600080fd5b50610332610ca8565b34801561056057600080fd5b5061033261056f366004611f7c565b610d31565b34801561058057600080fd5b5061033261058f366004611f64565b610e2c565b3480156105a057600080fd5b50610349610e70565b3480156105b557600080fd5b50610349610e76565b3480156105ca57600080fd5b50610349610e7c565b6103326105e1366004611f7c565b610e82565b3480156105f257600080fd5b50610305610fbd565b34801561060757600080fd5b50610332610fcc565b34801561061c57600080fd5b506102d861101f565b34801561063157600080fd5b50610332610640366004611ddc565b61102e565b34801561065157600080fd5b50610332610660366004611cdc565b6110fc565b34801561067157600080fd5b50610332610680366004611d63565b61115c565b34801561069157600080fd5b506103326106a0366004611e3f565b61119b565b3480156106b157600080fd5b5061034961120e565b3480156106c657600080fd5b506103326106d5366004611cdc565b611213565b3480156106e657600080fd5b506102d86106f5366004611f64565b611276565b34801561070657600080fd5b5061071a610715366004611cdc565b6112db565b6040516102ba91906123b6565b34801561073357600080fd5b50610332610742366004611e3f565b6112f0565b610332611363565b34801561075b57600080fd5b506102ad61076a366004611cf6565b611396565b34801561077b57600080fd5b506103326113c4565b34801561079057600080fd5b506102ad611485565b3480156107a557600080fd5b5061034961148e565b3480156107ba57600080fd5b506102ad6107c9366004611cdc565b611494565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b60606009805461080090612493565b80601f016020809104026020016040519081016040528092919081815260200182805461082c90612493565b80156108795780601f1061084e57610100808354040283529160200191610879565b820191906000526020600020905b81548152906001019060200180831161085c57829003601f168201915b5050505050905090565b600061088e826114a9565b6108b35760405162461bcd60e51b81526004016108aa90612357565b60405180910390fd5b506000908152600260205260409020546001600160a01b031690565b60006108da82610be7565b9050806001600160a01b0316836001600160a01b0316141561090e5760405162461bcd60e51b81526004016108aa90612253565b806001600160a01b03166109206114be565b6001600160a01b0316148061093c575061093c8161076a6114be565b6109585760405162461bcd60e51b81526004016108aa9061228d565b61096283836114c2565b505050565b60085490565b6016818154811061097d57600080fd5b600091825260209091200154905081565b61099f6109996114be565b82611530565b6109bb5760405162461bcd60e51b81526004016108aa906121a6565b6109628383836115b5565b6109ce6114be565b6001600160a01b03166109df610fbd565b6001600160a01b031614610a055760405162461bcd60e51b81526004016108aa9061216c565b604051339082156108fc029083906000818181858888f19350505050158015610a32573d6000803e3d6000fd5b5050565b60005b601654811015610b0d57336001600160a01b0316610a8160168381548110610a7157634e487b7160e01b600052603260045260246000fd5b9060005260206000200154610be7565b6001600160a01b0316148015610aac57503360009081526018602052604090205460ff161515600114155b15610afb5733600081815260186020526040808220805460ff1916600117905551671bc16d674ec800009082818181858883f19350505050158015610af5573d6000803e3d6000fd5b50610b0d565b80610b05816124ce565b915050610a39565b50565b6109628383836040518060200160405280600081525061115c565b610b336114be565b6001600160a01b0316610b44610fbd565b6001600160a01b031614610b6a5760405162461bcd60e51b81526004016108aa9061216c565b600d55565b60135481565b60186020526000908152604090205460ff1681565b60176020526000908152604090205460ff1681565b610ba76114be565b6001600160a01b0316610bb8610fbd565b6001600160a01b031614610bde5760405162461bcd60e51b81526004016108aa9061216c565b610b0d816116e0565b6000808211610c085760405162461bcd60e51b81526004016108aa90612132565b506000908152600560205260409020546001600160a01b031690565b6015818154811061097d57600080fd5b600b5481565b6060600c805461080090612493565b60085481565b60106020526000908152604090205460ff1681565b60006001600160a01b038216610c8c5760405162461bcd60e51b81526004016108aa9061231d565b506001600160a01b031660009081526004602052604090205490565b610cb06114be565b6001600160a01b0316610cc1610fbd565b6001600160a01b031614610ce75760405162461bcd60e51b81526004016108aa9061216c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610d396114be565b6001600160a01b0316610d4a610fbd565b6001600160a01b031614610d705760405162461bcd60e51b81526004016108aa9061216c565b6000610d7a610967565b905060058260ff161115610da05760405162461bcd60e51b81526004016108aa90612374565b600b54610db060ff8416836123ee565b1115610dce5760405162461bcd60e51b81526004016108aa906120dc565b60125460ff16610df05760405162461bcd60e51b81526004016108aa906122c7565b60015b8260ff16811161096257600b54821015610e1a57610e1a33610e1583856123ee565b6116f3565b80610e24816124ce565b915050610df3565b610e346114be565b6001600160a01b0316610e45610fbd565b6001600160a01b031614610e6b5760405162461bcd60e51b81526004016108aa9061216c565b600e55565b600d5481565b600f5481565b600e5481565b6000610e8c610967565b905060058260ff161115610eb25760405162461bcd60e51b81526004016108aa90612374565b600b54610ec260ff8416836123ee565b1115610ee05760405162461bcd60e51b81526004016108aa906120dc565b60125460ff16610f025760405162461bcd60e51b81526004016108aa906122c7565b600e548260ff16610f1233610c64565b610f1c91906123ee565b1115610f3a5760405162461bcd60e51b81526004016108aa906121fd565b3360009081526011602052604090205460ff161515600114610f8657348260ff16600d54610f68919061241a565b1115610f865760405162461bcd60e51b81526004016108aa906122e3565b60015b8260ff16811161096257600b54821015610fab57610fab33610e1583856123ee565b80610fb5816124ce565b915050610f89565b6000546001600160a01b031690565b610fd46114be565b6001600160a01b0316610fe5610fbd565b6001600160a01b03161461100b5760405162461bcd60e51b81526004016108aa9061216c565b6012805460ff19811660ff90911615179055565b6060600a805461080090612493565b6110366114be565b6001600160a01b0316826001600160a01b031614156110675760405162461bcd60e51b81526004016108aa906121c3565b80600360006110746114be565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556110b86114be565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110f09190612085565b60405180910390a35050565b6111046114be565b6001600160a01b0316611115610fbd565b6001600160a01b03161461113b5760405162461bcd60e51b81526004016108aa9061216c565b6001600160a01b03166000908152601160205260409020805460ff19169055565b61116d6111676114be565b83611530565b6111895760405162461bcd60e51b81526004016108aa90612300565b6111958484848461170d565b50505050565b6111a36114be565b6001600160a01b03166111b4610fbd565b6001600160a01b0316146111da5760405162461bcd60e51b81526004016108aa9061216c565b8051600a146111fb5760405162461bcd60e51b81526004016108aa906121e0565b8051610a32906016906020840190611b9a565b600581565b61121b6114be565b6001600160a01b031661122c610fbd565b6001600160a01b0316146112525760405162461bcd60e51b81526004016108aa9061216c565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6060611281826114a9565b61129d5760405162461bcd60e51b81526004016108aa90612236565b60006112a7610c3a565b9050806112b384611740565b6040516020016112c4929190611fe5565b604051602081830303815290604052915050919050565b60076020526000908152604090205460ff1681565b6112f86114be565b6001600160a01b0316611309610fbd565b6001600160a01b03161461132f5760405162461bcd60e51b81526004016108aa9061216c565b80516005146113505760405162461bcd60e51b81526004016108aa90612115565b8051610a32906015906020840190611b9a565b600034116113835760405162461bcd60e51b81526004016108aa906120c0565b3460145461139191906123ee565b601455565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b60005b601554811015610b0d57336001600160a01b03166113ff60158381548110610a7157634e487b7160e01b600052603260045260246000fd5b6001600160a01b031614801561142a57503360009081526017602052604090205460ff161515600114155b156114735733600081815260176020526040808220805460ff1916600117905551671bc16d674ec800009082818181858883f19350505050158015610af5573d6000803e3d6000fd5b8061147d816124ce565b9150506113c7565b60125460ff1681565b60145481565b60116020526000908152604090205460ff1681565b60009081526006602052604090205460ff1690565b3390565b600081815260026020526040902080546001600160a01b0319166001600160a01b03841690811790915581906114f782610be7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061153b826114a9565b6115575760405162461bcd60e51b81526004016108aa9061214f565b600061156283610be7565b9050806001600160a01b0316846001600160a01b0316148061159d5750836001600160a01b031661159284610883565b6001600160a01b0316145b806115ad57506115ad8185611396565b949350505050565b826001600160a01b03166115c882610be7565b6001600160a01b0316146115ee5760405162461bcd60e51b81526004016108aa90612189565b6001600160a01b0382166116145760405162461bcd60e51b81526004016108aa9061233a565b61161f838383610962565b61162a6000826114c2565b6001600160a01b038316600090815260046020526040812080549161164e8361247c565b9091555050600081815260056020908152604080832080546001600160a01b0319166001600160a01b038716908117909155835260049091528120805491611695836124ce565b919050555080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8051610a3290600c906020840190611be5565b610a3282826040518060200160405280600081525061185b565b6117188484846115b5565b6117248484848461188e565b6111955760405162461bcd60e51b81526004016108aa906122aa565b60608161176557506040805180820190915260018152600360fc1b60208201526107ec565b8160005b811561178f5780611779816124ce565b91506117889050600a83612406565b9150611769565b60008167ffffffffffffffff8111156117b857634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156117e2576020820181803683370190505b5090505b84156115ad576117f7600183612439565b9150611804600a866124e9565b61180f9060306123ee565b60f81b81838151811061183257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611854600a86612406565b94506117e6565b611865838361196d565b611872600084848461188e565b6109625760405162461bcd60e51b81526004016108aa906120f8565b60006118a2846001600160a01b0316611a82565b6118ae575060016115ad565b6000611936630a85bd0160e11b6118c36114be565b8887876040516024016118d99493929190612048565b60408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b031990951694909417909352805180820190915260038152620ca64760eb1b928101929092526001600160a01b03881691611a88565b905060008180602001905181019061194e9190611f02565b6001600160e01b031916630a85bd0160e11b1492505050949350505050565b6001600160a01b0382166119935760405162461bcd60e51b81526004016108aa90612270565b61199c816114a9565b156119b95760405162461bcd60e51b81526004016108aa90612390565b6119c560008383610962565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b03871690811790915560068352818420805460ff19166001908117909155908452600490925290912054611a1c916123ee565b6001600160a01b038316600090815260046020526040902055600854611a439060016123ee565b60085560405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b6060611a978484600085611aa1565b90505b9392505050565b606082471015611ac35760405162461bcd60e51b81526004016108aa90612219565b611acc85611a82565b611ae85760405162461bcd60e51b81526004016108aa906120a3565b600080866001600160a01b03168587604051611b049190611fc9565b60006040518083038185875af1925050503d8060008114611b41576040519150601f19603f3d011682016040523d82523d6000602084013e611b46565b606091505b5091509150611b56828286611b61565b979650505050505050565b60608315611b70575081611a9a565b825115611b805782518084602001fd5b8160405162461bcd60e51b81526004016108aa9190612090565b828054828255906000526020600020908101928215611bd5579160200282015b82811115611bd5578251825591602001919060010190611bba565b50611be1929150611c58565b5090565b828054611bf190612493565b90600052602060002090601f016020900481019282611c135760008555611bd5565b82601f10611c2c57805160ff1916838001178555611bd5565b82800160010185558215611bd55791820182811115611bd5578251825591602001919060010190611bba565b5b80821115611be15760008155600101611c59565b600067ffffffffffffffff831115611c8757611c87612529565b611c9a601f8401601f19166020016123c4565b9050828152838383011115611cae57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146107ec57600080fd5b600060208284031215611ced578081fd5b611a9a82611cc5565b60008060408385031215611d08578081fd5b611d1183611cc5565b9150611d1f60208401611cc5565b90509250929050565b600080600060608486031215611d3c578081fd5b611d4584611cc5565b9250611d5360208501611cc5565b9150604084013590509250925092565b60008060008060808587031215611d78578081fd5b611d8185611cc5565b9350611d8f60208601611cc5565b925060408501359150606085013567ffffffffffffffff811115611db1578182fd5b8501601f81018713611dc1578182fd5b611dd087823560208401611c6d565b91505092959194509250565b60008060408385031215611dee578182fd5b611df783611cc5565b915060208301358015158114611e0b578182fd5b809150509250929050565b60008060408385031215611e28578182fd5b611e3183611cc5565b946020939093013593505050565b60006020808385031215611e51578182fd5b823567ffffffffffffffff80821115611e68578384fd5b818501915085601f830112611e7b578384fd5b813581811115611e8d57611e8d612529565b8381029150611e9d8483016123c4565b8181528481019084860184860187018a1015611eb7578788fd5b8795505b83861015611ed9578035835260019590950194918601918601611ebb565b5098975050505050505050565b600060208284031215611ef7578081fd5b8135611a9a8161253f565b600060208284031215611f13578081fd5b8151611a9a8161253f565b600060208284031215611f2f578081fd5b813567ffffffffffffffff811115611f45578182fd5b8201601f81018413611f55578182fd5b6115ad84823560208401611c6d565b600060208284031215611f75578081fd5b5035919050565b600060208284031215611f8d578081fd5b813560ff81168114611a9a578182fd5b60008151808452611fb5816020860160208601612450565b601f01601f19169290920160200192915050565b60008251611fdb818460208701612450565b9190910192915050565b600066697066733a2f2f60c81b82528351612007816007850160208801612450565b602f60f81b6007918401918201528351612028816008840160208801612450565b01600801949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061207b90830184611f9d565b9695505050505050565b901515815260200190565b600060208252611a9a6020830184611f9d565b60208082526003908201526265313160e81b604082015260600190565b602080825260029082015261653160f01b604082015260600190565b602080825260029082015261653360f01b604082015260600190565b60208082526003908201526265323360e81b604082015260600190565b60208082526003908201526204533360ec1b604082015260600190565b60208082526003908201526265313360e81b604082015260600190565b60208082526003908201526232991960e91b604082015260600190565b60208082526003908201526265323960e81b604082015260600190565b60208082526003908201526232991b60e91b604082015260600190565b60208082526003908201526265313960e81b604082015260600190565b6020808252600390820152620ca62760eb1b604082015260600190565b60208082526003908201526245333160e81b604082015260600190565b602080825260029082015261653560f01b604082015260600190565b60208082526003908201526206531360ec1b604082015260600190565b602080825260039082015262194c4d60ea1b604082015260600190565b60208082526003908201526265313560e81b604082015260600190565b602080825260039082015262194c8d60ea1b604082015260600190565b60208082526003908201526232989b60e91b604082015260600190565b60208082526003908201526265323160e81b604082015260600190565b602080825260029082015261194d60f21b604082015260600190565b60208082526003908201526245313560e81b604082015260600190565b60208082526003908201526206532360ec1b604082015260600190565b60208082526003908201526232989960e91b604082015260600190565b60208082526003908201526265323760e81b604082015260600190565b60208082526003908201526265313760e81b604082015260600190565b602080825260029082015261329960f11b604082015260600190565b60208082526003908201526265323560e81b604082015260600190565b90815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156123e6576123e6612529565b604052919050565b60008219821115612401576124016124fd565b500190565b60008261241557612415612513565b500490565b6000816000190483118215151615612434576124346124fd565b500290565b60008282101561244b5761244b6124fd565b500390565b60005b8381101561246b578181015183820152602001612453565b838111156111955750506000910152565b60008161248b5761248b6124fd565b506000190190565b6002810460018216806124a757607f821691505b602082108114156124c857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156124e2576124e26124fd565b5060010190565b6000826124f8576124f8612513565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610b0d57600080fdfea264697066735822122041732cc10dbcf6268fa726ee1c8d701425a493f6d11f28c2952816f504f6e45c64736f6c63430008000033516d58586255514c734c3769446a54646d714b5657414d7a78364339536473346e61326b76723842464a43794c72000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001e6100000000000000000000000000000000000000000000000000000000000000095377696d2e736b696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000353534b0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102885760003560e01c8063735263561161015a578063bb7471fe116100c1578063d885a21e1161007a578063d885a21e14610747578063e985e9c51461074f578063e9b5a2f71461076f578063eb8d244414610784578063eef49ee314610799578063fa07ce1d146107ae57610288565b8063bb7471fe14610685578063c2e1debf146106a5578063c44644d0146106ba578063c87b56dd146106da578063cfb15ef0146106fa578063d8795f5c1461072757610288565b80638da5cb5b116101135780638da5cb5b146105e65780638e920351146105fb57806395d89b4114610610578063a22cb46514610625578063a930aa6814610645578063b88d4fde1461066557610288565b806373526356146105545780637db1342c146105745780637ff9b59614610594578063807f54f6146105a9578063861d47b4146105be57806388dba7fd146105d357610288565b80634a2eeebb116101fe578063686e1079116101b7578063686e1079146104c05780636c0360eb146104d55780636de9f32b146104ea5780636ef61092146104ff57806370a082311461051f578063715018a61461053f57610288565b80634a2eeebb1461040b5780634a6b07af1461042057806354e05b871461044057806355f804b3146104605780636352211e1461048057806366ebc7d3146104a057610288565b80631c2f8211116102505780631c2f82111461035657806323b872dd146103765780632e1a7d4d146103965780633d363f15146103b657806342842e0e146103cb57806345e13a0c146103eb57610288565b806301ffc9a71461028d57806306fdde03146102c3578063081812fc146102e5578063095ea7b31461031257806318160ddd14610334575b600080fd5b34801561029957600080fd5b506102ad6102a8366004611ee6565b6107ce565b6040516102ba9190612085565b60405180910390f35b3480156102cf57600080fd5b506102d86107f1565b6040516102ba9190612090565b3480156102f157600080fd5b50610305610300366004611f64565b610883565b6040516102ba9190612034565b34801561031e57600080fd5b5061033261032d366004611e16565b6108cf565b005b34801561034057600080fd5b50610349610967565b6040516102ba91906123ad565b34801561036257600080fd5b50610349610371366004611f64565b61096d565b34801561038257600080fd5b50610332610391366004611d28565b61098e565b3480156103a257600080fd5b506103326103b1366004611f64565b6109c6565b3480156103c257600080fd5b50610332610a36565b3480156103d757600080fd5b506103326103e6366004611d28565b610b10565b3480156103f757600080fd5b50610332610406366004611f64565b610b2b565b34801561041757600080fd5b50610349610b6f565b34801561042c57600080fd5b506102ad61043b366004611cdc565b610b75565b34801561044c57600080fd5b506102ad61045b366004611cdc565b610b8a565b34801561046c57600080fd5b5061033261047b366004611f1e565b610b9f565b34801561048c57600080fd5b5061030561049b366004611f64565b610be7565b3480156104ac57600080fd5b506103496104bb366004611f64565b610c24565b3480156104cc57600080fd5b50610349610c34565b3480156104e157600080fd5b506102d8610c3a565b3480156104f657600080fd5b50610349610c49565b34801561050b57600080fd5b506102ad61051a366004611cdc565b610c4f565b34801561052b57600080fd5b5061034961053a366004611cdc565b610c64565b34801561054b57600080fd5b50610332610ca8565b34801561056057600080fd5b5061033261056f366004611f7c565b610d31565b34801561058057600080fd5b5061033261058f366004611f64565b610e2c565b3480156105a057600080fd5b50610349610e70565b3480156105b557600080fd5b50610349610e76565b3480156105ca57600080fd5b50610349610e7c565b6103326105e1366004611f7c565b610e82565b3480156105f257600080fd5b50610305610fbd565b34801561060757600080fd5b50610332610fcc565b34801561061c57600080fd5b506102d861101f565b34801561063157600080fd5b50610332610640366004611ddc565b61102e565b34801561065157600080fd5b50610332610660366004611cdc565b6110fc565b34801561067157600080fd5b50610332610680366004611d63565b61115c565b34801561069157600080fd5b506103326106a0366004611e3f565b61119b565b3480156106b157600080fd5b5061034961120e565b3480156106c657600080fd5b506103326106d5366004611cdc565b611213565b3480156106e657600080fd5b506102d86106f5366004611f64565b611276565b34801561070657600080fd5b5061071a610715366004611cdc565b6112db565b6040516102ba91906123b6565b34801561073357600080fd5b50610332610742366004611e3f565b6112f0565b610332611363565b34801561075b57600080fd5b506102ad61076a366004611cf6565b611396565b34801561077b57600080fd5b506103326113c4565b34801561079057600080fd5b506102ad611485565b3480156107a557600080fd5b5061034961148e565b3480156107ba57600080fd5b506102ad6107c9366004611cdc565b611494565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b60606009805461080090612493565b80601f016020809104026020016040519081016040528092919081815260200182805461082c90612493565b80156108795780601f1061084e57610100808354040283529160200191610879565b820191906000526020600020905b81548152906001019060200180831161085c57829003601f168201915b5050505050905090565b600061088e826114a9565b6108b35760405162461bcd60e51b81526004016108aa90612357565b60405180910390fd5b506000908152600260205260409020546001600160a01b031690565b60006108da82610be7565b9050806001600160a01b0316836001600160a01b0316141561090e5760405162461bcd60e51b81526004016108aa90612253565b806001600160a01b03166109206114be565b6001600160a01b0316148061093c575061093c8161076a6114be565b6109585760405162461bcd60e51b81526004016108aa9061228d565b61096283836114c2565b505050565b60085490565b6016818154811061097d57600080fd5b600091825260209091200154905081565b61099f6109996114be565b82611530565b6109bb5760405162461bcd60e51b81526004016108aa906121a6565b6109628383836115b5565b6109ce6114be565b6001600160a01b03166109df610fbd565b6001600160a01b031614610a055760405162461bcd60e51b81526004016108aa9061216c565b604051339082156108fc029083906000818181858888f19350505050158015610a32573d6000803e3d6000fd5b5050565b60005b601654811015610b0d57336001600160a01b0316610a8160168381548110610a7157634e487b7160e01b600052603260045260246000fd5b9060005260206000200154610be7565b6001600160a01b0316148015610aac57503360009081526018602052604090205460ff161515600114155b15610afb5733600081815260186020526040808220805460ff1916600117905551671bc16d674ec800009082818181858883f19350505050158015610af5573d6000803e3d6000fd5b50610b0d565b80610b05816124ce565b915050610a39565b50565b6109628383836040518060200160405280600081525061115c565b610b336114be565b6001600160a01b0316610b44610fbd565b6001600160a01b031614610b6a5760405162461bcd60e51b81526004016108aa9061216c565b600d55565b60135481565b60186020526000908152604090205460ff1681565b60176020526000908152604090205460ff1681565b610ba76114be565b6001600160a01b0316610bb8610fbd565b6001600160a01b031614610bde5760405162461bcd60e51b81526004016108aa9061216c565b610b0d816116e0565b6000808211610c085760405162461bcd60e51b81526004016108aa90612132565b506000908152600560205260409020546001600160a01b031690565b6015818154811061097d57600080fd5b600b5481565b6060600c805461080090612493565b60085481565b60106020526000908152604090205460ff1681565b60006001600160a01b038216610c8c5760405162461bcd60e51b81526004016108aa9061231d565b506001600160a01b031660009081526004602052604090205490565b610cb06114be565b6001600160a01b0316610cc1610fbd565b6001600160a01b031614610ce75760405162461bcd60e51b81526004016108aa9061216c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610d396114be565b6001600160a01b0316610d4a610fbd565b6001600160a01b031614610d705760405162461bcd60e51b81526004016108aa9061216c565b6000610d7a610967565b905060058260ff161115610da05760405162461bcd60e51b81526004016108aa90612374565b600b54610db060ff8416836123ee565b1115610dce5760405162461bcd60e51b81526004016108aa906120dc565b60125460ff16610df05760405162461bcd60e51b81526004016108aa906122c7565b60015b8260ff16811161096257600b54821015610e1a57610e1a33610e1583856123ee565b6116f3565b80610e24816124ce565b915050610df3565b610e346114be565b6001600160a01b0316610e45610fbd565b6001600160a01b031614610e6b5760405162461bcd60e51b81526004016108aa9061216c565b600e55565b600d5481565b600f5481565b600e5481565b6000610e8c610967565b905060058260ff161115610eb25760405162461bcd60e51b81526004016108aa90612374565b600b54610ec260ff8416836123ee565b1115610ee05760405162461bcd60e51b81526004016108aa906120dc565b60125460ff16610f025760405162461bcd60e51b81526004016108aa906122c7565b600e548260ff16610f1233610c64565b610f1c91906123ee565b1115610f3a5760405162461bcd60e51b81526004016108aa906121fd565b3360009081526011602052604090205460ff161515600114610f8657348260ff16600d54610f68919061241a565b1115610f865760405162461bcd60e51b81526004016108aa906122e3565b60015b8260ff16811161096257600b54821015610fab57610fab33610e1583856123ee565b80610fb5816124ce565b915050610f89565b6000546001600160a01b031690565b610fd46114be565b6001600160a01b0316610fe5610fbd565b6001600160a01b03161461100b5760405162461bcd60e51b81526004016108aa9061216c565b6012805460ff19811660ff90911615179055565b6060600a805461080090612493565b6110366114be565b6001600160a01b0316826001600160a01b031614156110675760405162461bcd60e51b81526004016108aa906121c3565b80600360006110746114be565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556110b86114be565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110f09190612085565b60405180910390a35050565b6111046114be565b6001600160a01b0316611115610fbd565b6001600160a01b03161461113b5760405162461bcd60e51b81526004016108aa9061216c565b6001600160a01b03166000908152601160205260409020805460ff19169055565b61116d6111676114be565b83611530565b6111895760405162461bcd60e51b81526004016108aa90612300565b6111958484848461170d565b50505050565b6111a36114be565b6001600160a01b03166111b4610fbd565b6001600160a01b0316146111da5760405162461bcd60e51b81526004016108aa9061216c565b8051600a146111fb5760405162461bcd60e51b81526004016108aa906121e0565b8051610a32906016906020840190611b9a565b600581565b61121b6114be565b6001600160a01b031661122c610fbd565b6001600160a01b0316146112525760405162461bcd60e51b81526004016108aa9061216c565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6060611281826114a9565b61129d5760405162461bcd60e51b81526004016108aa90612236565b60006112a7610c3a565b9050806112b384611740565b6040516020016112c4929190611fe5565b604051602081830303815290604052915050919050565b60076020526000908152604090205460ff1681565b6112f86114be565b6001600160a01b0316611309610fbd565b6001600160a01b03161461132f5760405162461bcd60e51b81526004016108aa9061216c565b80516005146113505760405162461bcd60e51b81526004016108aa90612115565b8051610a32906015906020840190611b9a565b600034116113835760405162461bcd60e51b81526004016108aa906120c0565b3460145461139191906123ee565b601455565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b60005b601554811015610b0d57336001600160a01b03166113ff60158381548110610a7157634e487b7160e01b600052603260045260246000fd5b6001600160a01b031614801561142a57503360009081526017602052604090205460ff161515600114155b156114735733600081815260176020526040808220805460ff1916600117905551671bc16d674ec800009082818181858883f19350505050158015610af5573d6000803e3d6000fd5b8061147d816124ce565b9150506113c7565b60125460ff1681565b60145481565b60116020526000908152604090205460ff1681565b60009081526006602052604090205460ff1690565b3390565b600081815260026020526040902080546001600160a01b0319166001600160a01b03841690811790915581906114f782610be7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061153b826114a9565b6115575760405162461bcd60e51b81526004016108aa9061214f565b600061156283610be7565b9050806001600160a01b0316846001600160a01b0316148061159d5750836001600160a01b031661159284610883565b6001600160a01b0316145b806115ad57506115ad8185611396565b949350505050565b826001600160a01b03166115c882610be7565b6001600160a01b0316146115ee5760405162461bcd60e51b81526004016108aa90612189565b6001600160a01b0382166116145760405162461bcd60e51b81526004016108aa9061233a565b61161f838383610962565b61162a6000826114c2565b6001600160a01b038316600090815260046020526040812080549161164e8361247c565b9091555050600081815260056020908152604080832080546001600160a01b0319166001600160a01b038716908117909155835260049091528120805491611695836124ce565b919050555080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8051610a3290600c906020840190611be5565b610a3282826040518060200160405280600081525061185b565b6117188484846115b5565b6117248484848461188e565b6111955760405162461bcd60e51b81526004016108aa906122aa565b60608161176557506040805180820190915260018152600360fc1b60208201526107ec565b8160005b811561178f5780611779816124ce565b91506117889050600a83612406565b9150611769565b60008167ffffffffffffffff8111156117b857634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156117e2576020820181803683370190505b5090505b84156115ad576117f7600183612439565b9150611804600a866124e9565b61180f9060306123ee565b60f81b81838151811061183257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611854600a86612406565b94506117e6565b611865838361196d565b611872600084848461188e565b6109625760405162461bcd60e51b81526004016108aa906120f8565b60006118a2846001600160a01b0316611a82565b6118ae575060016115ad565b6000611936630a85bd0160e11b6118c36114be565b8887876040516024016118d99493929190612048565b60408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b031990951694909417909352805180820190915260038152620ca64760eb1b928101929092526001600160a01b03881691611a88565b905060008180602001905181019061194e9190611f02565b6001600160e01b031916630a85bd0160e11b1492505050949350505050565b6001600160a01b0382166119935760405162461bcd60e51b81526004016108aa90612270565b61199c816114a9565b156119b95760405162461bcd60e51b81526004016108aa90612390565b6119c560008383610962565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b03871690811790915560068352818420805460ff19166001908117909155908452600490925290912054611a1c916123ee565b6001600160a01b038316600090815260046020526040902055600854611a439060016123ee565b60085560405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b6060611a978484600085611aa1565b90505b9392505050565b606082471015611ac35760405162461bcd60e51b81526004016108aa90612219565b611acc85611a82565b611ae85760405162461bcd60e51b81526004016108aa906120a3565b600080866001600160a01b03168587604051611b049190611fc9565b60006040518083038185875af1925050503d8060008114611b41576040519150601f19603f3d011682016040523d82523d6000602084013e611b46565b606091505b5091509150611b56828286611b61565b979650505050505050565b60608315611b70575081611a9a565b825115611b805782518084602001fd5b8160405162461bcd60e51b81526004016108aa9190612090565b828054828255906000526020600020908101928215611bd5579160200282015b82811115611bd5578251825591602001919060010190611bba565b50611be1929150611c58565b5090565b828054611bf190612493565b90600052602060002090601f016020900481019282611c135760008555611bd5565b82601f10611c2c57805160ff1916838001178555611bd5565b82800160010185558215611bd55791820182811115611bd5578251825591602001919060010190611bba565b5b80821115611be15760008155600101611c59565b600067ffffffffffffffff831115611c8757611c87612529565b611c9a601f8401601f19166020016123c4565b9050828152838383011115611cae57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146107ec57600080fd5b600060208284031215611ced578081fd5b611a9a82611cc5565b60008060408385031215611d08578081fd5b611d1183611cc5565b9150611d1f60208401611cc5565b90509250929050565b600080600060608486031215611d3c578081fd5b611d4584611cc5565b9250611d5360208501611cc5565b9150604084013590509250925092565b60008060008060808587031215611d78578081fd5b611d8185611cc5565b9350611d8f60208601611cc5565b925060408501359150606085013567ffffffffffffffff811115611db1578182fd5b8501601f81018713611dc1578182fd5b611dd087823560208401611c6d565b91505092959194509250565b60008060408385031215611dee578182fd5b611df783611cc5565b915060208301358015158114611e0b578182fd5b809150509250929050565b60008060408385031215611e28578182fd5b611e3183611cc5565b946020939093013593505050565b60006020808385031215611e51578182fd5b823567ffffffffffffffff80821115611e68578384fd5b818501915085601f830112611e7b578384fd5b813581811115611e8d57611e8d612529565b8381029150611e9d8483016123c4565b8181528481019084860184860187018a1015611eb7578788fd5b8795505b83861015611ed9578035835260019590950194918601918601611ebb565b5098975050505050505050565b600060208284031215611ef7578081fd5b8135611a9a8161253f565b600060208284031215611f13578081fd5b8151611a9a8161253f565b600060208284031215611f2f578081fd5b813567ffffffffffffffff811115611f45578182fd5b8201601f81018413611f55578182fd5b6115ad84823560208401611c6d565b600060208284031215611f75578081fd5b5035919050565b600060208284031215611f8d578081fd5b813560ff81168114611a9a578182fd5b60008151808452611fb5816020860160208601612450565b601f01601f19169290920160200192915050565b60008251611fdb818460208701612450565b9190910192915050565b600066697066733a2f2f60c81b82528351612007816007850160208801612450565b602f60f81b6007918401918201528351612028816008840160208801612450565b01600801949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061207b90830184611f9d565b9695505050505050565b901515815260200190565b600060208252611a9a6020830184611f9d565b60208082526003908201526265313160e81b604082015260600190565b602080825260029082015261653160f01b604082015260600190565b602080825260029082015261653360f01b604082015260600190565b60208082526003908201526265323360e81b604082015260600190565b60208082526003908201526204533360ec1b604082015260600190565b60208082526003908201526265313360e81b604082015260600190565b60208082526003908201526232991960e91b604082015260600190565b60208082526003908201526265323960e81b604082015260600190565b60208082526003908201526232991b60e91b604082015260600190565b60208082526003908201526265313960e81b604082015260600190565b6020808252600390820152620ca62760eb1b604082015260600190565b60208082526003908201526245333160e81b604082015260600190565b602080825260029082015261653560f01b604082015260600190565b60208082526003908201526206531360ec1b604082015260600190565b602080825260039082015262194c4d60ea1b604082015260600190565b60208082526003908201526265313560e81b604082015260600190565b602080825260039082015262194c8d60ea1b604082015260600190565b60208082526003908201526232989b60e91b604082015260600190565b60208082526003908201526265323160e81b604082015260600190565b602080825260029082015261194d60f21b604082015260600190565b60208082526003908201526245313560e81b604082015260600190565b60208082526003908201526206532360ec1b604082015260600190565b60208082526003908201526232989960e91b604082015260600190565b60208082526003908201526265323760e81b604082015260600190565b60208082526003908201526265313760e81b604082015260600190565b602080825260029082015261329960f11b604082015260600190565b60208082526003908201526265323560e81b604082015260600190565b90815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156123e6576123e6612529565b604052919050565b60008219821115612401576124016124fd565b500190565b60008261241557612415612513565b500490565b6000816000190483118215151615612434576124346124fd565b500290565b60008282101561244b5761244b6124fd565b500390565b60005b8381101561246b578181015183820152602001612453565b838111156111955750506000910152565b60008161248b5761248b6124fd565b506000190190565b6002810460018216806124a757607f821691505b602082108114156124c857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156124e2576124e26124fd565b5060010190565b6000826124f8576124f8612513565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610b0d57600080fdfea264697066735822122041732cc10dbcf6268fa726ee1c8d701425a493f6d11f28c2952816f504f6e45c64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001e6100000000000000000000000000000000000000000000000000000000000000095377696d2e736b696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000353534b0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Swim.skin
Arg [1] : symbol (string): SSK
Arg [2] : maxNftSupply (uint256): 7777
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000001e61
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [4] : 5377696d2e736b696e0000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 53534b0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
38123:4179:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10229:150;;;;;;;;;;-1:-1:-1;10229:150:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23574:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26324:180::-;;;;;;;;;;-1:-1:-1;26324:180:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25937:321::-;;;;;;;;;;-1:-1:-1;25937:321:0;;;;;:::i;:::-;;:::i;:::-;;25354:268;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;38636:30::-;;;;;;;;;;-1:-1:-1;38636:30:0;;;;;:::i;:::-;;:::i;27151:259::-;;;;;;;;;;-1:-1:-1;27151:259:0;;;;;:::i;:::-;;:::i;38950:106::-;;;;;;;;;;-1:-1:-1;38950:106:0;;;;;:::i;:::-;;:::i;41120:413::-;;;;;;;;;;;;;:::i;27481:151::-;;;;;;;;;;-1:-1:-1;27481:151:0;;;;;:::i;:::-;;:::i;41541:92::-;;;;;;;;;;-1:-1:-1;41541:92:0;;;;;:::i;:::-;;:::i;38519:35::-;;;;;;;;;;;;;:::i;38737:56::-;;;;;;;;;;-1:-1:-1;38737:56:0;;;;;:::i;:::-;;:::i;38675:55::-;;;;;;;;;;-1:-1:-1;38675:55:0;;;;;:::i;:::-;;:::i;39532:99::-;;;;;;;;;;-1:-1:-1;39532:99:0;;;;;:::i;:::-;;:::i;23253:254::-;;;;;;;;;;-1:-1:-1;23253:254:0;;;;;:::i;:::-;;:::i;38600:29::-;;;;;;;;;;-1:-1:-1;38600:29:0;;;;;:::i;:::-;;:::i;20513:22::-;;;;;;;;;;;;;:::i;24931:97::-;;;;;;;;;;;;;:::i;20373:31::-;;;;;;;;;;;;;:::i;38377:42::-;;;;;;;;;;-1:-1:-1;38377:42:0;;;;;:::i;:::-;;:::i;22970:221::-;;;;;;;;;;-1:-1:-1;22970:221:0;;;;;:::i;:::-;;:::i;37501:148::-;;;;;;;;;;;;;:::i;39732:601::-;;;;;;;;;;-1:-1:-1;39732:601:0;;;;;:::i;:::-;;:::i;39064:104::-;;;;;;;;;;-1:-1:-1;39064:104:0;;;;;:::i;:::-;;:::i;38169:45::-;;;;;;;;;;;;;:::i;38334:30::-;;;;;;;;;;;;;:::i;38289:34::-;;;;;;;;;;;;;:::i;41641:652::-;;;;;;:::i;:::-;;:::i;36879:87::-;;;;;;;;;;;;;:::i;39639:85::-;;;;;;;;;;;;;:::i;23743:104::-;;;;;;;;;;;;;:::i;26576:273::-;;;;;;;;;;-1:-1:-1;26576:273:0;;;;;:::i;:::-;;:::i;39280:100::-;;;;;;;;;;-1:-1:-1;39280:100:0;;;;;:::i;:::-;;:::i;27703:239::-;;;;;;;;;;-1:-1:-1;27703:239:0;;;;;:::i;:::-;;:::i;40521:175::-;;;;;;;;;;-1:-1:-1;40521:175:0;;;;;:::i;:::-;;:::i;38238:42::-;;;;;;;;;;;;;:::i;39176:96::-;;;;;;;;;;-1:-1:-1;39176:96:0;;;;;:::i;:::-;;:::i;23918:774::-;;;;;;;;;;-1:-1:-1;23918:774:0;;;;;:::i;:::-;;:::i;20321:43::-;;;;;;;;;;-1:-1:-1;20321:43:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;40341:172::-;;;;;;;;;;-1:-1:-1;40341:172:0;;;;;:::i;:::-;;:::i;39388:134::-;;;:::i;26920:164::-;;;;;;;;;;-1:-1:-1;26920:164:0;;;;;:::i;:::-;;:::i;40704:408::-;;;;;;;;;;;;;:::i;38478:32::-;;;;;;;;;;;;;:::i;38563:28::-;;;;;;;;;;;;;:::i;38428:41::-;;;;;;;;;;-1:-1:-1;38428:41:0;;;;;:::i;:::-;;:::i;10229:150::-;-1:-1:-1;;;;;;10338:33:0;;10314:4;10338:33;;;:20;:33;;;;;;;;10229:150;;;;:::o;23574:100::-;23628:13;23661:5;23654:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23574:100;:::o;26324:180::-;26400:7;26428:16;26436:7;26428;:16::i;:::-;26420:32;;;;-1:-1:-1;;;26420:32:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;26472:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26472:24:0;;26324:180::o;25937:321::-;26018:13;26034:23;26049:7;26034:14;:23::i;:::-;26018:39;;26082:5;-1:-1:-1;;;;;26076:11:0;:2;-1:-1:-1;;;;;26076:11:0;;;26068:27;;;;-1:-1:-1;;;26068:27:0;;;;;;;:::i;:::-;26132:5;-1:-1:-1;;;;;26116:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;26116:21:0;;:69;;;;26141:44;26165:5;26172:12;:10;:12::i;26141:44::-;26108:108;;;;-1:-1:-1;;;26108:108:0;;;;;;;:::i;:::-;26229:21;26238:2;26242:7;26229:8;:21::i;:::-;25937:321;;;:::o;25354:268::-;25602:12;;25354:268;:::o;38636:30::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38636:30:0;:::o;27151:259::-;27312:41;27331:12;:10;:12::i;:::-;27345:7;27312:18;:41::i;:::-;27304:57;;;;-1:-1:-1;;;27304:57:0;;;;;;;:::i;:::-;27374:28;27384:4;27390:2;27394:7;27374:9;:28::i;38950:106::-;37110:12;:10;:12::i;:::-;-1:-1:-1;;;;;37099:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37099:23:0;;37091:39;;;;-1:-1:-1;;;37091:39:0;;;;;;;:::i;:::-;39012:36:::1;::::0;39020:10:::1;::::0;39012:36;::::1;;;::::0;39041:6;;39012:36:::1;::::0;;;39041:6;39020:10;39012:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;38950:106:::0;:::o;41120:413::-;41169:15;41164:362;41200:13;:20;41190:30;;41164:362;;;41287:10;-1:-1:-1;;;;;41252:45:0;:31;41260:13;41274:7;41260:22;;;;;;-1:-1:-1;;;41260:22:0;;;;;;;;;;;;;;;;;41252:7;:31::i;:::-;-1:-1:-1;;;;;41252:45:0;;:92;;;;-1:-1:-1;41325:10:0;41301:35;;;;:23;:35;;;;;;;;:43;;:35;:43;;41252:92;41248:267;;;41389:10;41365:35;;;;:23;:35;;;;;;:42;;-1:-1:-1;;41365:42:0;41403:4;41365:42;;;41426:49;41455:19;;41365:35;41426:49;41365:35;41426:49;41455:19;41389:10;41365:35;41426:49;;;;;;;;;;;;;;;;;;;;41494:5;;41248:267;41222:9;;;;:::i;:::-;;;;41164:362;;;;41120:413::o;27481:151::-;27585:39;27602:4;27608:2;27612:7;27585:39;;;;;;;;;;;;:16;:39::i;41541:92::-;37110:12;:10;:12::i;:::-;-1:-1:-1;;;;;37099:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37099:23:0;;37091:39;;;;-1:-1:-1;;;37091:39:0;;;;;;;:::i;:::-;41606:10:::1;:19:::0;41541:92::o;38519:35::-;;;;:::o;38737:56::-;;;;;;;;;;;;;;;:::o;38675:55::-;;;;;;;;;;;;;;;:::o;39532:99::-;37110:12;:10;:12::i;:::-;-1:-1:-1;;;;;37099:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37099:23:0;;37091:39;;;;-1:-1:-1;;;37091:39:0;;;;;;;:::i;:::-;39603:20:::1;39615:7;39603:11;:20::i;23253:254::-:0;23325:7;23453:1;23443:7;:11;23435:27;;;;-1:-1:-1;;;23435:27:0;;;;;;;:::i;:::-;-1:-1:-1;23480:19:0;;;;:10;:19;;;;;;-1:-1:-1;;;;;23480:19:0;;23253:254::o;38600:29::-;;;;;;;;;;;;20513:22;;;;:::o;24931:97::-;24979:13;25012:8;25005:15;;;;;:::i;20373:31::-;;;;:::o;38377:42::-;;;;;;;;;;;;;;;:::o;22970:221::-;23042:7;-1:-1:-1;;;;;23070:19:0;;23062:35;;;;-1:-1:-1;;;23062:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23164:19:0;;;;;:12;:19;;;;;;;22970:221::o;37501:148::-;37110:12;:10;:12::i;:::-;-1:-1:-1;;;;;37099:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37099:23:0;;37091:39;;;;-1:-1:-1;;;37091:39:0;;;;;;;:::i;:::-;37608:1:::1;37592:6:::0;;37571:40:::1;::::0;-1:-1:-1;;;;;37592:6:0;;::::1;::::0;37571:40:::1;::::0;37608:1;;37571:40:::1;37639:1;37622:19:::0;;-1:-1:-1;;;;;;37622:19:0::1;::::0;;37501:148::o;39732:601::-;37110:12;:10;:12::i;:::-;-1:-1:-1;;;;;37099:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37099:23:0;;37091:39;;;;-1:-1:-1;;;37091:39:0;;;;;;;:::i;:::-;39802:14:::1;39819:13;:11;:13::i;:::-;39802:30;;38279:1;39851:14;:32;;;;39843:47;;;;-1:-1:-1::0;;;39843:47:0::1;;;;;;;:::i;:::-;39938:7;::::0;39910:23:::1;;::::0;::::1;:6:::0;:23:::1;:::i;:::-;39909:36;;39901:51;;;;-1:-1:-1::0;;;39901:51:0::1;;;;;;;:::i;:::-;39971:12;::::0;::::1;;39963:27;;;;-1:-1:-1::0;;;39963:27:0::1;;;;;;;:::i;:::-;40181:1;40165:161;40189:14;40184:19;;:1;:19;40165:161;;40238:7;;40229:6;:16;40225:90;;;40266:33;40276:10;40288;40297:1:::0;40288:6;:10:::1;:::i;:::-;40266:9;:33::i;:::-;40205:3:::0;::::1;::::0;::::1;:::i;:::-;;;;40165:161;;39064:104:::0;37110:12;:10;:12::i;:::-;-1:-1:-1;;;;;37099:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37099:23:0;;37091:39;;;;-1:-1:-1;;;37091:39:0;;;;;;;:::i;:::-;39135:15:::1;:24:::0;39064:104::o;38169:45::-;;;;:::o;38334:30::-;;;;:::o;38289:34::-;;;;:::o;41641:652::-;41706:14;41723:13;:11;:13::i;:::-;41706:30;;38279:1;41755:14;:32;;;;41747:47;;;;-1:-1:-1;;;41747:47:0;;;;;;;:::i;:::-;41842:7;;41814:23;;;;:6;:23;:::i;:::-;41813:36;;41805:51;;;;-1:-1:-1;;;41805:51:0;;;;;;;:::i;:::-;41875:12;;;;41867:27;;;;-1:-1:-1;;;41867:27:0;;;;;;;:::i;:::-;41959:15;;41940:14;41916:38;;:21;41926:10;41916:9;:21::i;:::-;:38;;;;:::i;:::-;41915:59;;41907:74;;;;-1:-1:-1;;;41907:74:0;;;;;;;:::i;:::-;42007:10;41998:20;;;;:8;:20;;;;;;;;:28;;:20;:28;41994:119;;42084:9;42065:14;42052:27;;:10;;:27;;;;:::i;:::-;42051:42;;42043:58;;;;-1:-1:-1;;;42043:58:0;;;;;;;:::i;:::-;42141:1;42125:161;42149:14;42144:19;;:1;:19;42125:161;;42198:7;;42189:6;:16;42185:90;;;42226:33;42236:10;42248;42257:1;42248:6;:10;:::i;42226:33::-;42165:3;;;;:::i;:::-;;;;42125:161;;36879:87;36925:7;36952:6;-1:-1:-1;;;;;36952:6:0;36879:87;:::o;39639:85::-;37110:12;:10;:12::i;:::-;-1:-1:-1;;;;;37099:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37099:23:0;;37091:39;;;;-1:-1:-1;;;37091:39:0;;;;;;;:::i;:::-;39704:12:::1;::::0;;-1:-1:-1;;39688:28:0;::::1;39704:12;::::0;;::::1;39703:13;39688:28;::::0;;39639:85::o;23743:104::-;23799:13;23832:7;23825:14;;;;;:::i;26576:273::-;26691:12;:10;:12::i;:::-;-1:-1:-1;;;;;26679:24:0;:8;-1:-1:-1;;;;;26679:24:0;;;26671:40;;;;-1:-1:-1;;;26671:40:0;;;;;;;:::i;:::-;26769:8;26724:18;:32;26743:12;:10;:12::i;:::-;-1:-1:-1;;;;;26724:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;26724:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;26724:53:0;;;;;;;;;;;26808:12;:10;:12::i;:::-;-1:-1:-1;;;;;26793:48:0;;26832:8;26793:48;;;;;;:::i;:::-;;;;;;;;26576:273;;:::o;39280:100::-;37110:12;:10;:12::i;:::-;-1:-1:-1;;;;;37099:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37099:23:0;;37091:39;;;;-1:-1:-1;;;37091:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39346:18:0::1;39367:5;39346:18:::0;;;:8:::1;:18;::::0;;;;:26;;-1:-1:-1;;39346:26:0::1;::::0;;39280:100::o;27703:239::-;27835:41;27854:12;:10;:12::i;:::-;27868:7;27835:18;:41::i;:::-;27827:57;;;;-1:-1:-1;;;27827:57:0;;;;;;;:::i;:::-;27895:39;27909:4;27915:2;27919:7;27928:5;27895:13;:39::i;:::-;27703:239;;;;:::o;40521:175::-;37110:12;:10;:12::i;:::-;-1:-1:-1;;;;;37099:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37099:23:0;;37091:39;;;;-1:-1:-1;;;37091:39:0;;;;;;;:::i;:::-;40614:13:::1;:20;40638:2;40614:26;40606:42;;;;-1:-1:-1::0;;;40606:42:0::1;;;;;;;:::i;:::-;40659:29:::0;;::::1;::::0;:13:::1;::::0;:29:::1;::::0;::::1;::::0;::::1;:::i;38238:42::-:0;38279:1;38238:42;:::o;39176:96::-;37110:12;:10;:12::i;:::-;-1:-1:-1;;;;;37099:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37099:23:0;;37091:39;;;;-1:-1:-1;;;37091:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39239:18:0::1;;::::0;;;:8:::1;:18;::::0;;;;:25;;-1:-1:-1;;39239:25:0::1;39260:4;39239:25;::::0;;39176:96::o;23918:774::-;23991:13;24025:16;24033:7;24025;:16::i;:::-;24017:32;;;;-1:-1:-1;;;24017:32:0;;;;;;;:::i;:::-;24120:18;24141:9;:7;:9::i;:::-;24120:30;;24653:4;24664:18;:7;:16;:18::i;:::-;24625:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24611:73;;;23918:774;;;:::o;20321:43::-;;;;;;;;;;;;;;;:::o;40341:172::-;37110:12;:10;:12::i;:::-;-1:-1:-1;;;;;37099:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37099:23:0;;37091:39;;;;-1:-1:-1;;;37091:39:0;;;;;;;:::i;:::-;40433:13:::1;:20;40457:1;40433:25;40425:41;;;;-1:-1:-1::0;;;40425:41:0::1;;;;;;;:::i;:::-;40477:28:::0;;::::1;::::0;:12:::1;::::0;:28:::1;::::0;::::1;::::0;::::1;:::i;39388:134::-:0;39462:1;39450:9;:13;39442:28;;;;-1:-1:-1;;;39442:28:0;;;;;;;:::i;:::-;39505:9;39493;;:21;;;;:::i;:::-;39481:9;:33;39388:134::o;26920:164::-;-1:-1:-1;;;;;27041:25:0;;;27017:4;27041:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;26920:164::o;40704:408::-;40752:15;40747:358;40783:12;:19;40773:29;;40747:358;;;40868:10;-1:-1:-1;;;;;40834:44:0;:30;40842:12;40855:7;40842:21;;;;;;-1:-1:-1;;;40842:21:0;;;;;;;;40834:30;-1:-1:-1;;;;;40834:44:0;;:90;;;;-1:-1:-1;40905:10:0;40882:34;;;;:22;:34;;;;;;;;:42;;:34;:42;;40834:90;40830:264;;;40968:10;40945:34;;;;:22;:34;;;;;;:41;;-1:-1:-1;;40945:41:0;40982:4;40945:41;;;41005:49;41034:19;;40945:34;41005:49;40945:34;41005:49;41034:19;40968:10;40945:34;41005:49;;;;;;;;;;;;;;;;;;40830:264;40804:9;;;;:::i;:::-;;;;40747:358;;38478:32;;;;;;:::o;38563:28::-;;;;:::o;38428:41::-;;;;;;;;;;;;;;;:::o;29362:167::-;29427:4;29501:20;;;:11;:20;;;;;;;;;29362:167::o;730:115::-;826:10;730:115;:::o;34871:192::-;34946:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;34946:29:0;-1:-1:-1;;;;;34946:29:0;;;;;;;;:24;;35000:23;34946:24;35000:14;:23::i;:::-;-1:-1:-1;;;;;34991:46:0;;;;;;;;;;;34871:192;;:::o;29696:314::-;29789:4;29814:16;29822:7;29814;:16::i;:::-;29806:32;;;;-1:-1:-1;;;29806:32:0;;;;;;;:::i;:::-;29849:13;29865:23;29880:7;29865:14;:23::i;:::-;29849:39;;29918:5;-1:-1:-1;;;;;29907:16:0;:7;-1:-1:-1;;;;;29907:16:0;;:51;;;;29951:7;-1:-1:-1;;;;;29927:31:0;:20;29939:7;29927:11;:20::i;:::-;-1:-1:-1;;;;;29927:31:0;;29907:51;:94;;;;29962:39;29986:5;29993:7;29962:23;:39::i;:::-;29899:103;29696:314;-1:-1:-1;;;;29696:314:0:o;32429:496::-;32554:4;-1:-1:-1;;;;;32527:31:0;:23;32542:7;32527:14;:23::i;:::-;-1:-1:-1;;;;;32527:31:0;;32519:47;;;;-1:-1:-1;;;32519:47:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32603:16:0;;32595:32;;;;-1:-1:-1;;;32595:32:0;;;;;;;:::i;:::-;32640:39;32661:4;32667:2;32671:7;32640:20;:39::i;:::-;32744:29;32761:1;32765:7;32744:8;:29::i;:::-;-1:-1:-1;;;;;32786:18:0;;;;;;:12;:18;;;;;:20;;;;;;:::i;:::-;;;;-1:-1:-1;;32817:19:0;;;;:10;:19;;;;;;;;:24;;-1:-1:-1;;;;;;32817:24:0;-1:-1:-1;;;;;32817:24:0;;;;;;;;32852:16;;:12;:16;;;;;:18;;;;;;:::i;:::-;;;;;;32909:7;32905:2;-1:-1:-1;;;;;32890:27:0;32899:4;-1:-1:-1;;;;;32890:27:0;;;;;;;;;;;32429:496;;;:::o;33530:100::-;33603:19;;;;:8;;:19;;;;;:::i;30353:110::-;30429:26;30439:2;30443:7;30429:26;;;;;;;;;;;;:9;:26::i;28824:225::-;28938:28;28948:4;28954:2;28958:7;28938:9;:28::i;:::-;28985:48;29008:4;29014:2;29018:7;29027:5;28985:22;:48::i;:::-;28977:64;;;;-1:-1:-1;;;28977:64:0;;;;;;;:::i;17174:723::-;17230:13;17451:10;17447:53;;-1:-1:-1;17478:10:0;;;;;;;;;;;;-1:-1:-1;;;17478:10:0;;;;;;17447:53;17525:5;17510:12;17566:78;17573:9;;17566:78;;17599:8;;;;:::i;:::-;;-1:-1:-1;17622:10:0;;-1:-1:-1;17630:2:0;17622:10;;:::i;:::-;;;17566:78;;;17654:19;17686:6;17676:17;;;;;;-1:-1:-1;;;17676:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17676:17:0;;17654:39;;17704:154;17711:10;;17704:154;;17738:11;17748:1;17738:11;;:::i;:::-;;-1:-1:-1;17807:10:0;17815:2;17807:5;:10;:::i;:::-;17794:24;;:2;:24;:::i;:::-;17781:39;;17764:6;17771;17764:14;;;;;;-1:-1:-1;;;17764:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;17764:56:0;;;;;;;;-1:-1:-1;17835:11:0;17844:2;17835:11;;:::i;:::-;;;17704:154;;30690:203;30786:18;30792:2;30796:7;30786:5;:18::i;:::-;30823:54;30854:1;30858:2;30862:7;30871:5;30823:22;:54::i;:::-;30815:70;;;;-1:-1:-1;;;30815:70:0;;;;;;;:::i;34195:557::-;34316:4;34343:15;:2;-1:-1:-1;;;;;34343:13:0;;:15::i;:::-;34338:60;;-1:-1:-1;34382:4:0;34375:11;;34338:60;34408:23;34434:205;-1:-1:-1;;;34547:12:0;:10;:12::i;:::-;34574:4;34593:7;34615:5;34450:181;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;34450:181:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34450:181:0;-1:-1:-1;;;;;;34450:181:0;;;;;;;;;;34434:205;;;;;;;;;;;-1:-1:-1;;;34434:205:0;;;;;;;-1:-1:-1;;;;;34434:15:0;;;;:205::i;:::-;34408:231;;34650:13;34677:10;34666:32;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;34717:26:0;-1:-1:-1;;;34717:26:0;;-1:-1:-1;;;34195:557:0;;;;;;:::o;31425:444::-;-1:-1:-1;;;;;31505:16:0;;31497:32;;;;-1:-1:-1;;;31497:32:0;;;;;;;:::i;:::-;31549:16;31557:7;31549;:16::i;:::-;31548:17;31540:33;;;;-1:-1:-1;;;31540:33:0;;;;;;;:::i;:::-;31586:45;31615:1;31619:2;31623:7;31586:20;:45::i;:::-;31644:19;;;;:10;:19;;;;;;;;:24;;-1:-1:-1;;;;;;31644:24:0;-1:-1:-1;;;;;31644:24:0;;;;;;;;31679:11;:20;;;;;:27;;-1:-1:-1;;31679:27:0;-1:-1:-1;31679:27:0;;;;;;31738:16;;;:12;:16;;;;;;;:20;;;:::i;:::-;-1:-1:-1;;;;;31719:16:0;;;;;;:12;:16;;;;;:39;31784:12;;:16;;31799:1;31784:16;:::i;:::-;31769:12;:31;31828:33;;31853:7;;-1:-1:-1;;;;;31828:33:0;;;31845:1;;31828:33;;31845:1;;31828:33;31425:444;;:::o;11732:422::-;12099:20;12138:8;;;11732:422::o;14626:195::-;14729:12;14761:52;14783:6;14791:4;14797:1;14800:12;14761:21;:52::i;:::-;14754:59;;14626:195;;;;;;:::o;15639:469::-;15766:12;15824:5;15799:21;:30;;15791:46;;;;-1:-1:-1;;;15791:46:0;;;;;;;:::i;:::-;15856:18;15867:6;15856:10;:18::i;:::-;15848:34;;;;-1:-1:-1;;;15848:34:0;;;;;;;:::i;:::-;15956:12;15970:23;15997:6;-1:-1:-1;;;;;15997:11:0;16017:5;16025:4;15997:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15955:75;;;;16048:52;16066:7;16075:10;16087:12;16048:17;:52::i;:::-;16041:59;15639:469;-1:-1:-1;;;;;;;15639:469:0:o;16118:742::-;16233:12;16262:7;16258:595;;;-1:-1:-1;16293:10:0;16286:17;;16258:595;16407:17;;:21;16403:439;;16670:10;16664:17;16731:15;16718:10;16714:2;16710:19;16703:44;16618:148;16813:12;16806:20;;-1:-1:-1;;;16806:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:409:1;;114:18;106:6;103:30;100:2;;;136:18;;:::i;:::-;174:58;220:2;197:17;;-1:-1:-1;;193:31:1;226:4;189:42;174:58;:::i;:::-;165:67;;255:6;248:5;241:21;295:3;286:6;281:3;277:16;274:25;271:2;;;312:1;309;302:12;271:2;361:6;356:3;349:4;342:5;338:16;325:43;415:1;408:4;399:6;392:5;388:18;384:29;377:40;90:333;;;;;:::o;428:175::-;498:20;;-1:-1:-1;;;;;547:31:1;;537:42;;527:2;;593:1;590;583:12;608:198;;720:2;708:9;699:7;695:23;691:32;688:2;;;741:6;733;726:22;688:2;769:31;790:9;769:31;:::i;811:274::-;;;940:2;928:9;919:7;915:23;911:32;908:2;;;961:6;953;946:22;908:2;989:31;1010:9;989:31;:::i;:::-;979:41;;1039:40;1075:2;1064:9;1060:18;1039:40;:::i;:::-;1029:50;;898:187;;;;;:::o;1090:342::-;;;;1236:2;1224:9;1215:7;1211:23;1207:32;1204:2;;;1257:6;1249;1242:22;1204:2;1285:31;1306:9;1285:31;:::i;:::-;1275:41;;1335:40;1371:2;1360:9;1356:18;1335:40;:::i;:::-;1325:50;;1422:2;1411:9;1407:18;1394:32;1384:42;;1194:238;;;;;:::o;1437:702::-;;;;;1609:3;1597:9;1588:7;1584:23;1580:33;1577:2;;;1631:6;1623;1616:22;1577:2;1659:31;1680:9;1659:31;:::i;:::-;1649:41;;1709:40;1745:2;1734:9;1730:18;1709:40;:::i;:::-;1699:50;;1796:2;1785:9;1781:18;1768:32;1758:42;;1851:2;1840:9;1836:18;1823:32;1878:18;1870:6;1867:30;1864:2;;;1915:6;1907;1900:22;1864:2;1943:22;;1996:4;1988:13;;1984:27;-1:-1:-1;1974:2:1;;2030:6;2022;2015:22;1974:2;2058:75;2125:7;2120:2;2107:16;2102:2;2098;2094:11;2058:75;:::i;:::-;2048:85;;;1567:572;;;;;;;:::o;2144:369::-;;;2270:2;2258:9;2249:7;2245:23;2241:32;2238:2;;;2291:6;2283;2276:22;2238:2;2319:31;2340:9;2319:31;:::i;:::-;2309:41;;2400:2;2389:9;2385:18;2372:32;2447:5;2440:13;2433:21;2426:5;2423:32;2413:2;;2474:6;2466;2459:22;2413:2;2502:5;2492:15;;;2228:285;;;;;:::o;2518:266::-;;;2647:2;2635:9;2626:7;2622:23;2618:32;2615:2;;;2668:6;2660;2653:22;2615:2;2696:31;2717:9;2696:31;:::i;:::-;2686:41;2774:2;2759:18;;;;2746:32;;-1:-1:-1;;;2605:179:1:o;2789:1002::-;;2904:2;2947;2935:9;2926:7;2922:23;2918:32;2915:2;;;2968:6;2960;2953:22;2915:2;3013:9;3000:23;3042:18;3083:2;3075:6;3072:14;3069:2;;;3104:6;3096;3089:22;3069:2;3147:6;3136:9;3132:22;3122:32;;3192:7;3185:4;3181:2;3177:13;3173:27;3163:2;;3219:6;3211;3204:22;3163:2;3260;3247:16;3282:2;3278;3275:10;3272:2;;;3288:18;;:::i;:::-;3335:2;3331;3327:11;3317:21;;3358:27;3381:2;3377;3373:11;3358:27;:::i;:::-;3419:15;;;3450:12;;;;3482:11;;;3512;;;3508:20;;3505:33;-1:-1:-1;3502:2:1;;;3556:6;3548;3541:22;3502:2;3583:6;3574:15;;3598:163;3612:2;3609:1;3606:9;3598:163;;;3669:17;;3657:30;;3630:1;3623:9;;;;;3707:12;;;;3739;;3598:163;;;-1:-1:-1;3780:5:1;2884:907;-1:-1:-1;;;;;;;;2884:907:1:o;3796:257::-;;3907:2;3895:9;3886:7;3882:23;3878:32;3875:2;;;3928:6;3920;3913:22;3875:2;3972:9;3959:23;3991:32;4017:5;3991:32;:::i;4058:261::-;;4180:2;4168:9;4159:7;4155:23;4151:32;4148:2;;;4201:6;4193;4186:22;4148:2;4238:9;4232:16;4257:32;4283:5;4257:32;:::i;4324:482::-;;4446:2;4434:9;4425:7;4421:23;4417:32;4414:2;;;4467:6;4459;4452:22;4414:2;4512:9;4499:23;4545:18;4537:6;4534:30;4531:2;;;4582:6;4574;4567:22;4531:2;4610:22;;4663:4;4655:13;;4651:27;-1:-1:-1;4641:2:1;;4697:6;4689;4682:22;4641:2;4725:75;4792:7;4787:2;4774:16;4769:2;4765;4761:11;4725:75;:::i;4811:190::-;;4923:2;4911:9;4902:7;4898:23;4894:32;4891:2;;;4944:6;4936;4929:22;4891:2;-1:-1:-1;4972:23:1;;4881:120;-1:-1:-1;4881:120:1:o;5006:289::-;;5116:2;5104:9;5095:7;5091:23;5087:32;5084:2;;;5137:6;5129;5122:22;5084:2;5181:9;5168:23;5231:4;5224:5;5220:16;5213:5;5210:27;5200:2;;5256:6;5248;5241:22;5300:259;;5381:5;5375:12;5408:6;5403:3;5396:19;5424:63;5480:6;5473:4;5468:3;5464:14;5457:4;5450:5;5446:16;5424:63;:::i;:::-;5541:2;5520:15;-1:-1:-1;;5516:29:1;5507:39;;;;5548:4;5503:50;;5351:208;-1:-1:-1;;5351:208:1:o;5564:274::-;;5731:6;5725:13;5747:53;5793:6;5788:3;5781:4;5773:6;5769:17;5747:53;:::i;:::-;5816:16;;;;;5701:137;-1:-1:-1;;5701:137:1:o;5843:750::-;;-1:-1:-1;;;6249:3:1;6242:22;6293:6;6287:13;6309:61;6363:6;6359:1;6354:3;6350:11;6343:4;6335:6;6331:17;6309:61;:::i;:::-;-1:-1:-1;;;6429:1:1;6389:16;;;6421:10;;;6414:23;6462:13;;6484:62;6462:13;6533:1;6525:10;;6518:4;6506:17;;6484:62;:::i;:::-;6566:17;6585:1;6562:25;;6232:361;-1:-1:-1;;;;6232:361:1:o;6598:203::-;-1:-1:-1;;;;;6762:32:1;;;;6744:51;;6732:2;6717:18;;6699:102::o;6806:506::-;-1:-1:-1;;;;;7091:15:1;;;7073:34;;7143:15;;7138:2;7123:18;;7116:43;7190:2;7175:18;;7168:34;;;7238:3;7233:2;7218:18;;7211:31;;;6806:506;;7259:47;;7286:19;;7278:6;7259:47;:::i;:::-;7251:55;7025:287;-1:-1:-1;;;;;;7025:287:1:o;7317:187::-;7482:14;;7475:22;7457:41;;7445:2;7430:18;;7412:92::o;7509:221::-;;7658:2;7647:9;7640:21;7678:46;7720:2;7709:9;7705:18;7697:6;7678:46;:::i;7735:326::-;7937:2;7919:21;;;7976:1;7956:18;;;7949:29;-1:-1:-1;;;8009:2:1;7994:18;;7987:33;8052:2;8037:18;;7909:152::o;8066:325::-;8268:2;8250:21;;;8307:1;8287:18;;;8280:29;-1:-1:-1;;;8340:2:1;8325:18;;8318:32;8382:2;8367:18;;8240:151::o;8396:325::-;8598:2;8580:21;;;8637:1;8617:18;;;8610:29;-1:-1:-1;;;8670:2:1;8655:18;;8648:32;8712:2;8697:18;;8570:151::o;8726:326::-;8928:2;8910:21;;;8967:1;8947:18;;;8940:29;-1:-1:-1;;;9000:2:1;8985:18;;8978:33;9043:2;9028:18;;8900:152::o;9057:326::-;9259:2;9241:21;;;9298:1;9278:18;;;9271:29;-1:-1:-1;;;9331:2:1;9316:18;;9309:33;9374:2;9359:18;;9231:152::o;9388:326::-;9590:2;9572:21;;;9629:1;9609:18;;;9602:29;-1:-1:-1;;;9662:2:1;9647:18;;9640:33;9705:2;9690:18;;9562:152::o;9719:326::-;9921:2;9903:21;;;9960:1;9940:18;;;9933:29;-1:-1:-1;;;9993:2:1;9978:18;;9971:33;10036:2;10021:18;;9893:152::o;10050:326::-;10252:2;10234:21;;;10291:1;10271:18;;;10264:29;-1:-1:-1;;;10324:2:1;10309:18;;10302:33;10367:2;10352:18;;10224:152::o;10381:326::-;10583:2;10565:21;;;10622:1;10602:18;;;10595:29;-1:-1:-1;;;10655:2:1;10640:18;;10633:33;10698:2;10683:18;;10555:152::o;10712:326::-;10914:2;10896:21;;;10953:1;10933:18;;;10926:29;-1:-1:-1;;;10986:2:1;10971:18;;10964:33;11029:2;11014:18;;10886:152::o;11043:326::-;11245:2;11227:21;;;11284:1;11264:18;;;11257:29;-1:-1:-1;;;11317:2:1;11302:18;;11295:33;11360:2;11345:18;;11217:152::o;11374:326::-;11576:2;11558:21;;;11615:1;11595:18;;;11588:29;-1:-1:-1;;;11648:2:1;11633:18;;11626:33;11691:2;11676:18;;11548:152::o;11705:325::-;11907:2;11889:21;;;11946:1;11926:18;;;11919:29;-1:-1:-1;;;11979:2:1;11964:18;;11957:32;12021:2;12006:18;;11879:151::o;12035:326::-;12237:2;12219:21;;;12276:1;12256:18;;;12249:29;-1:-1:-1;;;12309:2:1;12294:18;;12287:33;12352:2;12337:18;;12209:152::o;12366:326::-;12568:2;12550:21;;;12607:1;12587:18;;;12580:29;-1:-1:-1;;;12640:2:1;12625:18;;12618:33;12683:2;12668:18;;12540:152::o;12697:326::-;12899:2;12881:21;;;12938:1;12918:18;;;12911:29;-1:-1:-1;;;12971:2:1;12956:18;;12949:33;13014:2;12999:18;;12871:152::o;13028:326::-;13230:2;13212:21;;;13269:1;13249:18;;;13242:29;-1:-1:-1;;;13302:2:1;13287:18;;13280:33;13345:2;13330:18;;13202:152::o;13359:326::-;13561:2;13543:21;;;13600:1;13580:18;;;13573:29;-1:-1:-1;;;13633:2:1;13618:18;;13611:33;13676:2;13661:18;;13533:152::o;13690:326::-;13892:2;13874:21;;;13931:1;13911:18;;;13904:29;-1:-1:-1;;;13964:2:1;13949:18;;13942:33;14007:2;13992:18;;13864:152::o;14021:325::-;14223:2;14205:21;;;14262:1;14242:18;;;14235:29;-1:-1:-1;;;14295:2:1;14280:18;;14273:32;14337:2;14322:18;;14195:151::o;14351:326::-;14553:2;14535:21;;;14592:1;14572:18;;;14565:29;-1:-1:-1;;;14625:2:1;14610:18;;14603:33;14668:2;14653:18;;14525:152::o;14682:326::-;14884:2;14866:21;;;14923:1;14903:18;;;14896:29;-1:-1:-1;;;14956:2:1;14941:18;;14934:33;14999:2;14984:18;;14856:152::o;15013:326::-;15215:2;15197:21;;;15254:1;15234:18;;;15227:29;-1:-1:-1;;;15287:2:1;15272:18;;15265:33;15330:2;15315:18;;15187:152::o;15344:326::-;15546:2;15528:21;;;15585:1;15565:18;;;15558:29;-1:-1:-1;;;15618:2:1;15603:18;;15596:33;15661:2;15646:18;;15518:152::o;15675:326::-;15877:2;15859:21;;;15916:1;15896:18;;;15889:29;-1:-1:-1;;;15949:2:1;15934:18;;15927:33;15992:2;15977:18;;15849:152::o;16006:325::-;16208:2;16190:21;;;16247:1;16227:18;;;16220:29;-1:-1:-1;;;16280:2:1;16265:18;;16258:32;16322:2;16307:18;;16180:151::o;16336:326::-;16538:2;16520:21;;;16577:1;16557:18;;;16550:29;-1:-1:-1;;;16610:2:1;16595:18;;16588:33;16653:2;16638:18;;16510:152::o;16667:177::-;16813:25;;;16801:2;16786:18;;16768:76::o;16849:184::-;17021:4;17009:17;;;;16991:36;;16979:2;16964:18;;16946:87::o;17038:251::-;17108:2;17102:9;17138:17;;;17185:18;17170:34;;17206:22;;;17167:62;17164:2;;;17232:18;;:::i;:::-;17268:2;17261:22;17082:207;;-1:-1:-1;17082:207:1:o;17294:128::-;;17365:1;17361:6;17358:1;17355:13;17352:2;;;17371:18;;:::i;:::-;-1:-1:-1;17407:9:1;;17342:80::o;17427:120::-;;17493:1;17483:2;;17498:18;;:::i;:::-;-1:-1:-1;17532:9:1;;17473:74::o;17552:168::-;;17658:1;17654;17650:6;17646:14;17643:1;17640:21;17635:1;17628:9;17621:17;17617:45;17614:2;;;17665:18;;:::i;:::-;-1:-1:-1;17705:9:1;;17604:116::o;17725:125::-;;17793:1;17790;17787:8;17784:2;;;17798:18;;:::i;:::-;-1:-1:-1;17835:9:1;;17774:76::o;17855:258::-;17927:1;17937:113;17951:6;17948:1;17945:13;17937:113;;;18027:11;;;18021:18;18008:11;;;18001:39;17973:2;17966:10;17937:113;;;18068:6;18065:1;18062:13;18059:2;;;-1:-1:-1;;18103:1:1;18085:16;;18078:27;17908:205::o;18118:136::-;;18185:5;18175:2;;18194:18;;:::i;:::-;-1:-1:-1;;;18230:18:1;;18165:89::o;18259:380::-;18344:1;18334:12;;18391:1;18381:12;;;18402:2;;18456:4;18448:6;18444:17;18434:27;;18402:2;18509;18501:6;18498:14;18478:18;18475:38;18472:2;;;18555:10;18550:3;18546:20;18543:1;18536:31;18590:4;18587:1;18580:15;18618:4;18615:1;18608:15;18472:2;;18314:325;;;:::o;18644:135::-;;-1:-1:-1;;18704:17:1;;18701:2;;;18724:18;;:::i;:::-;-1:-1:-1;18771:1:1;18760:13;;18691:88::o;18784:112::-;;18842:1;18832:2;;18847:18;;:::i;:::-;-1:-1:-1;18881:9:1;;18822:74::o;18901:127::-;18962:10;18957:3;18953:20;18950:1;18943:31;18993:4;18990:1;18983:15;19017:4;19014:1;19007:15;19033:127;19094:10;19089:3;19085:20;19082:1;19075:31;19125:4;19122:1;19115:15;19149:4;19146:1;19139:15;19165:127;19226:10;19221:3;19217:20;19214:1;19207:31;19257:4;19254:1;19247:15;19281:4;19278:1;19271:15;19297:133;-1:-1:-1;;;;;;19373:32:1;;19363:43;;19353:2;;19420:1;19417;19410:12
Swarm Source
ipfs://41732cc10dbcf6268fa726ee1c8d701425a493f6d11f28c2952816f504f6e45c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.