Overview ERC721
Total Supply:
30 Transitions

Holders:
33
Profile Summary
Blockchain:
Ethereum (1)

Contract Source Code Verified (Partial Match)
Contract Name:
ERC721LGArtLabCloneable

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 1000000 runs

Created At:
Fri, 14 Jun 2024 08:04:59 GMT
ERC721LGArtLabCloneable.sol
src
clones
ERC721LGArtLabCloneable.sol


Contract ABI
[
  {
    "inputs": [],
    "name": "AlreadyInitialized",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "newMaxSupply",
        "type": "uint256"
      }
    ],
    "name": "CannotExceedMaxSupplyOfUint64",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidConfigInput",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "basisPoints",
        "type": "uint256"
      }
    ],
    "name": "InvalidRoyaltyBasisPoints",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "total",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "maxSupply",
        "type": "uint256"
      }
    ],
    "name": "MintQuantityExceedsMaxSupply",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NewOwnerIsZeroAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotNextOwner",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OnlyAllowedDrop",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OnlyOwner",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ProvenanceHashCannotBeSetAfterMintStarted",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RoyaltyAddressCannotBeZeroAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SignersMismatch",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "URIQueryForNonexistentToken",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address[]",
        "name": "allowedDrop",
        "type": "address[]"
      }
    ],
    "name": "AllowedDropUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "approved",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "ApprovalForAll",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_fromTokenId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_toTokenId",
        "type": "uint256"
      }
    ],
    "name": "BatchMetadataUpdate",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "string",
        "name": "newContractURI",
        "type": "string"
      }
    ],
    "name": "ContractURIUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [],
    "name": "DropTokenDeployed",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint8",
        "name": "version",
        "type": "uint8"
      }
    ],
    "name": "Initialized",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newMaxSupply",
        "type": "uint256"
      }
    ],
    "name": "MaxSupplyUpdated",
    "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": "newPotentialAdministrator",
        "type": "address"
      }
    ],
    "name": "PotentialOwnerUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "projectId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newMaxSupply",
        "type": "uint256"
      }
    ],
    "name": "ProjectMaxSupplyUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "previousHash",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "newHash",
        "type": "bytes32"
      }
    ],
    "name": "ProvenanceHashUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "bps",
        "type": "uint256"
      }
    ],
    "name": "RoyaltyInfoUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "acceptOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "baseURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "cancelOwnershipTransfer",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "contractURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "fromTokenId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "toTokenId",
        "type": "uint256"
      }
    ],
    "name": "emitBatchMetadataUpdate",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getApproved",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "projectId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "minter",
        "type": "address"
      }
    ],
    "name": "getMintStats",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "minterNumMinted",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "currentTotalSupply",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "maxSupplyForProject",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "projectId",
        "type": "uint256"
      }
    ],
    "name": "getProjectInfo",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "totalMinted",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "maxSupply",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "currentTokenIndex",
            "type": "uint256"
          }
        ],
        "internalType": "struct ProjectInfo",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "__name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "__symbol",
        "type": "string"
      },
      {
        "internalType": "address[]",
        "name": "allowedDrop",
        "type": "address[]"
      },
      {
        "internalType": "address",
        "name": "initialOwner",
        "type": "address"
      }
    ],
    "name": "initialize",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "isApprovedForAll",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "maxSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "projectId",
        "type": "uint256"
      }
    ],
    "name": "maxSupplyForProject",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "projectId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "minter",
        "type": "address"
      }
    ],
    "name": "mintDrop",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "dropImpl",
            "type": "address"
          },
          {
            "internalType": "string",
            "name": "baseURI",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "contractURI",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "dropURI",
            "type": "string"
          },
          {
            "internalType": "address",
            "name": "creatorPayoutAddress",
            "type": "address"
          },
          {
            "internalType": "address[]",
            "name": "allowedFeeRecipients",
            "type": "address[]"
          },
          {
            "internalType": "address[]",
            "name": "disallowedFeeRecipients",
            "type": "address[]"
          },
          {
            "internalType": "address[]",
            "name": "allowedPayers",
            "type": "address[]"
          },
          {
            "internalType": "address[]",
            "name": "disallowedPayers",
            "type": "address[]"
          },
          {
            "internalType": "uint256[]",
            "name": "maxSupplies",
            "type": "uint256[]"
          },
          {
            "internalType": "uint256[]",
            "name": "projectIds",
            "type": "uint256[]"
          },
          {
            "components": [
              {
                "internalType": "uint80",
                "name": "mintPrice",
                "type": "uint80"
              },
              {
                "internalType": "uint48",
                "name": "startTime",
                "type": "uint48"
              },
              {
                "internalType": "uint48",
                "name": "endTime",
                "type": "uint48"
              },
              {
                "internalType": "uint16",
                "name": "maxTotalMintableByWallet",
                "type": "uint16"
              },
              {
                "internalType": "uint16",
                "name": "feeBps",
                "type": "uint16"
              },
              {
                "internalType": "bool",
                "name": "restrictFeeRecipients",
                "type": "bool"
              },
              {
                "internalType": "enum PaymentTokenType",
                "name": "paymentToken",
                "type": "uint8"
              }
            ],
            "internalType": "struct PublicDrop[]",
            "name": "publicDrops",
            "type": "tuple[]"
          },
          {
            "internalType": "bytes32",
            "name": "provenanceHash",
            "type": "bytes32"
          },
          {
            "internalType": "address",
            "name": "royaltyReceiver",
            "type": "address"
          },
          {
            "internalType": "uint96",
            "name": "royaltyFraction",
            "type": "uint96"
          }
        ],
        "internalType": "struct ERC721LGArtLabStructsErrorsAndEvents.MultiConfigureStruct",
        "name": "config",
        "type": "tuple"
      }
    ],
    "name": "multiConfigure",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "ownerOf",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "projectId",
        "type": "uint256"
      }
    ],
    "name": "provenanceHash",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "royaltyAddress",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "royaltyBasisPoints",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "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": [
      {
        "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": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "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": "newContractURI",
        "type": "string"
      }
    ],
    "name": "setContractURI",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "newMaxSupply",
        "type": "uint256"
      }
    ],
    "name": "setMaxSupply",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256[]",
        "name": "projectIds",
        "type": "uint256[]"
      },
      {
        "internalType": "uint256[]",
        "name": "newMaxSupplies",
        "type": "uint256[]"
      }
    ],
    "name": "setProjectMaxSupplies",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "projectId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "newMaxSupply",
        "type": "uint256"
      }
    ],
    "name": "setProjectMaxSupply",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "projectId",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "newProvenanceHash",
        "type": "bytes32"
      }
    ],
    "name": "setProvenanceHash",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "royaltyAddress",
            "type": "address"
          },
          {
            "internalType": "uint96",
            "name": "royaltyBps",
            "type": "uint96"
          }
        ],
        "internalType": "struct ILGArtLabDropTokenContractMetadata.RoyaltyInfo",
        "name": "newInfo",
        "type": "tuple"
      }
    ],
    "name": "setRoyaltyInfo",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes4",
        "name": "interfaceId",
        "type": "bytes4"
      }
    ],
    "name": "supportsInterface",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "index",
        "type": "uint256"
      }
    ],
    "name": "tokenByIndex",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "index",
        "type": "uint256"
      }
    ],
    "name": "tokenOfOwnerByIndex",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "tokenURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newPotentialOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address[]",
        "name": "allowedDrop",
        "type": "address[]"
      }
    ],
    "name": "updateAllowedDrop",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "dropImpl",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "feeRecipient",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "allowed",
        "type": "bool"
      }
    ],
    "name": "updateAllowedFeeRecipient",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "dropImpl",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "payoutAddress",
        "type": "address"
      }
    ],
    "name": "updateCreatorPayoutAddress",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "dropImpl",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "projectId",
        "type": "uint256"
      },
      {
        "internalType": "string",
        "name": "dropURI",
        "type": "string"
      }
    ],
    "name": "updateDropURI",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "dropImpl",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "payer",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "allowed",
        "type": "bool"
      }
    ],
    "name": "updatePayer",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "dropImpl",
        "type": "address"
      },
      {
        "internalType": "uint256[]",
        "name": "projectIds",
        "type": "uint256[]"
      },
      {
        "components": [
          {
            "internalType": "uint80",
            "name": "mintPrice",
            "type": "uint80"
          },
          {
            "internalType": "uint48",
            "name": "startTime",
            "type": "uint48"
          },
          {
            "internalType": "uint48",
            "name": "endTime",
            "type": "uint48"
          },
          {
            "internalType": "uint16",
            "name": "maxTotalMintableByWallet",
            "type": "uint16"
          },
          {
            "internalType": "uint16",
            "name": "feeBps",
            "type": "uint16"
          },
          {
            "internalType": "bool",
            "name": "restrictFeeRecipients",
            "type": "bool"
          },
          {
            "internalType": "enum PaymentTokenType",
            "name": "paymentToken",
            "type": "uint8"
          }
        ],
        "internalType": "struct PublicDrop[]",
        "name": "publicDrops",
        "type": "tuple[]"
      }
    ],
    "name": "updatePublicDrops",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
