ETH Price: $2,396.26 (-1.35%)

Contract

0x849c7a81af95D9aE3Eb8100dF6b18020262A210E
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...202970572024-07-13 10:41:4784 days ago1720867307IN
0x849c7a81...0262A210E
0 ETH0.000079051.71527967
Set Approval For...168752082023-03-21 9:45:11564 days ago1679391911IN
0x849c7a81...0262A210E
0 ETH0.000684614.8455573
Set Approval For...166391202023-02-16 5:11:11597 days ago1676524271IN
0x849c7a81...0262A210E
0 ETH0.0013839330.02620206
Set Approval For...164371252023-01-18 23:59:11625 days ago1674086351IN
0x849c7a81...0262A210E
0 ETH0.0014905832.32323633
Set Approval For...161113152022-12-04 12:02:35671 days ago1670155355IN
0x849c7a81...0262A210E
0 ETH0.0005740712.4487697
Set Approval For...158448072022-10-28 6:36:47708 days ago1666939007IN
0x849c7a81...0262A210E
0 ETH0.0005454811.82877018
Set Approval For...157837252022-10-19 17:44:23717 days ago1666201463IN
0x849c7a81...0262A210E
0 ETH0.0031199167.65513529
Set Approval For...155371242022-09-15 5:40:29751 days ago1663220429IN
0x849c7a81...0262A210E
0 ETH0.000628813.6426154
Set Approval For...154068072022-08-25 3:26:47772 days ago1661398007IN
0x849c7a81...0262A210E
0 ETH0.000201188.29600177
Set Approval For...152938532022-08-07 7:37:14790 days ago1659857834IN
0x849c7a81...0262A210E
0 ETH0.000303586.58658578
Set Approval For...152870212022-08-06 5:59:35791 days ago1659765575IN
0x849c7a81...0262A210E
0 ETH0.000359347.79640884
Set Approval For...152869652022-08-06 5:47:48791 days ago1659764868IN
0x849c7a81...0262A210E
0 ETH0.000284166.16520067
Set Approval For...152815712022-08-05 9:45:48792 days ago1659692748IN
0x849c7a81...0262A210E
0 ETH0.000407888.83342239
Set Approval For...152750972022-08-04 9:28:08793 days ago1659605288IN
0x849c7a81...0262A210E
0 ETH0.0005078410.9981885
Set Approval For...152421012022-07-30 6:06:55798 days ago1659161215IN
0x849c7a81...0262A210E
0 ETH0.000169286.97723534
Set Approval For...152035122022-07-24 5:42:51804 days ago1658641371IN
0x849c7a81...0262A210E
0 ETH0.000417119.03331623
Set Approval For...152016352022-07-23 22:27:38804 days ago1658615258IN
0x849c7a81...0262A210E
0 ETH0.0010226922.15391674
Set Approval For...151843552022-07-21 6:36:18807 days ago1658385378IN
0x849c7a81...0262A210E
0 ETH0.0005427711.77619079
Transfer From151564102022-07-16 22:24:45811 days ago1658010285IN
0x849c7a81...0262A210E
0 ETH0.0006658910.80012599
Transfer From151363582022-07-13 20:15:19815 days ago1657743319IN
0x849c7a81...0262A210E
0 ETH0.0015347624.8923358
Withdraw151163412022-07-10 17:49:33818 days ago1657475373IN
0x849c7a81...0262A210E
0 ETH0.0003048110
Set Approval For...151125852022-07-10 3:51:47818 days ago1657425107IN
0x849c7a81...0262A210E
0 ETH0.0005869212.73399602
Set Approval For...150876632022-07-06 7:35:30822 days ago1657092930IN
0x849c7a81...0262A210E
0 ETH0.0006205313.46315887
Set Approval For...150870712022-07-06 5:30:55822 days ago1657085455IN
0x849c7a81...0262A210E
0 ETH0.0010917523.68686216
Set Approval For...150841802022-07-05 18:37:37823 days ago1657046257IN
0x849c7a81...0262A210E
0 ETH0.0014278330.97852106
View all transactions

Latest 7 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
151163412022-07-10 17:49:33818 days ago1657475373
0x849c7a81...0262A210E
0.015 ETH
150787972022-07-04 22:38:38823 days ago1656974318
0x849c7a81...0262A210E
0.43 ETH
150536712022-07-01 1:34:55827 days ago1656639295
0x849c7a81...0262A210E
0.15 ETH
150443642022-06-29 9:34:31829 days ago1656495271
0x849c7a81...0262A210E
0.03 ETH
150414472022-06-28 20:20:58830 days ago1656447658
0x849c7a81...0262A210E
0.05 ETH
150395202022-06-28 11:52:37830 days ago1656417157
0x849c7a81...0262A210E
0.035 ETH
150384422022-06-28 6:50:50830 days ago1656399050
0x849c7a81...0262A210E
0.02 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Darkbirds

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-27
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

// ERC721A Contracts v3.3.0
// Creator: Chiru Labs

interface IERC721A {

    error ApprovalCallerNotOwnerNorApproved();

    error ApprovalQueryForNonexistentToken();

    error ApproveToCaller();

    error ApprovalToCurrentOwner();

    error BalanceQueryForZeroAddress();

    error MintToZeroAddress();

    error MintZeroQuantity();

    error OwnerQueryForNonexistentToken();

    error TransferCallerNotOwnerNorApproved();

    error TransferFromIncorrectOwner();

    error TransferToNonERC721ReceiverImplementer();

    error TransferToZeroAddress();

    error URIQueryForNonexistentToken();

    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    //function totalSupply() external view returns (uint256);

    // ==============================
    //            IERC165
    // ==============================

    function supportsInterface(bytes4 interfaceId) external view returns (bool);

    // ==============================
    //            IERC721
    // ==============================

    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;

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

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

    // ==============================
    //        IERC721Metadata
    // ==============================

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// ERC721A Contracts v3.3.0
// Creator: Chiru Labs

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

contract ERC721A is IERC721A {
    // Mask of an entry in packed address data.
    uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    // The bit position of `numberMinted` in packed address data.
    uint256 private constant BITPOS_NUMBER_MINTED = 64;

    // The bit position of `numberBurned` in packed address data.
    uint256 private constant BITPOS_NUMBER_BURNED = 128;

    // The bit position of `aux` in packed address data.
    uint256 private constant BITPOS_AUX = 192;

    // Mask of all 256 bits in packed address data except the 64 bits for `aux`.
    uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    // The bit position of `startTimestamp` in packed ownership.
    uint256 private constant BITPOS_START_TIMESTAMP = 160;

    // The bit mask of the `burned` bit in packed ownership.
    uint256 private constant BITMASK_BURNED = 1 << 224;

    // The bit position of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITPOS_NEXT_INITIALIZED = 225;

    // The bit mask of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225;

    // The tokenId of the next token to be minted.
    uint256 private _currentIndex;

    // The number of tokens burned.
    uint256 private _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned.
    // See `_packedOwnershipOf` implementation for details.
    //
    // Bits Layout:
    // - [0..159]   `addr`
    // - [160..223] `startTimestamp`
    // - [224]      `burned`
    // - [225]      `nextInitialized`
    mapping(uint256 => uint256) private _packedOwnerships;

    // Mapping owner address to address data.
    //
    // Bits Layout:
    // - [0..63]    `balance`
    // - [64..127]  `numberMinted`
    // - [128..191] `numberBurned`
    // - [192..255] `aux`
    mapping(address => uint256) private _packedAddressData;

    // Mapping from token ID to approved address.
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    function _setName(string memory name_) internal {
        _name = name_;
    }

    function _setSymbol(string memory symbol_) internal {
        _symbol = symbol_;
    }

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

    function _nextTokenId() internal view returns (uint256) {
        return _currentIndex;
    }

    function totalSupply() public view virtual returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than `_currentIndex - _startTokenId()` times.
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to `_startTokenId()`
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    function _totalBurned() internal view returns (uint256) {
        return _burnCounter;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        // The interface IDs are constants representing the first 4 bytes of the XOR of
        // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165
        // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`
        return
            interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165.
            interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
            interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
    }

    function balanceOf(address owner) public view 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 {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        assembly { // Cast aux without masking.
            auxCasted := aux
        }
        packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }

    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];
                    // If not burned.
                    if (packed & BITMASK_BURNED == 0) {
                        // Invariant:
                        // There will always be an ownership that has an address and is not burned
                        // before an ownership that does not have an address and is not burned.
                        // Hence, curr will not underflow.
                        //
                        // We can directly compare the packed value.
                        // If the address is zero, packed is zero.
                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        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;
    }

    function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    function _initializeOwnershipAt(uint256 index) internal {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    function ownerOf(uint256 tokenId) public view override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    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 _addressToUint256(address value) private pure returns (uint256 result) {
        assembly {
            result := value
        }
    }

    function _boolToUint256(bool value) private pure returns (uint256 result) {
        assembly {
            result := value
        }
    }

    function approve(address to, uint256 tokenId) public override {
        address owner = address(uint160(_packedOwnershipOf(tokenId)));
        if (to == owner) revert ApprovalToCurrentOwner();

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

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSenderERC721A()) revert ApproveToCaller();

        _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 transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

    function _exists(uint256 tokenId) internal view returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && // If within bounds,
            _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned.
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the balance and number minted.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (to.code.length != 0) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex < end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex < end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the balance and number minted.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex < end);

            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

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

