ETH Price: $3,484.05 (-1.25%)
Gas: 3 Gwei

Contract

0x7bF109cEa662AC66b07c189c2fc8F1cE909ad350
 

Overview

ETH Balance

0.09857 ETH

Eth Value

$343.42 (@ $3,484.05/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Public Sale Mint151044982022-07-08 21:51:19745 days ago1657317079IN
0x7bF109cE...E909ad350
0.00001 ETH0.0088011514.54474037
Public Sale Mint150765722022-07-04 14:26:05749 days ago1656944765IN
0x7bF109cE...E909ad350
0.00001 ETH0.0120148419.8556694
Public Sale Mint150744222022-07-04 6:35:25749 days ago1656916525IN
0x7bF109cE...E909ad350
0.00005 ETH0.024211489.19630146
Public Sale Mint150733322022-07-04 2:23:58749 days ago1656901438IN
0x7bF109cE...E909ad350
0.00001 ETH0.0071104211.75065289
Public Sale Mint150728202022-07-04 0:29:26750 days ago1656894566IN
0x7bF109cE...E909ad350
0.00002 ETH0.0229345520.95017744
Public Sale Mint150658752022-07-02 22:53:21751 days ago1656802401IN
0x7bF109cE...E909ad350
0.00001 ETH0.004889828.08090119
Public Sale Mint150654942022-07-02 21:23:59751 days ago1656797039IN
0x7bF109cE...E909ad350
0.00004 ETH0.011976777.36753718
Public Sale Mint150649372022-07-02 19:15:02751 days ago1656789302IN
0x7bF109cE...E909ad350
0.00005 ETH0.021061938
Public Sale Mint150510322022-06-30 15:19:04753 days ago1656602344IN
0x7bF109cE...E909ad350
0.00005 ETH0.0015123956.40527197
Public Sale Mint150448632022-06-29 11:43:20754 days ago1656503000IN
0x7bF109cE...E909ad350
0.00001 ETH0.0121049320.0045552
Public Sale Mint150443642022-06-29 9:34:31754 days ago1656495271IN
0x7bF109cE...E909ad350
0.00002 ETH0.0189009217
Public Sale Mint150439432022-06-29 7:42:50754 days ago1656488570IN
0x7bF109cE...E909ad350
0.00001 ETH0.0197541732.64564556
Public Sale Mint150431562022-06-29 4:08:12754 days ago1656475692IN
0x7bF109cE...E909ad350
0.00001 ETH0.0439006272.54994485
Public Sale Mint150422212022-06-28 23:45:54755 days ago1656459954IN
0x7bF109cE...E909ad350
0.00005 ETH0.0054443854.96994077
Public Sale Mint150420322022-06-28 22:54:35755 days ago1656456875IN
0x7bF109cE...E909ad350
0.00001 ETH0.0198177332.75068343
Public Sale Mint150420302022-06-28 22:52:38755 days ago1656456758IN
0x7bF109cE...E909ad350
0.00005 ETH0.0734549927.90056795
Public Sale Mint150419782022-06-28 22:40:16755 days ago1656456016IN
0x7bF109cE...E909ad350
0.00001 ETH0.0243810240.29196003
Public Sale Mint150418962022-06-28 22:17:42755 days ago1656454662IN
0x7bF109cE...E909ad350
0.00004 ETH0.0643459239.58253899
Public Sale Mint150418652022-06-28 22:08:57755 days ago1656454137IN
0x7bF109cE...E909ad350
0.00005 ETH0.0212294437.58481247
Public Sale Mint150418492022-06-28 22:04:22755 days ago1656453862IN
0x7bF109cE...E909ad350
0.00005 ETH0.0078542438.0695574
Public Sale Mint150418392022-06-28 22:02:15755 days ago1656453735IN
0x7bF109cE...E909ad350
0.00001 ETH0.0313115251.74526249
Public Sale Mint150418382022-06-28 22:01:46755 days ago1656453706IN
0x7bF109cE...E909ad350
0.00002 ETH0.0532947.93046356
Public Sale Mint150418352022-06-28 22:00:52755 days ago1656453652IN
0x7bF109cE...E909ad350
0.00005 ETH0.1179714944.80936325
Public Sale Mint150418352022-06-28 22:00:52755 days ago1656453652IN
0x7bF109cE...E909ad350
0.00005 ETH0.1179714944.80936325
Public Sale Mint150418182022-06-28 21:55:58755 days ago1656453358IN
0x7bF109cE...E909ad350
0.00002 ETH0.0307702127.67556126
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
150654942022-07-02 21:23:59751 days ago1656797039
0x7bF109cE...E909ad350
0.00001 ETH
150418962022-06-28 22:17:42755 days ago1656454662
0x7bF109cE...E909ad350
0.00001 ETH
150414832022-06-28 20:28:06755 days ago1656448086
0x7bF109cE...E909ad350
0.00198 ETH
150414272022-06-28 20:15:21755 days ago1656447321
0x7bF109cE...E909ad350
0.00198 ETH
150411332022-06-28 19:01:32755 days ago1656442892
0x7bF109cE...E909ad350
0.06801 ETH
150411242022-06-28 18:58:50755 days ago1656442730
0x7bF109cE...E909ad350
0.00001 ETH
149125012022-06-06 2:24:21777 days ago1654482261
0x7bF109cE...E909ad350
2.4996 ETH
148609582022-05-28 15:02:40786 days ago1653750160
0x7bF109cE...E909ad350
0.00001 ETH
148590852022-05-28 7:49:13786 days ago1653724153
0x7bF109cE...E909ad350
0.00001 ETH
148413252022-05-25 10:18:21789 days ago1653473901
0x7bF109cE...E909ad350
0.00001 ETH
148412612022-05-25 10:04:11789 days ago1653473051
0x7bF109cE...E909ad350
0.00001 ETH
148407392022-05-25 8:09:54789 days ago1653466194
0x7bF109cE...E909ad350
0.00001 ETH
148404852022-05-25 7:07:10789 days ago1653462430
0x7bF109cE...E909ad350
0.00001 ETH
148402302022-05-25 6:05:00789 days ago1653458700
0x7bF109cE...E909ad350
0.00001 ETH
148396142022-05-25 3:45:06789 days ago1653450306
0x7bF109cE...E909ad350
0.00001 ETH
148331392022-05-24 2:15:21790 days ago1653358521
0x7bF109cE...E909ad350
0.00001 ETH
148315752022-05-23 20:16:51791 days ago1653337011
0x7bF109cE...E909ad350
0.00001 ETH
148315642022-05-23 20:14:13791 days ago1653336853
0x7bF109cE...E909ad350
0.00001 ETH
148309972022-05-23 17:59:09791 days ago1653328749
0x7bF109cE...E909ad350
0.00001 ETH
148305172022-05-23 16:05:07791 days ago1653321907
0x7bF109cE...E909ad350
0.00001 ETH
148302232022-05-23 14:54:33791 days ago1653317673
0x7bF109cE...E909ad350
0.00001 ETH
148299482022-05-23 13:52:04791 days ago1653313924
0x7bF109cE...E909ad350
0.00001 ETH
148282212022-05-23 7:16:53791 days ago1653290213
0x7bF109cE...E909ad350
0.00001 ETH
148281762022-05-23 7:05:59791 days ago1653289559
0x7bF109cE...E909ad350
0.00001 ETH
148281662022-05-23 7:02:46791 days ago1653289366
0x7bF109cE...E909ad350
0.00001 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AvvenireAuction

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 9 : AvvenireAuction.sol
// SPDX-License-Identifier: MIT

/**
 *@title Avvenire ERC721 Contract
 */
pragma solidity ^0.8.4;

import "AvvenireCitizensInterface.sol";
import "Ownable.sol";
import "Strings.sol";
import "ReentrancyGuard.sol";

contract AvvenireAuction is Ownable, ReentrancyGuard {
    // mint information
    uint256 public maxPerAddressDuringWhiteList;

    uint256 public amountForTeam; // Amount of NFTs for team
    uint256 public amountForAuctionAndTeam; // Amount of NFTs for the team and auction
    uint256 public collectionSize; // Total collection size

    // AvvenireCitizensERC721 contract
    AvvenireCitizensInterface avvenireCitizens;

    struct SaleConfig {
        uint32 auctionSaleStartTime; 
        uint32 publicSaleStartTime; 
        uint64 mintlistPrice; 
        uint64 publicPrice; 
        uint32 publicSaleKey; 
    }

    SaleConfig public saleConfig; 

    // whitelist mapping (address => amount they can mint)
    mapping(address => uint256) public allowlist;

    // Mappings used to calculate the amount to refund a user from the dutch auctin
    mapping(address => uint256) public totalPaidDuringAuction;
    mapping(address => uint256) public numberMintedDuringAuction;

    /**
     * @notice Constructor calls on ERC721A constructor and sets the previously defined global variables
     * @param maxPerAddressDuringWhiteList_ the number for the max batch size and max # of NFTs per address during the whiteList
     * @param collectionSize_ the number of NFTs in the collection
     * @param amountForTeam_ the number of NFTs for the team
     * @param amountForAuctionAndTeam_ specifies total amount to auction + the total amount for the team
     * @param avvenireCitizensContractAddress_ address for AvvenireCitizensERC721 contract 
     */
    constructor(
        uint256 maxPerAddressDuringWhiteList_,
        uint256 collectionSize_,
        uint256 amountForAuctionAndTeam_,
        uint256 amountForTeam_,
        address avvenireCitizensContractAddress_
    ) {
        maxPerAddressDuringWhiteList = maxPerAddressDuringWhiteList_;

        amountForAuctionAndTeam = amountForAuctionAndTeam_;
        amountForTeam = amountForTeam_;
        collectionSize = collectionSize_;

        // set avvenire citizens address
        avvenireCitizens = AvvenireCitizensInterface(
            avvenireCitizensContractAddress_
        );

        require(
            amountForAuctionAndTeam_ <= collectionSize_, 
            "larger collection size needed"
        );
    }

    /**
      Modifier to make sure that the caller is a user and not another contract
     */
    modifier callerIsUser() {
        require(tx.origin == msg.sender, "The caller is another contract."); 
        _;
    }

    /**
     * @notice function used to mint during the auction
     * @param quantity is the quantity to mint
     */
    function auctionMint(uint256 quantity) external payable callerIsUser {
        uint256 _saleStartTime = uint256(saleConfig.auctionSaleStartTime);

        // Require that the current time is past the designated start time 
        require(
            _saleStartTime != 0 && block.timestamp >= _saleStartTime,
            "sale has not started yet"
        );

        // Require that quantity does not exceed designated amount 
        require(
            avvenireCitizens.getTotalSupply() + quantity <=
                amountForAuctionAndTeam,
            "not enough remaining reserved for auction to support desired mint amount"
        );

        uint256 totalCost = getAuctionPrice() * quantity; // total amount of ETH needed for the transaction
        avvenireCitizens.safeMint(msg.sender, quantity); 

        //Add to numberMinted mapping 
        numberMintedDuringAuction[msg.sender] =
            numberMintedDuringAuction[msg.sender] +
            quantity;

        //Add to totalPaid mapping
        totalPaidDuringAuction[msg.sender] =
            totalPaidDuringAuction[msg.sender] +
            totalCost;

        refundIfOver(totalCost); // make sure to refund the excess

    }

    /**
     * @notice function to mint for allow list
     * @param quantity amount to mint for whitelisted users
     */
    function whiteListMint(uint256 quantity) external payable callerIsUser {
        // Sets the price var to the mintlistPrice, which was set by endAuctionAndSetupNonAuctionSaleInfo(...)
        // mintlistPrice will be set to 30% below the publicSalePrice
        uint256 price = uint256(saleConfig.mintlistPrice);

        require(price != 0, "Allowlist sale has not begun yet");

        require(allowlist[msg.sender] > 0, "not eligible for allowlist mint"); 

        require(
            avvenireCitizens.getTotalSupply() + quantity <= collectionSize,
            "Reached max supply"
        );
        require(quantity <= allowlist[msg.sender], "Can not mint this many");

        allowlist[msg.sender] = allowlist[msg.sender] - quantity;

        avvenireCitizens.safeMint(msg.sender, quantity);

        uint256 totalCost = quantity * price;

        refundIfOver(totalCost);
    }

    /**
     * @notice mint function for the public sale
     * @param quantity quantity to mint
     * @param callerPublicSaleKey the key for the public sale
     */
    function publicSaleMint(uint256 quantity, uint256 callerPublicSaleKey)
        external
        payable
        callerIsUser
    {
        SaleConfig memory config = saleConfig; 

        uint256 publicSaleKey = uint256(config.publicSaleKey); // log the key
        uint256 publicPrice = uint256(config.publicPrice); // get the price 
        uint256 publicSaleStartTime = uint256(config.publicSaleStartTime); 

        require(
            publicSaleKey == callerPublicSaleKey,
            "called with incorrect public sale key"
        );

        require(
            isPublicSaleOn(publicPrice, publicSaleKey, publicSaleStartTime),
            "public sale has not begun yet"
        );
        require(
            avvenireCitizens.getTotalSupply() + quantity <= collectionSize,
            "reached max supply"
        );

        avvenireCitizens.safeMint(msg.sender, quantity);

        uint256 totalCost = publicPrice * quantity;
        refundIfOver(totalCost);
    }

    /**
     * @notice private function that refunds a user if msg.value > totalCost
     * @param price current price
     */
    function refundIfOver(uint256 price) private {
        require(msg.value >= price, "Need to send more ETH"); 

        if (msg.value > price) {
            payable(msg.sender).transfer(msg.value - price);
        }
    }

    /**
     * @notice function that user can call to be refunded
     */
    function refundMe() external callerIsUser nonReentrant {
        uint256 endingPrice = saleConfig.publicPrice;
        require(endingPrice > 0, "public price not set yet");

        uint256 actualCost = endingPrice *
            numberMintedDuringAuction[msg.sender];

        int256 reimbursement = int256(totalPaidDuringAuction[msg.sender]) -
            int256(actualCost);

        require(reimbursement > 0, "You are not eligible for a refund");

        totalPaidDuringAuction[msg.sender] = 0;

        (bool success, ) = msg.sender.call{value: uint256(reimbursement)}("");
        require(success, "Refund failed");
    }

    /**
     * @notice function to refund user on the price they paid
     * @param toRefund the address to refund
     */
    function refund(address toRefund) external onlyOwner nonReentrant {
        uint256 endingPrice = saleConfig.publicPrice;
        require(endingPrice > 0, "public price not set yet");

        uint256 actualCost = endingPrice * numberMintedDuringAuction[toRefund];

        int256 reimbursement = int256(totalPaidDuringAuction[toRefund]) -
            int256(actualCost);
        require(reimbursement > 0, "Not eligible for a refund");

        totalPaidDuringAuction[toRefund] = 0;

        (bool success, ) = toRefund.call{value: uint256(reimbursement)}("");
        require(success, "Refund failed");
    }

    /**
     * @notice function that returns a boolean indicating whtether the public sale is enabled
     * @param publicPriceWei must sell for more than 0
     * @param publicSaleKey must have a key that is non-zero
     * @param publicSaleStartTime  must be past the public start time
     */
    function isPublicSaleOn(
        // check if the public sale is on
        uint256 publicPriceWei,
        uint256 publicSaleKey,
        uint256 publicSaleStartTime
    ) public view returns (bool) {
        return
            publicPriceWei != 0 && 
            publicSaleKey != 0 && 
            block.timestamp >= publicSaleStartTime; 
    }

    uint256 public constant AUCTION_START_PRICE = .3 ether; // start price
    uint256 public constant AUCTION_END_PRICE = 0.1 ether; // floor price
    uint256 public constant AUCTION_PRICE_CURVE_LENGTH = 80 minutes; // total time of the auction
    uint256 public constant AUCTION_DROP_INTERVAL = 20 minutes;

    uint256 public constant AUCTION_DROP_PER_STEP =
        (AUCTION_START_PRICE - AUCTION_END_PRICE) /
            (AUCTION_PRICE_CURVE_LENGTH / AUCTION_DROP_INTERVAL); // how much the auction price will drop the price per unit of time

    /**
     * @notice Returns the current auction price. Uses block.timestamp to properly calculate price
     */
    function getAuctionPrice() public view returns (uint256) {
        uint256 _saleStartTime = uint256(saleConfig.auctionSaleStartTime);
        require(_saleStartTime != 0, "auction has not started");
        if (block.timestamp < _saleStartTime) {
            return AUCTION_START_PRICE; // if the timestamp is less than the start of the sale, no discount
        }
        if (block.timestamp - _saleStartTime >= AUCTION_PRICE_CURVE_LENGTH) {
            return AUCTION_END_PRICE; // lower limit of the auction
        } else {
            uint256 steps = (block.timestamp - _saleStartTime) /
                AUCTION_DROP_INTERVAL;
            return AUCTION_START_PRICE - (steps * AUCTION_DROP_PER_STEP); // calculate the price based on how far away from the start we are
        }
    }

    /**
     * @notice function to set up the saleConfig variable; sets auctionSaleStartTime to 0
     * @param mintlistPriceWei the mintlist price in wei
     * @param publicPriceWei the public sale price in wei
     * @param publicSaleStartTime the start time of the sale
     */
    function endAuctionAndSetupNonAuctionSaleInfo(
        uint64 mintlistPriceWei,
        uint64 publicPriceWei,
        uint32 publicSaleStartTime
    ) external onlyOwner {
        saleConfig = SaleConfig(
            0,
            publicSaleStartTime,
            mintlistPriceWei,
            publicPriceWei,
            saleConfig.publicSaleKey
        );
    }

    /**
     * @notice Sets the auction's starting time
     * @param timestamp the starting time
     */
    function setAuctionSaleStartTime(uint32 timestamp) external onlyOwner {
        // set the start time
        saleConfig.auctionSaleStartTime = timestamp;
    }

    /**
     * @notice sets the public sale key
     */
    function setPublicSaleKey(uint32 key) external onlyOwner {
        // set the special key (not viewable to the public)
        saleConfig.publicSaleKey = key;
    }

    /**
     * @notice sets the whitelist w/ the respective amount of number of NFTs that each address can mint
     * Requires that the addresses[] and numSlots[] are the same length
     * @param addresses the whitelist addresses
     */
    function seedWhitelist(address[] memory addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            allowlist[addresses[i]] = maxPerAddressDuringWhiteList;
        }
    }

    /**
     * @notice Removes a user from the whitelist
     * @param toRemove the public address of the user
     */
    function removeFromWhitelist(address toRemove) external onlyOwner {
        require(allowlist[toRemove] > 0, "allowlist at 0 already");
        allowlist[toRemove] = 0;
    }

    /**
     * @notice function to mint for the team
     */
    function teamMint(uint256 quantity) external onlyOwner {
        require(avvenireCitizens.getTotalSupply() + quantity <= amountForTeam, "NFTs already minted");
        avvenireCitizens.safeMint(msg.sender, quantity);  
    }

    /**
     * @notice function to withdraw the money from the contract. Only callable by the owner
     */
    function withdrawQuantity(uint256 toWithdraw) external onlyOwner nonReentrant {
        require (toWithdraw <= address(this).balance, "quantity to withdraw > balance");

        (bool success, ) = msg.sender.call{value: toWithdraw}("");
        require(success, "withdraw failed.");
    }

    /**
     * @notice function to withdraw the money from the contract. Only callable by the owner
     */
    function withdrawAll() external onlyOwner nonReentrant {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "withdraw failed.");
    }

}