60806040523480156200001157600080fd5b506200001c62000022565b620000a1565b303b15620000425760405162dc149f60e41b815260040160405180910390fd5b6200004d336200004f565b565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6150ea80620000b16000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80636352211e116101b2578063ad2f852a116100f9578063d4956b3b116100a2578063e985e9c51161007c578063e985e9c514610718578063f2fde38b14610761578063fabf596814610774578063fb9cbe22146107a957600080fd5b8063d4956b3b146106f5578063d5abeb0114610708578063e8a3d4851461071057600080fd5b8063c87b56dd116100d3578063c87b56dd146106bc578063cb743ba8146106cf578063cef6d368146106e257600080fd5b8063ad2f852a14610678578063b88d4fde14610696578063c14115c2146106a957600080fd5b80638469775d1161015b57806395d89b411161013557806395d89b411461064a578063a22cb46514610652578063a48301141461066557600080fd5b80638469775d146106065780638da5cb5b14610619578063938e3d7b1461063757600080fd5b806370a082311161018c57806370a08231146105e3578063715018a6146105f657806379ba5097146105fe57600080fd5b80636352211e146105aa57806366251b69146105bd5780636f8b44b0146105d057600080fd5b806323b872dd1161027657806342842e0e1161021f57806348a4c101116101f957806348a4c101146105715780634f6ccce71461058457806355f804b31461059757600080fd5b806342842e0e1461053857806344dae42c1461054b578063481a48ec1461055e57600080fd5b80632f745c59116102505780632f745c59146104e457806335599310146104f757806342260b5d1461050a57600080fd5b806323b872dd1461047f5780632a55205a146104925780632ccde4f6146104d157600080fd5b806317088a63116102d857806318778d0b116102b257806318778d0b14610444578063224c14111461045757806323452b9c1461047757600080fd5b806317088a63146103e057806318160ddd1461040e57806318317fba1461041657600080fd5b8063095ea7b311610309578063095ea7b3146103a55780630e0b4b94146103ba57806310b8c96c146103cd57600080fd5b806301ffc9a71461033057806306fdde0314610358578063081812fc1461036d575b600080fd5b61034361033e36600461401c565b6107bc565b60405190151581526020015b60405180910390f35b610360610864565b60405161034f91906140ae565b61038061037b3660046140c1565b6108f6565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161034f565b6103b86103b33660046140fc565b61092a565b005b6103b86103c8366004614171565b610abb565b6103b86103db366004614212565b610b5a565b6104006103ee3660046140c1565b60009081526011602052604090205490565b60405190815260200161034f565b600954610400565b610429610424366004614272565b610c20565b6040805193845260208401929092529082015260600161034f565b6103b86104523660046142a2565b610c81565b6104006104653660046140c1565b6000908152600e602052604090205490565b6103b861157c565b6103b861048d3660046142de565b6115e2565b6104a56104a036600461431f565b611683565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091520161034f565b6103606104df3660046140c1565b6116ec565b6104006104f23660046140fc565b6116f7565b6103b8610505366004614272565b6117c6565b6012547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16610400565b6103b86105463660046142de565b61193a565b6103b8610559366004614341565b611955565b6103b861056c366004614359565b611ac1565b6103b861057f36600461441c565b611d08565b6104006105923660046140c1565b611da8565b6103b86105a5366004614463565b611e66565b6103806105b83660046140c1565b611e7b565b6103b86105cb3660046144a5565b611f07565b6103b86105de3660046140c1565b611f9d565b6104006105f13660046144d3565b61201f565b6103b86120ed565b6103b8612101565b6103b861061436600461431f565b6121b8565b600b5473ffffffffffffffffffffffffffffffffffffffff16610380565b6103b8610645366004614463565b61225a565b6103606122ad565b6103b86106603660046144f0565b6122bc565b6103b861067336600461431f565b6122c7565b60125473ffffffffffffffffffffffffffffffffffffffff16610380565b6103b86106a4366004614554565b612305565b6103b86106b736600461431f565b6123ad565b6103606106ca3660046140c1565b612442565b6103b86106dd36600461441c565b612585565b6104a56106f03660046140c1565b6125f2565b6103b8610703366004614652565b61265a565b600d54610400565b61036061266c565b6103436107263660046144a5565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260066020908152604080832093909416825291909152205460ff1690565b6103b861076f3660046144d3565b61267b565b6107876107823660046140c1565b612743565b604080518251815260208084015190820152918101519082015260600161034f565b6103b86107b7366004614688565b6127a0565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe99f93e700000000000000000000000000000000000000000000000000000000148061084f57507fffffffff0000000000000000000000000000000000000000000000000000000082167f808a316f00000000000000000000000000000000000000000000000000000000145b8061085e575061085e82612842565b92915050565b60606001805461087390614738565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90614738565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b5050505050905090565b6000610901826128e4565b5060009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061093582611e7b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff82161480610a205750610a208133610726565b610aac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016109ee565b610ab6838361296f565b505050565b610ac3612a0f565b610acc84612a9f565b6040517f684be2fb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063684be2fb90610b22908690869086906004016147ce565b600060405180830381600087803b158015610b3c57600080fd5b505af1158015610b50573d6000803e3d6000fd5b5050505050505050565b610b62612a0f565b60005b60ff8116841115610c19573063c14115c2868660ff8516818110610b8b57610b8b6147f1565b9050602002013585858560ff16818110610ba757610ba76147f1565b905060200201356040518363ffffffff1660e01b8152600401610bd4929190918252602082015260400190565b600060405180830381600087803b158015610bee57600080fd5b505af1158015610c02573d6000803e3d6000fd5b505050508080610c119061484f565b915050610b65565b5050505050565b600082815260476020908152604080832073ffffffffffffffffffffffffffffffffffffffff851684529091528120549080610c688560009081526013602052604090205490565b6000958652600e60205260409095205492959293505050565b610c89612afe565b610c9761012082018261486e565b9050610ca761014083018361486e565b9050141580610cd45750610cbf6101608201826148d6565b9050610ccf61014083018361486e565b905014155b15610d0b576040517f55b7144600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d1961012082018261486e565b159050610d9457306310b8c96c610d3461014084018461486e565b610d4261012086018661486e565b6040518563ffffffff1660e01b8152600401610d619493929190614988565b600060405180830381600087803b158015610d7b57600080fd5b505af1158015610d8f573d6000803e3d6000fd5b505050505b610da160208201826149ba565b159050610e0b57306355f804b3610dbb60208401846149ba565b6040518363ffffffff1660e01b8152600401610dd8929190614a1f565b600060405180830381600087803b158015610df257600080fd5b505af1158015610e06573d6000803e3d6000fd5b505050505b610e1860408201826149ba565b159050610e82573063938e3d7b610e3260408401846149ba565b6040518363ffffffff1660e01b8152600401610e4f929190614a1f565b600060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b505050505b610e906101608201826148d6565b159050610f19573063fb9cbe22610eaa60208401846144d3565b610eb861014085018561486e565b610ec66101608701876148d6565b6040518663ffffffff1660e01b8152600401610ee6959493929190614b82565b600060405180830381600087803b158015610f0057600080fd5b505af1158015610f14573d6000803e3d6000fd5b505050505b6000610f2b60a08301608084016144d3565b73ffffffffffffffffffffffffffffffffffffffff1614610fef57306366251b69610f5960208401846144d3565b610f6960a08501608086016144d3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b505050505b60006110036101c083016101a084016144d3565b73ffffffffffffffffffffffffffffffffffffffff1614158015611046575060006110366101e083016101c08401614beb565b6bffffffffffffffffffffffff16115b1561113e5760408051808201909152600080825260208201526110716101c083016101a084016144d3565b73ffffffffffffffffffffffffffffffffffffffff16815261109b6101e083016101c08401614beb565b6bffffffffffffffffffffffff908116602083019081526040517f44dae42c000000000000000000000000000000000000000000000000000000008152835173ffffffffffffffffffffffffffffffffffffffff1660048201529051909116602482015230906344dae42c90604401600060405180830381600087803b15801561112457600080fd5b505af1158015611138573d6000803e3d6000fd5b50505050505b600061114d60a083018361486e565b9050111561124c5760005b61116560a083018361486e565b905081101561124a57306348a4c10161118160208501856144d3565b61118e60a086018661486e565b8581811061119e5761119e6147f1565b90506020020160208101906111b391906144d3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260016044820152606401600060405180830381600087803b15801561122757600080fd5b505af115801561123b573d6000803e3d6000fd5b50505050806001019050611158565b505b600061125b60c083018361486e565b9050111561135a5760005b61127360c083018361486e565b905081101561135857306348a4c10161128f60208501856144d3565b61129c60c086018661486e565b858181106112ac576112ac6147f1565b90506020020160208101906112c191906144d3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260006044820152606401600060405180830381600087803b15801561133557600080fd5b505af1158015611349573d6000803e3d6000fd5b50505050806001019050611266565b505b600061136960e083018361486e565b905011156114685760005b61138160e083018361486e565b9050811015611466573063cb743ba861139d60208501856144d3565b6113aa60e086018661486e565b858181106113ba576113ba6147f1565b90506020020160208101906113cf91906144d3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260016044820152606401600060405180830381600087803b15801561144357600080fd5b505af1158015611457573d6000803e3d6000fd5b50505050806001019050611374565b505b600061147861010083018361486e565b905011156115795760005b61149161010083018361486e565b9050811015611577573063cb743ba86114ad60208501856144d3565b6114bb61010086018661486e565b858181106114cb576114cb6147f1565b90506020020160208101906114e091906144d3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260006044820152606401600060405180830381600087803b15801561155457600080fd5b505af1158015611568573d6000803e3d6000fd5b50505050806001019050611483565b505b50565b611584612afe565b600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055604051600081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1565b6115ec3382612b4f565b611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016109ee565b610ab6838383612c0f565b601280546000918291612710906116c0907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1686614c08565b6116ca9190614c1f565b905473ffffffffffffffffffffffffffffffffffffffff169590945092505050565b606061085e82612f15565b60006117028361201f565b8210611790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e647300000000000000000000000000000000000000000060648201526084016109ee565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152600760209081526040808320938352929052205490565b6117ce612fa9565b6117d733612a9f565b6000828152600e6020526040902054600083815260136020526040902054611800906001614c5a565b111561186a57600082815260136020526040902054611820906001614c5a565b6000838152600e60205260409020546040517fe12d2314000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016109ee565b600082815260136020526040812060020154908161188b620186a086614c08565b6118959190614c5a565b6118a0906001614c5a565b60008581526013602052604081206002018054929350906118c083614c6d565b909155505060008481526013602052604081208054916118df83614c6d565b9091555050600084815260476020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812080549161191f83614c6d565b919050555061192e838261301c565b50506115776001601455565b610ab683838360405180602001604052806000815250612305565b61195d612a0f565b600061196c60208301836144d3565b73ffffffffffffffffffffffffffffffffffffffff16036119b9576040517f1cc0baef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127106119cc6040830160208401614beb565b6bffffffffffffffffffffffff161115611a33576119f06040820160208301614beb565b6040517f3cadbafb0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff90911660048201526024016109ee565b806012611a408282614ca5565b507ff21fccf4d64d86d532c4e4eb86c007b6ad57a460c27d724188625e755ec6cf6d9050611a7160208301836144d3565b611a816040840160208501614beb565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526bffffffffffffffffffffffff9091166020830152015b60405180910390a150565b600054610100900460ff1615808015611ae15750600054600160ff909116105b80611afb5750303b158015611afb575060005460ff166001145b611b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109ee565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611be557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b611c5888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a915089908190840183828082843760009201919091525061303d92505050565b611c606130ed565b611c6a848461318c565b611c73826132fc565b6040517f5b5d2b5939aa18fe3121da7f20b8186de7da964dcf8c464e19c19331ed7d6f0c90600090a18015610b5057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050505050565b611d10612a0f565b611d1983612a9f565b6040517f8e7d1e4300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528215156024830152841690638e7d1e43906044015b600060405180830381600087803b158015611d8b57600080fd5b505af1158015611d9f573d6000803e3d6000fd5b50505050505050565b6000611db360095490565b8210611e41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e6473000000000000000000000000000000000000000060648201526084016109ee565b60098281548110611e5457611e546147f1565b90600052602060002001549050919050565b611e6e612a0f565b600f610ab6828483614d50565b60008181526003602052604081205473ffffffffffffffffffffffffffffffffffffffff168061085e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016109ee565b611f0f612a0f565b611f1882612a9f565b6040517f12738db800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301528316906312738db890602401600060405180830381600087803b158015611f8157600080fd5b505af1158015611f95573d6000803e3d6000fd5b505050505050565b611fa5612a0f565b67ffffffffffffffff811115611fea576040517fb43e9137000000000000000000000000000000000000000000000000000000008152600481018290526024016109ee565b600d8190556040518181527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c90602001611ab6565b600073ffffffffffffffffffffffffffffffffffffffff82166120c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016109ee565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6120f5612afe565b6120ff60006132fc565b565b600c5473ffffffffffffffffffffffffffffffffffffffff16338114612153576040517fd6eb09ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055604051600081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1611579816132fc565b6121c0612a0f565b60008281526013602052604090205415612206576040517fe03264af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152601160209081526040918290208054908490558251818152918201849052917f7c22004198bf87da0f0dab623c72e66ca1200f4454aa3b9ca30f436275428b7c910160405180910390a1505050565b612262612a0f565b601061226f828483614d50565b507f905d981207a7d0b6c62cc46ab0be2a076d0298e4a86d0ab79882dbd01ac3737882826040516122a1929190614a1f565b60405180910390a15050565b60606002805461087390614738565b611577338383613373565b6122cf612a0f565b60408051838152602081018390527f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c91016122a1565b61230f3383612b4f565b61239b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016109ee565b6123a7848484846134a0565b50505050565b6123b5612a0f565b67ffffffffffffffff8111156123fa576040517fb43e9137000000000000000000000000000000000000000000000000000000008152600481018290526024016109ee565b6000828152600e602090815260409182902083905581518481529081018390527fdc5e99d9657bf1ebde1615249c636594f91f814c726697734159d63e3805658591016122a1565b60008181526003602052604090205460609073ffffffffffffffffffffffffffffffffffffffff166124a0576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006124ab83612f15565b905080516000036124cc575050604080516020810190915260008152919050565b6040805180820190915260018082527f2f0000000000000000000000000000000000000000000000000000000000000060209092018290528251839161251191614e6a565b81518110612521576125216147f1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016146125535792915050565b8061255d84613543565b60405160200161256e929190614e7d565b604051602081830303815290604052915050919050565b61258d612a0f565b61259683612a9f565b6040517f7f2a5cca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528215156024830152841690637f2a5cca90604401611d71565b6012805460009182916127109061262f907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1686614c08565b6126399190614c1f565b905473ffffffffffffffffffffffffffffffffffffffff1694909350915050565b612662612afe565b611577828261318c565b60606010805461087390614738565b612683612afe565b73ffffffffffffffffffffffffffffffffffffffff81166126d0576040517f7448fbae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da90602001611ab6565b61276760405180606001604052806000815260200160008152602001600081525090565b50600090815260136020908152604091829020825160608101845281548152600182015492810192909252600201549181019190915290565b6127a8612a0f565b6127b185612a9f565b6040517f1953dc8e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861690631953dc8e90612809908790879087908790600401614eac565b600060405180830381600087803b15801561282357600080fd5b505af1158015612837573d6000803e3d6000fd5b505050505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a0000000000000000000000000000000000000000000000000000000014806128d557507f49064906000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061085e575061085e826135a5565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016109ee565b600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906129c982611e7b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b303314612a65612a34600b5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161490565b176000036120ff576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526046602052604090205460ff16611579576040517f66b6ce0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b5473ffffffffffffffffffffffffffffffffffffffff1633146120ff576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080612b5b83611e7b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612bc9575073ffffffffffffffffffffffffffffffffffffffff80821660009081526006602090815260408083209388168352929052205460ff165b80612c0757508373ffffffffffffffffffffffffffffffffffffffff16612bef846108f6565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16612c2f82611e7b565b73ffffffffffffffffffffffffffffffffffffffff1614612cd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016109ee565b73ffffffffffffffffffffffffffffffffffffffff8216612d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016109ee565b612d7f8383836135fb565b8273ffffffffffffffffffffffffffffffffffffffff16612d9f82611e7b565b73ffffffffffffffffffffffffffffffffffffffff1614612e42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016109ee565b600081815260056020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff8781168086526004855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905590871680865283862080546001019055868652600390945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6060600f8054612f2490614738565b80601f0160208091040260200160405190810160405280929190818152602001828054612f5090614738565b8015612f9d5780601f10612f7257610100808354040283529160200191612f9d565b820191906000526020600020905b815481529060010190602001808311612f8057829003601f168201915b50505050509050919050565b600260145403613015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109ee565b6002601455565b611577828260405180602001604052806000815250613606565b6001601455565b600054610100900460ff166130d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109ee565b60016130e08382614ed3565b506002610ab68282614ed3565b600054610100900460ff16613184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109ee565b6120ff6136a9565b6048548160005b8281101561321b57600060466000604884815481106131b4576131b46147f1565b60009182526020808320919091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101613193565b5060005b818110156132af5760016046600087878581811061323f5761323f6147f1565b905060200201602081019061325491906144d3565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560010161321f565b506132bc60488585613f51565b507f4f294c48a4c4481870fc7c60c671fcf43bc61e1adbddea40c56ce275ebb2325784846040516132ee929190614fed565b60405180910390a150505050565b600b805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109ee565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526006602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6134ab848484612c0f565b6134b784848484613740565b6123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016109ee565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a90048061355d57508190037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d6300000000000000000000000000000000000000000000000000000000148061085e575061085e82613933565b610ab6838383613a62565b6136108383613b68565b61361d6000848484613740565b610ab6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016109ee565b600054610100900460ff16613036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109ee565b600073ffffffffffffffffffffffffffffffffffffffff84163b15613928576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906137b7903390899088908890600401615048565b6020604051808303816000875af1925050508015613810575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261380d91810190615091565b60015b6138dd573d80801561383e576040519150601f19603f3d011682016040523d82523d6000602084013e613843565b606091505b5080516000036138d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016109ee565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050612c07565b506001949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806139c657507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80613a1257507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061085e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461085e565b73ffffffffffffffffffffffffffffffffffffffff8316613aca57613ac581600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b613b07565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613b0757613b078382613d9a565b73ffffffffffffffffffffffffffffffffffffffff8216613b2b57610ab681613e51565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610ab657610ab68282613f00565b73ffffffffffffffffffffffffffffffffffffffff8216613be5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109ee565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615613c71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109ee565b613c7d600083836135fb565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615613d09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109ee565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260046020908152604080832080546001019055848352600390915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611577565b60006001613da78461201f565b613db19190614e6a565b600083815260086020526040902054909150808214613e115773ffffffffffffffffffffffffffffffffffffffff841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b50600091825260086020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352600781528383209183525290812055565b600954600090613e6390600190614e6a565b6000838152600a602052604081205460098054939450909284908110613e8b57613e8b6147f1565b906000526020600020015490508060098381548110613eac57613eac6147f1565b6000918252602080832090910192909255828152600a90915260408082208490558582528120556009805480613ee457613ee46150ae565b6001900381819060005260206000200160009055905550505050565b6000613f0b8361201f565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b828054828255906000526020600020908101928215613fc9579160200282015b82811115613fc95781547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff843516178255602090920191600190910190613f71565b50613fd5929150613fd9565b5090565b5b80821115613fd55760008155600101613fda565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461157957600080fd5b60006020828403121561402e57600080fd5b813561403981613fee565b9392505050565b60005b8381101561405b578181015183820152602001614043565b50506000910152565b6000815180845261407c816020860160208601614040565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006140396020830184614064565b6000602082840312156140d357600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461157957600080fd5b6000806040838503121561410f57600080fd5b823561411a816140da565b946020939093013593505050565b60008083601f84011261413a57600080fd5b50813567ffffffffffffffff81111561415257600080fd5b60208301915083602082850101111561416a57600080fd5b9250929050565b6000806000806060858703121561418757600080fd5b8435614192816140da565b935060208501359250604085013567ffffffffffffffff8111156141b557600080fd5b6141c187828801614128565b95989497509550505050565b60008083601f8401126141df57600080fd5b50813567ffffffffffffffff8111156141f757600080fd5b6020830191508360208260051b850101111561416a57600080fd5b6000806000806040858703121561422857600080fd5b843567ffffffffffffffff8082111561424057600080fd5b61424c888389016141cd565b9096509450602087013591508082111561426557600080fd5b506141c1878288016141cd565b6000806040838503121561428557600080fd5b823591506020830135614297816140da565b809150509250929050565b6000602082840312156142b457600080fd5b813567ffffffffffffffff8111156142cb57600080fd5b82016101e0818503121561403957600080fd5b6000806000606084860312156142f357600080fd5b83356142fe816140da565b9250602084013561430e816140da565b929592945050506040919091013590565b6000806040838503121561433257600080fd5b50508035926020909101359150565b60006040828403121561435357600080fd5b50919050565b60008060008060008060006080888a03121561437457600080fd5b873567ffffffffffffffff8082111561438c57600080fd5b6143988b838c01614128565b909950975060208a01359150808211156143b157600080fd5b6143bd8b838c01614128565b909750955060408a01359150808211156143d657600080fd5b506143e38a828b016141cd565b90945092505060608801356143f7816140da565b8091505092959891949750929550565b8035801515811461441757600080fd5b919050565b60008060006060848603121561443157600080fd5b833561443c816140da565b9250602084013561444c816140da565b915061445a60408501614407565b90509250925092565b6000806020838503121561447657600080fd5b823567ffffffffffffffff81111561448d57600080fd5b61449985828601614128565b90969095509350505050565b600080604083850312156144b857600080fd5b82356144c3816140da565b91506020830135614297816140da565b6000602082840312156144e557600080fd5b8135614039816140da565b6000806040838503121561450357600080fd5b823561450e816140da565b915061451c60208401614407565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561456a57600080fd5b8435614575816140da565b93506020850135614585816140da565b925060408501359150606085013567ffffffffffffffff808211156145a957600080fd5b818701915087601f8301126145bd57600080fd5b8135818111156145cf576145cf614525565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561461557614615614525565b816040528281528a602084870101111561462e57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806020838503121561466557600080fd5b823567ffffffffffffffff81111561467c57600080fd5b614499858286016141cd565b6000806000806000606086880312156146a057600080fd5b85356146ab816140da565b9450602086013567ffffffffffffffff808211156146c857600080fd5b6146d489838a016141cd565b909650945060408801359150808211156146ed57600080fd5b818801915088601f83011261470157600080fd5b81358181111561471057600080fd5b89602060e08302850101111561472557600080fd5b9699959850939650602001949392505050565b600181811c9082168061474c57607f821691505b602082108103614353577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8381526040602082015260006147e8604083018486614785565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff810361486557614865614820565b60010192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126148a357600080fd5b83018035915067ffffffffffffffff8211156148be57600080fd5b6020019150600581901b360382131561416a57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261490b57600080fd5b83018035915067ffffffffffffffff82111561492657600080fd5b602001915060e08102360382131561416a57600080fd5b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561496f57600080fd5b8260051b80836020870137939093016020019392505050565b60408152600061499c60408301868861493d565b82810360208401526149af81858761493d565b979650505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126149ef57600080fd5b83018035915067ffffffffffffffff821115614a0a57600080fd5b60200191503681900382131561416a57600080fd5b602081526000612c07602083018486614785565b803565ffffffffffff8116811461441757600080fd5b803561ffff8116811461441757600080fd5b80356006811061441757600080fd5b60068110614aa1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b818352600060208085019450826000805b86811015614b7657823569ffffffffffffffffffff8116808214614ad8578384fd5b89525065ffffffffffff614aed848601614a33565b16848901526040614aff818501614a33565b65ffffffffffff16908901526060614b18848201614a49565b61ffff16908901526080614b2d848201614a49565b61ffff169089015260a0614b42848201614407565b15159089015260c0614b55848201614a5b565b614b61828b0182614a6a565b505060e0978801979290920191600101614ab6565b50959695505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152606060208201526000614bb260608301868861493d565b8281036040840152614bc5818587614aa5565b98975050505050505050565b6bffffffffffffffffffffffff8116811461157957600080fd5b600060208284031215614bfd57600080fd5b813561403981614bd1565b808202811582820484141761085e5761085e614820565b600082614c55577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561085e5761085e614820565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c9e57614c9e614820565b5060010190565b8135614cb0816140da565b73ffffffffffffffffffffffffffffffffffffffff811690507fffffffffffffffffffffffff000000000000000000000000000000000000000081818454161783556020840135614d0081614bd1565b60a01b1617905550565b601f821115610ab657600081815260208120601f850160051c81016020861015614d315750805b601f850160051c820191505b81811015611f9557828155600101614d3d565b67ffffffffffffffff831115614d6857614d68614525565b614d7c83614d768354614738565b83614d0a565b6000601f841160018114614dce5760008515614d985750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355610c19565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015614e1d5786850135825560209485019460019092019101614dfd565b5086821015614e58577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b8181038181111561085e5761085e614820565b60008351614e8f818460208801614040565b835190830190614ea3818360208801614040565b01949350505050565b604081526000614ec060408301868861493d565b82810360208401526149af818587614aa5565b815167ffffffffffffffff811115614eed57614eed614525565b614f0181614efb8454614738565b84614d0a565b602080601f831160018114614f545760008415614f1e5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611f95565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614fa157888601518255948401946001909101908401614f82565b5085821015614fdd57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60208082528181018390526000908460408401835b8681101561503d578235615015816140da565b73ffffffffffffffffffffffffffffffffffffffff1682529183019190830190600101615002565b509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526150876080830184614064565b9695505050505050565b6000602082840312156150a357600080fd5b815161403981613fee565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000811000a