ETH Price: $3,639.34 (+8.22%)

Contract

0xCAd269dBf31403FD99736717b63D2F14ACB71217
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Mint169018362023-03-25 3:33:47613 days ago1679715227IN
0xCAd269dB...4ACB71217
0.009 ETH0.001080414.79871036
Mint169017212023-03-25 3:10:35613 days ago1679713835IN
0xCAd269dB...4ACB71217
0.009 ETH0.0013048714.48135201
Mint167811042023-03-08 4:16:35630 days ago1678248995IN
0xCAd269dB...4ACB71217
0.009 ETH0.001519620.81454208
Mint167810922023-03-08 4:13:59630 days ago1678248839IN
0xCAd269dB...4ACB71217
0.009 ETH0.0019240421.35287122
Set Approval For...163031412022-12-31 7:05:59697 days ago1672470359IN
0xCAd269dB...4ACB71217
0 ETH0.0008896519.08592786
Mint162998232022-12-30 19:58:59698 days ago1672430339IN
0xCAd269dB...4ACB71217
0.009 ETH0.0016696418.52957882
Set Approval For...162930532022-12-29 21:18:47699 days ago1672348727IN
0xCAd269dB...4ACB71217
0 ETH0.0008156717.49885538
Mint162864192022-12-28 23:04:35700 days ago1672268675IN
0xCAd269dB...4ACB71217
0.009 ETH0.0011348315.54423937
Mint162863942022-12-28 22:59:35700 days ago1672268375IN
0xCAd269dB...4ACB71217
0.009 ETH0.0015986517.74174524
Safe Transfer Fr...161874962022-12-15 3:45:11713 days ago1671075911IN
0xCAd269dB...4ACB71217
0 ETH0.0006520414.17760855
Set Approval For...161512842022-12-10 2:21:23719 days ago1670638883IN
0xCAd269dB...4ACB71217
0 ETH0.000466417.46785334
Set Approval For...161512722022-12-10 2:18:59719 days ago1670638739IN
0xCAd269dB...4ACB71217
0 ETH0.0004410817.85680615
Set Approval For...161287352022-12-06 22:27:35722 days ago1670365655IN
0xCAd269dB...4ACB71217
0 ETH0.0006890914.78335755
Set Approval For...160675802022-11-28 9:26:35730 days ago1669627595IN
0xCAd269dB...4ACB71217
0 ETH0.0005172311.096344
Set Approval For...160666622022-11-28 6:22:23730 days ago1669616543IN
0xCAd269dB...4ACB71217
0 ETH0.0005159511.06897418
Safe Transfer Fr...160513592022-11-26 3:04:59732 days ago1669431899IN
0xCAd269dB...4ACB71217
0 ETH0.0005126511.15948931
Safe Transfer Fr...160513582022-11-26 3:04:47732 days ago1669431887IN
0xCAd269dB...4ACB71217
0 ETH0.0007294511.57145155
Set Approval For...160457432022-11-25 8:15:23733 days ago1669364123IN
0xCAd269dB...4ACB71217
0 ETH0.0004877310.46355222
Mint160444352022-11-25 3:52:11733 days ago1669348331IN
0xCAd269dB...4ACB71217
0.009 ETH0.0010381711.52159335
Mint160442662022-11-25 3:18:11733 days ago1669346291IN
0xCAd269dB...4ACB71217
0.009 ETH0.0010669311.84072673
Mint160437312022-11-25 1:30:23734 days ago1669339823IN
0xCAd269dB...4ACB71217
0.009 ETH0.0009971611.06645803
Set Approval For...160402102022-11-24 13:43:11734 days ago1669297391IN
0xCAd269dB...4ACB71217
0 ETH0.0005698612.22547948
Set Approval For...160401712022-11-24 13:35:23734 days ago1669296923IN
0xCAd269dB...4ACB71217
0 ETH0.0004821410.34358105
Set Approval For...160401432022-11-24 13:29:35734 days ago1669296575IN
0xCAd269dB...4ACB71217
0 ETH0.0005692312.21199989
Mint160390432022-11-24 9:48:23734 days ago1669283303IN
0xCAd269dB...4ACB71217
0.009 ETH0.0012791513.15477424
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
169018362023-03-25 3:33:47613 days ago1679715227
0xCAd269dB...4ACB71217
0.009 ETH
169017212023-03-25 3:10:35613 days ago1679713835
0xCAd269dB...4ACB71217
0.009 ETH
167811042023-03-08 4:16:35630 days ago1678248995
0xCAd269dB...4ACB71217
0.009 ETH
167810922023-03-08 4:13:59630 days ago1678248839
0xCAd269dB...4ACB71217
0.009 ETH
162998232022-12-30 19:58:59698 days ago1672430339
0xCAd269dB...4ACB71217
0.009 ETH
162864192022-12-28 23:04:35700 days ago1672268675
0xCAd269dB...4ACB71217
0.009 ETH
162863942022-12-28 22:59:35700 days ago1672268375
0xCAd269dB...4ACB71217
0.009 ETH
160444352022-11-25 3:52:11733 days ago1669348331
0xCAd269dB...4ACB71217
0.009 ETH
160442662022-11-25 3:18:11733 days ago1669346291
0xCAd269dB...4ACB71217
0.009 ETH
160437312022-11-25 1:30:23734 days ago1669339823
0xCAd269dB...4ACB71217
0.009 ETH
160390432022-11-24 9:48:23734 days ago1669283303
0xCAd269dB...4ACB71217
0.009 ETH
160389802022-11-24 9:35:35734 days ago1669282535
0xCAd269dB...4ACB71217
0.009 ETH
160370832022-11-24 3:13:59734 days ago1669259639
0xCAd269dB...4ACB71217
0.009 ETH
160364102022-11-24 0:59:11735 days ago1669251551
0xCAd269dB...4ACB71217
0.009 ETH
160364072022-11-24 0:58:35735 days ago1669251515
0xCAd269dB...4ACB71217
0.009 ETH
160364042022-11-24 0:57:59735 days ago1669251479
0xCAd269dB...4ACB71217
0.009 ETH
160359232022-11-23 23:20:47735 days ago1669245647
0xCAd269dB...4ACB71217
0.009 ETH
160359202022-11-23 23:19:59735 days ago1669245599
0xCAd269dB...4ACB71217
0.009 ETH
160359052022-11-23 23:16:59735 days ago1669245419
0xCAd269dB...4ACB71217
0.009 ETH
160358702022-11-23 23:09:59735 days ago1669244999
0xCAd269dB...4ACB71217
0.009 ETH
160358602022-11-23 23:07:59735 days ago1669244879
0xCAd269dB...4ACB71217
0.009 ETH
160358222022-11-23 23:00:23735 days ago1669244423
0xCAd269dB...4ACB71217
0.009 ETH
160357142022-11-23 22:38:47735 days ago1669243127
0xCAd269dB...4ACB71217
0.009 ETH
160356952022-11-23 22:34:47735 days ago1669242887
0xCAd269dB...4ACB71217
0.009 ETH
160356862022-11-23 22:32:59735 days ago1669242779
0xCAd269dB...4ACB71217
0.009 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
KingKacy

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-23
*/

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

    /**
     * @dev 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: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Tree proofs.
 *
 * The tree and the proofs can be generated using our
 * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].
 * You will find a quickstart guide in the readme.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 * OpenZeppelin's JavaScript library generates merkle trees that are safe
 * against this attack out of the box.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Calldata version of {verify}
     *
     * _Available since v4.7._
     */
    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Calldata version of {processProof}
     *
     * _Available since v4.7._
     */
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Calldata version of {multiProofVerify}
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     *
     * _Available since v4.7._
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Calldata version of {processMultiProof}.
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

// File: https://github.com/ProjectOpenSea/operator-filter-registry/src/IOperatorFilterRegistry.sol


pragma solidity ^0.8.13;

interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external view returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function unregister(address addr) external;
    function updateOperator(address registrant, address operator, bool filtered) external;
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
    function subscribe(address registrant, address registrantToSubscribe) external;
    function unsubscribe(address registrant, bool copyExistingEntries) external;
    function subscriptionOf(address addr) external returns (address registrant);
    function subscribers(address registrant) external returns (address[] memory);
    function subscriberAt(address registrant, uint256 index) external returns (address);
    function copyEntriesOf(address registrant, address registrantToCopy) external;
    function isOperatorFiltered(address registrant, address operator) external returns (bool);
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
    function filteredOperators(address addr) external returns (address[] memory);
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
    function isRegistered(address addr) external returns (bool);
    function codeHashOf(address addr) external returns (bytes32);
}

// File: https://github.com/ProjectOpenSea/operator-filter-registry/src/OperatorFilterer.sol


pragma solidity ^0.8.13;


/**
 * @title  OperatorFilterer
 * @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another
 *         registrant's entries in the OperatorFilterRegistry.
 * @dev    This smart contract is meant to be inherited by token contracts so they can use the following:
 *         - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods.
 *         - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods.
 */
abstract contract OperatorFilterer {
    error OperatorNotAllowed(address operator);

    IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY =
        IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);

    constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {
        // If an inheriting token contract is deployed to a network without the registry deployed, the modifier
        // will not revert, but the contract will need to be registered with the registry once it is deployed in
        // order for the modifier to filter addresses.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
            if (subscribe) {
                OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    OPERATOR_FILTER_REGISTRY.register(address(this));
                }
            }
        }
    }

    modifier onlyAllowedOperator(address from) virtual {
        // Allow spending tokens from addresses with balance
        // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred
        // from an EOA.
        if (from != msg.sender) {
            _checkFilterOperator(msg.sender);
        }
        _;
    }

    modifier onlyAllowedOperatorApproval(address operator) virtual {
        _checkFilterOperator(operator);
        _;
    }
    
    function _checkFilterOperator(address operator) internal view virtual {
        // Check registry code length to facilitate testing in environments without a deployed registry.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
            if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) {
                revert OperatorNotAllowed(operator);
            }
        }
    }
}

// File: https://github.com/ProjectOpenSea/operator-filter-registry/src/DefaultOperatorFilterer.sol