        bool isApprovedOrOwner = (_msgSenderERC721A() == from ||
            isApprovedForAll(from, _msgSenderERC721A()) ||
            getApproved(tokenId) == _msgSenderERC721A());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner.
        delete _tokenApprovals[tokenId];

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            // We can directly increment and decrement the balances.
            --_packedAddressData[from]; // Updates: `balance -= 1`.
            ++_packedAddressData[to]; // Updates: `balance += 1`.

            // Updates:
            // - `address` to the next owner.
            // - `startTimestamp` to the timestamp of transfering.
            // - `burned` to `false`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_NEXT_INITIALIZED;

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

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

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSenderERC721A() == from ||
                isApprovedForAll(from, _msgSenderERC721A()) ||
                getApproved(tokenId) == _msgSenderERC721A());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

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

        // Clear approvals from the previous owner.
        delete _tokenApprovals[tokenId];

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            // Updates:
            // - `balance -= 1`.
            // - `numberBurned += 1`.
            //
            // We can directly decrement the balance, and increment the number burned.
            // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`.
            _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1;

            // Updates:
            // - `address` to the last owner.
            // - `startTimestamp` to the timestamp of burning.
            // - `burned` to `true`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] =
                _addressToUint256(from) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_BURNED |

                BITMASK_NEXT_INITIALIZED;

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

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

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

    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 _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    function _toString(uint256 value) internal pure returns (string memory ptr) {
        assembly {
            // The maximum value of a uint256 contains 78 digits (1 byte per digit),

            // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged.
            // We will need 1 32-byte word to store the length,

            // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128.
            ptr := add(mload(0x40), 128)
            // Update the free memory pointer to allocate.
            mstore(0x40, ptr)

            // Cache the end of the memory to calculate the length later.
            let end := ptr

            // We write the string from the rightmost digit to the leftmost digit.
            // The following is essentially a do-while loop that also handles the zero case.
            // Costs a bit more than early returning for the zero case,
            // but cheaper in terms of deployment and overall runtime costs.
            for {

                // Initialize and perform the first pass without check.
                let temp := value
                // Move the pointer 1 byte leftwards to point to an empty character slot.
                ptr := sub(ptr, 1)
                // Write the character to the pointer. 48 is the ASCII index of '0'.
                mstore8(ptr, add(48, mod(temp, 10)))
                temp := div(temp, 10)
            } temp {

                // Keep dividing `temp` until zero.
                temp := div(temp, 10)
            } { // Body of the for loop.
                ptr := sub(ptr, 1)
                mstore8(ptr, add(48, mod(temp, 10)))
            }

            let length := sub(end, ptr)
            // Move the pointer 32 bytes leftwards to make room for the length.
            ptr := sub(ptr, 32)
            // Store the length.
            mstore(ptr, length)
        }
    }
}

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

