HYPE Price: $25.02 (+0.53%)
 

Overview

HYPE Balance

HyperEVM LogoHyperEVM LogoHyperEVM Logo0 HYPE

HYPE Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Upgrade To And C...138714622025-09-15 0:38:25133 days ago1757896705IN
0xa66311e0...6eA5F4A26
0 HYPE0.000003640.16090299
Execute138714592025-09-15 0:38:22133 days ago1757896702IN
0xa66311e0...6eA5F4A26
0 HYPE0.000003660.16106827
Execute138714572025-09-15 0:38:20133 days ago1757896700IN
0xa66311e0...6eA5F4A26
0 HYPE0.000003220.14232898
0xee33b7e2138714402025-09-15 0:38:03133 days ago1757896683IN
0xa66311e0...6eA5F4A26
0 HYPE0.000002830.125
0x2a011594138714382025-09-15 0:38:01133 days ago1757896681IN
0xa66311e0...6eA5F4A26
0 HYPE0.000002840.125
0xa0b5ffb0138714342025-09-15 0:37:58133 days ago1757896678IN
0xa66311e0...6eA5F4A26
0 HYPE0.000003060.13542058
Upgrade To And C...138679582025-09-14 23:40:59134 days ago1757893259IN
0xa66311e0...6eA5F4A26
0 HYPE0.000002830.125
Execute138679542025-09-14 23:40:55134 days ago1757893255IN
0xa66311e0...6eA5F4A26
0 HYPE0.000002840.125
Execute138679512025-09-14 23:40:52134 days ago1757893252IN
0xa66311e0...6eA5F4A26
0 HYPE0.000002830.125
0xee33b7e2138679472025-09-14 23:40:48134 days ago1757893248IN
0xa66311e0...6eA5F4A26
0 HYPE0.000002830.125
0x2a011594138679442025-09-14 23:40:45134 days ago1757893245IN
0xa66311e0...6eA5F4A26
0 HYPE0.000002840.125
0xa0b5ffb0138679412025-09-14 23:40:42134 days ago1757893242IN
0xa66311e0...6eA5F4A26
0 HYPE0.000002830.125
Upgrade To138650002025-09-14 22:52:29134 days ago1757890349IN
0xa66311e0...6eA5F4A26
0 HYPE0.000002790.125
Initialize138649972025-09-14 22:52:26134 days ago1757890346IN
0xa66311e0...6eA5F4A26
0 HYPE0.000003080.13785746
Initialize138649952025-09-14 22:52:24134 days ago1757890344IN
0xa66311e0...6eA5F4A26
0 HYPE0.000003090.14053092
Renounce Ownersh...138649932025-09-14 22:52:22134 days ago1757890342IN
0xa66311e0...6eA5F4A26
0 HYPE0.000002950.125
Transfer Ownersh...138649912025-09-14 22:52:20134 days ago1757890340IN
0xa66311e0...6eA5F4A26
0 HYPE0.000003070.125
Change Admin138649882025-09-14 22:52:17134 days ago1757890337IN
0xa66311e0...6eA5F4A26
0 HYPE0.000002790.125
Withdraw132086102025-09-07 11:30:47141 days ago1757244647IN
0xa66311e0...6eA5F4A26
0 HYPE0.000003090.10117312
Set Whitelist Mi...131884432025-09-07 6:00:10141 days ago1757224810IN
0xa66311e0...6eA5F4A26
0 HYPE0.000002520.1
Whitelist Mint131738502025-09-07 2:00:57141 days ago1757210457IN
0xa66311e0...6eA5F4A26
2 HYPE0.000018830.12
Whitelist Mint131503922025-09-06 19:36:23142 days ago1757187383IN
0xa66311e0...6eA5F4A26
2 HYPE0.00002040.13
Whitelist Mint131471892025-09-06 18:43:53142 days ago1757184233IN
0xa66311e0...6eA5F4A26
2 HYPE0.000160121.02
Whitelist Mint131471512025-09-06 18:43:15142 days ago1757184195IN
0xa66311e0...6eA5F4A26
2 HYPE0.000108320.69
Whitelist Mint131393112025-09-06 16:34:44142 days ago1757176484IN
0xa66311e0...6eA5F4A26
2 HYPE0.0021947213.98
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
132086102025-09-07 11:30:47141 days ago1757244647
0xa66311e0...6eA5F4A26
1,122 HYPE
131738502025-09-07 2:00:57141 days ago1757210457
0xa66311e0...6eA5F4A26
0 HYPE
131738502025-09-07 2:00:57141 days ago1757210457
0xa66311e0...6eA5F4A26
0 HYPE
131738502025-09-07 2:00:57141 days ago1757210457
0xa66311e0...6eA5F4A26
0 HYPE
131738502025-09-07 2:00:57141 days ago1757210457
0xa66311e0...6eA5F4A26
0 HYPE
131738502025-09-07 2:00:57141 days ago1757210457
0xa66311e0...6eA5F4A26
0 HYPE
131503922025-09-06 19:36:23142 days ago1757187383
0xa66311e0...6eA5F4A26
0 HYPE
131503922025-09-06 19:36:23142 days ago1757187383
0xa66311e0...6eA5F4A26
0 HYPE
131503922025-09-06 19:36:23142 days ago1757187383
0xa66311e0...6eA5F4A26
0 HYPE
131503922025-09-06 19:36:23142 days ago1757187383
0xa66311e0...6eA5F4A26
0 HYPE
131503922025-09-06 19:36:23142 days ago1757187383
0xa66311e0...6eA5F4A26
0 HYPE
131471892025-09-06 18:43:53142 days ago1757184233
0xa66311e0...6eA5F4A26
0 HYPE
131471892025-09-06 18:43:53142 days ago1757184233
0xa66311e0...6eA5F4A26
0 HYPE
131471892025-09-06 18:43:53142 days ago1757184233
0xa66311e0...6eA5F4A26
0 HYPE
131471892025-09-06 18:43:53142 days ago1757184233
0xa66311e0...6eA5F4A26
0 HYPE
131471892025-09-06 18:43:53142 days ago1757184233
0xa66311e0...6eA5F4A26
0 HYPE
131471512025-09-06 18:43:15142 days ago1757184195
0xa66311e0...6eA5F4A26
0 HYPE
131471512025-09-06 18:43:15142 days ago1757184195
0xa66311e0...6eA5F4A26
0 HYPE
131471512025-09-06 18:43:15142 days ago1757184195
0xa66311e0...6eA5F4A26
0 HYPE
131471512025-09-06 18:43:15142 days ago1757184195
0xa66311e0...6eA5F4A26
0 HYPE
131471512025-09-06 18:43:15142 days ago1757184195
0xa66311e0...6eA5F4A26
0 HYPE
131393112025-09-06 16:34:44142 days ago1757176484
0xa66311e0...6eA5F4A26
0 HYPE
131393112025-09-06 16:34:44142 days ago1757176484
0xa66311e0...6eA5F4A26
0 HYPE
131393112025-09-06 16:34:44142 days ago1757176484
0xa66311e0...6eA5F4A26
0 HYPE
131393112025-09-06 16:34:44142 days ago1757176484
0xa66311e0...6eA5F4A26
0 HYPE
View All Internal Transactions
Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
IllumeownatiMinter

Compiler Version
v0.8.27+commit.40a35a09

Optimization Enabled:
Yes with 30 runs

Other Settings:
paris EvmVersion
File 1 of 4 : IllumeownatiMinter.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";

