Contract 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xfba17122091f67fba0e279f6831c67ccc51150fc9aff2b26520d379bd8aca6a4Safe Transfer Fr...219275862022-11-04 3:46:1833 days 20 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0 AVAX0.001626735 27.5
0x56f396c9f77211ce7f138fc0e47e918a7c67f83f3d679158b07fc58e925a8a1fMint General219275802022-11-04 3:46:0633 days 20 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf12.5 AVAX0.002383425 27.5
0x22c696b6821f3838be2c61e925f33a5fd432f3a48de7b61b7ca82da7b4481974Mint General219275652022-11-04 3:45:3633 days 20 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf12.5 AVAX0.002383425 27.5
0x131d2595bd722b38aeaaee9b907b4d976eaf39fb5844291e7b1fabd024790c12Safe Transfer Fr...218976522022-11-03 10:44:4534 days 13 hrs ago0x0e1aeb8f587a265f0e32995d7acf604446e3c538 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0 AVAX0.001577017096 26.601955
0x9affa10e7fe85cf6a648e8e48db7063501406f5df83329a5c4dd813e8c144b93Safe Transfer Fr...215798992022-10-26 22:44:3442 days 1 hr ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0 AVAX0.001626735 27.5
0xd6b88c627b798568e7b8a4a227c3c20bfda781dc5af254d94e3f9e01139925dbMint General215798962022-10-26 22:44:2842 days 1 hr ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf12.5 AVAX0.002383425 27.5
0x7abe8bd1e9d45cc0255c7e30c2eb1d16b24974b8197f30135c8f3df011e4631aSet Approval For...212786912022-10-19 20:30:3849 days 3 hrs ago0x5cf8e4b99e7db76cbdef5d917e41106f4ad6386a IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0 AVAX0.0006993085 26.5
0xdf06321a31235a510edce2bda515b00c021be439aba39adf5ec65658d48f1bf4Set Approval For...212786732022-10-19 20:30:0249 days 3 hrs ago0x5cf8e4b99e7db76cbdef5d917e41106f4ad6386a IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0 AVAX0.0012266585 26.5
0xceb21cab5bb6f3050b7a9fdf854cd9615b107e1fb951a2ec36a72005a1f6fbfeSafe Transfer Fr...212785882022-10-19 20:27:0649 days 3 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0 AVAX0.001626735 27.5
0xc72d569d68736f06b7f20ea6e0fcef83dbcc9fdbfda59f266c4da5a8ddc39bd0Mint General212785822022-10-19 20:26:5449 days 3 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf12.5 AVAX0.002383425 27.5
0xc1df3f3d6e8f76e03a6ae0e06796392909d100004057e20fa235b995008d0399Safe Transfer Fr...212775922022-10-19 19:53:3149 days 4 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0 AVAX0.001626405 27.5
0x12c35f0d22051454426a1dda6bd017e1e33abd1f61e544579b82204c8d383d55Mint General212775812022-10-19 19:53:0949 days 4 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf12.5 AVAX0.002383425 27.5
0xdcac46577b3bd267b4c8f665516951cbb251a27fbcd410f75a4606806aca585eSafe Transfer Fr...212660842022-10-19 13:25:2049 days 10 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0 AVAX0.001626735 27.5
0x49c5caa37711ac457b0324d4128ac0a08a964569ab8712c6dd32239568ebe6cdMint General212660812022-10-19 13:25:1449 days 10 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf12.5 AVAX0.002383425 27.5
0xb5941520c36f584eb861d03e5bd88fd1dba63ccb37c4c2578b3fbde2cb8358f5Safe Transfer Fr...211908762022-10-17 18:41:1851 days 5 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0 AVAX0.001626735 27.5
0x90a42b8c96862ccd007104eae1f45b3d2d25606cde61b8e21e32a06214c6e445Mint General211908732022-10-17 18:41:1251 days 5 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf12.5 AVAX0.002383425 27.5
0xb0305dcc15ec4ba46c4875ab9b2209c74b2dcf7f98ef920311a7974e681a4020Safe Transfer Fr...211270772022-10-16 6:23:2852 days 17 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0 AVAX0.001626735 27.5
0xc571b06f858fd16f85e0d78b6c388d7b7995d46ca51ea17a2457418514fa4999Mint General211270742022-10-16 6:23:2252 days 17 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf12.5 AVAX0.002383425 27.5
0x759cd593b65292c703f8ccf53f1cf6d68f981156c8ac9ad02e13512cdb47ac0fMint General210660102022-10-14 19:43:3954 days 4 hrs ago0xc269e0a9f986c585b35d6eb41163deb805c0a8a4 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf12.5 AVAX0.0021667525
0xec4bb7fa951cd03e88381f0a84b67999a2e1bdd26e4aff198d92832c4bb8dd99Mint General210660012022-10-14 19:43:2154 days 4 hrs ago0xc269e0a9f986c585b35d6eb41163deb805c0a8a4 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf12.5 AVAX0.0025942525
0x21f004eb338bbe33ed3582ebc5be3b2cc4e9b5a5464fde7e4ba28229ff70b9cbSet Approval For...209737152022-10-12 15:19:0056 days 9 hrs ago0xc2d7b724f8ee4c3a7ed25154d0c17016e623fb66 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0 AVAX0.00115512525
0xc14962522878ab9c69df08ebf2cb89da51230948270e6df38ad26aa0d0a7c0adSafe Transfer Fr...206715452022-10-05 9:33:4163 days 14 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0 AVAX0.001626735 27.5
0x7e25cc483355c9780a447f6094db2b3acd95a41d93c5014621bfb828ecf6c000Mint General206715442022-10-05 9:33:3663 days 14 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf12.5 AVAX0.002383425 27.5
0x166dab74c29031778db06a66945e655e608bf275e5baefbe6e109ec604a0b34eSafe Transfer Fr...206192802022-10-04 3:25:3564 days 20 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0 AVAX0.001626735 27.5
0xa9dc7f408778aeae773e3049242741c5c45d9dad344d4f586d2053a029266985Mint General206192782022-10-04 3:25:3164 days 20 hrs ago0xa491afe50f303cfd838f6ca51196366d96d0f630 IN  0x403b166e2f74fc2867abe9c43aa0d383d6a11abf12.5 AVAX0.002383425 27.5
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x56f396c9f77211ce7f138fc0e47e918a7c67f83f3d679158b07fc58e925a8a1f219275802022-11-04 3:46:0633 days 20 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0x22c696b6821f3838be2c61e925f33a5fd432f3a48de7b61b7ca82da7b4481974219275652022-11-04 3:45:3633 days 20 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0xd6b88c627b798568e7b8a4a227c3c20bfda781dc5af254d94e3f9e01139925db215798962022-10-26 22:44:2842 days 1 hr ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0xc72d569d68736f06b7f20ea6e0fcef83dbcc9fdbfda59f266c4da5a8ddc39bd0212785822022-10-19 20:26:5449 days 3 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0x12c35f0d22051454426a1dda6bd017e1e33abd1f61e544579b82204c8d383d55212775812022-10-19 19:53:0949 days 4 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0x49c5caa37711ac457b0324d4128ac0a08a964569ab8712c6dd32239568ebe6cd212660812022-10-19 13:25:1449 days 10 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0x90a42b8c96862ccd007104eae1f45b3d2d25606cde61b8e21e32a06214c6e445211908732022-10-17 18:41:1251 days 5 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0xc571b06f858fd16f85e0d78b6c388d7b7995d46ca51ea17a2457418514fa4999211270742022-10-16 6:23:2252 days 17 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0x759cd593b65292c703f8ccf53f1cf6d68f981156c8ac9ad02e13512cdb47ac0f210660102022-10-14 19:43:3954 days 4 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0xec4bb7fa951cd03e88381f0a84b67999a2e1bdd26e4aff198d92832c4bb8dd99210660012022-10-14 19:43:2154 days 4 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0x7e25cc483355c9780a447f6094db2b3acd95a41d93c5014621bfb828ecf6c000206715442022-10-05 9:33:3663 days 14 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0xa9dc7f408778aeae773e3049242741c5c45d9dad344d4f586d2053a029266985206192782022-10-04 3:25:3164 days 20 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0x7c0758b84d1314f4247ef60ae42a44c114f609c9a1c6c8f10fbb6eb2aec0be90205772002022-10-03 3:15:1365 days 21 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0xcb2d8c7ba2b8ea166face5473f696f8efc31e030c4f86bf344ae287cb69ce7f8205770112022-10-03 3:08:3565 days 21 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0xddefab2fb6e3db2bc6115c5d8b65e4902f4d79e6867cb0e32716b60e0f5b25aa204234252022-09-29 11:02:2469 days 13 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0x026678f86095ab5160a61b755e6b1e28f13d92a5de03c50f06a9dc30d87dc7f9204193022022-09-29 8:41:2069 days 15 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0x4020f79d2d76d179ef4a78368855253eed55f68ebfa0a2dc2dcb187301885a4f204190482022-09-29 8:32:4069 days 15 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0x5e648a3101428359d0aff80fc00cd04a544c7cafd4ce6829fce5a4b6fbda748e204189672022-09-29 8:29:5769 days 15 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0xb4f4c5725ee48e7ac6037de048c5a937e5f9aff47a9bc8b25c7bee32dc317d29204183922022-09-29 8:10:1269 days 16 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0x212205e73789f0a3344fd89e66bfb93f8d74faba7df4370db8a0444075ef0fff204173162022-09-29 7:33:2969 days 16 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0x292a33c8678a627554bfba1ebeebfa2b385efba1ec163a7cefc844ce03ea84da204172532022-09-29 7:31:1869 days 16 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0x02fb554971661c600a71206f8dc8632d0c389cd05ebec4b9812a9d6ca3561963204164832022-09-29 7:04:5869 days 17 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0xa5f8219a25e1e62e6f821e09f7331d518538dc781bcb8b7af5de2015ec35ac06204100672022-09-29 3:25:1069 days 20 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0x6ecd20781cb4351a23f23ac9ca6c33b7dd89ec9b4208bff2b8a31079460f7cfc203748352022-09-28 7:16:5770 days 17 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
0x393eaa2e999f0455f7a5186e7015f2fac6d361279467e520506a2d9d64e60905203735302022-09-28 6:32:2570 days 17 hrs ago 0x403b166e2f74fc2867abe9c43aa0d383d6a11abf0x9a1e1e55b22c158ba507f00c2ef50423df805c7412.5 AVAX
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Ambush

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 15 : Ambush.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/interfaces/IERC2981.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";

