ETH Price: $3,388.65 (-1.29%)

Contract

0xbB207aE064e650eE43b98d6bacE97201502BC14e
 

Overview

ETH Balance

5.15812 ETH

Eth Value

$17,479.06 (@ $3,388.65/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Redeem Special Z...204146682024-07-29 20:39:23120 days ago1722285563IN
0xbB207aE0...1502BC14e
0 ETH0.00025182.61545508
Buy Single With ...200942782024-06-15 2:39:11165 days ago1718419151IN
0xbB207aE0...1502BC14e
0.01234 ETH0.000343853.21152527
Buy Single With ...200657712024-06-11 3:01:59169 days ago1718074919IN
0xbB207aE0...1502BC14e
0.02468 ETH0.00093568.73830196
Buy Single With ...200559052024-06-09 17:57:47170 days ago1717955867IN
0xbB207aE0...1502BC14e
0.02468 ETH0.000773757.56580921
Buy Single With ...200516222024-06-09 3:36:23171 days ago1717904183IN
0xbB207aE0...1502BC14e
0.02468 ETH0.000399783.73382789
Redeem Special Z...198613602024-05-13 13:21:47197 days ago1715606507IN
0xbB207aE0...1502BC14e
0 ETH0.0009943511.84097504
Buy Single With ...197323622024-04-25 12:24:35215 days ago1714047875IN
0xbB207aE0...1502BC14e
0.02468 ETH0.0010430510.1989906
Buy Single With ...197321842024-04-25 11:48:47215 days ago1714045727IN
0xbB207aE0...1502BC14e
0.01234 ETH0.0010944210.70135497
Buy Single With ...197304302024-04-25 5:55:35215 days ago1714024535IN
0xbB207aE0...1502BC14e
0.1234 ETH0.000647656.04887654
Redeem Special Z...197105632024-04-22 11:12:59218 days ago1713784379IN
0xbB207aE0...1502BC14e
0 ETH0.000678298.07726729
Redeem Special Z...197105622024-04-22 11:12:47218 days ago1713784367IN
0xbB207aE0...1502BC14e
0 ETH0.000696398.29273558
Buy Single With ...194925902024-03-22 20:38:11249 days ago1711139891IN
0xbB207aE0...1502BC14e
0.01234 ETH0.0022029320.57473211
Buy Single With ...194924782024-03-22 20:14:59249 days ago1711138499IN
0xbB207aE0...1502BC14e
0.01234 ETH0.0021967821.48027943
Redeem Special Z...194042842024-03-10 11:05:59261 days ago1710068759IN
0xbB207aE0...1502BC14e
0 ETH0.0043446342.98380219
Buy Family Set W...193923512024-03-08 18:51:23263 days ago1709923883IN
0xbB207aE0...1502BC14e
0.1234 ETH0.0292149270.94995678
Buy Single With ...191471492024-02-03 10:10:11297 days ago1706955011IN
0xbB207aE0...1502BC14e
0.01234 ETH0.0016004214.94748941
Redeem Special Z...190967522024-01-27 8:33:35304 days ago1706344415IN
0xbB207aE0...1502BC14e
0 ETH0.0011417114.41991616
Redeem Special Z...190967502024-01-27 8:33:11304 days ago1706344391IN
0xbB207aE0...1502BC14e
0 ETH0.001268615.10670724
Buy Family Set W...189133432024-01-01 15:02:47330 days ago1704121367IN
0xbB207aE0...1502BC14e
0.1234 ETH0.0070376718.05142254
Buy Single With ...189125212024-01-01 12:15:59330 days ago1704111359IN
0xbB207aE0...1502BC14e
0.01234 ETH0.0009053610.06301056
Buy Single With ...189125162024-01-01 12:14:59330 days ago1704111299IN
0xbB207aE0...1502BC14e
0.01234 ETH0.0011955911.69061871
Buy Single With ...186212322023-11-21 16:09:11371 days ago1700582951IN
0xbB207aE0...1502BC14e
0.01234 ETH0.0058093354.25739608
Redeem Special Z...185602262023-11-13 3:12:47380 days ago1699845167IN
0xbB207aE0...1502BC14e
0 ETH0.0034659336
Buy Single With ...185577192023-11-12 18:48:47380 days ago1699814927IN
0xbB207aE0...1502BC14e
0.01234 ETH0.0039885339
Redeem Special Z...185550792023-11-12 9:56:23380 days ago1699782983IN
0xbB207aE0...1502BC14e
0 ETH0.002048921.28158625
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
174441162023-06-09 17:21:23536 days ago1686331283
0xbB207aE0...1502BC14e
139.23222 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ZogzFunSales

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion
File 1 of 5 : ZogzFunSales.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

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

interface IPepeEditions {
    function burn(address __from, uint256 __id, uint256 __amount) external;
}

interface IZogzEditions {
    function mint(address __account, uint256 __id, uint256 __amount) external;

    function mintBatch(
        address __account,
        uint256[] memory __ids,
        uint256[] memory __amounts
    ) external;
}

contract ZogzFunSales is Ownable, Pausable, ReentrancyGuard {
    error AmountExceedsTransactionLimit();
    error BurnAmountDoesNotMatch();
    error BurnAmountMustBeExact();
    error DayNotFound();
    error FamilySetAlreadyExists();
    error Forbidden();
    error HasEnded();
    error HasNotEnded();
    error HasNotStarted();
    error IncorrectPrice();
    error InvalidAddress();
    error InvalidAmount();
    error InvalidBurnAmount();
    error PepeEditionNotFound();
    error WithdrawFailed();
    error ZogzEditionNotFound();

    event DailySetPurchase(address __account, uint256 __day, uint256 __amount);
    event FamilySets(Family[] __families, uint256[][] __ids);
    event FamilySetPurchase(
        address __account,
        Family __family,
        uint256 __amount
    );
    event FullSetPurchase(address __account, uint256 __amount);
    event Redemption(address __account, Special __special, uint256 __amount);
    event SinglePurchase(
        address __account,
        uint256 __tokenID,
        uint256 __amount
    );
    event TransactionLimit(uint256 __transactionLimit);
    event Withdraw(uint256 __amount);

    struct DailySet {
        uint256 from;
        uint256 start;
        uint256 end;
    }

    enum Family {
        RIPPERZ,
        KILLERZ,
        ALIENZ,
        TRIPPERZ,
        FLIPPERZ,
        TROLLZ,
        PHATTZ,
        SLAPPERZ,
        SMOKERZ,
        LORDZ
    }

    enum Special {
        RIPPER,
        KILLER,
        ALIEN,
        TRIPPER,
        FLIPPER,
        TROLL,
        PHATT,
        SLAPPER,
        SMOKER,
        LORD,
        GREATEST
    }

    struct SpecialData {
        uint256 id;
        uint256 cost;
    }

    uint256 public constant FULL_SET_SUPPLY = 100;
    uint256 public constant DAILY_SET_SUPPLY = 10;

    uint256 public constant MINT_PRICE = 0.01234 ether;

    mapping(uint256 => uint256) public BURN_MULTIPLIERS;

    uint256 public constant SALE_START = 1683565200;
    uint256 public constant SALE_END = 1684601999;

    mapping(uint256 => DailySet) public DAILY_SETS;
    mapping(Family => uint256[]) public FAMILY_SETS;
    mapping(Special => SpecialData) public SPECIAL_ZOGZ;

    mapping(uint256 => uint256) _tokenToDailySet;

    IPepeEditions public _pepeEditionsContract;
    IZogzEditions public _zogzEditionsContract;

    uint256 public transactionLimit = 1000;

    constructor(
        address __pepeEditionsContractAddress,
        address __zogzEditionsContractAddress
    ) {
        if (__pepeEditionsContractAddress == address(0)) {
            revert InvalidAddress();
        }

        if (__zogzEditionsContractAddress == address(0)) {
            revert InvalidAddress();
        }

        _pepeEditionsContract = IPepeEditions(__pepeEditionsContractAddress);
        _zogzEditionsContract = IZogzEditions(__zogzEditionsContractAddress);

        BURN_MULTIPLIERS[1] = 1; // ZOGZ Pepe
        BURN_MULTIPLIERS[3] = 10; // ZOGGED Pepe
        BURN_MULTIPLIERS[2] = 50; // HEDZ Pepe
        BURN_MULTIPLIERS[5] = 500; // RARE PEPZOGZ Pepe
        BURN_MULTIPLIERS[4] = 600; // PEGZOGZ Pepe

        SPECIAL_ZOGZ[Special.RIPPER] = SpecialData({id: 101, cost: 10});
        SPECIAL_ZOGZ[Special.KILLER] = SpecialData({id: 102, cost: 20});
        SPECIAL_ZOGZ[Special.ALIEN] = SpecialData({id: 103, cost: 20});
        SPECIAL_ZOGZ[Special.TRIPPER] = SpecialData({id: 104, cost: 20});
        SPECIAL_ZOGZ[Special.FLIPPER] = SpecialData({id: 105, cost: 5});
        SPECIAL_ZOGZ[Special.TROLL] = SpecialData({id: 106, cost: 5});
        SPECIAL_ZOGZ[Special.PHATT] = SpecialData({id: 107, cost: 7});
        SPECIAL_ZOGZ[Special.SLAPPER] = SpecialData({id: 108, cost: 3});
        SPECIAL_ZOGZ[Special.SMOKER] = SpecialData({id: 109, cost: 9});
        SPECIAL_ZOGZ[Special.LORD] = SpecialData({id: 110, cost: 1});
        SPECIAL_ZOGZ[Special.GREATEST] = SpecialData({id: 111, cost: 100});

        DAILY_SETS[1] = DailySet({from: 1, start: 1683565200, end: 1683651599});
        DAILY_SETS[2] = DailySet({
            from: 11,
            start: 1683651600,
            end: 1683737999
        });
        DAILY_SETS[3] = DailySet({
            from: 21,
            start: 1683738000,
            end: 1683824399
        });
        DAILY_SETS[4] = DailySet({
            from: 31,
            start: 1683824400,
            end: 1683910799
        });
        DAILY_SETS[5] = DailySet({
            from: 41,
            start: 1683910800,
            end: 1683997199
        });
        DAILY_SETS[6] = DailySet({
            from: 51,
            start: 1684170000,
            end: 1684256399
        });
        DAILY_SETS[7] = DailySet({
            from: 61,
            start: 1684256400,
            end: 1684342799
        });
        DAILY_SETS[8] = DailySet({
            from: 71,
            start: 1684342800,
            end: 1684429199
        });
        DAILY_SETS[9] = DailySet({
            from: 81,
            start: 1684429200,
            end: 1684515599
        });
        DAILY_SETS[10] = DailySet({
            from: 91,
            start: 1684515600,
            end: 1684601999
        });

        for (uint256 id = 1; id <= FULL_SET_SUPPLY; id++) {
            if (id > 90) {
                _tokenToDailySet[id] = 10;
            } else if (id > 80) {
                _tokenToDailySet[id] = 9;
            } else if (id > 70) {
                _tokenToDailySet[id] = 8;
            } else if (id > 60) {
                _tokenToDailySet[id] = 7;
            } else if (id > 50) {
                _tokenToDailySet[id] = 6;
            } else if (id > 40) {
                _tokenToDailySet[id] = 5;
            } else if (id > 30) {
                _tokenToDailySet[id] = 4;
            } else if (id > 20) {
                _tokenToDailySet[id] = 3;
            } else if (id > 10) {
                _tokenToDailySet[id] = 2;
            } else {
                _tokenToDailySet[id] = 1;
            }
        }
    }

    ////////////////////////////////////////////////////////////////////////////
    // MODIFIERS
    ////////////////////////////////////////////////////////////////////////////

    modifier onlyEOA() {
        if (tx.origin != msg.sender) {
            revert Forbidden();
        }
        _;
    }

    modifier onlyExistingDay(uint256 __day) {
        if (__day == 0 || __day > 10) {
            revert DayNotFound();
        }
        _;
    }

    modifier onlyExistingPepeEdition(uint256 __tokenID) {
        if (__tokenID == 0 || __tokenID > 5) {
            revert PepeEditionNotFound();
        }
        _;
    }

    modifier onlyExistingSpecialEdition(Special __special) {
        if (SPECIAL_ZOGZ[__special].id == 0) {
            revert ZogzEditionNotFound();
        }
        _;
    }

    modifier onlyExistingZogzEdition(uint256 __tokenID) {
        if (__tokenID == 0 || __tokenID > 100) {
            revert ZogzEditionNotFound();
        }
        _;
    }

    ////////////////////////////////////////////////////////////////////////////
    // OWNER
    ////////////////////////////////////////////////////////////////////////////

    /**
     * @dev Used to pause sales.
     */
    function pause() external onlyOwner {
        _pause();
    }

    /**
     * @dev Used to unpause sales.
     */
    function unpause() external onlyOwner {
        _unpause();
    }

    /**
     * @dev Used to set new transaction limit.
     */
    function setTransactionLimit(
        uint256 __transactionLimit
    ) external onlyOwner {
        transactionLimit = __transactionLimit;

        emit TransactionLimit(__transactionLimit);
    }

    /**
     * @dev Used to set family sets.
     */
    function setFamilySets(
        Family[] calldata __familySets,
        uint256[][] calldata __ids
    ) external onlyOwner {
        for (uint256 i = 0; i < __familySets.length; i++) {
            if (FAMILY_SETS[__familySets[i]].length > 0) {
                revert FamilySetAlreadyExists();
            }
            FAMILY_SETS[__familySets[i]] = __ids[i];
        }

        emit FamilySets(__familySets, __ids);
    }

    /**
     * @dev Used to withdraw funds from the contract.
     */
    function withdraw(uint256 __amount) external onlyOwner {
        (bool success, ) = owner().call{value: __amount}("");

        if (!success) revert WithdrawFailed();

        emit Withdraw(__amount);
    }

    /**
     * @dev Used to withdraw all funds from the contract.
     */
    function withdrawAll() external onlyOwner {
        uint256 amount = address(this).balance;

        (bool success, ) = owner().call{value: amount}("");

        if (!success) revert WithdrawFailed();

        emit Withdraw(amount);
    }

    ////////////////////////////////////////////////////////////////////////////
    // INTERNALS
    ////////////////////////////////////////////////////////////////////////////

    function _burn(
        uint256 __burnTokenId,
        uint256 __burnAmount,
        uint256 __burnMultiplier
    ) internal {
        if (__burnAmount == 0) {
            revert InvalidBurnAmount();
        }

        uint256 burnAmountRemainder = __burnMultiplier %
            BURN_MULTIPLIERS[__burnTokenId];

        if (burnAmountRemainder != 0) {
            revert BurnAmountMustBeExact();
        }

        uint256 calculatedBurnAmount = __burnMultiplier /
            BURN_MULTIPLIERS[__burnTokenId];

        if (calculatedBurnAmount == 0) {
            revert InvalidBurnAmount();
        }

        if (calculatedBurnAmount != __burnAmount) {
            revert BurnAmountDoesNotMatch();
        }

        _pepeEditionsContract.burn(
            _msgSender(),
            __burnTokenId,
            calculatedBurnAmount
        );
    }

    function _mint(uint256 __tokenID, uint256 __amount) internal {
        _zogzEditionsContract.mint(_msgSender(), __tokenID, __amount);
    }

    function _mintBatch(
        uint256 __from,
        uint256 __to,
        uint256 __amount
    ) internal {
        uint256 total = __to - __from + 1;

        uint256[] memory ids = new uint256[](total);
        uint256[] memory amounts = new uint256[](total);
        for (uint256 i = 0; i < total; i++) {
            ids[i] = i + __from;
            amounts[i] = __amount;
        }

        _zogzEditionsContract.mintBatch(_msgSender(), ids, amounts);
    }

    function _mintBatchIds(uint256[] memory __ids, uint256 __amount) internal {
        uint256[] memory amounts = new uint256[](__ids.length);
        for (uint256 i = 0; i < __ids.length; i++) {
            amounts[i] = __amount;
        }

        _zogzEditionsContract.mintBatch(_msgSender(), __ids, amounts);
    }

    function _validateTotalAmountAndPrice(uint256 __totalAmount) internal view {
        if (__totalAmount == 0) {
            revert InvalidAmount();
        }

        if (__totalAmount > transactionLimit) {
            revert AmountExceedsTransactionLimit();
        }

        if (msg.value != MINT_PRICE * __totalAmount) {
            revert IncorrectPrice();
        }
    }

    ////////////////////////////////////////////////////////////////////////////
    // WRITES
    ////////////////////////////////////////////////////////////////////////////

    /**
     * @dev Used to buy a Full Set (burn-gating).
     *
     * Requirements:
     *
     * - `__amount` must be greater than `0`.
     * - `__burnTokenId` must be an existing Pepe Edition.
     * - `__burnAmount` must match the burn amount needed for `__amount`.
     *
     * Emits a {FullSetPurchase} event.
     *
     */
    function buyFullSetWithBurn(
        uint256 __amount,
        uint256 __burnTokenId,
        uint256 __burnAmount
    )
        external
        payable
        nonReentrant
        whenNotPaused
        onlyEOA
        onlyExistingPepeEdition(__burnTokenId)
    {
        uint256 totalAmount = __amount * FULL_SET_SUPPLY;

        _validateTotalAmountAndPrice(totalAmount);

        if (block.timestamp < SALE_START) {
            revert HasNotStarted();
        }

        _burn(__burnTokenId, __burnAmount, totalAmount);
        _mintBatch(1, FULL_SET_SUPPLY, __amount);

        emit FullSetPurchase(_msgSender(), __amount);
    }

    /**
     * @dev Used to buy a Single ZOGZ.
     *
     * Requirements:
     *
     * - `__tokenID` must be a valid ZOGZ (1-100).
     * - `__amount` must be greater than `0`.
     *
     * Emits a {SinglePurchase} event.
     *
     */
    function buySingle(
        uint256 __tokenID,
        uint256 __amount
    )
        external
        payable
        nonReentrant
        whenNotPaused
        onlyEOA
        onlyExistingZogzEdition(__tokenID)
    {
        _validateTotalAmountAndPrice(__amount);

        DailySet memory dailySet = DAILY_SETS[_tokenToDailySet[__tokenID]];

        if (block.timestamp < dailySet.start) {
            revert HasNotStarted();
        }
        if (block.timestamp > dailySet.end) {
            revert HasEnded();
        }

        _mint(__tokenID, __amount);

        emit SinglePurchase(_msgSender(), __tokenID, __amount);
    }

    /**
     * @dev Used to buy a Single ZOGZ (burn-gating).
     *
     * Requirements:
     *
     * - `__tokenID` must be a valid ZOGZ (1-100).
     * - `__amount` must be greater than `0`.
     * - `__burnTokenId` must be an existing Pepe Edition.
     * - `__burnAmount` must match the burn amount needed for `__amount`.
     *
     * Emits a {SinglePurchase} event.
     *
     */
    function buySingleWithBurn(
        uint256 __tokenID,
        uint256 __amount,
        uint256 __burnTokenId,
        uint256 __burnAmount
    )
        external
        payable
        nonReentrant
        whenNotPaused
        onlyEOA
        onlyExistingZogzEdition(__tokenID)
        onlyExistingPepeEdition(__burnTokenId)
    {
        _validateTotalAmountAndPrice(__amount);

        DailySet memory dailySet = DAILY_SETS[_tokenToDailySet[__tokenID]];

        if (block.timestamp < dailySet.end) {
            revert HasNotStarted();
        }

        _burn(__burnTokenId, __burnAmount, __amount);
        _mint(__tokenID, __amount);

        emit SinglePurchase(_msgSender(), __tokenID, __amount);
    }

    /**
     * @dev Used to buy a Daily Set.
     *
     * Requirements:
     *
     * - `__day` must be a valid Day (1-10).
     * - `__amount` must be greater than `0`.
     *
     * Emits a {DailySetPurchase} event.
     *
     */
    function buyDailySet(
        uint256 __day,
        uint256 __amount
    )
        external
        payable
        nonReentrant
        whenNotPaused
        onlyEOA
        onlyExistingDay(__day)
    {
        _validateTotalAmountAndPrice(__amount * DAILY_SET_SUPPLY);

        DailySet memory dailySet = DAILY_SETS[__day];

        if (block.timestamp < dailySet.start) {
            revert HasNotStarted();
        }
        if (block.timestamp > dailySet.end) {
            revert HasEnded();
        }

        _mintBatch(
            dailySet.from,
            dailySet.from + DAILY_SET_SUPPLY - 1,
            __amount
        );

        emit DailySetPurchase(_msgSender(), __day, __amount);
    }

    /**
     * @dev Used to buy a Daily Set (burn-gating).
     *
     * Requirements:
     *
     * - `__day` must be a valid Day (1-10).
     * - `__amount` must be greater than `0`.
     * - `__burnTokenId` must be an existing Pepe Edition.
     * - `__burnAmount` must match the burn amount needed for `__day` x `__amount`.
     *
     * Emits a {DailySetPurchase} event.
     *
     */
    function buyDailySetWithBurn(
        uint256 __day,
        uint256 __amount,
        uint256 __burnTokenId,
        uint256 __burnAmount
    )
        external
        payable
        nonReentrant
        whenNotPaused
        onlyEOA
        onlyExistingDay(__day)
    {
        DailySet memory dailySet = DAILY_SETS[__day];

        uint256 totalAmount = __amount * DAILY_SET_SUPPLY;

        _validateTotalAmountAndPrice(totalAmount);

        if (block.timestamp < dailySet.end) {
            revert HasNotStarted();
        }

        _burn(__burnTokenId, __burnAmount, totalAmount);
        _mintBatch(
            dailySet.from,
            dailySet.from + DAILY_SET_SUPPLY - 1,
            __amount
        );

        emit DailySetPurchase(_msgSender(), __day, __amount);
    }

    /**
     * @dev Used to buy a Family Set (burn-gating).
     *
     * Requirements:
     *
     * - `__family` must be an existing Family Set.
     * - `__amount` must be greater than `0`.
     * - `__burnTokenId` must be an existing Pepe Edition.
     * - `__burnAmount` must match the burn amount needed for `__family` x `__amount`.
     *
     * Emits a {FamilySetPurchase} event.
     *
     */
    function buyFamilySetWithBurn(
        Family __family,
        uint256 __amount,
        uint256 __burnTokenId,
        uint256 __burnAmount
    )
        external
        payable
        nonReentrant
        whenNotPaused
        onlyEOA
        onlyExistingPepeEdition(__burnTokenId)
    {
        uint256[] memory ids = FAMILY_SETS[__family];

        if (block.timestamp < SALE_END) {
            revert HasNotStarted();
        }

        uint256 totalAmount = __amount * ids.length;

        _validateTotalAmountAndPrice(totalAmount);

        _burn(__burnTokenId, __burnAmount, totalAmount);
        _mintBatchIds(ids, __amount);

        emit FamilySetPurchase(_msgSender(), __family, __amount);
    }

    /**
     * @dev Used to redeem Special ZOGZ.
     *
     * Requirements:
     *
     * - `__special` must be an existing Special ZOGZ.
     * - `__amount` must be greater than `0`.
     * - `__burnTokenId` must be an existing Pepe Edition.
     * - `__burnAmount` must match the burn amount needed for `__special` x `__amount`.
     *
     * Emits a {Redemption} event.
     *
     */
    function redeemSpecialZogz(
        Special __special,
        uint256 __amount,
        uint256 __burnTokenId,
        uint256 __burnAmount
    )
        external
        nonReentrant
        whenNotPaused
        onlyEOA
        onlyExistingPepeEdition(__burnTokenId)
        onlyExistingSpecialEdition(__special)
    {
        if (block.timestamp < SALE_START) {
            revert HasNotStarted();
        }

        uint256 totalAmount = __amount * SPECIAL_ZOGZ[__special].cost;

        _burn(__burnTokenId, __burnAmount, totalAmount);
        _mint(SPECIAL_ZOGZ[__special].id, __amount);

        emit Redemption(_msgSender(), __special, __amount);
    }
}

File 2 of 5 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../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.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev 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 {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 5 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 4 of 5 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

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

    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
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

File 5 of 5 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "remappings": [
    "@openzeppelin/=lib/openzeppelin-contracts/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 1000000
  },
  "metadata": {
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"__pepeEditionsContractAddress","type":"address"},{"internalType":"address","name":"__zogzEditionsContractAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AmountExceedsTransactionLimit","type":"error"},{"inputs":[],"name":"BurnAmountDoesNotMatch","type":"error"},{"inputs":[],"name":"BurnAmountMustBeExact","type":"error"},{"inputs":[],"name":"DayNotFound","type":"error"},{"inputs":[],"name":"FamilySetAlreadyExists","type":"error"},{"inputs":[],"name":"Forbidden","type":"error"},{"inputs":[],"name":"HasEnded","type":"error"},{"inputs":[],"name":"HasNotEnded","type":"error"},{"inputs":[],"name":"HasNotStarted","type":"error"},{"inputs":[],"name":"IncorrectPrice","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"InvalidAmount","type":"error"},{"inputs":[],"name":"InvalidBurnAmount","type":"error"},{"inputs":[],"name":"PepeEditionNotFound","type":"error"},{"inputs":[],"name":"WithdrawFailed","type":"error"},{"inputs":[],"name":"ZogzEditionNotFound","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"__account","type":"address"},{"indexed":false,"internalType":"uint256","name":"__day","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"__amount","type":"uint256"}],"name":"DailySetPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"__account","type":"address"},{"indexed":false,"internalType":"enum ZogzFunSales.Family","name":"__family","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"__amount","type":"uint256"}],"name":"FamilySetPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"enum ZogzFunSales.Family[]","name":"__families","type":"uint8[]"},{"indexed":false,"internalType":"uint256[][]","name":"__ids","type":"uint256[][]"}],"name":"FamilySets","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"__account","type":"address"},{"indexed":false,"internalType":"uint256","name":"__amount","type":"uint256"}],"name":"FullSetPurchase","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"__account","type":"address"},{"indexed":false,"internalType":"enum ZogzFunSales.Special","name":"__special","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"__amount","type":"uint256"}],"name":"Redemption","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"__account","type":"address"},{"indexed":false,"internalType":"uint256","name":"__tokenID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"__amount","type":"uint256"}],"name":"SinglePurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"__transactionLimit","type":"uint256"}],"name":"TransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"__amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"BURN_MULTIPLIERS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"DAILY_SETS","outputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAILY_SET_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ZogzFunSales.Family","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"FAMILY_SETS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FULL_SET_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_END","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_START","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ZogzFunSales.Special","name":"","type":"uint8"}],"name":"SPECIAL_ZOGZ","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pepeEditionsContract","outputs":[{"internalType":"contract IPepeEditions","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_zogzEditionsContract","outputs":[{"internalType":"contract IZogzEditions","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"__day","type":"uint256"},{"internalType":"uint256","name":"__amount","type":"uint256"}],"name":"buyDailySet","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__day","type":"uint256"},{"internalType":"uint256","name":"__amount","type":"uint256"},{"internalType":"uint256","name":"__burnTokenId","type":"uint256"},{"internalType":"uint256","name":"__burnAmount","type":"uint256"}],"name":"buyDailySetWithBurn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"enum ZogzFunSales.Family","name":"__family","type":"uint8"},{"internalType":"uint256","name":"__amount","type":"uint256"},{"internalType":"uint256","name":"__burnTokenId","type":"uint256"},{"internalType":"uint256","name":"__burnAmount","type":"uint256"}],"name":"buyFamilySetWithBurn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__amount","type":"uint256"},{"internalType":"uint256","name":"__burnTokenId","type":"uint256"},{"internalType":"uint256","name":"__burnAmount","type":"uint256"}],"name":"buyFullSetWithBurn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__tokenID","type":"uint256"},{"internalType":"uint256","name":"__amount","type":"uint256"}],"name":"buySingle","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__tokenID","type":"uint256"},{"internalType":"uint256","name":"__amount","type":"uint256"},{"internalType":"uint256","name":"__burnTokenId","type":"uint256"},{"internalType":"uint256","name":"__burnAmount","type":"uint256"}],"name":"buySingleWithBurn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ZogzFunSales.Special","name":"__special","type":"uint8"},{"internalType":"uint256","name":"__amount","type":"uint256"},{"internalType":"uint256","name":"__burnTokenId","type":"uint256"},{"internalType":"uint256","name":"__burnAmount","type":"uint256"}],"name":"redeemSpecialZogz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum ZogzFunSales.Family[]","name":"__familySets","type":"uint8[]"},{"internalType":"uint256[][]","name":"__ids","type":"uint256[][]"}],"name":"setFamilySets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__transactionLimit","type":"uint256"}],"name":"setTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transactionLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526103e86009553480156200001757600080fd5b5060405162003395380380620033958339810160408190526200003a9162000d40565b620000453362000cd3565b6000805460ff60a01b19169055600180556001600160a01b0382166200007e5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b038116620000a65760405163e6c4247b60e01b815260040160405180910390fd5b600780546001600160a01b038481166001600160a01b0319928316178355600880549185169190921617815560017fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0819055600a7f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c381905560327f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28c556101f47fb98b78633099fa36ed8b8680c4f8092689e1e04080eb9cbb077ca38a14d7e384556102587fee60d0579bcffd98e668647d59fec1ff86a7fb340ce572e844f234ae73a6918f556040805180820182526065815260208082018481526000808052600580845293517f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5590517f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bd558351808501855260668152601481840181815288845285855291517f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b5590517f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017c558451808601865260678152808401828152600280855286865291517f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a55517f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733b558551808701875260688152808501928352600380855286865290517fa9bc9a3a348c357ba16b37005d7e6b3236198c0e939f4af8c5f19b8deeb8ebc05591517fa9bc9a3a348c357ba16b37005d7e6b3236198c0e939f4af8c5f19b8deeb8ebc1558551808701875260698152808501868152600480865287875291517f3eec716f11ba9e820c81ca75eb978ffb45831ef8b7a53e5e422c26008e1ca6d555517f3eec716f11ba9e820c81ca75eb978ffb45831ef8b7a53e5e422c26008e1ca6d65586518088018852606a815280860187815287865287875290517f458b30c2d72bfd2c6317304a4594ecbafe5f729d3111b65fdc3a33bd48e5432d55517f458b30c2d72bfd2c6317304a4594ecbafe5f729d3111b65fdc3a33bd48e5432e5586518088018852606b81528086018c8152600680875288885291517f069400f22b28c6c362558d92f66163cec5671cba50b61abd2eecfcd0eaeac51855517f069400f22b28c6c362558d92f66163cec5671cba50b61abd2eecfcd0eaeac5195587518089018952606c81528087018581528d875288885290517feddb6698d7c569ff62ff64f1f1492bf14a54594835ba0faac91f84b4f5d8146055517feddb6698d7c569ff62ff64f1f1492bf14a54594835ba0faac91f84b4f5d814615587518089018952606d815260098188018181528d885289895291517ffb33122aa9f93cc639ebe80a7bc4784c11e6053dde89c6f4f7e268c6a623da1e5590517ffb33122aa9f93cc639ebe80a7bc4784c11e6053dde89c6f4f7e268c6a623da1f558851808a018a52606e81528088018c815282885289895290517fc0a4a8be475dfebc377ebef2d7c4ff47656f572a08dd92b81017efcdba0febe155517fc0a4a8be475dfebc377ebef2d7c4ff47656f572a08dd92b81017efcdba0febe2558851808a018a52606f815260648189019081528b885289895290517fa18b128af1c8fc61ff46f02d146e54546f34d340574cf2cef6a753cba6b6701d55517fa18b128af1c8fc61ff46f02d146e54546f34d340574cf2cef6a753cba6b6701e55885160608082018b528c82526364592a90828a0190815263645a7c0f838d019081528e8a52888b5292517fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c55517fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054d5590517fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054e5589518082018b52600b815263645a7c10818a0190815263645bcd8f828d01908152968952878a5290517fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d55517fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4e5593517fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4f5588518085018a526015815263645bcd9081890190815263645d1f0f828c01908152878952878a5291517fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495af55517fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495b055517fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495b15588518085018a52601f815263645d1f1081890190815263645e708f828c0190815294885286895290517f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe9377246555517f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe937724665591517f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe9377246755875180840189526029815263645e709081880190815263645fc20f828b0190815298875285885290517f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b46594225055517f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b4659422515595517f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b4659422525586518083018852603381526364626510818701908152636463b68f828a0190815297865284875290517fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f355517fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f45594517fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f55585518082018752603d8152636463b690818601908152636465080f8289019081529b855283865290517ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd255517ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd35598517ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd4558451808a018652604781526364650810818501908152636466598f82880190815299845282855290517f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbe55517f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbf5596517f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fc05583518089018552605181526364665990818401908152636467ab0f82870190815294835288845290517f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb45855517f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb4595591517f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb45a5582519687018352605b8752636467ab10878201908152636468fc8f938801938452939091529390935292517f9dcb9783ba5cd0b54745f65f4f918525e461e91888c334e5342cb380ac558d535591517f9dcb9783ba5cd0b54745f65f4f918525e461e91888c334e5342cb380ac558d5455517f9dcb9783ba5cd0b54745f65f4f918525e461e91888c334e5342cb380ac558d55555b6064811162000cca57605a81111562000b92576000818152600660205260409020600a905562000cb5565b605081111562000bb45760008181526006602052604090206009905562000cb5565b604681111562000bd65760008181526006602052604090206008905562000cb5565b603c81111562000bf85760008181526006602052604090206007905562000cb5565b603281111562000c1a5760008181526006602081905260409091205562000cb5565b602881111562000c3c5760008181526006602052604090206005905562000cb5565b601e81111562000c5e5760008181526006602052604090206004905562000cb5565b601481111562000c805760008181526006602052604090206003905562000cb5565b600a81111562000ca25760008181526006602052604090206002905562000cb5565b6000818152600660205260409020600190555b8062000cc18162000d78565b91505062000b67565b50505062000da0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811462000d3b57600080fd5b919050565b6000806040838503121562000d5457600080fd5b62000d5f8362000d23565b915062000d6f6020840162000d23565b90509250929050565b60006001820162000d9957634e487b7160e01b600052601160045260246000fd5b5060010190565b6125e58062000db06000396000f3fe6080604052600436106101c25760003560e01c80637feea1dd116100f7578063aa71027311610095578063f19605d611610064578063f19605d614610536578063f2fde38b1461054c578063f949353e1461056c578063ff3110e91461058c57600080fd5b8063aa710273146104ae578063c002d23d146104ce578063c8b0ec65146104e9578063caa025771461051657600080fd5b80638456cb59116100d15780638456cb5914610441578063853828b6146104565780638da5cb5b1461046b5780639aa0ff7b1461049657600080fd5b80637feea1dd146103d0578063809c4a751461041957806381f7b0961461042c57600080fd5b80634c7b2c3f116101645780635c975abb1161013e5780635c975abb1461030957806361e4993f1461034457806364bfa5461461039b578063715018a6146103bb57600080fd5b80634c7b2c3f146102b65780634eb4e233146102c95780635b6beb86146102f657600080fd5b806322673030116101a057806322673030146102175780632e1a7d4d1461022f5780633f4ba83a1461024f5780633fa73c1e1461026457600080fd5b806306bac6d9146101c75780630f730076146101ef57806315b8fa7e14610204575b600080fd5b3480156101d357600080fd5b506101dc600a81565b6040519081526020015b60405180910390f35b6102026101fd366004611ee9565b61059f565b005b610202610212366004611f22565b61076f565b34801561022357600080fd5b506101dc6364592a9081565b34801561023b57600080fd5b5061020261024a366004611f54565b610906565b34801561025b57600080fd5b506102026109f7565b34801561027057600080fd5b506007546102919073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e6565b6102026102c4366004611f6d565b610a09565b3480156102d557600080fd5b506101dc6102e4366004611f54565b60026020526000908152604090205481565b610202610304366004611f22565b610b65565b34801561031557600080fd5b5060005474010000000000000000000000000000000000000000900460ff1660405190151581526020016101e6565b34801561035057600080fd5b5061038061035f366004611f54565b60036020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101e6565b3480156103a757600080fd5b506102026103b6366004611f54565b610cf5565b3480156103c757600080fd5b50610202610d38565b3480156103dc57600080fd5b506104046103eb366004611fa8565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016101e6565b610202610427366004611fca565b610d4a565b34801561043857600080fd5b506101dc606481565b34801561044d57600080fd5b50610202610f22565b34801561046257600080fd5b50610202610f32565b34801561047757600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610291565b3480156104a257600080fd5b506101dc636468fc8f81565b3480156104ba57600080fd5b506101dc6104c9366004611fec565b610f5c565b3480156104da57600080fd5b506101dc662bd72a2487400081565b3480156104f557600080fd5b506008546102919073ffffffffffffffffffffffffffffffffffffffff1681565b34801561052257600080fd5b50610202610531366004612016565b610f8d565b34801561054257600080fd5b506101dc60095481565b34801561055857600080fd5b50610202610567366004612035565b611194565b34801561057857600080fd5b506102026105873660046120b7565b611250565b61020261059a366004611fca565b6113de565b6105a761155d565b6105af6115d0565b3233146105e8576040517fee90c46800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818015806105f65750600581115b1561062d576040517f055adc6d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006004600087600981111561064557610645612123565b600981111561065657610656612123565b81526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156106ae57602002820191906000526020600020905b81548152602001906001019080831161069a575b50505050509050636468fc8f4210156106f3576040517fedfcf79700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008151866107029190612181565b905061070d81611655565b610718858583611714565b61072282876118e1565b7f8f1c5392ef37d72a16d62ba3d766388b7a8b558290ae20985aef045c4144cb50338888604051610755939291906121b2565b60405180910390a150505061076960018055565b50505050565b61077761155d565b61077f6115d0565b3233146107b8576040517fee90c46800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b838015806107c65750600a81115b156107fd576040517f4e3ac9b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600085815260036020908152604080832081516060810183528154815260018201549381019390935260020154908201529061083a600a87612181565b905061084581611655565b8160400151421015610883576040517fedfcf79700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e858583611714565b81516108b19060016108a1600a836121ea565b6108ab91906121fd565b886119dc565b7fe894305c9d95da2ac1eaa2380f6efa11efee9965df019410e948b2fd402e03fb335b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252602082018a90528101889052606001610755565b61090e611b60565b6000805473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610980576040519150601f19603f3d011682016040523d82523d6000602084013e610985565b606091505b50509050806109c0576040517f750b219c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518281527f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d9060200160405180910390a15050565b6109ff611b60565b610a07611be1565b565b610a1161155d565b610a196115d0565b323314610a52576040517fee90c46800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81801580610a605750600581115b15610a97576040517f055adc6d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610aa4606486612181565b9050610aaf81611655565b6364592a90421015610aed576040517fedfcf79700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610af8848483611714565b610b0560016064876119dc565b7fcaf95cc263913365e029e8f1cb92cde360b51663d3b1c010f41af0b677b92f34336040805173ffffffffffffffffffffffffffffffffffffffff9092168252602082018890520160405180910390a15050610b6060018055565b505050565b610b6d61155d565b610b756115d0565b323314610bae576040517fee90c46800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83801580610bbc5750606481115b15610bf3576040517fdd1986c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82801580610c015750600581115b15610c38576040517f055adc6d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c4185611655565b600086815260066020908152604080832054835260038252918290208251606081018452815481526001820154928101929092526002015491810182905290421015610cb9576040517fedfcf79700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cc4858588611714565b610cce8787611c5e565b7f3045b1f432304c865f29eee852982c94287cddc8f423568d1132c4980c066104336108d4565b610cfd611b60565b60098190556040518181527faa806d9f1b4285f6cd559d658b62ed4ae34f4c9cf48f17bbe30f9cba40849d799060200160405180910390a150565b610d40611b60565b610a076000611d0d565b610d5261155d565b610d5a6115d0565b323314610d93576040517fee90c46800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81801580610da15750600a81115b15610dd8576040517f4e3ac9b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610deb610de6600a84612181565b611655565b600083815260036020908152604091829020825160608101845281548152600182015492810183905260029091015492810192909252421015610e5a576040517fedfcf79700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060400151421115610e98576040517f0cbb94e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051610ebb906001610eab600a836121ea565b610eb591906121fd565b856119dc565b7fe894305c9d95da2ac1eaa2380f6efa11efee9965df019410e948b2fd402e03fb335b6040805173ffffffffffffffffffffffffffffffffffffffff909216825260208201879052810185905260600160405180910390a15050610f1e60018055565b5050565b610f2a611b60565b610a07611d82565b610f3a611b60565b47600061092960005473ffffffffffffffffffffffffffffffffffffffff1690565b60046020528160005260406000208181548110610f7857600080fd5b90600052602060002001600091509150505481565b610f9561155d565b610f9d6115d0565b323314610fd6576040517fee90c46800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81801580610fe45750600581115b1561101b576040517f055adc6d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846005600082600a81111561103257611032612123565b600a81111561104357611043612123565b81526020019081526020016000206000015460000361108e576040517fdd1986c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6364592a904210156110cc576040517fedfcf79700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006005600088600a8111156110e4576110e4612123565b600a8111156110f5576110f5612123565b815260200190815260200160002060010154866111129190612181565b905061111f858583611714565b6111616005600089600a81111561113857611138612123565b600a81111561114957611149612123565b81526020019081526020016000206000015487611c5e565b7f5d1ba5121542e1f2219682beec96ee9657a9a0db1f06f2a7c7fd835e7e83a14733888860405161075593929190612210565b61119c611b60565b73ffffffffffffffffffffffffffffffffffffffff8116611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61124d81611d0d565b50565b611258611b60565b60005b8381101561139a5760006004600087878581811061127b5761127b61224e565b9050602002016020810190611290919061227d565b60098111156112a1576112a1612123565b60098111156112b2576112b2612123565b815260208101919091526040016000205411156112fb576040517f4555b6f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82828281811061130d5761130d61224e565b905060200281019061131f9190612298565b600460008888868181106113355761133561224e565b905060200201602081019061134a919061227d565b600981111561135b5761135b612123565b600981111561136c5761136c612123565b81526020019081526020016000209190611387929190611e75565b508061139281612300565b91505061125b565b507f9531395e7a88a9bfedd02178b255fca41fc1750523937545cbacc2496108ba7d848484846040516113d09493929190612383565b60405180910390a150505050565b6113e661155d565b6113ee6115d0565b323314611427576040517fee90c46800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818015806114355750606481115b1561146c576040517fdd1986c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61147582611655565b600083815260066020908152604080832054835260038252918290208251606081018452815481526001820154928101839052600290910154928101929092524210156114ee576040517fedfcf79700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806040015142111561152c576040517f0cbb94e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115368484611c5e565b7f3045b1f432304c865f29eee852982c94287cddc8f423568d1132c4980c06610433610ede565b6002600154036115c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161123b565b6002600155565b60005474010000000000000000000000000000000000000000900460ff1615610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161123b565b8060000361168f576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009548111156116cb576040517f8ba1cb6700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dc81662bd72a24874000612181565b341461124d576040517f99b5cb1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160000361174e576040517f2075cc1000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526002602052604081205461176790836124d2565b905080156117a1576040517f1468299100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600260205260408120546117ba90846124e6565b9050806000036117f6576040517f2075cc1000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83811461182f576040517f1a1ccd6700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075473ffffffffffffffffffffffffffffffffffffffff1663f5298aca336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024810188905260448101849052606401600060405180830381600087803b1580156118c257600080fd5b505af11580156118d6573d6000803e3d6000fd5b505050505050505050565b6000825167ffffffffffffffff8111156118fd576118fd6124fa565b604051908082528060200260200182016040528015611926578160200160208202803683370190505b50905060005b835181101561196557828282815181106119485761194861224e565b60209081029190910101528061195d81612300565b91505061192c565b5060085473ffffffffffffffffffffffffffffffffffffffff1663d81d0a153385846040518463ffffffff1660e01b81526004016119a593929190612564565b600060405180830381600087803b1580156119bf57600080fd5b505af11580156119d3573d6000803e3d6000fd5b50505050505050565b60006119e884846121fd565b6119f39060016121ea565b905060008167ffffffffffffffff811115611a1057611a106124fa565b604051908082528060200260200182016040528015611a39578160200160208202803683370190505b50905060008267ffffffffffffffff811115611a5757611a576124fa565b604051908082528060200260200182016040528015611a80578160200160208202803683370190505b50905060005b83811015611ae657611a9887826121ea565b838281518110611aaa57611aaa61224e565b60200260200101818152505084828281518110611ac957611ac961224e565b602090810291909101015280611ade81612300565b915050611a86565b5060085473ffffffffffffffffffffffffffffffffffffffff1663d81d0a153384846040518463ffffffff1660e01b8152600401611b2693929190612564565b600060405180830381600087803b158015611b4057600080fd5b505af1158015611b54573d6000803e3d6000fd5b50505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161123b565b611be9611df1565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60085473ffffffffffffffffffffffffffffffffffffffff1663156e29f6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024810185905260448101849052606401600060405180830381600087803b158015611cf157600080fd5b505af1158015611d05573d6000803e3d6000fd5b505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611d8a6115d0565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c343390565b60005474010000000000000000000000000000000000000000900460ff16610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161123b565b828054828255906000526020600020908101928215611eb0579160200282015b82811115611eb0578235825591602001919060010190611e95565b50611ebc929150611ec0565b5090565b5b80821115611ebc5760008155600101611ec1565b8035600a8110611ee457600080fd5b919050565b60008060008060808587031215611eff57600080fd5b611f0885611ed5565b966020860135965060408601359560600135945092505050565b60008060008060808587031215611f3857600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215611f6657600080fd5b5035919050565b600080600060608486031215611f8257600080fd5b505081359360208301359350604090920135919050565b8035600b8110611ee457600080fd5b600060208284031215611fba57600080fd5b611fc382611f99565b9392505050565b60008060408385031215611fdd57600080fd5b50508035926020909101359150565b60008060408385031215611fff57600080fd5b61200883611ed5565b946020939093013593505050565b6000806000806080858703121561202c57600080fd5b611f0885611f99565b60006020828403121561204757600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114611fc357600080fd5b60008083601f84011261207d57600080fd5b50813567ffffffffffffffff81111561209557600080fd5b6020830191508360208260051b85010111156120b057600080fd5b9250929050565b600080600080604085870312156120cd57600080fd5b843567ffffffffffffffff808211156120e557600080fd5b6120f18883890161206b565b9096509450602087013591508082111561210a57600080fd5b506121178782880161206b565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761219857612198612152565b92915050565b600a81106121ae576121ae612123565b9052565b73ffffffffffffffffffffffffffffffffffffffff84168152606081016121dc602083018561219e565b826040830152949350505050565b8082018082111561219857612198612152565b8181038181111561219857612198612152565b73ffffffffffffffffffffffffffffffffffffffff8416815260608101600b841061223d5761223d612123565b602082019390935260400152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561228f57600080fd5b611fc382611ed5565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126122cd57600080fd5b83018035915067ffffffffffffffff8211156122e857600080fd5b6020019150600581901b36038213156120b057600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361233157612331612152565b5060010190565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561236a57600080fd5b8260051b80836020870137939093016020019392505050565b6040808252810184905260008560608301825b878110156123c3576123b0826123ab85611ed5565b61219e565b6020928301929190910190600101612396565b50602091508381038285015280858252828201905060058387821b8401018860005b89811015612492577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086840301855281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18c360301811261244657600080fd5b8b01878101903567ffffffffffffffff81111561246257600080fd5b80861b360382131561247357600080fd5b61247e858284612338565b9689019694505050908601906001016123e5565b50909b9a5050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826124e1576124e16124a3565b500690565b6000826124f5576124f56124a3565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081518084526020808501945080840160005b838110156125595781518752958201959082019060010161253d565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006125936060830185612529565b82810360408401526125a58185612529565b969550505050505056fea2646970667358221220f7fc342b062d3c762952a186f35a7e3e9d3be45051280c8a6bcd180dcf0e90b764736f6c634300081200330000000000000000000000004faab2f1851b58c26028ab7ba2873ff3c7b52d4c000000000000000000000000808e5cd160d8819ca24c2053037049eb611d0542

