Overview ERC721
Total Supply:
0 Tst

Profile Summary
Blockchain:
Sepolia (11155111)

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

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Created At:
Tue, 06 Aug 2024 03:55:48 GMT
ERC721Token.sol
contracts
nfts
ERC721Token.sol


Contract ABI
[
  {
    "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": [
      {
        "components": [
          {
            "internalType": "uint128",
            "name": "startTokenId",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "endTokenId",
            "type": "uint128"
          },
          {
            "internalType": "string",
            "name": "uri",
            "type": "string"
          }
        ],
        "indexed": false,
        "internalType": "struct ERC721Token.BaseURI[]",
        "name": "newBaseURIs",
        "type": "tuple[]"
      }
    ],
    "name": "BaseURIUpdated",
    "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": true,
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "Claim",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "string",
        "name": "newContractURI",
        "type": "string"
      }
    ],
    "name": "ContractURIUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "newRecipient",
        "type": "address"
      }
    ],
    "name": "FeeRecipientUpdated",
    "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": true,
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "ProtocolFeeClaimed",
    "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": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Refund",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint32",
        "name": "newRefundPeriod",
        "type": "uint32"
      }
    ],
    "name": "RefundPeriodUpdated",
    "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": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "claim",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "claimProtocolFee",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "fromIndex",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "count",
        "type": "uint256"
      }
    ],
    "name": "claimRefundedTokens",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "contractURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "elementDrop",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "feeClaimed",
    "outputs": [
      {
        "internalType": "uint128",
        "name": "",
        "type": "uint128"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "feeRecipient",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "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": "getBaseURIs",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint128",
            "name": "startTokenId",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "endTokenId",
            "type": "uint128"
          },
          {
            "internalType": "string",
            "name": "uri",
            "type": "string"
          }
        ],
        "internalType": "struct ERC721Token.BaseURI[]",
        "name": "uris",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "fromIndex",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "count",
        "type": "uint256"
      }
    ],
    "name": "getRefundedTokens",
    "outputs": [
      {
        "internalType": "uint256[]",
        "name": "tokenIds",
        "type": "uint256[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getTransferValidator",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_tokenName",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_tokenSymbol",
        "type": "string"
      },
      {
        "internalType": "address",
        "name": "_ownerAddress",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_elementDrop",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_transferValidator",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_protocolRecipient",
        "type": "address"
      },
      {
        "internalType": "uint16",
        "name": "_protocolPoint",
        "type": "uint16"
      }
    ],
    "name": "initialize",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "initialized",
    "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": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "mint",
    "outputs": [],
    "stateMutability": "payable",
    "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": "protocolFeeClaimed",
    "outputs": [
      {
        "internalType": "uint128",
        "name": "",
        "type": "uint128"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "protocolPoint",
    "outputs": [
      {
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "protocolRecipient",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "provenanceHash",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "refund",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "refundEndTime",
    "outputs": [
      {
        "internalType": "uint64",
        "name": "",
        "type": "uint64"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "refundPeriod",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "refundedTokensLength",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "refunds",
    "outputs": [
      {
        "internalType": "uint128",
        "name": "price",
        "type": "uint128"
      },
      {
        "internalType": "uint64",
        "name": "refundEndTime",
        "type": "uint64"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "setApprovalForAll",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint128",
            "name": "startTokenId",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "endTokenId",
            "type": "uint128"
          },
          {
            "internalType": "string",
            "name": "uri",
            "type": "string"
          }
        ],
        "internalType": "struct ERC721Token.BaseURI[]",
        "name": "uris",
        "type": "tuple[]"
      }
    ],
    "name": "setBaseURIs",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "uri",
        "type": "string"
      }
    ],
    "name": "setContractURI",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newFeeRecipient",
        "type": "address"
      }
    ],
    "name": "setFeeRecipient",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "newMaxSupply",
        "type": "uint256"
      }
    ],
    "name": "setMaxSupply",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "newProvenanceHash",
        "type": "bytes32"
      }
    ],
    "name": "setProvenanceHash",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint32",
        "name": "newRefundPeriod",
        "type": "uint32"
      }
    ],
    "name": "setRefundPeriod",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newValidator",
        "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"
  },
  {
    "inputs": [],
    "name": "transferValidator",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]