contract OwnableDelegateProxy {}

contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

abstract contract ContextMixin {
    function msgSender() internal view returns (address payable sender) {
        if (msg.sender == address(this)) {
            bytes memory array = msg.data;
            uint256 index = msg.data.length;
            assembly {
                // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.
                sender := and(
                    mload(add(array, index)),
                    0xffffffffffffffffffffffffffffffffffffffff
                )
            }
        } else {
            sender = payable(msg.sender);
        }
        return sender;
    }
}

contract Ambush is ERC1155, IERC2981, Ownable, Pausable, ContextMixin, ReentrancyGuard {
    string public name = "Ambush";
    string public symbol = "ABS";

    uint256 public price;
    uint256 public royaltyPercent;
    string private baseURI;
    uint8[] private supplies;
    uint256 public maxSupply;
    uint256 private currentTokenId;
    uint256 private maxPerWalletPresale;
    uint256 private maxPerWalletGeneral;
    uint8 private isPresale;
    string public contractURL;
    bytes32 public merkleRoot;
    address proxyRegistryAddress;
    mapping(address => uint256) private _mintedInPresale;
    mapping(address => uint256) private _mintedInGeneral;
    address private primaryRecipient;
    address private secondaryRecipient;
    
    constructor(uint256 _price, string memory _baseURI) ERC1155(string(abi.encodePacked(_baseURI, "{id}"))) {
        price = _price;
        royaltyPercent = 1000;
        maxSupply = 2023;
        supplies = new uint8[](maxSupply);
        for (uint256 i = 0; i < maxSupply; i++) {
            supplies[i] = 0;
        }
        baseURI = _baseURI;
        currentTokenId = 0;

        maxPerWalletPresale = 1;
        maxPerWalletGeneral = 2;
        isPresale = 1;

        primaryRecipient = 0xc810792E7A896EE258FE22edbfde651c789e0ff4;
        secondaryRecipient = 0x04ae1F1aDc0eFdf0664F92FFD385982cf16E4e08;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////// Owner Functions ///////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner {
        merkleRoot = _merkleRoot;
    }

    function setMaxPerWallet(uint256 _maxForPresale, uint256 _maxForGeneral) public onlyOwner {
        maxPerWalletPresale = _maxForPresale;
        maxPerWalletGeneral = _maxForGeneral;
    }

    function setPrice(uint256 _price) public onlyOwner {
        price = _price;
    }

    function setPrimaryRecipient(address _recipient) external onlyOwner {
        require(_recipient != address(0), "New recipient is the zero address.");

        primaryRecipient = _recipient;
    }

    function setSecondaryRecipient(address _recipient) external onlyOwner {
        require(_recipient != address(0), "New recipient is the zero address.");

        secondaryRecipient = _recipient;
    }

    function setRoyaltyPercent(uint256 _percent) external onlyOwner {
        royaltyPercent = _percent;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }

    function setIsPresale(uint8 _value) public onlyOwner {
        isPresale = _value;
    }

    function setContractURI(string memory _contractURL) public onlyOwner {
        contractURL = _contractURL;
    }

    function airdrop(address _receiver) public onlyOwner {
        require(currentTokenId + 23 <= supplies.length, "NFT is sold out.");

        for (uint256 i = 0; i < 23; i++) {
            require(supplies[currentTokenId] == 0, "NFT is already minted.");
            _mint(_receiver, currentTokenId, 1, "");

            supplies[currentTokenId] += 1;
            currentTokenId += 1;
        }
    }

    function setProxyAddress(address _proxyAddress) public onlyOwner {
        proxyRegistryAddress = _proxyAddress;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////// View Functions ///////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    function isOnAllowlist(bytes32[] memory _proof, address _claimer) public view returns (bool) {
        bytes32 leaf = keccak256(abi.encodePacked(_claimer));
        return MerkleProof.verify(_proof, merkleRoot, leaf);
    }

    function isInPresale() public view returns (uint8) {
        return isPresale;
    }

    function mintedBalanceOf(address _address, uint8 _isPresale) public view returns (uint256) {
        if (_isPresale == 1) {
            return _mintedInPresale[_address];
        }
        return _mintedInGeneral[_address];
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////// Mint Functions ///////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    function mintPresale(bytes32[] memory _proof) external payable {
        require(isPresale == 1, "It is general sale now.");
        require(isOnAllowlist(_proof, _msgSender()), "You are not on the allow list.");
        require(currentTokenId + 1 <= supplies.length, "NFT is sold out.");
        require(supplies[currentTokenId] == 0, "NFT is already minted.");
        require(_mintedInPresale[_msgSender()] + 1 <= maxPerWalletPresale, "You can not mint anymore.");
        require(msg.value >= price, "Not enough to pay for that");

        payable(primaryRecipient).transfer(msg.value);

        _mint(msg.sender, currentTokenId, 1, "");

        supplies[currentTokenId] += 1;
        currentTokenId += 1;
        _mintedInPresale[_msgSender()] = _mintedInPresale[_msgSender()] + 1;
    }

    function mintGeneral() external payable {
        require(isPresale == 0, "It is presale now.");
        require(currentTokenId + 1 <= supplies.length, "NFT is sold out.");
        require(supplies[currentTokenId] == 0, "NFT is already minted.");
        require(_mintedInGeneral[_msgSender()] + 1 <= maxPerWalletGeneral, "You can not mint anymore.");
        require(msg.value >= price, "Not enough to pay for that");

        payable(primaryRecipient).transfer(msg.value);

        _mint(msg.sender, currentTokenId, 1, "");

        supplies[currentTokenId] += 1;
        currentTokenId += 1;
        _mintedInGeneral[_msgSender()] = _mintedInGeneral[_msgSender()] + 1;
    }


    //////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////// Opensea Functions ///////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    function totalSupply() public view returns(uint256) {
        return currentTokenId;
    }

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

    function uri(uint256 _tokenId) override public view returns (string memory) {
        require(_tokenId <= supplies.length - 1, "NFT does not exist");
        return baseURI;
    }

    function isApprovedForAll(address _owner, address _operator) public view override returns (bool isOperator) {
        ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(_owner)) == _operator) {
            return true;
        }

        return super.isApprovedForAll(_owner, _operator);
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////// Royalty Functions ///////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal whenNotPaused override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }
    
    function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view override returns (address receiver, uint256 royaltyAmount) {
        return (secondaryRecipient, (_salePrice * royaltyPercent) / 10000);
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155, IERC165) returns (bool) {
        return (
            interfaceId == type(IERC2981).interfaceId ||
            super.supportsInterface(interfaceId)
        );
    }

    function _msgSender() internal override view returns (address) {
        return ContextMixin.msgSender();
    }
}

