Overview ERC721
Total Supply:
42,701 BLAST

Holders:
42,294
Profile Summary
Blockchain:
Blast Sepolia (168587773)

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

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Created At:
Wed, 07 Feb 2024 13:49:48 GMT
BlastPenguinTestnet.sol
src
BlastPenguinTestnet.sol


Contract ABI
[
  {
    "inputs": [],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "AlreadyClaimedMax",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MaxSupplyOver",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotMintable",
    "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": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "previousAdminRole",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "newAdminRole",
        "type": "bytes32"
      }
    ],
    "name": "RoleAdminChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "RoleGranted",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "RoleRevoked",
    "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": "DEFAULT_ADMIN_ROLE",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MINTER_ROLE",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "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": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "claimed",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getApproved",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      }
    ],
    "name": "getRoleAdmin",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "grantRole",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "hasRole",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "isApprovedForAll",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "maxSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "mintable",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_address",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "count",
        "type": "uint256"
      }
    ],
    "name": "ownerMint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "ownerOf",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "publicCost",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_mintAmount",
        "type": "uint256"
      }
    ],
    "name": "publicMint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "publicSale",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnerMint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnerMintFlag",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "renounceRole",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "revokeRole",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "salePrice",
        "type": "uint256"
      }
    ],
    "name": "royaltyInfo",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "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": "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": "address",
        "name": "receiver",
        "type": "address"
      },
      {
        "internalType": "uint96",
        "name": "feeNumerator",
        "type": "uint96"
      }
    ],
    "name": "setDefaultRoyalty",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_maxSupply",
        "type": "uint256"
      }
    ],
    "name": "setMaxSupply",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bool",
        "name": "_state",
        "type": "bool"
      }
    ],
    "name": "setMintable",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_publicCost",
        "type": "uint256"
      }
    ],
    "name": "setPublicCost",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bool",
        "name": "_state",
        "type": "bool"
      }
    ],
    "name": "setPublicPhase",
    "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": [],
    "name": "withdraw",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