pragma solidity ^0.8.13;


/**
 * @title  DefaultOperatorFilterer
 * @notice Inherits from OperatorFilterer and automatically subscribes to the default OpenSea subscription.
 */
abstract contract DefaultOperatorFilterer is OperatorFilterer {
    address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);

    constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}

// File: ERC721A.sol


pragma solidity ^0.8.13;




interface IERC721A {
    error ApprovalCallerNotOwnerNorApproved();
    error ApprovalQueryForNonexistentToken();
    error BalanceQueryForZeroAddress();
    error MintToZeroAddress();
    error MintZeroQuantity();
    error OwnerQueryForNonexistentToken();
    error TransferCallerNotOwnerNorApproved();
    error TransferFromIncorrectOwner();
    error TransferToNonERC721ReceiverImplementer();
    error TransferToZeroAddress();
    error URIQueryForNonexistentToken();
    error MintERC2309QuantityExceedsLimit();
    error OwnershipNotInitializedForExtraData();
    
    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
        bool burned;
        uint24 extraData;
    }

    function totalSupply() external view returns (uint256);
    
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
    
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );
    
    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );
    
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );
    
    function balanceOf(address owner) external view returns (uint256 balance);
    
    function ownerOf(uint256 tokenId) external view returns (address owner);
    
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external payable;
    
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;
    
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;
    
    function approve(address to, uint256 tokenId) external payable;
    
    function setApprovalForAll(address operator, bool _approved) external;
    
    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);
        
    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);
        
    function name() external view returns (string memory);
    
    function symbol() external view returns (string memory);
    
    function tokenURI(uint256 tokenId) external view returns (string memory);
    
    event ConsecutiveTransfer(
        uint256 indexed fromTokenId,
        uint256 toTokenId,
        address indexed from,
        address indexed to
    );
}

interface ERC721A__IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

contract ERC721A is IERC721A {
    struct TokenApprovalRef {
        address value;
    }
    
    uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;
    uint256 private constant _BITPOS_NUMBER_MINTED = 64;
    uint256 private constant _BITPOS_NUMBER_BURNED = 128;
    uint256 private constant _BITPOS_AUX = 192;
    uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;
    uint256 private constant _BITPOS_START_TIMESTAMP = 160;
    uint256 private constant _BITMASK_BURNED = 1 << 224;
    uint256 private constant _BITPOS_NEXT_INITIALIZED = 225;
    uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225;
    uint256 private constant _BITPOS_EXTRA_DATA = 232;
    uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;
    uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1;
    uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;
    bytes32 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;
    uint256 private _currentIndex;
    uint256 private _burnCounter;
    string private _name;
    string private _symbol;

    mapping(uint256 => uint256) private _packedOwnerships;
    mapping(address => uint256) private _packedAddressData;
    mapping(uint256 => TokenApprovalRef) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }
    
    function _startTokenId() internal view virtual returns (uint256) {
        return 1;
    }
    
    function _nextTokenId() internal view virtual returns (uint256) {
        return _currentIndex;
    }

    function totalSupply() public view virtual override returns (uint256) {
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }
    
    function _totalMinted() internal view virtual returns (uint256) {
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }
    
    function _totalBurned() internal view virtual returns (uint256) {
        return _burnCounter;
    }
    
    function balanceOf(address owner)
        public
        view
        virtual
        override
        returns (uint256)
    {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY;
    }
    
    function _numberMinted(address owner) internal view returns (uint256) {
        return
            (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) &
            _BITMASK_ADDRESS_DATA_ENTRY;
    }
    
    function _numberBurned(address owner) internal view returns (uint256) {
        return
            (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) &
            _BITMASK_ADDRESS_DATA_ENTRY;
    }
    
    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> _BITPOS_AUX);
    }
    
    function _setAux(address owner, uint64 aux) internal virtual {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        assembly {
            auxCasted := aux
        }
        packed =
            (packed & _BITMASK_AUX_COMPLEMENT) |
            (auxCasted << _BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }
    
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165.
            interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
            interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
    }
    
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    
    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length != 0
                ? string(abi.encodePacked(baseURI, _toString(tokenId)))
                : "";
    }
    
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }
    
    function ownerOf(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }
    
    function _ownershipOf(uint256 tokenId)
        internal
        view
        virtual
        returns (TokenOwnership memory)
    {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }
    
    function _ownershipAt(uint256 index)
        internal
        view
        virtual
        returns (TokenOwnership memory)
    {
        return _unpackedOwnership(_packedOwnerships[index]);
    }
    
    function _initializeOwnershipAt(uint256 index) internal virtual {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }
    
    function _packedOwnershipOf(uint256 tokenId)
        private
        view
        returns (uint256 packed)
    {
        if (_startTokenId() <= tokenId) {
            packed = _packedOwnerships[tokenId];
            if (packed & _BITMASK_BURNED == 0) {
                if (packed == 0) {
                    if (tokenId >= _currentIndex)
                        revert OwnerQueryForNonexistentToken();
                    for (;;) {
                        unchecked {
                            packed = _packedOwnerships[--tokenId];
                        }
                        if (packed == 0) continue;
                        return packed;
                    }
                }
                return packed;
            }
        }
        revert OwnerQueryForNonexistentToken();
    }
    
    function _unpackedOwnership(uint256 packed)
        private
        pure
        returns (TokenOwnership memory ownership)
    {
        ownership.addr = address(uint160(packed));
        ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP);
        ownership.burned = packed & _BITMASK_BURNED != 0;
        ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA);
    }
    
    function _packOwnershipData(address owner, uint256 flags)
        private
        view
        returns (uint256 result)
    {
        assembly {
            owner := and(owner, _BITMASK_ADDRESS)
            result := or(
                owner,
                or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags)
            )
        }
    }
    
    function _nextInitializedFlag(uint256 quantity)
        private
        pure
        returns (uint256 result)
    {
        assembly {
            result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }
    
    function approve(address to, uint256 tokenId)
        public
        payable
        virtual
        override
    {
        _approve(to, tokenId, true);
    }
    
    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId].value;
    }
    
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), operator, approved);
    }
    
    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }
    
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && // If within bounds,
            _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned.
    }
    
    function _isSenderApprovedOrOwner(
        address approvedAddress,
        address owner,
        address msgSender
    ) private pure returns (bool result) {
        assembly {
            owner := and(owner, _BITMASK_ADDRESS)
            msgSender := and(msgSender, _BITMASK_ADDRESS)
            result := or(eq(msgSender, owner), eq(msgSender, approvedAddress))
        }
    }
    
    function _getApprovedSlotAndAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId];
        assembly {
            approvedAddressSlot := tokenApproval.slot
            approvedAddress := sload(approvedAddressSlot)
        }
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable virtual override {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from)
            revert TransferFromIncorrectOwner();

        (
            uint256 approvedAddressSlot,
            address approvedAddress
        ) = _getApprovedSlotAndAddress(tokenId);

        if (
            !_isSenderApprovedOrOwner(
                approvedAddress,
                from,
                _msgSenderERC721A()
            )
        )
            if (!isApprovedForAll(from, _msgSenderERC721A()))
                revert TransferCallerNotOwnerNorApproved();

        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        assembly {
            if approvedAddress {
                sstore(approvedAddressSlot, 0)
            }
        }
        
        unchecked {
            --_packedAddressData[from]; // Updates: `balance -= 1`.
            ++_packedAddressData[to]; // Updates: `balance += 1`.
            
            _packedOwnerships[tokenId] = _packOwnershipData(
                to,
                _BITMASK_NEXT_INITIALIZED |
                    _nextExtraData(from, to, prevOwnershipPacked)
            );

            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                if (_packedOwnerships[nextTokenId] == 0) {
                    if (nextTokenId != _currentIndex) {
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }
    
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
    
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public payable virtual override {
        transferFrom(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }
    
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
    
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
    
    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try
            ERC721A__IERC721Receiver(to).onERC721Received(
                _msgSenderERC721A(),
                from,
                tokenId,
                _data
            )
        returns (bytes4 retval) {
            return
                retval ==
                ERC721A__IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }
    
    function _mint(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);
        
        unchecked {
            _packedAddressData[to] +=
                quantity *
                ((1 << _BITPOS_NUMBER_MINTED) | 1);
                
            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) |
                    _nextExtraData(address(0), to, 0)
            );

            uint256 toMasked;
            uint256 end = startTokenId + quantity;
            
            assembly {
                toMasked := and(to, _BITMASK_ADDRESS)
                log4(
                    0, // Start of data (0, since no data).
                    0, // End of data (0, since no data).
                    _TRANSFER_EVENT_SIGNATURE, // Signature.
                    0, // `address(0)`.
                    toMasked, // `to`.
                    startTokenId // `tokenId`.
                )
                
                for {
                    let tokenId := add(startTokenId, 1)
                } iszero(eq(tokenId, end)) {
                    tokenId := add(tokenId, 1)
                } {
                    log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId)
                }
            }
            if (toMasked == 0) revert MintToZeroAddress();

            _currentIndex = end;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }
    
    function _mintERC2309(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();
        if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT)
            revert MintERC2309QuantityExceedsLimit();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        unchecked {
            _packedAddressData[to] +=
                quantity *
                ((1 << _BITPOS_NUMBER_MINTED) | 1);
                
            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) |
                    _nextExtraData(address(0), to, 0)
            );

            emit ConsecutiveTransfer(
                startTokenId,
                startTokenId + quantity - 1,
                address(0),
                to
            );

            _currentIndex = startTokenId + quantity;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }
    
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal virtual {
        _mint(to, quantity);

        unchecked {
            if (to.code.length != 0) {
                uint256 end = _currentIndex;
                uint256 index = end - quantity;
                do {
                    if (
                        !_checkContractOnERC721Received(
                            address(0),
                            to,
                            index++,
                            _data
                        )
                    ) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (index < end);
                if (_currentIndex != end) revert();
            }
        }
    }
    
    function _safeMint(address to, uint256 quantity) internal virtual {
        _safeMint(to, quantity, "");
    }
    
    function _approve(address to, uint256 tokenId) internal virtual {
        _approve(to, tokenId, false);
    }
    
    function _approve(
        address to,
        uint256 tokenId,
        bool approvalCheck
    ) internal virtual {
        address owner = ownerOf(tokenId);

        if (approvalCheck)
            if (_msgSenderERC721A() != owner)
                if (!isApprovedForAll(owner, _msgSenderERC721A())) {
                    revert ApprovalCallerNotOwnerNorApproved();
                }

        _tokenApprovals[tokenId].value = to;
        emit Approval(owner, to, tokenId);
    }
    
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }
    
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        address from = address(uint160(prevOwnershipPacked));

        (
            uint256 approvedAddressSlot,
            address approvedAddress
        ) = _getApprovedSlotAndAddress(tokenId);

        if (approvalCheck) {
            if (
                !_isSenderApprovedOrOwner(
                    approvedAddress,
                    from,
                    _msgSenderERC721A()
                )
            )
                if (!isApprovedForAll(from, _msgSenderERC721A()))
                    revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        assembly {
            if approvedAddress {
                sstore(approvedAddressSlot, 0)
            }
        }
        
        unchecked {
            _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1;
            _packedOwnerships[tokenId] = _packOwnershipData(
                from,
                (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) |
                    _nextExtraData(from, address(0), prevOwnershipPacked)
            );

            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                if (_packedOwnerships[nextTokenId] == 0) {
                    if (nextTokenId != _currentIndex) {
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        unchecked {
            _burnCounter++;
        }
    }
    
    function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual {
        uint256 packed = _packedOwnerships[index];
        if (packed == 0) revert OwnershipNotInitializedForExtraData();
        uint256 extraDataCasted;
        assembly {
            extraDataCasted := extraData
        }
        packed =
            (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) |
            (extraDataCasted << _BITPOS_EXTRA_DATA);
        _packedOwnerships[index] = packed;
    }
    
    function _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}
    
    function _nextExtraData(
        address from,
        address to,
        uint256 prevOwnershipPacked
    ) private view returns (uint256) {
        uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA);
        return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA;
    }
    
    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }
    
    function _toString(uint256 value)
        internal
        pure
        virtual
        returns (string memory str)
    {
        assembly {
            let m := add(mload(0x40), 0xa0)
            mstore(0x40, m)
            str := sub(m, 0x20)
            mstore(str, 0)

            let end := str
            
            for { let temp := value } 1 {} {
                str := sub(str, 1)
                mstore8(str, add(48, mod(temp, 10)))
                temp := div(temp, 10)
                if iszero(temp) { break }
            }

            let length := sub(end, str)
            str := sub(str, 0x20)
            mstore(str, length)
        }
    }
}