interface IIllumeownatiNFT {
    function mintTo(address to, uint256 tokenId, uint256 tier) external;
    function airdropMint(address to, uint256 tokenId, uint256 tier) external;
    function maxTokenId() external view returns (uint256);
    function currentTokenId() external view returns (uint256);
    function getTierMaxSupply(uint256 tier) external view returns (uint256);
    function getTierCurrentSupply(uint256 tier) external view returns (uint256);
}

/**
 * @title IllumeownatiMinter
 * @dev Handles public and whitelist minting for IllumeownatiNFT
 */
contract IllumeownatiMinter is Ownable, ReentrancyGuard {
    //VERSION 1.0.0
    uint256 public constant VERSION = 1;
    // Phase enum for different minting phases
    enum Phase {
        PHASE1, // Strict tier matching required
        PHASE2 // Tier inheritance enabled (higher tiers can mint lower)
    }

    // The NFT contract this minter is authorized to mint for
    IIllumeownatiNFT public nftContract;

    // Phase management
    Phase public currentPhase;

    // Minting configuration
    uint256 public publicMintPrice;
    uint256 public whitelistMintPrice;
    bool public publicMintingEnabled;
    bool public whitelistMintingEnabled;

    // Whitelist/tier management
    mapping(address => mapping(uint256 => bool)) public userTiers; // user => tier => eligible
    mapping(address => bool) public hasWhitelistMinted;

    // Public mint limits
    uint256 public maxPublicMintsPerUser;
    mapping(address => uint256) public publicMintsCount;

    // Events
    event NFTContractSet(address indexed nftContract);
    event PhaseUpdated(Phase newPhase);
    event PublicMintPriceSet(uint256 price);
    event WhitelistMintPriceSet(uint256 price);
    event PublicMintingToggled(bool enabled);
    event WhitelistMintingToggled(bool enabled);
    event TierUpdated(address indexed user, uint256 tier, bool eligible);
    event WhitelistMinted(address indexed to, uint256 indexed tokenId, uint256 tier);
    event PublicMinted(address indexed to, uint256 indexed tokenId);
    event MaxPublicMintsPerUserSet(uint256 maxMints);

    // Errors
    error NFTContractNotSet();
    error PublicMintingDisabled();
    error WhitelistMintingDisabled();
    error UserNotEligible();
    error UserAlreadyWhitelistMinted();
    error UserAlreadyPublicMinted();
    error InsufficientPayment();
    error MaxPublicMintsReached();
    error TokenIdExceedsMax();
    error TierSupplyExhausted(uint256 tier);

    /**
     * @dev Constructor
     * @param initialPublicMintPrice Initial public mint price
     * @param initialWhitelistMintPrice Initial whitelist mint price
     * @param initialMaxPublicMintsPerUser Initial max public mints per user
     */
    constructor(
        uint256 initialPublicMintPrice,
        uint256 initialWhitelistMintPrice,
        uint256 initialMaxPublicMintsPerUser
    ) Ownable(msg.sender) {
        publicMintPrice = initialPublicMintPrice;
        whitelistMintPrice = initialWhitelistMintPrice;
        maxPublicMintsPerUser = initialMaxPublicMintsPerUser;
        publicMintingEnabled = false;
        whitelistMintingEnabled = false;
        currentPhase = Phase.PHASE1; // Start in Phase 1
    }

    /**
     * @dev Check if user is eligible for a specific tier based on current phase
     * @param user The user address
     * @param tier The tier to check
     * @return bool Whether user is eligible
     */
    function isUserEligibleForTier(address user, uint256 tier) public view returns (bool) {
        if (currentPhase == Phase.PHASE1) {
            // Phase 1: Strict tier matching - user must be explicitly whitelisted for this tier
            return userTiers[user][tier];
        } else {
            // Phase 2: Tier inheritance - if user has any tier >= target tier, they can mint it
            if (userTiers[user][tier]) {
                return true; // User is explicitly eligible for this tier
            }

            // Check if user has ANY higher tier that allows them to mint this tier
            // Find the highest tier the user has, then check if it's >= target tier
            uint256 userHighestTier = 0;
            for (uint256 checkTier = 5; checkTier >= 1; checkTier--) {
                if (userTiers[user][checkTier]) {
                    userHighestTier = checkTier;
                    break;
                }
            }

            // If user has any tier higher than or equal to target tier, they can mint it
            return userHighestTier >= tier;
        }
    }

    /**
     * @dev Whitelist mint - tier-based minting for whitelisted users
     * @param tier The tier to mint (user must be eligible for this tier)
     */
    function whitelistMint(uint256 tier) external payable nonReentrant {
        if (address(nftContract) == address(0)) revert NFTContractNotSet();
        if (!whitelistMintingEnabled) revert WhitelistMintingDisabled();
        if (!isUserEligibleForTier(msg.sender, tier)) revert UserNotEligible();
        if (hasWhitelistMinted[msg.sender]) revert UserAlreadyWhitelistMinted();
        if (msg.value < whitelistMintPrice) revert InsufficientPayment();

        // Check tier availability
        uint256 maxSupply = nftContract.getTierMaxSupply(tier);
        uint256 currentSupply = nftContract.getTierCurrentSupply(tier);
        if (currentSupply >= maxSupply) revert TierSupplyExhausted(tier);

        uint256 currentTokenId = nftContract.currentTokenId();
        uint256 maxTokenId = nftContract.maxTokenId();

        if (currentTokenId >= maxTokenId) revert TokenIdExceedsMax();

        uint256 tokenId = currentTokenId + 1;

        // Mint through the NFT contract
        nftContract.mintTo(msg.sender, tokenId, tier);

        // Update state
        hasWhitelistMinted[msg.sender] = true;
        // Note: We don't reset tiers after minting, user keeps their eligibility

        emit WhitelistMinted(msg.sender, tokenId, tier);
    }

    /**
     * @dev Public mint - open to anyone (with limits)
     */
    function publicMint() external payable nonReentrant {
        if (address(nftContract) == address(0)) revert NFTContractNotSet();
        if (!publicMintingEnabled) revert PublicMintingDisabled();
        if (msg.value < publicMintPrice) revert InsufficientPayment();
        if (publicMintsCount[msg.sender] >= maxPublicMintsPerUser) revert MaxPublicMintsReached();

        uint256 currentTokenId = nftContract.currentTokenId();
        uint256 maxTokenId = nftContract.maxTokenId();

        if (currentTokenId >= maxTokenId) revert TokenIdExceedsMax();

        uint256 tokenId = currentTokenId + 1;

        // Mint through the NFT contract (tier 0 for public mints)
        nftContract.mintTo(msg.sender, tokenId, 0);

        // Update state
        publicMintsCount[msg.sender]++;

        emit PublicMinted(msg.sender, tokenId);
    }

    // Admin functions
    function setNFTContract(address _nftContract) external onlyOwner {
        nftContract = IIllumeownatiNFT(_nftContract);
        emit NFTContractSet(_nftContract);
    }

    function setPhase(Phase _phase) external onlyOwner {
        currentPhase = _phase;
        emit PhaseUpdated(_phase);
    }

    function setPublicMintPrice(uint256 price) external onlyOwner {
        publicMintPrice = price;
        emit PublicMintPriceSet(price);
    }

    function setWhitelistMintPrice(uint256 price) external onlyOwner {
        whitelistMintPrice = price;
        emit WhitelistMintPriceSet(price);
    }

    function setPublicMintingEnabled(bool enabled) external onlyOwner {
        publicMintingEnabled = enabled;
        emit PublicMintingToggled(enabled);
    }

    function setWhitelistMintingEnabled(bool enabled) external onlyOwner {
        whitelistMintingEnabled = enabled;
        emit WhitelistMintingToggled(enabled);
    }

    function setMaxPublicMintsPerUser(uint256 maxMints) external onlyOwner {
        maxPublicMintsPerUser = maxMints;
        emit MaxPublicMintsPerUserSet(maxMints);
    }

    function setTier(address user, uint256 tier, bool eligible) external onlyOwner {
        userTiers[user][tier] = eligible;
        emit TierUpdated(user, tier, eligible);
    }

    function batchSetTier(address[] memory users, uint256[] memory tiers, bool[] memory eligible) external onlyOwner {
        require(users.length == tiers.length && tiers.length == eligible.length, "Arrays length mismatch");
        for (uint256 i = 0; i < users.length; i++) {
            userTiers[users[i]][tiers[i]] = eligible[i];
            emit TierUpdated(users[i], tiers[i], eligible[i]);
        }
    }

    function withdraw() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    // View functions
    function getCurrentPhase() external view returns (Phase) {
        return currentPhase;
    }

    function getUserTierEligibility(address user, uint256 tier) external view returns (bool) {
        return isUserEligibleForTier(user, tier);
    }

    function getUserEligibleTiers(address user, uint256 maxTier) external view returns (uint256[] memory) {
        uint256 count = 0;
        // First pass: count eligible tiers
        for (uint256 i = 1; i <= maxTier; i++) {
            if (isUserEligibleForTier(user, i)) {
                count++;
            }
        }

        // Second pass: populate array
        uint256[] memory eligibleTiers = new uint256[](count);
        uint256 index = 0;
        for (uint256 i = 1; i <= maxTier; i++) {
            if (isUserEligibleForTier(user, i)) {
                eligibleTiers[index] = i;
                index++;
            }
        }

        return eligibleTiers;
    }

    function getUserHighestTier(address user) external view returns (uint256) {
        for (uint256 tier = 5; tier >= 1; tier--) {
            if (userTiers[user][tier]) {
                return tier;
            }
        }
        return 0; // No tier found
    }

    function getPublicMintsCount(address user) external view returns (uint256) {
        return publicMintsCount[user];
    }

    function canWhitelistMint(address user, uint256 tier) external view returns (bool) {
        return
            whitelistMintingEnabled &&
            isUserEligibleForTier(user, tier) &&
            !hasWhitelistMinted[user] &&
            nftContract.currentTokenId() < nftContract.maxTokenId() &&
            (nftContract.getTierCurrentSupply(tier) < nftContract.getTierMaxSupply(tier));
    }

    function canWhitelistMintAnyTier(address user, uint256 maxTier) external view returns (bool) {
        if (
            !whitelistMintingEnabled ||
            hasWhitelistMinted[user] ||
            nftContract.currentTokenId() >= nftContract.maxTokenId()
        ) {
            return false;
        }

        for (uint256 i = 1; i <= maxTier; i++) {
            if (
                isUserEligibleForTier(user, i) &&
                (nftContract.getTierCurrentSupply(i) < nftContract.getTierMaxSupply(i))
            ) {
                return true;
            }
        }
        return false;
    }

    function canPublicMint(address user) external view returns (bool) {
        return
            publicMintingEnabled &&
            publicMintsCount[user] < maxPublicMintsPerUser &&
            nftContract.currentTokenId() < nftContract.maxTokenId();
    }

    // Tier supply view functions
    function getTierSupplyStatus(
        uint256 tier
    ) external view returns (uint256 maxSupply, uint256 currentSupply, uint256 remaining, bool available) {
        maxSupply = nftContract.getTierMaxSupply(tier);
        currentSupply = nftContract.getTierCurrentSupply(tier);
        remaining = maxSupply - currentSupply; // Calculate remaining supply
        available = currentSupply < maxSupply; // Calculate availability
    }

    // Additional tier management methods for compatibility
    function isTierAvailable(uint256 tier) external view returns (bool) {
        uint256 maxSupply = nftContract.getTierMaxSupply(tier);
        uint256 currentSupply = nftContract.getTierCurrentSupply(tier);
        return currentSupply < maxSupply;
    }

    function getTierRemainingSupply(uint256 tier) external view returns (uint256) {
        uint256 maxSupply = nftContract.getTierMaxSupply(tier);
        uint256 currentSupply = nftContract.getTierCurrentSupply(tier);
        return maxSupply - currentSupply;
    }

    function hasMinted(address user) external view returns (bool) {
        return hasWhitelistMinted[user];
    }

    function getAllTierSupplyStatus()
        external
        view
        returns (
            uint256[] memory tiers,
            uint256[] memory maxSupplies,
            uint256[] memory currentSupplies,
            uint256[] memory remainingSupplies
        )
    {
        tiers = new uint256[](5);
        maxSupplies = new uint256[](5);
        currentSupplies = new uint256[](5);
        remainingSupplies = new uint256[](5);

        for (uint256 i = 0; i < 5; i++) {
            uint256 tier = i + 1;
            tiers[i] = tier;
            maxSupplies[i] = nftContract.getTierMaxSupply(tier);
            currentSupplies[i] = nftContract.getTierCurrentSupply(tier);
            remainingSupplies[i] = maxSupplies[i] - currentSupplies[i];
        }
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.sol";

/**
 * @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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)

pragma solidity ^0.8.20;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,
 * consider using {ReentrancyGuardTransient} instead.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;

    uint256 private _status;

    /**
     * @dev Unauthorized reentrant call.
     */
    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be NOT_ENTERED
        if (_status == ENTERED) {
            revert ReentrancyGuardReentrantCall();
        }

        // Any calls to nonReentrant after this point will fail
        _status = ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == ENTERED;
    }
}

