ERC-721
Overview
Max Total Supply
361 otherdeeddao
Holders
22
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 otherdeeddaoLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
OtherdeedDao
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-01 */ // SPDX-License-Identifier: MIT // Creator: Chiru Labs // 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 v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (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/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/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: contracts/LowerGas.sol // Creator: Chiru Labs pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 (max value of uint128) of supply */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal currentIndex = 0; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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 * `maxBatchSize` refers to how much a minter can mint at a time. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_ ) { require(maxBatchSize_ > 0, 'ERC721A: max batch size must be nonzero'); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), 'ERC721A: global index out of bounds'); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), 'ERC721A: owner index out of bounds'); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert('ERC721A: unable to get token of owner by index'); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), 'ERC721A: balance query for the zero address'); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), 'ERC721A: number minted query for the zero address'); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), 'ERC721A: owner query for nonexistent token'); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert('ERC721A: unable to determine the owner of token'); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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 override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, 'ERC721A: approval to current owner'); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), 'ERC721A: approve caller is not owner nor approved for all' ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), 'ERC721A: approved query for nonexistent token'); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), 'ERC721A: approve to caller'); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), 'ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), 'ERC721A: mint to the zero address'); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), 'ERC721A: token already minted'); require(quantity <= maxBatchSize, 'ERC721A: quantity to mint too high'); require(quantity > 0, 'ERC721A: quantity must be greater 0'); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved'); require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner'); require(to != address(0), 'ERC721A: transfer to the zero address'); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; } _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership(prevOwnership.addr, prevOwnership.startTimestamp); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert('ERC721A: transfer to non ERC721Receiver implementer'); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } pragma solidity ^0.8.13; contract OtherdeedDao is ERC721A, Ownable { using Strings for uint256; uint256 public mintPriceTier1 = 0.025 ether; uint256 public mintPriceTier2 = 0.025 ether; uint256 public mintPriceTier3 = 0.025 ether; uint256 public mintPrice = 0.025 ether; uint256 public maxSupply = 8888; uint256 public maxFreeMint = 8888; uint256 public maxMintBatch = 2000; uint256 public freeMintPerWallet = 1; string public baseTokenURI = ""; string public hiddenURI = "https://gateway.pinata.cloud/ipfs/QmXADN7yfHbbWae9rPNZeXinRXg3t8v6eD8VsQLAv58wsT"; bool public openMint = true; bool public onFreeMint = true; bool public on1Free1 = false; bool public onMintTeam = true; bool public revealed = false; mapping(address => uint256) public addressMintedBalance; constructor() ERC721A("Otherdeed DAO", "otherdeeddao", 100) { } function mintFree() external payable { require(openMint, "The contract is not open to mint yet!"); require(onFreeMint, "The contract is not open for free mint"); uint256 _mintAmount = freeMintPerWallet; if(currentIndex <= 500) { _mintAmount = 3; } else if (currentIndex <= 1500) { _mintAmount = 2; } else if (currentIndex <= 2500) { _mintAmount = 1; } require(balanceOf(_msgSender()) < 1, "Max free mint exceeded!"); require(currentIndex + _mintAmount <= maxFreeMint, "Max free mint exceeded!"); require(currentIndex + _mintAmount <= maxSupply, "Max supply exceeded!"); _safeMint(msg.sender, _mintAmount); } function mint(uint256 _mintAmount) external payable { require(openMint, "The contract is not open to mint yet!"); uint256 _mintPrice = currentMintPrice(); require(msg.value >= _mintPrice * _mintAmount, "Insufficient funds!"); if(on1Free1){ _mintAmount = _mintAmount * 2; } require(currentIndex + _mintAmount <= maxSupply, "Max supply exceeded!"); _safeMint(msg.sender, _mintAmount); } function mintMany(uint256 _mintAmount) external payable { require(onMintTeam, "No more team mint"); require(_mintAmount <= 100, "Amount exceeded 100"); require(currentIndex + _mintAmount <= maxMintBatch, "Max supply exceeded!"); require(currentIndex + _mintAmount <= maxSupply, "Max supply exceeded!"); _safeMint(msg.sender, _mintAmount); } function currentMintPrice() public view virtual returns (uint256) { uint256 _mintPrice = mintPrice; if(currentIndex <= 2000){ _mintPrice = mintPriceTier1; } else if(currentIndex <= 5000) { _mintPrice = mintPriceTier2; } else if(currentIndex <= 8000) { _mintPrice = mintPriceTier3; } return _mintPrice; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenURI; } return string(abi.encodePacked(baseTokenURI, Strings.toString(_tokenId), ".json")); } function withdraw() external onlyOwner { payable(owner()).transfer(address(this).balance); } function setMaxFreeMint(uint256 _maxFreeMint) public onlyOwner { maxFreeMint = _maxFreeMint; } function setMaxSupply(uint256 _maxSupply) public onlyOwner { maxSupply = _maxSupply; } function setMaxMintBatch(uint256 _maxMintBatch) public onlyOwner { maxMintBatch = _maxMintBatch; } function setFreeMintPerWallet(uint256 _freeMintPerWallet) public onlyOwner { freeMintPerWallet = _freeMintPerWallet; } function setBaseUri(string memory _uri) external onlyOwner { baseTokenURI = _uri; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setHiddenUri(string memory _uri) external onlyOwner { hiddenURI = _uri; } function setOn1Free1(bool _state) public onlyOwner { on1Free1 = _state; } function setOnMintTeam(bool _state) public onlyOwner { onMintTeam = _state; } function setFreeMint(bool _state) public onlyOwner { onFreeMint = _state; } function setOpenMint(bool _state) public onlyOwner { openMint = _state; } function setPrice(uint256 _price) public onlyOwner { mintPrice = _price; } }
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":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMintPerWallet","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":"hiddenURI","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":"maxFreeMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintBatch","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":[],"name":"mintFree","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintMany","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPriceTier1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPriceTier2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPriceTier3","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":"on1Free1","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onFreeMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onMintTeam","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"string","name":"_uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_freeMintPerWallet","type":"uint256"}],"name":"setFreeMintPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setHiddenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxFreeMint","type":"uint256"}],"name":"setMaxFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintBatch","type":"uint256"}],"name":"setMaxMintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOn1Free1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnMintTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOpenMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60008080556658d15e1762800060088190556009819055600a819055600b556122b8600c819055600d556107d0600e556001600f5560c0604081905260a08290526200004f9160109190620001ea565b5060405180608001604052806050815260200162002e236050913980516200008091601191602090910190620001ea565b506012805464ffffffffff19166301000101179055348015620000a257600080fd5b506040518060400160405280600d81526020016c4f74686572646565642044414f60981b8152506040518060400160405280600c81526020016b6f746865726465656464616f60a01b815250606460008111620001555760405162461bcd60e51b815260206004820152602760248201527f455243373231413a206d61782062617463682073697a65206d757374206265206044820152666e6f6e7a65726f60c81b606482015260840160405180910390fd5b82516200016a906001906020860190620001ea565b50815162000180906002906020850190620001ea565b50608052506200019290503362000198565b620002cc565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001f89062000290565b90600052602060002090601f0160209004810192826200021c576000855562000267565b82601f106200023757805160ff191683800117855562000267565b8280016001018555821562000267579182015b82811115620002675782518255916020019190600101906200024a565b506200027592915062000279565b5090565b5b808211156200027557600081556001016200027a565b600181811c90821680620002a557607f821691505b602082108103620002c657634e487b7160e01b600052602260045260246000fd5b50919050565b608051612b2d620002f660003960008181611d0c01528181611d3601526121460152612b2d6000f3fe6080604052600436106102ff5760003560e01c8063715018a611610190578063bab257f3116100dc578063dc6d118911610095578063e2af30f41161006f578063e2af30f41461087a578063e985e9c51461089a578063eb5999f5146108e3578063f2fde38b1461090457600080fd5b8063dc6d11891461081a578063e04a5d1f1461083a578063e0a808531461085a57600080fd5b8063bab257f31461077f578063bce6d6721461079f578063c1ab22ec146107b9578063c87b56dd146107cf578063d547cfb7146107ef578063d5abeb011461080457600080fd5b806395d89b4111610149578063a0bcfc7f11610123578063a0bcfc7f14610709578063a22cb46514610729578063a591252d14610749578063b88d4fde1461075f57600080fd5b806395d89b41146106c1578063a0712d68146106d6578063a0b7cd85146106e957600080fd5b8063715018a614610631578063742a4c9b146106465780638ab53447146106665780638cc54e7f1461066e5780638da5cb5b1461068357806391b7f5ed146106a157600080fd5b806323b872dd1161024f57806344036c44116102085780636352211e116101e25780636352211e146105bb5780636817c76c146105db5780636f8b44b0146105f157806370a082311461061157600080fd5b806344036c44146105635780634f6ccce714610579578063518302271461059957600080fd5b806323b872dd146104b85780632e1321c3146104d85780632f745c59146104ee5780633ccfd60b1461050e5780633f815b9a1461052357806342842e0e1461054357600080fd5b8063095ea7b3116102bc57806316dad3801161029657806316dad3801461044157806318160ddd1461046057806318cae2691461047557806321d2a904146104a257600080fd5b8063095ea7b3146103eb5780630e04c67b1461040b5780631067fcc71461042157600080fd5b806301ffc9a7146103045780630426c1fa146103395780630561942a1461035b578063059513a61461037e57806306fdde0314610391578063081812fc146103b3575b600080fd5b34801561031057600080fd5b5061032461031f366004612466565b610924565b60405190151581526020015b60405180910390f35b34801561034557600080fd5b5061035961035436600461248a565b610991565b005b34801561036757600080fd5b506103706109c9565b604051908152602001610330565b61035961038c36600461248a565b610a0c565b34801561039d57600080fd5b506103a6610b0b565b60405161033091906124fb565b3480156103bf57600080fd5b506103d36103ce36600461248a565b610b9d565b6040516001600160a01b039091168152602001610330565b3480156103f757600080fd5b50610359610406366004612525565b610c28565b34801561041757600080fd5b5061037060095481565b34801561042d57600080fd5b5061035961043c3660046125db565b610d3f565b34801561044d57600080fd5b5060125461032490610100900460ff1681565b34801561046c57600080fd5b50600054610370565b34801561048157600080fd5b50610370610490366004612624565b60136020526000908152604090205481565b3480156104ae57600080fd5b50610370600e5481565b3480156104c457600080fd5b506103596104d336600461263f565b610d80565b3480156104e457600080fd5b50610370600a5481565b3480156104fa57600080fd5b50610370610509366004612525565b610d8b565b34801561051a57600080fd5b50610359610ef7565b34801561052f57600080fd5b5061035961053e36600461268b565b610f5a565b34801561054f57600080fd5b5061035961055e36600461263f565b610f9e565b34801561056f57600080fd5b5061037060085481565b34801561058557600080fd5b5061037061059436600461248a565b610fb9565b3480156105a557600080fd5b5060125461032490640100000000900460ff1681565b3480156105c757600080fd5b506103d36105d636600461248a565b61101b565b3480156105e757600080fd5b50610370600b5481565b3480156105fd57600080fd5b5061035961060c36600461248a565b61102d565b34801561061d57600080fd5b5061037061062c366004612624565b61105c565b34801561063d57600080fd5b506103596110ed565b34801561065257600080fd5b5061035961066136600461248a565b611123565b610359611152565b34801561067a57600080fd5b506103a66112bd565b34801561068f57600080fd5b506007546001600160a01b03166103d3565b3480156106ad57600080fd5b506103596106bc36600461248a565b61134b565b3480156106cd57600080fd5b506103a661137a565b6103596106e436600461248a565b611389565b3480156106f557600080fd5b506012546103249062010000900460ff1681565b34801561071557600080fd5b506103596107243660046125db565b61145e565b34801561073557600080fd5b506103596107443660046126a6565b61149b565b34801561075557600080fd5b50610370600d5481565b34801561076b57600080fd5b5061035961077a3660046126d9565b61155f565b34801561078b57600080fd5b5061035961079a36600461268b565b611598565b3480156107ab57600080fd5b506012546103249060ff1681565b3480156107c557600080fd5b50610370600f5481565b3480156107db57600080fd5b506103a66107ea36600461248a565b6115de565b3480156107fb57600080fd5b506103a661172a565b34801561081057600080fd5b50610370600c5481565b34801561082657600080fd5b5061035961083536600461248a565b611737565b34801561084657600080fd5b5061035961085536600461268b565b611766565b34801561086657600080fd5b5061035961087536600461268b565b6117ae565b34801561088657600080fd5b5061035961089536600461268b565b6117f8565b3480156108a657600080fd5b506103246108b5366004612755565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156108ef57600080fd5b50601254610324906301000000900460ff1681565b34801561091057600080fd5b5061035961091f366004612624565b611835565b60006001600160e01b031982166380ac58cd60e01b148061095557506001600160e01b03198216635b5e139f60e01b145b8061097057506001600160e01b0319821663780e9d6360e01b145b8061098b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6007546001600160a01b031633146109c45760405162461bcd60e51b81526004016109bb9061277f565b60405180910390fd5b600f55565b600080600b5490506107d0600054116109e457505060085490565b611388600054116109f757505060095490565b611f4060005411610a075750600a545b919050565b6012546301000000900460ff16610a595760405162461bcd60e51b8152602060048201526011602482015270139bc81b5bdc99481d19585b481b5a5b9d607a1b60448201526064016109bb565b6064811115610aa05760405162461bcd60e51b81526020600482015260136024820152720416d6f756e742065786365656465642031303606c1b60448201526064016109bb565b600e5481600054610ab191906127ca565b1115610acf5760405162461bcd60e51b81526004016109bb906127e2565b600c5481600054610ae091906127ca565b1115610afe5760405162461bcd60e51b81526004016109bb906127e2565b610b0833826118cd565b50565b606060018054610b1a90612810565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4690612810565b8015610b935780601f10610b6857610100808354040283529160200191610b93565b820191906000526020600020905b815481529060010190602001808311610b7657829003601f168201915b5050505050905090565b6000610baa826000541190565b610c0c5760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084016109bb565b506000908152600560205260409020546001600160a01b031690565b6000610c338261101b565b9050806001600160a01b0316836001600160a01b031603610ca15760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b60648201526084016109bb565b336001600160a01b0382161480610cbd5750610cbd81336108b5565b610d2f5760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000000060648201526084016109bb565b610d3a8383836118e7565b505050565b6007546001600160a01b03163314610d695760405162461bcd60e51b81526004016109bb9061277f565b8051610d7c9060119060208401906123c0565b5050565b610d3a838383611943565b6000610d968361105c565b8210610def5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016109bb565b600080549080805b83811015610e97576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610e4a57805192505b876001600160a01b0316836001600160a01b031603610e8457868403610e765750935061098b92505050565b83610e808161284a565b9450505b5080610e8f8161284a565b915050610df7565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b60648201526084016109bb565b6007546001600160a01b03163314610f215760405162461bcd60e51b81526004016109bb9061277f565b6007546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610b08573d6000803e3d6000fd5b6007546001600160a01b03163314610f845760405162461bcd60e51b81526004016109bb9061277f565b601280549115156101000261ff0019909216919091179055565b610d3a8383836040518060200160405280600081525061155f565b6000805482106110175760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b60648201526084016109bb565b5090565b600061102682611c8a565b5192915050565b6007546001600160a01b031633146110575760405162461bcd60e51b81526004016109bb9061277f565b600c55565b60006001600160a01b0382166110c85760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016109bb565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b6007546001600160a01b031633146111175760405162461bcd60e51b81526004016109bb9061277f565b6111216000611e34565b565b6007546001600160a01b0316331461114d5760405162461bcd60e51b81526004016109bb9061277f565b600d55565b60125460ff166111745760405162461bcd60e51b81526004016109bb90612863565b601254610100900460ff166111da5760405162461bcd60e51b815260206004820152602660248201527f54686520636f6e7472616374206973206e6f74206f70656e20666f722066726560448201526519481b5a5b9d60d21b60648201526084016109bb565b600f546000546101f4106111f057506003611212565b6105dc6000541161120357506002611212565b6109c460005411611212575060015b600161121d3361105c565b106112645760405162461bcd60e51b81526020600482015260176024820152764d61782066726565206d696e742065786365656465642160481b60448201526064016109bb565b600d548160005461127591906127ca565b1115610acf5760405162461bcd60e51b81526020600482015260176024820152764d61782066726565206d696e742065786365656465642160481b60448201526064016109bb565b601180546112ca90612810565b80601f01602080910402602001604051908101604052809291908181526020018280546112f690612810565b80156113435780601f1061131857610100808354040283529160200191611343565b820191906000526020600020905b81548152906001019060200180831161132657829003601f168201915b505050505081565b6007546001600160a01b031633146113755760405162461bcd60e51b81526004016109bb9061277f565b600b55565b606060028054610b1a90612810565b60125460ff166113ab5760405162461bcd60e51b81526004016109bb90612863565b60006113b56109c9565b90506113c182826128a8565b3410156114065760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016109bb565b60125462010000900460ff1615611425576114228260026128a8565b91505b600c548260005461143691906127ca565b11156114545760405162461bcd60e51b81526004016109bb906127e2565b610d7c33836118cd565b6007546001600160a01b031633146114885760405162461bcd60e51b81526004016109bb9061277f565b8051610d7c9060109060208401906123c0565b336001600160a01b038316036114f35760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c657200000000000060448201526064016109bb565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61156a848484611943565b61157684848484611e86565b6115925760405162461bcd60e51b81526004016109bb906128c7565b50505050565b6007546001600160a01b031633146115c25760405162461bcd60e51b81526004016109bb9061277f565b60128054911515620100000262ff000019909216919091179055565b60606115eb826000541190565b61164f5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109bb565b601254640100000000900460ff1615156000036116f8576011805461167390612810565b80601f016020809104026020016040519081016040528092919081815260200182805461169f90612810565b80156116ec5780601f106116c1576101008083540402835291602001916116ec565b820191906000526020600020905b8154815290600101906020018083116116cf57829003601f168201915b50505050509050919050565b601061170383611f88565b604051602001611714929190612936565b6040516020818303038152906040529050919050565b601080546112ca90612810565b6007546001600160a01b031633146117615760405162461bcd60e51b81526004016109bb9061277f565b600e55565b6007546001600160a01b031633146117905760405162461bcd60e51b81526004016109bb9061277f565b6012805491151563010000000263ff00000019909216919091179055565b6007546001600160a01b031633146117d85760405162461bcd60e51b81526004016109bb9061277f565b601280549115156401000000000264ff0000000019909216919091179055565b6007546001600160a01b031633146118225760405162461bcd60e51b81526004016109bb9061277f565b6012805460ff1916911515919091179055565b6007546001600160a01b0316331461185f5760405162461bcd60e51b81526004016109bb9061277f565b6001600160a01b0381166118c45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109bb565b610b0881611e34565b610d7c828260405180602001604052806000815250612089565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061194e82611c8a565b80519091506000906001600160a01b0316336001600160a01b0316148061198557503361197a84610b9d565b6001600160a01b0316145b806119975750815161199790336108b5565b905080611a015760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016109bb565b846001600160a01b031682600001516001600160a01b031614611a755760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b60648201526084016109bb565b6001600160a01b038416611ad95760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016109bb565b611ae960008484600001516118e7565b6001600160a01b03858116600090815260046020908152604080832080546fffffffffffffffffffffffffffffffff198082166001600160801b03928316600019018316179092558986168086528386208054938416938316600190810190931693909317909255825180840184529182524267ffffffffffffffff9081168386019081528a8752600390955292852091518254945196166001600160e01b031990941693909317600160a01b95909216949094021790925590611bae9085906127ca565b6000818152600360205260409020549091506001600160a01b0316611c4057611bd8816000541190565b15611c405760408051808201825284516001600160a01b03908116825260208087015167ffffffffffffffff9081168285019081526000878152600390935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6040805180820190915260008082526020820152611ca9826000541190565b611d085760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b60648201526084016109bb565b60007f00000000000000000000000000000000000000000000000000000000000000008310611d6957611d5b7f0000000000000000000000000000000000000000000000000000000000000000846129f0565b611d669060016127ca565b90505b825b818110611dd3576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215611dc057949350505050565b5080611dcb81612a07565b915050611d6b565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b60648201526084016109bb565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b15611f7c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611eca903390899088908890600401612a1e565b6020604051808303816000875af1925050508015611f05575060408051601f3d908101601f19168201909252611f0291810190612a5b565b60015b611f62573d808015611f33576040519150601f19603f3d011682016040523d82523d6000602084013e611f38565b606091505b508051600003611f5a5760405162461bcd60e51b81526004016109bb906128c7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611f80565b5060015b949350505050565b606081600003611faf5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611fd95780611fc38161284a565b9150611fd29050600a83612a8e565b9150611fb3565b60008167ffffffffffffffff811115611ff457611ff461254f565b6040519080825280601f01601f19166020018201604052801561201e576020820181803683370190505b5090505b8415611f80576120336001836129f0565b9150612040600a86612aa2565b61204b9060306127ca565b60f81b81838151811061206057612060612ab6565b60200101906001600160f81b031916908160001a905350612082600a86612a8e565b9450612022565b6000546001600160a01b0384166120ec5760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016109bb565b6120f7816000541190565b156121445760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e74656400000060448201526064016109bb565b7f00000000000000000000000000000000000000000000000000000000000000008311156121bf5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b60648201526084016109bb565b6000831161221b5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a207175616e74697479206d7573742062652067726561746560448201526207220360ec1b60648201526084016109bb565b6001600160a01b0384166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190612277908790612acc565b6001600160801b031681526020018583602001516122959190612acc565b6001600160801b039081169091526001600160a01b0380881660008181526004602090815260408083208751978301518716600160801b0297909616969096179094558451808601865291825267ffffffffffffffff4281168386019081528883526003909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b858110156123b55760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46123796000888488611e86565b6123955760405162461bcd60e51b81526004016109bb906128c7565b8161239f8161284a565b92505080806123ad9061284a565b91505061232c565b506000819055611c82565b8280546123cc90612810565b90600052602060002090601f0160209004810192826123ee5760008555612434565b82601f1061240757805160ff1916838001178555612434565b82800160010185558215612434579182015b82811115612434578251825591602001919060010190612419565b506110179291505b80821115611017576000815560010161243c565b6001600160e01b031981168114610b0857600080fd5b60006020828403121561247857600080fd5b813561248381612450565b9392505050565b60006020828403121561249c57600080fd5b5035919050565b60005b838110156124be5781810151838201526020016124a6565b838111156115925750506000910152565b600081518084526124e78160208601602086016124a3565b601f01601f19169290920160200192915050565b60208152600061248360208301846124cf565b80356001600160a01b0381168114610a0757600080fd5b6000806040838503121561253857600080fd5b6125418361250e565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156125805761258061254f565b604051601f8501601f19908116603f011681019082821181831017156125a8576125a861254f565b816040528093508581528686860111156125c157600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156125ed57600080fd5b813567ffffffffffffffff81111561260457600080fd5b8201601f8101841361261557600080fd5b611f8084823560208401612565565b60006020828403121561263657600080fd5b6124838261250e565b60008060006060848603121561265457600080fd5b61265d8461250e565b925061266b6020850161250e565b9150604084013590509250925092565b80358015158114610a0757600080fd5b60006020828403121561269d57600080fd5b6124838261267b565b600080604083850312156126b957600080fd5b6126c28361250e565b91506126d06020840161267b565b90509250929050565b600080600080608085870312156126ef57600080fd5b6126f88561250e565b93506127066020860161250e565b925060408501359150606085013567ffffffffffffffff81111561272957600080fd5b8501601f8101871361273a57600080fd5b61274987823560208401612565565b91505092959194509250565b6000806040838503121561276857600080fd5b6127718361250e565b91506126d06020840161250e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156127dd576127dd6127b4565b500190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b600181811c9082168061282457607f821691505b60208210810361284457634e487b7160e01b600052602260045260246000fd5b50919050565b60006001820161285c5761285c6127b4565b5060010190565b60208082526025908201527f54686520636f6e7472616374206973206e6f74206f70656e20746f206d696e74604082015264207965742160d81b606082015260800190565b60008160001904831182151516156128c2576128c26127b4565b500290565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6000815161292c8185602086016124a3565b9290920192915050565b600080845481600182811c91508083168061295257607f831692505b6020808410820361297157634e487b7160e01b86526022600452602486fd5b8180156129855760018114612996576129c3565b60ff198616895284890196506129c3565b60008b81526020902060005b868110156129bb5781548b8201529085019083016129a2565b505084890196505b5050505050506129e76129d6828661291a565b64173539b7b760d91b815260050190565b95945050505050565b600082821015612a0257612a026127b4565b500390565b600081612a1657612a166127b4565b506000190190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612a51908301846124cf565b9695505050505050565b600060208284031215612a6d57600080fd5b815161248381612450565b634e487b7160e01b600052601260045260246000fd5b600082612a9d57612a9d612a78565b500490565b600082612ab157612ab1612a78565b500690565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b03808316818516808303821115612aee57612aee6127b4565b0194935050505056fea26469706673582212209393a6a0d311d362526b710d9ee8d6e2ddd3d2f146ab3a0f386fbab895631a0564736f6c634300080d003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5841444e3779664862625761653972504e5a6558696e52586733743876366544385673514c41763538777354
Deployed Bytecode
0x6080604052600436106102ff5760003560e01c8063715018a611610190578063bab257f3116100dc578063dc6d118911610095578063e2af30f41161006f578063e2af30f41461087a578063e985e9c51461089a578063eb5999f5146108e3578063f2fde38b1461090457600080fd5b8063dc6d11891461081a578063e04a5d1f1461083a578063e0a808531461085a57600080fd5b8063bab257f31461077f578063bce6d6721461079f578063c1ab22ec146107b9578063c87b56dd146107cf578063d547cfb7146107ef578063d5abeb011461080457600080fd5b806395d89b4111610149578063a0bcfc7f11610123578063a0bcfc7f14610709578063a22cb46514610729578063a591252d14610749578063b88d4fde1461075f57600080fd5b806395d89b41146106c1578063a0712d68146106d6578063a0b7cd85146106e957600080fd5b8063715018a614610631578063742a4c9b146106465780638ab53447146106665780638cc54e7f1461066e5780638da5cb5b1461068357806391b7f5ed146106a157600080fd5b806323b872dd1161024f57806344036c44116102085780636352211e116101e25780636352211e146105bb5780636817c76c146105db5780636f8b44b0146105f157806370a082311461061157600080fd5b806344036c44146105635780634f6ccce714610579578063518302271461059957600080fd5b806323b872dd146104b85780632e1321c3146104d85780632f745c59146104ee5780633ccfd60b1461050e5780633f815b9a1461052357806342842e0e1461054357600080fd5b8063095ea7b3116102bc57806316dad3801161029657806316dad3801461044157806318160ddd1461046057806318cae2691461047557806321d2a904146104a257600080fd5b8063095ea7b3146103eb5780630e04c67b1461040b5780631067fcc71461042157600080fd5b806301ffc9a7146103045780630426c1fa146103395780630561942a1461035b578063059513a61461037e57806306fdde0314610391578063081812fc146103b3575b600080fd5b34801561031057600080fd5b5061032461031f366004612466565b610924565b60405190151581526020015b60405180910390f35b34801561034557600080fd5b5061035961035436600461248a565b610991565b005b34801561036757600080fd5b506103706109c9565b604051908152602001610330565b61035961038c36600461248a565b610a0c565b34801561039d57600080fd5b506103a6610b0b565b60405161033091906124fb565b3480156103bf57600080fd5b506103d36103ce36600461248a565b610b9d565b6040516001600160a01b039091168152602001610330565b3480156103f757600080fd5b50610359610406366004612525565b610c28565b34801561041757600080fd5b5061037060095481565b34801561042d57600080fd5b5061035961043c3660046125db565b610d3f565b34801561044d57600080fd5b5060125461032490610100900460ff1681565b34801561046c57600080fd5b50600054610370565b34801561048157600080fd5b50610370610490366004612624565b60136020526000908152604090205481565b3480156104ae57600080fd5b50610370600e5481565b3480156104c457600080fd5b506103596104d336600461263f565b610d80565b3480156104e457600080fd5b50610370600a5481565b3480156104fa57600080fd5b50610370610509366004612525565b610d8b565b34801561051a57600080fd5b50610359610ef7565b34801561052f57600080fd5b5061035961053e36600461268b565b610f5a565b34801561054f57600080fd5b5061035961055e36600461263f565b610f9e565b34801561056f57600080fd5b5061037060085481565b34801561058557600080fd5b5061037061059436600461248a565b610fb9565b3480156105a557600080fd5b5060125461032490640100000000900460ff1681565b3480156105c757600080fd5b506103d36105d636600461248a565b61101b565b3480156105e757600080fd5b50610370600b5481565b3480156105fd57600080fd5b5061035961060c36600461248a565b61102d565b34801561061d57600080fd5b5061037061062c366004612624565b61105c565b34801561063d57600080fd5b506103596110ed565b34801561065257600080fd5b5061035961066136600461248a565b611123565b610359611152565b34801561067a57600080fd5b506103a66112bd565b34801561068f57600080fd5b506007546001600160a01b03166103d3565b3480156106ad57600080fd5b506103596106bc36600461248a565b61134b565b3480156106cd57600080fd5b506103a661137a565b6103596106e436600461248a565b611389565b3480156106f557600080fd5b506012546103249062010000900460ff1681565b34801561071557600080fd5b506103596107243660046125db565b61145e565b34801561073557600080fd5b506103596107443660046126a6565b61149b565b34801561075557600080fd5b50610370600d5481565b34801561076b57600080fd5b5061035961077a3660046126d9565b61155f565b34801561078b57600080fd5b5061035961079a36600461268b565b611598565b3480156107ab57600080fd5b506012546103249060ff1681565b3480156107c557600080fd5b50610370600f5481565b3480156107db57600080fd5b506103a66107ea36600461248a565b6115de565b3480156107fb57600080fd5b506103a661172a565b34801561081057600080fd5b50610370600c5481565b34801561082657600080fd5b5061035961083536600461248a565b611737565b34801561084657600080fd5b5061035961085536600461268b565b611766565b34801561086657600080fd5b5061035961087536600461268b565b6117ae565b34801561088657600080fd5b5061035961089536600461268b565b6117f8565b3480156108a657600080fd5b506103246108b5366004612755565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156108ef57600080fd5b50601254610324906301000000900460ff1681565b34801561091057600080fd5b5061035961091f366004612624565b611835565b60006001600160e01b031982166380ac58cd60e01b148061095557506001600160e01b03198216635b5e139f60e01b145b8061097057506001600160e01b0319821663780e9d6360e01b145b8061098b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6007546001600160a01b031633146109c45760405162461bcd60e51b81526004016109bb9061277f565b60405180910390fd5b600f55565b600080600b5490506107d0600054116109e457505060085490565b611388600054116109f757505060095490565b611f4060005411610a075750600a545b919050565b6012546301000000900460ff16610a595760405162461bcd60e51b8152602060048201526011602482015270139bc81b5bdc99481d19585b481b5a5b9d607a1b60448201526064016109bb565b6064811115610aa05760405162461bcd60e51b81526020600482015260136024820152720416d6f756e742065786365656465642031303606c1b60448201526064016109bb565b600e5481600054610ab191906127ca565b1115610acf5760405162461bcd60e51b81526004016109bb906127e2565b600c5481600054610ae091906127ca565b1115610afe5760405162461bcd60e51b81526004016109bb906127e2565b610b0833826118cd565b50565b606060018054610b1a90612810565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4690612810565b8015610b935780601f10610b6857610100808354040283529160200191610b93565b820191906000526020600020905b815481529060010190602001808311610b7657829003601f168201915b5050505050905090565b6000610baa826000541190565b610c0c5760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084016109bb565b506000908152600560205260409020546001600160a01b031690565b6000610c338261101b565b9050806001600160a01b0316836001600160a01b031603610ca15760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b60648201526084016109bb565b336001600160a01b0382161480610cbd5750610cbd81336108b5565b610d2f5760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000000060648201526084016109bb565b610d3a8383836118e7565b505050565b6007546001600160a01b03163314610d695760405162461bcd60e51b81526004016109bb9061277f565b8051610d7c9060119060208401906123c0565b5050565b610d3a838383611943565b6000610d968361105c565b8210610def5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016109bb565b600080549080805b83811015610e97576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610e4a57805192505b876001600160a01b0316836001600160a01b031603610e8457868403610e765750935061098b92505050565b83610e808161284a565b9450505b5080610e8f8161284a565b915050610df7565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b60648201526084016109bb565b6007546001600160a01b03163314610f215760405162461bcd60e51b81526004016109bb9061277f565b6007546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610b08573d6000803e3d6000fd5b6007546001600160a01b03163314610f845760405162461bcd60e51b81526004016109bb9061277f565b601280549115156101000261ff0019909216919091179055565b610d3a8383836040518060200160405280600081525061155f565b6000805482106110175760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b60648201526084016109bb565b5090565b600061102682611c8a565b5192915050565b6007546001600160a01b031633146110575760405162461bcd60e51b81526004016109bb9061277f565b600c55565b60006001600160a01b0382166110c85760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016109bb565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b6007546001600160a01b031633146111175760405162461bcd60e51b81526004016109bb9061277f565b6111216000611e34565b565b6007546001600160a01b0316331461114d5760405162461bcd60e51b81526004016109bb9061277f565b600d55565b60125460ff166111745760405162461bcd60e51b81526004016109bb90612863565b601254610100900460ff166111da5760405162461bcd60e51b815260206004820152602660248201527f54686520636f6e7472616374206973206e6f74206f70656e20666f722066726560448201526519481b5a5b9d60d21b60648201526084016109bb565b600f546000546101f4106111f057506003611212565b6105dc6000541161120357506002611212565b6109c460005411611212575060015b600161121d3361105c565b106112645760405162461bcd60e51b81526020600482015260176024820152764d61782066726565206d696e742065786365656465642160481b60448201526064016109bb565b600d548160005461127591906127ca565b1115610acf5760405162461bcd60e51b81526020600482015260176024820152764d61782066726565206d696e742065786365656465642160481b60448201526064016109bb565b601180546112ca90612810565b80601f01602080910402602001604051908101604052809291908181526020018280546112f690612810565b80156113435780601f1061131857610100808354040283529160200191611343565b820191906000526020600020905b81548152906001019060200180831161132657829003601f168201915b505050505081565b6007546001600160a01b031633146113755760405162461bcd60e51b81526004016109bb9061277f565b600b55565b606060028054610b1a90612810565b60125460ff166113ab5760405162461bcd60e51b81526004016109bb90612863565b60006113b56109c9565b90506113c182826128a8565b3410156114065760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016109bb565b60125462010000900460ff1615611425576114228260026128a8565b91505b600c548260005461143691906127ca565b11156114545760405162461bcd60e51b81526004016109bb906127e2565b610d7c33836118cd565b6007546001600160a01b031633146114885760405162461bcd60e51b81526004016109bb9061277f565b8051610d7c9060109060208401906123c0565b336001600160a01b038316036114f35760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c657200000000000060448201526064016109bb565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61156a848484611943565b61157684848484611e86565b6115925760405162461bcd60e51b81526004016109bb906128c7565b50505050565b6007546001600160a01b031633146115c25760405162461bcd60e51b81526004016109bb9061277f565b60128054911515620100000262ff000019909216919091179055565b60606115eb826000541190565b61164f5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109bb565b601254640100000000900460ff1615156000036116f8576011805461167390612810565b80601f016020809104026020016040519081016040528092919081815260200182805461169f90612810565b80156116ec5780601f106116c1576101008083540402835291602001916116ec565b820191906000526020600020905b8154815290600101906020018083116116cf57829003601f168201915b50505050509050919050565b601061170383611f88565b604051602001611714929190612936565b6040516020818303038152906040529050919050565b601080546112ca90612810565b6007546001600160a01b031633146117615760405162461bcd60e51b81526004016109bb9061277f565b600e55565b6007546001600160a01b031633146117905760405162461bcd60e51b81526004016109bb9061277f565b6012805491151563010000000263ff00000019909216919091179055565b6007546001600160a01b031633146117d85760405162461bcd60e51b81526004016109bb9061277f565b601280549115156401000000000264ff0000000019909216919091179055565b6007546001600160a01b031633146118225760405162461bcd60e51b81526004016109bb9061277f565b6012805460ff1916911515919091179055565b6007546001600160a01b0316331461185f5760405162461bcd60e51b81526004016109bb9061277f565b6001600160a01b0381166118c45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109bb565b610b0881611e34565b610d7c828260405180602001604052806000815250612089565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061194e82611c8a565b80519091506000906001600160a01b0316336001600160a01b0316148061198557503361197a84610b9d565b6001600160a01b0316145b806119975750815161199790336108b5565b905080611a015760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016109bb565b846001600160a01b031682600001516001600160a01b031614611a755760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b60648201526084016109bb565b6001600160a01b038416611ad95760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016109bb565b611ae960008484600001516118e7565b6001600160a01b03858116600090815260046020908152604080832080546fffffffffffffffffffffffffffffffff198082166001600160801b03928316600019018316179092558986168086528386208054938416938316600190810190931693909317909255825180840184529182524267ffffffffffffffff9081168386019081528a8752600390955292852091518254945196166001600160e01b031990941693909317600160a01b95909216949094021790925590611bae9085906127ca565b6000818152600360205260409020549091506001600160a01b0316611c4057611bd8816000541190565b15611c405760408051808201825284516001600160a01b03908116825260208087015167ffffffffffffffff9081168285019081526000878152600390935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6040805180820190915260008082526020820152611ca9826000541190565b611d085760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b60648201526084016109bb565b60007f00000000000000000000000000000000000000000000000000000000000000648310611d6957611d5b7f0000000000000000000000000000000000000000000000000000000000000064846129f0565b611d669060016127ca565b90505b825b818110611dd3576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215611dc057949350505050565b5080611dcb81612a07565b915050611d6b565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b60648201526084016109bb565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b15611f7c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611eca903390899088908890600401612a1e565b6020604051808303816000875af1925050508015611f05575060408051601f3d908101601f19168201909252611f0291810190612a5b565b60015b611f62573d808015611f33576040519150601f19603f3d011682016040523d82523d6000602084013e611f38565b606091505b508051600003611f5a5760405162461bcd60e51b81526004016109bb906128c7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611f80565b5060015b949350505050565b606081600003611faf5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611fd95780611fc38161284a565b9150611fd29050600a83612a8e565b9150611fb3565b60008167ffffffffffffffff811115611ff457611ff461254f565b6040519080825280601f01601f19166020018201604052801561201e576020820181803683370190505b5090505b8415611f80576120336001836129f0565b9150612040600a86612aa2565b61204b9060306127ca565b60f81b81838151811061206057612060612ab6565b60200101906001600160f81b031916908160001a905350612082600a86612a8e565b9450612022565b6000546001600160a01b0384166120ec5760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016109bb565b6120f7816000541190565b156121445760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e74656400000060448201526064016109bb565b7f00000000000000000000000000000000000000000000000000000000000000648311156121bf5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b60648201526084016109bb565b6000831161221b5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a207175616e74697479206d7573742062652067726561746560448201526207220360ec1b60648201526084016109bb565b6001600160a01b0384166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190612277908790612acc565b6001600160801b031681526020018583602001516122959190612acc565b6001600160801b039081169091526001600160a01b0380881660008181526004602090815260408083208751978301518716600160801b0297909616969096179094558451808601865291825267ffffffffffffffff4281168386019081528883526003909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b858110156123b55760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46123796000888488611e86565b6123955760405162461bcd60e51b81526004016109bb906128c7565b8161239f8161284a565b92505080806123ad9061284a565b91505061232c565b506000819055611c82565b8280546123cc90612810565b90600052602060002090601f0160209004810192826123ee5760008555612434565b82601f1061240757805160ff1916838001178555612434565b82800160010185558215612434579182015b82811115612434578251825591602001919060010190612419565b506110179291505b80821115611017576000815560010161243c565b6001600160e01b031981168114610b0857600080fd5b60006020828403121561247857600080fd5b813561248381612450565b9392505050565b60006020828403121561249c57600080fd5b5035919050565b60005b838110156124be5781810151838201526020016124a6565b838111156115925750506000910152565b600081518084526124e78160208601602086016124a3565b601f01601f19169290920160200192915050565b60208152600061248360208301846124cf565b80356001600160a01b0381168114610a0757600080fd5b6000806040838503121561253857600080fd5b6125418361250e565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156125805761258061254f565b604051601f8501601f19908116603f011681019082821181831017156125a8576125a861254f565b816040528093508581528686860111156125c157600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156125ed57600080fd5b813567ffffffffffffffff81111561260457600080fd5b8201601f8101841361261557600080fd5b611f8084823560208401612565565b60006020828403121561263657600080fd5b6124838261250e565b60008060006060848603121561265457600080fd5b61265d8461250e565b925061266b6020850161250e565b9150604084013590509250925092565b80358015158114610a0757600080fd5b60006020828403121561269d57600080fd5b6124838261267b565b600080604083850312156126b957600080fd5b6126c28361250e565b91506126d06020840161267b565b90509250929050565b600080600080608085870312156126ef57600080fd5b6126f88561250e565b93506127066020860161250e565b925060408501359150606085013567ffffffffffffffff81111561272957600080fd5b8501601f8101871361273a57600080fd5b61274987823560208401612565565b91505092959194509250565b6000806040838503121561276857600080fd5b6127718361250e565b91506126d06020840161250e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156127dd576127dd6127b4565b500190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b600181811c9082168061282457607f821691505b60208210810361284457634e487b7160e01b600052602260045260246000fd5b50919050565b60006001820161285c5761285c6127b4565b5060010190565b60208082526025908201527f54686520636f6e7472616374206973206e6f74206f70656e20746f206d696e74604082015264207965742160d81b606082015260800190565b60008160001904831182151516156128c2576128c26127b4565b500290565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6000815161292c8185602086016124a3565b9290920192915050565b600080845481600182811c91508083168061295257607f831692505b6020808410820361297157634e487b7160e01b86526022600452602486fd5b8180156129855760018114612996576129c3565b60ff198616895284890196506129c3565b60008b81526020902060005b868110156129bb5781548b8201529085019083016129a2565b505084890196505b5050505050506129e76129d6828661291a565b64173539b7b760d91b815260050190565b95945050505050565b600082821015612a0257612a026127b4565b500390565b600081612a1657612a166127b4565b506000190190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612a51908301846124cf565b9695505050505050565b600060208284031215612a6d57600080fd5b815161248381612450565b634e487b7160e01b600052601260045260246000fd5b600082612a9d57612a9d612a78565b500490565b600082612ab157612ab1612a78565b500690565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b03808316818516808303821115612aee57612aee6127b4565b0194935050505056fea26469706673582212209393a6a0d311d362526b710d9ee8d6e2ddd3d2f146ab3a0f386fbab895631a0564736f6c634300080d0033
Deployed Bytecode Sourcemap
39389:4478:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27113:372;;;;;;;;;;-1:-1:-1;27113:372:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;27113:372:0;;;;;;;;43026:126;;;;;;;;;;-1:-1:-1;43026:126:0;;;;;:::i;:::-;;:::i;:::-;;41803:402;;;;;;;;;;;;;:::i;:::-;;;923:25:1;;;911:2;896:18;41803:402:0;777:177:1;41429:368:0;;;;;;:::i;:::-;;:::i;28918:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30479:214::-;;;;;;;;;;-1:-1:-1;30479:214:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1896:32:1;;;1878:51;;1866:2;1851:18;30479:214:0;1732:203:1;30000:413:0;;;;;;;;;;-1:-1:-1;30000:413:0;;;;;:::i;:::-;;:::i;39518:43::-;;;;;;;;;;;;;;;;43338:90;;;;;;;;;;-1:-1:-1;43338:90:0;;;;;:::i;:::-;;:::i;39996:29::-;;;;;;;;;;-1:-1:-1;39996:29:0;;;;;;;;;;;25554:100;;;;;;;;;;-1:-1:-1;25607:7:0;25634:12;25554:100;;40134:55;;;;;;;;;;-1:-1:-1;40134:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;39733:34;;;;;;;;;;;;;;;;31355:162;;;;;;;;;;-1:-1:-1;31355:162:0;;;;;:::i;:::-;;:::i;39566:43::-;;;;;;;;;;;;;;;;26218:823;;;;;;;;;;-1:-1:-1;26218:823:0;;;;;:::i;:::-;;:::i;42600:100::-;;;;;;;;;;;;;:::i;43606:83::-;;;;;;;;;;-1:-1:-1;43606:83:0;;;;;:::i;:::-;;:::i;31588:177::-;;;;;;;;;;-1:-1:-1;31588:177:0;;;;;:::i;:::-;;:::i;39470:43::-;;;;;;;;;;;;;;;;25731:187;;;;;;;;;;-1:-1:-1;25731:187:0;;;;;:::i;:::-;;:::i;40099:28::-;;;;;;;;;;-1:-1:-1;40099:28:0;;;;;;;;;;;28727:124;;;;;;;;;;-1:-1:-1;28727:124:0;;;;;:::i;:::-;;:::i;39614:38::-;;;;;;;;;;;;;;;;42814:94;;;;;;;;;;-1:-1:-1;42814:94:0;;;;;:::i;:::-;;:::i;27549:221::-;;;;;;;;;;-1:-1:-1;27549:221:0;;;;;:::i;:::-;;:::i;4735:103::-;;;;;;;;;;;;;:::i;42706:102::-;;;;;;;;;;-1:-1:-1;42706:102:0;;;;;:::i;:::-;;:::i;40266:712::-;;;:::i;39849:108::-;;;;;;;;;;;;;:::i;4084:87::-;;;;;;;;;;-1:-1:-1;4157:6:0;;-1:-1:-1;;;;;4157:6:0;4084:87;;43780:82;;;;;;;;;;-1:-1:-1;43780:82:0;;;;;:::i;:::-;;:::i;29087:104::-;;;;;;;;;;;;;:::i;40984:437::-;;;;;;:::i;:::-;;:::i;40030:28::-;;;;;;;;;;-1:-1:-1;40030:28:0;;;;;;;;;;;43158:91;;;;;;;;;;-1:-1:-1;43158:91:0;;;;;:::i;:::-;;:::i;30765:288::-;;;;;;;;;;-1:-1:-1;30765:288:0;;;;;:::i;:::-;;:::i;39695:33::-;;;;;;;;;;;;;;;;31836:355;;;;;;;;;;-1:-1:-1;31836:355:0;;;;;:::i;:::-;;:::i;43432:81::-;;;;;;;;;;-1:-1:-1;43432:81:0;;;;;:::i;:::-;;:::i;39964:27::-;;;;;;;;;;-1:-1:-1;39964:27:0;;;;;;;;39772:36;;;;;;;;;;;;;;;;42211:383;;;;;;;;;;-1:-1:-1;42211:383:0;;;;;:::i;:::-;;:::i;39813:31::-;;;;;;;;;;;;;:::i;39659:::-;;;;;;;;;;;;;;;;42914:106;;;;;;;;;;-1:-1:-1;42914:106:0;;;;;:::i;:::-;;:::i;43517:85::-;;;;;;;;;;-1:-1:-1;43517:85:0;;;;;:::i;:::-;;:::i;43253:81::-;;;;;;;;;;-1:-1:-1;43253:81:0;;;;;:::i;:::-;;:::i;43693:::-;;;;;;;;;;-1:-1:-1;43693:81:0;;;;;:::i;:::-;;:::i;31124:164::-;;;;;;;;;;-1:-1:-1;31124:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;31245:25:0;;;31221:4;31245:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;31124:164;40063:29;;;;;;;;;;-1:-1:-1;40063:29:0;;;;;;;;;;;4993:201;;;;;;;;;;-1:-1:-1;4993:201:0;;;;;:::i;:::-;;:::i;27113:372::-;27215:4;-1:-1:-1;;;;;;27252:40:0;;-1:-1:-1;;;27252:40:0;;:105;;-1:-1:-1;;;;;;;27309:48:0;;-1:-1:-1;;;27309:48:0;27252:105;:172;;;-1:-1:-1;;;;;;;27374:50:0;;-1:-1:-1;;;27374:50:0;27252:172;:225;;;-1:-1:-1;;;;;;;;;;16625:40:0;;;27441:36;27232:245;27113:372;-1:-1:-1;;27113:372:0:o;43026:126::-;4157:6;;-1:-1:-1;;;;;4157:6:0;2888:10;4304:23;4296:68;;;;-1:-1:-1;;;4296:68:0;;;;;;;:::i;:::-;;;;;;;;;43108:17:::1;:38:::0;43026:126::o;41803:402::-;41881:7;41901:18;41922:9;;41901:30;;41959:4;41943:12;;:20;41940:234;;-1:-1:-1;;41988:14:0;;;41803:402::o;41940:234::-;42040:4;42024:12;;:20;42021:153;;-1:-1:-1;;42070:14:0;;;41803:402::o;42021:153::-;42122:4;42106:12;;:20;42103:71;;-1:-1:-1;42152:14:0;;42103:71;42189:10;41803:402;-1:-1:-1;41803:402:0:o;41429:368::-;41500:10;;;;;;;41492:40;;;;-1:-1:-1;;;41492:40:0;;6235:2:1;41492:40:0;;;6217:21:1;6274:2;6254:18;;;6247:30;-1:-1:-1;;;6293:18:1;;;6286:47;6350:18;;41492:40:0;6033:341:1;41492:40:0;41562:3;41547:11;:18;;41539:50;;;;-1:-1:-1;;;41539:50:0;;6581:2:1;41539:50:0;;;6563:21:1;6620:2;6600:18;;;6593:30;-1:-1:-1;;;6639:18:1;;;6632:49;6698:18;;41539:50:0;6379:343:1;41539:50:0;41634:12;;41619:11;41604:12;;:26;;;;:::i;:::-;:42;;41596:75;;;;-1:-1:-1;;;41596:75:0;;;;;;;:::i;:::-;41716:9;;41701:11;41686:12;;:26;;;;:::i;:::-;:39;;41678:72;;;;-1:-1:-1;;;41678:72:0;;;;;;;:::i;:::-;41757:34;41767:10;41779:11;41757:9;:34::i;:::-;41429:368;:::o;28918:100::-;28972:13;29005:5;28998:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28918:100;:::o;30479:214::-;30547:7;30575:16;30583:7;32503:4;32537:12;-1:-1:-1;32527:22:0;32446:111;30575:16;30567:74;;;;-1:-1:-1;;;30567:74:0;;7928:2:1;30567:74:0;;;7910:21:1;7967:2;7947:18;;;7940:30;8006:34;7986:18;;;7979:62;-1:-1:-1;;;8057:18:1;;;8050:43;8110:19;;30567:74:0;7726:409:1;30567:74:0;-1:-1:-1;30661:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;30661:24:0;;30479:214::o;30000:413::-;30073:13;30089:24;30105:7;30089:15;:24::i;:::-;30073:40;;30138:5;-1:-1:-1;;;;;30132:11:0;:2;-1:-1:-1;;;;;30132:11:0;;30124:58;;;;-1:-1:-1;;;30124:58:0;;8342:2:1;30124:58:0;;;8324:21:1;8381:2;8361:18;;;8354:30;8420:34;8400:18;;;8393:62;-1:-1:-1;;;8471:18:1;;;8464:32;8513:19;;30124:58:0;8140:398:1;30124:58:0;2888:10;-1:-1:-1;;;;;30217:21:0;;;;:62;;-1:-1:-1;30242:37:0;30259:5;2888:10;31124:164;:::i;30242:37::-;30195:169;;;;-1:-1:-1;;;30195:169:0;;8745:2:1;30195:169:0;;;8727:21:1;8784:2;8764:18;;;8757:30;8823:34;8803:18;;;8796:62;8894:27;8874:18;;;8867:55;8939:19;;30195:169:0;8543:421:1;30195:169:0;30377:28;30386:2;30390:7;30399:5;30377:8;:28::i;:::-;30062:351;30000:413;;:::o;43338:90::-;4157:6;;-1:-1:-1;;;;;4157:6:0;2888:10;4304:23;4296:68;;;;-1:-1:-1;;;4296:68:0;;;;;;;:::i;:::-;43406:16;;::::1;::::0;:9:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;;43338:90:::0;:::o;31355:162::-;31481:28;31491:4;31497:2;31501:7;31481:9;:28::i;26218:823::-;26307:7;26343:16;26353:5;26343:9;:16::i;:::-;26335:5;:24;26327:71;;;;-1:-1:-1;;;26327:71:0;;9171:2:1;26327:71:0;;;9153:21:1;9210:2;9190:18;;;9183:30;9249:34;9229:18;;;9222:62;-1:-1:-1;;;9300:18:1;;;9293:32;9342:19;;26327:71:0;8969:398:1;26327:71:0;26409:22;25634:12;;;26409:22;;26541:426;26565:14;26561:1;:18;26541:426;;;26601:31;26635:14;;;:11;:14;;;;;;;;;26601:48;;;;;;;;;-1:-1:-1;;;;;26601:48:0;;;;;-1:-1:-1;;;26601:48:0;;;;;;;;;;;;26668:28;26664:103;;26737:14;;;-1:-1:-1;26664:103:0;26806:5;-1:-1:-1;;;;;26785:26:0;:17;-1:-1:-1;;;;;26785:26:0;;26781:175;;26851:5;26836:11;:20;26832:77;;-1:-1:-1;26888:1:0;-1:-1:-1;26881:8:0;;-1:-1:-1;;;26881:8:0;26832:77;26927:13;;;;:::i;:::-;;;;26781:175;-1:-1:-1;26581:3:0;;;;:::i;:::-;;;;26541:426;;;-1:-1:-1;26977:56:0;;-1:-1:-1;;;26977:56:0;;9714:2:1;26977:56:0;;;9696:21:1;9753:2;9733:18;;;9726:30;9792:34;9772:18;;;9765:62;-1:-1:-1;;;9843:18:1;;;9836:44;9897:19;;26977:56:0;9512:410:1;42600:100:0;4157:6;;-1:-1:-1;;;;;4157:6:0;2888:10;4304:23;4296:68;;;;-1:-1:-1;;;4296:68:0;;;;;;;:::i;:::-;4157:6;;42646:48:::1;::::0;-1:-1:-1;;;;;4157:6:0;;;;42672:21:::1;42646:48:::0;::::1;;;::::0;::::1;::::0;;;42672:21;4157:6;42646:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;43606:83:::0;4157:6;;-1:-1:-1;;;;;4157:6:0;2888:10;4304:23;4296:68;;;;-1:-1:-1;;;4296:68:0;;;;;;;:::i;:::-;43664:10:::1;:19:::0;;;::::1;;;;-1:-1:-1::0;;43664:19:0;;::::1;::::0;;;::::1;::::0;;43606:83::o;31588:177::-;31718:39;31735:4;31741:2;31745:7;31718:39;;;;;;;;;;;;:16;:39::i;25731:187::-;25798:7;25634:12;;25826:5;:21;25818:69;;;;-1:-1:-1;;;25818:69:0;;10129:2:1;25818:69:0;;;10111:21:1;10168:2;10148:18;;;10141:30;10207:34;10187:18;;;10180:62;-1:-1:-1;;;10258:18:1;;;10251:33;10301:19;;25818:69:0;9927:399:1;25818:69:0;-1:-1:-1;25905:5:0;25731:187::o;28727:124::-;28791:7;28818:20;28830:7;28818:11;:20::i;:::-;:25;;28727:124;-1:-1:-1;;28727:124:0:o;42814:94::-;4157:6;;-1:-1:-1;;;;;4157:6:0;2888:10;4304:23;4296:68;;;;-1:-1:-1;;;4296:68:0;;;;;;;:::i;:::-;42880:9:::1;:22:::0;42814:94::o;27549:221::-;27613:7;-1:-1:-1;;;;;27641:19:0;;27633:75;;;;-1:-1:-1;;;27633:75:0;;10533:2:1;27633:75:0;;;10515:21:1;10572:2;10552:18;;;10545:30;10611:34;10591:18;;;10584:62;-1:-1:-1;;;10662:18:1;;;10655:41;10713:19;;27633:75:0;10331:407:1;27633:75:0;-1:-1:-1;;;;;;27734:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;27734:27:0;;27549:221::o;4735:103::-;4157:6;;-1:-1:-1;;;;;4157:6:0;2888:10;4304:23;4296:68;;;;-1:-1:-1;;;4296:68:0;;;;;;;:::i;:::-;4800:30:::1;4827:1;4800:18;:30::i;:::-;4735:103::o:0;42706:102::-;4157:6;;-1:-1:-1;;;;;4157:6:0;2888:10;4304:23;4296:68;;;;-1:-1:-1;;;4296:68:0;;;;;;;:::i;:::-;42776:11:::1;:26:::0;42706:102::o;40266:712::-;40318:8;;;;40310:58;;;;-1:-1:-1;;;40310:58:0;;;;;;;:::i;:::-;40383:10;;;;;;;40375:61;;;;-1:-1:-1;;;40375:61:0;;11351:2:1;40375:61:0;;;11333:21:1;11390:2;11370:18;;;11363:30;11429:34;11409:18;;;11402:62;-1:-1:-1;;;11480:18:1;;;11473:36;11526:19;;40375:61:0;11149:402:1;40375:61:0;40467:17;;40445:19;40494:12;40510:3;-1:-1:-1;40491:200:0;;-1:-1:-1;40540:1:0;40491:200;;;40580:4;40564:12;;:20;40560:131;;-1:-1:-1;40611:1:0;40560:131;;;40651:4;40635:12;;:20;40631:60;;-1:-1:-1;40682:1:0;40631:60;40733:1;40707:23;2888:10;27549:221;:::i;40707:23::-;:27;40699:63;;;;-1:-1:-1;;;40699:63:0;;11758:2:1;40699:63:0;;;11740:21:1;11797:2;11777:18;;;11770:30;-1:-1:-1;;;11816:18:1;;;11809:53;11879:18;;40699:63:0;11556:347:1;40699:63:0;40807:11;;40792;40777:12;;:26;;;;:::i;:::-;:41;;40769:77;;;;-1:-1:-1;;;40769:77:0;;11758:2:1;40769:77:0;;;11740:21:1;11797:2;11777:18;;;11770:30;-1:-1:-1;;;11816:18:1;;;11809:53;11879:18;;40769:77:0;11556:347:1;39849:108:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43780:82::-;4157:6;;-1:-1:-1;;;;;4157:6:0;2888:10;4304:23;4296:68;;;;-1:-1:-1;;;4296:68:0;;;;;;;:::i;:::-;43838:9:::1;:18:::0;43780:82::o;29087:104::-;29143:13;29176:7;29169:14;;;;;:::i;40984:437::-;41051:8;;;;41043:58;;;;-1:-1:-1;;;41043:58:0;;;;;;;:::i;:::-;41108:18;41129;:16;:18::i;:::-;41108:39;-1:-1:-1;41177:24:0;41190:11;41108:39;41177:24;:::i;:::-;41164:9;:37;;41156:69;;;;-1:-1:-1;;;41156:69:0;;12283:2:1;41156:69:0;;;12265:21:1;12322:2;12302:18;;;12295:30;-1:-1:-1;;;12341:18:1;;;12334:49;12400:18;;41156:69:0;12081:343:1;41156:69:0;41237:8;;;;;;;41234:60;;;41271:15;:11;41285:1;41271:15;:::i;:::-;41257:29;;41234:60;41338:9;;41323:11;41308:12;;:26;;;;:::i;:::-;:39;;41300:72;;;;-1:-1:-1;;;41300:72:0;;;;;;;:::i;:::-;41381:34;41391:10;41403:11;41381:9;:34::i;43158:91::-;4157:6;;-1:-1:-1;;;;;4157:6:0;2888:10;4304:23;4296:68;;;;-1:-1:-1;;;4296:68:0;;;;;;;:::i;:::-;43224:19;;::::1;::::0;:12:::1;::::0;:19:::1;::::0;::::1;::::0;::::1;:::i;30765:288::-:0;2888:10;-1:-1:-1;;;;;30860:24:0;;;30852:63;;;;-1:-1:-1;;;30852:63:0;;12631:2:1;30852:63:0;;;12613:21:1;12670:2;12650:18;;;12643:30;12709:28;12689:18;;;12682:56;12755:18;;30852:63:0;12429:350:1;30852:63:0;2888:10;30928:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;30928:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;30928:53:0;;;;;;;;;;30997:48;;540:41:1;;;30928:42:0;;2888:10;30997:48;;513:18:1;30997:48:0;;;;;;;30765:288;;:::o;31836:355::-;31995:28;32005:4;32011:2;32015:7;31995:9;:28::i;:::-;32056:48;32079:4;32085:2;32089:7;32098:5;32056:22;:48::i;:::-;32034:149;;;;-1:-1:-1;;;32034:149:0;;;;;;;:::i;:::-;31836:355;;;;:::o;43432:81::-;4157:6;;-1:-1:-1;;;;;4157:6:0;2888:10;4304:23;4296:68;;;;-1:-1:-1;;;4296:68:0;;;;;;;:::i;:::-;43490:8:::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;43490:17:0;;::::1;::::0;;;::::1;::::0;;43432:81::o;42211:383::-;42310:13;42351:17;42359:8;32503:4;32537:12;-1:-1:-1;32527:22:0;32446:111;42351:17;42335:98;;;;-1:-1:-1;;;42335:98:0;;13406:2:1;42335:98:0;;;13388:21:1;13445:2;13425:18;;;13418:30;13484:34;13464:18;;;13457:62;-1:-1:-1;;;13535:18:1;;;13528:45;13590:19;;42335:98:0;13204:411:1;42335:98:0;42446:8;;;;;;;:17;;42458:5;42446:17;42442:56;;42481:9;42474:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42211:383;;;:::o;42442:56::-;42537:12;42551:26;42568:8;42551:16;:26::i;:::-;42520:67;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42506:82;;42211:383;;;:::o;39813:31::-;;;;;;;:::i;42914:106::-;4157:6;;-1:-1:-1;;;;;4157:6:0;2888:10;4304:23;4296:68;;;;-1:-1:-1;;;4296:68:0;;;;;;;:::i;:::-;42986:12:::1;:28:::0;42914:106::o;43517:85::-;4157:6;;-1:-1:-1;;;;;4157:6:0;2888:10;4304:23;4296:68;;;;-1:-1:-1;;;4296:68:0;;;;;;;:::i;:::-;43577:10:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;43577:19:0;;::::1;::::0;;;::::1;::::0;;43517:85::o;43253:81::-;4157:6;;-1:-1:-1;;;;;4157:6:0;2888:10;4304:23;4296:68;;;;-1:-1:-1;;;4296:68:0;;;;;;;:::i;:::-;43311:8:::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;43311:17:0;;::::1;::::0;;;::::1;::::0;;43253:81::o;43693:::-;4157:6;;-1:-1:-1;;;;;4157:6:0;2888:10;4304:23;4296:68;;;;-1:-1:-1;;;4296:68:0;;;;;;;:::i;:::-;43751:8:::1;:17:::0;;-1:-1:-1;;43751:17:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43693:81::o;4993:201::-;4157:6;;-1:-1:-1;;;;;4157:6:0;2888:10;4304:23;4296:68;;;;-1:-1:-1;;;4296:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5082:22:0;::::1;5074:73;;;::::0;-1:-1:-1;;;5074:73:0;;15562:2:1;5074:73:0::1;::::0;::::1;15544:21:1::0;15601:2;15581:18;;;15574:30;15640:34;15620:18;;;15613:62;-1:-1:-1;;;15691:18:1;;;15684:36;15737:19;;5074:73:0::1;15360:402:1::0;5074:73:0::1;5158:28;5177:8;5158:18;:28::i;32565:104::-:0;32634:27;32644:2;32648:8;32634:27;;;;;;;;;;;;:9;:27::i;36572:196::-;36687:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;36687:29:0;-1:-1:-1;;;;;36687:29:0;;;;;;;;;36732:28;;36687:24;;36732:28;;;;;;;36572:196;;;:::o;34671:1783::-;34786:35;34824:20;34836:7;34824:11;:20::i;:::-;34899:18;;34786:58;;-1:-1:-1;34857:22:0;;-1:-1:-1;;;;;34883:34:0;2888:10;-1:-1:-1;;;;;34883:34:0;;:87;;;-1:-1:-1;2888:10:0;34934:20;34946:7;34934:11;:20::i;:::-;-1:-1:-1;;;;;34934:36:0;;34883:87;:154;;;-1:-1:-1;35004:18:0;;34987:50;;2888:10;31124:164;:::i;34987:50::-;34857:181;;35059:17;35051:80;;;;-1:-1:-1;;;35051:80:0;;15969:2:1;35051:80:0;;;15951:21:1;16008:2;15988:18;;;15981:30;16047:34;16027:18;;;16020:62;-1:-1:-1;;;16098:18:1;;;16091:48;16156:19;;35051:80:0;15767:414:1;35051:80:0;35174:4;-1:-1:-1;;;;;35152:26:0;:13;:18;;;-1:-1:-1;;;;;35152:26:0;;35144:77;;;;-1:-1:-1;;;35144:77:0;;16388:2:1;35144:77:0;;;16370:21:1;16427:2;16407:18;;;16400:30;16466:34;16446:18;;;16439:62;-1:-1:-1;;;16517:18:1;;;16510:36;16563:19;;35144:77:0;16186:402:1;35144:77:0;-1:-1:-1;;;;;35240:16:0;;35232:66;;;;-1:-1:-1;;;35232:66:0;;16795:2:1;35232:66:0;;;16777:21:1;16834:2;16814:18;;;16807:30;16873:34;16853:18;;;16846:62;-1:-1:-1;;;16924:18:1;;;16917:35;16969:19;;35232:66:0;16593:401:1;35232:66:0;35419:49;35436:1;35440:7;35449:13;:18;;;35419:8;:49::i;:::-;-1:-1:-1;;;;;35673:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;35673:31:0;;;-1:-1:-1;;;;;35673:31:0;;;-1:-1:-1;;35673:31:0;;;;;;;35719:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;35719:29:0;;;;;;;;;;;;;35795:43;;;;;;;;;;35821:15;35795:43;;;;;;;;;;35772:20;;;:11;:20;;;;;;:66;;;;;;;;-1:-1:-1;;;;;;35772:66:0;;;;;;;-1:-1:-1;;;35772:66:0;;;;;;;;;;;;35673:18;36100:11;;35772:20;;36100:11;:::i;:::-;36167:1;36126:24;;;:11;:24;;;;;:29;36078:33;;-1:-1:-1;;;;;;36126:29:0;36122:227;;36190:20;36198:11;32503:4;32537:12;-1:-1:-1;32527:22:0;32446:111;36190:20;36186:152;;;36258:64;;;;;;;;36273:18;;-1:-1:-1;;;;;36258:64:0;;;;;;36293:28;;;;36258:64;;;;;;;;;;-1:-1:-1;36231:24:0;;;:11;:24;;;;;;;:91;;;;;;;;;-1:-1:-1;;;36231:91:0;-1:-1:-1;;;;;;36231:91:0;;;;;;;;;;;;36186:152;36385:7;36381:2;-1:-1:-1;;;;;36366:27:0;36375:4;-1:-1:-1;;;;;36366:27:0;;;;;;;;;;;36404:42;34775:1679;;;34671:1783;;;:::o;28015:650::-;-1:-1:-1;;;;;;;;;;;;;;;;;28118:16:0;28126:7;32503:4;32537:12;-1:-1:-1;32527:22:0;32446:111;28118:16;28110:71;;;;-1:-1:-1;;;28110:71:0;;17201:2:1;28110:71:0;;;17183:21:1;17240:2;17220:18;;;17213:30;17279:34;17259:18;;;17252:62;-1:-1:-1;;;17330:18:1;;;17323:40;17380:19;;28110:71:0;16999:406:1;28110:71:0;28194:26;28246:12;28235:7;:23;28231:103;;28296:22;28306:12;28296:7;:22;:::i;:::-;:26;;28321:1;28296:26;:::i;:::-;28275:47;;28231:103;28366:7;28346:242;28383:18;28375:4;:26;28346:242;;28426:31;28460:17;;;:11;:17;;;;;;;;;28426:51;;;;;;;;;-1:-1:-1;;;;;28426:51:0;;;;;-1:-1:-1;;;28426:51:0;;;;;;;;;;;;28496:28;28492:85;;28552:9;28015:650;-1:-1:-1;;;;28015:650:0:o;28492:85::-;-1:-1:-1;28403:6:0;;;;:::i;:::-;;;;28346:242;;;-1:-1:-1;28600:57:0;;-1:-1:-1;;;28600:57:0;;17883:2:1;28600:57:0;;;17865:21:1;17922:2;17902:18;;;17895:30;17961:34;17941:18;;;17934:62;-1:-1:-1;;;18012:18:1;;;18005:45;18067:19;;28600:57:0;17681:411:1;5354:191:0;5447:6;;;-1:-1:-1;;;;;5464:17:0;;;-1:-1:-1;;;;;;5464:17:0;;;;;;;5497:40;;5447:6;;;5464:17;5447:6;;5497:40;;5428:16;;5497:40;5417:128;5354:191;:::o;37333:804::-;37488:4;-1:-1:-1;;;;;37509:13:0;;6695:20;6743:8;37505:625;;37545:72;;-1:-1:-1;;;37545:72:0;;-1:-1:-1;;;;;37545:36:0;;;;;:72;;2888:10;;37596:4;;37602:7;;37611:5;;37545:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37545:72:0;;;;;;;;-1:-1:-1;;37545:72:0;;;;;;;;;;;;:::i;:::-;;;37541:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37791:6;:13;37808:1;37791:18;37787:273;;37834:61;;-1:-1:-1;;;37834:61:0;;;;;;;:::i;37787:273::-;38010:6;38004:13;37995:6;37991:2;37987:15;37980:38;37541:534;-1:-1:-1;;;;;;37668:55:0;-1:-1:-1;;;37668:55:0;;-1:-1:-1;37661:62:0;;37505:625;-1:-1:-1;38114:4:0;37505:625;37333:804;;;;;;:::o;370:723::-;426:13;647:5;656:1;647:10;643:53;;-1:-1:-1;;674:10:0;;;;;;;;;;;;-1:-1:-1;;;674:10:0;;;;;370:723::o;643:53::-;721:5;706:12;762:78;769:9;;762:78;;795:8;;;;:::i;:::-;;-1:-1:-1;818:10:0;;-1:-1:-1;826:2:0;818:10;;:::i;:::-;;;762:78;;;850:19;882:6;872:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;872:17:0;;850:39;;900:154;907:10;;900:154;;934:11;944:1;934:11;;:::i;:::-;;-1:-1:-1;1003:10:0;1011:2;1003:5;:10;:::i;:::-;990:24;;:2;:24;:::i;:::-;977:39;;960:6;967;960:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;960:56:0;;;;;;;;-1:-1:-1;1031:11:0;1040:2;1031:11;;:::i;:::-;;;900:154;;32946:1471;33069:20;33092:12;-1:-1:-1;;;;;33123:16:0;;33115:62;;;;-1:-1:-1;;;33115:62:0;;19564:2:1;33115:62:0;;;19546:21:1;19603:2;19583:18;;;19576:30;19642:34;19622:18;;;19615:62;-1:-1:-1;;;19693:18:1;;;19686:31;19734:19;;33115:62:0;19362:397:1;33115:62:0;33322:21;33330:12;32503:4;32537:12;-1:-1:-1;32527:22:0;32446:111;33322:21;33321:22;33313:64;;;;-1:-1:-1;;;33313:64:0;;19966:2:1;33313:64:0;;;19948:21:1;20005:2;19985:18;;;19978:30;20044:31;20024:18;;;20017:59;20093:18;;33313:64:0;19764:353:1;33313:64:0;33408:12;33396:8;:24;;33388:71;;;;-1:-1:-1;;;33388:71:0;;20324:2:1;33388:71:0;;;20306:21:1;20363:2;20343:18;;;20336:30;20402:34;20382:18;;;20375:62;-1:-1:-1;;;20453:18:1;;;20446:32;20495:19;;33388:71:0;20122:398:1;33388:71:0;33489:1;33478:8;:12;33470:60;;;;-1:-1:-1;;;33470:60:0;;20727:2:1;33470:60:0;;;20709:21:1;20766:2;20746:18;;;20739:30;20805:34;20785:18;;;20778:62;-1:-1:-1;;;20856:18:1;;;20849:33;20899:19;;33470:60:0;20525:399:1;33470:60:0;-1:-1:-1;;;;;33650:16:0;;33617:30;33650:16;;;:12;:16;;;;;;;;;33617:49;;;;;;;;;-1:-1:-1;;;;;33617:49:0;;;;;-1:-1:-1;;;33617:49:0;;;;;;;;;;;33696:135;;;;;;;;33722:19;;33617:49;;33696:135;;;33722:39;;33752:8;;33722:39;:::i;:::-;-1:-1:-1;;;;;33696:135:0;;;;;33811:8;33776:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;33696:135:0;;;;;;-1:-1:-1;;;;;33677:16:0;;;;;;;:12;:16;;;;;;;;:154;;;;;;;;-1:-1:-1;;;33677:154:0;;;;;;;;;;;;33870:43;;;;;;;;;;;33896:15;33870:43;;;;;;;;33842:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;33842:71:0;-1:-1:-1;;;;;;33842:71:0;;;;;;;;;;;;;;;;;;33854:12;;33974:325;33998:8;33994:1;:12;33974:325;;;34033:38;;34058:12;;-1:-1:-1;;;;;34033:38:0;;;34050:1;;34033:38;;34050:1;;34033:38;34112:59;34143:1;34147:2;34151:12;34165:5;34112:22;:59::i;:::-;34086:172;;;;-1:-1:-1;;;34086:172:0;;;;;;;:::i;:::-;34273:14;;;;:::i;:::-;;;;34008:3;;;;;:::i;:::-;;;;33974:325;;;-1:-1:-1;34311:12:0;:27;;;34349:60;31836:355;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:180::-;651:6;704:2;692:9;683:7;679:23;675:32;672:52;;;720:1;717;710:12;672:52;-1:-1:-1;743:23:1;;592:180;-1:-1:-1;592:180:1:o;959:258::-;1031:1;1041:113;1055:6;1052:1;1049:13;1041:113;;;1131:11;;;1125:18;1112:11;;;1105:39;1077:2;1070:10;1041:113;;;1172:6;1169:1;1166:13;1163:48;;;-1:-1:-1;;1207:1:1;1189:16;;1182:27;959:258::o;1222:269::-;1275:3;1313:5;1307:12;1340:6;1335:3;1328:19;1356:63;1412:6;1405:4;1400:3;1396:14;1389:4;1382:5;1378:16;1356:63;:::i;:::-;1473:2;1452:15;-1:-1:-1;;1448:29:1;1439:39;;;;1480:4;1435:50;;1222:269;-1:-1:-1;;1222:269:1:o;1496:231::-;1645:2;1634:9;1627:21;1608:4;1665:56;1717:2;1706:9;1702:18;1694:6;1665:56;:::i;1940:173::-;2008:20;;-1:-1:-1;;;;;2057:31:1;;2047:42;;2037:70;;2103:1;2100;2093:12;2118:254;2186:6;2194;2247:2;2235:9;2226:7;2222:23;2218:32;2215:52;;;2263:1;2260;2253:12;2215:52;2286:29;2305:9;2286:29;:::i;:::-;2276:39;2362:2;2347:18;;;;2334:32;;-1:-1:-1;;;2118:254:1:o;2377:127::-;2438:10;2433:3;2429:20;2426:1;2419:31;2469:4;2466:1;2459:15;2493:4;2490:1;2483:15;2509:632;2574:5;2604:18;2645:2;2637:6;2634:14;2631:40;;;2651:18;;:::i;:::-;2726:2;2720:9;2694:2;2780:15;;-1:-1:-1;;2776:24:1;;;2802:2;2772:33;2768:42;2756:55;;;2826:18;;;2846:22;;;2823:46;2820:72;;;2872:18;;:::i;:::-;2912:10;2908:2;2901:22;2941:6;2932:15;;2971:6;2963;2956:22;3011:3;3002:6;2997:3;2993:16;2990:25;2987:45;;;3028:1;3025;3018:12;2987:45;3078:6;3073:3;3066:4;3058:6;3054:17;3041:44;3133:1;3126:4;3117:6;3109;3105:19;3101:30;3094:41;;;;2509:632;;;;;:::o;3146:451::-;3215:6;3268:2;3256:9;3247:7;3243:23;3239:32;3236:52;;;3284:1;3281;3274:12;3236:52;3324:9;3311:23;3357:18;3349:6;3346:30;3343:50;;;3389:1;3386;3379:12;3343:50;3412:22;;3465:4;3457:13;;3453:27;-1:-1:-1;3443:55:1;;3494:1;3491;3484:12;3443:55;3517:74;3583:7;3578:2;3565:16;3560:2;3556;3552:11;3517:74;:::i;3602:186::-;3661:6;3714:2;3702:9;3693:7;3689:23;3685:32;3682:52;;;3730:1;3727;3720:12;3682:52;3753:29;3772:9;3753:29;:::i;3793:328::-;3870:6;3878;3886;3939:2;3927:9;3918:7;3914:23;3910:32;3907:52;;;3955:1;3952;3945:12;3907:52;3978:29;3997:9;3978:29;:::i;:::-;3968:39;;4026:38;4060:2;4049:9;4045:18;4026:38;:::i;:::-;4016:48;;4111:2;4100:9;4096:18;4083:32;4073:42;;3793:328;;;;;:::o;4126:160::-;4191:20;;4247:13;;4240:21;4230:32;;4220:60;;4276:1;4273;4266:12;4291:180;4347:6;4400:2;4388:9;4379:7;4375:23;4371:32;4368:52;;;4416:1;4413;4406:12;4368:52;4439:26;4455:9;4439:26;:::i;4476:254::-;4541:6;4549;4602:2;4590:9;4581:7;4577:23;4573:32;4570:52;;;4618:1;4615;4608:12;4570:52;4641:29;4660:9;4641:29;:::i;:::-;4631:39;;4689:35;4720:2;4709:9;4705:18;4689:35;:::i;:::-;4679:45;;4476:254;;;;;:::o;4735:667::-;4830:6;4838;4846;4854;4907:3;4895:9;4886:7;4882:23;4878:33;4875:53;;;4924:1;4921;4914:12;4875:53;4947:29;4966:9;4947:29;:::i;:::-;4937:39;;4995:38;5029:2;5018:9;5014:18;4995:38;:::i;:::-;4985:48;;5080:2;5069:9;5065:18;5052:32;5042:42;;5135:2;5124:9;5120:18;5107:32;5162:18;5154:6;5151:30;5148:50;;;5194:1;5191;5184:12;5148:50;5217:22;;5270:4;5262:13;;5258:27;-1:-1:-1;5248:55:1;;5299:1;5296;5289:12;5248:55;5322:74;5388:7;5383:2;5370:16;5365:2;5361;5357:11;5322:74;:::i;:::-;5312:84;;;4735:667;;;;;;;:::o;5407:260::-;5475:6;5483;5536:2;5524:9;5515:7;5511:23;5507:32;5504:52;;;5552:1;5549;5542:12;5504:52;5575:29;5594:9;5575:29;:::i;:::-;5565:39;;5623:38;5657:2;5646:9;5642:18;5623:38;:::i;5672:356::-;5874:2;5856:21;;;5893:18;;;5886:30;5952:34;5947:2;5932:18;;5925:62;6019:2;6004:18;;5672:356::o;6727:127::-;6788:10;6783:3;6779:20;6776:1;6769:31;6819:4;6816:1;6809:15;6843:4;6840:1;6833:15;6859:128;6899:3;6930:1;6926:6;6923:1;6920:13;6917:39;;;6936:18;;:::i;:::-;-1:-1:-1;6972:9:1;;6859:128::o;6992:344::-;7194:2;7176:21;;;7233:2;7213:18;;;7206:30;-1:-1:-1;;;7267:2:1;7252:18;;7245:50;7327:2;7312:18;;6992:344::o;7341:380::-;7420:1;7416:12;;;;7463;;;7484:61;;7538:4;7530:6;7526:17;7516:27;;7484:61;7591:2;7583:6;7580:14;7560:18;7557:38;7554:161;;7637:10;7632:3;7628:20;7625:1;7618:31;7672:4;7669:1;7662:15;7700:4;7697:1;7690:15;7554:161;;7341:380;;;:::o;9372:135::-;9411:3;9432:17;;;9429:43;;9452:18;;:::i;:::-;-1:-1:-1;9499:1:1;9488:13;;9372:135::o;10743:401::-;10945:2;10927:21;;;10984:2;10964:18;;;10957:30;11023:34;11018:2;11003:18;;10996:62;-1:-1:-1;;;11089:2:1;11074:18;;11067:35;11134:3;11119:19;;10743:401::o;11908:168::-;11948:7;12014:1;12010;12006:6;12002:14;11999:1;11996:21;11991:1;11984:9;11977:17;11973:45;11970:71;;;12021:18;;:::i;:::-;-1:-1:-1;12061:9:1;;11908:168::o;12784:415::-;12986:2;12968:21;;;13025:2;13005:18;;;12998:30;13064:34;13059:2;13044:18;;13037:62;-1:-1:-1;;;13130:2:1;13115:18;;13108:49;13189:3;13174:19;;12784:415::o;13746:185::-;13788:3;13826:5;13820:12;13841:52;13886:6;13881:3;13874:4;13867:5;13863:16;13841:52;:::i;:::-;13909:16;;;;;13746:185;-1:-1:-1;;13746:185:1:o;14054:1301::-;14331:3;14360:1;14393:6;14387:13;14423:3;14445:1;14473:9;14469:2;14465:18;14455:28;;14533:2;14522:9;14518:18;14555;14545:61;;14599:4;14591:6;14587:17;14577:27;;14545:61;14625:2;14673;14665:6;14662:14;14642:18;14639:38;14636:165;;-1:-1:-1;;;14700:33:1;;14756:4;14753:1;14746:15;14786:4;14707:3;14774:17;14636:165;14817:18;14844:104;;;;14962:1;14957:320;;;;14810:467;;14844:104;-1:-1:-1;;14877:24:1;;14865:37;;14922:16;;;;-1:-1:-1;14844:104:1;;14957:320;13693:1;13686:14;;;13730:4;13717:18;;15052:1;15066:165;15080:6;15077:1;15074:13;15066:165;;;15158:14;;15145:11;;;15138:35;15201:16;;;;15095:10;;15066:165;;;15070:3;;15260:6;15255:3;15251:16;15244:23;;14810:467;;;;;;;15293:56;15318:30;15344:3;15336:6;15318:30;:::i;:::-;-1:-1:-1;;;13996:20:1;;14041:1;14032:11;;13936:113;15293:56;15286:63;14054:1301;-1:-1:-1;;;;;14054:1301:1:o;17410:125::-;17450:4;17478:1;17475;17472:8;17469:34;;;17483:18;;:::i;:::-;-1:-1:-1;17520:9:1;;17410:125::o;17540:136::-;17579:3;17607:5;17597:39;;17616:18;;:::i;:::-;-1:-1:-1;;;17652:18:1;;17540:136::o;18097:500::-;-1:-1:-1;;;;;18366:15:1;;;18348:34;;18418:15;;18413:2;18398:18;;18391:43;18465:2;18450:18;;18443:34;;;18513:3;18508:2;18493:18;;18486:31;;;18291:4;;18534:57;;18571:19;;18563:6;18534:57;:::i;:::-;18526:65;18097:500;-1:-1:-1;;;;;;18097:500:1:o;18602:249::-;18671:6;18724:2;18712:9;18703:7;18699:23;18695:32;18692:52;;;18740:1;18737;18730:12;18692:52;18772:9;18766:16;18791:30;18815:5;18791:30;:::i;18856:127::-;18917:10;18912:3;18908:20;18905:1;18898:31;18948:4;18945:1;18938:15;18972:4;18969:1;18962:15;18988:120;19028:1;19054;19044:35;;19059:18;;:::i;:::-;-1:-1:-1;19093:9:1;;18988:120::o;19113:112::-;19145:1;19171;19161:35;;19176:18;;:::i;:::-;-1:-1:-1;19210:9:1;;19113:112::o;19230:127::-;19291:10;19286:3;19282:20;19279:1;19272:31;19322:4;19319:1;19312:15;19346:4;19343:1;19336:15;20929:253;20969:3;-1:-1:-1;;;;;21058:2:1;21055:1;21051:10;21088:2;21085:1;21081:10;21119:3;21115:2;21111:12;21106:3;21103:21;21100:47;;;21127:18;;:::i;:::-;21163:13;;20929:253;-1:-1:-1;;;;20929:253:1:o
Swarm Source
ipfs://9393a6a0d311d362526b710d9ee8d6e2ddd3d2f146ab3a0f386fbab895631a05
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.