61c350600d55600e805462ffffff19166101011790556000600f5561010060405260596080818152906200373f60a0396010906200003e908262000d60565b503480156200004c57600080fd5b506040518060400160405280601081526020016f109b185cdd14195b99dd5a5b95195cdd60821b8152506040518060400160405280600581526020016410931054d560da1b8152508160009081620000a5919062000d60565b506001620000b4828262000d60565b505050620000cb336103e86200010660201b60201c565b620000d86000336200020b565b620000f360008051602062003798833981519152336200020b565b6200010033600162000296565b62001037565b6127106001600160601b03821611156200017a5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620001d25760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640162000171565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600b55565b62000217828262000358565b62000292576000828152600a602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620002513390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60008051602062003798833981519152620002b18162000385565b600e5462010000900460ff16156200030c5760405162461bcd60e51b815260206004820152601460248201527f6f776e6572206d696e742072656e6f756e636564000000000000000000000000604482015260640162000171565b60006200031860085490565b905060015b83811162000351576200033c8562000336838562000e42565b62000394565b80620003488162000e58565b9150506200031d565b5050505050565b6000828152600a602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b620003918133620003b6565b50565b620002928282604051806020016040528060008152506200041a60201b60201c565b620003c2828262000358565b6200029257620003d28162000492565b620003df836020620004a5565b604051602001620003f292919062000e9a565b60408051601f198184030181529082905262461bcd60e51b8252620001719160040162000f41565b62000426838362000665565b62000435600084848462000806565b6200048d5760405162461bcd60e51b815260206004820152603260248201526000805160206200371f83398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840162000171565b505050565b60606200037f6001600160a01b03831660145b60606000620004b683600262000f56565b620004c390600262000e42565b6001600160401b03811115620004dd57620004dd62000cbc565b6040519080825280601f01601f19166020018201604052801562000508576020820181803683370190505b509050600360fc1b8160008151811062000526576200052662000f70565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811062000558576200055862000f70565b60200101906001600160f81b031916908160001a90535060006200057e84600262000f56565b6200058b90600162000e42565b90505b60018111156200060d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110620005c357620005c362000f70565b1a60f81b828281518110620005dc57620005dc62000f70565b60200101906001600160f81b031916908160001a90535060049490941c93620006058162000f86565b90506200058e565b5083156200065e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640162000171565b9392505050565b6001600160a01b038216620006bd5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640162000171565b6000818152600260205260409020546001600160a01b031615620007245760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640162000171565b620007346000838360016200094e565b6000818152600260205260409020546001600160a01b0316156200079b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640162000171565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156200094257604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906200084d90339089908890889060040162000fa0565b6020604051808303816000875af19250505080156200088b575060408051601f3d908101601f19168201909252620008889181019062000fdf565b60015b62000927573d808015620008bc576040519150601f19603f3d011682016040523d82523d6000602084013e620008c1565b606091505b5080516000036200091f5760405162461bcd60e51b815260206004820152603260248201526000805160206200371f83398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840162000171565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905062000946565b5060015b949350505050565b6001811115620009c75760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e736563757469766520747260448201527f616e7366657273206e6f7420737570706f727465640000000000000000000000606482015260840162000171565b816001600160a01b03851662000a265762000a2081600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b62000a4c565b836001600160a01b0316856001600160a01b03161462000a4c5762000a4c858262000a92565b6001600160a01b03841662000a6c5762000a668162000b34565b62000351565b846001600160a01b0316846001600160a01b031614620003515762000351848262000bee565b6000600162000aa18462000c34565b62000aad91906200100b565b60008381526007602052604090205490915080821462000b01576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009062000b48906001906200100b565b6000838152600960205260408120546008805493945090928490811062000b735762000b7362000f70565b90600052602060002001549050806008838154811062000b975762000b9762000f70565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548062000bd25762000bd262001021565b6001900381819060005260206000200160009055905550505050565b600062000bfb8362000c34565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60006001600160a01b03821662000ca05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840162000171565b506001600160a01b031660009081526003602052604090205490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000ce757607f821691505b60208210810362000d0857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200048d57600081815260208120601f850160051c8101602086101562000d375750805b601f850160051c820191505b8181101562000d585782815560010162000d43565b505050505050565b81516001600160401b0381111562000d7c5762000d7c62000cbc565b62000d948162000d8d845462000cd2565b8462000d0e565b602080601f83116001811462000dcc576000841562000db35750858301515b600019600386901b1c1916600185901b17855562000d58565b600085815260208120601f198616915b8281101562000dfd5788860151825594840194600190910190840162000ddc565b508582101562000e1c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808201808211156200037f576200037f62000e2c565b60006001820162000e6d5762000e6d62000e2c565b5060010190565b60005b8381101562000e9157818101518382015260200162000e77565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835162000ed481601785016020880162000e74565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162000f0781602884016020880162000e74565b01602801949350505050565b6000815180845262000f2d81602086016020860162000e74565b601f01601f19169290920160200192915050565b6020815260006200065e602083018462000f13565b80820281158282048414176200037f576200037f62000e2c565b634e487b7160e01b600052603260045260246000fd5b60008162000f985762000f9862000e2c565b506000190190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009062000fd59083018462000f13565b9695505050505050565b60006020828403121562000ff257600080fd5b81516001600160e01b0319811681146200065e57600080fd5b818103818111156200037f576200037f62000e2c565b634e487b7160e01b600052603160045260246000fd5b6126d880620010476000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806355f804b31161013b578063a22cb465116100b8578063ce6df2b91161007c578063ce6df2b914610515578063d539139314610528578063d547741f1461054f578063d5abeb0114610562578063e985e9c51461056b57600080fd5b8063a22cb465146104a9578063b88d4fde146104bc578063c87b56dd146104cf578063c884ef83146104e2578063cbe242dd1461050257600080fd5b80638693da20116100ff5780638693da201461046a57806391d148541461047357806395d89b4114610486578063a0c6d4651461048e578063a217fddf146104a157600080fd5b806355f804b31461040b5780636352211e1461041e5780636f8b44b01461043157806370a0823114610444578063811d24371461045757600080fd5b80632f2ff15d116101c95780633ccfd60b1161018d5780633ccfd60b146103b857806342842e0e146103c0578063484b973c146103d35780634bf365df146103e65780634f6ccce7146103f857600080fd5b80632f2ff15d1461036a5780632f745c591461037d57806333bc1c5c1461039057806336568abe1461039d5780633887547e146103b057600080fd5b806318160ddd1161021057806318160ddd146102dd57806323b872dd146102ef578063248a9ca314610302578063285d70d4146103255780632a55205a1461033857600080fd5b806301ffc9a71461024d57806304634d8d1461027557806306fdde031461028a578063081812fc1461029f578063095ea7b3146102ca575b600080fd5b61026061025b366004611ea4565b6105a7565b60405190151581526020015b60405180910390f35b610288610283366004611edd565b6105b8565b005b6102926105d2565b60405161026c9190611f70565b6102b26102ad366004611f83565b610664565b6040516001600160a01b03909116815260200161026c565b6102886102d8366004611f9c565b61068b565b6008545b60405190815260200161026c565b6102886102fd366004611fc6565b6107a0565b6102e1610310366004611f83565b6000908152600a602052604090206001015490565b610288610333366004612012565b6107d1565b61034b61034636600461202d565b6107f7565b604080516001600160a01b03909316835260208301919091520161026c565b61028861037836600461204f565b6108a3565b6102e161038b366004611f9c565b6108c8565b600e546102609060ff1681565b6102886103ab36600461204f565b61095e565b6102886109dc565b6102886109fb565b6102886103ce366004611fc6565b610a32565b6102886103e1366004611f9c565b610a4d565b600e5461026090610100900460ff1681565b6102e1610406366004611f83565b610b0a565b610288610419366004612107565b610b9d565b6102b261042c366004611f83565b610bb4565b61028861043f366004611f83565b610c14565b6102e1610452366004612150565b610c25565b610288610465366004611f83565b610cab565b6102e1600f5481565b61026061048136600461204f565b610cbc565b610292610ce7565b61028861049c366004612012565b610cf6565b6102e1600081565b6102886104b736600461216b565b610d15565b6102886104ca366004612195565b610d20565b6102926104dd366004611f83565b610d58565b6102e16104f0366004612150565b60116020526000908152604090205481565b600e546102609062010000900460ff1681565b610288610523366004611f9c565b610dab565b6102e17f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61028861055d36600461204f565b610ed8565b6102e1600d5481565b610260610579366004612211565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006105b282610efd565b92915050565b60006105c381610f22565b6105cd8383610f2f565b505050565b6060600080546105e19061223b565b80601f016020809104026020016040519081016040528092919081815260200182805461060d9061223b565b801561065a5780601f1061062f5761010080835404028352916020019161065a565b820191906000526020600020905b81548152906001019060200180831161063d57829003601f168201915b5050505050905090565b600061066f8261102c565b506000908152600460205260409020546001600160a01b031690565b600061069682610bb4565b9050806001600160a01b0316836001600160a01b0316036107085760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061072457506107248133610579565b6107965760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016106ff565b6105cd838361108b565b6107aa33826110f9565b6107c65760405162461bcd60e51b81526004016106ff90612275565b6105cd838383611178565b60006107dc81610f22565b50600e80549115156101000261ff0019909216919091179055565b6000828152600c602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b031692820192909252829161086c575060408051808201909152600b546001600160a01b0381168252600160a01b90046001600160601b031660208201525b60208101516000906127109061088b906001600160601b0316876122d8565b61089591906122ef565b915196919550909350505050565b6000828152600a60205260409020600101546108be81610f22565b6105cd83836112e9565b60006108d383610c25565b82106109355760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016106ff565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6001600160a01b03811633146109ce5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106ff565b6109d8828261136f565b5050565b60006109e781610f22565b50600e805462ff0000191662010000179055565b6000610a0681610f22565b60405133904780156108fc02916000818181858888f193505050501580156109d8573d6000803e3d6000fd5b6105cd83838360405180602001604052806000815250610d20565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610a7781610f22565b600e5462010000900460ff1615610ac75760405162461bcd60e51b81526020600482015260146024820152731bdddb995c881b5a5b9d081c995b9bdd5b98d95960621b60448201526064016106ff565b6000610ad260085490565b905060015b838111610b0357610af185610aec8385612311565b6113d6565b80610afb81612324565b915050610ad7565b5050505050565b6000610b1560085490565b8210610b785760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016106ff565b60088281548110610b8b57610b8b61233d565b90600052602060002001549050919050565b6000610ba881610f22565b60106105cd83826123a1565b6000818152600260205260408120546001600160a01b0316806105b25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106ff565b6000610c1f81610f22565b50600d55565b60006001600160a01b038216610c8f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016106ff565b506001600160a01b031660009081526003602052604090205490565b6000610cb681610f22565b50600f55565b6000918252600a602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600180546105e19061223b565b6000610d0181610f22565b50600e805460ff1916911515919091179055565b6109d83383836113f0565b610d2a33836110f9565b610d465760405162461bcd60e51b81526004016106ff90612275565b610d52848484846114be565b50505050565b60606010610d65836114f1565b60405180604001604052806005815260200164173539b7b760d91b815250604051602001610d9593929190612461565b6040516020818303038152906040529050919050565b600e54610100900460ff161515600003610dd857604051630952c8a960e11b815260040160405180910390fd5b6000610de360085490565b600d54909150610df38383612311565b1115610e1257604051638353b89160e01b815260040160405180910390fd5b600e5460ff16610e3557604051630952c8a960e11b815260040160405180910390fd5b6001600160a01b038316600090815260116020526040902054600190610e5c908490612311565b1115610e7b57604051630ce2eab560e11b815260040160405180910390fd5b60015b828111610ea557610e9384610aec8385612311565b80610e9d81612324565b915050610e7e565b506001600160a01b03831660009081526011602052604081208054849290610ece908490612311565b9091555050505050565b6000828152600a6020526040902060010154610ef381610f22565b6105cd838361136f565b60006001600160e01b0319821663152a902d60e11b14806105b257506105b282611584565b610f2c81336115a9565b50565b6127106001600160601b0382161115610f9d5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084016106ff565b6001600160a01b038216610ff35760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016106ff565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600b55565b6000818152600260205260409020546001600160a01b0316610f2c5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106ff565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906110c082610bb4565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061110583610bb4565b9050806001600160a01b0316846001600160a01b0316148061114c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806111705750836001600160a01b031661116584610664565b6001600160a01b0316145b949350505050565b826001600160a01b031661118b82610bb4565b6001600160a01b0316146111b15760405162461bcd60e51b81526004016106ff906124fc565b6001600160a01b0382166112135760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106ff565b6112208383836001611602565b826001600160a01b031661123382610bb4565b6001600160a01b0316146112595760405162461bcd60e51b81526004016106ff906124fc565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6112f38282610cbc565b6109d8576000828152600a602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561132b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6113798282610cbc565b156109d8576000828152600a602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6109d882826040518060200160405280600081525061172f565b816001600160a01b0316836001600160a01b0316036114515760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106ff565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6114c9848484611178565b6114d584848484611762565b610d525760405162461bcd60e51b81526004016106ff90612541565b606060006114fe83611863565b600101905060008167ffffffffffffffff81111561151e5761151e61207b565b6040519080825280601f01601f191660200182016040528015611548576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461155257509392505050565b60006001600160e01b03198216637965db0b60e01b14806105b257506105b28261193b565b6115b38282610cbc565b6109d8576115c081611960565b6115cb836020611972565b6040516020016115dc929190612593565b60408051601f198184030181529082905262461bcd60e51b82526106ff91600401611f70565b60018111156116715760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b60648201526084016106ff565b816001600160a01b0385166116cd576116c881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6116f0565b836001600160a01b0316856001600160a01b0316146116f0576116f08582611b15565b6001600160a01b03841661170c5761170781611bb2565b610b03565b846001600160a01b0316846001600160a01b031614610b0357610b038482611c61565b6117398383611ca5565b6117466000848484611762565b6105cd5760405162461bcd60e51b81526004016106ff90612541565b60006001600160a01b0384163b1561185857604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906117a6903390899088908890600401612608565b6020604051808303816000875af19250505080156117e1575060408051601f3d908101601f191682019092526117de91810190612645565b60015b61183e573d80801561180f576040519150601f19603f3d011682016040523d82523d6000602084013e611814565b606091505b5080516000036118365760405162461bcd60e51b81526004016106ff90612541565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611170565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106118a25772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106118ce576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106118ec57662386f26fc10000830492506010015b6305f5e1008310611904576305f5e100830492506008015b612710831061191857612710830492506004015b6064831061192a576064830492506002015b600a83106105b25760010192915050565b60006001600160e01b0319821663780e9d6360e01b14806105b257506105b282611e3e565b60606105b26001600160a01b03831660145b606060006119818360026122d8565b61198c906002612311565b67ffffffffffffffff8111156119a4576119a461207b565b6040519080825280601f01601f1916602001820160405280156119ce576020820181803683370190505b509050600360fc1b816000815181106119e9576119e961233d565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611a1857611a1861233d565b60200101906001600160f81b031916908160001a9053506000611a3c8460026122d8565b611a47906001612311565b90505b6001811115611abf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a7b57611a7b61233d565b1a60f81b828281518110611a9157611a9161233d565b60200101906001600160f81b031916908160001a90535060049490941c93611ab881612662565b9050611a4a565b508315611b0e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106ff565b9392505050565b60006001611b2284610c25565b611b2c9190612679565b600083815260076020526040902054909150808214611b7f576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611bc490600190612679565b60008381526009602052604081205460088054939450909284908110611bec57611bec61233d565b906000526020600020015490508060088381548110611c0d57611c0d61233d565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611c4557611c4561268c565b6001900381819060005260206000200160009055905550505050565b6000611c6c83610c25565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611cfb5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106ff565b6000818152600260205260409020546001600160a01b031615611d605760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106ff565b611d6e600083836001611602565b6000818152600260205260409020546001600160a01b031615611dd35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106ff565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160e01b031982166380ac58cd60e01b1480611e6f57506001600160e01b03198216635b5e139f60e01b145b806105b257506301ffc9a760e01b6001600160e01b03198316146105b2565b6001600160e01b031981168114610f2c57600080fd5b600060208284031215611eb657600080fd5b8135611b0e81611e8e565b80356001600160a01b0381168114611ed857600080fd5b919050565b60008060408385031215611ef057600080fd5b611ef983611ec1565b915060208301356001600160601b0381168114611f1557600080fd5b809150509250929050565b60005b83811015611f3b578181015183820152602001611f23565b50506000910152565b60008151808452611f5c816020860160208601611f20565b601f01601f19169290920160200192915050565b602081526000611b0e6020830184611f44565b600060208284031215611f9557600080fd5b5035919050565b60008060408385031215611faf57600080fd5b611fb883611ec1565b946020939093013593505050565b600080600060608486031215611fdb57600080fd5b611fe484611ec1565b9250611ff260208501611ec1565b9150604084013590509250925092565b80358015158114611ed857600080fd5b60006020828403121561202457600080fd5b611b0e82612002565b6000806040838503121561204057600080fd5b50508035926020909101359150565b6000806040838503121561206257600080fd5b8235915061207260208401611ec1565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156120ac576120ac61207b565b604051601f8501601f19908116603f011681019082821181831017156120d4576120d461207b565b816040528093508581528686860111156120ed57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561211957600080fd5b813567ffffffffffffffff81111561213057600080fd5b8201601f8101841361214157600080fd5b61117084823560208401612091565b60006020828403121561216257600080fd5b611b0e82611ec1565b6000806040838503121561217e57600080fd5b61218783611ec1565b915061207260208401612002565b600080600080608085870312156121ab57600080fd5b6121b485611ec1565b93506121c260208601611ec1565b925060408501359150606085013567ffffffffffffffff8111156121e557600080fd5b8501601f810187136121f657600080fd5b61220587823560208401612091565b91505092959194509250565b6000806040838503121561222457600080fd5b61222d83611ec1565b915061207260208401611ec1565b600181811c9082168061224f57607f821691505b60208210810361226f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176105b2576105b26122c2565b60008261230c57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156105b2576105b26122c2565b600060018201612336576123366122c2565b5060010190565b634e487b7160e01b600052603260045260246000fd5b601f8211156105cd57600081815260208120601f850160051c8101602086101561237a5750805b601f850160051c820191505b8181101561239957828155600101612386565b505050505050565b815167ffffffffffffffff8111156123bb576123bb61207b565b6123cf816123c9845461223b565b84612353565b602080601f83116001811461240457600084156123ec5750858301515b600019600386901b1c1916600185901b178555612399565b600085815260208120601f198616915b8281101561243357888601518255948401946001909101908401612414565b50858210156124515787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600080855461246f8161223b565b60018281168015612487576001811461249c576124cb565b60ff19841687528215158302870194506124cb565b8960005260208060002060005b858110156124c25781548a8201529084019082016124a9565b50505082870194505b5050505084516124df818360208901611f20565b84519101906124f2818360208801611f20565b0195945050505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516125cb816017850160208801611f20565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516125fc816028840160208801611f20565b01602801949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061263b90830184611f44565b9695505050505050565b60006020828403121561265757600080fd5b8151611b0e81611e8e565b600081612671576126716122c2565b506000190190565b818103818111156105b2576105b26122c2565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220185e53819298f92431ad68578cad9ebb5ad971ece6ccc5c64d6be58f31a2acb664736f6c634300081400334552433732313a207472616e7366657220746f206e6f6e20455243373231526568747470733a2f2f626166796265696333367270737268736b6b636569706e376d6870796734336e71696336663671663261656e6279687a6f7564667a7632676a69692e697066732e6e667473746f726167652e6c696e6b2f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6