File 2 of 9 : AvvenireCitizensInterface.sol
// SPDX-License-Identifier: MIT

/**
 * @title Avvenire Citizens Interface
 */
pragma solidity ^0.8.4;

import "AvvenireCitizenDataInterface.sol";
import "IERC721.sol";

interface AvvenireCitizensInterface is AvvenireCitizenDataInterface, IERC721 {

    // other functions
    function getTotalSupply() external returns (uint256);

    function requestChange(uint256) external payable;

    function setCitizenData(Citizen memory, bool) external;

    function bind(
        uint256,
        uint256,
        Sex,
        TraitType
    ) external;

    function safeMint(address, uint256) external;

    function numberMinted(address) external returns (uint256);

    function setOwnersExplicit(uint256) external;

    function burn(uint256) external;

    function numberBurned(address) external view returns (uint256);
}

interface AvvenireTraitsInterface is AvvenireCitizenDataInterface, IERC721 {
    function getTotalSupply() external returns (uint256);

    function setTraitData(Trait memory, bool) external;

    function safeMint(address, uint256) external;

    function numberMinted(address) external returns (uint256);

    function setOwnersExplicit(uint256) external;

    function burn(uint256) external;

    function numberBurned(address) external view returns (uint256);

    function makeTraitTransferable(uint256, bool) external;