Settings
{
  "viaIR": true,
  "optimizer": {
    "enabled": true,
    "runs": 30
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris"
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"uint256","name":"initialPublicMintPrice","type":"uint256"},{"internalType":"uint256","name":"initialWhitelistMintPrice","type":"uint256"},{"internalType":"uint256","name":"initialMaxPublicMintsPerUser","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InsufficientPayment","type":"error"},{"inputs":[],"name":"MaxPublicMintsReached","type":"error"},{"inputs":[],"name":"NFTContractNotSet","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"PublicMintingDisabled","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"TierSupplyExhausted","type":"error"},{"inputs":[],"name":"TokenIdExceedsMax","type":"error"},{"inputs":[],"name":"UserAlreadyPublicMinted","type":"error"},{"inputs":[],"name":"UserAlreadyWhitelistMinted","type":"error"},{"inputs":[],"name":"UserNotEligible","type":"error"},{"inputs":[],"name":"WhitelistMintingDisabled","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxMints","type":"uint256"}],"name":"MaxPublicMintsPerUserSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"nftContract","type":"address"}],"name":"NFTContractSet","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":false,"internalType":"enum IllumeownatiMinter.Phase","name":"newPhase","type":"uint8"}],"name":"PhaseUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"PublicMintPriceSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"PublicMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"PublicMintingToggled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tier","type":"uint256"},{"indexed":false,"internalType":"bool","name":"eligible","type":"bool"}],"name":"TierUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"WhitelistMintPriceSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tier","type":"uint256"}],"name":"WhitelistMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"WhitelistMintingToggled","type":"event"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"uint256[]","name":"tiers","type":"uint256[]"},{"internalType":"bool[]","name":"eligible","type":"bool[]"}],"name":"batchSetTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"canPublicMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"canWhitelistMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"maxTier","type":"uint256"}],"name":"canWhitelistMintAnyTier","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPhase","outputs":[{"internalType":"enum IllumeownatiMinter.Phase","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllTierSupplyStatus","outputs":[{"internalType":"uint256[]","name":"tiers","type":"uint256[]"},{"internalType":"uint256[]","name":"maxSupplies","type":"uint256[]"},{"internalType":"uint256[]","name":"currentSupplies","type":"uint256[]"},{"internalType":"uint256[]","name":"remainingSupplies","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentPhase","outputs":[{"internalType":"enum IllumeownatiMinter.Phase","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPublicMintsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"getTierRemainingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"getTierSupplyStatus","outputs":[{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"currentSupply","type":"uint256"},{"internalType":"uint256","name":"remaining","type":"uint256"},{"internalType":"bool","name":"available","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"maxTier","type":"uint256"}],"name":"getUserEligibleTiers","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserHighestTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"getUserTierEligibility","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"hasMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasWhitelistMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"isTierAvailable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"isUserEligibleForTier","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPublicMintsPerUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftContract","outputs":[{"internalType":"contract IIllumeownatiNFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"publicMintsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMints","type":"uint256"}],"name":"setMaxPublicMintsPerUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nftContract","type":"address"}],"name":"setNFTContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum IllumeownatiMinter.Phase","name":"_phase","type":"uint8"}],"name":"setPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPublicMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setPublicMintingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"bool","name":"eligible","type":"bool"}],"name":"setTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setWhitelistMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setWhitelistMintingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userTiers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMintingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080346100e257601f61202138819003918201601f19168301916001600160401b038311848410176100e7578084926060946040528339810103126100e257805190604060208201519101519033156100cc5760008054336001600160a01b0319821681178355604051959290916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600180556003556004556008556005805461ffff191690556002805460ff60a01b19169055611f2390816100fe8239f35b631e4fbdf760e01b600052600060045260246000fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608080604052600436101561001357600080fd5b600090813560e01c9081624fc7ce146119c657508063055ad42e14610a4d5780631835dbe61461196657806326092b831461176257806327c1fba81461052e5780632a94caf81461167057806335c6aaf81461165257806338e21cce146116135780633b63c5ca146115c55780633ccfd60b146115825780635d82cf6e146115345780636908d7fb14611321578063715018a6146112c7578063767f0d42146112a957806379a3c00f1461023f5780637a65cdca1461128557806381d0113d1461125f578063868ff4a214610f415780638da5cb5b14610f1a5780638db5e37f14610eb45780638dec9f7a14610e915780639261e60f14610d5e578063961a6b3b14610aa857806399b25a7514610a76578063a3a40ea514610a4d578063a611708e146109ff578063a7ccabdf14610997578063a957764214610889578063bdcc06931461079b578063c03afb5914610721578063cc5c753414610687578063d56d229d1461065e578063d859596914610567578063d8b1856c1461052e578063dc53fd9214610510578063f2fde38b1461048a578063f84c0e4414610244578063fbad7b611461023f578063ffa1ad74146102235763ffead7fe146101d857600080fd5b346102205760403660031901126102205760209060ff906040906001600160a01b03610202611a02565b16815260068452818120602435825284522054166040519015158152f35b80fd5b5034610220578060031936011261022057602060405160018152f35b611a84565b50346102205760403660031901126102205761025e611a02565b6024359160ff60055460081c169182610478575b82610457575b508161038c575b81610292575b6020826040519015158152f35b6002546040516341dbe4eb60e01b8152600481018590526001600160a01b039091169391925090602082602481875afa91821561038157839261034c575b5060209060246040518096819363674db19560e01b835260048301525afa9182156103405791610306575b602092501038610285565b90506020823d602011610338575b8161032160209383611aab565b810103126103335760209151906102fb565b600080fd5b3d9150610314565b604051903d90823e3d90fd5b9091506020813d602011610379575b8161036860209383611aab565b8101031261033357519060206102d0565b3d915061035b565b6040513d85823e3d90fd5b600254604051629a9b7b60e01b81529192506001600160a01b0316602082600481845afa918215610381578392610422575b50906020600492604051938480926348dd18bd60e11b82525afa9182156103815783926103ee575b50109061027f565b9091506020813d60201161041a575b8161040a60209383611aab565b81010312610333575190386103e6565b3d91506103fd565b91506020823d60201161044f575b8161043d60209383611aab565b810103126103335790519060206103be565b3d9150610430565b6001600160a01b031681526007602052604081205460ff1615915038610278565b91506104848383611b62565b91610272565b5034610220576020366003190112610220576104a4611a02565b6104ac611ea2565b6001600160a01b031680156104fc5781546001600160a01b03198116821783556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b631e4fbdf760e01b82526004829052602482fd5b50346102205780600319360112610220576020600354604051908152f35b5034610220576020366003190112610220576020906040906001600160a01b03610556611a02565b168152600983522054604051908152f35b50346102205760203660031901126102205760025460405163674db19560e01b8152600480359082018190529092916001600160a01b031690602084602481855afa938415610381578394610629575b506020906024604051809481936341dbe4eb60e01b835260048301525afa91821561034057916105f6575b60206105ee8385611b48565b604051908152f35b90506020813d602011610621575b8161061160209383611aab565b81010312610333575160206105e2565b3d9150610604565b9093506020813d602011610656575b8161064560209383611aab565b8101031261033357519260206105b7565b3d9150610638565b50346102205780600319360112610220576002546040516001600160a01b039091168152602090f35b5034610220576060366003190112610220576106a1611a02565b60243590604435801515810361071d577fc7ca1b04c28a7e0f9a5d20afc66a9cab8b44210c5dc40f4ffa219f6140c1fa0b916106db611ea2565b6001600160a01b03168085526006602090815260408087208688528252808720805460ff191660ff95151595861617905580519586529085019290925292a280f35b8380fd5b5034610220576020366003190112610220576004356002811015610797576107917f05ac19f4e6db6fd8b645dd056e4842cd2f63e0c6f0568176c17ef60e3c16732d9161076c611ea2565b6002805460ff60a01b191660a083901b60ff60a01b1617905560405191829182611a18565b0390a180f35b5080fd5b5034610220576040366003190112610220576107b5611a02565b602435908260015b8381111561085757506107cf84611ae2565b936107dd6040519586611aab565b8085526107ec601f1991611ae2565b013660208601379060015b83811115610819576040516020808252819061081590820188611a50565b0390f35b6108238183611b62565b610836575b61083190611af9565b6107f7565b9161084f81846108496108319489611b1e565b52611af9565b929050610828565b6108618184611b62565b610874575b61086f90611af9565b6107bd565b9361088161086f91611af9565b949050610866565b50346102205760203660031901126102205760025460405163674db19560e01b8152600480359082018190526001600160a01b039092169291602082602481875afa918215610381578392610962575b506020906024604051809681936341dbe4eb60e01b835260048301525afa918215610340579161092d575b608092506109128282611b48565b91604051928284528160208501526040840152106060820152f35b90506020823d60201161095a575b8161094860209383611aab565b81010312610333576080915190610904565b3d915061093b565b9091506020813d60201161098f575b8161097e60209383611aab565b8101031261033357519060206108d9565b3d9150610971565b5034610220576020366003190112610220576109b1611a02565b6109b9611ea2565b600280546001600160a01b0319166001600160a01b039290921691821790557f5a6a54be6929433a25d1b5103e7dea8d9440b7903216e380344a320ca1cdd85f8280a280f35b5034610220576020366003190112610220577fa60d7d9de84e78e9c22fb52b037fcb15013e91b2008f13db3e4e54feee96e0166020600435610a3f611ea2565b80600455604051908152a180f35b503461022057806003193601126102205761081560ff60025460a01c1660405191829182611a18565b5034610220576040366003190112610220576020610a9e610a95611a02565b60243590611c72565b6040519015158152f35b5034610220576060366003190112610220576004356001600160401b0381116107975736602382011215610797578060040135610ae481611ae2565b91610af26040519384611aab565b8183526024602084019260051b82010190368211610d5a57602401915b818310610d3a575050506024356001600160401b038111610d365736602382011215610d3657806004013590610b4482611ae2565b91610b526040519384611aab565b8083526024602084019160051b83010191368311610d3257602401905b828210610d22575050506044356001600160401b03811161071d573660238201121561071d578060040135610ba381611ae2565b91610bb16040519384611aab565b8183526024602084019260051b82010190368211610d1e57602401915b818310610d0157505050610be0611ea2565b825182518091149081610cf6575b5015610cb857835b8351811015610cb45780610c54610c0f60019385611b1e565b511515838060a01b03610c228489611b1e565b51168852600660205260408820610c398488611b1e565b518952602052604088209060ff801983541691151516179055565b818060a01b03610c648287611b1e565b51167fc7ca1b04c28a7e0f9a5d20afc66a9cab8b44210c5dc40f4ffa219f6140c1fa0b610c918387611b1e565b51610c9c8487611b1e565b5160408051928352901515602083015290a201610bf6565b8480f35b60405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606490fd5b905081511438610bee565b82358015158103610d1a57815260209283019201610bce565b8780fd5b8680fd5b8135815260209182019101610b6f565b8580fd5b8280fd5b82356001600160a01b0381168103610d3257815260209283019201610b0f565b8480fd5b503461022057602036600319011261022057610d78611a02565b60ff600554169081610e71575b5080610d99575b6020906040519015158152f35b50600254604051629a9b7b60e01b815291906001600160a01b0316602083600481845afa928315610e66578293610e31575b50916020600493604051948580926348dd18bd60e11b82525afa9182156103405791610dfc575b6020925010610d8c565b90506020823d602011610e29575b81610e1760209383611aab565b81010312610333576020915190610df2565b3d9150610e0a565b92506020833d602011610e5e575b81610e4c60209383611aab565b81010312610333579151916020610dcb565b3d9150610e3f565b6040513d84823e3d90fd5b6001600160a01b0316825250600960205260408120546008541138610d85565b5034610220578060031936011261022057602060ff600554166040519015158152f35b5034610220576020366003190112610220577f712ea66c7d5e9efc2368410e6e347853e60c21a6961cc8d63eb1da36304d2b476020610ef1611a41565b610ef9611ea2565b151560055461ff008260081b169061ff00191617600555604051908152a180f35b5034610220578060031936011261022057546040516001600160a01b039091168152602090f35b50602036600319011261022057600435610f59611ecb565b6002546001600160a01b03169081156112505760ff60055460081c161561124157610f848133611b62565b1561123257338352600760205260ff6040842054166112235760045434106112145760405163674db19560e01b815260048101829052602081602481865afa9081156111935784916111e2575b506040516341dbe4eb60e01b815260048101839052602081602481875afa9081156111545785916111b0575b50101561119e57604051629a9b7b60e01b815291602083600481845afa92831561119357849361115f575b506040516348dd18bd60e11b8152602081600481855afa908115611154578591611122575b5083101561111357600183018093116110ff578084913b1561079757818091606460405180948193632baf2acb60e01b83523360048401528960248401528860448401525af18015610e66576110ea575b5050338352600760205260408320600160ff198254161790556040519081527fb7df065473d5cf63ef5cf9190dbd326ea5e6fbfe4a0971f4920e430bbfd5a93860203392a36001805580f35b816110f491611aab565b610d3657823861109e565b634e487b7160e01b84526011600452602484fd5b633e67a62960e01b8452600484fd5b90506020813d60201161114c575b8161113d60209383611aab565b8101031261033357513861104d565b3d9150611130565b6040513d87823e3d90fd5b9092506020813d60201161118b575b8161117b60209383611aab565b8101031261033357519138611028565b3d915061116e565b6040513d86823e3d90fd5b637a9ad41160e11b8352600452602482fd5b90506020813d6020116111da575b816111cb60209383611aab565b81010312610333575138610ffd565b3d91506111be565b90506020813d60201161120c575b816111fd60209383611aab565b81010312610333575138610fd1565b3d91506111f0565b63cd1c886760e01b8352600483fd5b63220e7afb60e21b8352600483fd5b63267c16a760e21b8352600483fd5b63a6cd5da360e01b8352600483fd5b634036ad5b60e01b8352600483fd5b5034610220578060031936011261022057602060ff60055460081c166040519015158152f35b50346102205760203660031901126102205760206105ee6112a4611a02565b611c22565b50346102205780600319360112610220576020600854604051908152f35b50346102205780600319360112610220576112e0611ea2565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461022057806003193601126102205760405160c06113418183611aab565b6005825260a036602084013760405161135a8282611aab565b6005815260a0366020830137604051936113748386611aab565b6005855260a03660208701376040519261138e8185611aab565b600584525060a03660208501376002546001600160a01b031690805b60058110611400576113d686610815876113f28b6113e48a604051978897608089526080890190611a50565b908782036020890152611a50565b908582036040870152611a50565b908382036060850152611a50565b600181019081811161152057816114178289611b1e565b5260405163674db19560e01b815260048101839052602081602481885afa9081156111935784916114ed575b5061144e8287611b1e565b52604051916341dbe4eb60e01b83526004830152602082602481875afa80156103815783906114b7575b60019250611486828a611b1e565b526114a66114948287611b1e565b5161149f838b611b1e565b5190611b48565b6114b08288611b1e565b52016113aa565b509060203d81116114e6575b6114cd8183611aab565b6020826000928101031261022057509060019151611478565b503d6114c3565b905060203d8111611519575b6115038183611aab565b6020826000928101031261022057505138611443565b503d6114f9565b634e487b7160e01b83526011600452602483fd5b5034610220576020366003190112610220577fea35c277f8aa5dadb5606cb9381b835584be45718058635708d4e96947f3cacb6020600435611574611ea2565b80600355604051908152a180f35b503461022057806003193601126102205761159b611ea2565b8080808060018060a01b0381541647908282156115bc575bf1156103405780f35b506108fc6115b3565b5034610220576020366003190112610220577f8e4f62dae3243915f00f26e529faada23d8072691f8e90952f49326f151e0a886020600435611605611ea2565b80600855604051908152a180f35b50346102205760203660031901126102205760209060ff906040906001600160a01b0361163e611a02565b168152600784522054166040519015158152f35b50346102205780600319360112610220576020600454604051908152f35b50346102205760203660031901126102205760025460405163674db19560e01b8152600480359082018190526001600160a01b039092169291602082602481875afa91821561038157839261172d575b506020906024604051809681936341dbe4eb60e01b835260048301525afa91821561034057916116f8575b6020925060405191108152f35b90506020823d602011611725575b8161171360209383611aab565b810103126103335760209151906116eb565b3d9150611706565b9091506020813d60201161175a575b8161174960209383611aab565b8101031261033357519060206116c0565b3d915061173c565b508060031936011261022057611776611ecb565b6002546001600160a01b03169081156119575760ff60055416156119485760035434106119395733815260096020526040812054600854111561192a57604051629a9b7b60e01b815291602083600481845afa928315610e665782936118f6575b506040516348dd18bd60e11b8152602081600481855afa9081156103815783916118c4575b508310156118b557600183018093116118a157803b1561079757818091606460405180948193632baf2acb60e01b83523360048401528860248401528160448401525af18015610e6657611891575b50903382526009602052604082206118638154611af9565b9055337fab9980fb1d2916bce9017edd1be458e3f56d0899b3367cb3a8be97483fbe069b8380a36001805580f35b8161189b91611aab565b3861184b565b634e487b7160e01b82526011600452602482fd5b633e67a62960e01b8252600482fd5b90506020813d6020116118ee575b816118df60209383611aab565b81010312610d365751386117fc565b3d91506118d2565b9092506020813d602011611922575b8161191260209383611aab565b81010312610797575191386117d7565b3d9150611905565b636797856560e11b8152600490fd5b63cd1c886760e01b8152600490fd5b63ebe2300160e01b8152600490fd5b634036ad5b60e01b8152600490fd5b5034610220576020366003190112610220577fc977af333cf8813c2d0975c679d4face4e304c8f859030b4379c4b21c84963a260206119a3611a41565b6119ab611ea2565b151560ff196005541660ff821617600555604051908152a180f35b9050346107975760203660031901126107975760209160ff906040906001600160a01b036119f2611a02565b1681526007855220541615158152f35b600435906001600160a01b038216820361033357565b919060208301926002821015611a2b5752565b634e487b7160e01b600052602160045260246000fd5b60043590811515820361033357565b906020808351928381520192019060005b818110611a6e5750505090565b8251845260209384019390920191600101611a61565b34610333576040366003190112610333576020610a9e611aa2611a02565b60243590611b62565b90601f801991011681019081106001600160401b03821117611acc57604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111611acc5760051b60200190565b6000198114611b085760010190565b634e487b7160e01b600052601160045260246000fd5b8051821015611b325760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b91908203918211611b0857565b8015611b08576000190190565b60ff60025460a01c166002811015611a2b57611ba05760018060a01b0316600052600660205260406000209060005260205260ff6040600020541690565b60018060a01b031680600052600660205260406000208260005260205260ff60406000205416611c1b5760009060055b6001811015611be1575b5050101590565b81600052600660205260406000208160005260205260ff60406000205416611c1157611c0c90611b55565b611bd0565b9150503880611bda565b5050600190565b60055b6001811015611c35575050600090565b60018060a01b038216600052600660205260406000208160005260205260ff60406000205416611c6d57611c6890611b55565b611c25565b905090565b60ff60055460081c16158015611e80575b8015611db4575b611dad5760015b82811115611ca157505050600090565b611cab8183611b62565b80611ccb575b611cc357611cbe90611af9565b611c91565b505050600190565b506002546040516341dbe4eb60e01b8152600481018390526001600160a01b0390911690602081602481855afa908115611d6f57600091611d7b575b5060206024926040519384809263674db19560e01b82528760048301525afa918215611d6f57600092611d3c575b5010611cb1565b90916020823d8211611d67575b81611d5660209383611aab565b810103126102205750519038611d35565b3d9150611d49565b6040513d6000823e3d90fd5b906020823d8211611da5575b81611d9460209383611aab565b810103126102205750516020611d07565b3d9150611d87565b5050600090565b50600254604051629a9b7b60e01b8152906001600160a01b0316602082600481845afa918215611d6f57600092611e4b575b50906020600492604051938480926348dd18bd60e11b82525afa918215611d6f57600092611e17575b501015611c8a565b9091506020813d602011611e43575b81611e3360209383611aab565b8101031261033357519038611e0f565b3d9150611e26565b91506020823d602011611e78575b81611e6660209383611aab565b81010312610333579051906020611de6565b3d9150611e59565b506001600160a01b03811660009081526007602052604090205460ff16611c83565b6000546001600160a01b03163303611eb657565b63118cdaa760e01b6000523360045260246000fd5b600260015414611edc576002600155565b633ee5aeb560e01b60005260046000fdfea2646970667358221220df22dc4abd295cd7d4adc9e7cac875d3f49d1228b1204ddb92bd6bb7d453f9e564736f6c634300081b00330000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000000000000000000002

