ETH Price: $3,411.28 (+1.60%)

Token

Deaf Gold (DGLD)
 

Overview

Max Total Supply

6,410,000 DGLD

Holders

64

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
gmicap.eth
Balance
80,000 DGLD

Value
$0.00
0x13b3a50f3947476eda74fe191344524e2d2d28e5
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DeafGold

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-06
*/

/**
 *Submitted for verification at Etherscan.io on 2021-09-04
*/

/**
 *Submitted for verification at Etherscan.io on 2021-09-01
*/

// SPDX-License-Identifier: UNLICENSED

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;
    }
}

/**
 * @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() {
        _setOwner(_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 {
        _setOwner(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"
        );
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to Deaf reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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);
}

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

/**
 * @dev 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 Deaf 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;
}


/**
 * @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);
}


contract DeafGold is Context, Ownable, ERC20 {
    // Deaf contract is available at https://etherscan.io/address/0xff9c1b15b16263c61d017ee9f65c50e4ae0113d7
    address public DeafContractAddress =
        0xc9Cb0FEe73f060Db66D2693D92d75c825B1afdbF;
    IERC721Enumerable public DeafContract;

    // Give out 10,000 Deaf Gold for every Deaf Bag that a user holds
    uint256 public DeafGoldPerTokenId = 10000 * (10**decimals());

    // tokenIdStart of 1 is Deaf on the following lines in the Deaf contract:
    /** 
    function claim(uint256 tokenId) public nonReentrant {
        require(tokenId > 0 && tokenId < 7778, "Token ID invalid");
        _safeMint(_msgSender(), tokenId);
    }
    */
    uint256 public tokenIdStart = 1;

    // tokenIdEnd of 8000 is Deaf on the following lines in the Deaf contract:
    /**
        function ownerClaim(uint256 tokenId) public nonReentrant onlyOwner {
        require(tokenId > 7777 && tokenId < 8001, "Token ID invalid");
        _safeMint(owner(), tokenId);
    }
    */
    uint256 public tokenIdEnd = 8000;

    // Seasons are used to allow users to claim tokens regularly. Seasons are
    // decided by the DAO.
    uint256 public season = 0;

    // Track claimed tokens within a season
    // IMPORTANT: The format of the mapping is:
    // claimedForSeason[season][tokenId][claimed]
    mapping(uint256 => mapping(uint256 => bool)) public seasonClaimedByTokenId;

    constructor() Ownable() ERC20("Deaf Gold", "DGLD") {
        // Transfer ownership to the Deaf DAO
        // Ownable by OpenZeppelin automatically sets owner to msg.sender, but
        // we're going to be using a separate wallet for deployment
        transferOwnership(_msgSender());
        DeafContract = IERC721Enumerable(DeafContractAddress);
    }

    /// @notice Claim Deaf Gold for a given Deaf ID
    /// @param tokenId The tokenId of the Deaf NFT
    function claimById(uint256 tokenId) external {
        // Follow the Checks-Effects-Interactions pattern to prevent reentrancy
        // attacks

        // Checks

        // Check that the msgSender owns the token that is being claimed
        require(
            _msgSender() == DeafContract.ownerOf(tokenId),
            "MUST_OWN_TOKEN_ID"
        );

        // Further Checks, Effects, and Interactions are contained within the
        // _claim() function
        _claim(tokenId, _msgSender());
    }

    /// @notice Claim Deaf Gold for all tokens owned by the sender
    /// @notice This function will run out of gas if you have too much Deaf! If
    /// this is a concern, you should use claimRangeForOwner and claim Deaf
    /// Gold in batches.
    function claimAllForOwner() external {
        uint256 tokenBalanceOwner = DeafContract.balanceOf(_msgSender());

        // Checks
        require(tokenBalanceOwner > 0, "NO_TOKENS_OWNED");

        // i < tokenBalanceOwner because tokenBalanceOwner is 1-indexed
        for (uint256 i = 0; i < tokenBalanceOwner; i++) {
            // Further Checks, Effects, and Interactions are contained within
            // the _claim() function
            _claim(
                DeafContract.tokenOfOwnerByIndex(_msgSender(), i),
                _msgSender()
            );
        }
    }

    /// @notice Claim Deaf Gold for all tokens owned by the sender within a
    /// given range
    /// @notice This function is useful if you own too much Deaf to claim all at
    /// once or if you want to leave some Deaf unclaimed. If you leave Deaf
    /// unclaimed, however, you cannot claim it once the next season starts.
    function claimRangeForOwner(uint256 ownerIndexStart, uint256 ownerIndexEnd)
        external
    {
        uint256 tokenBalanceOwner = DeafContract.balanceOf(_msgSender());

        // Checks
        require(tokenBalanceOwner > 0, "NO_TOKENS_OWNED");

        // We use < for ownerIndexEnd and tokenBalanceOwner because
        // tokenOfOwnerByIndex is 0-indexed while the token balance is 1-indexed
        require(
            ownerIndexStart >= 0 && ownerIndexEnd < tokenBalanceOwner,
            "INDEX_OUT_OF_RANGE"
        );

        // i <= ownerIndexEnd because ownerIndexEnd is 0-indexed
        for (uint256 i = ownerIndexStart; i <= ownerIndexEnd; i++) {
            // Further Checks, Effects, and Interactions are contained within
            // the _claim() function
            _claim(
                DeafContract.tokenOfOwnerByIndex(_msgSender(), i),
                _msgSender()
            );
        }
    }

    /// @dev Internal function to mint Deaf upon claiming
    function _claim(uint256 tokenId, address tokenOwner) internal {
        // Checks
        // Check that the token ID is in range
        // We use >= and <= to here because all of the token IDs are 0-indexed
        require(
            tokenId >= tokenIdStart && tokenId <= tokenIdEnd,
            "TOKEN_ID_OUT_OF_RANGE"
        );

        // Check that Deaf Gold have not already been claimed this season
        // for a given tokenId
        require(
            !seasonClaimedByTokenId[season][tokenId],
            "GOLD_CLAIMED_FOR_TOKEN_ID"
        );

        // Effects

        // Mark that Deaf Gold has been claimed for this season for the
        // given tokenId
        seasonClaimedByTokenId[season][tokenId] = true;

        // Interactions

        // Send Deaf Gold to the owner of the token ID
        _mint(tokenOwner, DeafGoldPerTokenId);
    }

    /// @notice Allows the DAO to mint new tokens for use within the Deaf
    /// Ecosystem
    /// @param amountDisplayValue The amount of Deaf to mint. This should be
    /// input as the display value, not in raw decimals. If you want to mint
    /// 100 Deaf, you should enter "100" rather than the value of 100 * 10^18.
    function daoMint(uint256 amountDisplayValue) external onlyOwner {
        _mint(owner(), amountDisplayValue * (10**decimals()));
    }

    /// @notice Allows the DAO to set a new contract address for Deaf. This is
    /// relevant in the event that Deaf migrates to a new contract.
    /// @param DeafContractAddress_ The new contract address for Deaf
    function daoSetDeafContractAddress(address DeafContractAddress_)
        external
        onlyOwner
    {
        DeafContractAddress = DeafContractAddress_;
        DeafContract = IERC721Enumerable(DeafContractAddress);
    }

    /// @notice Allows the DAO to set the token IDs that are eligible to claim
    /// Deaf
    /// @param tokenIdStart_ The start of the eligible token range
    /// @param tokenIdEnd_ The end of the eligible token range
    /// @dev This is relevant in case a future Deaf contract has a different
    /// total supply of Deaf
    function daoSetTokenIdRange(uint256 tokenIdStart_, uint256 tokenIdEnd_)
        external
        onlyOwner
    {
        tokenIdStart = tokenIdStart_;
        tokenIdEnd = tokenIdEnd_;
    }

    /// @notice Allows the DAO to set a season for new Deaf Gold claims
    /// @param season_ The season to use for claiming Deaf
    function daoSetSeason(uint256 season_) public onlyOwner {
        season = season_;
    }

    /// @notice Allows the DAO to set the amount of Deaf Gold that is
    /// claimed per token ID
    /// @param DeafGoldDisplayValue The amount of Deaf a user can claim.
    /// This should be input as the display value, not in raw decimals. If you
    /// want to mint 100 Deaf, you should enter "100" rather than the value of
    /// 100 * 10^18.
    function daoSetDeafGoldPerTokenId(uint256 DeafGoldDisplayValue)
        public
        onlyOwner
    {
        DeafGoldPerTokenId = DeafGoldDisplayValue * (10**decimals());
    }

    /// @notice Allows the DAO to set the season and Deaf Gold per token ID
    /// in one transaction. This ensures that there is not a gap where a user
    /// can claim more Deaf Gold than others
    /// @param season_ The season to use for claiming Deaf
    /// @param DeafGoldDisplayValue The amount of Deaf a user can claim.
    /// This should be input as the display value, not in raw decimals. If you
    /// want to mint 100 Deaf, you should enter "100" rather than the value of
    /// 100 * 10^18.
    /// @dev We would save a tiny amount of gas by modifying the season and
    /// DeafGold variables directly. It is better practice for security,
    /// however, to avoid repeating code. This function is so rarely used that
    /// it's not worth moving these values into their own internal function to
    /// skip the gas used on the modifier check.
    function daoSetSeasonAndDeafGoldPerTokenID(
        uint256 season_,
        uint256 DeafGoldDisplayValue
    ) external onlyOwner {
        daoSetSeason(season_);
        daoSetDeafGoldPerTokenId(DeafGoldDisplayValue);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DeafContract","outputs":[{"internalType":"contract IERC721Enumerable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DeafContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DeafGoldPerTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAllForOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimById","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ownerIndexStart","type":"uint256"},{"internalType":"uint256","name":"ownerIndexEnd","type":"uint256"}],"name":"claimRangeForOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountDisplayValue","type":"uint256"}],"name":"daoMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"DeafContractAddress_","type":"address"}],"name":"daoSetDeafContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"DeafGoldDisplayValue","type":"uint256"}],"name":"daoSetDeafGoldPerTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"season_","type":"uint256"}],"name":"daoSetSeason","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"season_","type":"uint256"},{"internalType":"uint256","name":"DeafGoldDisplayValue","type":"uint256"}],"name":"daoSetSeasonAndDeafGoldPerTokenID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenIdStart_","type":"uint256"},{"internalType":"uint256","name":"tokenIdEnd_","type":"uint256"}],"name":"daoSetTokenIdRange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"season","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"seasonClaimedByTokenId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIdEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIdStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600680546001600160a01b03191673c9cb0fee73f060db66d2693d92d75c825b1afdbf1790556200003462000139565b6200004190600a62000395565b6200004f906127106200048d565b6008556001600955611f40600a556000600b553480156200006f57600080fd5b5060405180604001604052806009815260200168111958598811dbdb1960ba1b815250604051806040016040528060048152602001631111d31160e21b815250620000c9620000c36200013e60201b60201c565b62000142565b8151620000de90600490602085019062000227565b508051620000f490600590602084019062000227565b505050620001116200010b6200013e60201b60201c565b62000192565b600654600780546001600160a01b0319166001600160a01b0390921691909117905562000502565b601290565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200019c6200013e565b6001600160a01b0316620001af62000218565b6001600160a01b031614620001e15760405162461bcd60e51b8152600401620001d89062000313565b60405180910390fd5b6001600160a01b0381166200020a5760405162461bcd60e51b8152600401620001d890620002cd565b620002158162000142565b50565b6000546001600160a01b031690565b8280546200023590620004af565b90600052602060002090601f016020900481019282620002595760008555620002a4565b82601f106200027457805160ff1916838001178555620002a4565b82800160010185558215620002a4579182015b82811115620002a457825182559160200191906001019062000287565b50620002b2929150620002b6565b5090565b5b80821115620002b25760008155600101620002b7565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b80825b60018086116200035c57506200038c565b818704821115620003715762000371620004ec565b808616156200037f57918102915b9490941c9380026200034b565b94509492505050565b6000620003a960001960ff851684620003b0565b9392505050565b600082620003c157506001620003a9565b81620003d057506000620003a9565b8160018114620003e95760028114620003f45762000428565b6001915050620003a9565b60ff841115620004085762000408620004ec565b6001841b915084821115620004215762000421620004ec565b50620003a9565b5060208310610133831016604e8410600b841016171562000460575081810a838111156200045a576200045a620004ec565b620003a9565b6200046f848484600162000348565b808604821115620004845762000484620004ec565b02949350505050565b6000816000190483118215151615620004aa57620004aa620004ec565b500290565b600281046001821680620004c457607f821691505b60208210811415620004e657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6119b080620005126000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063715018a611610104578063a9059cbb116100a2578063d429cedd11610071578063d429cedd1461038a578063dd62ed3e1461039d578063e5e808cb146103b0578063f2fde38b146103c3576101da565b8063a9059cbb14610354578063becf774114610367578063c50b0fb01461037a578063cbf0b27614610382576101da565b80638da5cb5b116100de5780638da5cb5b1461032957806391f89bc11461033157806395d89b4114610339578063a457c2d714610341576101da565b8063715018a6146102fb57806374cfc49c14610303578063878e7ea514610316576101da565b8063395093511161017c5780635c64e4661161014b5780635c64e466146102b857806362759f6c146102c057806370728d25146102d357806370a08231146102e8576101da565b8063395093511461027757806342e473151461028a57806343f428021461029d5780634da7808a146102a5576101da565b806318160ddd116101b857806318160ddd1461023257806323b872dd146102475780632a3890621461025a578063313ce56714610262576101da565b806306fdde03146101df578063095ea7b3146101fd5780630bd912ab1461021d575b600080fd5b6101e76103d6565b6040516101f49190611230565b60405180910390f35b61021061020b36600461117c565b610468565b6040516101f49190611225565b61023061022b3660046111d7565b610485565b005b61023a6104e3565b6040516101f49190611708565b61021061025536600461113c565b6104e9565b61023a61057b565b61026a610581565b6040516101f49190611711565b61021061028536600461117c565b610586565b6102306102983660046111a7565b6105da565b61023a61061e565b6102306102b33660046111d7565b610624565b61023a61066e565b6102306102ce3660046111a7565b610674565b6102db6106e3565b6040516101f491906111f8565b61023a6102f63660046110cc565b6106f2565b61023061070d565b6102306103113660046110cc565b610758565b6102306103243660046111d7565b6107de565b6102db610960565b6102db61096f565b6101e761097e565b61021061034f36600461117c565b61098d565b61021061036236600461117c565b610a06565b6102306103753660046111a7565b610a1a565b61023a610af6565b610230610afc565b6102306103983660046111a7565b610be0565b61023a6103ab366004611104565b610c42565b6102106103be3660046111d7565b610c6d565b6102306103d13660046110cc565b610c8d565b6060600480546103e5906118a9565b80601f0160208091040260200160405190810160405280929190818152602001828054610411906118a9565b801561045e5780601f106104335761010080835404028352916020019161045e565b820191906000526020600020905b81548152906001019060200180831161044157829003601f168201915b5050505050905090565b600061047c610475610cfb565b8484610cff565b50600192915050565b61048d610cfb565b6001600160a01b031661049e610960565b6001600160a01b0316146104cd5760405162461bcd60e51b81526004016104c4906114e0565b60405180910390fd5b6104d6826105da565b6104df81610be0565b5050565b60035490565b60006104f6848484610db3565b6001600160a01b038416600090815260026020526040812081610517610cfb565b6001600160a01b03166001600160a01b031681526020019081526020016000205490508281101561055a5760405162461bcd60e51b81526004016104c490611483565b61056e85610566610cfb565b858403610cff565b60019150505b9392505050565b60095481565b601290565b600061047c610593610cfb565b8484600260006105a1610cfb565b6001600160a01b03908116825260208083019390935260409182016000908120918b16815292529020546105d5919061171f565b610cff565b6105e2610cfb565b6001600160a01b03166105f3610960565b6001600160a01b0316146106195760405162461bcd60e51b81526004016104c4906114e0565b600b55565b600a5481565b61062c610cfb565b6001600160a01b031661063d610960565b6001600160a01b0316146106635760405162461bcd60e51b81526004016104c4906114e0565b600991909155600a55565b60085481565b61067c610cfb565b6001600160a01b031661068d610960565b6001600160a01b0316146106b35760405162461bcd60e51b81526004016104c4906114e0565b6106e06106be610960565b6106c6610581565b6106d190600a61177d565b6106db908461186c565b610ed7565b50565b6007546001600160a01b031681565b6001600160a01b031660009081526001602052604090205490565b610715610cfb565b6001600160a01b0316610726610960565b6001600160a01b03161461074c5760405162461bcd60e51b81526004016104c4906114e0565b6107566000610f9f565b565b610760610cfb565b6001600160a01b0316610771610960565b6001600160a01b0316146107975760405162461bcd60e51b81526004016104c4906114e0565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03938416179182905560078054929093169116179055565b6007546000906001600160a01b03166370a082316107fa610cfb565b6040518263ffffffff1660e01b815260040161081691906111f8565b60206040518083038186803b15801561082e57600080fd5b505afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086691906111bf565b9050600081116108885760405162461bcd60e51b81526004016104c49061163d565b8082106108a75760405162461bcd60e51b81526004016104c4906112fe565b825b82811161095a57600754610948906001600160a01b0316632f745c596108cd610cfb565b846040518363ffffffff1660e01b81526004016108eb92919061120c565b60206040518083038186803b15801561090357600080fd5b505afa158015610917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093b91906111bf565b610943610cfb565b611007565b80610952816118fd565b9150506108a9565b50505050565b6000546001600160a01b031690565b6006546001600160a01b031681565b6060600580546103e5906118a9565b6000806002600061099c610cfb565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156109e85760405162461bcd60e51b81526004016104c490611674565b6109fc6109f3610cfb565b85858403610cff565b5060019392505050565b600061047c610a13610cfb565b8484610db3565b6007546040517f6352211e0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690636352211e90610a63908490600401611708565b60206040518083038186803b158015610a7b57600080fd5b505afa158015610a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab391906110e8565b6001600160a01b0316610ac4610cfb565b6001600160a01b031614610aea5760405162461bcd60e51b81526004016104c49061144c565b6106e081610943610cfb565b600b5481565b6007546000906001600160a01b03166370a08231610b18610cfb565b6040518263ffffffff1660e01b8152600401610b3491906111f8565b60206040518083038186803b158015610b4c57600080fd5b505afa158015610b60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8491906111bf565b905060008111610ba65760405162461bcd60e51b81526004016104c49061163d565b60005b818110156104df57600754610bce906001600160a01b0316632f745c596108cd610cfb565b80610bd8816118fd565b915050610ba9565b610be8610cfb565b6001600160a01b0316610bf9610960565b6001600160a01b031614610c1f5760405162461bcd60e51b81526004016104c4906114e0565b610c27610581565b610c3290600a61177d565b610c3c908261186c565b60085550565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b600c60209081526000928352604080842090915290825290205460ff1681565b610c95610cfb565b6001600160a01b0316610ca6610960565b6001600160a01b031614610ccc5760405162461bcd60e51b81526004016104c4906114e0565b6001600160a01b038116610cf25760405162461bcd60e51b81526004016104c490611335565b6106e081610f9f565b3390565b6001600160a01b038316610d255760405162461bcd60e51b81526004016104c4906115a9565b6001600160a01b038216610d4b5760405162461bcd60e51b81526004016104c490611392565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610da6908590611708565b60405180910390a3505050565b6001600160a01b038316610dd95760405162461bcd60e51b81526004016104c490611515565b6001600160a01b038216610dff5760405162461bcd60e51b81526004016104c4906112a1565b610e0a8383836110c7565b6001600160a01b03831660009081526001602052604090205481811015610e435760405162461bcd60e51b81526004016104c4906113ef565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290610e7a90849061171f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ec49190611708565b60405180910390a361095a8484846110c7565b6001600160a01b038216610efd5760405162461bcd60e51b81526004016104c4906116d1565b610f09600083836110c7565b8060036000828254610f1b919061171f565b90915550506001600160a01b03821660009081526001602052604081208054839290610f4890849061171f565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f8b908590611708565b60405180910390a36104df600083836110c7565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600954821015801561101b5750600a548211155b6110375760405162461bcd60e51b81526004016104c490611606565b600b546000908152600c6020908152604080832085845290915290205460ff16156110745760405162461bcd60e51b81526004016104c490611572565b600b546000908152600c60209081526040808320858452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556008546104df908290610ed7565b505050565b6000602082840312156110dd578081fd5b813561057481611965565b6000602082840312156110f9578081fd5b815161057481611965565b60008060408385031215611116578081fd5b823561112181611965565b9150602083013561113181611965565b809150509250929050565b600080600060608486031215611150578081fd5b833561115b81611965565b9250602084013561116b81611965565b929592945050506040919091013590565b6000806040838503121561118e578182fd5b823561119981611965565b946020939093013593505050565b6000602082840312156111b8578081fd5b5035919050565b6000602082840312156111d0578081fd5b5051919050565b600080604083850312156111e9578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b8181101561125c57858101830151858201604001528201611240565b8181111561126d5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201527f6573730000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526012908201527f494e4445585f4f55545f4f465f52414e47450000000000000000000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560408201527f7373000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260408201527f616c616e63650000000000000000000000000000000000000000000000000000606082015260800190565b60208082526011908201527f4d5553545f4f574e5f544f4b454e5f4944000000000000000000000000000000604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160408201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460408201527f6472657373000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526019908201527f474f4c445f434c41494d45445f464f525f544f4b454e5f494400000000000000604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460408201527f7265737300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526015908201527f544f4b454e5f49445f4f55545f4f465f52414e47450000000000000000000000604082015260600190565b6020808252600f908201527f4e4f5f544f4b454e535f4f574e45440000000000000000000000000000000000604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760408201527f207a65726f000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b60ff91909116815260200190565b6000821982111561173257611732611936565b500190565b80825b60018086116117495750611774565b81870482111561175b5761175b611936565b8086161561176857918102915b9490941c93800261173a565b94509492505050565b60006105747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff8516846000826117b757506001610574565b816117c457506000610574565b81600181146117da57600281146117e457611811565b6001915050610574565b60ff8411156117f5576117f5611936565b6001841b91508482111561180b5761180b611936565b50610574565b5060208310610133831016604e8410600b8410161715611844575081810a8381111561183f5761183f611936565b610574565b6118518484846001611737565b80860482111561186357611863611936565b02949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156118a4576118a4611936565b500290565b6002810460018216806118bd57607f821691505b602082108114156118f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561192f5761192f611936565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6001600160a01b03811681146106e057600080fdfea2646970667358221220baf1cb662cb542597fe9c18796b8cec5da6203b7b07cbc36f28824872427df1e64736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063715018a611610104578063a9059cbb116100a2578063d429cedd11610071578063d429cedd1461038a578063dd62ed3e1461039d578063e5e808cb146103b0578063f2fde38b146103c3576101da565b8063a9059cbb14610354578063becf774114610367578063c50b0fb01461037a578063cbf0b27614610382576101da565b80638da5cb5b116100de5780638da5cb5b1461032957806391f89bc11461033157806395d89b4114610339578063a457c2d714610341576101da565b8063715018a6146102fb57806374cfc49c14610303578063878e7ea514610316576101da565b8063395093511161017c5780635c64e4661161014b5780635c64e466146102b857806362759f6c146102c057806370728d25146102d357806370a08231146102e8576101da565b8063395093511461027757806342e473151461028a57806343f428021461029d5780634da7808a146102a5576101da565b806318160ddd116101b857806318160ddd1461023257806323b872dd146102475780632a3890621461025a578063313ce56714610262576101da565b806306fdde03146101df578063095ea7b3146101fd5780630bd912ab1461021d575b600080fd5b6101e76103d6565b6040516101f49190611230565b60405180910390f35b61021061020b36600461117c565b610468565b6040516101f49190611225565b61023061022b3660046111d7565b610485565b005b61023a6104e3565b6040516101f49190611708565b61021061025536600461113c565b6104e9565b61023a61057b565b61026a610581565b6040516101f49190611711565b61021061028536600461117c565b610586565b6102306102983660046111a7565b6105da565b61023a61061e565b6102306102b33660046111d7565b610624565b61023a61066e565b6102306102ce3660046111a7565b610674565b6102db6106e3565b6040516101f491906111f8565b61023a6102f63660046110cc565b6106f2565b61023061070d565b6102306103113660046110cc565b610758565b6102306103243660046111d7565b6107de565b6102db610960565b6102db61096f565b6101e761097e565b61021061034f36600461117c565b61098d565b61021061036236600461117c565b610a06565b6102306103753660046111a7565b610a1a565b61023a610af6565b610230610afc565b6102306103983660046111a7565b610be0565b61023a6103ab366004611104565b610c42565b6102106103be3660046111d7565b610c6d565b6102306103d13660046110cc565b610c8d565b6060600480546103e5906118a9565b80601f0160208091040260200160405190810160405280929190818152602001828054610411906118a9565b801561045e5780601f106104335761010080835404028352916020019161045e565b820191906000526020600020905b81548152906001019060200180831161044157829003601f168201915b5050505050905090565b600061047c610475610cfb565b8484610cff565b50600192915050565b61048d610cfb565b6001600160a01b031661049e610960565b6001600160a01b0316146104cd5760405162461bcd60e51b81526004016104c4906114e0565b60405180910390fd5b6104d6826105da565b6104df81610be0565b5050565b60035490565b60006104f6848484610db3565b6001600160a01b038416600090815260026020526040812081610517610cfb565b6001600160a01b03166001600160a01b031681526020019081526020016000205490508281101561055a5760405162461bcd60e51b81526004016104c490611483565b61056e85610566610cfb565b858403610cff565b60019150505b9392505050565b60095481565b601290565b600061047c610593610cfb565b8484600260006105a1610cfb565b6001600160a01b03908116825260208083019390935260409182016000908120918b16815292529020546105d5919061171f565b610cff565b6105e2610cfb565b6001600160a01b03166105f3610960565b6001600160a01b0316146106195760405162461bcd60e51b81526004016104c4906114e0565b600b55565b600a5481565b61062c610cfb565b6001600160a01b031661063d610960565b6001600160a01b0316146106635760405162461bcd60e51b81526004016104c4906114e0565b600991909155600a55565b60085481565b61067c610cfb565b6001600160a01b031661068d610960565b6001600160a01b0316146106b35760405162461bcd60e51b81526004016104c4906114e0565b6106e06106be610960565b6106c6610581565b6106d190600a61177d565b6106db908461186c565b610ed7565b50565b6007546001600160a01b031681565b6001600160a01b031660009081526001602052604090205490565b610715610cfb565b6001600160a01b0316610726610960565b6001600160a01b03161461074c5760405162461bcd60e51b81526004016104c4906114e0565b6107566000610f9f565b565b610760610cfb565b6001600160a01b0316610771610960565b6001600160a01b0316146107975760405162461bcd60e51b81526004016104c4906114e0565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03938416179182905560078054929093169116179055565b6007546000906001600160a01b03166370a082316107fa610cfb565b6040518263ffffffff1660e01b815260040161081691906111f8565b60206040518083038186803b15801561082e57600080fd5b505afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086691906111bf565b9050600081116108885760405162461bcd60e51b81526004016104c49061163d565b8082106108a75760405162461bcd60e51b81526004016104c4906112fe565b825b82811161095a57600754610948906001600160a01b0316632f745c596108cd610cfb565b846040518363ffffffff1660e01b81526004016108eb92919061120c565b60206040518083038186803b15801561090357600080fd5b505afa158015610917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093b91906111bf565b610943610cfb565b611007565b80610952816118fd565b9150506108a9565b50505050565b6000546001600160a01b031690565b6006546001600160a01b031681565b6060600580546103e5906118a9565b6000806002600061099c610cfb565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156109e85760405162461bcd60e51b81526004016104c490611674565b6109fc6109f3610cfb565b85858403610cff565b5060019392505050565b600061047c610a13610cfb565b8484610db3565b6007546040517f6352211e0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690636352211e90610a63908490600401611708565b60206040518083038186803b158015610a7b57600080fd5b505afa158015610a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab391906110e8565b6001600160a01b0316610ac4610cfb565b6001600160a01b031614610aea5760405162461bcd60e51b81526004016104c49061144c565b6106e081610943610cfb565b600b5481565b6007546000906001600160a01b03166370a08231610b18610cfb565b6040518263ffffffff1660e01b8152600401610b3491906111f8565b60206040518083038186803b158015610b4c57600080fd5b505afa158015610b60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8491906111bf565b905060008111610ba65760405162461bcd60e51b81526004016104c49061163d565b60005b818110156104df57600754610bce906001600160a01b0316632f745c596108cd610cfb565b80610bd8816118fd565b915050610ba9565b610be8610cfb565b6001600160a01b0316610bf9610960565b6001600160a01b031614610c1f5760405162461bcd60e51b81526004016104c4906114e0565b610c27610581565b610c3290600a61177d565b610c3c908261186c565b60085550565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b600c60209081526000928352604080842090915290825290205460ff1681565b610c95610cfb565b6001600160a01b0316610ca6610960565b6001600160a01b031614610ccc5760405162461bcd60e51b81526004016104c4906114e0565b6001600160a01b038116610cf25760405162461bcd60e51b81526004016104c490611335565b6106e081610f9f565b3390565b6001600160a01b038316610d255760405162461bcd60e51b81526004016104c4906115a9565b6001600160a01b038216610d4b5760405162461bcd60e51b81526004016104c490611392565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610da6908590611708565b60405180910390a3505050565b6001600160a01b038316610dd95760405162461bcd60e51b81526004016104c490611515565b6001600160a01b038216610dff5760405162461bcd60e51b81526004016104c4906112a1565b610e0a8383836110c7565b6001600160a01b03831660009081526001602052604090205481811015610e435760405162461bcd60e51b81526004016104c4906113ef565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290610e7a90849061171f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ec49190611708565b60405180910390a361095a8484846110c7565b6001600160a01b038216610efd5760405162461bcd60e51b81526004016104c4906116d1565b610f09600083836110c7565b8060036000828254610f1b919061171f565b90915550506001600160a01b03821660009081526001602052604081208054839290610f4890849061171f565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f8b908590611708565b60405180910390a36104df600083836110c7565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600954821015801561101b5750600a548211155b6110375760405162461bcd60e51b81526004016104c490611606565b600b546000908152600c6020908152604080832085845290915290205460ff16156110745760405162461bcd60e51b81526004016104c490611572565b600b546000908152600c60209081526040808320858452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556008546104df908290610ed7565b505050565b6000602082840312156110dd578081fd5b813561057481611965565b6000602082840312156110f9578081fd5b815161057481611965565b60008060408385031215611116578081fd5b823561112181611965565b9150602083013561113181611965565b809150509250929050565b600080600060608486031215611150578081fd5b833561115b81611965565b9250602084013561116b81611965565b929592945050506040919091013590565b6000806040838503121561118e578182fd5b823561119981611965565b946020939093013593505050565b6000602082840312156111b8578081fd5b5035919050565b6000602082840312156111d0578081fd5b5051919050565b600080604083850312156111e9578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b8181101561125c57858101830151858201604001528201611240565b8181111561126d5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201527f6573730000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526012908201527f494e4445585f4f55545f4f465f52414e47450000000000000000000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560408201527f7373000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260408201527f616c616e63650000000000000000000000000000000000000000000000000000606082015260800190565b60208082526011908201527f4d5553545f4f574e5f544f4b454e5f4944000000000000000000000000000000604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160408201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460408201527f6472657373000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526019908201527f474f4c445f434c41494d45445f464f525f544f4b454e5f494400000000000000604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460408201527f7265737300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526015908201527f544f4b454e5f49445f4f55545f4f465f52414e47450000000000000000000000604082015260600190565b6020808252600f908201527f4e4f5f544f4b454e535f4f574e45440000000000000000000000000000000000604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760408201527f207a65726f000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b60ff91909116815260200190565b6000821982111561173257611732611936565b500190565b80825b60018086116117495750611774565b81870482111561175b5761175b611936565b8086161561176857918102915b9490941c93800261173a565b94509492505050565b60006105747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff8516846000826117b757506001610574565b816117c457506000610574565b81600181146117da57600281146117e457611811565b6001915050610574565b60ff8411156117f5576117f5611936565b6001841b91508482111561180b5761180b611936565b50610574565b5060208310610133831016604e8410600b8410161715611844575081810a8381111561183f5761183f611936565b610574565b6118518484846001611737565b80860482111561186357611863611936565b02949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156118a4576118a4611936565b500290565b6002810460018216806118bd57607f821691505b602082108114156118f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561192f5761192f611936565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6001600160a01b03811681146106e057600080fdfea2646970667358221220baf1cb662cb542597fe9c18796b8cec5da6203b7b07cbc36f28824872427df1e64736f6c63430008000033