//(/|  |^ )(\*)(.+|) \s+\n \n\n
contract Darkbirds is ERC721A, Ownable {
    using Address for address;
    using Strings for uint256;

    uint256 private maxTokens;
    uint256 private _maxFreeMints;

    uint256 private _currentFreeMints;

    bool private _saleEnabled = false;
    bool private _freeMintEnabled = false;

    string private _contractURI;
    string  private _baseTokenURI;

    uint256 price = 1 ether;

    mapping (address => uint256) freeMints;

    constructor(uint256 maxTokens_, bool saleEnabled_, bool freeMintEnabled_, string memory baseURI_, uint256 maxFreeMints_, uint256 price_) ERC721A("Darkbirds","Darkbird") {
        maxTokens = maxTokens_;
        _saleEnabled = saleEnabled_;
        _freeMintEnabled = freeMintEnabled_;
        _baseTokenURI = baseURI_;
        _maxFreeMints = maxFreeMints_;
        price = price_;
    }

    function hasFreeMint(address target) public view returns(bool){
        return _freeMintEnabled && freeMints[target] < 1 && _currentFreeMints < _maxFreeMints;
    }

    function freeMintEnabled() external view returns(bool){
        return _freeMintEnabled;
    }

    function freeMintSet(bool v) external onlyOwner {
        _freeMintEnabled = v;
    }

    function saleEnabled() external view returns(bool){
        return _saleEnabled;
    }

    function saleSet(bool v) external onlyOwner {
        _saleEnabled = v;
    }

    function getMaxTokens()  external view returns(uint256) {
        return maxTokens;
    }

    function totalSupply() public view override returns(uint256) {
        return _totalMinted();
    }

    function setPrice(uint256 price_) external onlyOwner {
        price = price_;
    }

    function setMaxTokens(uint256 _maxTokens) external onlyOwner {
        maxTokens = _maxTokens;
    }

    function setMaxFreeMints(uint256 maxFreeMints_) external onlyOwner {
        _maxFreeMints = maxFreeMints_;
    }

    function mintTo(address _to, uint256 amount) external onlyOwner {
        require(tokensAvailable() >= amount, "Max tokens reached");
        _safeMint(_to, amount);
    }

    function mintBirds(uint256 amount) external payable {
        require(_saleEnabled, "Sale off");
        require(msg.value >= amount*price, "Insufficient value to mint");
        require(tokensAvailable() >= amount, "Max tokens reached");
        _safeMint(msg.sender, amount);
    }

    function freeBird() external {
        require(_freeMintEnabled, "Free mint off");
        require(freeMints[msg.sender] < 1, "You reached max free tokens");
        require(_currentFreeMints < _maxFreeMints, "You reached max free tokens");
        _safeMint(msg.sender, 1);
        freeMints[msg.sender] += 1;
        _currentFreeMints += 1;
    }

    function contractURI() public view returns (string memory) {
    	return _contractURI;
    }

    function withdraw() external onlyOwner
    {
        Address.sendValue(payable(msg.sender), address(this).balance);
    }

    function tokensAvailable() public view returns (uint256) {
        return maxTokens - _totalMinted();
    }

    function currentFreeMints() public view returns (uint256) {
        return _maxFreeMints - _currentFreeMints;
    }

    function _baseURI() internal view override  returns (string memory) {
        return _baseTokenURI;
    }

    function setBaseURI(string memory uri) external onlyOwner {
        _baseTokenURI = uri;
    }

    function setContractURI(string memory uri) external onlyOwner {
        _contractURI = uri;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : "";
    }

    function URI(uint256 tokenId) external view virtual returns (string memory) {
        return tokenURI(tokenId);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"maxTokens_","type":"uint256"},{"internalType":"bool","name":"saleEnabled_","type":"bool"},{"internalType":"bool","name":"freeMintEnabled_","type":"bool"},{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"uint256","name":"maxFreeMints_","type":"uint256"},{"internalType":"uint256","name":"price_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","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":"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":"uint256","name":"tokenId","type":"uint256"}],"name":"URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentFreeMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeBird","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"v","type":"bool"}],"name":"freeMintSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"hasFreeMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"amount","type":"uint256"}],"name":"mintBirds","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"nonpayable","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":"nonpayable","type":"function"},{"inputs":[],"name":"saleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"v","type":"bool"}],"name":"saleSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxFreeMints_","type":"uint256"}],"name":"setMaxFreeMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTokens","type":"uint256"}],"name":"setMaxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"setPrice","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":"tokensAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600c805461ffff19169055670de0b6b3a7640000600f553480156200002857600080fd5b5060405162002129380380620021298339810160408190526200004b916200021d565b60408051808201825260098152684461726b626972647360b81b60208083019182528351808501909452600884526711185c9ad89a5c9960c21b9084015281519192916200009c9160029162000161565b508051620000b290600390602084019062000161565b50506000805550620000c4336200010f565b6009869055600c805461ffff191686151561ff00191617610100861515021790558251620000fa90600e90602086019062000161565b50600a91909155600f55506200039092505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200016f906200033d565b90600052602060002090601f016020900481019282620001935760008555620001de565b82601f10620001ae57805160ff1916838001178555620001de565b82800160010185558215620001de579182015b82811115620001de578251825591602001919060010190620001c1565b50620001ec929150620001f0565b5090565b5b80821115620001ec5760008155600101620001f1565b805180151581146200021857600080fd5b919050565b60008060008060008060c087890312156200023757600080fd5b8651955060206200024a81890162000207565b95506200025a6040890162000207565b60608901519095506001600160401b03808211156200027857600080fd5b818a0191508a601f8301126200028d57600080fd5b815181811115620002a257620002a26200037a565b604051601f8201601f19908116603f01168101908382118183101715620002cd57620002cd6200037a565b816040528281528d86848701011115620002e657600080fd5b600093505b828410156200030a5784840186015181850187015292850192620002eb565b828411156200031c5760008684830101525b8098505050505050506080870151915060a087015190509295509295509295565b600181811c908216806200035257607f821691505b602082108114156200037457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b611d8980620003a06000396000f3fe60806040526004361061020f5760003560e01c80636abcded111610118578063a22cb465116100a0578063e8a3d4851161006f578063e8a3d485146105d5578063e985e9c5146105ea578063f2fde38b14610633578063f3f5b6e214610653578063fb374db61461066657600080fd5b8063a22cb46514610555578063b88d4fde14610575578063c87b56dd14610595578063d5cde1f2146105b557600080fd5b80638da5cb5b116100e75780638da5cb5b146104c2578063901e1c01146104e057806391b7f5ed14610500578063938e3d7b1461052057806395d89b411461054057600080fd5b80636abcded11461046057806370a0823114610475578063715018a61461049557806371b9b646146104aa57600080fd5b8063407043fc1161019b578063522680e01161016a578063522680e0146103ce57806355f804b3146103ee57806360659a921461040e57806362ad68aa146104235780636352211e1461044057600080fd5b8063407043fc1461035957806342842e0e14610379578063449a52f81461039957806351501290146103b957600080fd5b806311e776fe116101e257806311e776fe146102c557806318160ddd146102e55780631dcee4251461030457806323b872dd146103245780633ccfd60b1461034457600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a3575b600080fd5b34801561022057600080fd5b5061023461022f366004611a61565b61067b565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106cd565b6040516102409190611ba5565b34801561027757600080fd5b5061028b610286366004611ae4565b61075f565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b506102c36102be366004611a1c565b6107a3565b005b3480156102d157600080fd5b506102c36102e0366004611ae4565b610876565b3480156102f157600080fd5b506000545b604051908152602001610240565b34801561031057600080fd5b506102c361031f366004611a46565b6108b3565b34801561033057600080fd5b506102c361033f36600461193a565b6108f0565b34801561035057600080fd5b506102c3610900565b34801561036557600080fd5b506102c3610374366004611ae4565b610936565b34801561038557600080fd5b506102c361039436600461193a565b610965565b3480156103a557600080fd5b506102c36103b4366004611a1c565b610980565b3480156103c557600080fd5b506102c3610a04565b3480156103da57600080fd5b506102c36103e9366004611a46565b610b49565b3480156103fa57600080fd5b506102c3610409366004611a9b565b610b8d565b34801561041a57600080fd5b506102f6610bca565b34801561042f57600080fd5b50600c54610100900460ff16610234565b34801561044c57600080fd5b5061028b61045b366004611ae4565b610bdb565b34801561046c57600080fd5b506009546102f6565b34801561048157600080fd5b506102f66104903660046118ec565b610be6565b3480156104a157600080fd5b506102c3610c35565b3480156104b657600080fd5b50600c5460ff16610234565b3480156104ce57600080fd5b506008546001600160a01b031661028b565b3480156104ec57600080fd5b5061025e6104fb366004611ae4565b610c69565b34801561050c57600080fd5b506102c361051b366004611ae4565b610c74565b34801561052c57600080fd5b506102c361053b366004611a9b565b610ca3565b34801561054c57600080fd5b5061025e610ce0565b34801561056157600080fd5b506102c36105703660046119f2565b610cef565b34801561058157600080fd5b506102c3610590366004611976565b610d85565b3480156105a157600080fd5b5061025e6105b0366004611ae4565b610dcf565b3480156105c157600080fd5b506102346105d03660046118ec565b610e9a565b3480156105e157600080fd5b5061025e610ee0565b3480156105f657600080fd5b50610234610605366004611907565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561063f57600080fd5b506102c361064e3660046118ec565b610eef565b6102c3610661366004611ae4565b610f8a565b34801561067257600080fd5b506102f6611079565b60006301ffc9a760e01b6001600160e01b0319831614806106ac57506380ac58cd60e01b6001600160e01b03198316145b806106c75750635b5e139f60e01b6001600160e01b03198316145b92915050565b6060600280546106dc90611c7b565b80601f016020809104026020016040519081016040528092919081815260200182805461070890611c7b565b80156107555780601f1061072a57610100808354040283529160200191610755565b820191906000526020600020905b81548152906001019060200180831161073857829003601f168201915b5050505050905090565b600061076a8261108b565b610787576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006107ae826110b2565b9050806001600160a01b0316836001600160a01b031614156107e35760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b0382161461081a576107fd8133610605565b61081a576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6008546001600160a01b031633146108a95760405162461bcd60e51b81526004016108a090611bb8565b60405180910390fd5b600955565b905090565b6008546001600160a01b031633146108dd5760405162461bcd60e51b81526004016108a090611bb8565b600c805460ff1916911515919091179055565b6108fb838383611113565b505050565b6008546001600160a01b0316331461092a5760405162461bcd60e51b81526004016108a090611bb8565b61093433476112b6565b565b6008546001600160a01b031633146109605760405162461bcd60e51b81526004016108a090611bb8565b600a55565b6108fb83838360405180602001604052806000815250610d85565b6008546001600160a01b031633146109aa5760405162461bcd60e51b81526004016108a090611bb8565b806109b3610bca565b10156109f65760405162461bcd60e51b815260206004820152601260248201527113585e081d1bdad95b9cc81c995858da195960721b60448201526064016108a0565b610a0082826113cf565b5050565b600c54610100900460ff16610a4b5760405162461bcd60e51b815260206004820152600d60248201526c233932b29036b4b73a1037b33360991b60448201526064016108a0565b33600090815260106020526040902054600111610aaa5760405162461bcd60e51b815260206004820152601b60248201527f596f752072656163686564206d6178206672656520746f6b656e73000000000060448201526064016108a0565b600a54600b5410610afd5760405162461bcd60e51b815260206004820152601b60248201527f596f752072656163686564206d6178206672656520746f6b656e73000000000060448201526064016108a0565b610b083360016113cf565b336000908152601060205260408120805460019290610b28908490611bed565b925050819055506001600b6000828254610b429190611bed565b9091555050565b6008546001600160a01b03163314610b735760405162461bcd60e51b81526004016108a090611bb8565b600c80549115156101000261ff0019909216919091179055565b6008546001600160a01b03163314610bb75760405162461bcd60e51b81526004016108a090611bb8565b8051610a0090600e9060208401906117b1565b600080546009546108ae9190611c38565b60006106c7826110b2565b60006001600160a01b038216610c0f576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610c5f5760405162461bcd60e51b81526004016108a090611bb8565b61093460006113e9565b60606106c782610dcf565b6008546001600160a01b03163314610c9e5760405162461bcd60e51b81526004016108a090611bb8565b600f55565b6008546001600160a01b03163314610ccd5760405162461bcd60e51b81526004016108a090611bb8565b8051610a0090600d9060208401906117b1565b6060600380546106dc90611c7b565b6001600160a01b038216331415610d195760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610d90848484611113565b6001600160a01b0383163b15610dc957610dac8484848461143b565b610dc9576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6060610dda8261108b565b610e3e5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108a0565b6000610e48611533565b90506000815111610e685760405180602001604052806000815250610e93565b80610e7284611542565b604051602001610e83929190611b29565b6040516020818303038152906040525b9392505050565b600c54600090610100900460ff168015610ecc57506001600160a01b0382166000908152601060205260409020546001115b80156106c75750600a54600b541092915050565b6060600d80546106dc90611c7b565b6008546001600160a01b03163314610f195760405162461bcd60e51b81526004016108a090611bb8565b6001600160a01b038116610f7e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a0565b610f87816113e9565b50565b600c5460ff16610fc75760405162461bcd60e51b815260206004820152600860248201526729b0b6329037b33360c11b60448201526064016108a0565b600f54610fd49082611c19565b3410156110235760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e742076616c756520746f206d696e7400000000000060448201526064016108a0565b8061102c610bca565b101561106f5760405162461bcd60e51b815260206004820152601260248201527113585e081d1bdad95b9cc81c995858da195960721b60448201526064016108a0565b610f8733826113cf565b6000600b54600a546108ae9190611c38565b60008054821080156106c7575050600090815260046020526040902054600160e01b161590565b6000816000548110156110fa57600081815260046020526040902054600160e01b81166110f8575b80610e935750600019016000818152600460205260409020546110da565b505b604051636f96cda160e11b815260040160405180910390fd5b600061111e826110b2565b9050836001600160a01b0316816001600160a01b0316146111515760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061116f575061116f8533610605565b8061118a57503361117f8461075f565b6001600160a01b0316145b9050806111aa57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0384166111d157604051633a954ecd60e21b815260040160405180910390fd5b600083815260066020908152604080832080546001600160a01b03191690556001600160a01b038881168452600583528184208054600019019055871683528083208054600101905585835260049091529020600160e11b4260a01b86178117909155821661126e576001830160008181526004602052604090205461126c57600054811461126c5760008181526004602052604090208390555b505b82846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b804710156113065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016108a0565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611353576040519150601f19603f3d011682016040523d82523d6000602084013e611358565b606091505b50509050806108fb5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016108a0565b610a00828260405180602001604052806000815250611640565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611470903390899088908890600401611b68565b602060405180830381600087803b15801561148a57600080fd5b505af19250505080156114ba575060408051601f3d908101601f191682019092526114b791810190611a7e565b60015b611515573d8080156114e8576040519150601f19603f3d011682016040523d82523d6000602084013e6114ed565b606091505b50805161150d576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600e80546106dc90611c7b565b6060816115665750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611590578061157a81611cb6565b91506115899050600a83611c05565b915061156a565b60008167ffffffffffffffff8111156115ab576115ab611d27565b6040519080825280601f01601f1916602001820160405280156115d5576020820181803683370190505b5090505b841561152b576115ea600183611c38565b91506115f7600a86611cd1565b611602906030611bed565b60f81b81838151811061161757611617611d11565b60200101906001600160f81b031916908160001a905350611639600a86611c05565b94506115d9565b6000546001600160a01b03841661166957604051622e076360e81b815260040160405180910390fd5b826116875760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03841660008181526005602090815260408083208054680100000000000000018902019055848352600490915290204260a01b86176001861460e11b1790558190818501903b1561175c575b60405182906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611725600087848060010195508761143b565b611742576040516368d2bf6b60e11b815260040160405180910390fd5b8082106116da57826000541461175757600080fd5b6117a1565b5b6040516001830192906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821061175d575b506000908155610dc99085838684565b8280546117bd90611c7b565b90600052602060002090601f0160209004810192826117df5760008555611825565b82601f106117f857805160ff1916838001178555611825565b82800160010185558215611825579182015b8281111561182557825182559160200191906001019061180a565b50611831929150611835565b5090565b5b808211156118315760008155600101611836565b600067ffffffffffffffff8084111561186557611865611d27565b604051601f8501601f19908116603f0116810190828211818310171561188d5761188d611d27565b816040528093508581528686860111156118a657600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146118d757600080fd5b919050565b803580151581146118d757600080fd5b6000602082840312156118fe57600080fd5b610e93826118c0565b6000806040838503121561191a57600080fd5b611923836118c0565b9150611931602084016118c0565b90509250929050565b60008060006060848603121561194f57600080fd5b611958846118c0565b9250611966602085016118c0565b9150604084013590509250925092565b6000806000806080858703121561198c57600080fd5b611995856118c0565b93506119a3602086016118c0565b925060408501359150606085013567ffffffffffffffff8111156119c657600080fd5b8501601f810187136119d757600080fd5b6119e68782356020840161184a565b91505092959194509250565b60008060408385031215611a0557600080fd5b611a0e836118c0565b9150611931602084016118dc565b60008060408385031215611a2f57600080fd5b611a38836118c0565b946020939093013593505050565b600060208284031215611a5857600080fd5b610e93826118dc565b600060208284031215611a7357600080fd5b8135610e9381611d3d565b600060208284031215611a9057600080fd5b8151610e9381611d3d565b600060208284031215611aad57600080fd5b813567ffffffffffffffff811115611ac457600080fd5b8201601f81018413611ad557600080fd5b61152b8482356020840161184a565b600060208284031215611af657600080fd5b5035919050565b60008151808452611b15816020860160208601611c4f565b601f01601f19169290920160200192915050565b60008351611b3b818460208801611c4f565b835190830190611b4f818360208801611c4f565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611b9b90830184611afd565b9695505050505050565b602081526000610e936020830184611afd565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115611c0057611c00611ce5565b500190565b600082611c1457611c14611cfb565b500490565b6000816000190483118215151615611c3357611c33611ce5565b500290565b600082821015611c4a57611c4a611ce5565b500390565b60005b83811015611c6a578181015183820152602001611c52565b83811115610dc95750506000910152565b600181811c90821680611c8f57607f821691505b60208210811415611cb057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611cca57611cca611ce5565b5060010190565b600082611ce057611ce0611cfb565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610f8757600080fdfea2646970667358221220244a0c0587b0507eac5cd4d4a54ec76a863422b42f878ce2db6e6c5a934b4cb264736f6c6343000807003300000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000011c37937e080000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569687468686375747332616f6e6d7066776b78756e786a723679337573736d7167736a746f71703670676272746c6b3232377370752f0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061020f5760003560e01c80636abcded111610118578063a22cb465116100a0578063e8a3d4851161006f578063e8a3d485146105d5578063e985e9c5146105ea578063f2fde38b14610633578063f3f5b6e214610653578063fb374db61461066657600080fd5b8063a22cb46514610555578063b88d4fde14610575578063c87b56dd14610595578063d5cde1f2146105b557600080fd5b80638da5cb5b116100e75780638da5cb5b146104c2578063901e1c01146104e057806391b7f5ed14610500578063938e3d7b1461052057806395d89b411461054057600080fd5b80636abcded11461046057806370a0823114610475578063715018a61461049557806371b9b646146104aa57600080fd5b8063407043fc1161019b578063522680e01161016a578063522680e0146103ce57806355f804b3146103ee57806360659a921461040e57806362ad68aa146104235780636352211e1461044057600080fd5b8063407043fc1461035957806342842e0e14610379578063449a52f81461039957806351501290146103b957600080fd5b806311e776fe116101e257806311e776fe146102c557806318160ddd146102e55780631dcee4251461030457806323b872dd146103245780633ccfd60b1461034457600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a3575b600080fd5b34801561022057600080fd5b5061023461022f366004611a61565b61067b565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106cd565b6040516102409190611ba5565b34801561027757600080fd5b5061028b610286366004611ae4565b61075f565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b506102c36102be366004611a1c565b6107a3565b005b3480156102d157600080fd5b506102c36102e0366004611ae4565b610876565b3480156102f157600080fd5b506000545b604051908152602001610240565b34801561031057600080fd5b506102c361031f366004611a46565b6108b3565b34801561033057600080fd5b506102c361033f36600461193a565b6108f0565b34801561035057600080fd5b506102c3610900565b34801561036557600080fd5b506102c3610374366004611ae4565b610936565b34801561038557600080fd5b506102c361039436600461193a565b610965565b3480156103a557600080fd5b506102c36103b4366004611a1c565b610980565b3480156103c557600080fd5b506102c3610a04565b3480156103da57600080fd5b506102c36103e9366004611a46565b610b49565b3480156103fa57600080fd5b506102c3610409366004611a9b565b610b8d565b34801561041a57600080fd5b506102f6610bca565b34801561042f57600080fd5b50600c54610100900460ff16610234565b34801561044c57600080fd5b5061028b61045b366004611ae4565b610bdb565b34801561046c57600080fd5b506009546102f6565b34801561048157600080fd5b506102f66104903660046118ec565b610be6565b3480156104a157600080fd5b506102c3610c35565b3480156104b657600080fd5b50600c5460ff16610234565b3480156104ce57600080fd5b506008546001600160a01b031661028b565b3480156104ec57600080fd5b5061025e6104fb366004611ae4565b610c69565b34801561050c57600080fd5b506102c361051b366004611ae4565b610c74565b34801561052c57600080fd5b506102c361053b366004611a9b565b610ca3565b34801561054c57600080fd5b5061025e610ce0565b34801561056157600080fd5b506102c36105703660046119f2565b610cef565b34801561058157600080fd5b506102c3610590366004611976565b610d85565b3480156105a157600080fd5b5061025e6105b0366004611ae4565b610dcf565b3480156105c157600080fd5b506102346105d03660046118ec565b610e9a565b3480156105e157600080fd5b5061025e610ee0565b3480156105f657600080fd5b50610234610605366004611907565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561063f57600080fd5b506102c361064e3660046118ec565b610eef565b6102c3610661366004611ae4565b610f8a565b34801561067257600080fd5b506102f6611079565b60006301ffc9a760e01b6001600160e01b0319831614806106ac57506380ac58cd60e01b6001600160e01b03198316145b806106c75750635b5e139f60e01b6001600160e01b03198316145b92915050565b6060600280546106dc90611c7b565b80601f016020809104026020016040519081016040528092919081815260200182805461070890611c7b565b80156107555780601f1061072a57610100808354040283529160200191610755565b820191906000526020600020905b81548152906001019060200180831161073857829003601f168201915b5050505050905090565b600061076a8261108b565b610787576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006107ae826110b2565b9050806001600160a01b0316836001600160a01b031614156107e35760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b0382161461081a576107fd8133610605565b61081a576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6008546001600160a01b031633146108a95760405162461bcd60e51b81526004016108a090611bb8565b60405180910390fd5b600955565b905090565b6008546001600160a01b031633146108dd5760405162461bcd60e51b81526004016108a090611bb8565b600c805460ff1916911515919091179055565b6108fb838383611113565b505050565b6008546001600160a01b0316331461092a5760405162461bcd60e51b81526004016108a090611bb8565b61093433476112b6565b565b6008546001600160a01b031633146109605760405162461bcd60e51b81526004016108a090611bb8565b600a55565b6108fb83838360405180602001604052806000815250610d85565b6008546001600160a01b031633146109aa5760405162461bcd60e51b81526004016108a090611bb8565b806109b3610bca565b10156109f65760405162461bcd60e51b815260206004820152601260248201527113585e081d1bdad95b9cc81c995858da195960721b60448201526064016108a0565b610a0082826113cf565b5050565b600c54610100900460ff16610a4b5760405162461bcd60e51b815260206004820152600d60248201526c233932b29036b4b73a1037b33360991b60448201526064016108a0565b33600090815260106020526040902054600111610aaa5760405162461bcd60e51b815260206004820152601b60248201527f596f752072656163686564206d6178206672656520746f6b656e73000000000060448201526064016108a0565b600a54600b5410610afd5760405162461bcd60e51b815260206004820152601b60248201527f596f752072656163686564206d6178206672656520746f6b656e73000000000060448201526064016108a0565b610b083360016113cf565b336000908152601060205260408120805460019290610b28908490611bed565b925050819055506001600b6000828254610b429190611bed565b9091555050565b6008546001600160a01b03163314610b735760405162461bcd60e51b81526004016108a090611bb8565b600c80549115156101000261ff0019909216919091179055565b6008546001600160a01b03163314610bb75760405162461bcd60e51b81526004016108a090611bb8565b8051610a0090600e9060208401906117b1565b600080546009546108ae9190611c38565b60006106c7826110b2565b60006001600160a01b038216610c0f576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610c5f5760405162461bcd60e51b81526004016108a090611bb8565b61093460006113e9565b60606106c782610dcf565b6008546001600160a01b03163314610c9e5760405162461bcd60e51b81526004016108a090611bb8565b600f55565b6008546001600160a01b03163314610ccd5760405162461bcd60e51b81526004016108a090611bb8565b8051610a0090600d9060208401906117b1565b6060600380546106dc90611c7b565b6001600160a01b038216331415610d195760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610d90848484611113565b6001600160a01b0383163b15610dc957610dac8484848461143b565b610dc9576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6060610dda8261108b565b610e3e5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108a0565b6000610e48611533565b90506000815111610e685760405180602001604052806000815250610e93565b80610e7284611542565b604051602001610e83929190611b29565b6040516020818303038152906040525b9392505050565b600c54600090610100900460ff168015610ecc57506001600160a01b0382166000908152601060205260409020546001115b80156106c75750600a54600b541092915050565b6060600d80546106dc90611c7b565b6008546001600160a01b03163314610f195760405162461bcd60e51b81526004016108a090611bb8565b6001600160a01b038116610f7e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a0565b610f87816113e9565b50565b600c5460ff16610fc75760405162461bcd60e51b815260206004820152600860248201526729b0b6329037b33360c11b60448201526064016108a0565b600f54610fd49082611c19565b3410156110235760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e742076616c756520746f206d696e7400000000000060448201526064016108a0565b8061102c610bca565b101561106f5760405162461bcd60e51b815260206004820152601260248201527113585e081d1bdad95b9cc81c995858da195960721b60448201526064016108a0565b610f8733826113cf565b6000600b54600a546108ae9190611c38565b60008054821080156106c7575050600090815260046020526040902054600160e01b161590565b6000816000548110156110fa57600081815260046020526040902054600160e01b81166110f8575b80610e935750600019016000818152600460205260409020546110da565b505b604051636f96cda160e11b815260040160405180910390fd5b600061111e826110b2565b9050836001600160a01b0316816001600160a01b0316146111515760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061116f575061116f8533610605565b8061118a57503361117f8461075f565b6001600160a01b0316145b9050806111aa57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0384166111d157604051633a954ecd60e21b815260040160405180910390fd5b600083815260066020908152604080832080546001600160a01b03191690556001600160a01b038881168452600583528184208054600019019055871683528083208054600101905585835260049091529020600160e11b4260a01b86178117909155821661126e576001830160008181526004602052604090205461126c57600054811461126c5760008181526004602052604090208390555b505b82846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b804710156113065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016108a0565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611353576040519150601f19603f3d011682016040523d82523d6000602084013e611358565b606091505b50509050806108fb5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016108a0565b610a00828260405180602001604052806000815250611640565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611470903390899088908890600401611b68565b602060405180830381600087803b15801561148a57600080fd5b505af19250505080156114ba575060408051601f3d908101601f191682019092526114b791810190611a7e565b60015b611515573d8080156114e8576040519150601f19603f3d011682016040523d82523d6000602084013e6114ed565b606091505b50805161150d576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600e80546106dc90611c7b565b6060816115665750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611590578061157a81611cb6565b91506115899050600a83611c05565b915061156a565b60008167ffffffffffffffff8111156115ab576115ab611d27565b6040519080825280601f01601f1916602001820160405280156115d5576020820181803683370190505b5090505b841561152b576115ea600183611c38565b91506115f7600a86611cd1565b611602906030611bed565b60f81b81838151811061161757611617611d11565b60200101906001600160f81b031916908160001a905350611639600a86611c05565b94506115d9565b6000546001600160a01b03841661166957604051622e076360e81b815260040160405180910390fd5b826116875760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03841660008181526005602090815260408083208054680100000000000000018902019055848352600490915290204260a01b86176001861460e11b1790558190818501903b1561175c575b60405182906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611725600087848060010195508761143b565b611742576040516368d2bf6b60e11b815260040160405180910390fd5b8082106116da57826000541461175757600080fd5b6117a1565b5b6040516001830192906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821061175d575b506000908155610dc99085838684565b8280546117bd90611c7b565b90600052602060002090601f0160209004810192826117df5760008555611825565b82601f106117f857805160ff1916838001178555611825565b82800160010185558215611825579182015b8281111561182557825182559160200191906001019061180a565b50611831929150611835565b5090565b5b808211156118315760008155600101611836565b600067ffffffffffffffff8084111561186557611865611d27565b604051601f8501601f19908116603f0116810190828211818310171561188d5761188d611d27565b816040528093508581528686860111156118a657600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146118d757600080fd5b919050565b803580151581146118d757600080fd5b6000602082840312156118fe57600080fd5b610e93826118c0565b6000806040838503121561191a57600080fd5b611923836118c0565b9150611931602084016118c0565b90509250929050565b60008060006060848603121561194f57600080fd5b611958846118c0565b9250611966602085016118c0565b9150604084013590509250925092565b6000806000806080858703121561198c57600080fd5b611995856118c0565b93506119a3602086016118c0565b925060408501359150606085013567ffffffffffffffff8111156119c657600080fd5b8501601f810187136119d757600080fd5b6119e68782356020840161184a565b91505092959194509250565b60008060408385031215611a0557600080fd5b611a0e836118c0565b9150611931602084016118dc565b60008060408385031215611a2f57600080fd5b611a38836118c0565b946020939093013593505050565b600060208284031215611a5857600080fd5b610e93826118dc565b600060208284031215611a7357600080fd5b8135610e9381611d3d565b600060208284031215611a9057600080fd5b8151610e9381611d3d565b600060208284031215611aad57600080fd5b813567ffffffffffffffff811115611ac457600080fd5b8201601f81018413611ad557600080fd5b61152b8482356020840161184a565b600060208284031215611af657600080fd5b5035919050565b60008151808452611b15816020860160208601611c4f565b601f01601f19169290920160200192915050565b60008351611b3b818460208801611c4f565b835190830190611b4f818360208801611c4f565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611b9b90830184611afd565b9695505050505050565b602081526000610e936020830184611afd565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115611c0057611c00611ce5565b500190565b600082611c1457611c14611cfb565b500490565b6000816000190483118215151615611c3357611c33611ce5565b500290565b600082821015611c4a57611c4a611ce5565b500390565b60005b83811015611c6a578181015183820152602001611c52565b83811115610dc95750506000910152565b600181811c90821680611c8f57607f821691505b60208210811415611cb057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611cca57611cca611ce5565b5060010190565b600082611ce057611ce0611cfb565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610f8757600080fdfea2646970667358221220244a0c0587b0507eac5cd4d4a54ec76a863422b42f878ce2db6e6c5a934b4cb264736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000011c37937e080000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569687468686375747332616f6e6d7066776b78756e786a723679337573736d7167736a746f71703670676272746c6b3232377370752f0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : maxTokens_ (uint256): 10000
Arg [1] : saleEnabled_ (bool): True
Arg [2] : freeMintEnabled_ (bool): True
Arg [3] : baseURI_ (string): ipfs://bafybeihthhcuts2aonmpfwkxunxjr6y3ussmqgsjtoqp6pgbrtlk227spu/
Arg [4] : maxFreeMints_ (uint256): 1
Arg [5] : price_ (uint256): 5000000000000000

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000000000000000000000000000000011c37937e08000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [7] : 697066733a2f2f62616679626569687468686375747332616f6e6d7066776b78
Arg [8] : 756e786a723679337573736d7167736a746f71703670676272746c6b32323773
Arg [9] : 70752f0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

33326:4068:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6756:615;;;;;;;;;;-1:-1:-1;6756:615:0;;;;;:::i;:::-;;:::i;:::-;;;6280:14:1;;6273:22;6255:41;;6243:2;6228:18;6756:615:0;;;;;;;;10604:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12040:204::-;;;;;;;;;;-1:-1:-1;12040:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5578:32:1;;;5560:51;;5548:2;5533:18;12040:204:0;5414:203:1;11558:474:0;;;;;;;;;;-1:-1:-1;11558:474:0;;;;;:::i;:::-;;:::i;:::-;;35047:102;;;;;;;;;;-1:-1:-1;35047:102:0;;;;;:::i;:::-;;:::i;34844:101::-;;;;;;;;;;-1:-1:-1;34896:7:0;6596:13;34844:101;;;10382:25:1;;;10370:2;10355:18;34844:101:0;10236:177:1;34658:79:0;;;;;;;;;;-1:-1:-1;34658:79:0;;;;;:::i;:::-;;:::i;12740:170::-;;;;;;;;;;-1:-1:-1;12740:170:0;;;;;:::i;:::-;;:::i;36223:124::-;;;;;;;;;;;;;:::i;35157:115::-;;;;;;;;;;-1:-1:-1;35157:115:0;;;;;:::i;:::-;;:::i;12918:185::-;;;;;;;;;;-1:-1:-1;12918:185:0;;;;;:::i;:::-;;:::i;35280:174::-;;;;;;;;;;-1:-1:-1;35280:174:0;;;;;:::i;:::-;;:::i;35758:355::-;;;;;;;;;;;;;:::i;34467:87::-;;;;;;;;;;-1:-1:-1;34467:87:0;;;;;:::i;:::-;;:::i;36712:96::-;;;;;;;;;;-1:-1:-1;36712:96:0;;;;;:::i;:::-;;:::i;36355:109::-;;;;;;;;;;;;;:::i;34363:96::-;;;;;;;;;;-1:-1:-1;34435:16:0;;;;;;;34363:96;;10452:144;;;;;;;;;;-1:-1:-1;10452:144:0;;;;;:::i;:::-;;:::i;34745:91::-;;;;;;;;;;-1:-1:-1;34819:9:0;;34745:91;;7379:224;;;;;;;;;;-1:-1:-1;7379:224:0;;;;;:::i;:::-;;:::i;27205:103::-;;;;;;;;;;;;;:::i;34562:88::-;;;;;;;;;;-1:-1:-1;34630:12:0;;;;34562:88;;26982:87;;;;;;;;;;-1:-1:-1;27055:6:0;;-1:-1:-1;;;;;27055:6:0;26982:87;;37272:119;;;;;;;;;;-1:-1:-1;37272:119:0;;;;;:::i;:::-;;:::i;34953:86::-;;;;;;;;;;-1:-1:-1;34953:86:0;;;;;:::i;:::-;;:::i;36816:99::-;;;;;;;;;;-1:-1:-1;36816:99:0;;;;;:::i;:::-;;:::i;10712:104::-;;;;;;;;;;;;;:::i;12252:308::-;;;;;;;;;;-1:-1:-1;12252:308:0;;;;;:::i;:::-;;:::i;13111:396::-;;;;;;;;;;-1:-1:-1;13111:396:0;;;;;:::i;:::-;;:::i;36923:341::-;;;;;;;;;;-1:-1:-1;36923:341:0;;;;;:::i;:::-;;:::i;34189:166::-;;;;;;;;;;-1:-1:-1;34189:166:0;;;;;:::i;:::-;;:::i;36121:94::-;;;;;;;;;;;;;:::i;12568:164::-;;;;;;;;;;-1:-1:-1;12568:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;12689:25:0;;;12665:4;12689:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;12568:164;27316:201;;;;;;;;;;-1:-1:-1;27316:201:0;;;;;:::i;:::-;;:::i;35462:288::-;;;;;;:::i;:::-;;:::i;36472:117::-;;;;;;;;;;;;;:::i;6756:615::-;6841:4;-1:-1:-1;;;;;;;;;7141:25:0;;;;:102;;-1:-1:-1;;;;;;;;;;7218:25:0;;;7141:102;:179;;;-1:-1:-1;;;;;;;;;;7295:25:0;;;7141:179;7121:199;6756:615;-1:-1:-1;;6756:615:0:o;10604:100::-;10658:13;10691:5;10684:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10604:100;:::o;12040:204::-;12108:7;12133:16;12141:7;12133;:16::i;:::-;12128:64;;12158:34;;-1:-1:-1;;;12158:34:0;;;;;;;;;;;12128:64;-1:-1:-1;12212:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;12212:24:0;;12040:204::o;11558:474::-;11631:13;11663:27;11682:7;11663:18;:27::i;:::-;11631:61;;11713:5;-1:-1:-1;;;;;11707:11:0;:2;-1:-1:-1;;;;;11707:11:0;;11703:48;;;11727:24;;-1:-1:-1;;;11727:24:0;;;;;;;;;;;11703:48;24398:10;-1:-1:-1;;;;;11768:28:0;;;11764:175;;11816:44;11833:5;24398:10;12568:164;:::i;11816:44::-;11811:128;;11888:35;;-1:-1:-1;;;11888:35:0;;;;;;;;;;;11811:128;11951:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;11951:29:0;-1:-1:-1;;;;;11951:29:0;;;;;;;;;11996:28;;11951:24;;11996:28;;;;;;;11620:412;11558:474;;:::o;35047:102::-;27055:6;;-1:-1:-1;;;;;27055:6:0;24398:10;27117:23;27109:68;;;;-1:-1:-1;;;27109:68:0;;;;;;;:::i;:::-;;;;;;;;;35119:9:::1;:22:::0;35047:102::o;34923:14::-;34916:21;;34844:101;:::o;34658:79::-;27055:6;;-1:-1:-1;;;;;27055:6:0;24398:10;27117:23;27109:68;;;;-1:-1:-1;;;27109:68:0;;;;;;;:::i;:::-;34713:12:::1;:16:::0;;-1:-1:-1;;34713:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34658:79::o;12740:170::-;12874:28;12884:4;12890:2;12894:7;12874:9;:28::i;:::-;12740:170;;;:::o;36223:124::-;27055:6;;-1:-1:-1;;;;;27055:6:0;24398:10;27117:23;27109:68;;;;-1:-1:-1;;;27109:68:0;;;;;;;:::i;:::-;36278:61:::1;36304:10;36317:21;36278:17;:61::i;:::-;36223:124::o:0;35157:115::-;27055:6;;-1:-1:-1;;;;;27055:6:0;24398:10;27117:23;27109:68;;;;-1:-1:-1;;;27109:68:0;;;;;;;:::i;:::-;35235:13:::1;:29:::0;35157:115::o;12918:185::-;13056:39;13073:4;13079:2;13083:7;13056:39;;;;;;;;;;;;:16;:39::i;35280:174::-;27055:6;;-1:-1:-1;;;;;27055:6:0;24398:10;27117:23;27109:68;;;;-1:-1:-1;;;27109:68:0;;;;;;;:::i;:::-;35384:6:::1;35363:17;:15;:17::i;:::-;:27;;35355:58;;;::::0;-1:-1:-1;;;35355:58:0;;6733:2:1;35355:58:0::1;::::0;::::1;6715:21:1::0;6772:2;6752:18;;;6745:30;-1:-1:-1;;;6791:18:1;;;6784:48;6849:18;;35355:58:0::1;6531:342:1::0;35355:58:0::1;35424:22;35434:3;35439:6;35424:9;:22::i;:::-;35280:174:::0;;:::o;35758:355::-;35806:16;;;;;;;35798:42;;;;-1:-1:-1;;;35798:42:0;;8983:2:1;35798:42:0;;;8965:21:1;9022:2;9002:18;;;8995:30;-1:-1:-1;;;9041:18:1;;;9034:43;9094:18;;35798:42:0;8781:337:1;35798:42:0;35869:10;35859:21;;;;:9;:21;;;;;;35883:1;-1:-1:-1;35851:65:0;;;;-1:-1:-1;;;35851:65:0;;7487:2:1;35851:65:0;;;7469:21:1;7526:2;7506:18;;;7499:30;7565:29;7545:18;;;7538:57;7612:18;;35851:65:0;7285:351:1;35851:65:0;35955:13;;35935:17;;:33;35927:73;;;;-1:-1:-1;;;35927:73:0;;7487:2:1;35927:73:0;;;7469:21:1;7526:2;7506:18;;;7499:30;7565:29;7545:18;;;7538:57;7612:18;;35927:73:0;7285:351:1;35927:73:0;36011:24;36021:10;36033:1;36011:9;:24::i;:::-;36056:10;36046:21;;;;:9;:21;;;;;:26;;36071:1;;36046:21;:26;;36071:1;;36046:26;:::i;:::-;;;;;;;;36104:1;36083:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;35758:355:0:o;34467:87::-;27055:6;;-1:-1:-1;;;;;27055:6:0;24398:10;27117:23;27109:68;;;;-1:-1:-1;;;27109:68:0;;;;;;;:::i;:::-;34526:16:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;34526:20:0;;::::1;::::0;;;::::1;::::0;;34467:87::o;36712:96::-;27055:6;;-1:-1:-1;;;;;27055:6:0;24398:10;27117:23;27109:68;;;;-1:-1:-1;;;27109:68:0;;;;;;;:::i;:::-;36781:19;;::::1;::::0;:13:::1;::::0;:19:::1;::::0;::::1;::::0;::::1;:::i;36355:109::-:0;36403:7;6596:13;;36430:9;;:26;;;;:::i;10452:144::-;10516:7;10559:27;10578:7;10559:18;:27::i;7379:224::-;7443:7;-1:-1:-1;;;;;7467:19:0;;7463:60;;7495:28;;-1:-1:-1;;;7495:28:0;;;;;;;;;;;7463:60;-1:-1:-1;;;;;;7541:25:0;;;;;:18;:25;;;;;;3232:13;7541:54;;7379:224::o;27205:103::-;27055:6;;-1:-1:-1;;;;;27055:6:0;24398:10;27117:23;27109:68;;;;-1:-1:-1;;;27109:68:0;;;;;;;:::i;:::-;27270:30:::1;27297:1;27270:18;:30::i;37272:119::-:0;37333:13;37366:17;37375:7;37366:8;:17::i;34953:86::-;27055:6;;-1:-1:-1;;;;;27055:6:0;24398:10;27117:23;27109:68;;;;-1:-1:-1;;;27109:68:0;;;;;;;:::i;:::-;35017:5:::1;:14:::0;34953:86::o;36816:99::-;27055:6;;-1:-1:-1;;;;;27055:6:0;24398:10;27117:23;27109:68;;;;-1:-1:-1;;;27109:68:0;;;;;;;:::i;:::-;36889:18;;::::1;::::0;:12:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;10712:104::-:0;10768:13;10801:7;10794:14;;;;;:::i;12252:308::-;-1:-1:-1;;;;;12351:31:0;;24398:10;12351:31;12347:61;;;12391:17;;-1:-1:-1;;;12391:17:0;;;;;;;;;;;12347:61;24398:10;12421:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;12421:49:0;;;;;;;;;;;;:60;;-1:-1:-1;;12421:60:0;;;;;;;;;;12497:55;;6255:41:1;;;12421:49:0;;24398:10;12497:55;;6228:18:1;12497:55:0;;;;;;;12252:308;;:::o;13111:396::-;13278:28;13288:4;13294:2;13298:7;13278:9;:28::i;:::-;-1:-1:-1;;;;;13321:14:0;;;:19;13317:183;;13360:56;13391:4;13397:2;13401:7;13410:5;13360:30;:56::i;:::-;13355:145;;13444:40;;-1:-1:-1;;;13444:40:0;;;;;;;;;;;13355:145;13111:396;;;;:::o;36923:341::-;36996:13;37030:16;37038:7;37030;:16::i;:::-;37022:76;;;;-1:-1:-1;;;37022:76:0;;9686:2:1;37022:76:0;;;9668:21:1;9725:2;9705:18;;;9698:30;9764:34;9744:18;;;9737:62;-1:-1:-1;;;9815:18:1;;;9808:45;9870:19;;37022:76:0;9484:411:1;37022:76:0;37109:21;37133:10;:8;:10::i;:::-;37109:34;;37185:1;37167:7;37161:21;:25;:95;;;;;;;;;;;;;;;;;37213:7;37222:18;:7;:16;:18::i;:::-;37196:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37161:95;37154:102;36923:341;-1:-1:-1;;;36923:341:0:o;34189:166::-;34269:16;;34246:4;;34269:16;;;;;:41;;;;-1:-1:-1;;;;;;34289:17:0;;;;;;:9;:17;;;;;;34309:1;-1:-1:-1;34269:41:0;:78;;;;;34334:13;;34314:17;;:33;34262:85;34189:166;-1:-1:-1;;34189:166:0:o;36121:94::-;36165:13;36195:12;36188:19;;;;;:::i;27316:201::-;27055:6;;-1:-1:-1;;;;;27055:6:0;24398:10;27117:23;27109:68;;;;-1:-1:-1;;;27109:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27405:22:0;::::1;27397:73;;;::::0;-1:-1:-1;;;27397:73:0;;7080:2:1;27397:73:0::1;::::0;::::1;7062:21:1::0;7119:2;7099:18;;;7092:30;7158:34;7138:18;;;7131:62;-1:-1:-1;;;7209:18:1;;;7202:36;7255:19;;27397:73:0::1;6878:402:1::0;27397:73:0::1;27481:28;27500:8;27481:18;:28::i;:::-;27316:201:::0;:::o;35462:288::-;35533:12;;;;35525:33;;;;-1:-1:-1;;;35525:33:0;;10102:2:1;35525:33:0;;;10084:21:1;10141:1;10121:18;;;10114:29;-1:-1:-1;;;10159:18:1;;;10152:38;10207:18;;35525:33:0;9900:331:1;35525:33:0;35597:5;;35590:12;;:6;:12;:::i;:::-;35577:9;:25;;35569:64;;;;-1:-1:-1;;;35569:64:0;;7843:2:1;35569:64:0;;;7825:21:1;7882:2;7862:18;;;7855:30;7921:28;7901:18;;;7894:56;7967:18;;35569:64:0;7641:350:1;35569:64:0;35673:6;35652:17;:15;:17::i;:::-;:27;;35644:58;;;;-1:-1:-1;;;35644:58:0;;6733:2:1;35644:58:0;;;6715:21:1;6772:2;6752:18;;;6745:30;-1:-1:-1;;;6791:18:1;;;6784:48;6849:18;;35644:58:0;6531:342:1;35644:58:0;35713:29;35723:10;35735:6;35713:9;:29::i;36472:117::-;36521:7;36564:17;;36548:13;;:33;;;;:::i;13515:273::-;13572:4;13662:13;;13652:7;:23;13609:152;;;;-1:-1:-1;;13713:26:0;;;;:17;:26;;;;;;-1:-1:-1;;;13713:43:0;:48;;13515:273::o;8489:1129::-;8556:7;8591;8693:13;;8686:4;:20;8682:869;;;8731:14;8748:23;;;:17;:23;;;;;;-1:-1:-1;;;8837:23:0;;8833:699;;9356:113;9363:11;9356:113;;-1:-1:-1;;;9434:6:0;9416:25;;;;:17;:25;;;;;;9356:113;;8833:699;8708:843;8682:869;9579:31;;-1:-1:-1;;;9579:31:0;;;;;;;;;;;17816:2515;17931:27;17961;17980:7;17961:18;:27::i;:::-;17931:57;;18046:4;-1:-1:-1;;;;;18005:45:0;18021:19;-1:-1:-1;;;;;18005:45:0;;18001:86;;18059:28;;-1:-1:-1;;;18059:28:0;;;;;;;;;;;18001:86;18100:22;24398:10;-1:-1:-1;;;;;18126:27:0;;;;:87;;-1:-1:-1;18170:43:0;18187:4;24398:10;12568:164;:::i;18170:43::-;18126:147;;;-1:-1:-1;24398:10:0;18230:20;18242:7;18230:11;:20::i;:::-;-1:-1:-1;;;;;18230:43:0;;18126:147;18100:174;;18292:17;18287:66;;18318:35;;-1:-1:-1;;;18318:35:0;;;;;;;;;;;18287:66;-1:-1:-1;;;;;18368:16:0;;18364:52;;18393:23;;-1:-1:-1;;;18393:23:0;;;;;;;;;;;18364:52;18545:24;;;;:15;:24;;;;;;;;18538:31;;-1:-1:-1;;;;;;18538:31:0;;;-1:-1:-1;;;;;18937:24:0;;;;;:18;:24;;;;;18935:26;;-1:-1:-1;;18935:26:0;;;19006:22;;;;;;;19004:24;;-1:-1:-1;19004:24:0;;;19299:26;;;:17;:26;;;;;-1:-1:-1;;;19387:15:0;3886:3;19387:41;19345:84;;:128;;19299:174;;;19593:46;;19589:626;;19697:1;19687:11;;19665:19;19820:30;;;:17;:30;;;;;;19816:384;;19958:13;;19943:11;:28;19939:242;;20105:30;;;;:17;:30;;;;;:52;;;19939:242;19646:569;19589:626;20262:7;20258:2;-1:-1:-1;;;;;20243:27:0;20252:4;-1:-1:-1;;;;;20243:27:0;;;;;;;;;;;17920:2411;;17816:2515;;;:::o;29821:317::-;29936:6;29911:21;:31;;29903:73;;;;-1:-1:-1;;;29903:73:0;;8625:2:1;29903:73:0;;;8607:21:1;8664:2;8644:18;;;8637:30;8703:31;8683:18;;;8676:59;8752:18;;29903:73:0;8423:353:1;29903:73:0;29990:12;30008:9;-1:-1:-1;;;;;30008:14:0;30030:6;30008:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29989:52;;;30060:7;30052:78;;;;-1:-1:-1;;;30052:78:0;;8198:2:1;30052:78:0;;;8180:21:1;8237:2;8217:18;;;8210:30;8276:34;8256:18;;;8249:62;8347:28;8327:18;;;8320:56;8393:19;;30052:78:0;7996:422:1;13796:104:0;13865:27;13875:2;13879:8;13865:27;;;;;;;;;;;;:9;:27::i;27525:191::-;27618:6;;;-1:-1:-1;;;;;27635:17:0;;;-1:-1:-1;;;;;;27635:17:0;;;;;;;27668:40;;27618:6;;;27635:17;27618:6;;27668:40;;27599:16;;27668:40;27588:128;27525:191;:::o;23254:716::-;23438:88;;-1:-1:-1;;;23438:88:0;;23417:4;;-1:-1:-1;;;;;23438:45:0;;;;;:88;;24398:10;;23505:4;;23511:7;;23520:5;;23438:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23438:88:0;;;;;;;;-1:-1:-1;;23438:88:0;;;;;;;;;;;;:::i;:::-;;;23434:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23721:13:0;;23717:235;;23767:40;;-1:-1:-1;;;23767:40:0;;;;;;;;;;;23717:235;23910:6;23904:13;23895:6;23891:2;23887:15;23880:38;23434:529;-1:-1:-1;;;;;;23597:64:0;-1:-1:-1;;;23597:64:0;;-1:-1:-1;23434:529:0;23254:716;;;;;;:::o;36597:107::-;36650:13;36683;36676:20;;;;;:::i;27869:723::-;27925:13;28146:10;28142:53;;-1:-1:-1;;28173:10:0;;;;;;;;;;;;-1:-1:-1;;;28173:10:0;;;;;27869:723::o;28142:53::-;28220:5;28205:12;28261:78;28268:9;;28261:78;;28294:8;;;;:::i;:::-;;-1:-1:-1;28317:10:0;;-1:-1:-1;28325:2:0;28317:10;;:::i;:::-;;;28261:78;;;28349:19;28381:6;28371:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28371:17:0;;28349:39;;28399:154;28406:10;;28399:154;;28433:11;28443:1;28433:11;;:::i;:::-;;-1:-1:-1;28502:10:0;28510:2;28502:5;:10;:::i;:::-;28489:24;;:2;:24;:::i;:::-;28476:39;;28459:6;28466;28459:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;28459:56:0;;;;;;;;-1:-1:-1;28530:11:0;28539:2;28530:11;;:::i;:::-;;;28399:154;;13908:2236;14031:20;14054:13;-1:-1:-1;;;;;14082:16:0;;14078:48;;14107:19;;-1:-1:-1;;;14107:19:0;;;;;;;;;;;14078:48;14141:13;14137:44;;14163:18;;-1:-1:-1;;;14163:18:0;;;;;;;;;;;14137:44;-1:-1:-1;;;;;14730:22:0;;;;;;:18;:22;;;;3369:2;14730:22;;;:70;;14768:31;14756:44;;14730:70;;;15043:31;;;:17;:31;;;;;15136:15;3886:3;15136:41;15094:84;;-1:-1:-1;15214:13:0;;4145:3;15199:56;15094:162;15043:213;;:31;;15337:23;;;;15381:14;:19;15377:635;;15421:313;15452:38;;15477:12;;-1:-1:-1;;;;;15452:38:0;;;15469:1;;15452:38;;15469:1;;15452:38;15518:69;15557:1;15561:2;15565:14;;;;;;15581:5;15518:30;:69::i;:::-;15513:174;;15623:40;;-1:-1:-1;;;15623:40:0;;;;;;;;;;;15513:174;15729:3;15714:12;:18;15421:313;;15815:12;15798:13;;:29;15794:43;;15829:8;;;15794:43;15377:635;;;15878:119;15909:40;;15934:14;;;;;-1:-1:-1;;;;;15909:40:0;;;15926:1;;15909:40;;15926:1;;15909:40;15992:3;15977:12;:18;15878:119;;15377:635;-1:-1:-1;16026:13:0;:28;;;16076:60;;16109:2;16113:12;16127:8;16076:60;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:60;;978:1;975;968:12;993:186;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:52;;;1121:1;1118;1111:12;1073:52;1144:29;1163:9;1144:29;:::i;1184:260::-;1252:6;1260;1313:2;1301:9;1292:7;1288:23;1284:32;1281:52;;;1329:1;1326;1319:12;1281:52;1352:29;1371:9;1352:29;:::i;:::-;1342:39;;1400:38;1434:2;1423:9;1419:18;1400:38;:::i;:::-;1390:48;;1184:260;;;;;:::o;1449:328::-;1526:6;1534;1542;1595:2;1583:9;1574:7;1570:23;1566:32;1563:52;;;1611:1;1608;1601:12;1563:52;1634:29;1653:9;1634:29;:::i;:::-;1624:39;;1682:38;1716:2;1705:9;1701:18;1682:38;:::i;:::-;1672:48;;1767:2;1756:9;1752:18;1739:32;1729:42;;1449:328;;;;;:::o;1782:666::-;1877:6;1885;1893;1901;1954:3;1942:9;1933:7;1929:23;1925:33;1922:53;;;1971:1;1968;1961:12;1922:53;1994:29;2013:9;1994:29;:::i;:::-;1984:39;;2042:38;2076:2;2065:9;2061:18;2042:38;:::i;:::-;2032:48;;2127:2;2116:9;2112:18;2099:32;2089:42;;2182:2;2171:9;2167:18;2154:32;2209:18;2201:6;2198:30;2195:50;;;2241:1;2238;2231:12;2195:50;2264:22;;2317:4;2309:13;;2305:27;-1:-1:-1;2295:55:1;;2346:1;2343;2336:12;2295:55;2369:73;2434:7;2429:2;2416:16;2411:2;2407;2403:11;2369:73;:::i;:::-;2359:83;;;1782:666;;;;;;;:::o;2453:254::-;2518:6;2526;2579:2;2567:9;2558:7;2554:23;2550:32;2547:52;;;2595:1;2592;2585:12;2547:52;2618:29;2637:9;2618:29;:::i;:::-;2608:39;;2666:35;2697:2;2686:9;2682:18;2666:35;:::i;2712:254::-;2780:6;2788;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;2880:29;2899:9;2880:29;:::i;:::-;2870:39;2956:2;2941:18;;;;2928:32;;-1:-1:-1;;;2712:254:1:o;2971:180::-;3027:6;3080:2;3068:9;3059:7;3055:23;3051:32;3048:52;;;3096:1;3093;3086:12;3048:52;3119:26;3135:9;3119:26;:::i;3156:245::-;3214:6;3267:2;3255:9;3246:7;3242:23;3238:32;3235:52;;;3283:1;3280;3273:12;3235:52;3322:9;3309:23;3341:30;3365:5;3341:30;:::i;3406:249::-;3475:6;3528:2;3516:9;3507:7;3503:23;3499:32;3496:52;;;3544:1;3541;3534:12;3496:52;3576:9;3570:16;3595:30;3619:5;3595:30;:::i;3660:450::-;3729:6;3782:2;3770:9;3761:7;3757:23;3753:32;3750:52;;;3798:1;3795;3788:12;3750:52;3838:9;3825:23;3871:18;3863:6;3860:30;3857:50;;;3903:1;3900;3893:12;3857:50;3926:22;;3979:4;3971:13;;3967:27;-1:-1:-1;3957:55:1;;4008:1;4005;3998:12;3957:55;4031:73;4096:7;4091:2;4078:16;4073:2;4069;4065:11;4031:73;:::i;4115:180::-;4174:6;4227:2;4215:9;4206:7;4202:23;4198:32;4195:52;;;4243:1;4240;4233:12;4195:52;-1:-1:-1;4266:23:1;;4115:180;-1:-1:-1;4115:180:1:o;4300:257::-;4341:3;4379:5;4373:12;4406:6;4401:3;4394:19;4422:63;4478:6;4471:4;4466:3;4462:14;4455:4;4448:5;4444:16;4422:63;:::i;:::-;4539:2;4518:15;-1:-1:-1;;4514:29:1;4505:39;;;;4546:4;4501:50;;4300:257;-1:-1:-1;;4300:257:1:o;4562:637::-;4842:3;4880:6;4874:13;4896:53;4942:6;4937:3;4930:4;4922:6;4918:17;4896:53;:::i;:::-;5012:13;;4971:16;;;;5034:57;5012:13;4971:16;5068:4;5056:17;;5034:57;:::i;:::-;-1:-1:-1;;;5113:20:1;;5142:22;;;5191:1;5180:13;;4562:637;-1:-1:-1;;;;4562:637:1:o;5622:488::-;-1:-1:-1;;;;;5891:15:1;;;5873:34;;5943:15;;5938:2;5923:18;;5916:43;5990:2;5975:18;;5968:34;;;6038:3;6033:2;6018:18;;6011:31;;;5816:4;;6059:45;;6084:19;;6076:6;6059:45;:::i;:::-;6051:53;5622:488;-1:-1:-1;;;;;;5622:488:1:o;6307:219::-;6456:2;6445:9;6438:21;6419:4;6476:44;6516:2;6505:9;6501:18;6493:6;6476:44;:::i;9123:356::-;9325:2;9307:21;;;9344:18;;;9337:30;9403:34;9398:2;9383:18;;9376:62;9470:2;9455:18;;9123:356::o;10418:128::-;10458:3;10489:1;10485:6;10482:1;10479:13;10476:39;;;10495:18;;:::i;:::-;-1:-1:-1;10531:9:1;;10418:128::o;10551:120::-;10591:1;10617;10607:35;;10622:18;;:::i;:::-;-1:-1:-1;10656:9:1;;10551:120::o;10676:168::-;10716:7;10782:1;10778;10774:6;10770:14;10767:1;10764:21;10759:1;10752:9;10745:17;10741:45;10738:71;;;10789:18;;:::i;:::-;-1:-1:-1;10829:9:1;;10676:168::o;10849:125::-;10889:4;10917:1;10914;10911:8;10908:34;;;10922:18;;:::i;:::-;-1:-1:-1;10959:9:1;;10849:125::o;10979:258::-;11051:1;11061:113;11075:6;11072:1;11069:13;11061:113;;;11151:11;;;11145:18;11132:11;;;11125:39;11097:2;11090:10;11061:113;;;11192:6;11189:1;11186:13;11183:48;;;-1:-1:-1;;11227:1:1;11209:16;;11202:27;10979:258::o;11242:380::-;11321:1;11317:12;;;;11364;;;11385:61;;11439:4;11431:6;11427:17;11417:27;;11385:61;11492:2;11484:6;11481:14;11461:18;11458:38;11455:161;;;11538:10;11533:3;11529:20;11526:1;11519:31;11573:4;11570:1;11563:15;11601:4;11598:1;11591:15;11455:161;;11242:380;;;:::o;11627:135::-;11666:3;-1:-1:-1;;11687:17:1;;11684:43;;;11707:18;;:::i;:::-;-1:-1:-1;11754:1:1;11743:13;;11627:135::o;11767:112::-;11799:1;11825;11815:35;;11830:18;;:::i;:::-;-1:-1:-1;11864:9:1;;11767:112::o;11884:127::-;11945:10;11940:3;11936:20;11933:1;11926:31;11976:4;11973:1;11966:15;12000:4;11997:1;11990:15;12016:127;12077:10;12072:3;12068:20;12065:1;12058:31;12108:4;12105:1;12098:15;12132:4;12129:1;12122:15;12148:127;12209:10;12204:3;12200:20;12197:1;12190:31;12240:4;12237:1;12230:15;12264:4;12261:1;12254:15;12280:127;12341:10;12336:3;12332:20;12329:1;12322:31;12372:4;12369:1;12362:15;12396:4;12393:1;12386:15;12412:131;-1:-1:-1;;;;;;12486:32:1;;12476:43;;12466:71;;12533:1;12530;12523:12

Swarm Source

ipfs://244a0c0587b0507eac5cd4d4a54ec76a863422b42f878ce2db6e6c5a934b4cb2

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.