Deployed Bytecode

0x6080604052600436106101c25760003560e01c80637feea1dd116100f7578063aa71027311610095578063f19605d611610064578063f19605d614610536578063f2fde38b1461054c578063f949353e1461056c578063ff3110e91461058c57600080fd5b8063aa710273146104ae578063c002d23d146104ce578063c8b0ec65146104e9578063caa025771461051657600080fd5b80638456cb59116100d15780638456cb5914610441578063853828b6146104565780638da5cb5b1461046b5780639aa0ff7b1461049657600080fd5b80637feea1dd146103d0578063809c4a751461041957806381f7b0961461042c57600080fd5b80634c7b2c3f116101645780635c975abb1161013e5780635c975abb1461030957806361e4993f1461034457806364bfa5461461039b578063715018a6146103bb57600080fd5b80634c7b2c3f146102b65780634eb4e233146102c95780635b6beb86146102f657600080fd5b806322673030116101a057806322673030146102175780632e1a7d4d1461022f5780633f4ba83a1461024f5780633fa73c1e1461026457600080fd5b806306bac6d9146101c75780630f730076146101ef57806315b8fa7e14610204575b600080fd5b3480156101d357600080fd5b506101dc600a81565b6040519081526020015b60405180910390f35b6102026101fd366004611ee9565b61059f565b005b610202610212366004611f22565b61076f565b34801561022357600080fd5b506101dc6364592a9081565b34801561023b57600080fd5b5061020261024a366004611f54565b610906565b34801561025b57600080fd5b506102026109f7565b34801561027057600080fd5b506007546102919073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e6565b6102026102c4366004611f6d565b610a09565b3480156102d557600080fd5b506101dc6102e4366004611f54565b60026020526000908152604090205481565b610202610304366004611f22565b610b65565b34801561031557600080fd5b5060005474010000000000000000000000000000000000000000900460ff1660405190151581526020016101e6565b34801561035057600080fd5b5061038061035f366004611f54565b60036020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101e6565b3480156103a757600080fd5b506102026103b6366004611f54565b610cf5565b3480156103c757600080fd5b50610202610d38565b3480156103dc57600080fd5b506104046103eb366004611fa8565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016101e6565b610202610427366004611fca565b610d4a565b34801561043857600080fd5b506101dc606481565b34801561044d57600080fd5b50610202610f22565b34801561046257600080fd5b50610202610f32565b34801561047757600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610291565b3480156104a257600080fd5b506101dc636468fc8f81565b3480156104ba57600080fd5b506101dc6104c9366004611fec565b610f5c565b3480156104da57600080fd5b506101dc662bd72a2487400081565b3480156104f557600080fd5b506008546102919073ffffffffffffffffffffffffffffffffffffffff1681565b34801561052257600080fd5b50610202610531366004612016565b610f8d565b34801561054257600080fd5b506101dc60095481565b34801561055857600080fd5b50610202610567366004612035565b611194565b34801561057857600080fd5b506102026105873660046120b7565b611250565b61020261059a366004611fca565b6113de565b6105a761155d565b6105af6115d0565b3233146105e8576040517fee90c46800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818015806105f65750600581115b1561062d576040517f055adc6d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006004600087600981111561064557610645612123565b600981111561065657610656612123565b81526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156106ae57602002820191906000526020600020905b81548152602001906001019080831161069a575b50505050509050636468fc8f4210156106f3576040517fedfcf79700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008151866107029190612181565b905061070d81611655565b610718858583611714565b61072282876118e1565b7f8f1c5392ef37d72a16d62ba3d766388b7a8b558290ae20985aef045c4144cb50338888604051610755939291906121b2565b60405180910390a150505061076960018055565b50505050565b61077761155d565b61077f6115d0565b3233146107b8576040517fee90c46800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b838015806107c65750600a81115b156107fd576040517f4e3ac9b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600085815260036020908152604080832081516060810183528154815260018201549381019390935260020154908201529061083a600a87612181565b905061084581611655565b8160400151421015610883576040517fedfcf79700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e858583611714565b81516108b19060016108a1600a836121ea565b6108ab91906121fd565b886119dc565b7fe894305c9d95da2ac1eaa2380f6efa11efee9965df019410e948b2fd402e03fb335b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252602082018a90528101889052606001610755565b61090e611b60565b6000805473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610980576040519150601f19603f3d011682016040523d82523d6000602084013e610985565b606091505b50509050806109c0576040517f750b219c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518281527f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d9060200160405180910390a15050565b6109ff611b60565b610a07611be1565b565b610a1161155d565b610a196115d0565b323314610a52576040517fee90c46800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81801580610a605750600581115b15610a97576040517f055adc6d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610aa4606486612181565b9050610aaf81611655565b6364592a90421015610aed576040517fedfcf79700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610af8848483611714565b610b0560016064876119dc565b7fcaf95cc263913365e029e8f1cb92cde360b51663d3b1c010f41af0b677b92f34336040805173ffffffffffffffffffffffffffffffffffffffff9092168252602082018890520160405180910390a15050610b6060018055565b505050565b610b6d61155d565b610b756115d0565b323314610bae576040517fee90c46800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83801580610bbc5750606481115b15610bf3576040517fdd1986c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82801580610c015750600581115b15610c38576040517f055adc6d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c4185611655565b600086815260066020908152604080832054835260038252918290208251606081018452815481526001820154928101929092526002015491810182905290421015610cb9576040517fedfcf79700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cc4858588611714565b610cce8787611c5e565b7f3045b1f432304c865f29eee852982c94287cddc8f423568d1132c4980c066104336108d4565b610cfd611b60565b60098190556040518181527faa806d9f1b4285f6cd559d658b62ed4ae34f4c9cf48f17bbe30f9cba40849d799060200160405180910390a150565b610d40611b60565b610a076000611d0d565b610d5261155d565b610d5a6115d0565b323314610d93576040517fee90c46800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81801580610da15750600a81115b15610dd8576040517f4e3ac9b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610deb610de6600a84612181565b611655565b600083815260036020908152604091829020825160608101845281548152600182015492810183905260029091015492810192909252421015610e5a576040517fedfcf79700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060400151421115610e98576040517f0cbb94e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051610ebb906001610eab600a836121ea565b610eb591906121fd565b856119dc565b7fe894305c9d95da2ac1eaa2380f6efa11efee9965df019410e948b2fd402e03fb335b6040805173ffffffffffffffffffffffffffffffffffffffff909216825260208201879052810185905260600160405180910390a15050610f1e60018055565b5050565b610f2a611b60565b610a07611d82565b610f3a611b60565b47600061092960005473ffffffffffffffffffffffffffffffffffffffff1690565b60046020528160005260406000208181548110610f7857600080fd5b90600052602060002001600091509150505481565b610f9561155d565b610f9d6115d0565b323314610fd6576040517fee90c46800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81801580610fe45750600581115b1561101b576040517f055adc6d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846005600082600a81111561103257611032612123565b600a81111561104357611043612123565b81526020019081526020016000206000015460000361108e576040517fdd1986c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6364592a904210156110cc576040517fedfcf79700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006005600088600a8111156110e4576110e4612123565b600a8111156110f5576110f5612123565b815260200190815260200160002060010154866111129190612181565b905061111f858583611714565b6111616005600089600a81111561113857611138612123565b600a81111561114957611149612123565b81526020019081526020016000206000015487611c5e565b7f5d1ba5121542e1f2219682beec96ee9657a9a0db1f06f2a7c7fd835e7e83a14733888860405161075593929190612210565b61119c611b60565b73ffffffffffffffffffffffffffffffffffffffff8116611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61124d81611d0d565b50565b611258611b60565b60005b8381101561139a5760006004600087878581811061127b5761127b61224e565b9050602002016020810190611290919061227d565b60098111156112a1576112a1612123565b60098111156112b2576112b2612123565b815260208101919091526040016000205411156112fb576040517f4555b6f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82828281811061130d5761130d61224e565b905060200281019061131f9190612298565b600460008888868181106113355761133561224e565b905060200201602081019061134a919061227d565b600981111561135b5761135b612123565b600981111561136c5761136c612123565b81526020019081526020016000209190611387929190611e75565b508061139281612300565b91505061125b565b507f9531395e7a88a9bfedd02178b255fca41fc1750523937545cbacc2496108ba7d848484846040516113d09493929190612383565b60405180910390a150505050565b6113e661155d565b6113ee6115d0565b323314611427576040517fee90c46800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818015806114355750606481115b1561146c576040517fdd1986c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61147582611655565b600083815260066020908152604080832054835260038252918290208251606081018452815481526001820154928101839052600290910154928101929092524210156114ee576040517fedfcf79700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806040015142111561152c576040517f0cbb94e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115368484611c5e565b7f3045b1f432304c865f29eee852982c94287cddc8f423568d1132c4980c06610433610ede565b6002600154036115c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161123b565b6002600155565b60005474010000000000000000000000000000000000000000900460ff1615610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161123b565b8060000361168f576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009548111156116cb576040517f8ba1cb6700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dc81662bd72a24874000612181565b341461124d576040517f99b5cb1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160000361174e576040517f2075cc1000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526002602052604081205461176790836124d2565b905080156117a1576040517f1468299100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600260205260408120546117ba90846124e6565b9050806000036117f6576040517f2075cc1000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83811461182f576040517f1a1ccd6700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075473ffffffffffffffffffffffffffffffffffffffff1663f5298aca336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024810188905260448101849052606401600060405180830381600087803b1580156118c257600080fd5b505af11580156118d6573d6000803e3d6000fd5b505050505050505050565b6000825167ffffffffffffffff8111156118fd576118fd6124fa565b604051908082528060200260200182016040528015611926578160200160208202803683370190505b50905060005b835181101561196557828282815181106119485761194861224e565b60209081029190910101528061195d81612300565b91505061192c565b5060085473ffffffffffffffffffffffffffffffffffffffff1663d81d0a153385846040518463ffffffff1660e01b81526004016119a593929190612564565b600060405180830381600087803b1580156119bf57600080fd5b505af11580156119d3573d6000803e3d6000fd5b50505050505050565b60006119e884846121fd565b6119f39060016121ea565b905060008167ffffffffffffffff811115611a1057611a106124fa565b604051908082528060200260200182016040528015611a39578160200160208202803683370190505b50905060008267ffffffffffffffff811115611a5757611a576124fa565b604051908082528060200260200182016040528015611a80578160200160208202803683370190505b50905060005b83811015611ae657611a9887826121ea565b838281518110611aaa57611aaa61224e565b60200260200101818152505084828281518110611ac957611ac961224e565b602090810291909101015280611ade81612300565b915050611a86565b5060085473ffffffffffffffffffffffffffffffffffffffff1663d81d0a153384846040518463ffffffff1660e01b8152600401611b2693929190612564565b600060405180830381600087803b158015611b4057600080fd5b505af1158015611b54573d6000803e3d6000fd5b50505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161123b565b611be9611df1565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60085473ffffffffffffffffffffffffffffffffffffffff1663156e29f6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024810185905260448101849052606401600060405180830381600087803b158015611cf157600080fd5b505af1158015611d05573d6000803e3d6000fd5b505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611d8a6115d0565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c343390565b60005474010000000000000000000000000000000000000000900460ff16610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161123b565b828054828255906000526020600020908101928215611eb0579160200282015b82811115611eb0578235825591602001919060010190611e95565b50611ebc929150611ec0565b5090565b5b80821115611ebc5760008155600101611ec1565b8035600a8110611ee457600080fd5b919050565b60008060008060808587031215611eff57600080fd5b611f0885611ed5565b966020860135965060408601359560600135945092505050565b60008060008060808587031215611f3857600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215611f6657600080fd5b5035919050565b600080600060608486031215611f8257600080fd5b505081359360208301359350604090920135919050565b8035600b8110611ee457600080fd5b600060208284031215611fba57600080fd5b611fc382611f99565b9392505050565b60008060408385031215611fdd57600080fd5b50508035926020909101359150565b60008060408385031215611fff57600080fd5b61200883611ed5565b946020939093013593505050565b6000806000806080858703121561202c57600080fd5b611f0885611f99565b60006020828403121561204757600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114611fc357600080fd5b60008083601f84011261207d57600080fd5b50813567ffffffffffffffff81111561209557600080fd5b6020830191508360208260051b85010111156120b057600080fd5b9250929050565b600080600080604085870312156120cd57600080fd5b843567ffffffffffffffff808211156120e557600080fd5b6120f18883890161206b565b9096509450602087013591508082111561210a57600080fd5b506121178782880161206b565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761219857612198612152565b92915050565b600a81106121ae576121ae612123565b9052565b73ffffffffffffffffffffffffffffffffffffffff84168152606081016121dc602083018561219e565b826040830152949350505050565b8082018082111561219857612198612152565b8181038181111561219857612198612152565b73ffffffffffffffffffffffffffffffffffffffff8416815260608101600b841061223d5761223d612123565b602082019390935260400152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561228f57600080fd5b611fc382611ed5565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126122cd57600080fd5b83018035915067ffffffffffffffff8211156122e857600080fd5b6020019150600581901b36038213156120b057600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361233157612331612152565b5060010190565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561236a57600080fd5b8260051b80836020870137939093016020019392505050565b6040808252810184905260008560608301825b878110156123c3576123b0826123ab85611ed5565b61219e565b6020928301929190910190600101612396565b50602091508381038285015280858252828201905060058387821b8401018860005b89811015612492577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086840301855281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18c360301811261244657600080fd5b8b01878101903567ffffffffffffffff81111561246257600080fd5b80861b360382131561247357600080fd5b61247e858284612338565b9689019694505050908601906001016123e5565b50909b9a5050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826124e1576124e16124a3565b500690565b6000826124f5576124f56124a3565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081518084526020808501945080840160005b838110156125595781518752958201959082019060010161253d565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006125936060830185612529565b82810360408401526125a58185612529565b969550505050505056fea2646970667358221220f7fc342b062d3c762952a186f35a7e3e9d3be45051280c8a6bcd180dcf0e90b764736f6c63430008120033

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

0000000000000000000000004faab2f1851b58c26028ab7ba2873ff3c7b52d4c000000000000000000000000808e5cd160d8819ca24c2053037049eb611d0542

-----Decoded View---------------
Arg [0] : __pepeEditionsContractAddress (address): 0x4fAAB2f1851B58c26028ab7bA2873Ff3c7B52D4C
Arg [1] : __zogzEditionsContractAddress (address): 0x808E5Cd160d8819CA24C2053037049EB611D0542

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000004faab2f1851b58c26028ab7ba2873ff3c7b52d4c
Arg [1] : 000000000000000000000000808e5cd160d8819ca24c2053037049eb611d0542


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
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  ]
[ 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.