    function makeTraitNonTransferrable(uint256) external;

    function isOwnerOf(uint256) external view returns (address); 

}

interface AvvenireCitizensMappingsInterface is AvvenireCitizenDataInterface {

    function getCitizen(uint256) external view returns (Citizen memory);

    function getTrait(uint256) external view returns (Trait memory);

    function setCitizen(Citizen memory) external;

    function setTrait(Trait memory) external;

    function setAllowedPermission(address, bool) external;

    function setTraitFreedom(uint256, bool) external;

    function isCitizenInitialized(uint256) external view returns (bool);

    function setCitizenChangeRequest(uint256, bool) external;

    function getCitizenChangeRequest(uint256) external view returns(bool);
 
    function setTraitChangeRequest (uint256, bool) external;

    function getTraitChangeRequest(uint256) external view returns(bool);

    // mutability config stuct
    struct MutabilityConfig {
        bool mutabilityMode; // initially set the contract to be immutable, this will keep people from trying to use the function before it is released
        // payment information
        uint256 mutabilityCost; // the amount that it costs to make a change (initializes to 0)
        // trading information
        bool tradeBeforeChange; // initially set to false, don't want people to tokens that are pending changes
    }

    function getMutabilityMode() external view returns (bool);

    function getTradeBeforeChange() external view returns (bool);

