Overview ERC721
Total Supply:
7,979 PAP

Holders:
633
Profile Summary
Blockchain:
Base (8453)

Contract Source Code Verified (Exact Match)
Contract Name:
ERC721CWithMutableMinterRoyalties

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Created At:
Sat, 22 Jun 2024 08:22:01 GMT
OwnableBasic.sol
@limitbreak
creator-token-contracts
contracts
access
OwnableBasic.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "uint96",
        "name": "defaultRoyaltyFeeNumerator_",
        "type": "uint96"
      },
      {
        "internalType": "string",
        "name": "name_",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "symbol_",
        "type": "string"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "AirdropComplete",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ArrayLengthMismatch",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "CreatorTokenBase__InvalidTransferValidatorContract",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "CreatorTokenBase__SetTransferValidatorFirst",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ExceedsSupply",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MutableMinterRoyalties__MinterCannotBeZeroAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MutableMinterRoyalties__MinterHasAlreadyBeenAssignedToTokenId",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MutableMinterRoyalties__OnlyMinterCanChangeRoyaltyFee",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MutableMinterRoyalties__RoyaltyFeeWillExceedSalePrice",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ShouldNotMintToBurnAddress",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "approved",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "ApprovalForAll",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint96",
        "name": "feeNumerator",
        "type": "uint96"
      }
    ],
    "name": "RoyaltySet",
    "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"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "oldValidator",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "newValidator",
        "type": "address"
      }
    ],
    "name": "TransferValidatorUpdated",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "DEFAULT_OPERATOR_WHITELIST_ID",
    "outputs": [
      {
        "internalType": "uint120",
        "name": "",
        "type": "uint120"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DEFAULT_TRANSFER_SECURITY_LEVEL",
    "outputs": [
      {
        "internalType": "enum TransferSecurityLevels",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DEFAULT_TRANSFER_VALIDATOR",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "FEE_DENOMINATOR",
    "outputs": [
      {
        "internalType": "uint96",
        "name": "",
        "type": "uint96"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256[]",
        "name": "tokenIds",
        "type": "uint256[]"
      },
      {
        "internalType": "address[]",
        "name": "recipients",
        "type": "address[]"
      }
    ],
    "name": "airdrop",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "airdropComplete",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "burn",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "defaultRoyaltyFeeNumerator",
    "outputs": [
      {
        "internalType": "uint96",
        "name": "",
        "type": "uint96"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getApproved",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getPermittedContractReceivers",
    "outputs": [
      {
        "internalType": "address[]",
        "name": "",
        "type": "address[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getSecurityPolicy",
    "outputs": [
      {
        "components": [
          {
            "internalType": "enum TransferSecurityLevels",
            "name": "transferSecurityLevel",
            "type": "uint8"
          },
          {
            "internalType": "uint120",
            "name": "operatorWhitelistId",
            "type": "uint120"
          },
          {
            "internalType": "uint120",
            "name": "permittedContractReceiversId",
            "type": "uint120"
          }
        ],
        "internalType": "struct CollectionSecurityPolicy",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getTransferValidator",
    "outputs": [
      {
        "internalType": "contract ICreatorTokenTransferValidator",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getWhitelistedOperators",
    "outputs": [
      {
        "internalType": "address[]",
        "name": "",
        "type": "address[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "isApprovedForAll",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }
    ],
    "name": "isContractReceiverPermitted",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "isOperatorWhitelisted",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "isTransferAllowed",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "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": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "ownerOf",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "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": [
      {
        "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": "baseURI",
        "type": "string"
      }
    ],
    "name": "setBaseURI",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "uint96",
        "name": "royaltyFeeNumerator",
        "type": "uint96"
      }
    ],
    "name": "setRoyaltyFee",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "enum TransferSecurityLevels",
        "name": "level",
        "type": "uint8"
      },
      {
        "internalType": "uint120",
        "name": "operatorWhitelistId",
        "type": "uint120"
      },
      {
        "internalType": "uint120",
        "name": "permittedContractReceiversAllowlistId",
        "type": "uint120"
      }
    ],
    "name": "setToCustomSecurityPolicy",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "validator",
        "type": "address"
      },
      {
        "internalType": "enum TransferSecurityLevels",
        "name": "level",
        "type": "uint8"
      },
      {
        "internalType": "uint120",
        "name": "operatorWhitelistId",
        "type": "uint120"
      },
      {
        "internalType": "uint120",
        "name": "permittedContractReceiversAllowlistId",
        "type": "uint120"
      }
    ],
    "name": "setToCustomValidatorAndSecurityPolicy",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "setToDefaultSecurityPolicy",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "transferValidator_",
        "type": "address"
      }
    ],
    "name": "setTransferValidator",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes4",
        "name": "interfaceId",
        "type": "bytes4"
      }
    ],
    "name": "supportsInterface",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "tokenURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
60a06040523480156200001157600080fd5b50604051620031f8380380620031f8833981016040819052620000349162000249565b8282826040518060200160405280600081525060405180602001604052806000815250816000908162000068919062000361565b50600162000077828262000361565b5050506200008c8282620000bb60201b60201c565b506200009a905033620000dd565b620000a5816200012f565b6001600160601b0316608052506200042d915050565b6006620000c9838262000361565b506007620000d8828262000361565b505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6127106001600160601b03821611156200015c576040516316fc4d9760e01b815260040160405180910390fd5b600980546001600160601b03909216600160a01b026001600160a01b03909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001ac57600080fd5b81516001600160401b0380821115620001c957620001c962000184565b604051601f8301601f19908116603f01168101908282118183101715620001f457620001f462000184565b816040528381526020925086838588010111156200021157600080fd5b600091505b8382101562000235578582018301518183018401529082019062000216565b600093810190920192909252949350505050565b6000806000606084860312156200025f57600080fd5b83516001600160601b03811681146200027757600080fd5b60208501519093506001600160401b03808211156200029557600080fd5b620002a3878388016200019a565b93506040860151915080821115620002ba57600080fd5b50620002c9868287016200019a565b9150509250925092565b600181811c90821680620002e857607f821691505b6020821081036200030957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620000d857600081815260208120601f850160051c81016020861015620003385750805b601f850160051c820191505b81811015620003595782815560010162000344565b505050505050565b81516001600160401b038111156200037d576200037d62000184565b62000395816200038e8454620002d3565b846200030f565b602080601f831160018114620003cd5760008415620003b45750858301515b600019600386901b1c1916600185901b17855562000359565b600085815260208120601f198616915b82811015620003fe57888601518255948401946001909101908401620003dd565b50858210156200041d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051612da162000457600039600081816103d4015281816108740152611e7a0152612da16000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c8063613471621161013b578063a22cb465116100b8578063d007af5c1161007c578063d007af5c14610535578063d73792a91461053d578063e985e9c514610546578063f2fde38b14610559578063fd762d921461056c57600080fd5b8063a22cb465146104d4578063a9fc664e146104e7578063b88d4fde146104fa578063be537f431461050d578063c87b56dd1461052257600080fd5b806370a08231116100ff57806370a082311461048d578063715018a6146104a05780638da5cb5b146104a857806395d89b41146104b95780639d645a44146104c157600080fd5b8063613471621461043f5780636352211e146104525780636673c4c21461046557806369663587146104785780636c3b86991461048557600080fd5b806323b872dd116101c9578063495c8bf91161018d578063495c8bf9146103aa5780634ef62253146103bf578063521f5e6a146103d257806355f804b31461040c5780635d4c1d461461041f57600080fd5b806323b872dd1461032c5780632a55205a1461033f5780632e8da8291461037157806342842e0e1461038457806342966c681461039757600080fd5b8063095ea7b311610210578063095ea7b3146102c3578063098144d4146102d857806318160ddd146102e95780631b25b077146103045780631c33b3281461031757600080fd5b8063014635461461024257806301ffc9a71461027857806306fdde031461029b578063081812fc146102b0575b600080fd5b61025b71721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b61028b610286366004612218565b61057f565b604051901515815260200161026f565b6102a3610590565b60405161026f9190612285565b61025b6102be366004612298565b610622565b6102d66102d13660046122c6565b610649565b005b6009546001600160a01b031661025b565b600c54610100900461ffff165b60405190815260200161026f565b61028b6103123660046122f2565b610763565b61031f600181565b60405161026f919061235f565b6102d661033a36600461236d565b6107fc565b61035261034d3660046123ae565b61082d565b604080516001600160a01b03909316835260208301919091520161026f565b61028b61037f3660046123d0565b6108d6565b6102d661039236600461236d565b6109e2565b6102d66103a5366004612298565b6109fd565b6103b2610a09565b60405161026f91906123ed565b6102d66103cd36600461243a565b610b1a565b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160601b03909116815260200161026f565b6102d661041a366004612515565b610bde565b610427600181565b6040516001600160781b03909116815260200161026f565b6102d661044d366004612580565b610bf6565b61025b610460366004612298565b610d61565b6102d6610473366004612658565b610dc1565b600c5461028b9060ff1681565b6102d6610f0b565b6102f661049b3660046123d0565b611004565b6102d661108a565b6008546001600160a01b031661025b565b6102a361109e565b61028b6104cf3660046123d0565b6110ad565b6102d66104e236600461271f565b611175565b6102d66104f53660046123d0565b611180565b6102d661050836600461274d565b6112a1565b6105156112d3565b60405161026f91906127cd565b6102a3610530366004612298565b61138e565b6103b26113f4565b6103f461271081565b61028b610554366004612809565b6114ad565b6102d66105673660046123d0565b6114db565b6102d661057a366004612837565b611551565b600061058a82611650565b92915050565b60606006805461059f90612893565b80601f01602080910402602001604051908101604052809291908181526020018280546105cb90612893565b80156106185780601f106105ed57610100808354040283529160200191610618565b820191906000526020600020905b8154815290600101906020018083116105fb57829003601f168201915b5050505050905090565b600061062d82611675565b506000908152600460205260409020546001600160a01b031690565b600061065482610d61565b9050806001600160a01b0316836001600160a01b0316036106c65760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806106e257506106e281336114ad565b6107545760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016106bd565b61075e83836116d4565b505050565b6009546000906001600160a01b0316156107f15760095460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b1580156107cc57600080fd5b505afa9250505080156107dd575060015b6107e9575060006107f5565b5060016107f5565b5060015b9392505050565b6108063382611742565b6108225760405162461bcd60e51b81526004016106bd906128cd565b61075e8383836117a1565b6000828152600a602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b03169282019290925282916108a2577f00000000000000000000000000000000000000000000000000000000000000006001600160601b031660208201525b80516020820151612710906108c0906001600160601b031687612930565b6108ca919061294f565b92509250509250929050565b6009546000906001600160a01b0316156109da57600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b955455290602401606060405180830381865afa15801561093a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095e9190612971565b602001516040516001600160e01b031960e084901b1681526001600160781b0390911660048201526001600160a01b03851660248201526044015b602060405180830381865afa1580156109b6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058a91906129e3565b506000919050565b61075e838383604051806020016040528060008152506112a1565b610a068161191a565b50565b6009546060906001600160a01b031615610b0757600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b955455290602401606060405180830381865afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a919190612971565b602001516040516001600160e01b031960e084901b1681526001600160781b0390911660048201526024015b600060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b029190810190612a00565b905090565b5060408051600081526020810190915290565b6127106001600160601b0382161115610b46576040516316fc4d9760e01b815260040160405180910390fd5b6000828152600a6020526040902080546001600160a01b03163314610b7e57604051630987367960e11b815260040160405180910390fd5b80546001600160a01b0316600160a01b6001600160601b038416908102919091178255604051908152339084907f93c3d3c02f3e5b8ff28a98e2ff5dc3d9395f4f02af3a830c3789c8af25420253906020015b60405180910390a3505050565b610be661192c565b600b610bf28282612ae8565b5050565b610bfe611986565b6000610c126009546001600160a01b031690565b90506001600160a01b038116610c3b57604051631cffe3dd60e11b815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c090610c699030908890600401612ba8565b600060405180830381600087803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b5050604051631182550160e11b81526001600160a01b0384169250632304aa029150610cc99030908790600401612bc5565b600060405180830381600087803b158015610ce357600080fd5b505af1158015610cf7573d6000803e3d6000fd5b505060405163235d10c560e21b81526001600160a01b0384169250638d7443149150610d299030908690600401612bc5565b600060405180830381600087803b158015610d4357600080fd5b505af1158015610d57573d6000803e3d6000fd5b5050505050505050565b6000818152600260205260408120546001600160a01b03168061058a5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106bd565b610dc961192c565b600c5460ff1615610ded5760405163c80a125360e01b815260040160405180910390fd5b8151600c54611f2b91610e0891610100900461ffff16612be7565b61ffff161115610e2b57604051632d573a5560e01b815260040160405180910390fd5b815181518114610e4e5760405163512509d360e11b815260040160405180910390fd5b80600c60018282829054906101000a900461ffff16610e6d9190612be7565b92506101000a81548161ffff021916908361ffff16021790555060005b81811015610ee4576000848281518110610ea657610ea6612c09565b60200260200101519050610ed3848381518110610ec557610ec5612c09565b60200260200101518261198e565b50610edd81612c1f565b9050610e8a565b50600c54610100900461ffff16611f2b0361075e57600c805460ff19166001179055505050565b610f13611986565b610f2e71721c310194ccfc01e523fc93c9cccfa2a0ac611180565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c090610f66903090600190600401612ba8565b600060405180830381600087803b158015610f8057600080fd5b505af1158015610f94573d6000803e3d6000fd5b5050604051631182550160e11b815271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150610fd0903090600190600401612bc5565b600060405180830381600087803b158015610fea57600080fd5b505af1158015610ffe573d6000803e3d6000fd5b50505050565b60006001600160a01b03821661106e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016106bd565b506001600160a01b031660009081526003602052604090205490565b61109261192c565b61109c6000611b31565b565b60606007805461059f90612893565b6009546000906001600160a01b0316156109da57600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b955455290602401606060405180830381865afa158015611111573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111359190612971565b60409081015190516001600160e01b031960e084901b1681526001600160781b0390911660048201526001600160a01b0385166024820152604401610999565b610bf2338383611b83565b611188611986565b60006001600160a01b0382163b15611203576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa9250505080156111fb575060408051601f3d908101601f191682019092526111f8918101906129e3565b60015b156112035790505b6001600160a01b03821615801590611219575080155b15611237576040516332483afb60e01b815260040160405180910390fd5b600954604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a150600980546001600160a01b0319166001600160a01b0392909216919091179055565b6112ab3383611742565b6112c75760405162461bcd60e51b81526004016106bd906128cd565b610ffe84848484611c49565b60408051606081018252600080825260208201819052918101919091526009546001600160a01b03161561136d57600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063b955455290602401606060405180830381865afa158015611349573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b029190612971565b50604080516060810182526000808252602082018190529181019190915290565b606061139982611675565b60006113a3611c7c565b905060008151116113c357604051806020016040528060008152506107f5565b806113cd84611c8b565b6040516020016113de929190612c38565b6040516020818303038152906040529392505050565b6009546060906001600160a01b031615610b0757600954604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b955455290602401606060405180830381865afa158015611458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147c9190612971565b60409081015190516001600160e01b031960e084901b1681526001600160781b039091166004820152602401610abd565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6114e361192c565b6001600160a01b0381166115485760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106bd565b610a0681611b31565b611559611986565b61156284611180565b604051630368065360e61b81526001600160a01b0385169063da0194c0906115909030908790600401612ba8565b600060405180830381600087803b1580156115aa57600080fd5b505af11580156115be573d6000803e3d6000fd5b5050604051631182550160e11b81526001600160a01b0387169250632304aa0291506115f09030908690600401612bc5565b600060405180830381600087803b15801561160a57600080fd5b505af115801561161e573d6000803e3d6000fd5b505060405163235d10c560e21b81526001600160a01b0387169250638d7443149150610d299030908590600401612bc5565b60006001600160e01b0319821663152a902d60e11b148061058a575061058a82611d1e565b6000818152600260205260409020546001600160a01b0316610a065760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106bd565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061170982610d61565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061174e83610d61565b9050806001600160a01b0316846001600160a01b03161480611775575061177581856114ad565b806117995750836001600160a01b031661178e84610622565b6001600160a01b0316145b949350505050565b826001600160a01b03166117b482610d61565b6001600160a01b0316146117da5760405162461bcd60e51b81526004016106bd90612c67565b6001600160a01b03821661183c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106bd565b6118498383836001611d43565b826001600160a01b031661185c82610d61565b6001600160a01b0316146118825760405162461bcd60e51b81526004016106bd90612c67565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a461075e8383836001611d71565b61192381611d98565b610a0681611e45565b6008546001600160a01b0316331461109c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106bd565b61109c61192c565b6001600160a01b0382166119e45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106bd565b6000818152600260205260409020546001600160a01b031615611a495760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106bd565b611a57600083836001611d43565b6000818152600260205260409020546001600160a01b031615611abc5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106bd565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4610bf2600083836001611d71565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603611be45760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106bd565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101610bd1565b611c548484846117a1565b611c6084848484611eb7565b610ffe5760405162461bcd60e51b81526004016106bd90612cac565b6060600b805461059f90612893565b60606000611c9883611fb8565b600101905060008167ffffffffffffffff811115611cb857611cb8612476565b6040519080825280601f01601f191660200182016040528015611ce2576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611cec57509392505050565b60006001600160e01b031982166310c8aba560e31b148061058a575061058a82612090565b60005b81811015611d6a57611d628585611d5d8487612cfe565b6120e0565b600101611d46565b5050505050565b60005b81811015611d6a57611d908585611d8b8487612cfe565b612136565b600101611d74565b6000611da382610d61565b9050611db3816000846001611d43565b611dbc82610d61565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4610bf2816000846001611d71565b6000818152600a60205260408120819055817f93c3d3c02f3e5b8ff28a98e2ff5dc3d9395f4f02af3a830c3789c8af254202537f00000000000000000000000000000000000000000000000000000000000000006040516001600160601b03909116815260200160405180910390a350565b60006001600160a01b0384163b15611fad57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611efb903390899088908890600401612d11565b6020604051808303816000875af1925050508015611f36575060408051601f3d908101601f19168201909252611f3391810190612d4e565b60015b611f93573d808015611f64576040519150601f19603f3d011682016040523d82523d6000602084013e611f69565b606091505b508051600003611f8b5760405162461bcd60e51b81526004016106bd90612cac565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611799565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611ff75772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612023576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061204157662386f26fc10000830492506010015b6305f5e1008310612059576305f5e100830492506008015b612710831061206d57612710830492506004015b6064831061207f576064830492506002015b600a831061058a5760010192915050565b60006001600160e01b031982166380ac58cd60e01b14806120c157506001600160e01b03198216635b5e139f60e01b145b8061058a57506301ffc9a760e01b6001600160e01b031983161461058a565b6001600160a01b0383811615908316158180156120fa5750805b1561211857604051635cbd944160e01b815260040160405180910390fd5b8115612124575b611d6a565b8061211f57611d6a338686863461217d565b6001600160a01b0383811615908316158180156121505750805b1561216e57604051635cbd944160e01b815260040160405180910390fd5b8161211f578061211f57611d6a565b6009546001600160a01b031615611d6a5760095460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b1580156121e357600080fd5b505afa1580156121f7573d6000803e3d6000fd5b505050505050505050565b6001600160e01b031981168114610a0657600080fd5b60006020828403121561222a57600080fd5b81356107f581612202565b60005b83811015612250578181015183820152602001612238565b50506000910152565b60008151808452612271816020860160208601612235565b601f01601f19169290920160200192915050565b6020815260006107f56020830184612259565b6000602082840312156122aa57600080fd5b5035919050565b6001600160a01b0381168114610a0657600080fd5b600080604083850312156122d957600080fd5b82356122e4816122b1565b946020939093013593505050565b60008060006060848603121561230757600080fd5b8335612312816122b1565b92506020840135612322816122b1565b91506040840135612332816122b1565b809150509250925092565b6007811061235b57634e487b7160e01b600052602160045260246000fd5b9052565b6020810161058a828461233d565b60008060006060848603121561238257600080fd5b833561238d816122b1565b9250602084013561239d816122b1565b929592945050506040919091013590565b600080604083850312156123c157600080fd5b50508035926020909101359150565b6000602082840312156123e257600080fd5b81356107f5816122b1565b6020808252825182820181905260009190848201906040850190845b8181101561242e5783516001600160a01b031683529284019291840191600101612409565b50909695505050505050565b6000806040838503121561244d57600080fd5b8235915060208301356001600160601b038116811461246b57600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156124b5576124b5612476565b604052919050565b600067ffffffffffffffff8311156124d7576124d7612476565b6124ea601f8401601f191660200161248c565b90508281528383830111156124fe57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561252757600080fd5b813567ffffffffffffffff81111561253e57600080fd5b8201601f8101841361254f57600080fd5b611799848235602084016124bd565b60078110610a0657600080fd5b6001600160781b0381168114610a0657600080fd5b60008060006060848603121561259557600080fd5b83356125a08161255e565b925060208401356125b08161256b565b915060408401356123328161256b565b600067ffffffffffffffff8211156125da576125da612476565b5060051b60200190565b600082601f8301126125f557600080fd5b8135602061260a612605836125c0565b61248c565b82815260059290921b8401810191818101908684111561262957600080fd5b8286015b8481101561264d578035612640816122b1565b835291830191830161262d565b509695505050505050565b6000806040838503121561266b57600080fd5b823567ffffffffffffffff8082111561268357600080fd5b818501915085601f83011261269757600080fd5b813560206126a7612605836125c0565b82815260059290921b840181019181810190898411156126c657600080fd5b948201945b838610156126e4578535825294820194908201906126cb565b965050860135925050808211156126fa57600080fd5b50612707858286016125e4565b9150509250929050565b8015158114610a0657600080fd5b6000806040838503121561273257600080fd5b823561273d816122b1565b9150602083013561246b81612711565b6000806000806080858703121561276357600080fd5b843561276e816122b1565b9350602085013561277e816122b1565b925060408501359150606085013567ffffffffffffffff8111156127a157600080fd5b8501601f810187136127b257600080fd5b6127c1878235602084016124bd565b91505092959194509250565b60006060820190506127e082845161233d565b60208301516001600160781b038082166020850152806040860151166040850152505092915050565b6000806040838503121561281c57600080fd5b8235612827816122b1565b9150602083013561246b816122b1565b6000806000806080858703121561284d57600080fd5b8435612858816122b1565b935060208501356128688161255e565b925060408501356128788161256b565b915060608501356128888161256b565b939692955090935050565b600181811c908216806128a757607f821691505b6020821081036128c757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561294a5761294a61291a565b500290565b60008261296c57634e487b7160e01b600052601260045260246000fd5b500490565b60006060828403121561298357600080fd5b6040516060810181811067ffffffffffffffff821117156129a6576129a6612476565b60405282516129b48161255e565b815260208301516129c48161256b565b602082015260408301516129d78161256b565b60408201529392505050565b6000602082840312156129f557600080fd5b81516107f581612711565b60006020808385031215612a1357600080fd5b825167ffffffffffffffff811115612a2a57600080fd5b8301601f81018513612a3b57600080fd5b8051612a49612605826125c0565b81815260059190911b82018301908381019087831115612a6857600080fd5b928401925b82841015612a8f578351612a80816122b1565b82529284019290840190612a6d565b979650505050505050565b601f82111561075e57600081815260208120601f850160051c81016020861015612ac15750805b601f850160051c820191505b81811015612ae057828155600101612acd565b505050505050565b815167ffffffffffffffff811115612b0257612b02612476565b612b1681612b108454612893565b84612a9a565b602080601f831160018114612b4b5760008415612b335750858301515b600019600386901b1c1916600185901b178555612ae0565b600085815260208120601f198616915b82811015612b7a57888601518255948401946001909101908401612b5b565b5085821015612b985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0383168152604081016107f5602083018461233d565b6001600160a01b039290921682526001600160781b0316602082015260400190565b61ffff818116838216019080821115612c0257612c0261291a565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600060018201612c3157612c3161291a565b5060010190565b60008351612c4a818460208801612235565b835190830190612c5e818360208801612235565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b8082018082111561058a5761058a61291a565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612d4490830184612259565b9695505050505050565b600060208284031215612d6057600080fd5b81516107f58161220256fea2646970667358221220dbfc5b89dafff9091ce024c65047eceda64385d66512ad7e150700ea87561d4264736f6c6343000810003300000000000000000000000000000000000000000000000000000000000002ee000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000e5072696d65417065506c616e657400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035041500000000000000000000000000000000000000000000000000000000000