File 2 of 15 : ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./extensions/IERC1155MetadataURI.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/introspection/ERC165.sol";

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

File 3 of 15 : IERC2981.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol)

pragma solidity ^0.8.0;

import "../utils/introspection/IERC165.sol";

/**
 * @dev Interface for the NFT Royalty Standard.
 *
 * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
 * support for royalty payments across all NFT marketplaces and ecosystem participants.
 *
 * _Available since v4.5._
 */
interface IERC2981 is IERC165 {
    /**
     * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
     * exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
     */
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

File 5 of 15 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

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

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

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

    bool private _paused;

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

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

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

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

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

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

File 6 of 15 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

        _;

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

File 8 of 15 : MerkleProof.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

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

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

File 9 of 15 : IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

File 10 of 15 : IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

File 11 of 15 : IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

import "../IERC1155.sol";

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

File 12 of 15 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    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;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    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);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    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);
            }
        }
    }
}

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

pragma solidity ^0.8.0;

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

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

File 14 of 15 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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

pragma solidity ^0.8.0;

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

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

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","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":"contractURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isInPresale","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"},{"internalType":"address","name":"_claimer","type":"address"}],"name":"isOnAllowlist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintGeneral","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint8","name":"_isPresale","type":"uint8"}],"name":"mintedBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyPercent","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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURL","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_value","type":"uint8"}],"name":"setIsPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxForPresale","type":"uint256"},{"internalType":"uint256","name":"_maxForGeneral","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"setPrimaryRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxyAddress","type":"address"}],"name":"setProxyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"setRoyaltyPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"setSecondaryRecipient","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60c06040526006608081905265082dac4eae6d60d31b60a0908152620000299160059190620002f3565b506040805180820190915260038082526241425360e81b60209092019182526200005691600691620002f3565b503480156200006457600080fd5b506040516200373138038062003731833981016040819052620000879162000485565b806040516020016200009a91906200054a565b60408051601f19818403018152919052620000b5816200020d565b50620000ca620000c462000226565b62000242565b6003805460ff60a01b19169055600160045560078290556103e86008556107e7600b8190556040805182815261fd008101909152906020820161fce080368337505081516200012192600a92506020019062000382565b5060005b600b5481101562000188576000600a828154811062000148576200014862000574565b90600052602060002090602091828204019190066101000a81548160ff021916908360ff16021790555080806200017f906200058a565b91505062000125565b5080516200019e906009906020840190620002f3565b50506000600c55506001600d8190556002600e55600f805460ff19169091179055601580546001600160a01b031990811673c810792e7a896ee258fe22edbfde651c789e0ff417909155601680549091167304ae1f1adc0efdf0664f92ffd385982cf16e4e08179055620005f1565b805162000222906002906020840190620002f3565b5050565b60006200023d6200029460201b62001ae81760201c565b905090565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600033301415620002ed57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b03169150620002f09050565b50335b90565b8280546200030190620005b4565b90600052602060002090601f01602090048101928262000325576000855562000370565b82601f106200034057805160ff191683800117855562000370565b8280016001018555821562000370579182015b828111156200037057825182559160200191906001019062000353565b506200037e92915062000425565b5090565b82805482825590600052602060002090601f01602090048101928215620003705791602002820160005b83821115620003ec57835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302620003ac565b80156200041b5782816101000a81549060ff0219169055600101602081600001049283019260010302620003ec565b50506200037e9291505b5b808211156200037e576000815560010162000426565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200046f57818101518382015260200162000455565b838111156200047f576000848401525b50505050565b600080604083850312156200049957600080fd5b825160208401519092506001600160401b0380821115620004b957600080fd5b818501915085601f830112620004ce57600080fd5b815181811115620004e357620004e36200043c565b604051601f8201601f19908116603f011681019083821181831017156200050e576200050e6200043c565b816040528281528860208487010111156200052857600080fd5b6200053b83602083016020880162000452565b80955050505050509250929050565b600082516200055e81846020870162000452565b637b69647d60e01b920191825250600401919050565b634e487b7160e01b600052603260045260246000fd5b6000600019821415620005ad57634e487b7160e01b600052601160045260246000fd5b5060010190565b600181811c90821680620005c957607f821691505b60208210811415620005eb57634e487b7160e01b600052602260045260246000fd5b50919050565b61313080620006016000396000f3fe60806040526004361061023a5760003560e01c80637cfe550c1161012e578063a22cb465116100ab578063d5abeb011161006f578063d5abeb0114610676578063e8a3d4851461068c578063e985e9c5146106a1578063f242432a146106c1578063f2fde38b146106e157600080fd5b8063a22cb465146105d4578063a8c62360146105f4578063b26fbbfa14610614578063bc65097914610634578063d4cdeb3c1461065457600080fd5b8063938e3d7b116100f2578063938e3d7b1461055357806395d89b41146105735780639a4fc640146105885780639f67756d146105a8578063a035b1fe146105be57600080fd5b80637cfe550c146104c35780637d60157b146104e35780638456cb59146104f65780638da5cb5b1461050b57806391b7f5ed1461053357600080fd5b80633f4ba83a116101bc57806356ad15f61161018057806356ad15f61461042f57806357ab0cae1461044f5780635c975abb1461046f578063715018a61461048e5780637cb64759146104a357600080fd5b80633f4ba83a14610398578063452c1b89146103ad57806346a7dadc146103c25780634e1273f4146103e257806355f804b31461040f57600080fd5b806321860a051161020357806321860a05146102f95780632a55205a1461031b5780632eb2c2d61461035a5780632eb4a7ab1461037a57806339f53be81461039057600080fd5b8062fdd58e1461023f57806301ffc9a71461027257806306fdde03146102a25780630e89341c146102c457806318160ddd146102e4575b600080fd5b34801561024b57600080fd5b5061025f61025a36600461264e565b610701565b6040519081526020015b60405180910390f35b34801561027e57600080fd5b5061029261028d366004612690565b61079b565b6040519015158152602001610269565b3480156102ae57600080fd5b506102b76107c0565b6040516102699190612701565b3480156102d057600080fd5b506102b76102df366004612714565b61084e565b3480156102f057600080fd5b50600c5461025f565b34801561030557600080fd5b5061031961031436600461272d565b610936565b005b34801561032757600080fd5b5061033b61033636600461274a565b610ab5565b604080516001600160a01b039093168352602083019190915201610269565b34801561036657600080fd5b506103196103753660046128c2565b610aef565b34801561038657600080fd5b5061025f60115481565b610319610b98565b3480156103a457600080fd5b50610319610e57565b3480156103b957600080fd5b506102b7610eaa565b3480156103ce57600080fd5b506103196103dd36600461272d565b610eb7565b3480156103ee57600080fd5b506104026103fd366004612970565b610f22565b6040516102699190612a78565b34801561041b57600080fd5b5061031961042a366004612a8b565b61104c565b34801561043b57600080fd5b5061031961044a36600461274a565b6110a8565b34801561045b57600080fd5b5061031961046a36600461272d565b6110fc565b34801561047b57600080fd5b50600354600160a01b900460ff16610292565b34801561049a57600080fd5b5061031961118d565b3480156104af57600080fd5b506103196104be366004612714565b6111e0565b3480156104cf57600080fd5b506102926104de366004612ad4565b61122e565b6103196104f1366004612b26565b61127f565b34801561050257600080fd5b506103196115a4565b34801561051757600080fd5b506003546040516001600160a01b039091168152602001610269565b34801561053f57600080fd5b5061031961054e366004612714565b6115f5565b34801561055f57600080fd5b5061031961056e366004612a8b565b611643565b34801561057f57600080fd5b506102b761169f565b34801561059457600080fd5b506103196105a3366004612714565b6116ac565b3480156105b457600080fd5b5061025f60085481565b3480156105ca57600080fd5b5061025f60075481565b3480156105e057600080fd5b506103196105ef366004612b5b565b6116fa565b34801561060057600080fd5b5061025f61060f366004612ba4565b61170c565b34801561062057600080fd5b5061031961062f36600461272d565b611756565b34801561064057600080fd5b5061031961064f366004612bd9565b6117e7565b34801561066057600080fd5b50600f5460405160ff9091168152602001610269565b34801561068257600080fd5b5061025f600b5481565b34801561069857600080fd5b506102b7611846565b3480156106ad57600080fd5b506102926106bc366004612bf4565b6118d8565b3480156106cd57600080fd5b506103196106dc366004612c22565b611995565b3480156106ed57600080fd5b506103196106fc36600461272d565b611a2e565b60006001600160a01b0383166107725760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b0319821663152a902d60e11b1480610795575061079582611b45565b600580546107cd90612c8b565b80601f01602080910402602001604051908101604052809291908181526020018280546107f990612c8b565b80156108465780601f1061081b57610100808354040283529160200191610846565b820191906000526020600020905b81548152906001019060200180831161082957829003601f168201915b505050505081565b600a5460609061086090600190612cdc565b8211156108a45760405162461bcd60e51b815260206004820152601260248201527113919508191bd95cc81b9bdd08195e1a5cdd60721b6044820152606401610769565b600980546108b190612c8b565b80601f01602080910402602001604051908101604052809291908181526020018280546108dd90612c8b565b801561092a5780601f106108ff5761010080835404028352916020019161092a565b820191906000526020600020905b81548152906001019060200180831161090d57829003601f168201915b50505050509050919050565b61093e611b95565b6001600160a01b03166109596003546001600160a01b031690565b6001600160a01b03161461097f5760405162461bcd60e51b815260040161076990612cf3565b600a54600c54610990906017612d28565b11156109ae5760405162461bcd60e51b815260040161076990612d40565b60005b6017811015610ab157600a600c54815481106109cf576109cf612d6a565b60009182526020918290209181049091015460ff601f9092166101000a90041615610a0c5760405162461bcd60e51b815260040161076990612d80565b610a2a82600c54600160405180602001604052806000815250611ba4565b6001600a600c5481548110610a4157610a41612d6a565b90600052602060002090602091828204019190068282829054906101000a900460ff16610a6e9190612db0565b92506101000a81548160ff021916908360ff1602179055506001600c6000828254610a999190612d28565b90915550819050610aa981612dd5565b9150506109b1565b5050565b60165460085460009182916001600160a01b039091169061271090610ada9086612df0565b610ae49190612e0f565b915091509250929050565b610af7611b95565b6001600160a01b0316856001600160a01b03161480610b1d5750610b1d856106bc611b95565b610b845760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610769565b610b918585858585611cd2565b5050505050565b600f5460ff1615610be05760405162461bcd60e51b815260206004820152601260248201527124ba1034b990383932b9b0b632903737bb9760711b6044820152606401610769565b600a54600c54610bf1906001612d28565b1115610c0f5760405162461bcd60e51b815260040161076990612d40565b600a600c5481548110610c2457610c24612d6a565b60009182526020918290209181049091015460ff601f9092166101000a90041615610c615760405162461bcd60e51b815260040161076990612d80565b600e5460146000610c70611b95565b6001600160a01b03168152602081019190915260400160002054610c95906001612d28565b1115610cdf5760405162461bcd60e51b81526020600482015260196024820152782cb7ba9031b0b7103737ba1036b4b73a1030b73cb6b7b9329760391b6044820152606401610769565b600754341015610d315760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f75676820746f2070617920666f7220746861740000000000006044820152606401610769565b6015546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015610d6a573d6000803e3d6000fd5b50610d8933600c54600160405180602001604052806000815250611ba4565b6001600a600c5481548110610da057610da0612d6a565b90600052602060002090602091828204019190068282829054906101000a900460ff16610dcd9190612db0565b92506101000a81548160ff021916908360ff1602179055506001600c6000828254610df89190612d28565b90915550601490506000610e0a611b95565b6001600160a01b03168152602081019190915260400160002054610e2f906001612d28565b60146000610e3b611b95565b6001600160a01b03168152602081019190915260400160002055565b610e5f611b95565b6001600160a01b0316610e7a6003546001600160a01b031690565b6001600160a01b031614610ea05760405162461bcd60e51b815260040161076990612cf3565b610ea8611ec8565b565b601080546107cd90612c8b565b610ebf611b95565b6001600160a01b0316610eda6003546001600160a01b031690565b6001600160a01b031614610f005760405162461bcd60e51b815260040161076990612cf3565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b60608151835114610f875760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610769565b6000835167ffffffffffffffff811115610fa357610fa361276c565b604051908082528060200260200182016040528015610fcc578160200160208202803683370190505b50905060005b845181101561104457611017858281518110610ff057610ff0612d6a565b602002602001015185838151811061100a5761100a612d6a565b6020026020010151610701565b82828151811061102957611029612d6a565b602090810291909101015261103d81612dd5565b9050610fd2565b509392505050565b611054611b95565b6001600160a01b031661106f6003546001600160a01b031690565b6001600160a01b0316146110955760405162461bcd60e51b815260040161076990612cf3565b8051610ab19060099060208401906125a0565b6110b0611b95565b6001600160a01b03166110cb6003546001600160a01b031690565b6001600160a01b0316146110f15760405162461bcd60e51b815260040161076990612cf3565b600d91909155600e55565b611104611b95565b6001600160a01b031661111f6003546001600160a01b031690565b6001600160a01b0316146111455760405162461bcd60e51b815260040161076990612cf3565b6001600160a01b03811661116b5760405162461bcd60e51b815260040161076990612e31565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b611195611b95565b6001600160a01b03166111b06003546001600160a01b031690565b6001600160a01b0316146111d65760405162461bcd60e51b815260040161076990612cf3565b610ea86000611f6b565b6111e8611b95565b6001600160a01b03166112036003546001600160a01b031690565b6001600160a01b0316146112295760405162461bcd60e51b815260040161076990612cf3565b601155565b6040516bffffffffffffffffffffffff19606083901b16602082015260009081906034016040516020818303038152906040528051906020012090506112778460115483611fbd565b949350505050565b600f5460ff166001146112d45760405162461bcd60e51b815260206004820152601760248201527f49742069732067656e6572616c2073616c65206e6f772e0000000000000000006044820152606401610769565b6112e0816104de611b95565b61132c5760405162461bcd60e51b815260206004820152601e60248201527f596f7520617265206e6f74206f6e2074686520616c6c6f77206c6973742e00006044820152606401610769565b600a54600c5461133d906001612d28565b111561135b5760405162461bcd60e51b815260040161076990612d40565b600a600c548154811061137057611370612d6a565b60009182526020918290209181049091015460ff601f9092166101000a900416156113ad5760405162461bcd60e51b815260040161076990612d80565b600d54601360006113bc611b95565b6001600160a01b031681526020810191909152604001600020546113e1906001612d28565b111561142b5760405162461bcd60e51b81526020600482015260196024820152782cb7ba9031b0b7103737ba1036b4b73a1030b73cb6b7b9329760391b6044820152606401610769565b60075434101561147d5760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f75676820746f2070617920666f7220746861740000000000006044820152606401610769565b6015546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156114b6573d6000803e3d6000fd5b506114d533600c54600160405180602001604052806000815250611ba4565b6001600a600c54815481106114ec576114ec612d6a565b90600052602060002090602091828204019190068282829054906101000a900460ff166115199190612db0565b92506101000a81548160ff021916908360ff1602179055506001600c60008282546115449190612d28565b90915550601390506000611556611b95565b6001600160a01b0316815260208101919091526040016000205461157b906001612d28565b60136000611587611b95565b6001600160a01b0316815260208101919091526040016000205550565b6115ac611b95565b6001600160a01b03166115c76003546001600160a01b031690565b6001600160a01b0316146115ed5760405162461bcd60e51b815260040161076990612cf3565b610ea8611fd3565b6115fd611b95565b6001600160a01b03166116186003546001600160a01b031690565b6001600160a01b03161461163e5760405162461bcd60e51b815260040161076990612cf3565b600755565b61164b611b95565b6001600160a01b03166116666003546001600160a01b031690565b6001600160a01b03161461168c5760405162461bcd60e51b815260040161076990612cf3565b8051610ab19060109060208401906125a0565b600680546107cd90612c8b565b6116b4611b95565b6001600160a01b03166116cf6003546001600160a01b031690565b6001600160a01b0316146116f55760405162461bcd60e51b815260040161076990612cf3565b600855565b610ab1611705611b95565b838361205c565b60008160ff166001141561173957506001600160a01b038216600090815260136020526040902054610795565b50506001600160a01b031660009081526014602052604090205490565b61175e611b95565b6001600160a01b03166117796003546001600160a01b031690565b6001600160a01b03161461179f5760405162461bcd60e51b815260040161076990612cf3565b6001600160a01b0381166117c55760405162461bcd60e51b815260040161076990612e31565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6117ef611b95565b6001600160a01b031661180a6003546001600160a01b031690565b6001600160a01b0316146118305760405162461bcd60e51b815260040161076990612cf3565b600f805460ff191660ff92909216919091179055565b60606010805461185590612c8b565b80601f016020809104026020016040519081016040528092919081815260200182805461188190612c8b565b80156118ce5780601f106118a3576101008083540402835291602001916118ce565b820191906000526020600020905b8154815290600101906020018083116118b157829003601f168201915b5050505050905090565b60125460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c455279190602401602060405180830381865afa15801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e9190612e73565b6001600160a01b03161415611967576001915050610795565b6001600160a01b0380851660009081526001602090815260408083209387168352929052205460ff16611277565b61199d611b95565b6001600160a01b0316856001600160a01b031614806119c357506119c3856106bc611b95565b611a215760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610769565b610b91858585858561213d565b611a36611b95565b6001600160a01b0316611a516003546001600160a01b031690565b6001600160a01b031614611a775760405162461bcd60e51b815260040161076990612cf3565b6001600160a01b038116611adc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610769565b611ae581611f6b565b50565b600033301415611b3f57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b03169150611b429050565b50335b90565b60006001600160e01b03198216636cdb3d1360e11b1480611b7657506001600160e01b031982166303a24d0760e21b145b8061079557506301ffc9a760e01b6001600160e01b0319831614610795565b6000611b9f611ae8565b905090565b6001600160a01b038416611c045760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610769565b6000611c0e611b95565b90506000611c1b85612280565b90506000611c2885612280565b9050611c39836000898585896122cb565b6000868152602081815260408083206001600160a01b038b16845290915281208054879290611c69908490612d28565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611cc98360008989898961231d565b50505050505050565b8151835114611d345760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610769565b6001600160a01b038416611d5a5760405162461bcd60e51b815260040161076990612e90565b6000611d64611b95565b9050611d748187878787876122cb565b60005b8451811015611e5a576000858281518110611d9457611d94612d6a565b602002602001015190506000858381518110611db257611db2612d6a565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015611e025760405162461bcd60e51b815260040161076990612ed5565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290611e3f908490612d28565b9250508190555050505080611e5390612dd5565b9050611d77565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611eaa929190612f1f565b60405180910390a4611ec0818787878787612479565b505050505050565b600354600160a01b900460ff16611f185760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610769565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611f4e611b95565b6040516001600160a01b03909116815260200160405180910390a1565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600082611fca8584612534565b14949350505050565b600354600160a01b900460ff16156120205760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610769565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611f4e611b95565b816001600160a01b0316836001600160a01b031614156120d05760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610769565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166121635760405162461bcd60e51b815260040161076990612e90565b600061216d611b95565b9050600061217a85612280565b9050600061218785612280565b90506121978389898585896122cb565b6000868152602081815260408083206001600160a01b038c168452909152902054858110156121d85760405162461bcd60e51b815260040161076990612ed5565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290612215908490612d28565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612275848a8a8a8a8a61231d565b505050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106122ba576122ba612d6a565b602090810291909101015292915050565b600354600160a01b900460ff16156123185760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610769565b611ec0565b6001600160a01b0384163b15611ec05760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906123619089908990889088908890600401612f4d565b6020604051808303816000875af192505050801561239c575060408051601f3d908101601f1916820190925261239991810190612f92565b60015b612449576123a8612faf565b806308c379a014156123e257506123bd612fca565b806123c857506123e4565b8060405162461bcd60e51b81526004016107699190612701565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610769565b6001600160e01b0319811663f23a6e6160e01b14611cc95760405162461bcd60e51b815260040161076990613054565b6001600160a01b0384163b15611ec05760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906124bd908990899088908890889060040161309c565b6020604051808303816000875af19250505080156124f8575060408051601f3d908101601f191682019092526124f591810190612f92565b60015b612504576123a8612faf565b6001600160e01b0319811663bc197c8160e01b14611cc95760405162461bcd60e51b815260040161076990613054565b600081815b845181101561104457600085828151811061255657612556612d6a565b6020026020010151905080831161257c576000838152602082905260409020925061258d565b600081815260208490526040902092505b508061259881612dd5565b915050612539565b8280546125ac90612c8b565b90600052602060002090601f0160209004810192826125ce5760008555612614565b82601f106125e757805160ff1916838001178555612614565b82800160010185558215612614579182015b828111156126145782518255916020019190600101906125f9565b50612620929150612624565b5090565b5b808211156126205760008155600101612625565b6001600160a01b0381168114611ae557600080fd5b6000806040838503121561266157600080fd5b823561266c81612639565b946020939093013593505050565b6001600160e01b031981168114611ae557600080fd5b6000602082840312156126a257600080fd5b81356126ad8161267a565b9392505050565b6000815180845260005b818110156126da576020818501810151868301820152016126be565b818111156126ec576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006126ad60208301846126b4565b60006020828403121561272657600080fd5b5035919050565b60006020828403121561273f57600080fd5b81356126ad81612639565b6000806040838503121561275d57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff811182821017156127a8576127a861276c565b6040525050565b600067ffffffffffffffff8211156127c9576127c961276c565b5060051b60200190565b600082601f8301126127e457600080fd5b813560206127f1826127af565b6040516127fe8282612782565b83815260059390931b850182019282810191508684111561281e57600080fd5b8286015b848110156128395780358352918301918301612822565b509695505050505050565b600067ffffffffffffffff83111561285e5761285e61276c565b604051612875601f8501601f191660200182612782565b80915083815284848401111561288a57600080fd5b83836020830137600060208583010152509392505050565b600082601f8301126128b357600080fd5b6126ad83833560208501612844565b600080600080600060a086880312156128da57600080fd5b85356128e581612639565b945060208601356128f581612639565b9350604086013567ffffffffffffffff8082111561291257600080fd5b61291e89838a016127d3565b9450606088013591508082111561293457600080fd5b61294089838a016127d3565b9350608088013591508082111561295657600080fd5b50612963888289016128a2565b9150509295509295909350565b6000806040838503121561298357600080fd5b823567ffffffffffffffff8082111561299b57600080fd5b818501915085601f8301126129af57600080fd5b813560206129bc826127af565b6040516129c98282612782565b83815260059390931b85018201928281019150898411156129e957600080fd5b948201945b83861015612a10578535612a0181612639565b825294820194908201906129ee565b96505086013592505080821115612a2657600080fd5b50612a33858286016127d3565b9150509250929050565b600081518084526020808501945080840160005b83811015612a6d57815187529582019590820190600101612a51565b509495945050505050565b6020815260006126ad6020830184612a3d565b600060208284031215612a9d57600080fd5b813567ffffffffffffffff811115612ab457600080fd5b8201601f81018413612ac557600080fd5b61127784823560208401612844565b60008060408385031215612ae757600080fd5b823567ffffffffffffffff811115612afe57600080fd5b612b0a858286016127d3565b9250506020830135612b1b81612639565b809150509250929050565b600060208284031215612b3857600080fd5b813567ffffffffffffffff811115612b4f57600080fd5b611277848285016127d3565b60008060408385031215612b6e57600080fd5b8235612b7981612639565b915060208301358015158114612b1b57600080fd5b803560ff81168114612b9f57600080fd5b919050565b60008060408385031215612bb757600080fd5b8235612bc281612639565b9150612bd060208401612b8e565b90509250929050565b600060208284031215612beb57600080fd5b6126ad82612b8e565b60008060408385031215612c0757600080fd5b8235612c1281612639565b91506020830135612b1b81612639565b600080600080600060a08688031215612c3a57600080fd5b8535612c4581612639565b94506020860135612c5581612639565b93506040860135925060608601359150608086013567ffffffffffffffff811115612c7f57600080fd5b612963888289016128a2565b600181811c90821680612c9f57607f821691505b60208210811415612cc057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015612cee57612cee612cc6565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115612d3b57612d3b612cc6565b500190565b60208082526010908201526f27232a1034b99039b7b6321037baba1760811b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526016908201527527232a1034b99030b63932b0b23c9036b4b73a32b21760511b604082015260600190565b600060ff821660ff84168060ff03821115612dcd57612dcd612cc6565b019392505050565b6000600019821415612de957612de9612cc6565b5060010190565b6000816000190483118215151615612e0a57612e0a612cc6565b500290565b600082612e2c57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526022908201527f4e657720726563697069656e7420697320746865207a65726f20616464726573604082015261399760f11b606082015260800190565b600060208284031215612e8557600080fd5b81516126ad81612639565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000612f326040830185612a3d565b8281036020840152612f448185612a3d565b95945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612f87908301846126b4565b979650505050505050565b600060208284031215612fa457600080fd5b81516126ad8161267a565b600060033d1115611b425760046000803e5060005160e01c90565b600060443d1015612fd85790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561300857505050505090565b82850191508151818111156130205750505050505090565b843d870101602082850101111561303a5750505050505090565b61304960208286010187612782565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a0604082018190526000906130c890830186612a3d565b82810360608401526130da8186612a3d565b905082810360808401526130ee81856126b4565b9897505050505050505056fea264697066735822122070abd3f6b02c5752c6079a3f3cd046620029611d00ecbcb5792316f02d536ef164736f6c634300080a003300000000000000000000000000000000000000000000000000005af3107a40000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004e68747470733a2f2f61332e6d7970696e6174612e636c6f75642f697066732f516d5956324c476561664847735a5342486169626f3576487571366d614a384a6b7644396f683743596d5632376e2f000000000000000000000000000000000000

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

00000000000000000000000000000000000000000000000000005af3107a40000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004e68747470733a2f2f61332e6d7970696e6174612e636c6f75642f697066732f516d5956324c476561664847735a5342486169626f3576487571366d614a384a6b7644396f683743596d5632376e2f000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _price (uint256): 100000000000000
Arg [1] : _baseURI (string): https://a3.mypinata.cloud/ipfs/QmYV2LGeafHGsZSBHaibo5vHuq6maJ8JkvD9oh7CYmV27n/

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000005af3107a4000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 000000000000000000000000000000000000000000000000000000000000004e
Arg [3] : 68747470733a2f2f61332e6d7970696e6174612e636c6f75642f697066732f51
Arg [4] : 6d5956324c476561664847735a5342486169626f3576487571366d614a384a6b
Arg [5] : 7644396f683743596d5632376e2f000000000000000000000000000000000000


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.