    function getChangeCost() external view returns (uint256);

}

File 3 of 9 : AvvenireCitizenDataInterface.sol
// SPDX-License-Identifier: MIT

/**
 * @title Avvenire Citizen Data Interface
*/
pragma solidity ^0.8.4;


interface AvvenireCitizenDataInterface {
    // traits are bound to sex for fitting
    enum Sex {NULL, MALE, FEMALE}

    // make an enumerable for trait types (meant to be overridden with traits from individual project)
    enum TraitType {
        NULL,
        BACKGROUND,
        BODY,
        TATTOO,
        EYES,
        MOUTH,
        MASK,
        NECKLACE,
        CLOTHING,
        EARRINGS,
        HAIR,
        EFFECT
    }

    // struct for storing trait data for the citizen (used ONLY in the citizen struct)
    struct Trait {
        uint256 tokenId; // for mapping traits to their tokens
        string uri;
        bool free; // stores if the trait is free from the citizen (defaults to false)
        bool exists; // checks existence (for minting vs transferring)
        Sex sex;
        TraitType traitType;
        uint256 originCitizenId; // for mapping traits to their previous citizen owners
    }

    // struct for storing all the traits
    struct Traits {
        Trait background;
        Trait body;
        Trait tattoo;
        Trait eyes;
        Trait mouth;
        Trait mask;
        Trait necklace;
        Trait clothing;
        Trait earrings;
        Trait hair;
        Trait effect;
    }


    // struct for storing citizens
    struct Citizen {
        uint256 tokenId;
        string uri;
        bool exists; //  checks existence (for minting vs transferring)
        Sex sex;
        Traits traits;
    }
}

File 4 of 9 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 6 of 9 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

File 7 of 9 : 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;
    }
}

File 8 of 9 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

File 9 of 9 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

        _;

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