Deployed Bytecode

0x608080604052600436101561001357600080fd5b600090813560e01c9081624fc7ce146119c657508063055ad42e14610a4d5780631835dbe61461196657806326092b831461176257806327c1fba81461052e5780632a94caf81461167057806335c6aaf81461165257806338e21cce146116135780633b63c5ca146115c55780633ccfd60b146115825780635d82cf6e146115345780636908d7fb14611321578063715018a6146112c7578063767f0d42146112a957806379a3c00f1461023f5780637a65cdca1461128557806381d0113d1461125f578063868ff4a214610f415780638da5cb5b14610f1a5780638db5e37f14610eb45780638dec9f7a14610e915780639261e60f14610d5e578063961a6b3b14610aa857806399b25a7514610a76578063a3a40ea514610a4d578063a611708e146109ff578063a7ccabdf14610997578063a957764214610889578063bdcc06931461079b578063c03afb5914610721578063cc5c753414610687578063d56d229d1461065e578063d859596914610567578063d8b1856c1461052e578063dc53fd9214610510578063f2fde38b1461048a578063f84c0e4414610244578063fbad7b611461023f578063ffa1ad74146102235763ffead7fe146101d857600080fd5b346102205760403660031901126102205760209060ff906040906001600160a01b03610202611a02565b16815260068452818120602435825284522054166040519015158152f35b80fd5b5034610220578060031936011261022057602060405160018152f35b611a84565b50346102205760403660031901126102205761025e611a02565b6024359160ff60055460081c169182610478575b82610457575b508161038c575b81610292575b6020826040519015158152f35b6002546040516341dbe4eb60e01b8152600481018590526001600160a01b039091169391925090602082602481875afa91821561038157839261034c575b5060209060246040518096819363674db19560e01b835260048301525afa9182156103405791610306575b602092501038610285565b90506020823d602011610338575b8161032160209383611aab565b810103126103335760209151906102fb565b600080fd5b3d9150610314565b604051903d90823e3d90fd5b9091506020813d602011610379575b8161036860209383611aab565b8101031261033357519060206102d0565b3d915061035b565b6040513d85823e3d90fd5b600254604051629a9b7b60e01b81529192506001600160a01b0316602082600481845afa918215610381578392610422575b50906020600492604051938480926348dd18bd60e11b82525afa9182156103815783926103ee575b50109061027f565b9091506020813d60201161041a575b8161040a60209383611aab565b81010312610333575190386103e6565b3d91506103fd565b91506020823d60201161044f575b8161043d60209383611aab565b810103126103335790519060206103be565b3d9150610430565b6001600160a01b031681526007602052604081205460ff1615915038610278565b91506104848383611b62565b91610272565b5034610220576020366003190112610220576104a4611a02565b6104ac611ea2565b6001600160a01b031680156104fc5781546001600160a01b03198116821783556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b631e4fbdf760e01b82526004829052602482fd5b50346102205780600319360112610220576020600354604051908152f35b5034610220576020366003190112610220576020906040906001600160a01b03610556611a02565b168152600983522054604051908152f35b50346102205760203660031901126102205760025460405163674db19560e01b8152600480359082018190529092916001600160a01b031690602084602481855afa938415610381578394610629575b506020906024604051809481936341dbe4eb60e01b835260048301525afa91821561034057916105f6575b60206105ee8385611b48565b604051908152f35b90506020813d602011610621575b8161061160209383611aab565b81010312610333575160206105e2565b3d9150610604565b9093506020813d602011610656575b8161064560209383611aab565b8101031261033357519260206105b7565b3d9150610638565b50346102205780600319360112610220576002546040516001600160a01b039091168152602090f35b5034610220576060366003190112610220576106a1611a02565b60243590604435801515810361071d577fc7ca1b04c28a7e0f9a5d20afc66a9cab8b44210c5dc40f4ffa219f6140c1fa0b916106db611ea2565b6001600160a01b03168085526006602090815260408087208688528252808720805460ff191660ff95151595861617905580519586529085019290925292a280f35b8380fd5b5034610220576020366003190112610220576004356002811015610797576107917f05ac19f4e6db6fd8b645dd056e4842cd2f63e0c6f0568176c17ef60e3c16732d9161076c611ea2565b6002805460ff60a01b191660a083901b60ff60a01b1617905560405191829182611a18565b0390a180f35b5080fd5b5034610220576040366003190112610220576107b5611a02565b602435908260015b8381111561085757506107cf84611ae2565b936107dd6040519586611aab565b8085526107ec601f1991611ae2565b013660208601379060015b83811115610819576040516020808252819061081590820188611a50565b0390f35b6108238183611b62565b610836575b61083190611af9565b6107f7565b9161084f81846108496108319489611b1e565b52611af9565b929050610828565b6108618184611b62565b610874575b61086f90611af9565b6107bd565b9361088161086f91611af9565b949050610866565b50346102205760203660031901126102205760025460405163674db19560e01b8152600480359082018190526001600160a01b039092169291602082602481875afa918215610381578392610962575b506020906024604051809681936341dbe4eb60e01b835260048301525afa918215610340579161092d575b608092506109128282611b48565b91604051928284528160208501526040840152106060820152f35b90506020823d60201161095a575b8161094860209383611aab565b81010312610333576080915190610904565b3d915061093b565b9091506020813d60201161098f575b8161097e60209383611aab565b8101031261033357519060206108d9565b3d9150610971565b5034610220576020366003190112610220576109b1611a02565b6109b9611ea2565b600280546001600160a01b0319166001600160a01b039290921691821790557f5a6a54be6929433a25d1b5103e7dea8d9440b7903216e380344a320ca1cdd85f8280a280f35b5034610220576020366003190112610220577fa60d7d9de84e78e9c22fb52b037fcb15013e91b2008f13db3e4e54feee96e0166020600435610a3f611ea2565b80600455604051908152a180f35b503461022057806003193601126102205761081560ff60025460a01c1660405191829182611a18565b5034610220576040366003190112610220576020610a9e610a95611a02565b60243590611c72565b6040519015158152f35b5034610220576060366003190112610220576004356001600160401b0381116107975736602382011215610797578060040135610ae481611ae2565b91610af26040519384611aab565b8183526024602084019260051b82010190368211610d5a57602401915b818310610d3a575050506024356001600160401b038111610d365736602382011215610d3657806004013590610b4482611ae2565b91610b526040519384611aab565b8083526024602084019160051b83010191368311610d3257602401905b828210610d22575050506044356001600160401b03811161071d573660238201121561071d578060040135610ba381611ae2565b91610bb16040519384611aab565b8183526024602084019260051b82010190368211610d1e57602401915b818310610d0157505050610be0611ea2565b825182518091149081610cf6575b5015610cb857835b8351811015610cb45780610c54610c0f60019385611b1e565b511515838060a01b03610c228489611b1e565b51168852600660205260408820610c398488611b1e565b518952602052604088209060ff801983541691151516179055565b818060a01b03610c648287611b1e565b51167fc7ca1b04c28a7e0f9a5d20afc66a9cab8b44210c5dc40f4ffa219f6140c1fa0b610c918387611b1e565b51610c9c8487611b1e565b5160408051928352901515602083015290a201610bf6565b8480f35b60405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606490fd5b905081511438610bee565b82358015158103610d1a57815260209283019201610bce565b8780fd5b8680fd5b8135815260209182019101610b6f565b8580fd5b8280fd5b82356001600160a01b0381168103610d3257815260209283019201610b0f565b8480fd5b503461022057602036600319011261022057610d78611a02565b60ff600554169081610e71575b5080610d99575b6020906040519015158152f35b50600254604051629a9b7b60e01b815291906001600160a01b0316602083600481845afa928315610e66578293610e31575b50916020600493604051948580926348dd18bd60e11b82525afa9182156103405791610dfc575b6020925010610d8c565b90506020823d602011610e29575b81610e1760209383611aab565b81010312610333576020915190610df2565b3d9150610e0a565b92506020833d602011610e5e575b81610e4c60209383611aab565b81010312610333579151916020610dcb565b3d9150610e3f565b6040513d84823e3d90fd5b6001600160a01b0316825250600960205260408120546008541138610d85565b5034610220578060031936011261022057602060ff600554166040519015158152f35b5034610220576020366003190112610220577f712ea66c7d5e9efc2368410e6e347853e60c21a6961cc8d63eb1da36304d2b476020610ef1611a41565b610ef9611ea2565b151560055461ff008260081b169061ff00191617600555604051908152a180f35b5034610220578060031936011261022057546040516001600160a01b039091168152602090f35b50602036600319011261022057600435610f59611ecb565b6002546001600160a01b03169081156112505760ff60055460081c161561124157610f848133611b62565b1561123257338352600760205260ff6040842054166112235760045434106112145760405163674db19560e01b815260048101829052602081602481865afa9081156111935784916111e2575b506040516341dbe4eb60e01b815260048101839052602081602481875afa9081156111545785916111b0575b50101561119e57604051629a9b7b60e01b815291602083600481845afa92831561119357849361115f575b506040516348dd18bd60e11b8152602081600481855afa908115611154578591611122575b5083101561111357600183018093116110ff578084913b1561079757818091606460405180948193632baf2acb60e01b83523360048401528960248401528860448401525af18015610e66576110ea575b5050338352600760205260408320600160ff198254161790556040519081527fb7df065473d5cf63ef5cf9190dbd326ea5e6fbfe4a0971f4920e430bbfd5a93860203392a36001805580f35b816110f491611aab565b610d3657823861109e565b634e487b7160e01b84526011600452602484fd5b633e67a62960e01b8452600484fd5b90506020813d60201161114c575b8161113d60209383611aab565b8101031261033357513861104d565b3d9150611130565b6040513d87823e3d90fd5b9092506020813d60201161118b575b8161117b60209383611aab565b8101031261033357519138611028565b3d915061116e565b6040513d86823e3d90fd5b637a9ad41160e11b8352600452602482fd5b90506020813d6020116111da575b816111cb60209383611aab565b81010312610333575138610ffd565b3d91506111be565b90506020813d60201161120c575b816111fd60209383611aab565b81010312610333575138610fd1565b3d91506111f0565b63cd1c886760e01b8352600483fd5b63220e7afb60e21b8352600483fd5b63267c16a760e21b8352600483fd5b63a6cd5da360e01b8352600483fd5b634036ad5b60e01b8352600483fd5b5034610220578060031936011261022057602060ff60055460081c166040519015158152f35b50346102205760203660031901126102205760206105ee6112a4611a02565b611c22565b50346102205780600319360112610220576020600854604051908152f35b50346102205780600319360112610220576112e0611ea2565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461022057806003193601126102205760405160c06113418183611aab565b6005825260a036602084013760405161135a8282611aab565b6005815260a0366020830137604051936113748386611aab565b6005855260a03660208701376040519261138e8185611aab565b600584525060a03660208501376002546001600160a01b031690805b60058110611400576113d686610815876113f28b6113e48a604051978897608089526080890190611a50565b908782036020890152611a50565b908582036040870152611a50565b908382036060850152611a50565b600181019081811161152057816114178289611b1e565b5260405163674db19560e01b815260048101839052602081602481885afa9081156111935784916114ed575b5061144e8287611b1e565b52604051916341dbe4eb60e01b83526004830152602082602481875afa80156103815783906114b7575b60019250611486828a611b1e565b526114a66114948287611b1e565b5161149f838b611b1e565b5190611b48565b6114b08288611b1e565b52016113aa565b509060203d81116114e6575b6114cd8183611aab565b6020826000928101031261022057509060019151611478565b503d6114c3565b905060203d8111611519575b6115038183611aab565b6020826000928101031261022057505138611443565b503d6114f9565b634e487b7160e01b83526011600452602483fd5b5034610220576020366003190112610220577fea35c277f8aa5dadb5606cb9381b835584be45718058635708d4e96947f3cacb6020600435611574611ea2565b80600355604051908152a180f35b503461022057806003193601126102205761159b611ea2565b8080808060018060a01b0381541647908282156115bc575bf1156103405780f35b506108fc6115b3565b5034610220576020366003190112610220577f8e4f62dae3243915f00f26e529faada23d8072691f8e90952f49326f151e0a886020600435611605611ea2565b80600855604051908152a180f35b50346102205760203660031901126102205760209060ff906040906001600160a01b0361163e611a02565b168152600784522054166040519015158152f35b50346102205780600319360112610220576020600454604051908152f35b50346102205760203660031901126102205760025460405163674db19560e01b8152600480359082018190526001600160a01b039092169291602082602481875afa91821561038157839261172d575b506020906024604051809681936341dbe4eb60e01b835260048301525afa91821561034057916116f8575b6020925060405191108152f35b90506020823d602011611725575b8161171360209383611aab565b810103126103335760209151906116eb565b3d9150611706565b9091506020813d60201161175a575b8161174960209383611aab565b8101031261033357519060206116c0565b3d915061173c565b508060031936011261022057611776611ecb565b6002546001600160a01b03169081156119575760ff60055416156119485760035434106119395733815260096020526040812054600854111561192a57604051629a9b7b60e01b815291602083600481845afa928315610e665782936118f6575b506040516348dd18bd60e11b8152602081600481855afa9081156103815783916118c4575b508310156118b557600183018093116118a157803b1561079757818091606460405180948193632baf2acb60e01b83523360048401528860248401528160448401525af18015610e6657611891575b50903382526009602052604082206118638154611af9565b9055337fab9980fb1d2916bce9017edd1be458e3f56d0899b3367cb3a8be97483fbe069b8380a36001805580f35b8161189b91611aab565b3861184b565b634e487b7160e01b82526011600452602482fd5b633e67a62960e01b8252600482fd5b90506020813d6020116118ee575b816118df60209383611aab565b81010312610d365751386117fc565b3d91506118d2565b9092506020813d602011611922575b8161191260209383611aab565b81010312610797575191386117d7565b3d9150611905565b636797856560e11b8152600490fd5b63cd1c886760e01b8152600490fd5b63ebe2300160e01b8152600490fd5b634036ad5b60e01b8152600490fd5b5034610220576020366003190112610220577fc977af333cf8813c2d0975c679d4face4e304c8f859030b4379c4b21c84963a260206119a3611a41565b6119ab611ea2565b151560ff196005541660ff821617600555604051908152a180f35b9050346107975760203660031901126107975760209160ff906040906001600160a01b036119f2611a02565b1681526007855220541615158152f35b600435906001600160a01b038216820361033357565b919060208301926002821015611a2b5752565b634e487b7160e01b600052602160045260246000fd5b60043590811515820361033357565b906020808351928381520192019060005b818110611a6e5750505090565b8251845260209384019390920191600101611a61565b34610333576040366003190112610333576020610a9e611aa2611a02565b60243590611b62565b90601f801991011681019081106001600160401b03821117611acc57604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111611acc5760051b60200190565b6000198114611b085760010190565b634e487b7160e01b600052601160045260246000fd5b8051821015611b325760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b91908203918211611b0857565b8015611b08576000190190565b60ff60025460a01c166002811015611a2b57611ba05760018060a01b0316600052600660205260406000209060005260205260ff6040600020541690565b60018060a01b031680600052600660205260406000208260005260205260ff60406000205416611c1b5760009060055b6001811015611be1575b5050101590565b81600052600660205260406000208160005260205260ff60406000205416611c1157611c0c90611b55565b611bd0565b9150503880611bda565b5050600190565b60055b6001811015611c35575050600090565b60018060a01b038216600052600660205260406000208160005260205260ff60406000205416611c6d57611c6890611b55565b611c25565b905090565b60ff60055460081c16158015611e80575b8015611db4575b611dad5760015b82811115611ca157505050600090565b611cab8183611b62565b80611ccb575b611cc357611cbe90611af9565b611c91565b505050600190565b506002546040516341dbe4eb60e01b8152600481018390526001600160a01b0390911690602081602481855afa908115611d6f57600091611d7b575b5060206024926040519384809263674db19560e01b82528760048301525afa918215611d6f57600092611d3c575b5010611cb1565b90916020823d8211611d67575b81611d5660209383611aab565b810103126102205750519038611d35565b3d9150611d49565b6040513d6000823e3d90fd5b906020823d8211611da5575b81611d9460209383611aab565b810103126102205750516020611d07565b3d9150611d87565b5050600090565b50600254604051629a9b7b60e01b8152906001600160a01b0316602082600481845afa918215611d6f57600092611e4b575b50906020600492604051938480926348dd18bd60e11b82525afa918215611d6f57600092611e17575b501015611c8a565b9091506020813d602011611e43575b81611e3360209383611aab565b8101031261033357519038611e0f565b3d9150611e26565b91506020823d602011611e78575b81611e6660209383611aab565b81010312610333579051906020611de6565b3d9150611e59565b506001600160a01b03811660009081526007602052604090205460ff16611c83565b6000546001600160a01b03163303611eb657565b63118cdaa760e01b6000523360045260246000fd5b600260015414611edc576002600155565b633ee5aeb560e01b60005260046000fdfea2646970667358221220df22dc4abd295cd7d4adc9e7cac875d3f49d1228b1204ddb92bd6bb7d453f9e564736f6c634300081b0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000000000000000000002

-----Decoded View---------------
Arg [0] : initialPublicMintPrice (uint256): 4000000000000000000
Arg [1] : initialWhitelistMintPrice (uint256): 4000000000000000000
Arg [2] : initialMaxPublicMintsPerUser (uint256): 2

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000003782dace9d900000
Arg [1] : 0000000000000000000000000000000000000000000000003782dace9d900000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000002


Block Transaction Gas Used Reward
view all blocks ##produced##

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.