contract KingKacy is ERC721A, Ownable {
    bytes32 merkleRoot;
    uint256 privateLaunch;
    uint256 publicLaunch;

    constructor(bytes32 _merkleRoot, uint256 _privateMint, uint256 _publicMint) ERC721A("King Kacy", "KKC") {
        merkleRoot = _merkleRoot;
        privateLaunch = _privateMint;
        publicLaunch = _publicMint;
        _mint(msg.sender, 1);
    }

    function mint(uint256 quantity, bytes32[] calldata proof) external payable {
        require(block.timestamp >= privateLaunch, "Mint not yet started");
        if (block.timestamp <= publicLaunch)
            require(
                MerkleProof.verify(
                    proof,
                    merkleRoot,
                    keccak256(abi.encodePacked(_msgSender()))
                ),
                "Invalid merkle proof"
            );
        require(
            msg.value >= quantity * 0.009 ether,
            "Please provide the required value"
        );
        _mint(msg.sender, quantity);
        payable(owner()).transfer(msg.value);
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length != 0
                ? string(abi.encodePacked(baseURI, _toString(tokenId), ".json"))
                : "";
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return
            "ipfs://bafybeiblq2md7resz44e6zaoabvlkrhnsq7g32f74g6tnfmxndnqn26tmu/";
    }

    function updateMerkleRoot(bytes32 _root) external onlyOwner {
        merkleRoot = _root;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"_privateMint","type":"uint256"},{"internalType":"uint256","name":"_publicMint","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"updateMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162002eb338038062002eb38339818101604052810190620000379190620004e9565b6040518060400160405280600981526020017f4b696e67204b61637900000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4b4b4300000000000000000000000000000000000000000000000000000000008152508160029081620000b49190620007b5565b508060039081620000c69190620007b5565b50620000d76200013060201b60201c565b6000819055505050620000ff620000f36200013960201b60201c565b6200014160201b60201c565b8260098190555081600a8190555080600b81905550620001273360016200020760201b60201c565b5050506200089c565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000805490506000820362000248576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200025d6000848385620003ee60201b60201c565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550620002ec83620002ce6000866000620003f460201b60201c565b620002df856200042460201b60201c565b176200043460201b60201c565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b8181146200038f57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460018101905062000352565b5060008203620003cb576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000819055505050620003e960008483856200045f60201b60201c565b505050565b50505050565b60008060e883901c905060e8620004138686846200046560201b60201c565b62ffffff16901b9150509392505050565b60006001821460e11b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b60009392505050565b600080fd5b6000819050919050565b620004888162000473565b81146200049457600080fd5b50565b600081519050620004a8816200047d565b92915050565b6000819050919050565b620004c381620004ae565b8114620004cf57600080fd5b50565b600081519050620004e381620004b8565b92915050565b6000806000606084860312156200050557620005046200046e565b5b6000620005158682870162000497565b93505060206200052886828701620004d2565b92505060406200053b86828701620004d2565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005c757607f821691505b602082108103620005dd57620005dc6200057f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006477fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000608565b62000653868362000608565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000696620006906200068a84620004ae565b6200066b565b620004ae565b9050919050565b6000819050919050565b620006b28362000675565b620006ca620006c1826200069d565b84845462000615565b825550505050565b600090565b620006e1620006d2565b620006ee818484620006a7565b505050565b5b8181101562000716576200070a600082620006d7565b600181019050620006f4565b5050565b601f82111562000765576200072f81620005e3565b6200073a84620005f8565b810160208510156200074a578190505b620007626200075985620005f8565b830182620006f3565b50505b505050565b600082821c905092915050565b60006200078a600019846008026200076a565b1980831691505092915050565b6000620007a5838362000777565b9150826002028217905092915050565b620007c08262000545565b67ffffffffffffffff811115620007dc57620007db62000550565b5b620007e88254620005ae565b620007f58282856200071a565b600060209050601f8311600181146200082d576000841562000818578287015190505b62000824858262000797565b86555062000894565b601f1984166200083d86620005e3565b60005b82811015620008675784890151825560018201915060208501945060208101905062000840565b8683101562000887578489015162000883601f89168262000777565b8355505b6001600288020188555050505b505050505050565b61260780620008ac6000396000f3fe6080604052600436106101145760003560e01c806370a08231116100a0578063b88d4fde11610064578063b88d4fde14610376578063ba41b0c614610392578063c87b56dd146103ae578063e985e9c5146103eb578063f2fde38b1461042857610114565b806370a08231146102a3578063715018a6146102e05780638da5cb5b146102f757806395d89b4114610322578063a22cb4651461034d57610114565b806318160ddd116100e757806318160ddd146101da57806323b872dd1461020557806342842e0e146102215780634783f0ef1461023d5780636352211e1461026657610114565b806301ffc9a71461011957806306fdde0314610156578063081812fc14610181578063095ea7b3146101be575b600080fd5b34801561012557600080fd5b50610140600480360381019061013b9190611970565b610451565b60405161014d91906119b8565b60405180910390f35b34801561016257600080fd5b5061016b6104e3565b6040516101789190611a63565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a39190611abb565b610575565b6040516101b59190611b29565b60405180910390f35b6101d860048036038101906101d39190611b70565b6105f4565b005b3480156101e657600080fd5b506101ef610604565b6040516101fc9190611bbf565b60405180910390f35b61021f600480360381019061021a9190611bda565b61061b565b005b61023b60048036038101906102369190611bda565b61093d565b005b34801561024957600080fd5b50610264600480360381019061025f9190611c63565b61095d565b005b34801561027257600080fd5b5061028d60048036038101906102889190611abb565b61096f565b60405161029a9190611b29565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190611c90565b610981565b6040516102d79190611bbf565b60405180910390f35b3480156102ec57600080fd5b506102f5610a39565b005b34801561030357600080fd5b5061030c610a4d565b6040516103199190611b29565b60405180910390f35b34801561032e57600080fd5b50610337610a77565b6040516103449190611a63565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f9190611ce9565b610b09565b005b610390600480360381019061038b9190611e5e565b610c14565b005b6103ac60048036038101906103a79190611f41565b610c87565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190611abb565b610e42565b6040516103e29190611a63565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190611fa1565b610ee0565b60405161041f91906119b8565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190611c90565b610f74565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104ac57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104dc5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600280546104f290612010565b80601f016020809104026020016040519081016040528092919081815260200182805461051e90612010565b801561056b5780601f106105405761010080835404028352916020019161056b565b820191906000526020600020905b81548152906001019060200180831161054e57829003601f168201915b5050505050905090565b600061058082610ff7565b6105b6576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61060082826001611056565b5050565b600061060e6111a2565b6001546000540303905090565b6000610626826111ab565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461068d576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610699846112a3565b915091506106af81876106aa6112ca565b6112d2565b6106fb576106c4866106bf6112ca565b610ee0565b6106fa576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610761576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61076e8686866001611316565b801561077957600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506108478561082388888761131c565b7c020000000000000000000000000000000000000000000000000000000017611344565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036108cd57600060018501905060006004600083815260200190815260200160002054036108cb5760005481146108ca578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610935868686600161136f565b505050505050565b61095883838360405180602001604052806000815250610c14565b505050565b610965611375565b8060098190555050565b600061097a826111ab565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109e8576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b610a41611375565b610a4b60006113f3565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610a8690612010565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab290612010565b8015610aff5780601f10610ad457610100808354040283529160200191610aff565b820191906000526020600020905b815481529060010190602001808311610ae257829003601f168201915b5050505050905090565b8060076000610b166112ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610bc36112ca565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610c0891906119b8565b60405180910390a35050565b610c1f84848461061b565b60008373ffffffffffffffffffffffffffffffffffffffff163b14610c8157610c4a848484846114b9565b610c80576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b600a54421015610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc39061208d565b60405180910390fd5b600b544211610d9057610d50828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600954610d25611609565b604051602001610d3591906120f5565b60405160208183030381529060405280519060200120611611565b610d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d869061215c565b60405180910390fd5b5b661ff973cafa800083610da391906121ab565b341015610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc9061225f565b60405180910390fd5b610def3384611628565b610df7610a4d565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610e3c573d6000803e3d6000fd5b50505050565b6060610e4d82610ff7565b610e83576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e8d6117e3565b90506000815103610ead5760405180602001604052806000815250610ed8565b80610eb784611803565b604051602001610ec8929190612307565b6040516020818303038152906040525b915050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f7c611375565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe2906123a8565b60405180910390fd5b610ff4816113f3565b50565b6000816110026111a2565b11158015611011575060005482105b801561104f575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b60006110618361096f565b905081156110ec578073ffffffffffffffffffffffffffffffffffffffff166110886112ca565b73ffffffffffffffffffffffffffffffffffffffff16146110eb576110b4816110af6112ca565b610ee0565b6110ea576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b836006600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a450505050565b60006001905090565b6000816111b66111a2565b1161126c576004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082160361126b576000810361126657600054821061123b576040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b60046000836001900393508381526020019081526020016000205490506000810361129e5761123c565b61129e565b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8611333868684611853565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b61137d611609565b73ffffffffffffffffffffffffffffffffffffffff1661139b610a4d565b73ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890612414565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026114df6112ca565b8786866040518563ffffffff1660e01b81526004016115019493929190612489565b6020604051808303816000875af192505050801561153d57506040513d601f19601f8201168201806040525081019061153a91906124ea565b60015b6115b6573d806000811461156d576040519150601f19603f3d011682016040523d82523d6000602084013e611572565b606091505b5060008151036115ae576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b600033905090565b60008261161e858461185c565b1490509392505050565b60008054905060008203611668576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116756000848385611316565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506116ec836116dd600086600061131c565b6116e6856118b2565b17611344565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461178d57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050611752565b50600082036117c8576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506117de600084838561136f565b505050565b606060405180608001604052806043815260200161258f60439139905090565b606060a060405101806040526020810391506000825281835b60011561183e57600184039350600a81066030018453600a810490508061181c575b50828103602084039350808452505050919050565b60009392505050565b60008082905060005b84518110156118a7576118928286838151811061188557611884612517565b5b60200260200101516118c2565b9150808061189f90612546565b915050611865565b508091505092915050565b60006001821460e11b9050919050565b60008183106118da576118d582846118ed565b6118e5565b6118e483836118ed565b5b905092915050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61194d81611918565b811461195857600080fd5b50565b60008135905061196a81611944565b92915050565b6000602082840312156119865761198561190e565b5b60006119948482850161195b565b91505092915050565b60008115159050919050565b6119b28161199d565b82525050565b60006020820190506119cd60008301846119a9565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611a0d5780820151818401526020810190506119f2565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a35826119d3565b611a3f81856119de565b9350611a4f8185602086016119ef565b611a5881611a19565b840191505092915050565b60006020820190508181036000830152611a7d8184611a2a565b905092915050565b6000819050919050565b611a9881611a85565b8114611aa357600080fd5b50565b600081359050611ab581611a8f565b92915050565b600060208284031215611ad157611ad061190e565b5b6000611adf84828501611aa6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b1382611ae8565b9050919050565b611b2381611b08565b82525050565b6000602082019050611b3e6000830184611b1a565b92915050565b611b4d81611b08565b8114611b5857600080fd5b50565b600081359050611b6a81611b44565b92915050565b60008060408385031215611b8757611b8661190e565b5b6000611b9585828601611b5b565b9250506020611ba685828601611aa6565b9150509250929050565b611bb981611a85565b82525050565b6000602082019050611bd46000830184611bb0565b92915050565b600080600060608486031215611bf357611bf261190e565b5b6000611c0186828701611b5b565b9350506020611c1286828701611b5b565b9250506040611c2386828701611aa6565b9150509250925092565b6000819050919050565b611c4081611c2d565b8114611c4b57600080fd5b50565b600081359050611c5d81611c37565b92915050565b600060208284031215611c7957611c7861190e565b5b6000611c8784828501611c4e565b91505092915050565b600060208284031215611ca657611ca561190e565b5b6000611cb484828501611b5b565b91505092915050565b611cc68161199d565b8114611cd157600080fd5b50565b600081359050611ce381611cbd565b92915050565b60008060408385031215611d0057611cff61190e565b5b6000611d0e85828601611b5b565b9250506020611d1f85828601611cd4565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611d6b82611a19565b810181811067ffffffffffffffff82111715611d8a57611d89611d33565b5b80604052505050565b6000611d9d611904565b9050611da98282611d62565b919050565b600067ffffffffffffffff821115611dc957611dc8611d33565b5b611dd282611a19565b9050602081019050919050565b82818337600083830152505050565b6000611e01611dfc84611dae565b611d93565b905082815260208101848484011115611e1d57611e1c611d2e565b5b611e28848285611ddf565b509392505050565b600082601f830112611e4557611e44611d29565b5b8135611e55848260208601611dee565b91505092915050565b60008060008060808587031215611e7857611e7761190e565b5b6000611e8687828801611b5b565b9450506020611e9787828801611b5b565b9350506040611ea887828801611aa6565b925050606085013567ffffffffffffffff811115611ec957611ec8611913565b5b611ed587828801611e30565b91505092959194509250565b600080fd5b600080fd5b60008083601f840112611f0157611f00611d29565b5b8235905067ffffffffffffffff811115611f1e57611f1d611ee1565b5b602083019150836020820283011115611f3a57611f39611ee6565b5b9250929050565b600080600060408486031215611f5a57611f5961190e565b5b6000611f6886828701611aa6565b935050602084013567ffffffffffffffff811115611f8957611f88611913565b5b611f9586828701611eeb565b92509250509250925092565b60008060408385031215611fb857611fb761190e565b5b6000611fc685828601611b5b565b9250506020611fd785828601611b5b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061202857607f821691505b60208210810361203b5761203a611fe1565b5b50919050565b7f4d696e74206e6f74207965742073746172746564000000000000000000000000600082015250565b60006120776014836119de565b915061208282612041565b602082019050919050565b600060208201905081810360008301526120a68161206a565b9050919050565b60008160601b9050919050565b60006120c5826120ad565b9050919050565b60006120d7826120ba565b9050919050565b6120ef6120ea82611b08565b6120cc565b82525050565b600061210182846120de565b60148201915081905092915050565b7f496e76616c6964206d65726b6c652070726f6f66000000000000000000000000600082015250565b60006121466014836119de565b915061215182612110565b602082019050919050565b6000602082019050818103600083015261217581612139565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006121b682611a85565b91506121c183611a85565b92508282026121cf81611a85565b915082820484148315176121e6576121e561217c565b5b5092915050565b7f506c656173652070726f76696465207468652072657175697265642076616c7560008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006122496021836119de565b9150612254826121ed565b604082019050919050565b600060208201905081810360008301526122788161223c565b9050919050565b600081905092915050565b6000612295826119d3565b61229f818561227f565b93506122af8185602086016119ef565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006122f160058361227f565b91506122fc826122bb565b600582019050919050565b6000612313828561228a565b915061231f828461228a565b915061232a826122e4565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006123926026836119de565b915061239d82612336565b604082019050919050565b600060208201905081810360008301526123c181612385565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006123fe6020836119de565b9150612409826123c8565b602082019050919050565b6000602082019050818103600083015261242d816123f1565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061245b82612434565b612465818561243f565b93506124758185602086016119ef565b61247e81611a19565b840191505092915050565b600060808201905061249e6000830187611b1a565b6124ab6020830186611b1a565b6124b86040830185611bb0565b81810360608301526124ca8184612450565b905095945050505050565b6000815190506124e481611944565b92915050565b600060208284031215612500576124ff61190e565b5b600061250e848285016124d5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061255182611a85565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036125835761258261217c565b5b60018201905091905056fe697066733a2f2f62616679626569626c71326d64377265737a343465367a616f6162766c6b72686e7371376733326637346736746e666d786e646e716e3236746d752fa2646970667358221220bda870c5818990080abb1e1094ce7fd00dd618f3550a4a6c43117896a5214ba664736f6c63430008110033009e3209abec929eaa00f62cfbe7096b2b55d0cfe431f7a8441cbe7ca581072f00000000000000000000000000000000000000000000000000000000637e97e000000000000000000000000000000000000000000000000000000000637ea5f0

Deployed Bytecode

0x6080604052600436106101145760003560e01c806370a08231116100a0578063b88d4fde11610064578063b88d4fde14610376578063ba41b0c614610392578063c87b56dd146103ae578063e985e9c5146103eb578063f2fde38b1461042857610114565b806370a08231146102a3578063715018a6146102e05780638da5cb5b146102f757806395d89b4114610322578063a22cb4651461034d57610114565b806318160ddd116100e757806318160ddd146101da57806323b872dd1461020557806342842e0e146102215780634783f0ef1461023d5780636352211e1461026657610114565b806301ffc9a71461011957806306fdde0314610156578063081812fc14610181578063095ea7b3146101be575b600080fd5b34801561012557600080fd5b50610140600480360381019061013b9190611970565b610451565b60405161014d91906119b8565b60405180910390f35b34801561016257600080fd5b5061016b6104e3565b6040516101789190611a63565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a39190611abb565b610575565b6040516101b59190611b29565b60405180910390f35b6101d860048036038101906101d39190611b70565b6105f4565b005b3480156101e657600080fd5b506101ef610604565b6040516101fc9190611bbf565b60405180910390f35b61021f600480360381019061021a9190611bda565b61061b565b005b61023b60048036038101906102369190611bda565b61093d565b005b34801561024957600080fd5b50610264600480360381019061025f9190611c63565b61095d565b005b34801561027257600080fd5b5061028d60048036038101906102889190611abb565b61096f565b60405161029a9190611b29565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190611c90565b610981565b6040516102d79190611bbf565b60405180910390f35b3480156102ec57600080fd5b506102f5610a39565b005b34801561030357600080fd5b5061030c610a4d565b6040516103199190611b29565b60405180910390f35b34801561032e57600080fd5b50610337610a77565b6040516103449190611a63565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f9190611ce9565b610b09565b005b610390600480360381019061038b9190611e5e565b610c14565b005b6103ac60048036038101906103a79190611f41565b610c87565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190611abb565b610e42565b6040516103e29190611a63565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190611fa1565b610ee0565b60405161041f91906119b8565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190611c90565b610f74565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104ac57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104dc5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600280546104f290612010565b80601f016020809104026020016040519081016040528092919081815260200182805461051e90612010565b801561056b5780601f106105405761010080835404028352916020019161056b565b820191906000526020600020905b81548152906001019060200180831161054e57829003601f168201915b5050505050905090565b600061058082610ff7565b6105b6576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61060082826001611056565b5050565b600061060e6111a2565b6001546000540303905090565b6000610626826111ab565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461068d576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610699846112a3565b915091506106af81876106aa6112ca565b6112d2565b6106fb576106c4866106bf6112ca565b610ee0565b6106fa576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610761576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61076e8686866001611316565b801561077957600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506108478561082388888761131c565b7c020000000000000000000000000000000000000000000000000000000017611344565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036108cd57600060018501905060006004600083815260200190815260200160002054036108cb5760005481146108ca578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610935868686600161136f565b505050505050565b61095883838360405180602001604052806000815250610c14565b505050565b610965611375565b8060098190555050565b600061097a826111ab565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109e8576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b610a41611375565b610a4b60006113f3565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610a8690612010565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab290612010565b8015610aff5780601f10610ad457610100808354040283529160200191610aff565b820191906000526020600020905b815481529060010190602001808311610ae257829003601f168201915b5050505050905090565b8060076000610b166112ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610bc36112ca565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610c0891906119b8565b60405180910390a35050565b610c1f84848461061b565b60008373ffffffffffffffffffffffffffffffffffffffff163b14610c8157610c4a848484846114b9565b610c80576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b600a54421015610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc39061208d565b60405180910390fd5b600b544211610d9057610d50828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600954610d25611609565b604051602001610d3591906120f5565b60405160208183030381529060405280519060200120611611565b610d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d869061215c565b60405180910390fd5b5b661ff973cafa800083610da391906121ab565b341015610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc9061225f565b60405180910390fd5b610def3384611628565b610df7610a4d565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610e3c573d6000803e3d6000fd5b50505050565b6060610e4d82610ff7565b610e83576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e8d6117e3565b90506000815103610ead5760405180602001604052806000815250610ed8565b80610eb784611803565b604051602001610ec8929190612307565b6040516020818303038152906040525b915050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f7c611375565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe2906123a8565b60405180910390fd5b610ff4816113f3565b50565b6000816110026111a2565b11158015611011575060005482105b801561104f575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b60006110618361096f565b905081156110ec578073ffffffffffffffffffffffffffffffffffffffff166110886112ca565b73ffffffffffffffffffffffffffffffffffffffff16146110eb576110b4816110af6112ca565b610ee0565b6110ea576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b836006600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a450505050565b60006001905090565b6000816111b66111a2565b1161126c576004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082160361126b576000810361126657600054821061123b576040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b60046000836001900393508381526020019081526020016000205490506000810361129e5761123c565b61129e565b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8611333868684611853565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b61137d611609565b73ffffffffffffffffffffffffffffffffffffffff1661139b610a4d565b73ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890612414565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026114df6112ca565b8786866040518563ffffffff1660e01b81526004016115019493929190612489565b6020604051808303816000875af192505050801561153d57506040513d601f19601f8201168201806040525081019061153a91906124ea565b60015b6115b6573d806000811461156d576040519150601f19603f3d011682016040523d82523d6000602084013e611572565b606091505b5060008151036115ae576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b600033905090565b60008261161e858461185c565b1490509392505050565b60008054905060008203611668576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116756000848385611316565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506116ec836116dd600086600061131c565b6116e6856118b2565b17611344565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461178d57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050611752565b50600082036117c8576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506117de600084838561136f565b505050565b606060405180608001604052806043815260200161258f60439139905090565b606060a060405101806040526020810391506000825281835b60011561183e57600184039350600a81066030018453600a810490508061181c575b50828103602084039350808452505050919050565b60009392505050565b60008082905060005b84518110156118a7576118928286838151811061188557611884612517565b5b60200260200101516118c2565b9150808061189f90612546565b915050611865565b508091505092915050565b60006001821460e11b9050919050565b60008183106118da576118d582846118ed565b6118e5565b6118e483836118ed565b5b905092915050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61194d81611918565b811461195857600080fd5b50565b60008135905061196a81611944565b92915050565b6000602082840312156119865761198561190e565b5b60006119948482850161195b565b91505092915050565b60008115159050919050565b6119b28161199d565b82525050565b60006020820190506119cd60008301846119a9565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611a0d5780820151818401526020810190506119f2565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a35826119d3565b611a3f81856119de565b9350611a4f8185602086016119ef565b611a5881611a19565b840191505092915050565b60006020820190508181036000830152611a7d8184611a2a565b905092915050565b6000819050919050565b611a9881611a85565b8114611aa357600080fd5b50565b600081359050611ab581611a8f565b92915050565b600060208284031215611ad157611ad061190e565b5b6000611adf84828501611aa6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b1382611ae8565b9050919050565b611b2381611b08565b82525050565b6000602082019050611b3e6000830184611b1a565b92915050565b611b4d81611b08565b8114611b5857600080fd5b50565b600081359050611b6a81611b44565b92915050565b60008060408385031215611b8757611b8661190e565b5b6000611b9585828601611b5b565b9250506020611ba685828601611aa6565b9150509250929050565b611bb981611a85565b82525050565b6000602082019050611bd46000830184611bb0565b92915050565b600080600060608486031215611bf357611bf261190e565b5b6000611c0186828701611b5b565b9350506020611c1286828701611b5b565b9250506040611c2386828701611aa6565b9150509250925092565b6000819050919050565b611c4081611c2d565b8114611c4b57600080fd5b50565b600081359050611c5d81611c37565b92915050565b600060208284031215611c7957611c7861190e565b5b6000611c8784828501611c4e565b91505092915050565b600060208284031215611ca657611ca561190e565b5b6000611cb484828501611b5b565b91505092915050565b611cc68161199d565b8114611cd157600080fd5b50565b600081359050611ce381611cbd565b92915050565b60008060408385031215611d0057611cff61190e565b5b6000611d0e85828601611b5b565b9250506020611d1f85828601611cd4565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611d6b82611a19565b810181811067ffffffffffffffff82111715611d8a57611d89611d33565b5b80604052505050565b6000611d9d611904565b9050611da98282611d62565b919050565b600067ffffffffffffffff821115611dc957611dc8611d33565b5b611dd282611a19565b9050602081019050919050565b82818337600083830152505050565b6000611e01611dfc84611dae565b611d93565b905082815260208101848484011115611e1d57611e1c611d2e565b5b611e28848285611ddf565b509392505050565b600082601f830112611e4557611e44611d29565b5b8135611e55848260208601611dee565b91505092915050565b60008060008060808587031215611e7857611e7761190e565b5b6000611e8687828801611b5b565b9450506020611e9787828801611b5b565b9350506040611ea887828801611aa6565b925050606085013567ffffffffffffffff811115611ec957611ec8611913565b5b611ed587828801611e30565b91505092959194509250565b600080fd5b600080fd5b60008083601f840112611f0157611f00611d29565b5b8235905067ffffffffffffffff811115611f1e57611f1d611ee1565b5b602083019150836020820283011115611f3a57611f39611ee6565b5b9250929050565b600080600060408486031215611f5a57611f5961190e565b5b6000611f6886828701611aa6565b935050602084013567ffffffffffffffff811115611f8957611f88611913565b5b611f9586828701611eeb565b92509250509250925092565b60008060408385031215611fb857611fb761190e565b5b6000611fc685828601611b5b565b9250506020611fd785828601611b5b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061202857607f821691505b60208210810361203b5761203a611fe1565b5b50919050565b7f4d696e74206e6f74207965742073746172746564000000000000000000000000600082015250565b60006120776014836119de565b915061208282612041565b602082019050919050565b600060208201905081810360008301526120a68161206a565b9050919050565b60008160601b9050919050565b60006120c5826120ad565b9050919050565b60006120d7826120ba565b9050919050565b6120ef6120ea82611b08565b6120cc565b82525050565b600061210182846120de565b60148201915081905092915050565b7f496e76616c6964206d65726b6c652070726f6f66000000000000000000000000600082015250565b60006121466014836119de565b915061215182612110565b602082019050919050565b6000602082019050818103600083015261217581612139565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006121b682611a85565b91506121c183611a85565b92508282026121cf81611a85565b915082820484148315176121e6576121e561217c565b5b5092915050565b7f506c656173652070726f76696465207468652072657175697265642076616c7560008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006122496021836119de565b9150612254826121ed565b604082019050919050565b600060208201905081810360008301526122788161223c565b9050919050565b600081905092915050565b6000612295826119d3565b61229f818561227f565b93506122af8185602086016119ef565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006122f160058361227f565b91506122fc826122bb565b600582019050919050565b6000612313828561228a565b915061231f828461228a565b915061232a826122e4565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006123926026836119de565b915061239d82612336565b604082019050919050565b600060208201905081810360008301526123c181612385565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006123fe6020836119de565b9150612409826123c8565b602082019050919050565b6000602082019050818103600083015261242d816123f1565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061245b82612434565b612465818561243f565b93506124758185602086016119ef565b61247e81611a19565b840191505092915050565b600060808201905061249e6000830187611b1a565b6124ab6020830186611b1a565b6124b86040830185611bb0565b81810360608301526124ca8184612450565b905095945050505050565b6000815190506124e481611944565b92915050565b600060208284031215612500576124ff61190e565b5b600061250e848285016124d5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061255182611a85565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036125835761258261217c565b5b60018201905091905056fe697066733a2f2f62616679626569626c71326d64377265737a343465367a616f6162766c6b72686e7371376733326637346736746e666d786e646e716e3236746d752fa2646970667358221220bda870c5818990080abb1e1094ce7fd00dd618f3550a4a6c43117896a5214ba664736f6c63430008110033

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

009e3209abec929eaa00f62cfbe7096b2b55d0cfe431f7a8441cbe7ca581072f00000000000000000000000000000000000000000000000000000000637e97e000000000000000000000000000000000000000000000000000000000637ea5f0

-----Decoded View---------------
Arg [0] : _merkleRoot (bytes32): 0x009e3209abec929eaa00f62cfbe7096b2b55d0cfe431f7a8441cbe7ca581072f
Arg [1] : _privateMint (uint256): 1669240800
Arg [2] : _publicMint (uint256): 1669244400

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 009e3209abec929eaa00f62cfbe7096b2b55d0cfe431f7a8441cbe7ca581072f
Arg [1] : 00000000000000000000000000000000000000000000000000000000637e97e0
Arg [2] : 00000000000000000000000000000000000000000000000000000000637ea5f0


Deployed Bytecode Sourcemap

43005:1798:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25212:402;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25626:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29269:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29092:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23486:178;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31148:1893;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33053:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44703:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26387:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23959:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2776:103;;;;;;;;;;;;;:::i;:::-;;2128:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25738:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29549:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33258:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43394:678;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44080:424;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29827:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3034:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25212:402;25342:4;25399:10;25384:25;;:11;:25;;;;:102;;;;25476:10;25461:25;;:11;:25;;;;25384:102;:179;;;;25553:10;25538:25;;:11;:25;;;;25384:179;25364:199;;25212:402;;;:::o;25626:100::-;25680:13;25713:5;25706:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25626:100;:::o;29269:268::-;29390:7;29420:16;29428:7;29420;:16::i;:::-;29415:64;;29445:34;;;;;;;;;;;;;;29415:64;29499:15;:24;29515:7;29499:24;;;;;;;;;;;:30;;;;;;;;;;;;29492:37;;29269:268;;;:::o;29092:165::-;29222:27;29231:2;29235:7;29244:4;29222:8;:27::i;:::-;29092:165;;:::o;23486:178::-;23547:7;23630:15;:13;:15::i;:::-;23615:12;;23599:13;;:28;:46;23592:53;;23486:178;:::o;31148:1893::-;31290:27;31320;31339:7;31320:18;:27::i;:::-;31290:57;;31405:4;31364:45;;31380:19;31364:45;;;31360:99;;31431:28;;;;;;;;;;;;;;31360:99;31487:27;31529:23;31566:35;31593:7;31566:26;:35::i;:::-;31472:129;;;;31633:134;31676:15;31710:4;31733:19;:17;:19::i;:::-;31633:24;:134::i;:::-;31614:287;;31797:43;31814:4;31820:19;:17;:19::i;:::-;31797:16;:43::i;:::-;31792:109;;31866:35;;;;;;;;;;;;;;31792:109;31614:287;31932:1;31918:16;;:2;:16;;;31914:52;;31943:23;;;;;;;;;;;;;;31914:52;31979:43;32001:4;32007:2;32011:7;32020:1;31979:21;:43::i;:::-;32062:15;32059:83;;;32125:1;32104:19;32097:30;32059:83;32200:18;:24;32219:4;32200:24;;;;;;;;;;;;;;;;32198:26;;;;;;;;;;;;32269:18;:22;32288:2;32269:22;;;;;;;;;;;;;;;;32267:24;;;;;;;;;;;32377:167;32414:2;32484:45;32499:4;32505:2;32509:19;32484:14;:45::i;:::-;22279:8;32435:94;32377:18;:167::i;:::-;32348:17;:26;32366:7;32348:26;;;;;;;;;;;:196;;;;32616:1;22279:8;32565:19;:47;:52;32561:364;;32638:19;32670:1;32660:7;:11;32638:33;;32728:1;32694:17;:30;32712:11;32694:30;;;;;;;;;;;;:35;32690:220;;32773:13;;32758:11;:28;32754:137;;32848:19;32815:17;:30;32833:11;32815:30;;;;;;;;;;;:52;;;;32754:137;32690:220;32619:306;32561:364;32972:7;32968:2;32953:27;;32962:4;32953:27;;;;;;;;;;;;32991:42;33012:4;33018:2;33022:7;33031:1;32991:20;:42::i;:::-;31279:1762;;;31148:1893;;;:::o;33053:193::-;33199:39;33216:4;33222:2;33226:7;33199:39;;;;;;;;;;;;:16;:39::i;:::-;33053:193;;;:::o;44703:97::-;2014:13;:11;:13::i;:::-;44787:5:::1;44774:10;:18;;;;44703:97:::0;:::o;26387:202::-;26504:7;26552:27;26571:7;26552:18;:27::i;:::-;26529:52;;26387:202;;;:::o;23959:283::-;24076:7;24122:1;24105:19;;:5;:19;;;24101:60;;24133:28;;;;;;;;;;;;;;24101:60;21787:13;24179:18;:25;24198:5;24179:25;;;;;;;;;;;;;;;;:55;24172:62;;23959:283;;;:::o;2776:103::-;2014:13;:11;:13::i;:::-;2841:30:::1;2868:1;2841:18;:30::i;:::-;2776:103::o:0;2128:87::-;2174:7;2201:6;;;;;;;;;;;2194:13;;2128:87;:::o;25738:104::-;25794:13;25827:7;25820:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25738:104;:::o;29549:266::-;29728:8;29676:18;:39;29695:19;:17;:19::i;:::-;29676:39;;;;;;;;;;;;;;;:49;29716:8;29676:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;29788:8;29752:55;;29767:19;:17;:19::i;:::-;29752:55;;;29798:8;29752:55;;;;;;:::i;:::-;;;;;;;;29549:266;;:::o;33258:407::-;33433:31;33446:4;33452:2;33456:7;33433:12;:31::i;:::-;33497:1;33479:2;:14;;;:19;33475:183;;33518:56;33549:4;33555:2;33559:7;33568:5;33518:30;:56::i;:::-;33513:145;;33602:40;;;;;;;;;;;;;;33513:145;33475:183;33258:407;;;;:::o;43394:678::-;43507:13;;43488:15;:32;;43480:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;43579:12;;43560:15;:31;43556:294;;43632:162;43673:5;;43632:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43701:10;;43761:12;:10;:12::i;:::-;43744:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;43734:41;;;;;;43632:18;:162::i;:::-;43606:244;;;;;;;;;;;;:::i;:::-;;;;;;;;;43556:294;43907:11;43896:8;:22;;;;:::i;:::-;43883:9;:35;;43861:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;43990:27;43996:10;44008:8;43990:5;:27::i;:::-;44036:7;:5;:7::i;:::-;44028:25;;:36;44054:9;44028:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43394:678;;;:::o;44080:424::-;44198:13;44234:16;44242:7;44234;:16::i;:::-;44229:59;;44259:29;;;;;;;;;;;;;;44229:59;44301:21;44325:10;:8;:10::i;:::-;44301:34;;44391:1;44372:7;44366:21;:26;:130;;;;;;;;;;;;;;;;;44436:7;44445:18;44455:7;44445:9;:18::i;:::-;44419:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44366:130;44346:150;;;44080:424;;;:::o;29827:214::-;29969:4;29998:18;:25;30017:5;29998:25;;;;;;;;;;;;;;;:35;30024:8;29998:35;;;;;;;;;;;;;;;;;;;;;;;;;29991:42;;29827:214;;;;:::o;3034:201::-;2014:13;:11;:13::i;:::-;3143:1:::1;3123:22;;:8;:22;;::::0;3115:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3199:28;3218:8;3199:18;:28::i;:::-;3034:201:::0;:::o;30053:282::-;30118:4;30174:7;30155:15;:13;:15::i;:::-;:26;;:66;;;;;30208:13;;30198:7;:23;30155:66;:153;;;;;30307:1;22149:8;30259:17;:26;30277:7;30259:26;;;;;;;;;;;;:44;:49;30155:153;30135:173;;30053:282;;;:::o;38758:492::-;38887:13;38903:16;38911:7;38903;:16::i;:::-;38887:32;;38936:13;38932:219;;;38991:5;38968:28;;:19;:17;:19::i;:::-;:28;;;38964:187;;39020:44;39037:5;39044:19;:17;:19::i;:::-;39020:16;:44::i;:::-;39015:136;;39096:35;;;;;;;;;;;;;;39015:136;38964:187;38932:219;39196:2;39163:15;:24;39179:7;39163:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;39234:7;39230:2;39214:28;;39223:5;39214:28;;;;;;;;;;;;38876:374;38758:492;;;:::o;23271:92::-;23327:7;23354:1;23347:8;;23271:92;:::o;27242:823::-;27336:14;27391:7;27372:15;:13;:15::i;:::-;:26;27368:641;;27424:17;:26;27442:7;27424:26;;;;;;;;;;;;27415:35;;27497:1;22149:8;27469:6;:24;:29;27465:533;;27533:1;27523:6;:11;27519:432;;27574:13;;27563:7;:24;27559:93;;27621:31;;;;;;;;;;;;;;27559:93;27675:257;27761:17;:28;27779:9;;;;;;;27761:28;;;;;;;;;;;;27752:37;;27857:1;27847:6;:11;27895:13;27843:25;27675:257;;27519:432;27969:13;;27465:533;27368:641;28026:31;;;;;;;;;;;;;;27242:823;;;;:::o;30750:390::-;30852:27;30881:23;30922:38;30963:15;:24;30979:7;30963:24;;;;;;;;;;;30922:65;;31045:18;31022:41;;31102:19;31096:26;31077:45;;31007:126;30750:390;;;:::o;42194:105::-;42254:7;42281:10;42274:17;;42194:105;:::o;30347:391::-;30496:11;30564:16;30557:5;30553:28;30544:37;;30623:16;30612:9;30608:32;30595:45;;30703:15;30692:9;30689:30;30681:5;30670:9;30667:20;30664:56;30654:66;;30347:391;;;;;:::o;33677:159::-;;;;;:::o;41871:311::-;42006:7;42026:16;22340:3;42052:19;:41;;42026:68;;22340:3;42120:31;42131:4;42137:2;42141:9;42120:10;:31::i;:::-;42112:40;;:62;;42105:69;;;41871:311;;;;;:::o;28487:354::-;28594:14;28670:16;28663:5;28659:28;28650:37;;28802:5;28788:11;28763:23;28759:41;28756:52;28732:5;28711:112;28701:122;;28487:354;;;;:::o;33848:158::-;;;;;:::o;2293:132::-;2368:12;:10;:12::i;:::-;2357:23;;:7;:5;:7::i;:::-;:23;;;2349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2293:132::o;3395:191::-;3469:16;3488:6;;;;;;;;;;;3469:25;;3514:8;3505:6;;:17;;;;;;;;;;;;;;;;;;3569:8;3538:40;;3559:8;3538:40;;;;;;;;;;;;3458:128;3395:191;:::o;34018:831::-;34181:4;34240:2;34215:45;;;34279:19;:17;:19::i;:::-;34317:4;34340:7;34366:5;34215:171;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34198:644;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34617:1;34600:6;:13;:18;34596:235;;34646:40;;;;;;;;;;;;;;34596:235;34789:6;34783:13;34774:6;34770:2;34766:15;34759:38;34198:644;34486:54;;;34459:81;;;:6;:81;;;;34435:105;;;34018:831;;;;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;4815:190::-;4940:4;4993;4964:25;4977:5;4984:4;4964:12;:25::i;:::-;:33;4957:40;;4815:190;;;;;:::o;34861:1661::-;34934:20;34957:13;;34934:36;;34997:1;34985:8;:13;34981:44;;35007:18;;;;;;;;;;;;;;34981:44;35038:61;35068:1;35072:2;35076:12;35090:8;35038:21;:61::i;:::-;35248:1;21856:2;35218:1;:26;;35217:32;35188:8;:62;35145:18;:22;35164:2;35145:22;;;;;;;;;;;;;;;;:105;;;;;;;;;;;35317:160;35354:2;35429:33;35452:1;35456:2;35460:1;35429:14;:33::i;:::-;35375:30;35396:8;35375:20;:30::i;:::-;:87;35317:18;:160::i;:::-;35283:17;:31;35301:12;35283:31;;;;;;;;;;;:194;;;;35494:16;35525:11;35554:8;35539:12;:23;35525:37;;35639:16;35635:2;35631:25;35619:37;;35964:12;35924:8;35883:1;35821:25;35762:1;35701;35674:335;36105:1;36091:12;36087:20;36045:277;36146:3;36137:7;36134:16;36045:277;;36295:7;36285:8;36282:1;36255:25;36252:1;36249;36244:59;36199:1;36190:7;36186:15;36175:26;;36045:277;;;36049:77;36367:1;36355:8;:13;36351:45;;36377:19;;;;;;;;;;;;;;36351:45;36429:3;36413:13;:19;;;;35120:1324;;36454:60;36483:1;36487:2;36491:12;36505:8;36454:20;:60::i;:::-;34923:1599;34861:1661;;:::o;44512:183::-;44572:13;44598:89;;;;;;;;;;;;;;;;;;;44512:183;:::o;42311:687::-;42412:17;42497:4;42490;42484:11;42480:22;42529:1;42523:4;42516:15;42559:4;42556:1;42552:12;42545:19;;42590:1;42585:3;42578:14;42619:3;42668:5;42650:219;42676:1;42650:219;;;42716:1;42711:3;42707:11;42700:18;;42767:2;42761:4;42757:13;42753:2;42749:22;42744:3;42736:36;42808:2;42802:4;42798:13;42790:21;;42839:4;42650:219;42829:25;42650:219;42654:21;42908:3;42903;42899:13;42942:4;42937:3;42933:14;42926:21;;42973:6;42968:3;42961:19;42456:535;;;42311:687;;;:::o;41712:147::-;41849:6;41712:147;;;;;:::o;5682:296::-;5765:7;5785:20;5808:4;5785:27;;5828:9;5823:118;5847:5;:12;5843:1;:16;5823:118;;;5896:33;5906:12;5920:5;5926:1;5920:8;;;;;;;;:::i;:::-;;;;;;;;5896:9;:33::i;:::-;5881:48;;5861:3;;;;;:::i;:::-;;;;5823:118;;;;5958:12;5951:19;;;5682:296;;;;:::o;28853:227::-;28950:14;29059:1;29049:8;29046:15;29020:24;29016:46;29006:56;;28853:227;;;:::o;12722:149::-;12785:7;12816:1;12812;:5;:51;;12843:20;12858:1;12861;12843:14;:20::i;:::-;12812:51;;;12820:20;12835:1;12838;12820:14;:20::i;:::-;12812:51;12805:58;;12722:149;;;;:::o;12879:268::-;12947:13;13054:1;13048:4;13041:15;13083:1;13077:4;13070:15;13124:4;13118;13108:21;13099:30;;12879:268;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:77::-;5904:7;5933:5;5922:16;;5867:77;;;:::o;5950:122::-;6023:24;6041:5;6023:24;:::i;:::-;6016:5;6013:35;6003:63;;6062:1;6059;6052:12;6003:63;5950:122;:::o;6078:139::-;6124:5;6162:6;6149:20;6140:29;;6178:33;6205:5;6178:33;:::i;:::-;6078:139;;;;:::o;6223:329::-;6282:6;6331:2;6319:9;6310:7;6306:23;6302:32;6299:119;;;6337:79;;:::i;:::-;6299:119;6457:1;6482:53;6527:7;6518:6;6507:9;6503:22;6482:53;:::i;:::-;6472:63;;6428:117;6223:329;;;;:::o;6558:::-;6617:6;6666:2;6654:9;6645:7;6641:23;6637:32;6634:119;;;6672:79;;:::i;:::-;6634:119;6792:1;6817:53;6862:7;6853:6;6842:9;6838:22;6817:53;:::i;:::-;6807:63;;6763:117;6558:329;;;;:::o;6893:116::-;6963:21;6978:5;6963:21;:::i;:::-;6956:5;6953:32;6943:60;;6999:1;6996;6989:12;6943:60;6893:116;:::o;7015:133::-;7058:5;7096:6;7083:20;7074:29;;7112:30;7136:5;7112:30;:::i;:::-;7015:133;;;;:::o;7154:468::-;7219:6;7227;7276:2;7264:9;7255:7;7251:23;7247:32;7244:119;;;7282:79;;:::i;:::-;7244:119;7402:1;7427:53;7472:7;7463:6;7452:9;7448:22;7427:53;:::i;:::-;7417:63;;7373:117;7529:2;7555:50;7597:7;7588:6;7577:9;7573:22;7555:50;:::i;:::-;7545:60;;7500:115;7154:468;;;;;:::o;7628:117::-;7737:1;7734;7727:12;7751:117;7860:1;7857;7850:12;7874:180;7922:77;7919:1;7912:88;8019:4;8016:1;8009:15;8043:4;8040:1;8033:15;8060:281;8143:27;8165:4;8143:27;:::i;:::-;8135:6;8131:40;8273:6;8261:10;8258:22;8237:18;8225:10;8222:34;8219:62;8216:88;;;8284:18;;:::i;:::-;8216:88;8324:10;8320:2;8313:22;8103:238;8060:281;;:::o;8347:129::-;8381:6;8408:20;;:::i;:::-;8398:30;;8437:33;8465:4;8457:6;8437:33;:::i;:::-;8347:129;;;:::o;8482:307::-;8543:4;8633:18;8625:6;8622:30;8619:56;;;8655:18;;:::i;:::-;8619:56;8693:29;8715:6;8693:29;:::i;:::-;8685:37;;8777:4;8771;8767:15;8759:23;;8482:307;;;:::o;8795:146::-;8892:6;8887:3;8882;8869:30;8933:1;8924:6;8919:3;8915:16;8908:27;8795:146;;;:::o;8947:423::-;9024:5;9049:65;9065:48;9106:6;9065:48;:::i;:::-;9049:65;:::i;:::-;9040:74;;9137:6;9130:5;9123:21;9175:4;9168:5;9164:16;9213:3;9204:6;9199:3;9195:16;9192:25;9189:112;;;9220:79;;:::i;:::-;9189:112;9310:54;9357:6;9352:3;9347;9310:54;:::i;:::-;9030:340;8947:423;;;;;:::o;9389:338::-;9444:5;9493:3;9486:4;9478:6;9474:17;9470:27;9460:122;;9501:79;;:::i;:::-;9460:122;9618:6;9605:20;9643:78;9717:3;9709:6;9702:4;9694:6;9690:17;9643:78;:::i;:::-;9634:87;;9450:277;9389:338;;;;:::o;9733:943::-;9828:6;9836;9844;9852;9901:3;9889:9;9880:7;9876:23;9872:33;9869:120;;;9908:79;;:::i;:::-;9869:120;10028:1;10053:53;10098:7;10089:6;10078:9;10074:22;10053:53;:::i;:::-;10043:63;;9999:117;10155:2;10181:53;10226:7;10217:6;10206:9;10202:22;10181:53;:::i;:::-;10171:63;;10126:118;10283:2;10309:53;10354:7;10345:6;10334:9;10330:22;10309:53;:::i;:::-;10299:63;;10254:118;10439:2;10428:9;10424:18;10411:32;10470:18;10462:6;10459:30;10456:117;;;10492:79;;:::i;:::-;10456:117;10597:62;10651:7;10642:6;10631:9;10627:22;10597:62;:::i;:::-;10587:72;;10382:287;9733:943;;;;;;;:::o;10682:117::-;10791:1;10788;10781:12;10805:117;10914:1;10911;10904:12;10945:568;11018:8;11028:6;11078:3;11071:4;11063:6;11059:17;11055:27;11045:122;;11086:79;;:::i;:::-;11045:122;11199:6;11186:20;11176:30;;11229:18;11221:6;11218:30;11215:117;;;11251:79;;:::i;:::-;11215:117;11365:4;11357:6;11353:17;11341:29;;11419:3;11411:4;11403:6;11399:17;11389:8;11385:32;11382:41;11379:128;;;11426:79;;:::i;:::-;11379:128;10945:568;;;;;:::o;11519:704::-;11614:6;11622;11630;11679:2;11667:9;11658:7;11654:23;11650:32;11647:119;;;11685:79;;:::i;:::-;11647:119;11805:1;11830:53;11875:7;11866:6;11855:9;11851:22;11830:53;:::i;:::-;11820:63;;11776:117;11960:2;11949:9;11945:18;11932:32;11991:18;11983:6;11980:30;11977:117;;;12013:79;;:::i;:::-;11977:117;12126:80;12198:7;12189:6;12178:9;12174:22;12126:80;:::i;:::-;12108:98;;;;11903:313;11519:704;;;;;:::o;12229:474::-;12297:6;12305;12354:2;12342:9;12333:7;12329:23;12325:32;12322:119;;;12360:79;;:::i;:::-;12322:119;12480:1;12505:53;12550:7;12541:6;12530:9;12526:22;12505:53;:::i;:::-;12495:63;;12451:117;12607:2;12633:53;12678:7;12669:6;12658:9;12654:22;12633:53;:::i;:::-;12623:63;;12578:118;12229:474;;;;;:::o;12709:180::-;12757:77;12754:1;12747:88;12854:4;12851:1;12844:15;12878:4;12875:1;12868:15;12895:320;12939:6;12976:1;12970:4;12966:12;12956:22;;13023:1;13017:4;13013:12;13044:18;13034:81;;13100:4;13092:6;13088:17;13078:27;;13034:81;13162:2;13154:6;13151:14;13131:18;13128:38;13125:84;;13181:18;;:::i;:::-;13125:84;12946:269;12895:320;;;:::o;13221:170::-;13361:22;13357:1;13349:6;13345:14;13338:46;13221:170;:::o;13397:366::-;13539:3;13560:67;13624:2;13619:3;13560:67;:::i;:::-;13553:74;;13636:93;13725:3;13636:93;:::i;:::-;13754:2;13749:3;13745:12;13738:19;;13397:366;;;:::o;13769:419::-;13935:4;13973:2;13962:9;13958:18;13950:26;;14022:9;14016:4;14012:20;14008:1;13997:9;13993:17;13986:47;14050:131;14176:4;14050:131;:::i;:::-;14042:139;;13769:419;;;:::o;14194:94::-;14227:8;14275:5;14271:2;14267:14;14246:35;;14194:94;;;:::o;14294:::-;14333:7;14362:20;14376:5;14362:20;:::i;:::-;14351:31;;14294:94;;;:::o;14394:100::-;14433:7;14462:26;14482:5;14462:26;:::i;:::-;14451:37;;14394:100;;;:::o;14500:157::-;14605:45;14625:24;14643:5;14625:24;:::i;:::-;14605:45;:::i;:::-;14600:3;14593:58;14500:157;;:::o;14663:256::-;14775:3;14790:75;14861:3;14852:6;14790:75;:::i;:::-;14890:2;14885:3;14881:12;14874:19;;14910:3;14903:10;;14663:256;;;;:::o;14925:170::-;15065:22;15061:1;15053:6;15049:14;15042:46;14925:170;:::o;15101:366::-;15243:3;15264:67;15328:2;15323:3;15264:67;:::i;:::-;15257:74;;15340:93;15429:3;15340:93;:::i;:::-;15458:2;15453:3;15449:12;15442:19;;15101:366;;;:::o;15473:419::-;15639:4;15677:2;15666:9;15662:18;15654:26;;15726:9;15720:4;15716:20;15712:1;15701:9;15697:17;15690:47;15754:131;15880:4;15754:131;:::i;:::-;15746:139;;15473:419;;;:::o;15898:180::-;15946:77;15943:1;15936:88;16043:4;16040:1;16033:15;16067:4;16064:1;16057:15;16084:410;16124:7;16147:20;16165:1;16147:20;:::i;:::-;16142:25;;16181:20;16199:1;16181:20;:::i;:::-;16176:25;;16236:1;16233;16229:9;16258:30;16276:11;16258:30;:::i;:::-;16247:41;;16437:1;16428:7;16424:15;16421:1;16418:22;16398:1;16391:9;16371:83;16348:139;;16467:18;;:::i;:::-;16348:139;16132:362;16084:410;;;;:::o;16500:220::-;16640:34;16636:1;16628:6;16624:14;16617:58;16709:3;16704:2;16696:6;16692:15;16685:28;16500:220;:::o;16726:366::-;16868:3;16889:67;16953:2;16948:3;16889:67;:::i;:::-;16882:74;;16965:93;17054:3;16965:93;:::i;:::-;17083:2;17078:3;17074:12;17067:19;;16726:366;;;:::o;17098:419::-;17264:4;17302:2;17291:9;17287:18;17279:26;;17351:9;17345:4;17341:20;17337:1;17326:9;17322:17;17315:47;17379:131;17505:4;17379:131;:::i;:::-;17371:139;;17098:419;;;:::o;17523:148::-;17625:11;17662:3;17647:18;;17523:148;;;;:::o;17677:390::-;17783:3;17811:39;17844:5;17811:39;:::i;:::-;17866:89;17948:6;17943:3;17866:89;:::i;:::-;17859:96;;17964:65;18022:6;18017:3;18010:4;18003:5;17999:16;17964:65;:::i;:::-;18054:6;18049:3;18045:16;18038:23;;17787:280;17677:390;;;;:::o;18073:155::-;18213:7;18209:1;18201:6;18197:14;18190:31;18073:155;:::o;18234:400::-;18394:3;18415:84;18497:1;18492:3;18415:84;:::i;:::-;18408:91;;18508:93;18597:3;18508:93;:::i;:::-;18626:1;18621:3;18617:11;18610:18;;18234:400;;;:::o;18640:701::-;18921:3;18943:95;19034:3;19025:6;18943:95;:::i;:::-;18936:102;;19055:95;19146:3;19137:6;19055:95;:::i;:::-;19048:102;;19167:148;19311:3;19167:148;:::i;:::-;19160:155;;19332:3;19325:10;;18640:701;;;;;:::o;19347:225::-;19487:34;19483:1;19475:6;19471:14;19464:58;19556:8;19551:2;19543:6;19539:15;19532:33;19347:225;:::o;19578:366::-;19720:3;19741:67;19805:2;19800:3;19741:67;:::i;:::-;19734:74;;19817:93;19906:3;19817:93;:::i;:::-;19935:2;19930:3;19926:12;19919:19;;19578:366;;;:::o;19950:419::-;20116:4;20154:2;20143:9;20139:18;20131:26;;20203:9;20197:4;20193:20;20189:1;20178:9;20174:17;20167:47;20231:131;20357:4;20231:131;:::i;:::-;20223:139;;19950:419;;;:::o;20375:182::-;20515:34;20511:1;20503:6;20499:14;20492:58;20375:182;:::o;20563:366::-;20705:3;20726:67;20790:2;20785:3;20726:67;:::i;:::-;20719:74;;20802:93;20891:3;20802:93;:::i;:::-;20920:2;20915:3;20911:12;20904:19;;20563:366;;;:::o;20935:419::-;21101:4;21139:2;21128:9;21124:18;21116:26;;21188:9;21182:4;21178:20;21174:1;21163:9;21159:17;21152:47;21216:131;21342:4;21216:131;:::i;:::-;21208:139;;20935:419;;;:::o;21360:98::-;21411:6;21445:5;21439:12;21429:22;;21360:98;;;:::o;21464:168::-;21547:11;21581:6;21576:3;21569:19;21621:4;21616:3;21612:14;21597:29;;21464:168;;;;:::o;21638:373::-;21724:3;21752:38;21784:5;21752:38;:::i;:::-;21806:70;21869:6;21864:3;21806:70;:::i;:::-;21799:77;;21885:65;21943:6;21938:3;21931:4;21924:5;21920:16;21885:65;:::i;:::-;21975:29;21997:6;21975:29;:::i;:::-;21970:3;21966:39;21959:46;;21728:283;21638:373;;;;:::o;22017:640::-;22212:4;22250:3;22239:9;22235:19;22227:27;;22264:71;22332:1;22321:9;22317:17;22308:6;22264:71;:::i;:::-;22345:72;22413:2;22402:9;22398:18;22389:6;22345:72;:::i;:::-;22427;22495:2;22484:9;22480:18;22471:6;22427:72;:::i;:::-;22546:9;22540:4;22536:20;22531:2;22520:9;22516:18;22509:48;22574:76;22645:4;22636:6;22574:76;:::i;:::-;22566:84;;22017:640;;;;;;;:::o;22663:141::-;22719:5;22750:6;22744:13;22735:22;;22766:32;22792:5;22766:32;:::i;:::-;22663:141;;;;:::o;22810:349::-;22879:6;22928:2;22916:9;22907:7;22903:23;22899:32;22896:119;;;22934:79;;:::i;:::-;22896:119;23054:1;23079:63;23134:7;23125:6;23114:9;23110:22;23079:63;:::i;:::-;23069:73;;23025:127;22810:349;;;;:::o;23165:180::-;23213:77;23210:1;23203:88;23310:4;23307:1;23300:15;23334:4;23331:1;23324:15;23351:233;23390:3;23413:24;23431:5;23413:24;:::i;:::-;23404:33;;23459:66;23452:5;23449:77;23446:103;;23529:18;;:::i;:::-;23446:103;23576:1;23569:5;23565:13;23558:20;;23351:233;;;:::o

Swarm Source

ipfs://bda870c5818990080abb1e1094ce7fd00dd618f3550a4a6c43117896a5214ba6

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.