Settings
{
  "evmVersion": "istanbul",
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "libraries": {
    "AvvenireAuction.sol": {}
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"maxPerAddressDuringWhiteList_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"},{"internalType":"uint256","name":"amountForAuctionAndTeam_","type":"uint256"},{"internalType":"uint256","name":"amountForTeam_","type":"uint256"},{"internalType":"address","name":"avvenireCitizensContractAddress_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"AUCTION_DROP_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AUCTION_DROP_PER_STEP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AUCTION_END_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AUCTION_PRICE_CURVE_LENGTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AUCTION_START_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountForAuctionAndTeam","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountForTeam","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"auctionMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"collectionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"mintlistPriceWei","type":"uint64"},{"internalType":"uint64","name":"publicPriceWei","type":"uint64"},{"internalType":"uint32","name":"publicSaleStartTime","type":"uint32"}],"name":"endAuctionAndSetupNonAuctionSaleInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAuctionPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"publicPriceWei","type":"uint256"},{"internalType":"uint256","name":"publicSaleKey","type":"uint256"},{"internalType":"uint256","name":"publicSaleStartTime","type":"uint256"}],"name":"isPublicSaleOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddressDuringWhiteList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numberMintedDuringAuction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"callerPublicSaleKey","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"toRefund","type":"address"}],"name":"refund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refundMe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toRemove","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleConfig","outputs":[{"internalType":"uint32","name":"auctionSaleStartTime","type":"uint32"},{"internalType":"uint32","name":"publicSaleStartTime","type":"uint32"},{"internalType":"uint64","name":"mintlistPrice","type":"uint64"},{"internalType":"uint64","name":"publicPrice","type":"uint64"},{"internalType":"uint32","name":"publicSaleKey","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"seedWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setAuctionSaleStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"key","type":"uint32"}],"name":"setPublicSaleKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalPaidDuringAuction","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":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"whiteListMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"toWithdraw","type":"uint256"}],"name":"withdrawQuantity","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162001fdb38038062001fdb833981016040819052620000349162000122565b6200003f33620000d2565b600180556002859055600483905560038290556005849055600680546001600160a01b0319166001600160a01b03831617905583831115620000c75760405162461bcd60e51b815260206004820152601d60248201527f6c617267657220636f6c6c656374696f6e2073697a65206e6565646564000000604482015260640160405180910390fd5b50505050506200017f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080600080600060a086880312156200013b57600080fd5b855160208701516040880151606089015160808a0151939850919650945092506001600160a01b03811681146200017157600080fd5b809150509295509295909350565b611e4c806200018f6000396000f3fe6080604052600436106101d85760003560e01c80636ebc56011161010257806390aa0b0f11610095578063cb91d8b311610064578063cb91d8b314610575578063f2fde38b14610588578063f8a987d8146105a8578063fa89401a146105be57600080fd5b806390aa0b0f14610487578063a69b1cd514610516578063a7cd52cb1461052c578063caf8a6d11461055957600080fd5b8063853828b6116100d1578063853828b61461040a5780638ab1d6811461041f5780638da5cb5b1461043f578063900280831461046757600080fd5b80636ebc560114610399578063715018a6146103b9578063784a7a9a146103ce5780637a1c4a56146103ee57600080fd5b80634bd25c6f1161017a57806359f369fe1161014957806359f369fe1461032c5780635a9e426b146103415780635cae01d3146103565780635f6575b21461036c57600080fd5b80634bd25c6f146102c15780634cfa11a3146102d65780634d3554c3146102ec5780635766245c146102ff57600080fd5b806330d5017f116101b657806330d5017f1461023257806332ad7f9414610252578063422030ba1461027b57806345c0f533146102ab57600080fd5b806302e001ef146101dd57806316e6e15a146101f25780632fbba11514610212575b600080fd5b6101f06101eb366004611a5c565b6105de565b005b3480156101fe57600080fd5b506101f061020d366004611aa6565b610891565b34801561021e57600080fd5b506101f061022d366004611a5c565b61097a565b34801561023e57600080fd5b506101f061024d366004611a5c565b610acb565b34801561025e57600080fd5b5061026860045481565b6040519081526020015b60405180910390f35b34801561028757600080fd5b5061029b610296366004611ae9565b610bff565b6040519015158152602001610272565b3480156102b757600080fd5b5061026860055481565b3480156102cd57600080fd5b50610268610c23565b3480156102e257600080fd5b5061026860025481565b6101f06102fa366004611a5c565b610d26565b34801561030b57600080fd5b5061026861031a366004611b2c565b60096020526000908152604090205481565b34801561033857600080fd5b50610268610f8a565b34801561034d57600080fd5b506101f0610fbf565b34801561036257600080fd5b506102686104b081565b34801561037857600080fd5b50610268610387366004611b2c565b600a6020526000908152604090205481565b3480156103a557600080fd5b506101f06103b4366004611b4e565b611197565b3480156103c557600080fd5b506101f06111dd565b3480156103da57600080fd5b506101f06103e9366004611b7f565b611213565b3480156103fa57600080fd5b50610268670429d069189e000081565b34801561041657600080fd5b506101f06112a5565b34801561042b57600080fd5b506101f061043a366004611b2c565b611388565b34801561044b57600080fd5b506000546040516001600160a01b039091168152602001610272565b34801561047357600080fd5b506101f0610482366004611b4e565b61142a565b34801561049357600080fd5b506007546104d99063ffffffff80821691640100000000810482169167ffffffffffffffff600160401b8304811692600160801b810490911691600160c01b9091041685565b6040805163ffffffff9687168152948616602086015267ffffffffffffffff9384169085015291166060830152909116608082015260a001610272565b34801561052257600080fd5b5061026860035481565b34801561053857600080fd5b50610268610547366004611b2c565b60086020526000908152604090205481565b34801561056557600080fd5b5061026867016345785d8a000081565b6101f0610583366004611c44565b61147a565b34801561059457600080fd5b506101f06105a3366004611b2c565b6116f6565b3480156105b457600080fd5b506102686112c081565b3480156105ca57600080fd5b506101f06105d9366004611b2c565b611791565b3233146106065760405162461bcd60e51b81526004016105fd90611c66565b60405180910390fd5b600754600160401b900467ffffffffffffffff16600081900361066b5760405162461bcd60e51b815260206004820181905260248201527f416c6c6f776c6973742073616c6520686173206e6f7420626567756e2079657460448201526064016105fd565b336000908152600860205260409020546106c75760405162461bcd60e51b815260206004820152601f60248201527f6e6f7420656c696769626c6520666f7220616c6c6f776c697374206d696e740060448201526064016105fd565b600554600654604080516362720d9160e11b8152905185926001600160a01b03169163c4e41b2291600480830192602092919082900301816000875af1158015610715573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107399190611c9d565b6107439190611ccc565b11156107865760405162461bcd60e51b815260206004820152601260248201527152656163686564206d617820737570706c7960701b60448201526064016105fd565b336000908152600860205260409020548211156107de5760405162461bcd60e51b815260206004820152601660248201527543616e206e6f74206d696e742074686973206d616e7960501b60448201526064016105fd565b336000908152600860205260409020546107f9908390611ce4565b3360008181526008602052604090819020929092556006549151632851206560e21b81526004810191909152602481018490526001600160a01b039091169063a144819490604401600060405180830381600087803b15801561085b57600080fd5b505af115801561086f573d6000803e3d6000fd5b50505050600081836108819190611cfb565b905061088c81611986565b505050565b6000546001600160a01b031633146108bb5760405162461bcd60e51b81526004016105fd90611d1a565b6040805160a0810182526000815263ffffffff9283166020820181905267ffffffffffffffff958616928201839052939094166060850181905260078054600160c01b80820490951660809097018790526fffffffffffffffffffffffffffffffff19166401000000009095026fffffffffffffffff0000000000000000191694909417600160401b909202919091176bffffffffffffffffffffffff60801b1916600160801b90910263ffffffff60c01b1916179202919091179055565b6000546001600160a01b031633146109a45760405162461bcd60e51b81526004016105fd90611d1a565b600354600654604080516362720d9160e11b8152905184926001600160a01b03169163c4e41b2291600480830192602092919082900301816000875af11580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190611c9d565b610a209190611ccc565b1115610a645760405162461bcd60e51b81526020600482015260136024820152721391951cc8185b1c9958591e481b5a5b9d1959606a1b60448201526064016105fd565b600654604051632851206560e21b8152336004820152602481018390526001600160a01b039091169063a144819490604401600060405180830381600087803b158015610ab057600080fd5b505af1158015610ac4573d6000803e3d6000fd5b5050505050565b6000546001600160a01b03163314610af55760405162461bcd60e51b81526004016105fd90611d1a565b600260015403610b175760405162461bcd60e51b81526004016105fd90611d4f565b600260015547811115610b6c5760405162461bcd60e51b815260206004820152601e60248201527f7175616e7469747920746f207769746864726177203e2062616c616e6365000060448201526064016105fd565b604051600090339083908381818185875af1925050503d8060008114610bae576040519150601f19603f3d011682016040523d82523d6000602084013e610bb3565b606091505b5050905080610bf75760405162461bcd60e51b815260206004820152601060248201526f3bb4ba34323930bb903330b4b632b21760811b60448201526064016105fd565b505060018055565b60008315801590610c0f57508215155b8015610c1b5750814210155b949350505050565b60075460009063ffffffff16808203610c7e5760405162461bcd60e51b815260206004820152601760248201527f61756374696f6e20686173206e6f74207374617274656400000000000000000060448201526064016105fd565b80421015610c9557670429d069189e000091505090565b6112c0610ca28242611ce4565b10610cb65767016345785d8a000091505090565b60006104b0610cc58342611ce4565b610ccf9190611d86565b9050610cdf6104b06112c0611d86565b610cf967016345785d8a0000670429d069189e0000611ce4565b610d039190611d86565b610d0d9082611cfb565b610d1f90670429d069189e0000611ce4565b9250505090565b323314610d455760405162461bcd60e51b81526004016105fd90611c66565b60075463ffffffff168015801590610d5d5750804210155b610da95760405162461bcd60e51b815260206004820152601860248201527f73616c6520686173206e6f74207374617274656420796574000000000000000060448201526064016105fd565b60045482600660009054906101000a90046001600160a01b03166001600160a01b031663c4e41b226040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190611c9d565b610e309190611ccc565b1115610eb55760405162461bcd60e51b815260206004820152604860248201527f6e6f7420656e6f7567682072656d61696e696e6720726573657276656420666f60448201527f722061756374696f6e20746f20737570706f72742064657369726564206d696e6064820152671d08185b5bdd5b9d60c21b608482015260a4016105fd565b600082610ec0610c23565b610eca9190611cfb565b600654604051632851206560e21b8152336004820152602481018690529192506001600160a01b03169063a144819490604401600060405180830381600087803b158015610f1757600080fd5b505af1158015610f2b573d6000803e3d6000fd5b5050336000908152600a6020526040902054610f4a9250859150611ccc565b336000908152600a6020908152604080832093909355600990522054610f71908290611ccc565b3360009081526009602052604090205561088c81611986565b610f986104b06112c0611d86565b610fb267016345785d8a0000670429d069189e0000611ce4565b610fbc9190611d86565b81565b323314610fde5760405162461bcd60e51b81526004016105fd90611c66565b6002600154036110005760405162461bcd60e51b81526004016105fd90611d4f565b6002600155600754600160801b900467ffffffffffffffff16806110615760405162461bcd60e51b81526020600482015260186024820152771c1d589b1a58c81c1c9a58d9481b9bdd081cd95d081e595d60421b60448201526064016105fd565b336000908152600a602052604081205461107b9083611cfb565b336000908152600960205260408120549192509061109a908390611da8565b9050600081136110f65760405162461bcd60e51b815260206004820152602160248201527f596f7520617265206e6f7420656c696769626c6520666f72206120726566756e6044820152601960fa1b60648201526084016105fd565b336000818152600960205260408082208290555190919083908381818185875af1925050503d8060008114611147576040519150601f19603f3d011682016040523d82523d6000602084013e61114c565b606091505b505090508061118d5760405162461bcd60e51b815260206004820152600d60248201526c1499599d5b990819985a5b1959609a1b60448201526064016105fd565b5050600180555050565b6000546001600160a01b031633146111c15760405162461bcd60e51b81526004016105fd90611d1a565b6007805463ffffffff191663ffffffff92909216919091179055565b6000546001600160a01b031633146112075760405162461bcd60e51b81526004016105fd90611d1a565b6112116000611a0c565b565b6000546001600160a01b0316331461123d5760405162461bcd60e51b81526004016105fd90611d1a565b60005b81518110156112a1576002546008600084848151811061126257611262611de7565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061129990611dfd565b915050611240565b5050565b6000546001600160a01b031633146112cf5760405162461bcd60e51b81526004016105fd90611d1a565b6002600154036112f15760405162461bcd60e51b81526004016105fd90611d4f565b6002600155604051600090339047908381818185875af1925050503d8060008114611338576040519150601f19603f3d011682016040523d82523d6000602084013e61133d565b606091505b50509050806113815760405162461bcd60e51b815260206004820152601060248201526f3bb4ba34323930bb903330b4b632b21760811b60448201526064016105fd565b5060018055565b6000546001600160a01b031633146113b25760405162461bcd60e51b81526004016105fd90611d1a565b6001600160a01b0381166000908152600860205260409020546114105760405162461bcd60e51b8152602060048201526016602482015275616c6c6f776c697374206174203020616c726561647960501b60448201526064016105fd565b6001600160a01b0316600090815260086020526040812055565b6000546001600160a01b031633146114545760405162461bcd60e51b81526004016105fd90611d1a565b6007805463ffffffff909216600160c01b0263ffffffff60c01b19909216919091179055565b3233146114995760405162461bcd60e51b81526004016105fd90611c66565b6040805160a08101825260075463ffffffff8082168352640100000000820481166020840181905267ffffffffffffffff600160401b8404811695850195909552600160801b830490941660608401819052600160c01b9092041660808301819052919284831461155a5760405162461bcd60e51b815260206004820152602560248201527f63616c6c6564207769746820696e636f7272656374207075626c69632073616c60448201526465206b657960d81b60648201526084016105fd565b611565828483610bff565b6115b15760405162461bcd60e51b815260206004820152601d60248201527f7075626c69632073616c6520686173206e6f7420626567756e2079657400000060448201526064016105fd565b600554600654604080516362720d9160e11b8152905189926001600160a01b03169163c4e41b2291600480830192602092919082900301816000875af11580156115ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116239190611c9d565b61162d9190611ccc565b11156116705760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b60448201526064016105fd565b600654604051632851206560e21b8152336004820152602481018890526001600160a01b039091169063a144819490604401600060405180830381600087803b1580156116bc57600080fd5b505af11580156116d0573d6000803e3d6000fd5b50505050600086836116e29190611cfb565b90506116ed81611986565b50505050505050565b6000546001600160a01b031633146117205760405162461bcd60e51b81526004016105fd90611d1a565b6001600160a01b0381166117855760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105fd565b61178e81611a0c565b50565b6000546001600160a01b031633146117bb5760405162461bcd60e51b81526004016105fd90611d1a565b6002600154036117dd5760405162461bcd60e51b81526004016105fd90611d4f565b6002600155600754600160801b900467ffffffffffffffff168061183e5760405162461bcd60e51b81526020600482015260186024820152771c1d589b1a58c81c1c9a58d9481b9bdd081cd95d081e595d60421b60448201526064016105fd565b6001600160a01b0382166000908152600a60205260408120546118619083611cfb565b6001600160a01b03841660009081526009602052604081205491925090611889908390611da8565b9050600081136118db5760405162461bcd60e51b815260206004820152601960248201527f4e6f7420656c696769626c6520666f72206120726566756e640000000000000060448201526064016105fd565b6001600160a01b0384166000818152600960205260408082208290555190919083908381818185875af1925050503d8060008114611935576040519150601f19603f3d011682016040523d82523d6000602084013e61193a565b606091505b505090508061197b5760405162461bcd60e51b815260206004820152600d60248201526c1499599d5b990819985a5b1959609a1b60448201526064016105fd565b505060018055505050565b803410156119ce5760405162461bcd60e51b815260206004820152601560248201527409ccacac840e8de40e6cadcc840dadee4ca408aa89605b1b60448201526064016105fd565b8034111561178e57336108fc6119e48334611ce4565b6040518115909202916000818181858888f193505050501580156112a1573d6000803e3d6000fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215611a6e57600080fd5b5035919050565b803567ffffffffffffffff81168114611a8d57600080fd5b919050565b803563ffffffff81168114611a8d57600080fd5b600080600060608486031215611abb57600080fd5b611ac484611a75565b9250611ad260208501611a75565b9150611ae060408501611a92565b90509250925092565b600080600060608486031215611afe57600080fd5b505081359360208301359350604090920135919050565b80356001600160a01b0381168114611a8d57600080fd5b600060208284031215611b3e57600080fd5b611b4782611b15565b9392505050565b600060208284031215611b6057600080fd5b611b4782611a92565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215611b9257600080fd5b823567ffffffffffffffff80821115611baa57600080fd5b818501915085601f830112611bbe57600080fd5b813581811115611bd057611bd0611b69565b8060051b604051601f19603f83011681018181108582111715611bf557611bf5611b69565b604052918252848201925083810185019188831115611c1357600080fd5b938501935b82851015611c3857611c2985611b15565b84529385019392850192611c18565b98975050505050505050565b60008060408385031215611c5757600080fd5b50508035926020909101359150565b6020808252601f908201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163742e00604082015260600190565b600060208284031215611caf57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611cdf57611cdf611cb6565b500190565b600082821015611cf657611cf6611cb6565b500390565b6000816000190483118215151615611d1557611d15611cb6565b500290565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600082611da357634e487b7160e01b600052601260045260246000fd5b500490565b60008083128015600160ff1b850184121615611dc657611dc6611cb6565b6001600160ff1b0384018313811615611de157611de1611cb6565b50500390565b634e487b7160e01b600052603260045260246000fd5b600060018201611e0f57611e0f611cb6565b506001019056fea26469706673582212200f8c75162aae9fc1e44880701b79ba6cd10971e13773f053c4446d925617b2e364736f6c634300080d00330000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000006400000000000000000000000042ef5eb48586757b2f69a37569b6f35120f2515e