Contract Creation Code
60806040523480156200001157600080fd5b5060408051602080820183526000808352835191820190935282815290916200003b838262000168565b5060016200004a828262000168565b50505062000067620000616200006d60201b60201c565b62000071565b62000234565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000ee57607f821691505b6020821081036200010f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200016357600081815260208120601f850160051c810160208610156200013e5750805b601f850160051c820191505b818110156200015f578281556001016200014a565b5050505b505050565b81516001600160401b03811115620001845762000184620000c3565b6200019c81620001958454620000d9565b8462000115565b602080601f831160018114620001d45760008415620001bb5750858301515b600019600386901b1c1916600185901b1785556200015f565b600085815260208120601f198616915b828110156200020557888601518255948401946001909101908401620001e4565b5085821015620002245787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6142ff80620002446000396000f3fe6080604052600436106102935760003560e01c806373fddd161161015a578063c6ab67a3116100c1578063e8a3d4851161007a578063e8a3d4851461088d578063e985e9c5146108a2578063ef56e2e5146108eb578063f2fde38b1461090b578063fcddb5af1461092b578063ff0fa4551461094d57600080fd5b8063c6ab67a314610776578063c87b56dd1461078c578063d5abeb01146107ac578063d84795e5146107d1578063e36bd0f3146107fe578063e74b981b1461086d57600080fd5b80639f65a144116101135780639f65a14414610693578063a22cb465146106c8578063a6a3b5b4146106e8578063a9fc664e14610721578063aaf4a96614610741578063b88d4fde1461075657600080fd5b806373fddd16146105c1578063866fa387146106005780638da5cb5b14610620578063938e3d7b1461063e578063941f5d251461065e57806395d89b411461067e57600080fd5b806323b872dd116101fe5780634e71d92d116101b75780634e71d92d146105175780636352211e1461052c5780636f8b44b01461054c57806370a082311461056c578063715018a61461058c57806371f4b8e8146105a157600080fd5b806323b872dd14610464578063278ecde11461048457806329e38d5e146104a457806340c10f19146104c457806342842e0e146104d757806346904840146104f757600080fd5b8063114d81fa11610250578063114d81fa14610387578063149ae339146103c6578063158ef93e146103e557806318160ddd146104065780631875487714610424578063203511171461044457600080fd5b806301ffc9a71461029857806306fdde03146102cd578063081812fc146102ef578063095ea7b314610327578063098144d414610349578063099b6bfa14610367575b600080fd5b3480156102a457600080fd5b506102b86102b336600461372b565b61096d565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e26109bf565b6040516102c49190613798565b3480156102fb57600080fd5b5061030f61030a3660046137ab565b610a51565b6040516001600160a01b0390911681526020016102c4565b34801561033357600080fd5b506103476103423660046137e0565b610a78565b005b34801561035557600080fd5b50600e546001600160a01b031661030f565b34801561037357600080fd5b506103476103823660046137ab565b610b92565b34801561039357600080fd5b506010546103ae90600160801b90046001600160801b031681565b6040516001600160801b0390911681526020016102c4565b3480156103d257600080fd5b50600b545b6040519081526020016102c4565b3480156103f157600080fd5b506011546102b890600160b01b900460ff1681565b34801561041257600080fd5b50600a546001600160401b03166103d7565b34801561043057600080fd5b5061034761043f36600461380a565b610cab565b34801561045057600080fd5b5061034761045f36600461392c565b610ee9565b34801561047057600080fd5b5061034761047f366004613a44565b61115e565b34801561049057600080fd5b5061034761049f3660046137ab565b61118f565b3480156104b057600080fd5b50600e5461030f906001600160a01b031681565b6103476104d23660046137e0565b61140d565b3480156104e357600080fd5b506103476104f2366004613a44565b6115b0565b34801561050357600080fd5b50600f5461030f906001600160a01b031681565b34801561052357600080fd5b506103476115cb565b34801561053857600080fd5b5061030f6105473660046137ab565b611a80565b34801561055857600080fd5b506103476105673660046137ab565b611ae0565b34801561057857600080fd5b506103d7610587366004613a80565b611d18565b34801561059857600080fd5b50610347611d9e565b3480156105ad57600080fd5b506010546103ae906001600160801b031681565b3480156105cd57600080fd5b50600a546105e890600160801b90046001600160401b031681565b6040516001600160401b0390911681526020016102c4565b34801561060c57600080fd5b50600c5461030f906001600160a01b031681565b34801561062c57600080fd5b506006546001600160a01b031661030f565b34801561064a57600080fd5b50610347610659366004613a9b565b611db2565b34801561066a57600080fd5b5060115461030f906001600160a01b031681565b34801561068a57600080fd5b506102e2611f15565b34801561069f57600080fd5b506011546106b590600160a01b900461ffff1681565b60405161ffff90911681526020016102c4565b3480156106d457600080fd5b506103476106e3366004613b0c565b611f24565b3480156106f457600080fd5b50600a5461070c90600160c01b900463ffffffff1681565b60405163ffffffff90911681526020016102c4565b34801561072d57600080fd5b5061034761073c366004613a80565b611f2f565b34801561074d57600080fd5b50610347611ff2565b34801561076257600080fd5b50610347610771366004613b48565b61230d565b34801561078257600080fd5b506103d7600d5481565b34801561079857600080fd5b506102e26107a73660046137ab565b612345565b3480156107b857600080fd5b50600a54600160401b90046001600160401b03166103d7565b3480156107dd57600080fd5b506107f16107ec366004613bc3565b61253d565b6040516102c49190613be5565b34801561080a57600080fd5b506108466108193660046137ab565b6012602052600090815260409020546001600160801b03811690600160801b90046001600160401b031682565b604080516001600160801b0390931683526001600160401b039091166020830152016102c4565b34801561087957600080fd5b50610347610888366004613a80565b612601565b34801561089957600080fd5b506102e26126b8565b3480156108ae57600080fd5b506102b86108bd366004613c29565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156108f757600080fd5b50610347610906366004613c5c565b612746565b34801561091757600080fd5b50610347610926366004613a80565b6129fc565b34801561093757600080fd5b50610940612a33565b6040516102c49190613c8f565b34801561095957600080fd5b50610347610968366004613d1a565b612bc7565b60006001600160e01b031982166380ac58cd60e01b148061099e57506001600160e01b03198216635b5e139f60e01b145b806109b957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600780546109ce90613ddb565b80601f01602080910402602001604051908101604052809291908181526020018280546109fa90613ddb565b8015610a475780601f10610a1c57610100808354040283529160200191610a47565b820191906000526020600020905b815481529060010190602001808311610a2a57829003601f168201915b5050505050905090565b6000610a5c82612dda565b506000908152600460205260409020546001600160a01b031690565b6000610a8382611a80565b9050806001600160a01b0316836001600160a01b031603610af55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610b115750610b1181336108bd565b610b835760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610aec565b610b8d8383612e39565b505050565b6006546001600160a01b0316331480610bca57506006546001600160a01b031632148015610bca5750600c546001600160a01b031633145b610be65760405162461bcd60e51b8152600401610aec90613e15565b80600d5414610ca857600a546001600160401b031615610c645760405162461bcd60e51b815260206004820152603360248201527f50726f76656e616e6365486173682063616e6e6f7420626520736574206966206044820152721b5a5b9d1a5b99c81a185cc81cdd185c9d1959606a1b6064820152608401610aec565b600d80549082905560408051828152602081018490527f7c22004198bf87da0f0dab623c72e66ca1200f4454aa3b9ca30f436275428b7c91015b60405180910390a1505b50565b6006546001600160a01b031632148015610ccf5750600c546001600160a01b031633145b610d1b5760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c79206f776e65722066726f6d20656c656d656e7444726f7000000000006044820152606401610aec565b600a5463ffffffff828116600160c01b9092041614610ca857600a546001600160401b031615610dab5760405162461bcd60e51b815260206004820152603560248201527f54686520726566756e64506572696f642063616e6e6f7420626520736574206960448201527419881b5a5b9d1a5b99c81a185cc81cdd185c9d1959605a1b6064820152608401610aec565b63ffffffff811615610e8e5762093a808163ffffffff161015610e245760405162461bcd60e51b815260206004820152602b60248201527f54686520726566756e64506572696f642063616e6e6f74206265206c6573732060448201526a7468616e2037206461797360a81b6064820152608401610aec565b6301e133808163ffffffff161115610e8e5760405162461bcd60e51b815260206004820152602760248201527f54686520726566756e64506572696f642063616e6e6f742065786365656420336044820152663635206461797360c81b6064820152608401610aec565b600a805463ffffffff60c01b1916600160c01b63ffffffff8416908102919091179091556040519081527ff78158b103184b8d1b2d0a54da298ab230c9cce285bee911d434e25dd37a78e1906020015b60405180910390a150565b6006546001600160a01b0316331480610f2157506006546001600160a01b031632148015610f215750600c546001600160a01b031633145b610f3d5760405162461bcd60e51b8152600401610aec90613e15565b80516013541115610fb6578051601354600091610f5991613e6f565b905060005b81811015610fb3576013805480610f7757610f77613e82565b60008281526020812060026000199093019283020181815590610f9d60018301826136cb565b5050905580610fab81613e98565b915050610f5e565b50505b60135460005b82518110156110ce578181101561104a57828181518110610fdf57610fdf613eb1565b602002602001015160138281548110610ffa57610ffa613eb1565b60009182526020918290208351928401516001600160801b03908116600160801b029316929092176002909102909101908155604082015160018201906110419082613f0d565b509050506110bc565b601383828151811061105e5761105e613eb1565b6020908102919091018101518254600181810185556000948552938390208251938301516001600160801b03908116600160801b029416939093176002909102909201918255604081015190928201906110b89082613f0d565b5050505b806110c681613e98565b915050610fbc565b507f19584d35e4c6095f3943641c96c284af1f2b8404568e142f501a0093bf5adc95826040516110fe9190613c8f565b60405180910390a1600a546001600160401b03161561115a57600a5460408051600181526001600160401b0390921660208301527f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c9101610c9e565b5050565b6111683382612ea7565b6111845760405162461bcd60e51b8152600401610aec90613fcc565b610b8d838383612f26565b61119881611a80565b6001600160a01b0316336001600160a01b0316146111f85760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420746865206f776e6572206f662074686520746f6b656e4964000000006044820152606401610aec565b3033036112475760405162461bcd60e51b815260206004820152601e60248201527f43616c6c65722063616e6e6f74206265206164647265737328746869732900006044820152606401610aec565b6000818152601260209081526040918290208251808401909352546001600160801b038116808452600160801b9091046001600160401b0316918301919091526112c75760405162461bcd60e51b8152602060048201526011602482015270139bdd1a1a5b99c81d1bc81c99599d5b99607a1b6044820152606401610aec565b80602001516001600160401b031642106113145760405162461bcd60e51b815260206004820152600e60248201526d1499599d5b9908195e1c1a5c995960921b6044820152606401610aec565b61131f333084612f26565b80516040516001600160801b039091168152339083907f21e12a7cad0da5928167e1084ea4d5fdf8d9af66657a2543a9ac76a0ca0814779060200160405180910390a360008281526012602052604080822080546001600160c01b03191690558251905133916001600160801b0316908381818185875af1925050503d80600081146113c7576040519150601f19603f3d011682016040523d82523d6000602084013e6113cc565b606091505b5050905080610b8d5760405162461bcd60e51b815260206004820152600d60248201526c1499599d5b990819985a5b1959609a1b6044820152606401610aec565b600c546001600160a01b031633146114675760405162461bcd60e51b815260206004820152601960248201527f4f6e6c7920656c656d656e7444726f702063616e206d696e74000000000000006044820152606401610aec565b600a546001600160401b03600160401b820481169116106114ca5760405162461bcd60e51b815260206004820152601d60248201527f4d6178696d756d206d696e74207175616e7469747920726561636865640000006044820152606401610aec565b600a80546001600160401b038082166001011667ffffffffffffffff199091161790556114f782826130cd565b341561115a57600a544263ffffffff600160c01b83041601906001600160401b03600160801b9091048116908216111561155157600a805467ffffffffffffffff60801b1916600160801b6001600160401b038416021790555b6040805180820182526001600160801b0334811682526001600160401b0393841660208084019182526000878152601290915293909320915182549351909416600160801b026001600160c01b03199093169316929092171790555050565b610b8d8383836040518060200160405280600081525061230d565b600f546000906001600160a01b03166115ef576006546001600160a01b03166115fc565b600f546001600160a01b03165b9050336001600160a01b038216148061161f57506006546001600160a01b031633145b8061163457506011546001600160a01b031633145b61168a5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920726563697069656e74206f72206f776e65722063616e20636c61696044820152606d60f81b6064820152608401610aec565b600a54600160801b90046001600160401b03164210156116e55760405162461bcd60e51b81526020600482015260166024820152752932b33ab732103832b934b7b2103737ba1037bb32b960511b6044820152606401610aec565b6000471161172c5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610aec565b6010546000904790611750906001600160801b03600160801b82048116911661401a565b6001600160801b03166117639190614041565b6011549091506000906001600160a01b03161580159061178f5750601154600160a01b900461ffff1615155b156118ff57601154612710906117b090600160a01b900461ffff1684614054565b6117ba9190614081565b601054909150600160801b90046001600160801b03168111156118ff576010546000906117f790600160801b90046001600160801b031683613e6f565b601080546001600160801b03808616600160801b0291161790556011546040519192506000916001600160a01b0390911690839060006040518083038185875af1925050503d8060008114611868576040519150601f19603f3d011682016040523d82523d6000602084013e61186d565b606091505b50509050806118ba5760405162461bcd60e51b815260206004820152601960248201527810db185a5b481c1c9bdd1bd8dbdb081999594819985a5b1959603a1b6044820152606401610aec565b60115460405133815283916001600160a01b0316907ff631b6a64d47338e0ac84d8f71a4dc0df8ce444ed6ff8041d2b65de41cd3067f9060200160405180910390a350505b600061190b8284613e6f565b6010549091506001600160801b031681116119685760405162461bcd60e51b815260206004820152601960248201527f4e6f2066656520617661696c61626c6520746f20636c61696d000000000000006044820152606401610aec565b601054600090611981906001600160801b031683613e6f565b601080546fffffffffffffffffffffffffffffffff19166001600160801b0385161790556040519091506000906001600160a01b0387169083908381818185875af1925050503d80600081146119f3576040519150601f19603f3d011682016040523d82523d6000602084013e6119f8565b606091505b5050905080611a385760405162461bcd60e51b815260206004820152600c60248201526b10db185a5b4819985a5b195960a21b6044820152606401610aec565b60405133815282906001600160a01b038816907fa8363d922dc171313585ca13972873c5732013dc819db64b51ba8b1aa1a1e3e29060200160405180910390a3505050505050565b6000818152600260205260408120546001600160a01b0316806109b95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610aec565b6006546001600160a01b031632148015611b045750600c546001600160a01b031633145b611b505760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c79206f776e65722066726f6d20656c656d656e7444726f7000000000006044820152606401610aec565b600a54600160401b90046001600160401b03168114610ca8576001600160401b03811115611bc05760405162461bcd60e51b815260206004820152601e60248201527f4d6178537570706c792063616e6e6f74206578636565642075696e74363400006044820152606401610aec565b600a546001600160401b031615611cbe57600a546001600160401b0316811015611c3e5760405162461bcd60e51b815260206004820152602960248201527f4d6178537570706c792063616e6e6f74206265206c657373207468616e20746f60448201526874616c537570706c7960b81b6064820152608401610aec565b600a54600160401b90046001600160401b03168110611cbe5760405162461bcd60e51b815260206004820152603660248201527f4d6178537570706c792063616e206f6e6c7920626520646563726561736564206044820152751a59881b5a5b9d1a5b99c81a185cc81cdd185c9d195960521b6064820152608401610aec565b600a80546fffffffffffffffff00000000000000001916600160401b6001600160401b038416021790556040518181527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c90602001610ede565b60006001600160a01b038216611d825760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610aec565b506001600160a01b031660009081526003602052604090205490565b611da661321b565b611db06000613275565b565b6006546001600160a01b0316331480611dea57506006546001600160a01b031632148015611dea5750600c546001600160a01b031633145b611e065760405162461bcd60e51b8152600401610aec90613e15565b600060098054611e1590613ddb565b80601f0160208091040260200160405190810160405280929190818152602001828054611e4190613ddb565b8015611e8e5780601f10611e6357610100808354040283529160200191611e8e565b820191906000526020600020905b815481529060010190602001808311611e7157829003601f168201915b5050835193945050505082141580611ec457508282604051611eb1929190614095565b6040518091039020818051906020012014155b15610b8d576009611ed68385836140a5565b507f905d981207a7d0b6c62cc46ab0be2a076d0298e4a86d0ab79882dbd01ac373788383604051611f08929190614165565b60405180910390a1505050565b6060600880546109ce90613ddb565b61115a3383836132c7565b6006546001600160a01b0316331480611f6757506006546001600160a01b031632148015611f675750600c546001600160a01b031633145b611f835760405162461bcd60e51b8152600401610aec90613e15565b600e546001600160a01b03828116911614610ca857600e80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac9101610c9e565b600a54600160801b90046001600160401b031642101561204d5760405162461bcd60e51b81526020600482015260166024820152752932b33ab732103832b934b7b2103737ba1037bb32b960511b6044820152606401610aec565b600047116120945760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610aec565b6011546001600160a01b0316158015906120ba5750601154600160a01b900461ffff1615155b6121105760405162461bcd60e51b815260206004820152602160248201527f5468652070726f746f636f6c2066656520686173206e6f74206265656e2073656044820152601d60fa1b6064820152608401610aec565b6010546000904790612134906001600160801b03600160801b82048116911661401a565b6001600160801b03166121479190614041565b6011549091506000906127109061216990600160a01b900461ffff1684614054565b6121739190614081565b601054909150600160801b90046001600160801b031681116121e25760405162461bcd60e51b815260206004820152602260248201527f4e6f2070726f746f636f6c2066656520617661696c61626c6520746f20636c61604482015261696d60f01b6064820152608401610aec565b60105460009061220290600160801b90046001600160801b031683613e6f565b601080546001600160801b03808616600160801b0291161790556011546040519192506000916001600160a01b0390911690839060006040518083038185875af1925050503d8060008114612273576040519150601f19603f3d011682016040523d82523d6000602084013e612278565b606091505b50509050806122c55760405162461bcd60e51b815260206004820152601960248201527810db185a5b481c1c9bdd1bd8dbdb081999594819985a5b1959603a1b6044820152606401610aec565b60115460405133815283916001600160a01b0316907ff631b6a64d47338e0ac84d8f71a4dc0df8ce444ed6ff8041d2b65de41cd3067f9060200160405180910390a350505050565b6123173383612ea7565b6123335760405162461bcd60e51b8152600401610aec90613fcc565b61233f84848484613395565b50505050565b606061235082612dda565b60005b601354811015612527576013818154811061237057612370613eb1565b60009182526020909120600290910201546001600160801b031683108015906123cc5750601381815481106123a7576123a7613eb1565b6000918252602090912060029091020154600160801b90046001600160801b03168311155b15612515576000601382815481106123e6576123e6613eb1565b9060005260206000209060020201600101805461240290613ddb565b80601f016020809104026020016040519081016040528092919081815260200182805461242e90613ddb565b801561247b5780601f106124505761010080835404028352916020019161247b565b820191906000526020600020905b81548152906001019060200180831161245e57829003601f168201915b505050505090506000815111156124fe57806001825161249b9190613e6f565b815181106124ab576124ab613eb1565b01602001516001600160f81b031916602f60f81b036124f757806124ce856133c8565b6040516020016124df929190614194565b60405160208183030381529060405292505050919050565b9392505050565b505060408051602081019091526000815292915050565b8061251f81613e98565b915050612353565b5050604080516020810190915260008152919050565b600b54606090808410156125605780838501111561255b5783810392505b612565565b600092505b826001600160401b0381111561257d5761257d613830565b6040519080825280602002602001820160405280156125a6578160200160208202803683370190505b50915060005b838110156125f957600b818601815481106125c9576125c9613eb1565b90600052602060002001548382815181106125e6576125e6613eb1565b60209081029190910101526001016125ac565b505092915050565b6006546001600160a01b031633148061263957506006546001600160a01b0316321480156126395750600c546001600160a01b031633145b6126555760405162461bcd60e51b8152600401610aec90613e15565b600f546001600160a01b03828116911614610ca857600f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f7a7b5a0a132f9e0581eb8527f66eae9ee89c2a3e79d4ac7e41a1f1f4d48a7fc290602001610ede565b600980546126c590613ddb565b80601f01602080910402602001604051908101604052809291908181526020018280546126f190613ddb565b801561273e5780601f106127135761010080835404028352916020019161273e565b820191906000526020600020905b81548152906001019060200180831161272157829003601f168201915b505050505081565b61274e61321b565b306001600160a01b038416036127b05760405162461bcd60e51b815260206004820152602160248201527f526563697069656e742063616e6e6f74206265206164647265737328746869736044820152602960f81b6064820152608401610aec565b6001600160a01b0383166127c2573392505b600b54806128125760405162461bcd60e51b815260206004820152601c60248201527f54686520726566756e64656420746f6b656e7320697320656d707479000000006044820152606401610aec565b8083106128615760405162461bcd60e51b815260206004820152601b60248201527f496e76616c696420706172616d657465722066726f6d496e64657800000000006044820152606401610aec565b600082116128a85760405162461bcd60e51b8152602060048201526014602482015273436f756e742063616e6e6f74206265207a65726f60601b6044820152606401610aec565b828201818111156128bb57508281039150805b835b818110156128f5576128ed3087600b84815481106128dd576128dd613eb1565b9060005260206000200154612f26565b6001016128bd565b5081838201101561295e5782820360005b8481101561295757600b8183018154811061292357612923613eb1565b9060005260206000200154600b8288018154811061294357612943613eb1565b600091825260209091200155600101612906565b50506129b8565b80820360005b818110156129b557600b8184018154811061298157612981613eb1565b9060005260206000200154600b828801815481106129a1576129a1613eb1565b600091825260209091200155600101612964565b50505b60005b838110156129f457600b8054806129d4576129d4613e82565b6000828152602081208201600019908101919091550190556001016129bb565b505050505050565b612a0461321b565b6001600160a01b038116612a2a5760405162461bcd60e51b8152600401610aec906141c3565b610ca881613275565b6013546060906001600160401b03811115612a5057612a50613830565b604051908082528060200260200182016040528015612a9d57816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081612a6e5790505b50905060005b8151811015612bc35760138181548110612abf57612abf613eb1565b600091825260209182902060408051606081018252600290930290910180546001600160801b038082168552600160801b909104169383019390935260018301805492939291840191612b1190613ddb565b80601f0160208091040260200160405190810160405280929190818152602001828054612b3d90613ddb565b8015612b8a5780601f10612b5f57610100808354040283529160200191612b8a565b820191906000526020600020905b815481529060010190602001808311612b6d57829003601f168201915b505050505081525050828281518110612ba557612ba5613eb1565b60200260200101819052508080612bbb90613e98565b915050612aa3565b5090565b601154600160b01b900460ff1615612c175760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610aec565b6011805460ff60b01b1916600160b01b1790556000612c3e6006546001600160a01b031690565b6001600160a01b031614612c7157612c5461321b565b6001600160a01b03851615612c6c57612c6c85613275565b612ca0565b6001600160a01b038516612c975760405162461bcd60e51b8152600401610aec906141c3565b612ca085613275565b6007612cac8882613f0d565b506008612cb98782613f0d565b50600c80546001600160a01b0319166001600160a01b03861617905561271061ffff82161115612d425760405162461bcd60e51b815260206004820152602e60248201527f5468652070726f746f636f6c506f696e742063616e6e6f74206265206772656160448201526d0746572207468616e2031303030360941b6064820152608401610aec565b601180546001600160a01b038481166001600160b01b031990921691909117600160a01b61ffff85160217909155831615612dd157600e80546001600160a01b0319166001600160a01b038516908117909155604080516000815260208101929092527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a15b50505050505050565b6000818152600260205260409020546001600160a01b0316610ca85760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610aec565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612e6e82611a80565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080612eb383611a80565b9050806001600160a01b0316846001600160a01b03161480612efa57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80612f1e5750836001600160a01b0316612f1384610a51565b6001600160a01b0316145b949350505050565b826001600160a01b0316612f3982611a80565b6001600160a01b031614612f9d5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610aec565b6001600160a01b038216612fff5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610aec565b61300a8383836134c8565b613015600082612e39565b6001600160a01b038316600090815260036020526040812080546001929061303e908490613e6f565b90915550506001600160a01b038216600090815260036020526040812080546001929061306c908490614041565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b0382166131235760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610aec565b6000818152600260205260409020546001600160a01b0316156131885760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aec565b613194600083836134c8565b6001600160a01b03821660009081526003602052604081208054600192906131bd908490614041565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6006546001600160a01b03163314611db05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aec565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036133285760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aec565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6133a0848484612f26565b6133ac848484846135ca565b61233f5760405162461bcd60e51b8152600401610aec90614209565b6060816000036133ef5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613419578061340381613e98565b91506134129050600a83614081565b91506133f3565b6000816001600160401b0381111561343357613433613830565b6040519080825280601f01601f19166020018201604052801561345d576020820181803683370190505b5090505b8415612f1e57613472600183613e6f565b915061347f600a8661425b565b61348a906030614041565b60f81b81838151811061349f5761349f613eb1565b60200101906001600160f81b031916908160001a9053506134c1600a86614081565b9450613461565b306001600160a01b0383160361350f57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901555050565b6001600160a01b0383161580159061352f57506001600160a01b03821615155b15610b8d576001600160a01b0383163314610b8d57600e546001600160a01b0316801561233f5760405163657711f560e11b81523360048201526001600160a01b03858116602483015284811660448301526064820184905282169063caee23ea9060840160006040518083038186803b1580156135ac57600080fd5b505afa1580156135c0573d6000803e3d6000fd5b5050505050505050565b60006001600160a01b0384163b156136c057604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061360e90339089908890889060040161426f565b6020604051808303816000875af1925050508015613649575060408051601f3d908101601f19168201909252613646918101906142ac565b60015b6136a6573d808015613677576040519150601f19603f3d011682016040523d82523d6000602084013e61367c565b606091505b50805160000361369e5760405162461bcd60e51b8152600401610aec90614209565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612f1e565b506001949350505050565b5080546136d790613ddb565b6000825580601f106136e7575050565b601f016020900490600052602060002090810190610ca891905b80821115612bc35760008155600101613701565b6001600160e01b031981168114610ca857600080fd5b60006020828403121561373d57600080fd5b81356124f781613715565b60005b8381101561376357818101518382015260200161374b565b50506000910152565b60008151808452613784816020860160208601613748565b601f01601f19169290920160200192915050565b6020815260006124f7602083018461376c565b6000602082840312156137bd57600080fd5b5035919050565b80356001600160a01b03811681146137db57600080fd5b919050565b600080604083850312156137f357600080fd5b6137fc836137c4565b946020939093013593505050565b60006020828403121561381c57600080fd5b813563ffffffff811681146124f757600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561386857613868613830565b60405290565b604051601f8201601f191681016001600160401b038111828210171561389657613896613830565b604052919050565b80356001600160801b03811681146137db57600080fd5b60006001600160401b038311156138ce576138ce613830565b6138e1601f8401601f191660200161386e565b90508281528383830111156138f557600080fd5b828260208301376000602084830101529392505050565b600082601f83011261391d57600080fd5b6124f7838335602085016138b5565b6000602080838503121561393f57600080fd5b82356001600160401b038082111561395657600080fd5b818501915085601f83011261396a57600080fd5b81358181111561397c5761397c613830565b8060051b61398b85820161386e565b91825283810185019185810190898411156139a557600080fd5b86860192505b83831015613a37578235858111156139c35760008081fd5b86016060818c03601f19018113156139db5760008081fd5b6139e3613846565b6139ee8a840161389e565b815260406139fd81850161389e565b828c0152918301359188831115613a145760008081fd5b613a228e8c8587010161390c565b908201528452505091860191908601906139ab565b9998505050505050505050565b600080600060608486031215613a5957600080fd5b613a62846137c4565b9250613a70602085016137c4565b9150604084013590509250925092565b600060208284031215613a9257600080fd5b6124f7826137c4565b60008060208385031215613aae57600080fd5b82356001600160401b0380821115613ac557600080fd5b818501915085601f830112613ad957600080fd5b813581811115613ae857600080fd5b866020828501011115613afa57600080fd5b60209290920196919550909350505050565b60008060408385031215613b1f57600080fd5b613b28836137c4565b915060208301358015158114613b3d57600080fd5b809150509250929050565b60008060008060808587031215613b5e57600080fd5b613b67856137c4565b9350613b75602086016137c4565b92506040850135915060608501356001600160401b03811115613b9757600080fd5b8501601f81018713613ba857600080fd5b613bb7878235602084016138b5565b91505092959194509250565b60008060408385031215613bd657600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b81811015613c1d57835183529284019291840191600101613c01565b50909695505050505050565b60008060408385031215613c3c57600080fd5b613c45836137c4565b9150613c53602084016137c4565b90509250929050565b600080600060608486031215613c7157600080fd5b613c7a846137c4565b95602085013595506040909401359392505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015613d0c57888303603f19018552815180516001600160801b0390811685528882015116888501528601516060878501819052613cf88186018361376c565b968901969450505090860190600101613cb6565b509098975050505050505050565b600080600080600080600060e0888a031215613d3557600080fd5b87356001600160401b0380821115613d4c57600080fd5b613d588b838c0161390c565b985060208a0135915080821115613d6e57600080fd5b50613d7b8a828b0161390c565b965050613d8a604089016137c4565b9450613d98606089016137c4565b9350613da6608089016137c4565b9250613db460a089016137c4565b915060c088013561ffff81168114613dcb57600080fd5b8091505092959891949750929550565b600181811c90821680613def57607f821691505b602082108103613e0f57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526024908201527f4f6e6c79206f776e6572206f72206f776e65722066726f6d20656c656d656e74604082015263044726f760e41b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b818103818111156109b9576109b9613e59565b634e487b7160e01b600052603160045260246000fd5b600060018201613eaa57613eaa613e59565b5060010190565b634e487b7160e01b600052603260045260246000fd5b601f821115610b8d57600081815260208120601f850160051c81016020861015613eee5750805b601f850160051c820191505b818110156129f457828155600101613efa565b81516001600160401b03811115613f2657613f26613830565b613f3a81613f348454613ddb565b84613ec7565b602080601f831160018114613f6f5760008415613f575750858301515b600019600386901b1c1916600185901b1785556129f4565b600085815260208120601f198616915b82811015613f9e57888601518255948401946001909101908401613f7f565b5085821015613fbc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b6001600160801b0381811683821601908082111561403a5761403a613e59565b5092915050565b808201808211156109b9576109b9613e59565b80820281158282048414176109b9576109b9613e59565b634e487b7160e01b600052601260045260246000fd5b6000826140905761409061406b565b500490565b8183823760009101908152919050565b6001600160401b038311156140bc576140bc613830565b6140d0836140ca8354613ddb565b83613ec7565b6000601f84116001811461410457600085156140ec5750838201355b600019600387901b1c1916600186901b17835561415e565b600083815260209020601f19861690835b828110156141355786850135825560209485019460019092019101614115565b50868210156141525760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600083516141a6818460208801613748565b8351908301906141ba818360208801613748565b01949350505050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008261426a5761426a61406b565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906142a29083018461376c565b9695505050505050565b6000602082840312156142be57600080fd5b81516124f78161371556fea2646970667358221220eb391359f2d6ac0be1614e7200007e0383a95f6bd865e5a81b18f0afa6b2981664736f6c63430008110033