ERC-721
Overview
Max Total Supply
6,000 DC
Holders
2,518
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
390 DCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DegentlemensClub
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-20 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (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/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (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/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/Degentlemensclub.sol pragma solidity >=0.7.0 <0.9.0; contract DegentlemensClub is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string public uriPrefix = ""; string public uriSuffix = ".json"; string public hiddenMetadataUri; uint256 public cost = 0.04 ether; uint256 public maxSupply = 6000; uint256 public maxMintAmountPerTx = 5; uint256 public maxMintAmount = 5; mapping(address => uint256) public mintedNfts; bool public paused = true; bool public revealed = false; constructor() ERC721("Degentlemens Club", "DC") { setHiddenMetadataUri("ipfs://QmaTPsZnb19KP6gLdwm46fKkseyuQsE2MzGj5wWMusCVZx/1.json"); mintForAddress(100, 0xB9BcB3c153dbF96c826fD2bF00154A8868b30EE2); } modifier mintCompliance(uint256 _mintAmount) { require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } function totalSupply() public view returns (uint256) { return supply.current(); } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); require(!paused, "The contract is paused!"); require(msg.value >= cost * _mintAmount, "Insufficient funds!"); require(mintedNfts[msg.sender] + _mintAmount <= maxMintAmount); mintedNfts[msg.sender] += _mintAmount; _mintLoop(msg.sender, _mintAmount); } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setMaxMintAmount(uint256 _maxMintAmount) public onlyOwner { maxMintAmount = _maxMintAmount; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function withdraw() public onlyOwner { (bool hs, ) = payable(0x9e31BC05aC358e5Ae4317400871BB2B20cf91997).call{value: address(this).balance * 10 / 100}(""); require(hs); // ============================================================================= // This will transfer the remaining contract balance to the owner. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedNfts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040819052600060808190526200001b91600891620005e3565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200004a91600991620005e3565b50668e1bc9bf040000600b55611770600c556005600d819055600e556010805461ff001960ff199091166001171690553480156200008757600080fd5b5060408051808201825260118152702232b3b2b73a3632b6b2b7399021b63ab160791b602080830191825283518085019094526002845261444360f01b908401528151919291620000db91600091620005e3565b508051620000f1906001906020840190620005e3565b5050506200010e620001086200015960201b60201c565b6200015d565b620001326040518060600160405280603c815260200162002ef2603c9139620001af565b62000153606473b9bcb3c153dbf96c826fd2bf00154a8868b30ee262000217565b620008e9565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001b962000159565b6001600160a01b0316620001cc620002b7565b6001600160a01b031614620001fe5760405162461bcd60e51b8152600401620001f590620007f1565b60405180910390fd5b80516200021390600a906020840190620005e3565b5050565b81600c5481620002336007620002c660201b620012e71760201c565b6200023f91906200085d565b1115620002605760405162461bcd60e51b8152600401620001f59062000826565b6200026a62000159565b6001600160a01b03166200027d620002b7565b6001600160a01b031614620002a65760405162461bcd60e51b8152600401620001f590620007f1565b620002b28284620002ca565b505050565b6006546001600160a01b031690565b5490565b60005b81811015620002b257620002ed60076200032460201b620012eb1760201c565b6200030f83620003096007620002c660201b620012e71760201c565b6200032d565b806200031b81620008b5565b915050620002cd565b80546001019055565b620002138282604051806020016040528060008152506200034f60201b60201c565b6200035b838362000389565b6200036a60008484846200047e565b620002b25760405162461bcd60e51b8152600401620001f59062000733565b6001600160a01b038216620003b25760405162461bcd60e51b8152600401620001f590620007bc565b620003bd81620005b7565b15620003dd5760405162461bcd60e51b8152600401620001f59062000785565b620003eb60008383620002b2565b6001600160a01b0382166000908152600360205260408120805460019290620004169084906200085d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46200021360008383620002b2565b60006200049f846001600160a01b0316620005d460201b620012f41760201c565b15620005ab576001600160a01b03841663150b7a02620004be62000159565b8786866040518563ffffffff1660e01b8152600401620004e29493929190620006ba565b602060405180830381600087803b158015620004fd57600080fd5b505af192505050801562000530575060408051601f3d908101601f191682019092526200052d9181019062000689565b60015b62000590573d80801562000561576040519150601f19603f3d011682016040523d82523d6000602084013e62000566565b606091505b508051620005885760405162461bcd60e51b8152600401620001f59062000733565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050620005af565b5060015b949350505050565b6000908152600260205260409020546001600160a01b0316151590565b6001600160a01b03163b151590565b828054620005f19062000878565b90600052602060002090601f01602090048101928262000615576000855562000660565b82601f106200063057805160ff191683800117855562000660565b8280016001018555821562000660579182015b828111156200066057825182559160200191906001019062000643565b506200066e92915062000672565b5090565b5b808211156200066e576000815560010162000673565b6000602082840312156200069b578081fd5b81516001600160e01b031981168114620006b3578182fd5b9392505050565b600060018060a01b0380871683526020818716818501528560408501526080606085015284519150816080850152825b82811015620007085785810182015185820160a001528101620006ea565b828111156200071a578360a084870101525b5050601f01601f19169190910160a00195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526014908201527f4d617820737570706c7920657863656564656421000000000000000000000000604082015260600190565b60008219821115620008735762000873620008d3565b500190565b6002810460018216806200088d57607f821691505b60208210811415620008af57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415620008cc57620008cc620008d3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6125f980620008f96000396000f3fe6080604052600436106102305760003560e01c80635c975abb1161012e578063a22cb465116100ab578063d5abeb011161006f578063d5abeb011461061a578063e0a808531461062f578063e985e9c51461064f578063efbd73f41461066f578063f2fde38b1461068f57610230565b8063a22cb46514610585578063a45ba8e7146105a5578063b071401b146105ba578063b88d4fde146105da578063c87b56dd146105fa57610230565b80637ec4a659116100f25780637ec4a659146105135780638da5cb5b1461053357806394354fd01461054857806395d89b411461055d578063a0712d681461057257610230565b80635c975abb1461049457806362b99ad4146104a95780636352211e146104be57806370a08231146104de578063715018a6146104fe57610230565b8063239c70ae116101bc578063438b630011610180578063438b6300146103fd57806344a0d68a1461042a5780634fdd43cb1461044a578063518302271461046a5780635503a0e81461047f57610230565b8063239c70ae1461037357806323b872dd1461038857806334ddac07146103a85780633ccfd60b146103c857806342842e0e146103dd57610230565b8063095ea7b311610203578063095ea7b3146102dc57806313faede6146102fc57806316ba10e01461031e57806316c38b3c1461033e57806318160ddd1461035e57610230565b806301ffc9a71461023557806306fdde031461026b578063081812fc1461028d578063088a4ed0146102ba575b600080fd5b34801561024157600080fd5b50610255610250366004611ce0565b6106af565b6040516102629190611f1e565b60405180910390f35b34801561027757600080fd5b506102806106f7565b6040516102629190611f29565b34801561029957600080fd5b506102ad6102a8366004611d5e565b610789565b6040516102629190611e89565b3480156102c657600080fd5b506102da6102d5366004611d5e565b6107d5565b005b3480156102e857600080fd5b506102da6102f7366004611c9d565b610819565b34801561030857600080fd5b506103116108b1565b604051610262919061245e565b34801561032a57600080fd5b506102da610339366004611d18565b6108b7565b34801561034a57600080fd5b506102da610359366004611cc6565b61090d565b34801561036a57600080fd5b5061031161095f565b34801561037f57600080fd5b50610311610970565b34801561039457600080fd5b506102da6103a3366004611bc0565b610976565b3480156103b457600080fd5b506103116103c3366004611b74565b6109ae565b3480156103d457600080fd5b506102da6109c0565b3480156103e957600080fd5b506102da6103f8366004611bc0565b610af9565b34801561040957600080fd5b5061041d610418366004611b74565b610b14565b6040516102629190611eda565b34801561043657600080fd5b506102da610445366004611d5e565b610c11565b34801561045657600080fd5b506102da610465366004611d18565b610c55565b34801561047657600080fd5b50610255610ca7565b34801561048b57600080fd5b50610280610cb5565b3480156104a057600080fd5b50610255610d43565b3480156104b557600080fd5b50610280610d4c565b3480156104ca57600080fd5b506102ad6104d9366004611d5e565b610d59565b3480156104ea57600080fd5b506103116104f9366004611b74565b610d8e565b34801561050a57600080fd5b506102da610dd2565b34801561051f57600080fd5b506102da61052e366004611d18565b610e1d565b34801561053f57600080fd5b506102ad610e6f565b34801561055457600080fd5b50610311610e7e565b34801561056957600080fd5b50610280610e84565b6102da610580366004611d5e565b610e93565b34801561059157600080fd5b506102da6105a0366004611c74565b610fa0565b3480156105b157600080fd5b50610280610fb2565b3480156105c657600080fd5b506102da6105d5366004611d5e565b610fbf565b3480156105e657600080fd5b506102da6105f5366004611bfb565b611003565b34801561060657600080fd5b50610280610615366004611d5e565b611042565b34801561062657600080fd5b50610311611169565b34801561063b57600080fd5b506102da61064a366004611cc6565b61116f565b34801561065b57600080fd5b5061025561066a366004611b8e565b6111c8565b34801561067b57600080fd5b506102da61068a366004611d76565b6111f6565b34801561069b57600080fd5b506102da6106aa366004611b74565b611276565b60006001600160e01b031982166380ac58cd60e01b14806106e057506001600160e01b03198216635b5e139f60e01b145b806106ef57506106ef82611303565b90505b919050565b60606000805461070690612501565b80601f016020809104026020016040519081016040528092919081815260200182805461073290612501565b801561077f5780601f106107545761010080835404028352916020019161077f565b820191906000526020600020905b81548152906001019060200180831161076257829003601f168201915b5050505050905090565b60006107948261131c565b6107b95760405162461bcd60e51b81526004016107b09061226a565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6107dd611339565b6001600160a01b03166107ee610e6f565b6001600160a01b0316146108145760405162461bcd60e51b81526004016107b0906122b6565b600e55565b600061082482610d59565b9050806001600160a01b0316836001600160a01b031614156108585760405162461bcd60e51b81526004016107b090612371565b806001600160a01b031661086a611339565b6001600160a01b0316148061088657506108868161066a611339565b6108a25760405162461bcd60e51b81526004016107b090612145565b6108ac838361133d565b505050565b600b5481565b6108bf611339565b6001600160a01b03166108d0610e6f565b6001600160a01b0316146108f65760405162461bcd60e51b81526004016107b0906122b6565b8051610909906009906020840190611a3e565b5050565b610915611339565b6001600160a01b0316610926610e6f565b6001600160a01b03161461094c5760405162461bcd60e51b81526004016107b0906122b6565b6010805460ff1916911515919091179055565b600061096b60076112e7565b905090565b600e5481565b610987610981611339565b826113ab565b6109a35760405162461bcd60e51b81526004016107b0906123e0565b6108ac838383611430565b600f6020526000908152604090205481565b6109c8611339565b6001600160a01b03166109d9610e6f565b6001600160a01b0316146109ff5760405162461bcd60e51b81526004016107b0906122b6565b6000739e31bc05ac358e5ae4317400871bb2b20cf919976064610a2347600a61249f565b610a2d919061248b565b604051610a3990611e86565b60006040518083038185875af1925050503d8060008114610a76576040519150601f19603f3d011682016040523d82523d6000602084013e610a7b565b606091505b5050905080610a8957600080fd5b6000610a93610e6f565b6001600160a01b031647604051610aa990611e86565b60006040518083038185875af1925050503d8060008114610ae6576040519150601f19603f3d011682016040523d82523d6000602084013e610aeb565b606091505b505090508061090957600080fd5b6108ac83838360405180602001604052806000815250611003565b60606000610b2183610d8e565b905060008167ffffffffffffffff811115610b4c57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610b75578160200160208202803683370190505b509050600160005b8381108015610b8e5750600c548211155b15610c07576000610b9e83610d59565b9050866001600160a01b0316816001600160a01b03161415610bf45782848381518110610bdb57634e487b7160e01b600052603260045260246000fd5b602090810291909101015281610bf08161253c565b9250505b82610bfe8161253c565b93505050610b7d565b5090949350505050565b610c19611339565b6001600160a01b0316610c2a610e6f565b6001600160a01b031614610c505760405162461bcd60e51b81526004016107b0906122b6565b600b55565b610c5d611339565b6001600160a01b0316610c6e610e6f565b6001600160a01b031614610c945760405162461bcd60e51b81526004016107b0906122b6565b805161090990600a906020840190611a3e565b601054610100900460ff1681565b60098054610cc290612501565b80601f0160208091040260200160405190810160405280929190818152602001828054610cee90612501565b8015610d3b5780601f10610d1057610100808354040283529160200191610d3b565b820191906000526020600020905b815481529060010190602001808311610d1e57829003601f168201915b505050505081565b60105460ff1681565b60088054610cc290612501565b6000818152600260205260408120546001600160a01b0316806106ef5760405162461bcd60e51b81526004016107b0906121ec565b60006001600160a01b038216610db65760405162461bcd60e51b81526004016107b0906121a2565b506001600160a01b031660009081526003602052604090205490565b610dda611339565b6001600160a01b0316610deb610e6f565b6001600160a01b031614610e115760405162461bcd60e51b81526004016107b0906122b6565b610e1b6000611563565b565b610e25611339565b6001600160a01b0316610e36610e6f565b6001600160a01b031614610e5c5760405162461bcd60e51b81526004016107b0906122b6565b8051610909906008906020840190611a3e565b6006546001600160a01b031690565b600d5481565b60606001805461070690612501565b80600c5481610ea260076112e7565b610eac9190612473565b1115610eca5760405162461bcd60e51b81526004016107b0906123b2565b600082118015610edc5750600d548211155b610ef85760405162461bcd60e51b81526004016107b090612050565b60105460ff1615610f1b5760405162461bcd60e51b81526004016107b0906122eb565b81600b54610f29919061249f565b341015610f485760405162461bcd60e51b81526004016107b090612431565b600e54336000908152600f6020526040902054610f66908490612473565b1115610f7157600080fd5b336000908152600f602052604081208054849290610f90908490612473565b90915550610909905033836115b5565b610909610fab611339565b83836115ef565b600a8054610cc290612501565b610fc7611339565b6001600160a01b0316610fd8610e6f565b6001600160a01b031614610ffe5760405162461bcd60e51b81526004016107b0906122b6565b600d55565b61101461100e611339565b836113ab565b6110305760405162461bcd60e51b81526004016107b0906123e0565b61103c84848484611692565b50505050565b606061104d8261131c565b6110695760405162461bcd60e51b81526004016107b090612322565b601054610100900460ff1661110a57600a805461108590612501565b80601f01602080910402602001604051908101604052809291908181526020018280546110b190612501565b80156110fe5780601f106110d3576101008083540402835291602001916110fe565b820191906000526020600020905b8154815290600101906020018083116110e157829003601f168201915b505050505090506106f2565b60006111146116c5565b905060008151116111345760405180602001604052806000815250611162565b8061113e846116d4565b600960405160200161115293929190611dc4565b6040516020818303038152906040525b9392505050565b600c5481565b611177611339565b6001600160a01b0316611188610e6f565b6001600160a01b0316146111ae5760405162461bcd60e51b81526004016107b0906122b6565b601080549115156101000261ff0019909216919091179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b81600c548161120560076112e7565b61120f9190612473565b111561122d5760405162461bcd60e51b81526004016107b0906123b2565b611235611339565b6001600160a01b0316611246610e6f565b6001600160a01b03161461126c5760405162461bcd60e51b81526004016107b0906122b6565b6108ac82846115b5565b61127e611339565b6001600160a01b031661128f610e6f565b6001600160a01b0316146112b55760405162461bcd60e51b81526004016107b0906122b6565b6001600160a01b0381166112db5760405162461bcd60e51b81526004016107b090611f8e565b6112e481611563565b50565b5490565b80546001019055565b6001600160a01b03163b151590565b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061137282610d59565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006113b68261131c565b6113d25760405162461bcd60e51b81526004016107b0906120f9565b60006113dd83610d59565b9050806001600160a01b0316846001600160a01b031614806114185750836001600160a01b031661140d84610789565b6001600160a01b0316145b80611428575061142881856111c8565b949350505050565b826001600160a01b031661144382610d59565b6001600160a01b0316146114695760405162461bcd60e51b81526004016107b090611fd4565b6001600160a01b03821661148f5760405162461bcd60e51b81526004016107b09061207e565b61149a8383836108ac565b6114a560008261133d565b6001600160a01b03831660009081526003602052604081208054600192906114ce9084906124be565b90915550506001600160a01b03821660009081526003602052604081208054600192906114fc908490612473565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a46108ac8383836108ac565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b818110156108ac576115ca60076112eb565b6115dd836115d860076112e7565b6117ef565b806115e78161253c565b9150506115b8565b816001600160a01b0316836001600160a01b031614156116215760405162461bcd60e51b81526004016107b0906120c2565b6001600160a01b0383811660008181526005602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190611685908590611f1e565b60405180910390a3505050565b61169d848484611430565b6116a984848484611809565b61103c5760405162461bcd60e51b81526004016107b090611f3c565b60606008805461070690612501565b6060816116f957506040805180820190915260018152600360fc1b60208201526106f2565b8160005b8115611723578061170d8161253c565b915061171c9050600a8361248b565b91506116fd565b60008167ffffffffffffffff81111561174c57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611776576020820181803683370190505b5090505b84156114285761178b6001836124be565b9150611798600a86612557565b6117a3906030612473565b60f81b8183815181106117c657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506117e8600a8661248b565b945061177a565b610909828260405180602001604052806000815250611924565b600061181d846001600160a01b03166112f4565b1561191957836001600160a01b031663150b7a02611839611339565b8786866040518563ffffffff1660e01b815260040161185b9493929190611e9d565b602060405180830381600087803b15801561187557600080fd5b505af19250505080156118a5575060408051601f3d908101601f191682019092526118a291810190611cfc565b60015b6118ff573d8080156118d3576040519150601f19603f3d011682016040523d82523d6000602084013e6118d8565b606091505b5080516118f75760405162461bcd60e51b81526004016107b090611f3c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611428565b506001949350505050565b61192e8383611957565b61193b6000848484611809565b6108ac5760405162461bcd60e51b81526004016107b090611f3c565b6001600160a01b03821661197d5760405162461bcd60e51b81526004016107b090612235565b6119868161131c565b156119a35760405162461bcd60e51b81526004016107b090612019565b6119af600083836108ac565b6001600160a01b03821660009081526003602052604081208054600192906119d8908490612473565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4610909600083836108ac565b828054611a4a90612501565b90600052602060002090601f016020900481019282611a6c5760008555611ab2565b82601f10611a8557805160ff1916838001178555611ab2565b82800160010185558215611ab2579182015b82811115611ab2578251825591602001919060010190611a97565b50611abe929150611ac2565b5090565b5b80821115611abe5760008155600101611ac3565b600067ffffffffffffffff80841115611af257611af2612597565b604051601f8501601f19908116603f01168101908282118183101715611b1a57611b1a612597565b81604052809350858152868686011115611b3357600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146106f257600080fd5b803580151581146106f257600080fd5b600060208284031215611b85578081fd5b61116282611b4d565b60008060408385031215611ba0578081fd5b611ba983611b4d565b9150611bb760208401611b4d565b90509250929050565b600080600060608486031215611bd4578081fd5b611bdd84611b4d565b9250611beb60208501611b4d565b9150604084013590509250925092565b60008060008060808587031215611c10578081fd5b611c1985611b4d565b9350611c2760208601611b4d565b925060408501359150606085013567ffffffffffffffff811115611c49578182fd5b8501601f81018713611c59578182fd5b611c6887823560208401611ad7565b91505092959194509250565b60008060408385031215611c86578182fd5b611c8f83611b4d565b9150611bb760208401611b64565b60008060408385031215611caf578182fd5b611cb883611b4d565b946020939093013593505050565b600060208284031215611cd7578081fd5b61116282611b64565b600060208284031215611cf1578081fd5b8135611162816125ad565b600060208284031215611d0d578081fd5b8151611162816125ad565b600060208284031215611d29578081fd5b813567ffffffffffffffff811115611d3f578182fd5b8201601f81018413611d4f578182fd5b61142884823560208401611ad7565b600060208284031215611d6f578081fd5b5035919050565b60008060408385031215611d88578182fd5b82359150611bb760208401611b4d565b60008151808452611db08160208601602086016124d5565b601f01601f19169290920160200192915050565b600084516020611dd78285838a016124d5565b855191840191611dea8184848a016124d5565b8554920191839060028104600180831680611e0657607f831692505b858310811415611e2457634e487b7160e01b88526022600452602488fd5b808015611e385760018114611e4957611e75565b60ff19851688528388019550611e75565b611e528b612467565b895b85811015611e6d5781548a820152908401908801611e54565b505083880195505b50939b9a5050505050505050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611ed090830184611d98565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611f1257835183529284019291840191600101611ef6565b50909695505050505050565b901515815260200190565b6000602082526111626020830184611d98565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b602080825260149082015273496e76616c6964206d696e7420616d6f756e742160601b604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f54686520636f6e74726163742069732070617573656421000000000000000000604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b602080825260139082015272496e73756666696369656e742066756e64732160681b604082015260600190565b90815260200190565b60009081526020902090565b600082198211156124865761248661256b565b500190565b60008261249a5761249a612581565b500490565b60008160001904831182151516156124b9576124b961256b565b500290565b6000828210156124d0576124d061256b565b500390565b60005b838110156124f05781810151838201526020016124d8565b8381111561103c5750506000910152565b60028104600182168061251557607f821691505b6020821081141561253657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125505761255061256b565b5060010190565b60008261256657612566612581565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146112e457600080fdfea26469706673582212204959b342fba306b7ef65a5b3cca54e0cc7f04b74253b1c63bd40cb039aa50dfb64736f6c63430008010033697066733a2f2f516d615450735a6e6231394b5036674c64776d3436664b6b73657975517345324d7a476a3577574d757343565a782f312e6a736f6e
Deployed Bytecode
0x6080604052600436106102305760003560e01c80635c975abb1161012e578063a22cb465116100ab578063d5abeb011161006f578063d5abeb011461061a578063e0a808531461062f578063e985e9c51461064f578063efbd73f41461066f578063f2fde38b1461068f57610230565b8063a22cb46514610585578063a45ba8e7146105a5578063b071401b146105ba578063b88d4fde146105da578063c87b56dd146105fa57610230565b80637ec4a659116100f25780637ec4a659146105135780638da5cb5b1461053357806394354fd01461054857806395d89b411461055d578063a0712d681461057257610230565b80635c975abb1461049457806362b99ad4146104a95780636352211e146104be57806370a08231146104de578063715018a6146104fe57610230565b8063239c70ae116101bc578063438b630011610180578063438b6300146103fd57806344a0d68a1461042a5780634fdd43cb1461044a578063518302271461046a5780635503a0e81461047f57610230565b8063239c70ae1461037357806323b872dd1461038857806334ddac07146103a85780633ccfd60b146103c857806342842e0e146103dd57610230565b8063095ea7b311610203578063095ea7b3146102dc57806313faede6146102fc57806316ba10e01461031e57806316c38b3c1461033e57806318160ddd1461035e57610230565b806301ffc9a71461023557806306fdde031461026b578063081812fc1461028d578063088a4ed0146102ba575b600080fd5b34801561024157600080fd5b50610255610250366004611ce0565b6106af565b6040516102629190611f1e565b60405180910390f35b34801561027757600080fd5b506102806106f7565b6040516102629190611f29565b34801561029957600080fd5b506102ad6102a8366004611d5e565b610789565b6040516102629190611e89565b3480156102c657600080fd5b506102da6102d5366004611d5e565b6107d5565b005b3480156102e857600080fd5b506102da6102f7366004611c9d565b610819565b34801561030857600080fd5b506103116108b1565b604051610262919061245e565b34801561032a57600080fd5b506102da610339366004611d18565b6108b7565b34801561034a57600080fd5b506102da610359366004611cc6565b61090d565b34801561036a57600080fd5b5061031161095f565b34801561037f57600080fd5b50610311610970565b34801561039457600080fd5b506102da6103a3366004611bc0565b610976565b3480156103b457600080fd5b506103116103c3366004611b74565b6109ae565b3480156103d457600080fd5b506102da6109c0565b3480156103e957600080fd5b506102da6103f8366004611bc0565b610af9565b34801561040957600080fd5b5061041d610418366004611b74565b610b14565b6040516102629190611eda565b34801561043657600080fd5b506102da610445366004611d5e565b610c11565b34801561045657600080fd5b506102da610465366004611d18565b610c55565b34801561047657600080fd5b50610255610ca7565b34801561048b57600080fd5b50610280610cb5565b3480156104a057600080fd5b50610255610d43565b3480156104b557600080fd5b50610280610d4c565b3480156104ca57600080fd5b506102ad6104d9366004611d5e565b610d59565b3480156104ea57600080fd5b506103116104f9366004611b74565b610d8e565b34801561050a57600080fd5b506102da610dd2565b34801561051f57600080fd5b506102da61052e366004611d18565b610e1d565b34801561053f57600080fd5b506102ad610e6f565b34801561055457600080fd5b50610311610e7e565b34801561056957600080fd5b50610280610e84565b6102da610580366004611d5e565b610e93565b34801561059157600080fd5b506102da6105a0366004611c74565b610fa0565b3480156105b157600080fd5b50610280610fb2565b3480156105c657600080fd5b506102da6105d5366004611d5e565b610fbf565b3480156105e657600080fd5b506102da6105f5366004611bfb565b611003565b34801561060657600080fd5b50610280610615366004611d5e565b611042565b34801561062657600080fd5b50610311611169565b34801561063b57600080fd5b506102da61064a366004611cc6565b61116f565b34801561065b57600080fd5b5061025561066a366004611b8e565b6111c8565b34801561067b57600080fd5b506102da61068a366004611d76565b6111f6565b34801561069b57600080fd5b506102da6106aa366004611b74565b611276565b60006001600160e01b031982166380ac58cd60e01b14806106e057506001600160e01b03198216635b5e139f60e01b145b806106ef57506106ef82611303565b90505b919050565b60606000805461070690612501565b80601f016020809104026020016040519081016040528092919081815260200182805461073290612501565b801561077f5780601f106107545761010080835404028352916020019161077f565b820191906000526020600020905b81548152906001019060200180831161076257829003601f168201915b5050505050905090565b60006107948261131c565b6107b95760405162461bcd60e51b81526004016107b09061226a565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6107dd611339565b6001600160a01b03166107ee610e6f565b6001600160a01b0316146108145760405162461bcd60e51b81526004016107b0906122b6565b600e55565b600061082482610d59565b9050806001600160a01b0316836001600160a01b031614156108585760405162461bcd60e51b81526004016107b090612371565b806001600160a01b031661086a611339565b6001600160a01b0316148061088657506108868161066a611339565b6108a25760405162461bcd60e51b81526004016107b090612145565b6108ac838361133d565b505050565b600b5481565b6108bf611339565b6001600160a01b03166108d0610e6f565b6001600160a01b0316146108f65760405162461bcd60e51b81526004016107b0906122b6565b8051610909906009906020840190611a3e565b5050565b610915611339565b6001600160a01b0316610926610e6f565b6001600160a01b03161461094c5760405162461bcd60e51b81526004016107b0906122b6565b6010805460ff1916911515919091179055565b600061096b60076112e7565b905090565b600e5481565b610987610981611339565b826113ab565b6109a35760405162461bcd60e51b81526004016107b0906123e0565b6108ac838383611430565b600f6020526000908152604090205481565b6109c8611339565b6001600160a01b03166109d9610e6f565b6001600160a01b0316146109ff5760405162461bcd60e51b81526004016107b0906122b6565b6000739e31bc05ac358e5ae4317400871bb2b20cf919976064610a2347600a61249f565b610a2d919061248b565b604051610a3990611e86565b60006040518083038185875af1925050503d8060008114610a76576040519150601f19603f3d011682016040523d82523d6000602084013e610a7b565b606091505b5050905080610a8957600080fd5b6000610a93610e6f565b6001600160a01b031647604051610aa990611e86565b60006040518083038185875af1925050503d8060008114610ae6576040519150601f19603f3d011682016040523d82523d6000602084013e610aeb565b606091505b505090508061090957600080fd5b6108ac83838360405180602001604052806000815250611003565b60606000610b2183610d8e565b905060008167ffffffffffffffff811115610b4c57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610b75578160200160208202803683370190505b509050600160005b8381108015610b8e5750600c548211155b15610c07576000610b9e83610d59565b9050866001600160a01b0316816001600160a01b03161415610bf45782848381518110610bdb57634e487b7160e01b600052603260045260246000fd5b602090810291909101015281610bf08161253c565b9250505b82610bfe8161253c565b93505050610b7d565b5090949350505050565b610c19611339565b6001600160a01b0316610c2a610e6f565b6001600160a01b031614610c505760405162461bcd60e51b81526004016107b0906122b6565b600b55565b610c5d611339565b6001600160a01b0316610c6e610e6f565b6001600160a01b031614610c945760405162461bcd60e51b81526004016107b0906122b6565b805161090990600a906020840190611a3e565b601054610100900460ff1681565b60098054610cc290612501565b80601f0160208091040260200160405190810160405280929190818152602001828054610cee90612501565b8015610d3b5780601f10610d1057610100808354040283529160200191610d3b565b820191906000526020600020905b815481529060010190602001808311610d1e57829003601f168201915b505050505081565b60105460ff1681565b60088054610cc290612501565b6000818152600260205260408120546001600160a01b0316806106ef5760405162461bcd60e51b81526004016107b0906121ec565b60006001600160a01b038216610db65760405162461bcd60e51b81526004016107b0906121a2565b506001600160a01b031660009081526003602052604090205490565b610dda611339565b6001600160a01b0316610deb610e6f565b6001600160a01b031614610e115760405162461bcd60e51b81526004016107b0906122b6565b610e1b6000611563565b565b610e25611339565b6001600160a01b0316610e36610e6f565b6001600160a01b031614610e5c5760405162461bcd60e51b81526004016107b0906122b6565b8051610909906008906020840190611a3e565b6006546001600160a01b031690565b600d5481565b60606001805461070690612501565b80600c5481610ea260076112e7565b610eac9190612473565b1115610eca5760405162461bcd60e51b81526004016107b0906123b2565b600082118015610edc5750600d548211155b610ef85760405162461bcd60e51b81526004016107b090612050565b60105460ff1615610f1b5760405162461bcd60e51b81526004016107b0906122eb565b81600b54610f29919061249f565b341015610f485760405162461bcd60e51b81526004016107b090612431565b600e54336000908152600f6020526040902054610f66908490612473565b1115610f7157600080fd5b336000908152600f602052604081208054849290610f90908490612473565b90915550610909905033836115b5565b610909610fab611339565b83836115ef565b600a8054610cc290612501565b610fc7611339565b6001600160a01b0316610fd8610e6f565b6001600160a01b031614610ffe5760405162461bcd60e51b81526004016107b0906122b6565b600d55565b61101461100e611339565b836113ab565b6110305760405162461bcd60e51b81526004016107b0906123e0565b61103c84848484611692565b50505050565b606061104d8261131c565b6110695760405162461bcd60e51b81526004016107b090612322565b601054610100900460ff1661110a57600a805461108590612501565b80601f01602080910402602001604051908101604052809291908181526020018280546110b190612501565b80156110fe5780601f106110d3576101008083540402835291602001916110fe565b820191906000526020600020905b8154815290600101906020018083116110e157829003601f168201915b505050505090506106f2565b60006111146116c5565b905060008151116111345760405180602001604052806000815250611162565b8061113e846116d4565b600960405160200161115293929190611dc4565b6040516020818303038152906040525b9392505050565b600c5481565b611177611339565b6001600160a01b0316611188610e6f565b6001600160a01b0316146111ae5760405162461bcd60e51b81526004016107b0906122b6565b601080549115156101000261ff0019909216919091179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b81600c548161120560076112e7565b61120f9190612473565b111561122d5760405162461bcd60e51b81526004016107b0906123b2565b611235611339565b6001600160a01b0316611246610e6f565b6001600160a01b03161461126c5760405162461bcd60e51b81526004016107b0906122b6565b6108ac82846115b5565b61127e611339565b6001600160a01b031661128f610e6f565b6001600160a01b0316146112b55760405162461bcd60e51b81526004016107b0906122b6565b6001600160a01b0381166112db5760405162461bcd60e51b81526004016107b090611f8e565b6112e481611563565b50565b5490565b80546001019055565b6001600160a01b03163b151590565b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061137282610d59565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006113b68261131c565b6113d25760405162461bcd60e51b81526004016107b0906120f9565b60006113dd83610d59565b9050806001600160a01b0316846001600160a01b031614806114185750836001600160a01b031661140d84610789565b6001600160a01b0316145b80611428575061142881856111c8565b949350505050565b826001600160a01b031661144382610d59565b6001600160a01b0316146114695760405162461bcd60e51b81526004016107b090611fd4565b6001600160a01b03821661148f5760405162461bcd60e51b81526004016107b09061207e565b61149a8383836108ac565b6114a560008261133d565b6001600160a01b03831660009081526003602052604081208054600192906114ce9084906124be565b90915550506001600160a01b03821660009081526003602052604081208054600192906114fc908490612473565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a46108ac8383836108ac565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b818110156108ac576115ca60076112eb565b6115dd836115d860076112e7565b6117ef565b806115e78161253c565b9150506115b8565b816001600160a01b0316836001600160a01b031614156116215760405162461bcd60e51b81526004016107b0906120c2565b6001600160a01b0383811660008181526005602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190611685908590611f1e565b60405180910390a3505050565b61169d848484611430565b6116a984848484611809565b61103c5760405162461bcd60e51b81526004016107b090611f3c565b60606008805461070690612501565b6060816116f957506040805180820190915260018152600360fc1b60208201526106f2565b8160005b8115611723578061170d8161253c565b915061171c9050600a8361248b565b91506116fd565b60008167ffffffffffffffff81111561174c57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611776576020820181803683370190505b5090505b84156114285761178b6001836124be565b9150611798600a86612557565b6117a3906030612473565b60f81b8183815181106117c657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506117e8600a8661248b565b945061177a565b610909828260405180602001604052806000815250611924565b600061181d846001600160a01b03166112f4565b1561191957836001600160a01b031663150b7a02611839611339565b8786866040518563ffffffff1660e01b815260040161185b9493929190611e9d565b602060405180830381600087803b15801561187557600080fd5b505af19250505080156118a5575060408051601f3d908101601f191682019092526118a291810190611cfc565b60015b6118ff573d8080156118d3576040519150601f19603f3d011682016040523d82523d6000602084013e6118d8565b606091505b5080516118f75760405162461bcd60e51b81526004016107b090611f3c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611428565b506001949350505050565b61192e8383611957565b61193b6000848484611809565b6108ac5760405162461bcd60e51b81526004016107b090611f3c565b6001600160a01b03821661197d5760405162461bcd60e51b81526004016107b090612235565b6119868161131c565b156119a35760405162461bcd60e51b81526004016107b090612019565b6119af600083836108ac565b6001600160a01b03821660009081526003602052604081208054600192906119d8908490612473565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4610909600083836108ac565b828054611a4a90612501565b90600052602060002090601f016020900481019282611a6c5760008555611ab2565b82601f10611a8557805160ff1916838001178555611ab2565b82800160010185558215611ab2579182015b82811115611ab2578251825591602001919060010190611a97565b50611abe929150611ac2565b5090565b5b80821115611abe5760008155600101611ac3565b600067ffffffffffffffff80841115611af257611af2612597565b604051601f8501601f19908116603f01168101908282118183101715611b1a57611b1a612597565b81604052809350858152868686011115611b3357600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146106f257600080fd5b803580151581146106f257600080fd5b600060208284031215611b85578081fd5b61116282611b4d565b60008060408385031215611ba0578081fd5b611ba983611b4d565b9150611bb760208401611b4d565b90509250929050565b600080600060608486031215611bd4578081fd5b611bdd84611b4d565b9250611beb60208501611b4d565b9150604084013590509250925092565b60008060008060808587031215611c10578081fd5b611c1985611b4d565b9350611c2760208601611b4d565b925060408501359150606085013567ffffffffffffffff811115611c49578182fd5b8501601f81018713611c59578182fd5b611c6887823560208401611ad7565b91505092959194509250565b60008060408385031215611c86578182fd5b611c8f83611b4d565b9150611bb760208401611b64565b60008060408385031215611caf578182fd5b611cb883611b4d565b946020939093013593505050565b600060208284031215611cd7578081fd5b61116282611b64565b600060208284031215611cf1578081fd5b8135611162816125ad565b600060208284031215611d0d578081fd5b8151611162816125ad565b600060208284031215611d29578081fd5b813567ffffffffffffffff811115611d3f578182fd5b8201601f81018413611d4f578182fd5b61142884823560208401611ad7565b600060208284031215611d6f578081fd5b5035919050565b60008060408385031215611d88578182fd5b82359150611bb760208401611b4d565b60008151808452611db08160208601602086016124d5565b601f01601f19169290920160200192915050565b600084516020611dd78285838a016124d5565b855191840191611dea8184848a016124d5565b8554920191839060028104600180831680611e0657607f831692505b858310811415611e2457634e487b7160e01b88526022600452602488fd5b808015611e385760018114611e4957611e75565b60ff19851688528388019550611e75565b611e528b612467565b895b85811015611e6d5781548a820152908401908801611e54565b505083880195505b50939b9a5050505050505050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611ed090830184611d98565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611f1257835183529284019291840191600101611ef6565b50909695505050505050565b901515815260200190565b6000602082526111626020830184611d98565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b602080825260149082015273496e76616c6964206d696e7420616d6f756e742160601b604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f54686520636f6e74726163742069732070617573656421000000000000000000604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b602080825260139082015272496e73756666696369656e742066756e64732160681b604082015260600190565b90815260200190565b60009081526020902090565b600082198211156124865761248661256b565b500190565b60008261249a5761249a612581565b500490565b60008160001904831182151516156124b9576124b961256b565b500290565b6000828210156124d0576124d061256b565b500390565b60005b838110156124f05781810151838201526020016124d8565b8381111561103c5750506000910152565b60028104600182168061251557607f821691505b6020821081141561253657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125505761255061256b565b5060010190565b60008261256657612566612581565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146112e457600080fdfea26469706673582212204959b342fba306b7ef65a5b3cca54e0cc7f04b74253b1c63bd40cb039aa50dfb64736f6c63430008010033
Deployed Bytecode Sourcemap
38807:4615:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25607:305;;;;;;;;;;-1:-1:-1;25607:305:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26552:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28111:221::-;;;;;;;;;;-1:-1:-1;28111:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;41862:110::-;;;;;;;;;;-1:-1:-1;41862:110:0;;;;;:::i;:::-;;:::i;:::-;;27634:411;;;;;;;;;;-1:-1:-1;27634:411:0;;;;;:::i;:::-;;:::i;39070:32::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;42220:100::-;;;;;;;;;;-1:-1:-1;42220:100:0;;;;;:::i;:::-;;:::i;42326:77::-;;;;;;;;;;-1:-1:-1;42326:77:0;;;;;:::i;:::-;;:::i;39706:89::-;;;;;;;;;;;;;:::i;39185:32::-;;;;;;;;;;;;;:::i;28861:339::-;;;;;;;;;;-1:-1:-1;28861:339:0;;;;;:::i;:::-;;:::i;39222:45::-;;;;;;;;;;-1:-1:-1;39222:45:0;;;;;:::i;:::-;;:::i;42409:690::-;;;;;;;;;;;;;:::i;29271:185::-;;;;;;;;;;-1:-1:-1;29271:185:0;;;;;:::i;:::-;;:::i;40420:635::-;;;;;;;;;;-1:-1:-1;40420:635:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;41648:74::-;;;;;;;;;;-1:-1:-1;41648:74:0;;;;;:::i;:::-;;:::i;41976:132::-;;;;;;;;;;-1:-1:-1;41976:132:0;;;;;:::i;:::-;;:::i;39302:28::-;;;;;;;;;;;;;:::i;38996:33::-;;;;;;;;;;;;;:::i;39272:25::-;;;;;;;;;;;;;:::i;38963:28::-;;;;;;;;;;;;;:::i;26246:239::-;;;;;;;;;;-1:-1:-1;26246:239:0;;;;;:::i;:::-;;:::i;25976:208::-;;;;;;;;;;-1:-1:-1;25976:208:0;;;;;:::i;:::-;;:::i;6228:103::-;;;;;;;;;;;;;:::i;42114:100::-;;;;;;;;;;-1:-1:-1;42114:100:0;;;;;:::i;:::-;;:::i;5577:87::-;;;;;;;;;;;;;:::i;39143:37::-;;;;;;;;;;;;;:::i;26721:104::-;;;;;;;;;;;;;:::i;39801:450::-;;;;;;:::i;:::-;;:::i;28404:155::-;;;;;;;;;;-1:-1:-1;28404:155:0;;;;;:::i;:::-;;:::i;39034:31::-;;;;;;;;;;;;;:::i;41728:130::-;;;;;;;;;;-1:-1:-1;41728:130:0;;;;;:::i;:::-;;:::i;29527:328::-;;;;;;;;;;-1:-1:-1;29527:328:0;;;;;:::i;:::-;;:::i;41061:494::-;;;;;;;;;;-1:-1:-1;41061:494:0;;;;;:::i;:::-;;:::i;39107:31::-;;;;;;;;;;;;;:::i;41561:81::-;;;;;;;;;;-1:-1:-1;41561:81:0;;;;;:::i;:::-;;:::i;28630:164::-;;;;;;;;;;-1:-1:-1;28630:164:0;;;;;:::i;:::-;;:::i;40259:155::-;;;;;;;;;;-1:-1:-1;40259:155:0;;;;;:::i;:::-;;:::i;6486:201::-;;;;;;;;;;-1:-1:-1;6486:201:0;;;;;:::i;:::-;;:::i;25607:305::-;25709:4;-1:-1:-1;;;;;;25746:40:0;;-1:-1:-1;;;25746:40:0;;:105;;-1:-1:-1;;;;;;;25803:48:0;;-1:-1:-1;;;25803:48:0;25746:105;:158;;;;25868:36;25892:11;25868:23;:36::i;:::-;25726:178;;25607:305;;;;:::o;26552:100::-;26606:13;26639:5;26632:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26552:100;:::o;28111:221::-;28187:7;28215:16;28223:7;28215;:16::i;:::-;28207:73;;;;-1:-1:-1;;;28207:73:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;28300:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;28300:24:0;;28111:221::o;41862:110::-;5808:12;:10;:12::i;:::-;-1:-1:-1;;;;;5797:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5797:23:0;;5789:68;;;;-1:-1:-1;;;5789:68:0;;;;;;;:::i;:::-;41936:13:::1;:30:::0;41862:110::o;27634:411::-;27715:13;27731:23;27746:7;27731:14;:23::i;:::-;27715:39;;27779:5;-1:-1:-1;;;;;27773:11:0;:2;-1:-1:-1;;;;;27773:11:0;;;27765:57;;;;-1:-1:-1;;;27765:57:0;;;;;;;:::i;:::-;27873:5;-1:-1:-1;;;;;27857:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;27857:21:0;;:62;;;;27882:37;27899:5;27906:12;:10;:12::i;27882:37::-;27835:168;;;;-1:-1:-1;;;27835:168:0;;;;;;;:::i;:::-;28016:21;28025:2;28029:7;28016:8;:21::i;:::-;27634:411;;;:::o;39070:32::-;;;;:::o;42220:100::-;5808:12;:10;:12::i;:::-;-1:-1:-1;;;;;5797:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5797:23:0;;5789:68;;;;-1:-1:-1;;;5789:68:0;;;;;;;:::i;:::-;42292:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;42220:100:::0;:::o;42326:77::-;5808:12;:10;:12::i;:::-;-1:-1:-1;;;;;5797:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5797:23:0;;5789:68;;;;-1:-1:-1;;;5789:68:0;;;;;;;:::i;:::-;42382:6:::1;:15:::0;;-1:-1:-1;;42382:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42326:77::o;39706:89::-;39750:7;39773:16;:6;:14;:16::i;:::-;39766:23;;39706:89;:::o;39185:32::-;;;;:::o;28861:339::-;29056:41;29075:12;:10;:12::i;:::-;29089:7;29056:18;:41::i;:::-;29048:103;;;;-1:-1:-1;;;29048:103:0;;;;;;;:::i;:::-;29164:28;29174:4;29180:2;29184:7;29164:9;:28::i;39222:45::-;;;;;;;;;;;;;:::o;42409:690::-;5808:12;:10;:12::i;:::-;-1:-1:-1;;;;;5797:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5797:23:0;;5789:68;;;;-1:-1:-1;;;5789:68:0;;;;;;;:::i;:::-;42456:7:::1;42477:42;42562:3;42533:26;:21;42557:2;42533:26;:::i;:::-;:32;;;;:::i;:::-;42469:101;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42455:115;;;42585:2;42577:11;;;::::0;::::1;;42921:7;42942;:5;:7::i;:::-;-1:-1:-1::0;;;;;42934:21:0::1;42963;42934:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42920:69;;;43004:2;42996:11;;;::::0;::::1;29271:185:::0;29409:39;29426:4;29432:2;29436:7;29409:39;;;;;;;;;;;;:16;:39::i;40420:635::-;40495:16;40523:23;40549:17;40559:6;40549:9;:17::i;:::-;40523:43;;40573:30;40620:15;40606:30;;;;;;-1:-1:-1;;;40606:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40606:30:0;-1:-1:-1;40573:63:0;-1:-1:-1;40668:1:0;40643:22;40712:309;40737:15;40719;:33;:64;;;;;40774:9;;40756:14;:27;;40719:64;40712:309;;;40794:25;40822:23;40830:14;40822:7;:23::i;:::-;40794:51;;40881:6;-1:-1:-1;;;;;40860:27:0;:17;-1:-1:-1;;;;;40860:27:0;;40856:131;;;40933:14;40900:13;40914:15;40900:30;;;;;;-1:-1:-1;;;40900:30:0;;;;;;;;;;;;;;;;;;:47;40960:17;;;;:::i;:::-;;;;40856:131;40997:16;;;;:::i;:::-;;;;40712:309;;;;-1:-1:-1;41036:13:0;;40420:635;-1:-1:-1;;;;40420:635:0:o;41648:74::-;5808:12;:10;:12::i;:::-;-1:-1:-1;;;;;5797:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5797:23:0;;5789:68;;;;-1:-1:-1;;;5789:68:0;;;;;;;:::i;:::-;41704:4:::1;:12:::0;41648:74::o;41976:132::-;5808:12;:10;:12::i;:::-;-1:-1:-1;;;;;5797:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5797:23:0;;5789:68;;;;-1:-1:-1;;;5789:68:0;;;;;;;:::i;:::-;42064:38;;::::1;::::0;:17:::1;::::0;:38:::1;::::0;::::1;::::0;::::1;:::i;39302:28::-:0;;;;;;;;;:::o;38996:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39272:25::-;;;;;;:::o;38963:28::-;;;;;;;:::i;26246:239::-;26318:7;26354:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26354:16:0;26389:19;26381:73;;;;-1:-1:-1;;;26381:73:0;;;;;;;:::i;25976:208::-;26048:7;-1:-1:-1;;;;;26076:19:0;;26068:74;;;;-1:-1:-1;;;26068:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;26160:16:0;;;;;:9;:16;;;;;;;25976:208::o;6228:103::-;5808:12;:10;:12::i;:::-;-1:-1:-1;;;;;5797:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5797:23:0;;5789:68;;;;-1:-1:-1;;;5789:68:0;;;;;;;:::i;:::-;6293:30:::1;6320:1;6293:18;:30::i;:::-;6228:103::o:0;42114:100::-;5808:12;:10;:12::i;:::-;-1:-1:-1;;;;;5797:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5797:23:0;;5789:68;;;;-1:-1:-1;;;5789:68:0;;;;;;;:::i;:::-;42186:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;5577:87::-:0;5650:6;;-1:-1:-1;;;;;5650:6:0;5577:87;:::o;39143:37::-;;;;:::o;26721:104::-;26777:13;26810:7;26803:14;;;;;:::i;39801:450::-;39866:11;39652:9;;39637:11;39618:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;39610:76;;;;-1:-1:-1;;;39610:76:0;;;;;;;:::i;:::-;39908:1:::1;39894:11;:15;:52;;;;;39928:18;;39913:11;:33;;39894:52;39886:85;;;;-1:-1:-1::0;;;39886:85:0::1;;;;;;;:::i;:::-;39987:6;::::0;::::1;;39986:7;39978:43;;;;-1:-1:-1::0;;;39978:43:0::1;;;;;;;:::i;:::-;40056:11;40049:4;;:18;;;;:::i;:::-;40036:9;:31;;40028:63;;;;-1:-1:-1::0;;;40028:63:0::1;;;;;;;:::i;:::-;40146:13;::::0;40117:10:::1;40106:22;::::0;;;:10:::1;:22;::::0;;;;;:36:::1;::::0;40131:11;;40106:36:::1;:::i;:::-;:53;;40098:62;;;::::0;::::1;;40178:10;40167:22;::::0;;;:10:::1;:22;::::0;;;;:37;;40193:11;;40167:22;:37:::1;::::0;40193:11;;40167:37:::1;:::i;:::-;::::0;;;-1:-1:-1;40211:34:0::1;::::0;-1:-1:-1;40221:10:0::1;40233:11:::0;40211:9:::1;:34::i;28404:155::-:0;28499:52;28518:12;:10;:12::i;:::-;28532:8;28542;28499:18;:52::i;39034:31::-;;;;;;;:::i;41728:130::-;5808:12;:10;:12::i;:::-;-1:-1:-1;;;;;5797:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5797:23:0;;5789:68;;;;-1:-1:-1;;;5789:68:0;;;;;;;:::i;:::-;41812:18:::1;:40:::0;41728:130::o;29527:328::-;29702:41;29721:12;:10;:12::i;:::-;29735:7;29702:18;:41::i;:::-;29694:103;;;;-1:-1:-1;;;29694:103:0;;;;;;;:::i;:::-;29808:39;29822:4;29828:2;29832:7;29841:5;29808:13;:39::i;:::-;29527:328;;;;:::o;41061:494::-;41160:13;41201:17;41209:8;41201:7;:17::i;:::-;41185:98;;;;-1:-1:-1;;;41185:98:0;;;;;;;:::i;:::-;41296:8;;;;;;;41292:64;;41331:17;41324:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41292:64;41364:28;41395:10;:8;:10::i;:::-;41364:41;;41450:1;41425:14;41419:28;:32;:130;;;;;;;;;;;;;;;;;41487:14;41503:19;:8;:17;:19::i;:::-;41524:9;41470:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41419:130;41412:137;41061:494;-1:-1:-1;;;41061:494:0:o;39107:31::-;;;;:::o;41561:81::-;5808:12;:10;:12::i;:::-;-1:-1:-1;;;;;5797:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5797:23:0;;5789:68;;;;-1:-1:-1;;;5789:68:0;;;;;;;:::i;:::-;41619:8:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;41619:17:0;;::::1;::::0;;;::::1;::::0;;41561:81::o;28630:164::-;-1:-1:-1;;;;;28751:25:0;;;28727:4;28751:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;28630:164::o;40259:155::-;40345:11;39652:9;;39637:11;39618:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;39610:76;;;;-1:-1:-1;;;39610:76:0;;;;;;;:::i;:::-;5808:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;5797:23:0::1;:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;5797:23:0::1;;5789:68;;;;-1:-1:-1::0;;;5789:68:0::1;;;;;;;:::i;:::-;40375:33:::2;40385:9;40396:11;40375:9;:33::i;6486:201::-:0;5808:12;:10;:12::i;:::-;-1:-1:-1;;;;;5797:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5797:23:0;;5789:68;;;;-1:-1:-1;;;5789:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6575:22:0;::::1;6567:73;;;;-1:-1:-1::0;;;6567:73:0::1;;;;;;;:::i;:::-;6651:28;6670:8;6651:18;:28::i;:::-;6486:201:::0;:::o;905:114::-;997:14;;905:114::o;1027:127::-;1116:19;;1134:1;1116:19;;;1027:127::o;8278:326::-;-1:-1:-1;;;;;8573:19:0;;:23;;;8278:326::o;18361:157::-;-1:-1:-1;;;;;;18470:40:0;;-1:-1:-1;;;18470:40:0;18361:157;;;:::o;31365:127::-;31430:4;31454:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31454:16:0;:30;;;31365:127::o;4301:98::-;4381:10;4301:98;:::o;35511:174::-;35586:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;35586:29:0;-1:-1:-1;;;;;35586:29:0;;;;;;;;:24;;35640:23;35586:24;35640:14;:23::i;:::-;-1:-1:-1;;;;;35631:46:0;;;;;;;;;;;35511:174;;:::o;31659:348::-;31752:4;31777:16;31785:7;31777;:16::i;:::-;31769:73;;;;-1:-1:-1;;;31769:73:0;;;;;;;:::i;:::-;31853:13;31869:23;31884:7;31869:14;:23::i;:::-;31853:39;;31922:5;-1:-1:-1;;;;;31911:16:0;:7;-1:-1:-1;;;;;31911:16:0;;:51;;;;31955:7;-1:-1:-1;;;;;31931:31:0;:20;31943:7;31931:11;:20::i;:::-;-1:-1:-1;;;;;31931:31:0;;31911:51;:87;;;;31966:32;31983:5;31990:7;31966:16;:32::i;:::-;31903:96;31659:348;-1:-1:-1;;;;31659:348:0:o;34768:625::-;34927:4;-1:-1:-1;;;;;34900:31:0;:23;34915:7;34900:14;:23::i;:::-;-1:-1:-1;;;;;34900:31:0;;34892:81;;;;-1:-1:-1;;;34892:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34992:16:0;;34984:65;;;;-1:-1:-1;;;34984:65:0;;;;;;;:::i;:::-;35062:39;35083:4;35089:2;35093:7;35062:20;:39::i;:::-;35166:29;35183:1;35187:7;35166:8;:29::i;:::-;-1:-1:-1;;;;;35208:15:0;;;;;;:9;:15;;;;;:20;;35227:1;;35208:15;:20;;35227:1;;35208:20;:::i;:::-;;;;-1:-1:-1;;;;;;;35239:13:0;;;;;;:9;:13;;;;;:18;;35256:1;;35239:13;:18;;35256:1;;35239:18;:::i;:::-;;;;-1:-1:-1;;35268:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35268:21:0;-1:-1:-1;;;;;35268:21:0;;;;;;;;;35307:27;;35268:16;;35307:27;;;;;;;35347:38;35367:4;35373:2;35377:7;35347:19;:38::i;6847:191::-;6940:6;;;-1:-1:-1;;;;;6957:17:0;;;-1:-1:-1;;;;;;6957:17:0;;;;;;;6990:40;;6940:6;;;6957:17;6940:6;;6990:40;;6921:16;;6990:40;6847:191;;:::o;43105:204::-;43185:9;43180:124;43204:11;43200:1;:15;43180:124;;;43231:18;:6;:16;:18::i;:::-;43258:38;43268:9;43279:16;:6;:14;:16::i;:::-;43258:9;:38::i;:::-;43217:3;;;;:::i;:::-;;;;43180:124;;35827:315;35982:8;-1:-1:-1;;;;;35973:17:0;:5;-1:-1:-1;;;;;35973:17:0;;;35965:55;;;;-1:-1:-1;;;35965:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36031:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;:46;;-1:-1:-1;;36031:46:0;;;;;;;36093:41;;;;;36031:46;;36093:41;:::i;:::-;;;;;;;;35827:315;;;:::o;30737:::-;30894:28;30904:4;30910:2;30914:7;30894:9;:28::i;:::-;30941:48;30964:4;30970:2;30974:7;30983:5;30941:22;:48::i;:::-;30933:111;;;;-1:-1:-1;;;30933:111:0;;;;;;;:::i;43315:104::-;43375:13;43404:9;43397:16;;;;;:::i;1863:723::-;1919:13;2140:10;2136:53;;-1:-1:-1;2167:10:0;;;;;;;;;;;;-1:-1:-1;;;2167:10:0;;;;;;2136:53;2214:5;2199:12;2255:78;2262:9;;2255:78;;2288:8;;;;:::i;:::-;;-1:-1:-1;2311:10:0;;-1:-1:-1;2319:2:0;2311:10;;:::i;:::-;;;2255:78;;;2343:19;2375:6;2365:17;;;;;;-1:-1:-1;;;2365:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2365:17:0;;2343:39;;2393:154;2400:10;;2393:154;;2427:11;2437:1;2427:11;;:::i;:::-;;-1:-1:-1;2496:10:0;2504:2;2496:5;:10;:::i;:::-;2483:24;;:2;:24;:::i;:::-;2470:39;;2453:6;2460;2453:14;;;;;;-1:-1:-1;;;2453:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;2453:56:0;;;;;;;;-1:-1:-1;2524:11:0;2533:2;2524:11;;:::i;:::-;;;2393:154;;32349:110;32425:26;32435:2;32439:7;32425:26;;;;;;;;;;;;:9;:26::i;36707:799::-;36862:4;36883:15;:2;-1:-1:-1;;;;;36883:13:0;;:15::i;:::-;36879:620;;;36935:2;-1:-1:-1;;;;;36919:36:0;;36956:12;:10;:12::i;:::-;36970:4;36976:7;36985:5;36919:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36919:72:0;;;;;;;;-1:-1:-1;;36919:72:0;;;;;;;;;;;;:::i;:::-;;;36915:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37161:13:0;;37157:272;;37204:60;;-1:-1:-1;;;37204:60:0;;;;;;;:::i;37157:272::-;37379:6;37373:13;37364:6;37360:2;37356:15;37349:38;36915:529;-1:-1:-1;;;;;;37042:51:0;-1:-1:-1;;;37042:51:0;;-1:-1:-1;37035:58:0;;36879:620;-1:-1:-1;37483:4:0;36707:799;;;;;;:::o;32686:321::-;32816:18;32822:2;32826:7;32816:5;:18::i;:::-;32867:54;32898:1;32902:2;32906:7;32915:5;32867:22;:54::i;:::-;32845:154;;;;-1:-1:-1;;;32845:154:0;;;;;;;:::i;33343:439::-;-1:-1:-1;;;;;33423:16:0;;33415:61;;;;-1:-1:-1;;;33415:61:0;;;;;;;:::i;:::-;33496:16;33504:7;33496;:16::i;:::-;33495:17;33487:58;;;;-1:-1:-1;;;33487:58:0;;;;;;;:::i;:::-;33558:45;33587:1;33591:2;33595:7;33558:20;:45::i;:::-;-1:-1:-1;;;;;33616:13:0;;;;;;:9;:13;;;;;:18;;33633:1;;33616:13;:18;;33633:1;;33616:18;:::i;:::-;;;;-1:-1:-1;;33645:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33645:21:0;-1:-1:-1;;;;;33645:21:0;;;;;;;;33684:33;;33645:16;;;33684:33;;33645:16;;33684:33;33730:44;33758:1;33762:2;33766:7;33730:19;:44::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:633:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;232:2;226:9;200:2;286:15;;-1:-1:-1;;282:24:1;;;308:2;278:33;274:42;262:55;;;332:18;;;352:22;;;329:46;326:2;;;378:18;;:::i;:::-;418:10;414:2;407:22;447:6;438:15;;477:6;469;462:22;517:3;508:6;503:3;499:16;496:25;493:2;;;534:1;531;524:12;493:2;584:6;579:3;572:4;564:6;560:17;547:44;639:1;632:4;623:6;615;611:19;607:30;600:41;;;;90:557;;;;;:::o;652:175::-;722:20;;-1:-1:-1;;;;;771:31:1;;761:42;;751:2;;817:1;814;807:12;832:162;899:20;;955:13;;948:21;938:32;;928:2;;984:1;981;974:12;999:198;;1111:2;1099:9;1090:7;1086:23;1082:32;1079:2;;;1132:6;1124;1117:22;1079:2;1160:31;1181:9;1160:31;:::i;1202:274::-;;;1331:2;1319:9;1310:7;1306:23;1302:32;1299:2;;;1352:6;1344;1337:22;1299:2;1380:31;1401:9;1380:31;:::i;:::-;1370:41;;1430:40;1466:2;1455:9;1451:18;1430:40;:::i;:::-;1420:50;;1289:187;;;;;:::o;1481:342::-;;;;1627:2;1615:9;1606:7;1602:23;1598:32;1595:2;;;1648:6;1640;1633:22;1595:2;1676:31;1697:9;1676:31;:::i;:::-;1666:41;;1726:40;1762:2;1751:9;1747:18;1726:40;:::i;:::-;1716:50;;1813:2;1802:9;1798:18;1785:32;1775:42;;1585:238;;;;;:::o;1828:702::-;;;;;2000:3;1988:9;1979:7;1975:23;1971:33;1968:2;;;2022:6;2014;2007:22;1968:2;2050:31;2071:9;2050:31;:::i;:::-;2040:41;;2100:40;2136:2;2125:9;2121:18;2100:40;:::i;:::-;2090:50;;2187:2;2176:9;2172:18;2159:32;2149:42;;2242:2;2231:9;2227:18;2214:32;2269:18;2261:6;2258:30;2255:2;;;2306:6;2298;2291:22;2255:2;2334:22;;2387:4;2379:13;;2375:27;-1:-1:-1;2365:2:1;;2421:6;2413;2406:22;2365:2;2449:75;2516:7;2511:2;2498:16;2493:2;2489;2485:11;2449:75;:::i;:::-;2439:85;;;1958:572;;;;;;;:::o;2535:268::-;;;2661:2;2649:9;2640:7;2636:23;2632:32;2629:2;;;2682:6;2674;2667:22;2629:2;2710:31;2731:9;2710:31;:::i;:::-;2700:41;;2760:37;2793:2;2782:9;2778:18;2760:37;:::i;2808:266::-;;;2937:2;2925:9;2916:7;2912:23;2908:32;2905:2;;;2958:6;2950;2943:22;2905:2;2986:31;3007:9;2986:31;:::i;:::-;2976:41;3064:2;3049:18;;;;3036:32;;-1:-1:-1;;;2895:179:1:o;3079:192::-;;3188:2;3176:9;3167:7;3163:23;3159:32;3156:2;;;3209:6;3201;3194:22;3156:2;3237:28;3255:9;3237:28;:::i;3276:257::-;;3387:2;3375:9;3366:7;3362:23;3358:32;3355:2;;;3408:6;3400;3393:22;3355:2;3452:9;3439:23;3471:32;3497:5;3471:32;:::i;3538:261::-;;3660:2;3648:9;3639:7;3635:23;3631:32;3628:2;;;3681:6;3673;3666:22;3628:2;3718:9;3712:16;3737:32;3763:5;3737:32;:::i;3804:482::-;;3926:2;3914:9;3905:7;3901:23;3897:32;3894:2;;;3947:6;3939;3932:22;3894:2;3992:9;3979:23;4025:18;4017:6;4014:30;4011:2;;;4062:6;4054;4047:22;4011:2;4090:22;;4143:4;4135:13;;4131:27;-1:-1:-1;4121:2:1;;4177:6;4169;4162:22;4121:2;4205:75;4272:7;4267:2;4254:16;4249:2;4245;4241:11;4205:75;:::i;4291:190::-;;4403:2;4391:9;4382:7;4378:23;4374:32;4371:2;;;4424:6;4416;4409:22;4371:2;-1:-1:-1;4452:23:1;;4361:120;-1:-1:-1;4361:120:1:o;4486:266::-;;;4615:2;4603:9;4594:7;4590:23;4586:32;4583:2;;;4636:6;4628;4621:22;4583:2;4677:9;4664:23;4654:33;;4706:40;4742:2;4731:9;4727:18;4706:40;:::i;4757:259::-;;4838:5;4832:12;4865:6;4860:3;4853:19;4881:63;4937:6;4930:4;4925:3;4921:14;4914:4;4907:5;4903:16;4881:63;:::i;:::-;4998:2;4977:15;-1:-1:-1;;4973:29:1;4964:39;;;;5005:4;4960:50;;4808:208;-1:-1:-1;;4808:208:1:o;5021:1532::-;;5283:6;5277:13;5309:4;5322:51;5366:6;5361:3;5356:2;5348:6;5344:15;5322:51;:::i;:::-;5436:13;;5395:16;;;;5458:55;5436:13;5395:16;5480:15;;;5458:55;:::i;:::-;5604:13;;5535:20;;;5575:3;;5681:1;5666:17;;5702:1;5738:18;;;;5765:2;;5843:4;5833:8;5829:19;5817:31;;5765:2;5906;5896:8;5893:16;5873:18;5870:40;5867:2;;;-1:-1:-1;;;5933:33:1;;5989:4;5986:1;5979:15;6019:4;5940:3;6007:17;5867:2;6050:18;6077:110;;;;6201:1;6196:332;;;;6043:485;;6077:110;-1:-1:-1;;6112:24:1;;6098:39;;6157:20;;;;-1:-1:-1;6077:110:1;;6196:332;6232:39;6264:6;6232:39;:::i;:::-;6293:3;6309:169;6323:8;6320:1;6317:15;6309:169;;;6405:14;;6390:13;;;6383:37;6448:16;;;;6340:10;;6309:169;;;6313:3;;6509:8;6502:5;6498:20;6491:27;;6043:485;-1:-1:-1;6544:3:1;;5253:1300;-1:-1:-1;;;;;;;;;;;5253:1300:1:o;6558:205::-;6758:3;6749:14::o;6768:203::-;-1:-1:-1;;;;;6932:32:1;;;;6914:51;;6902:2;6887:18;;6869:102::o;6976:490::-;-1:-1:-1;;;;;7245:15:1;;;7227:34;;7297:15;;7292:2;7277:18;;7270:43;7344:2;7329:18;;7322:34;;;7392:3;7387:2;7372:18;;7365:31;;;6976:490;;7413:47;;7440:19;;7432:6;7413:47;:::i;:::-;7405:55;7179:287;-1:-1:-1;;;;;;7179:287:1:o;7471:635::-;7642:2;7694:21;;;7764:13;;7667:18;;;7786:22;;;7471:635;;7642:2;7865:15;;;;7839:2;7824:18;;;7471:635;7911:169;7925:6;7922:1;7919:13;7911:169;;;7986:13;;7974:26;;8055:15;;;;8020:12;;;;7947:1;7940:9;7911:169;;;-1:-1:-1;8097:3:1;;7622:484;-1:-1:-1;;;;;;7622:484:1:o;8111:187::-;8276:14;;8269:22;8251:41;;8239:2;8224:18;;8206:92::o;8303:221::-;;8452:2;8441:9;8434:21;8472:46;8514:2;8503:9;8499:18;8491:6;8472:46;:::i;8529:414::-;8731:2;8713:21;;;8770:2;8750:18;;;8743:30;8809:34;8804:2;8789:18;;8782:62;-1:-1:-1;;;8875:2:1;8860:18;;8853:48;8933:3;8918:19;;8703:240::o;8948:402::-;9150:2;9132:21;;;9189:2;9169:18;;;9162:30;9228:34;9223:2;9208:18;;9201:62;-1:-1:-1;;;9294:2:1;9279:18;;9272:36;9340:3;9325:19;;9122:228::o;9355:401::-;9557:2;9539:21;;;9596:2;9576:18;;;9569:30;9635:34;9630:2;9615:18;;9608:62;-1:-1:-1;;;9701:2:1;9686:18;;9679:35;9746:3;9731:19;;9529:227::o;9761:352::-;9963:2;9945:21;;;10002:2;9982:18;;;9975:30;10041;10036:2;10021:18;;10014:58;10104:2;10089:18;;9935:178::o;10118:344::-;10320:2;10302:21;;;10359:2;10339:18;;;10332:30;-1:-1:-1;;;10393:2:1;10378:18;;10371:50;10453:2;10438:18;;10292:170::o;10467:400::-;10669:2;10651:21;;;10708:2;10688:18;;;10681:30;10747:34;10742:2;10727:18;;10720:62;-1:-1:-1;;;10813:2:1;10798:18;;10791:34;10857:3;10842:19;;10641:226::o;10872:349::-;11074:2;11056:21;;;11113:2;11093:18;;;11086:30;11152:27;11147:2;11132:18;;11125:55;11212:2;11197:18;;11046:175::o;11226:408::-;11428:2;11410:21;;;11467:2;11447:18;;;11440:30;11506:34;11501:2;11486:18;;11479:62;-1:-1:-1;;;11572:2:1;11557:18;;11550:42;11624:3;11609:19;;11400:234::o;11639:420::-;11841:2;11823:21;;;11880:2;11860:18;;;11853:30;11919:34;11914:2;11899:18;;11892:62;11990:26;11985:2;11970:18;;11963:54;12049:3;12034:19;;11813:246::o;12064:406::-;12266:2;12248:21;;;12305:2;12285:18;;;12278:30;12344:34;12339:2;12324:18;;12317:62;-1:-1:-1;;;12410:2:1;12395:18;;12388:40;12460:3;12445:19;;12238:232::o;12475:405::-;12677:2;12659:21;;;12716:2;12696:18;;;12689:30;12755:34;12750:2;12735:18;;12728:62;-1:-1:-1;;;12821:2:1;12806:18;;12799:39;12870:3;12855:19;;12649:231::o;12885:356::-;13087:2;13069:21;;;13106:18;;;13099:30;13165:34;13160:2;13145:18;;13138:62;13232:2;13217:18;;13059:182::o;13246:408::-;13448:2;13430:21;;;13487:2;13467:18;;;13460:30;13526:34;13521:2;13506:18;;13499:62;-1:-1:-1;;;13592:2:1;13577:18;;13570:42;13644:3;13629:19;;13420:234::o;13659:356::-;13861:2;13843:21;;;13880:18;;;13873:30;13939:34;13934:2;13919:18;;13912:62;14006:2;13991:18;;13833:182::o;14020:347::-;14222:2;14204:21;;;14261:2;14241:18;;;14234:30;14300:25;14295:2;14280:18;;14273:53;14358:2;14343:18;;14194:173::o;14372:411::-;14574:2;14556:21;;;14613:2;14593:18;;;14586:30;14652:34;14647:2;14632:18;;14625:62;-1:-1:-1;;;14718:2:1;14703:18;;14696:45;14773:3;14758:19;;14546:237::o;14788:397::-;14990:2;14972:21;;;15029:2;15009:18;;;15002:30;15068:34;15063:2;15048:18;;15041:62;-1:-1:-1;;;15134:2:1;15119:18;;15112:31;15175:3;15160:19;;14962:223::o;15190:344::-;15392:2;15374:21;;;15431:2;15411:18;;;15404:30;-1:-1:-1;;;15465:2:1;15450:18;;15443:50;15525:2;15510:18;;15364:170::o;15539:413::-;15741:2;15723:21;;;15780:2;15760:18;;;15753:30;15819:34;15814:2;15799:18;;15792:62;-1:-1:-1;;;15885:2:1;15870:18;;15863:47;15942:3;15927:19;;15713:239::o;15957:343::-;16159:2;16141:21;;;16198:2;16178:18;;;16171:30;-1:-1:-1;;;16232:2:1;16217:18;;16210:49;16291:2;16276:18;;16131:169::o;16305:177::-;16451:25;;;16439:2;16424:18;;16406:76::o;16487:129::-;;16555:17;;;16605:4;16589:21;;;16545:71::o;16621:128::-;;16692:1;16688:6;16685:1;16682:13;16679:2;;;16698:18;;:::i;:::-;-1:-1:-1;16734:9:1;;16669:80::o;16754:120::-;;16820:1;16810:2;;16825:18;;:::i;:::-;-1:-1:-1;16859:9:1;;16800:74::o;16879:168::-;;16985:1;16981;16977:6;16973:14;16970:1;16967:21;16962:1;16955:9;16948:17;16944:45;16941:2;;;16992:18;;:::i;:::-;-1:-1:-1;17032:9:1;;16931:116::o;17052:125::-;;17120:1;17117;17114:8;17111:2;;;17125:18;;:::i;:::-;-1:-1:-1;17162:9:1;;17101:76::o;17182:258::-;17254:1;17264:113;17278:6;17275:1;17272:13;17264:113;;;17354:11;;;17348:18;17335:11;;;17328:39;17300:2;17293:10;17264:113;;;17395:6;17392:1;17389:13;17386:2;;;-1:-1:-1;;17430:1:1;17412:16;;17405:27;17235:205::o;17445:380::-;17530:1;17520:12;;17577:1;17567:12;;;17588:2;;17642:4;17634:6;17630:17;17620:27;;17588:2;17695;17687:6;17684:14;17664:18;17661:38;17658:2;;;17741:10;17736:3;17732:20;17729:1;17722:31;17776:4;17773:1;17766:15;17804:4;17801:1;17794:15;17658:2;;17500:325;;;:::o;17830:135::-;;-1:-1:-1;;17890:17:1;;17887:2;;;17910:18;;:::i;:::-;-1:-1:-1;17957:1:1;17946:13;;17877:88::o;17970:112::-;;18028:1;18018:2;;18033:18;;:::i;:::-;-1:-1:-1;18067:9:1;;18008:74::o;18087:127::-;18148:10;18143:3;18139:20;18136:1;18129:31;18179:4;18176:1;18169:15;18203:4;18200:1;18193:15;18219:127;18280:10;18275:3;18271:20;18268:1;18261:31;18311:4;18308:1;18301:15;18335:4;18332:1;18325:15;18351:127;18412:10;18407:3;18403:20;18400:1;18393:31;18443:4;18440:1;18433:15;18467:4;18464:1;18457:15;18483:133;-1:-1:-1;;;;;;18559:32:1;;18549:43;;18539:2;;18606:1;18603;18596:12
Swarm Source
ipfs://4959b342fba306b7ef65a5b3cca54e0cc7f04b74253b1c63bd40cb039aa50dfb
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.