Deployed Bytecode

0x6080604052600436106101d85760003560e01c80636ebc56011161010257806390aa0b0f11610095578063cb91d8b311610064578063cb91d8b314610575578063f2fde38b14610588578063f8a987d8146105a8578063fa89401a146105be57600080fd5b806390aa0b0f14610487578063a69b1cd514610516578063a7cd52cb1461052c578063caf8a6d11461055957600080fd5b8063853828b6116100d1578063853828b61461040a5780638ab1d6811461041f5780638da5cb5b1461043f578063900280831461046757600080fd5b80636ebc560114610399578063715018a6146103b9578063784a7a9a146103ce5780637a1c4a56146103ee57600080fd5b80634bd25c6f1161017a57806359f369fe1161014957806359f369fe1461032c5780635a9e426b146103415780635cae01d3146103565780635f6575b21461036c57600080fd5b80634bd25c6f146102c15780634cfa11a3146102d65780634d3554c3146102ec5780635766245c146102ff57600080fd5b806330d5017f116101b657806330d5017f1461023257806332ad7f9414610252578063422030ba1461027b57806345c0f533146102ab57600080fd5b806302e001ef146101dd57806316e6e15a146101f25780632fbba11514610212575b600080fd5b6101f06101eb366004611a5c565b6105de565b005b3480156101fe57600080fd5b506101f061020d366004611aa6565b610891565b34801561021e57600080fd5b506101f061022d366004611a5c565b61097a565b34801561023e57600080fd5b506101f061024d366004611a5c565b610acb565b34801561025e57600080fd5b5061026860045481565b6040519081526020015b60405180910390f35b34801561028757600080fd5b5061029b610296366004611ae9565b610bff565b6040519015158152602001610272565b3480156102b757600080fd5b5061026860055481565b3480156102cd57600080fd5b50610268610c23565b3480156102e257600080fd5b5061026860025481565b6101f06102fa366004611a5c565b610d26565b34801561030b57600080fd5b5061026861031a366004611b2c565b60096020526000908152604090205481565b34801561033857600080fd5b50610268610f8a565b34801561034d57600080fd5b506101f0610fbf565b34801561036257600080fd5b506102686104b081565b34801561037857600080fd5b50610268610387366004611b2c565b600a6020526000908152604090205481565b3480156103a557600080fd5b506101f06103b4366004611b4e565b611197565b3480156103c557600080fd5b506101f06111dd565b3480156103da57600080fd5b506101f06103e9366004611b7f565b611213565b3480156103fa57600080fd5b50610268670429d069189e000081565b34801561041657600080fd5b506101f06112a5565b34801561042b57600080fd5b506101f061043a366004611b2c565b611388565b34801561044b57600080fd5b506000546040516001600160a01b039091168152602001610272565b34801561047357600080fd5b506101f0610482366004611b4e565b61142a565b34801561049357600080fd5b506007546104d99063ffffffff80821691640100000000810482169167ffffffffffffffff600160401b8304811692600160801b810490911691600160c01b9091041685565b6040805163ffffffff9687168152948616602086015267ffffffffffffffff9384169085015291166060830152909116608082015260a001610272565b34801561052257600080fd5b5061026860035481565b34801561053857600080fd5b50610268610547366004611b2c565b60086020526000908152604090205481565b34801561056557600080fd5b5061026867016345785d8a000081565b6101f0610583366004611c44565b61147a565b34801561059457600080fd5b506101f06105a3366004611b2c565b6116f6565b3480156105b457600080fd5b506102686112c081565b3480156105ca57600080fd5b506101f06105d9366004611b2c565b611791565b3233146106065760405162461bcd60e51b81526004016105fd90611c66565b60405180910390fd5b600754600160401b900467ffffffffffffffff16600081900361066b5760405162461bcd60e51b815260206004820181905260248201527f416c6c6f776c6973742073616c6520686173206e6f7420626567756e2079657460448201526064016105fd565b336000908152600860205260409020546106c75760405162461bcd60e51b815260206004820152601f60248201527f6e6f7420656c696769626c6520666f7220616c6c6f776c697374206d696e740060448201526064016105fd565b600554600654604080516362720d9160e11b8152905185926001600160a01b03169163c4e41b2291600480830192602092919082900301816000875af1158015610715573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107399190611c9d565b6107439190611ccc565b11156107865760405162461bcd60e51b815260206004820152601260248201527152656163686564206d617820737570706c7960701b60448201526064016105fd565b336000908152600860205260409020548211156107de5760405162461bcd60e51b815260206004820152601660248201527543616e206e6f74206d696e742074686973206d616e7960501b60448201526064016105fd565b336000908152600860205260409020546107f9908390611ce4565b3360008181526008602052604090819020929092556006549151632851206560e21b81526004810191909152602481018490526001600160a01b039091169063a144819490604401600060405180830381600087803b15801561085b57600080fd5b505af115801561086f573d6000803e3d6000fd5b50505050600081836108819190611cfb565b905061088c81611986565b505050565b6000546001600160a01b031633146108bb5760405162461bcd60e51b81526004016105fd90611d1a565b6040805160a0810182526000815263ffffffff9283166020820181905267ffffffffffffffff958616928201839052939094166060850181905260078054600160c01b80820490951660809097018790526fffffffffffffffffffffffffffffffff19166401000000009095026fffffffffffffffff0000000000000000191694909417600160401b909202919091176bffffffffffffffffffffffff60801b1916600160801b90910263ffffffff60c01b1916179202919091179055565b6000546001600160a01b031633146109a45760405162461bcd60e51b81526004016105fd90611d1a565b600354600654604080516362720d9160e11b8152905184926001600160a01b03169163c4e41b2291600480830192602092919082900301816000875af11580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190611c9d565b610a209190611ccc565b1115610a645760405162461bcd60e51b81526020600482015260136024820152721391951cc8185b1c9958591e481b5a5b9d1959606a1b60448201526064016105fd565b600654604051632851206560e21b8152336004820152602481018390526001600160a01b039091169063a144819490604401600060405180830381600087803b158015610ab057600080fd5b505af1158015610ac4573d6000803e3d6000fd5b5050505050565b6000546001600160a01b03163314610af55760405162461bcd60e51b81526004016105fd90611d1a565b600260015403610b175760405162461bcd60e51b81526004016105fd90611d4f565b600260015547811115610b6c5760405162461bcd60e51b815260206004820152601e60248201527f7175616e7469747920746f207769746864726177203e2062616c616e6365000060448201526064016105fd565b604051600090339083908381818185875af1925050503d8060008114610bae576040519150601f19603f3d011682016040523d82523d6000602084013e610bb3565b606091505b5050905080610bf75760405162461bcd60e51b815260206004820152601060248201526f3bb4ba34323930bb903330b4b632b21760811b60448201526064016105fd565b505060018055565b60008315801590610c0f57508215155b8015610c1b5750814210155b949350505050565b60075460009063ffffffff16808203610c7e5760405162461bcd60e51b815260206004820152601760248201527f61756374696f6e20686173206e6f74207374617274656400000000000000000060448201526064016105fd565b80421015610c9557670429d069189e000091505090565b6112c0610ca28242611ce4565b10610cb65767016345785d8a000091505090565b60006104b0610cc58342611ce4565b610ccf9190611d86565b9050610cdf6104b06112c0611d86565b610cf967016345785d8a0000670429d069189e0000611ce4565b610d039190611d86565b610d0d9082611cfb565b610d1f90670429d069189e0000611ce4565b9250505090565b323314610d455760405162461bcd60e51b81526004016105fd90611c66565b60075463ffffffff168015801590610d5d5750804210155b610da95760405162461bcd60e51b815260206004820152601860248201527f73616c6520686173206e6f74207374617274656420796574000000000000000060448201526064016105fd565b60045482600660009054906101000a90046001600160a01b03166001600160a01b031663c4e41b226040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190611c9d565b610e309190611ccc565b1115610eb55760405162461bcd60e51b815260206004820152604860248201527f6e6f7420656e6f7567682072656d61696e696e6720726573657276656420666f60448201527f722061756374696f6e20746f20737570706f72742064657369726564206d696e6064820152671d08185b5bdd5b9d60c21b608482015260a4016105fd565b600082610ec0610c23565b610eca9190611cfb565b600654604051632851206560e21b8152336004820152602481018690529192506001600160a01b03169063a144819490604401600060405180830381600087803b158015610f1757600080fd5b505af1158015610f2b573d6000803e3d6000fd5b5050336000908152600a6020526040902054610f4a9250859150611ccc565b336000908152600a6020908152604080832093909355600990522054610f71908290611ccc565b3360009081526009602052604090205561088c81611986565b610f986104b06112c0611d86565b610fb267016345785d8a0000670429d069189e0000611ce4565b610fbc9190611d86565b81565b323314610fde5760405162461bcd60e51b81526004016105fd90611c66565b6002600154036110005760405162461bcd60e51b81526004016105fd90611d4f565b6002600155600754600160801b900467ffffffffffffffff16806110615760405162461bcd60e51b81526020600482015260186024820152771c1d589b1a58c81c1c9a58d9481b9bdd081cd95d081e595d60421b60448201526064016105fd565b336000908152600a602052604081205461107b9083611cfb565b336000908152600960205260408120549192509061109a908390611da8565b9050600081136110f65760405162461bcd60e51b815260206004820152602160248201527f596f7520617265206e6f7420656c696769626c6520666f72206120726566756e6044820152601960fa1b60648201526084016105fd565b336000818152600960205260408082208290555190919083908381818185875af1925050503d8060008114611147576040519150601f19603f3d011682016040523d82523d6000602084013e61114c565b606091505b505090508061118d5760405162461bcd60e51b815260206004820152600d60248201526c1499599d5b990819985a5b1959609a1b60448201526064016105fd565b5050600180555050565b6000546001600160a01b031633146111c15760405162461bcd60e51b81526004016105fd90611d1a565b6007805463ffffffff191663ffffffff92909216919091179055565b6000546001600160a01b031633146112075760405162461bcd60e51b81526004016105fd90611d1a565b6112116000611a0c565b565b6000546001600160a01b0316331461123d5760405162461bcd60e51b81526004016105fd90611d1a565b60005b81518110156112a1576002546008600084848151811061126257611262611de7565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061129990611dfd565b915050611240565b5050565b6000546001600160a01b031633146112cf5760405162461bcd60e51b81526004016105fd90611d1a565b6002600154036112f15760405162461bcd60e51b81526004016105fd90611d4f565b6002600155604051600090339047908381818185875af1925050503d8060008114611338576040519150601f19603f3d011682016040523d82523d6000602084013e61133d565b606091505b50509050806113815760405162461bcd60e51b815260206004820152601060248201526f3bb4ba34323930bb903330b4b632b21760811b60448201526064016105fd565b5060018055565b6000546001600160a01b031633146113b25760405162461bcd60e51b81526004016105fd90611d1a565b6001600160a01b0381166000908152600860205260409020546114105760405162461bcd60e51b8152602060048201526016602482015275616c6c6f776c697374206174203020616c726561647960501b60448201526064016105fd565b6001600160a01b0316600090815260086020526040812055565b6000546001600160a01b031633146114545760405162461bcd60e51b81526004016105fd90611d1a565b6007805463ffffffff909216600160c01b0263ffffffff60c01b19909216919091179055565b3233146114995760405162461bcd60e51b81526004016105fd90611c66565b6040805160a08101825260075463ffffffff8082168352640100000000820481166020840181905267ffffffffffffffff600160401b8404811695850195909552600160801b830490941660608401819052600160c01b9092041660808301819052919284831461155a5760405162461bcd60e51b815260206004820152602560248201527f63616c6c6564207769746820696e636f7272656374207075626c69632073616c60448201526465206b657960d81b60648201526084016105fd565b611565828483610bff565b6115b15760405162461bcd60e51b815260206004820152601d60248201527f7075626c69632073616c6520686173206e6f7420626567756e2079657400000060448201526064016105fd565b600554600654604080516362720d9160e11b8152905189926001600160a01b03169163c4e41b2291600480830192602092919082900301816000875af11580156115ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116239190611c9d565b61162d9190611ccc565b11156116705760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b60448201526064016105fd565b600654604051632851206560e21b8152336004820152602481018890526001600160a01b039091169063a144819490604401600060405180830381600087803b1580156116bc57600080fd5b505af11580156116d0573d6000803e3d6000fd5b50505050600086836116e29190611cfb565b90506116ed81611986565b50505050505050565b6000546001600160a01b031633146117205760405162461bcd60e51b81526004016105fd90611d1a565b6001600160a01b0381166117855760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105fd565b61178e81611a0c565b50565b6000546001600160a01b031633146117bb5760405162461bcd60e51b81526004016105fd90611d1a565b6002600154036117dd5760405162461bcd60e51b81526004016105fd90611d4f565b6002600155600754600160801b900467ffffffffffffffff168061183e5760405162461bcd60e51b81526020600482015260186024820152771c1d589b1a58c81c1c9a58d9481b9bdd081cd95d081e595d60421b60448201526064016105fd565b6001600160a01b0382166000908152600a60205260408120546118619083611cfb565b6001600160a01b03841660009081526009602052604081205491925090611889908390611da8565b9050600081136118db5760405162461bcd60e51b815260206004820152601960248201527f4e6f7420656c696769626c6520666f72206120726566756e640000000000000060448201526064016105fd565b6001600160a01b0384166000818152600960205260408082208290555190919083908381818185875af1925050503d8060008114611935576040519150601f19603f3d011682016040523d82523d6000602084013e61193a565b606091505b505090508061197b5760405162461bcd60e51b815260206004820152600d60248201526c1499599d5b990819985a5b1959609a1b60448201526064016105fd565b505060018055505050565b803410156119ce5760405162461bcd60e51b815260206004820152601560248201527409ccacac840e8de40e6cadcc840dadee4ca408aa89605b1b60448201526064016105fd565b8034111561178e57336108fc6119e48334611ce4565b6040518115909202916000818181858888f193505050501580156112a1573d6000803e3d6000fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215611a6e57600080fd5b5035919050565b803567ffffffffffffffff81168114611a8d57600080fd5b919050565b803563ffffffff81168114611a8d57600080fd5b600080600060608486031215611abb57600080fd5b611ac484611a75565b9250611ad260208501611a75565b9150611ae060408501611a92565b90509250925092565b600080600060608486031215611afe57600080fd5b505081359360208301359350604090920135919050565b80356001600160a01b0381168114611a8d57600080fd5b600060208284031215611b3e57600080fd5b611b4782611b15565b9392505050565b600060208284031215611b6057600080fd5b611b4782611a92565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215611b9257600080fd5b823567ffffffffffffffff80821115611baa57600080fd5b818501915085601f830112611bbe57600080fd5b813581811115611bd057611bd0611b69565b8060051b604051601f19603f83011681018181108582111715611bf557611bf5611b69565b604052918252848201925083810185019188831115611c1357600080fd5b938501935b82851015611c3857611c2985611b15565b84529385019392850192611c18565b98975050505050505050565b60008060408385031215611c5757600080fd5b50508035926020909101359150565b6020808252601f908201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163742e00604082015260600190565b600060208284031215611caf57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611cdf57611cdf611cb6565b500190565b600082821015611cf657611cf6611cb6565b500390565b6000816000190483118215151615611d1557611d15611cb6565b500290565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600082611da357634e487b7160e01b600052601260045260246000fd5b500490565b60008083128015600160ff1b850184121615611dc657611dc6611cb6565b6001600160ff1b0384018313811615611de157611de1611cb6565b50500390565b634e487b7160e01b600052603260045260246000fd5b600060018201611e0f57611e0f611cb6565b506001019056fea26469706673582212200f8c75162aae9fc1e44880701b79ba6cd10971e13773f053c4446d925617b2e364736f6c634300080d0033

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

0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000006400000000000000000000000042ef5eb48586757b2f69a37569b6f35120f2515e

-----Decoded View---------------
Arg [0] : maxPerAddressDuringWhiteList_ (uint256): 2
Arg [1] : collectionSize_ (uint256): 5000
Arg [2] : amountForAuctionAndTeam_ (uint256): 1000
Arg [3] : amountForTeam_ (uint256): 100
Arg [4] : avvenireCitizensContractAddress_ (address): 0x42Ef5eb48586757b2F69A37569B6F35120f2515e

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [1] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [2] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [4] : 00000000000000000000000042ef5eb48586757b2f69a37569b6f35120f2515e


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.