Deployed Bytecode Sourcemap

26186:8948:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8566:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10874:210;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;34900:231::-;;;;;;:::i;:::-;;:::i;:::-;;9686:108;;;:::i;:::-;;;;;;;:::i;11566:529::-;;;;;;:::i;:::-;;:::i;26904:31::-;;;:::i;9528:93::-;;;:::i;:::-;;;;;;;:::i;12504:297::-;;;;;;:::i;:::-;;:::i;33374:91::-;;;;;;:::i;:::-;;:::i;27236:32::-;;;:::i;33037:196::-;;;;;;:::i;:::-;;:::i;26560:60::-;;;:::i;32099:136::-;;;;;;:::i;:::-;;:::i;26443:37::-;;;:::i;:::-;;;;;;;:::i;9857:177::-;;;;;;:::i;:::-;;:::i;2551:94::-;;;:::i;32463:232::-;;;;;;:::i;:::-;;:::i;29846:953::-;;;;;;:::i;:::-;;:::i;1900:87::-;;;:::i;26348:88::-;;;:::i;8785:104::-;;;:::i;13304:482::-;;;;;;:::i;:::-;;:::i;10247:216::-;;;;;;:::i;:::-;;:::i;28120:525::-;;;;;;:::i;:::-;;:::i;27384:25::-;;;:::i;28905:598::-;;;:::i;33830:183::-;;;;;;:::i;:::-;;:::i;10526:201::-;;;;;;:::i;:::-;;:::i;27563:74::-;;;;;;:::i;:::-;;:::i;2800:229::-;;;;;;:::i;:::-;;:::i;8566:100::-;8620:13;8653:5;8646:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8566:100;:::o;10874:210::-;10993:4;11015:39;11024:12;:10;:12::i;:::-;11038:7;11047:6;11015:8;:39::i;:::-;-1:-1:-1;11072:4:0;10874:210;;;;:::o;34900:231::-;2131:12;:10;:12::i;:::-;-1:-1:-1;;;;;2120:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2120:23:0;;2112:68;;;;-1:-1:-1;;;2112:68:0;;;;;;;:::i;:::-;;;;;;;;;35045:21:::1;35058:7;35045:12;:21::i;:::-;35077:46;35102:20;35077:24;:46::i;:::-;34900:231:::0;;:::o;9686:108::-;9774:12;;9686:108;:::o;11566:529::-;11706:4;11723:36;11733:6;11741:9;11752:6;11723:9;:36::i;:::-;-1:-1:-1;;;;;11799:19:0;;11772:24;11799:19;;;:11;:19;;;;;11772:24;11819:12;:10;:12::i;:::-;-1:-1:-1;;;;;11799:33:0;-1:-1:-1;;;;;11799:33:0;;;;;;;;;;;;;11772:60;;11885:6;11865:16;:26;;11843:116;;;;-1:-1:-1;;;11843:116:0;;;;;;;:::i;:::-;11995:57;12004:6;12012:12;:10;:12::i;:::-;12045:6;12026:16;:25;11995:8;:57::i;:::-;12083:4;12076:11;;;11566:529;;;;;;:::o;26904:31::-;;;;:::o;9528:93::-;9611:2;9528:93;:::o;12504:297::-;12619:4;12641:130;12664:12;:10;:12::i;:::-;12691:7;12750:10;12713:11;:25;12725:12;:10;:12::i;:::-;-1:-1:-1;;;;;12713:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;12713:25:0;;;:34;;;;;;;;;;:47;;;;:::i;:::-;12641:8;:130::i;33374:91::-;2131:12;:10;:12::i;:::-;-1:-1:-1;;;;;2120:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2120:23:0;;2112:68;;;;-1:-1:-1;;;2112:68:0;;;;;;;:::i;:::-;33441:6:::1;:16:::0;33374:91::o;27236:32::-;;;;:::o;33037:196::-;2131:12;:10;:12::i;:::-;-1:-1:-1;;;;;2120:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2120:23:0;;2112:68;;;;-1:-1:-1;;;2112:68:0;;;;;;;:::i;:::-;33162:12:::1;:28:::0;;;;33201:10:::1;:24:::0;33037:196::o;26560:60::-;;;;:::o;32099:136::-;2131:12;:10;:12::i;:::-;-1:-1:-1;;;;;2120:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2120:23:0;;2112:68;;;;-1:-1:-1;;;2112:68:0;;;;;;;:::i;:::-;32174:53:::1;32180:7;:5;:7::i;:::-;32215:10;:8;:10::i;:::-;32211:14;::::0;:2:::1;:14;:::i;:::-;32189:37;::::0;:18;:37:::1;:::i;:::-;32174:5;:53::i;:::-;32099:136:::0;:::o;26443:37::-;;;-1:-1:-1;;;;;26443:37:0;;:::o;9857:177::-;-1:-1:-1;;;;;10008:18:0;9976:7;10008:18;;;:9;:18;;;;;;;9857:177::o;2551:94::-;2131:12;:10;:12::i;:::-;-1:-1:-1;;;;;2120:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2120:23:0;;2112:68;;;;-1:-1:-1;;;2112:68:0;;;;;;;:::i;:::-;2616:21:::1;2634:1;2616:9;:21::i;:::-;2551:94::o:0;32463:232::-;2131:12;:10;:12::i;:::-;-1:-1:-1;;;;;2120:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2120:23:0;;2112:68;;;;-1:-1:-1;;;2112:68:0;;;;;;;:::i;:::-;32581:19:::1;:42:::0;;;;;::::1;-1:-1:-1::0;;;;;32581:42:0;;::::1;;::::0;;;;32634:12:::1;:53:::0;;32667:19;;;::::1;32634:53:::0;::::1;;::::0;;32463:232::o;29846:953::-;29984:12;;29956:25;;-1:-1:-1;;;;;29984:12:0;:22;30007:12;:10;:12::i;:::-;29984:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29956:64;;30080:1;30060:17;:21;30052:49;;;;-1:-1:-1;;;30052:49:0;;;;;;;:::i;:::-;30327:17;30311:13;:33;30265:125;;;;-1:-1:-1;;;30265:125:0;;;;;;;:::i;:::-;30486:15;30469:323;30508:13;30503:1;:18;30469:323;;30685:12;;30660:120;;-1:-1:-1;;;;;30685:12:0;:32;30718:12;:10;:12::i;:::-;30732:1;30685:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30753:12;:10;:12::i;:::-;30660:6;:120::i;:::-;30523:3;;;;:::i;:::-;;;;30469:323;;;;29846:953;;;:::o;1900:87::-;1946:7;1973:6;-1:-1:-1;;;;;1973:6:0;1900:87;:::o;26348:88::-;;;-1:-1:-1;;;;;26348:88:0;;:::o;8785:104::-;8841:13;8874:7;8867:14;;;;;:::i;13304:482::-;13424:4;13446:24;13473:11;:25;13485:12;:10;:12::i;:::-;-1:-1:-1;;;;;13473:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;13473:25:0;;;:34;;;;;;;;;;;-1:-1:-1;13540:35:0;;;;13518:122;;;;-1:-1:-1;;;13518:122:0;;;;;;;:::i;:::-;13676:67;13685:12;:10;:12::i;:::-;13699:7;13727:15;13708:16;:34;13676:8;:67::i;:::-;-1:-1:-1;13774:4:0;;13304:482;-1:-1:-1;;;13304:482:0:o;10247:216::-;10369:4;10391:42;10401:12;:10;:12::i;:::-;10415:9;10426:6;10391:9;:42::i;28120:525::-;28412:12;;:29;;;;;-1:-1:-1;;;;;28412:12:0;;;;:20;;:29;;28433:7;;28412:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28396:45:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;28396:45:0;;28374:112;;;;-1:-1:-1;;;28374:112:0;;;;;;;:::i;:::-;28608:29;28615:7;28624:12;:10;:12::i;27384:25::-;;;;:::o;28905:598::-;28981:12;;28953:25;;-1:-1:-1;;;;;28981:12:0;:22;29004:12;:10;:12::i;:::-;28981:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28953:64;;29077:1;29057:17;:21;29049:49;;;;-1:-1:-1;;;29049:49:0;;;;;;;:::i;:::-;29189:9;29184:312;29208:17;29204:1;:21;29184:312;;;29389:12;;29364:120;;-1:-1:-1;;;;;29389:12:0;:32;29422:12;:10;:12::i;29364:120::-;29227:3;;;;:::i;:::-;;;;29184:312;;33830:183;2131:12;:10;:12::i;:::-;-1:-1:-1;;;;;2120:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2120:23:0;;2112:68;;;;-1:-1:-1;;;2112:68:0;;;;;;;:::i;:::-;33994:10:::1;:8;:10::i;:::-;33990:14;::::0;:2:::1;:14;:::i;:::-;33966:39;::::0;:20;:39:::1;:::i;:::-;33945:18;:60:::0;-1:-1:-1;33830:183:0:o;10526:201::-;-1:-1:-1;;;;;10692:18:0;;;10660:7;10692:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10526:201::o;27563:74::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2800:229::-;2131:12;:10;:12::i;:::-;-1:-1:-1;;;;;2120:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2120:23:0;;2112:68;;;;-1:-1:-1;;;2112:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2903:22:0;::::1;2881:110;;;;-1:-1:-1::0;;;2881:110:0::1;;;;;;;:::i;:::-;3002:19;3012:8;3002:9;:19::i;751:98::-:0;831:10;751:98;:::o;17094:380::-;-1:-1:-1;;;;;17230:19:0;;17222:68;;;;-1:-1:-1;;;17222:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17309:21:0;;17301:68;;;;-1:-1:-1;;;17301:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17382:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;17434:32;;;;;17412:6;;17434:32;:::i;:::-;;;;;;;;17094:380;;;:::o;14276:770::-;-1:-1:-1;;;;;14416:20:0;;14408:70;;;;-1:-1:-1;;;14408:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14497:23:0;;14489:71;;;;-1:-1:-1;;;14489:71:0;;;;;;;:::i;:::-;14573:47;14594:6;14602:9;14613:6;14573:20;:47::i;:::-;-1:-1:-1;;;;;14657:17:0;;14633:21;14657:17;;;:9;:17;;;;;;14707:23;;;;14685:111;;;;-1:-1:-1;;;14685:111:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14832:17:0;;;;;;;:9;:17;;;;;;14852:22;;;14832:42;;14896:20;;;;;;;;:30;;14868:6;;14832:17;14896:30;;14868:6;;14896:30;:::i;:::-;;;;;;;;14961:9;-1:-1:-1;;;;;14944:35:0;14953:6;-1:-1:-1;;;;;14944:35:0;;14972:6;14944:35;;;;;;:::i;:::-;;;;;;;;14992:46;15012:6;15020:9;15031:6;14992:19;:46::i;15333:399::-;-1:-1:-1;;;;;15417:21:0;;15409:65;;;;-1:-1:-1;;;15409:65:0;;;;;;;:::i;:::-;15487:49;15516:1;15520:7;15529:6;15487:20;:49::i;:::-;15565:6;15549:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;15582:18:0;;;;;;:9;:18;;;;;:28;;15604:6;;15582:18;:28;;15604:6;;15582:28;:::i;:::-;;;;-1:-1:-1;;15626:37:0;;-1:-1:-1;;;;;15626:37:0;;;15643:1;;15626:37;;;;15656:6;;15626:37;:::i;:::-;;;;;;;;15676:48;15704:1;15708:7;15717:6;15676:19;:48::i;3037:173::-;3093:16;3112:6;;-1:-1:-1;;;;;3129:17:0;;;;;;;;;;3162:40;;3112:6;;;;;;;3162:40;;3093:16;3162:40;3037:173;;:::o;30866:895::-;31119:12;;31108:7;:23;;:48;;;;;31146:10;;31135:7;:21;;31108:48;31086:119;;;;-1:-1:-1;;;31086:119:0;;;;;;;:::i;:::-;31371:6;;31348:30;;;;:22;:30;;;;;;;;:39;;;;;;;;;;;31347:40;31325:115;;;;-1:-1:-1;;;31325:115:0;;;;;;;:::i;:::-;31597:6;;31574:30;;;;:22;:30;;;;;;;;:39;;;;;;;;:46;;;;31616:4;31574:46;;;31734:18;;31716:37;;31722:10;;31716:5;:37::i;18074:125::-;;;;:::o;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:402::-;;;675:2;663:9;654:7;650:23;646:32;643:2;;;696:6;688;681:22;643:2;740:9;727:23;759:33;786:5;759:33;:::i;:::-;811:5;-1:-1:-1;868:2:1;853:18;;840:32;881:35;840:32;881:35;:::i;:::-;935:7;925:17;;;633:315;;;;;:::o;953:470::-;;;;1099:2;1087:9;1078:7;1074:23;1070:32;1067:2;;;1120:6;1112;1105:22;1067:2;1164:9;1151:23;1183:33;1210:5;1183:33;:::i;:::-;1235:5;-1:-1:-1;1292:2:1;1277:18;;1264:32;1305:35;1264:32;1305:35;:::i;:::-;1057:366;;1359:7;;-1:-1:-1;;;1413:2:1;1398:18;;;;1385:32;;1057:366::o;1428:327::-;;;1557:2;1545:9;1536:7;1532:23;1528:32;1525:2;;;1578:6;1570;1563:22;1525:2;1622:9;1609:23;1641:33;1668:5;1641:33;:::i;:::-;1693:5;1745:2;1730:18;;;;1717:32;;-1:-1:-1;;;1515:240:1:o;1760:190::-;;1872:2;1860:9;1851:7;1847:23;1843:32;1840:2;;;1893:6;1885;1878:22;1840:2;-1:-1:-1;1921:23:1;;1830:120;-1:-1:-1;1830:120:1:o;1955:194::-;;2078:2;2066:9;2057:7;2053:23;2049:32;2046:2;;;2099:6;2091;2084:22;2046:2;-1:-1:-1;2127:16:1;;2036:113;-1:-1:-1;2036:113:1:o;2154:258::-;;;2283:2;2271:9;2262:7;2258:23;2254:32;2251:2;;;2304:6;2296;2289:22;2251:2;-1:-1:-1;;2332:23:1;;;2402:2;2387:18;;;2374:32;;-1:-1:-1;2241:171:1:o;2417:226::-;-1:-1:-1;;;;;2581:55:1;;;;2563:74;;2551:2;2536:18;;2518:125::o;2648:297::-;-1:-1:-1;;;;;2840:55:1;;;;2822:74;;2927:2;2912:18;;2905:34;2810:2;2795:18;;2777:168::o;2950:187::-;3115:14;;3108:22;3090:41;;3078:2;3063:18;;3045:92::o;3398:662::-;;3539:2;3568;3557:9;3550:21;3600:6;3594:13;3643:6;3638:2;3627:9;3623:18;3616:34;3668:4;3681:140;3695:6;3692:1;3689:13;3681:140;;;3790:14;;;3786:23;;3780:30;3756:17;;;3775:2;3752:26;3745:66;3710:10;;3681:140;;;3839:6;3836:1;3833:13;3830:2;;;3909:4;3904:2;3895:6;3884:9;3880:22;3876:31;3869:45;3830:2;-1:-1:-1;3976:2:1;3964:15;3981:66;3960:88;3945:104;;;;4051:2;3941:113;;3519:541;-1:-1:-1;;;3519:541:1:o;4065:399::-;4267:2;4249:21;;;4306:2;4286:18;;;4279:30;4345:34;4340:2;4325:18;;4318:62;4416:5;4411:2;4396:18;;4389:33;4454:3;4439:19;;4239:225::o;4469:342::-;4671:2;4653:21;;;4710:2;4690:18;;;4683:30;4749:20;4744:2;4729:18;;4722:48;4802:2;4787:18;;4643:168::o;4816:402::-;5018:2;5000:21;;;5057:2;5037:18;;;5030:30;5096:34;5091:2;5076:18;;5069:62;5167:8;5162:2;5147:18;;5140:36;5208:3;5193:19;;4990:228::o;5223:398::-;5425:2;5407:21;;;5464:2;5444:18;;;5437:30;5503:34;5498:2;5483:18;;5476:62;5574:4;5569:2;5554:18;;5547:32;5611:3;5596:19;;5397:224::o;5626:402::-;5828:2;5810:21;;;5867:2;5847:18;;;5840:30;5906:34;5901:2;5886:18;;5879:62;5977:8;5972:2;5957:18;;5950:36;6018:3;6003:19;;5800:228::o;6033:341::-;6235:2;6217:21;;;6274:2;6254:18;;;6247:30;6313:19;6308:2;6293:18;;6286:47;6365:2;6350:18;;6207:167::o;6379:404::-;6581:2;6563:21;;;6620:2;6600:18;;;6593:30;6659:34;6654:2;6639:18;;6632:62;6730:10;6725:2;6710:18;;6703:38;6773:3;6758:19;;6553:230::o;6788:356::-;6990:2;6972:21;;;7009:18;;;7002:30;7068:34;7063:2;7048:18;;7041:62;7135:2;7120:18;;6962:182::o;7149:401::-;7351:2;7333:21;;;7390:2;7370:18;;;7363:30;7429:34;7424:2;7409:18;;7402:62;7500:7;7495:2;7480:18;;7473:35;7540:3;7525:19;;7323:227::o;7555:349::-;7757:2;7739:21;;;7796:2;7776:18;;;7769:30;7835:27;7830:2;7815:18;;7808:55;7895:2;7880:18;;7729:175::o;7909:400::-;8111:2;8093:21;;;8150:2;8130:18;;;8123:30;8189:34;8184:2;8169:18;;8162:62;8260:6;8255:2;8240:18;;8233:34;8299:3;8284:19;;8083:226::o;8314:345::-;8516:2;8498:21;;;8555:2;8535:18;;;8528:30;8594:23;8589:2;8574:18;;8567:51;8650:2;8635:18;;8488:171::o;8664:339::-;8866:2;8848:21;;;8905:2;8885:18;;;8878:30;8944:17;8939:2;8924:18;;8917:45;8994:2;8979:18;;8838:165::o;9008:401::-;9210:2;9192:21;;;9249:2;9229:18;;;9222:30;9288:34;9283:2;9268:18;;9261:62;9359:7;9354:2;9339:18;;9332:35;9399:3;9384:19;;9182:227::o;9414:355::-;9616:2;9598:21;;;9655:2;9635:18;;;9628:30;9694:33;9689:2;9674:18;;9667:61;9760:2;9745:18;;9588:181::o;9774:177::-;9920:25;;;9908:2;9893:18;;9875:76::o;9956:184::-;10128:4;10116:17;;;;10098:36;;10086:2;10071:18;;10053:87::o;10145:128::-;;10216:1;10212:6;10209:1;10206:13;10203:2;;;10222:18;;:::i;:::-;-1:-1:-1;10258:9:1;;10193:80::o;10278:453::-;10374:6;10397:5;10411:314;10460:1;10497:2;10487:8;10484:16;10474:2;;10504:5;;;10474:2;10545:4;10540:3;10536:14;10530:4;10527:24;10524:2;;;10554:18;;:::i;:::-;10604:2;10594:8;10590:17;10587:2;;;10619:16;;;;10587:2;10698:17;;;;;10658:15;;10411:314;;;10355:376;;;;;;;:::o;10736:208::-;;10823:115;10871:66;10864:4;10854:8;10850:19;10844:4;10949:922;11033:8;11023:2;;-1:-1:-1;11074:1:1;11088:5;;11023:2;11122:4;11112:2;;-1:-1:-1;11159:1:1;11173:5;;11112:2;11204:4;11222:1;11217:59;;;;11290:1;11285:183;;;;11197:271;;11217:59;11247:1;11238:10;;11261:5;;;11285:183;11322:3;11312:8;11309:17;11306:2;;;11329:18;;:::i;:::-;11385:1;11375:8;11371:16;11362:25;;11413:3;11406:5;11403:14;11400:2;;;11420:18;;:::i;:::-;11453:5;;;11197:271;;11552:2;11542:8;11539:16;11533:3;11527:4;11524:13;11520:36;11514:2;11504:8;11501:16;11496:2;11490:4;11487:12;11483:35;11480:77;11477:2;;;-1:-1:-1;11589:19:1;;;11624:14;;;11621:2;;;11641:18;;:::i;:::-;11674:5;;11477:2;11721:42;11759:3;11749:8;11743:4;11740:1;11721:42;:::i;:::-;11796:6;11791:3;11787:16;11778:7;11775:29;11772:2;;;11807:18;;:::i;:::-;11845:20;;11013:858;-1:-1:-1;;;;11013:858:1:o;11876:228::-;;12042:1;11974:66;11970:74;11967:1;11964:81;11959:1;11952:9;11945:17;11941:105;11938:2;;;12049:18;;:::i;:::-;-1:-1:-1;12089:9:1;;11928:176::o;12109:437::-;12194:1;12184:12;;12241:1;12231:12;;;12252:2;;12306:4;12298:6;12294:17;12284:27;;12252:2;12359;12351:6;12348:14;12328:18;12325:38;12322:2;;;12396:77;12393:1;12386:88;12497:4;12494:1;12487:15;12525:4;12522:1;12515:15;12322:2;;12164:382;;;:::o;12551:195::-;;12621:66;12614:5;12611:77;12608:2;;;12691:18;;:::i;:::-;-1:-1:-1;12738:1:1;12727:13;;12598:148::o;12751:184::-;12803:77;12800:1;12793:88;12900:4;12897:1;12890:15;12924:4;12921:1;12914:15;12940:156;-1:-1:-1;;;;;13021:5:1;13017:54;13010:5;13007:65;12997:2;;13086:1;13083;13076:12

Swarm Source

ipfs://baf1cb662cb542597fe9c18796b8cec5da6203b7b07cbc36f28824872427df1e
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.