Loading
[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "OperatorNotAllowed", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newRoyaltyRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newRoyaltyBps", "type": "uint256" } ], "name": "DefaultRoyalty", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "restriction", "type": "bool" } ], "name": "OperatorRestriction", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "prevOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnerUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "platformFeeRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "platformFeeBps", "type": "uint256" } ], "name": "PlatformFeeInfoUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" } ], "name": "PrimarySaleRecipientUpdated", "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": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "royaltyBps", "type": "uint256" } ], "name": "RoyaltyForToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "mintedTo", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenIdMinted", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "uri", "type": "string" } ], "name": "TokensMinted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "signer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "mintedTo", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenIdMinted", "type": "uint256" }, { "components": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "royaltyBps", "type": "uint256" }, { "internalType": "address", "name": "primarySaleRecipient", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "uint128", "name": "validityStartTimestamp", "type": "uint128" }, { "internalType": "uint128", "name": "validityEndTimestamp", "type": "uint128" }, { "internalType": "bytes32", "name": "uid", "type": "bytes32" } ], "indexed": false, "internalType": "struct ITokenERC721.MintRequest", "name": "mintRequest", "type": "tuple" } ], "name": "TokensMintedWithSignature", "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": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractType", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractVersion", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDefaultRoyaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPlatformFeeInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "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": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getRoyaltyInfoForToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "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": "_defaultAdmin", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "string", "name": "_contractURI", "type": "string" }, { "internalType": "address[]", "name": "_trustedForwarders", "type": "address[]" }, { "internalType": "address", "name": "_saleRecipient", "type": "address" }, { "internalType": "address", "name": "_royaltyRecipient", "type": "address" }, { "internalType": "uint128", "name": "_royaltyBps", "type": "uint128" }, { "internalType": "uint128", "name": "_platformFeeBps", "type": "uint128" }, { "internalType": "address", "name": "_platformFeeRecipient", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "mintTo", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "royaltyBps", "type": "uint256" }, { "internalType": "address", "name": "primarySaleRecipient", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "uint128", "name": "validityStartTimestamp", "type": "uint128" }, { "internalType": "uint128", "name": "validityEndTimestamp", "type": "uint128" }, { "internalType": "bytes32", "name": "uid", "type": "bytes32" } ], "internalType": "struct ITokenERC721.MintRequest", "name": "_req", "type": "tuple" }, { "internalType": "bytes", "name": "_signature", "type": "bytes" } ], "name": "mintWithSignature", "outputs": [ { "internalType": "uint256", "name": "tokenIdMinted", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextTokenIdToMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "operatorRestriction", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "platformFeeRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "primarySaleRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "_royaltyBps", "type": "uint256" } ], "name": "setDefaultRoyaltyInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_restriction", "type": "bool" } ], "name": "setOperatorRestriction", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newOwner", "type": "address" } ], "name": "setOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_platformFeeRecipient", "type": "address" }, { "internalType": "uint256", "name": "_platformFeeBps", "type": "uint256" } ], "name": "setPlatformFeeInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_saleRecipient", "type": "address" } ], "name": "setPrimarySaleRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_bps", "type": "uint256" } ], "name": "setRoyaltyInfoForToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_subscription", "type": "address" } ], "name": "subscribeToRegistry", "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": [ { "components": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "royaltyBps", "type": "uint256" }, { "internalType": "address", "name": "primarySaleRecipient", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "uint128", "name": "validityStartTimestamp", "type": "uint128" }, { "internalType": "uint128", "name": "validityEndTimestamp", "type": "uint128" }, { "internalType": "bytes32", "name": "uid", "type": "bytes32" } ], "internalType": "struct ITokenERC721.MintRequest", "name": "_req", "type": "tuple" }, { "internalType": "bytes", "name": "_signature", "type": "bytes" } ], "name": "verify", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" }, { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b62001fb11760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6151a9806200015c6000396000f3fe6080604052600436106102e35760003560e01c8063600dd5ea11610190578063ac9650d8116100dc578063d45573f611610095578063e15916341161006f578063e15916341461097b578063e8a3d4851461099b578063e985e9c5146109b0578063eb13554f146109fa57600080fd5b8063d45573f6146108e6578063d547741f1461091c578063de9037741461093c57600080fd5b8063ac9650d814610809578063b24f2d3914610836578063b88d4fde14610865578063c87b56dd14610885578063ca15c873146108a5578063cb2ef6f7146108c557600080fd5b806391d14854116101495780639bcf7a15116101235780639bcf7a1514610798578063a0a8e460146107b8578063a217fddf146107d4578063a22cb465146107e957600080fd5b806391d1485414610743578063938e3d7b1461076357806395d89b411461078357600080fd5b8063600dd5ea1461068e5780636352211e146106ae5780636f4f2837146106ce57806370a08231146106ee5780638da5cb5b1461070e5780639010d07c1461072357600080fd5b80632c4510f81161024f57806342842e0e116102085780634f6ccce7116101e25780634f6ccce7146105fa578063504c6e011461061a578063572b6c051461063557806357fd84551461066e57600080fd5b806342842e0e1461057857806342966c68146105985780634cc157df146105b857600080fd5b80632c4510f8146104ce5780632f2ff15d146104e15780632f745c591461050157806332f0cd641461052157806336568abe146105415780633b1475a71461056157600080fd5b806313af4035116102a157806313af4035146103e857806318160ddd146104085780631e7ac4881461041e57806323b872dd1461043e578063248a9ca31461045e5780632a55205a1461048f57600080fd5b806275a317146102e857806301ffc9a71461031b57806306fdde031461034b578063079fe40e1461036d578063081812fc146103a6578063095ea7b3146103c6575b600080fd5b3480156102f457600080fd5b50610308610303366004614521565b610a1b565b6040519081526020015b60405180910390f35b34801561032757600080fd5b5061033b610336366004614589565b610a5b565b6040519015158152602001610312565b34801561035757600080fd5b50610360610a87565b60405161031291906145fe565b34801561037957600080fd5b506101fa5461038e906001600160a01b031681565b6040516001600160a01b039091168152602001610312565b3480156103b257600080fd5b5061038e6103c1366004614611565b610b1a565b3480156103d257600080fd5b506103e66103e136600461462a565b610b42565b005b3480156103f457600080fd5b506103e6610403366004614654565b610c1d565b34801561041457600080fd5b506101c854610308565b34801561042a57600080fd5b506103e661043936600461462a565b610cd3565b34801561044a57600080fd5b506103e661045936600461466f565b610d9b565b34801561046a57600080fd5b50610308610479366004614611565b600090815261012f602052604090206001015490565b34801561049b57600080fd5b506104af6104aa3660046146ab565b610e82565b604080516001600160a01b039093168352602083019190915201610312565b6103086104dc3660046146cd565b610ebf565b3480156104ed57600080fd5b506103e66104fc366004614731565b611035565b34801561050d57600080fd5b5061030861051c36600461462a565b61105b565b34801561052d57600080fd5b506103e661053c36600461476b565b6110f2565b34801561054d57600080fd5b506103e661055c366004614731565b611166565b34801561056d57600080fd5b506103086101f95481565b34801561058457600080fd5b506103e661059336600461466f565b6111f4565b3480156105a457600080fd5b506103e66105b3366004614611565b6112d0565b3480156105c457600080fd5b506105d86105d3366004614611565b61134f565b604080516001600160a01b03909316835261ffff909116602083015201610312565b34801561060657600080fd5b50610308610615366004614611565b6113bf565b34801561062657600080fd5b506101935461033b9060ff1681565b34801561064157600080fd5b5061033b610650366004614654565b6001600160a01b031660009081526099602052604090205460ff1690565b34801561067a57600080fd5b506103e6610689366004614654565b611454565b34801561069a57600080fd5b506103e66106a936600461462a565b6114c4565b3480156106ba57600080fd5b5061038e6106c9366004614611565b611581565b3480156106da57600080fd5b506103e66106e9366004614654565b6115e2565b3480156106fa57600080fd5b50610308610709366004614654565b611639565b34801561071a57600080fd5b5061038e6116c0565b34801561072f57600080fd5b5061038e61073e3660046146ab565b6116f8565b34801561074f57600080fd5b5061033b61075e366004614731565b611718565b34801561076f57600080fd5b506103e661077e366004614788565b611744565b34801561078f57600080fd5b5061036061175c565b3480156107a457600080fd5b506103e66107b33660046147c9565b61176c565b3480156107c457600080fd5b5060405160018152602001610312565b3480156107e057600080fd5b50610308600081565b3480156107f557600080fd5b506103e66108043660046147ee565b611845565b34801561081557600080fd5b50610829610824366004614825565b611916565b6040516103129190614899565b34801561084257600080fd5b506101fc546101fd546001600160a01b03909116906001600160801b03166105d8565b34801561087157600080fd5b506103e6610880366004614998565b611a0a565b34801561089157600080fd5b506103606108a0366004614611565b611af4565b3480156108b157600080fd5b506103086108c0366004614611565b611b97565b3480156108d157600080fd5b506a546f6b656e45524337323160a81b610308565b3480156108f257600080fd5b506101fb546101fd546001600160a01b0390911690600160801b90046001600160801b03166105d8565b34801561092857600080fd5b506103e6610937366004614731565b611baf565b34801561094857600080fd5b5061095c6109573660046146cd565b611bd5565b6040805192151583526001600160a01b03909116602083015201610312565b34801561098757600080fd5b506103e6610996366004614ac5565b611c3e565b3480156109a757600080fd5b50610360611f22565b3480156109bc57600080fd5b5061033b6109cb366004614bd7565b6001600160a01b0391821660009081526101996020908152604080832093909416825291909152205460ff1690565b348015610a0657600080fd5b506101fb5461038e906001600160a01b031681565b60007f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610a4781611fc0565b610a52858585611fd1565b95945050505050565b6000610a6682612095565b80610a8157506001600160e01b0319821663152a902d60e11b145b92915050565b60606101948054610a9790614c01565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac390614c01565b8015610b105780601f10610ae557610100808354040283529160200191610b10565b820191906000526020600020905b815481529060010190602001808311610af357829003601f168201915b5050505050905090565b6000610b25826120ba565b50600090815261019860205260409020546001600160a01b031690565b61019354829060ff1615610c0e576daaeb6d7670e522a718067333cd4e3b15610c0e57604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be19190614c3c565b610c0e57604051633b79c77360e21b81526001600160a01b03821660048201526024015b60405180910390fd5b610c18838361211a565b505050565b6000610c2881611fc0565b610c33600083611718565b610c7f5760405162461bcd60e51b815260206004820152601b60248201527f6e6577206f776e6572206e6f74206d6f64756c652061646d696e2e00000000006044820152606401610c05565b6101f880546001600160a01b038481166001600160a01b0319831681179093556040519116919082907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a3505050565b6000610cde81611fc0565b612710821115610d225760405162461bcd60e51b815260206004820152600f60248201526e65786365656473204d41585f42505360881b6044820152606401610c05565b6101fd80546001600160801b03166001600160401b038416600160801b021790556101fb80546001600160a01b0319166001600160a01b0385169081179091556040518381527fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f18304906020015b60405180910390a2505050565b61019354839060ff1615610e71576daaeb6d7670e522a718067333cd4e3b15610e71576001600160a01b038116331415610ddf57610dda84848461223d565b610e7c565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e529190614c3c565b610e7157604051633b79c77360e21b8152336004820152602401610c05565b610e7c84848461223d565b50505050565b600080600080610e918661134f565b90945084925061ffff169050612710610eaa8287614c6f565b610eb49190614c8e565b925050509250929050565b600060026001541415610f145760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c05565b60026001556000610f2685858561226f565b90506000610f376020870187614654565b9050610f4f81610f4a6080890189614cb0565b611fd1565b92506000610f636040880160208901614654565b6001600160a01b031614610fd3576040518060400160405280876020016020810190610f8f9190614654565b6001600160a01b0390811682526040898101356020938401526000878152610201845220835181546001600160a01b03191692169190911781559101516001909101555b610fdc866123cb565b82816001600160a01b0316836001600160a01b03167f110d160a1bedeea919a88fbc4b2a9fb61b7e664084391b6ca2740db66fef80fe896040516110209190614d64565b60405180910390a45050600180559392505050565b600082815261012f602052604090206001015461105181611fc0565b610c188383612571565b600061106683611639565b82106110c85760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610c05565b506001600160a01b039190911660009081526101c660209081526040808320938352929052205490565b6110fa612594565b61115a5760405162461bcd60e51b815260206004820152602b60248201527f4e6f7420617574686f72697a656420746f20736574206f70657261746f72207260448201526a32b9ba3934b1ba34b7b71760a91b6064820152608401610c05565b611163816125a2565b50565b61116e6125ea565b6001600160a01b0316816001600160a01b0316146111e65760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610c05565b6111f082826125f4565b5050565b61019354839060ff16156112c5576daaeb6d7670e522a718067333cd4e3b156112c5576001600160a01b03811633141561123357610dda848484612617565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a69190614c3c565b6112c557604051633b79c77360e21b8152336004820152602401610c05565b610e7c848484612617565b6112e16112db6125ea565b82612632565b6113465760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b6064820152608401610c05565b611163816126b2565b600081815261020160209081526040808320815180830190925280546001600160a01b03168083526001909101549282019290925282911561139757805160208201516113b5565b6101fc546101fd546001600160a01b03909116906001600160801b03165b9250925050915091565b60006113cb6101c85490565b821061142e5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610c05565b6101c8828154811061144257611442614e74565b90600052602060002001549050919050565b61145c612594565b6114b95760405162461bcd60e51b815260206004820152602860248201527f4e6f7420617574686f72697a656420746f2073756273637269626520746f207260448201526732b3b4b9ba393c9760c11b6064820152608401610c05565b61116381600161275b565b60006114cf81611fc0565b6127108211156115165760405162461bcd60e51b815260206004820152601260248201527165786365656420726f79616c74792062707360701b6044820152606401610c05565b6101fc80546001600160a01b0319166001600160a01b0385169081179091556101fd80546001600160801b0319166001600160801b0385161790556040518381527f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb90602001610d8e565b600081815261019660205260408120546001600160a01b031680610a815760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c05565b60006115ed81611fc0565b6101fa80546001600160a01b0319166001600160a01b0384169081179091556040517f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a25050565b60006001600160a01b0382166116a35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610c05565b506001600160a01b03166000908152610197602052604090205490565b6101f8546000906116db9082906001600160a01b0316611718565b6116e55750600090565b6101f8546001600160a01b03165b905090565b6000828152610161602052604081206117119083612869565b9392505050565b600091825261012f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061174f81611fc0565b610e7c6101fe84846143b7565b60606101958054610a9790614c01565b600061177781611fc0565b6127108211156117be5760405162461bcd60e51b815260206004820152601260248201527165786365656420726f79616c74792062707360701b6044820152606401610c05565b6040805180820182526001600160a01b03858116808352602080840187815260008a81526102018352869020945185546001600160a01b031916941693909317845591516001909301929092559151848152909186917f7365cf4122f072a3365c20d54eff9b38d73c096c28e1892ec8f5b0e403a0f12d910160405180910390a350505050565b61019354829060ff161561190c576daaeb6d7670e522a718067333cd4e3b1561190c57604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156118c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e49190614c3c565b61190c57604051633b79c77360e21b81526001600160a01b0382166004820152602401610c05565b610c188383612875565b6060816001600160401b03811115611930576119306148fb565b60405190808252806020026020018201604052801561196357816020015b606081526020019060019003908161194e5790505b50905060005b82811015611a03576119d33085858481811061198757611987614e74565b90506020028101906119999190614cb0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061288792505050565b8282815181106119e5576119e5614e74565b602002602001018190525080806119fb90614e8a565b915050611969565b5092915050565b61019354849060ff1615611ae1576daaeb6d7670e522a718067333cd4e3b15611ae1576001600160a01b038116331415611a4f57611a4a85858585612972565b611aed565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611a9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac29190614c3c565b611ae157604051633b79c77360e21b8152336004820152602401610c05565b611aed85858585612972565b5050505050565b600081815261020060205260409020805460609190611b1290614c01565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3e90614c01565b8015611b8b5780601f10611b6057610100808354040283529160200191611b8b565b820191906000526020600020905b815481529060010190602001808311611b6e57829003601f168201915b50505050509050919050565b600081815261016160205260408120610a81906129ab565b600082815261012f6020526040902060010154611bcb81611fc0565b610c1883836125f4565b6000806000611be58686866129b5565b61012087013560009081526101ff602052604090205490915060ff16158015611c335750611c337f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682611718565b969095509350505050565b600054610100900460ff1615808015611c5e5750600054600160ff909116105b80611c785750303b158015611c78575060005460ff166001145b611cdb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c05565b6000805460ff191660011790558015611cfe576000805461ff0019166101001790555b611d06612a11565b611d4c6040518060400160405280600b81526020016a546f6b656e45524337323160a81b815250604051806040016040528060018152602001603160f81b815250612a42565b611d5587612a73565b611d5f8a8a612aab565b611d67612adc565b611d7160016125a2565b6101fc80546001600160a01b03199081166001600160a01b03888116919091179092556101fd80546001600160801b0319166001600160801b0388161790556101fb805482168584161790556101fa80549091169188169190911790558751611de2906101fe9060208b019061443b565b50612710836001600160801b03161115611e305760405162461bcd60e51b815260206004820152600f60248201526e65786365656473204d41585f42505360881b6044820152606401610c05565b6101fd80546001600160801b03808616600160801b0291161790556101f880546001600160a01b038d166001600160a01b0319909116179055611e7460008c612afb565b611e9e7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68c612afb565b611eb660008051602061512d8339815191528c612afb565b611ecf60008051602061512d8339815191526000612afb565b8015611f15576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b6101fe8054611f3090614c01565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5c90614c01565b8015611fa95780601f10611f7e57610100808354040283529160200191611fa9565b820191906000526020600020905b815481529060010190602001808311611f8c57829003601f168201915b505050505081565b6001600160a01b03163b151590565b61116381611fcc6125ea565b612b05565b6101f98054906001906000611fe68385614ea5565b9091555050816120255760405162461bcd60e51b815260206004820152600a60248201526932b6b83a3c903ab9349760b11b6044820152606401610c05565b60008181526102006020526040902061203f9084846143b7565b5061204a8482612b69565b80846001600160a01b03167f9d89e36eadf856db0ad9ffb5a569e07f95634dddd9501141ecf04820484ad0dc8585604051612086929190614ebd565b60405180910390a39392505050565b60006001600160e01b0319821663780e9d6360e01b1480610a815750610a8182612b83565b600081815261019660205260409020546001600160a01b03166111635760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c05565b600061212582611581565b9050806001600160a01b0316836001600160a01b031614156121935760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610c05565b806001600160a01b03166121a56125ea565b6001600160a01b031614806121c157506121c1816109cb6125ea565b6122335760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610c05565b610c188383612bc3565b6122486112db6125ea565b6122645760405162461bcd60e51b8152600401610c0590614ed1565b610c18838383612c32565b600080600061227f868686611bd5565b91509150816122c45760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610c05565b426122d6610100880160e08901614f1f565b6001600160801b0316111580156123075750426122fb61012088016101008901614f1f565b6001600160801b031610155b6123455760405162461bcd60e51b815260206004820152600f60248201526e1c995c5d595cdd08195e1c1a5c9959608a1b6044820152606401610c05565b60006123546020880188614654565b6001600160a01b031614156123a15760405162461bcd60e51b81526020600482015260136024820152721c9958da5c1a595b9d081d5b9919599a5b9959606a1b6044820152606401610c05565b61012086013560009081526101ff60205260409020805460ff191660011790559150509392505050565b60a08101356123d75750565b6101fd5460a0820135906000906127109061240290600160801b90046001600160801b031684614c6f565b61240c9190614c8e565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61243360e0850160c08601614654565b6001600160a01b0316141561248f5781341461248a5760405162461bcd60e51b815260206004820152601660248201527536bab9ba1039b2b732103a37ba30b610383934b1b29760511b6044820152606401610c05565b6124d2565b34156124d25760405162461bcd60e51b81526020600482015260126024820152716d73672076616c7565206e6f74207a65726f60701b6044820152606401610c05565b6000806124e56080860160608701614654565b6001600160a01b031614612508576125036080850160608601614654565b612516565b6101fa546001600160a01b03165b905061254661252b60e0860160c08701614654565b6125336125ea565b6101fb546001600160a01b031685612ddc565b610e7c61255960e0860160c08701614654565b6125616125ea565b8361256c8688614f3a565b612ddc565b61257b8282612e21565b600082815261016160205260409020610c189082612ea9565b60006116f38161075e6125ea565b610193805460ff19168215159081179091556040519081527f38475885990d8dfe9ca01f0ef160a1b5514426eab9ddbc953a3353410ba780969060200160405180910390a150565b60006116f3612ebe565b6125fe8282612ee8565b600082815261016160205260409020610c189082612f6e565b610c1883838360405180602001604052806000815250611a0a565b60008061263e83611581565b9050806001600160a01b0316846001600160a01b0316148061268657506001600160a01b038082166000908152610199602090815260408083209388168352929052205460ff165b806126aa5750836001600160a01b031661269f84610b1a565b6001600160a01b0316145b949350505050565b60006126bd82611581565b90506126cb81600084612f83565b6126d6600083612bc3565b6001600160a01b038116600090815261019760205260408120805460019290612700908490614f3a565b90915550506000828152610196602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6daaeb6d7670e522a718067333cd4e3b156111f0576001600160a01b0382163b156128385780156127f857604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b1580156127dc57600080fd5b505af11580156127f0573d6000803e3d6000fd5b505050505050565b60405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af2903906044016127c2565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e486906024016127c2565b60006117118383613063565b6111f06128806125ea565b838361308d565b60606001600160a01b0383163b6128ef5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610c05565b600080846001600160a01b03168460405161290a9190614f51565b600060405180830381855af49150503d8060008114612945576040519150601f19603f3d011682016040523d82523d6000602084013e61294a565b606091505b5091509150610a52828260405180606001604052806027815260200161514d6027913961315d565b61298361297d6125ea565b83612632565b61299f5760405162461bcd60e51b8152600401610c0590614ed1565b610e7c84848484613196565b6000610a81825490565b60006126aa83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0b92506129ff91508890506131c9565b80519060200120613303565b90613351565b600054610100900460ff16612a385760405162461bcd60e51b8152600401610c0590614f6d565b612a40613375565b565b600054610100900460ff16612a695760405162461bcd60e51b8152600401610c0590614f6d565b6111f082826133a2565b600054610100900460ff16612a9a5760405162461bcd60e51b8152600401610c0590614f6d565b612aa26133e3565b6111638161340a565b600054610100900460ff16612ad25760405162461bcd60e51b8152600401610c0590614f6d565b6111f08282613499565b612a40733cc6cdda760b79bafa08df41ecfa224f810dceb660016134e9565b6111f08282612571565b612b0f8282611718565b6111f057612b27816001600160a01b031660146134f3565b612b328360206134f3565b604051602001612b43929190614fb8565b60408051601f198184030181529082905262461bcd60e51b8252610c05916004016145fe565b6111f082826040518060200160405280600081525061368e565b60006001600160e01b031982166380ac58cd60e01b1480612bb457506001600160e01b03198216635b5e139f60e01b145b80610a815750610a81826136c1565b60008181526101986020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612bf982611581565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b826001600160a01b0316612c4582611581565b6001600160a01b031614612ca95760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610c05565b6001600160a01b038216612d0b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c05565b612d16838383612f83565b612d21600082612bc3565b6001600160a01b038316600090815261019760205260408120805460019290612d4b908490614f3a565b90915550506001600160a01b038216600090815261019760205260408120805460019290612d7a908490614ea5565b90915550506000818152610196602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b80612de657610e7c565b6001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612e1557610dda82826136e6565b610e7c84848484613789565b612e2b8282611718565b6111f057600082815261012f602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612e656125ea565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000611711836001600160a01b0384166137e2565b3360009081526099602052604081205460ff1615612ee3575060131936013560601c90565b503390565b612ef28282611718565b156111f057600082815261012f602090815260408083206001600160a01b03851684529091529020805460ff19169055612f2a6125ea565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000611711836001600160a01b038416613831565b612f8e838383613924565b612fa760008051602061512d8339815191526000611718565b158015612fbc57506001600160a01b03831615155b8015612fd057506001600160a01b03821615155b15610c1857612fed60008051602061512d83398151915284611718565b8061300b575061300b60008051602061512d83398151915283611718565b610c185760405162461bcd60e51b815260206004820152602360248201527f7265737472696374656420746f205452414e534645525f524f4c4520686f6c6460448201526265727360e81b6064820152608401610c05565b600082600001828154811061307a5761307a614e74565b9060005260206000200154905092915050565b816001600160a01b0316836001600160a01b031614156130ef5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c05565b6001600160a01b0383811660008181526101996020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6060831561316c575081611711565b82511561317c5782518084602001fd5b8160405162461bcd60e51b8152600401610c0591906145fe565b6131a1848484612c32565b6131ad848484846139de565b610e7c5760405162461bcd60e51b8152600401610c059061502d565b60607f86633b4ffa94b7c3d316ca70d7d2700f3fdfa7a7806efd31499b513d9176692e6131f96020840184614654565b6132096040850160208601614654565b604085013561321e6080870160608801614654565b61322b6080880188614cb0565b60405161323992919061507f565b60405190819003902060a088013561325760e08a0160c08b01614654565b6132686101008b0160e08c01614f1f565b61327a6101208c016101008d01614f1f565b60408051602081019b909b526001600160a01b03998a16908b015296881660608a0152608089019590955292861660a088015260c087019190915260e08601529092166101008401526001600160801b03918216610120808501919091529116610140830152830135610160820152610180016040516020818303038152906040529050919050565b6000610a81613310613ae3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006133608585613b5e565b9150915061336d81613ba4565b509392505050565b600054610100900460ff1661339c5760405162461bcd60e51b8152600401610c0590614f6d565b60018055565b600054610100900460ff166133c95760405162461bcd60e51b8152600401610c0590614f6d565b815160209283012081519190920120603391909155603455565b600054610100900460ff16612a405760405162461bcd60e51b8152600401610c0590614f6d565b600054610100900460ff166134315760405162461bcd60e51b8152600401610c0590614f6d565b60005b81518110156111f05760016099600084848151811061345557613455614e74565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061349181614e8a565b915050613434565b600054610100900460ff166134c05760405162461bcd60e51b8152600401610c0590614f6d565b81516134d49061019490602085019061443b565b508051610c189061019590602084019061443b565b6111f0828261275b565b60606000613502836002614c6f565b61350d906002614ea5565b6001600160401b03811115613524576135246148fb565b6040519080825280601f01601f19166020018201604052801561354e576020820181803683370190505b509050600360fc1b8160008151811061356957613569614e74565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061359857613598614e74565b60200101906001600160f81b031916908160001a90535060006135bc846002614c6f565b6135c7906001614ea5565b90505b600181111561363f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106135fb576135fb614e74565b1a60f81b82828151811061361157613611614e74565b60200101906001600160f81b031916908160001a90535060049490941c936136388161508f565b90506135ca565b5083156117115760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610c05565b6136988383613d5f565b6136a560008484846139de565b610c185760405162461bcd60e51b8152600401610c059061502d565b60006001600160e01b03198216635a05180f60e01b1480610a815750610a8182613eb0565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613733576040519150601f19603f3d011682016040523d82523d6000602084013e613738565b606091505b5050905080610c185760405162461bcd60e51b815260206004820152601c60248201527f6e617469766520746f6b656e207472616e73666572206661696c6564000000006044820152606401610c05565b816001600160a01b0316836001600160a01b031614156137a857610e7c565b6001600160a01b0383163014156137cd57610dda6001600160a01b0385168383613ee5565b610e7c6001600160a01b038516848484613f48565b600081815260018301602052604081205461382957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a81565b506000610a81565b6000818152600183016020526040812054801561391a576000613855600183614f3a565b855490915060009061386990600190614f3a565b90508181146138ce57600086600001828154811061388957613889614e74565b90600052602060002001549050808760000184815481106138ac576138ac614e74565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806138df576138df6150a6565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a81565b6000915050610a81565b6001600160a01b0383166139815761397c816101c8805460008381526101c960205260408120829055600182018355919091527f8cdee82cb3ac6d59f1f417405a3eecf497b31f3d06d4c506f96deb67789f61e90155565b6139a4565b816001600160a01b0316836001600160a01b0316146139a4576139a48382613f80565b6001600160a01b0382166139bb57610c1881614022565b826001600160a01b0316826001600160a01b031614610c1857610c1882826140d7565b60006001600160a01b0384163b15613ad857836001600160a01b031663150b7a02613a076125ea565b8786866040518563ffffffff1660e01b8152600401613a2994939291906150bc565b6020604051808303816000875af1925050508015613a64575060408051601f3d908101601f19168201909252613a61918101906150f9565b60015b613abe573d808015613a92576040519150601f19603f3d011682016040523d82523d6000602084013e613a97565b606091505b508051613ab65760405162461bcd60e51b8152600401610c059061502d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506126aa565b506001949350505050565b60006116f37f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613b1260335490565b6034546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600080825160411415613b955760208301516040840151606085015160001a613b898782858561411d565b94509450505050613b9d565b506000905060025b9250929050565b6000816004811115613bb857613bb8615116565b1415613bc15750565b6001816004811115613bd557613bd5615116565b1415613c235760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610c05565b6002816004811115613c3757613c37615116565b1415613c855760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610c05565b6003816004811115613c9957613c99615116565b1415613cf25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610c05565b6004816004811115613d0657613d06615116565b14156111635760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610c05565b6001600160a01b038216613db55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c05565b600081815261019660205260409020546001600160a01b031615613e1b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c05565b613e2760008383612f83565b6001600160a01b038216600090815261019760205260408120805460019290613e51908490614ea5565b90915550506000818152610196602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160e01b03198216637965db0b60e01b1480610a8157506301ffc9a760e01b6001600160e01b0319831614610a81565b6040516001600160a01b038316602482015260448101829052610c1890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261420a565b6040516001600160a01b0380851660248301528316604482015260648101829052610e7c9085906323b872dd60e01b90608401613f11565b60006001613f8d84611639565b613f979190614f3a565b60008381526101c76020526040902054909150808214613fed576001600160a01b03841660009081526101c66020908152604080832085845282528083205484845281842081905583526101c790915290208190555b5060009182526101c7602090815260408084208490556001600160a01b0390941683526101c681528383209183525290812055565b6101c85460009061403590600190614f3a565b60008381526101c960205260408120546101c8805493945090928490811061405f5761405f614e74565b90600052602060002001549050806101c8838154811061408157614081614e74565b60009182526020808320909101929092558281526101c990915260408082208490558582528120556101c88054806140bb576140bb6150a6565b6001900381819060005260206000200160009055905550505050565b60006140e283611639565b6001600160a01b0390931660009081526101c66020908152604080832086845282528083208590559382526101c79052919091209190915550565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156141545750600090506003614201565b8460ff16601b1415801561416c57508460ff16601c14155b1561417d5750600090506004614201565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156141d1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166141fa57600060019250925050614201565b9150600090505b94509492505050565b600061425f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166142dc9092919063ffffffff16565b805190915015610c18578080602001905181019061427d9190614c3c565b610c185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c05565b60606126aa8484600085856001600160a01b0385163b61433e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c05565b600080866001600160a01b0316858760405161435a9190614f51565b60006040518083038185875af1925050503d8060008114614397576040519150601f19603f3d011682016040523d82523d6000602084013e61439c565b606091505b50915091506143ac82828661315d565b979650505050505050565b8280546143c390614c01565b90600052602060002090601f0160209004810192826143e5576000855561442b565b82601f106143fe5782800160ff1982351617855561442b565b8280016001018555821561442b579182015b8281111561442b578235825591602001919060010190614410565b506144379291506144af565b5090565b82805461444790614c01565b90600052602060002090601f016020900481019282614469576000855561442b565b82601f1061448257805160ff191683800117855561442b565b8280016001018555821561442b579182015b8281111561442b578251825591602001919060010190614494565b5b8082111561443757600081556001016144b0565b80356001600160a01b03811681146144db57600080fd5b919050565b60008083601f8401126144f257600080fd5b5081356001600160401b0381111561450957600080fd5b602083019150836020828501011115613b9d57600080fd5b60008060006040848603121561453657600080fd5b61453f846144c4565b925060208401356001600160401b0381111561455a57600080fd5b614566868287016144e0565b9497909650939450505050565b6001600160e01b03198116811461116357600080fd5b60006020828403121561459b57600080fd5b813561171181614573565b60005b838110156145c15781810151838201526020016145a9565b83811115610e7c5750506000910152565b600081518084526145ea8160208601602086016145a6565b601f01601f19169290920160200192915050565b60208152600061171160208301846145d2565b60006020828403121561462357600080fd5b5035919050565b6000806040838503121561463d57600080fd5b614646836144c4565b946020939093013593505050565b60006020828403121561466657600080fd5b611711826144c4565b60008060006060848603121561468457600080fd5b61468d846144c4565b925061469b602085016144c4565b9150604084013590509250925092565b600080604083850312156146be57600080fd5b50508035926020909101359150565b6000806000604084860312156146e257600080fd5b83356001600160401b03808211156146f957600080fd5b90850190610140828803121561470e57600080fd5b9093506020850135908082111561472457600080fd5b50614566868287016144e0565b6000806040838503121561474457600080fd5b82359150614754602084016144c4565b90509250929050565b801515811461116357600080fd5b60006020828403121561477d57600080fd5b81356117118161475d565b6000806020838503121561479b57600080fd5b82356001600160401b038111156147b157600080fd5b6147bd858286016144e0565b90969095509350505050565b6000806000606084860312156147de57600080fd5b8335925061469b602085016144c4565b6000806040838503121561480157600080fd5b61480a836144c4565b9150602083013561481a8161475d565b809150509250929050565b6000806020838503121561483857600080fd5b82356001600160401b038082111561484f57600080fd5b818501915085601f83011261486357600080fd5b81358181111561487257600080fd5b8660208260051b850101111561488757600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156148ee57603f198886030184526148dc8583516145d2565b945092850192908501906001016148c0565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614939576149396148fb565b604052919050565b60006001600160401b0383111561495a5761495a6148fb565b61496d601f8401601f1916602001614911565b905082815283838301111561498157600080fd5b828260208301376000602084830101529392505050565b600080600080608085870312156149ae57600080fd5b6149b7856144c4565b93506149c5602086016144c4565b92506040850135915060608501356001600160401b038111156149e757600080fd5b8501601f810187136149f857600080fd5b614a0787823560208401614941565b91505092959194509250565b600082601f830112614a2457600080fd5b61171183833560208501614941565b600082601f830112614a4457600080fd5b813560206001600160401b03821115614a5f57614a5f6148fb565b8160051b614a6e828201614911565b9283528481018201928281019087851115614a8857600080fd5b83870192505b848310156143ac57614a9f836144c4565b82529183019190830190614a8e565b80356001600160801b03811681146144db57600080fd5b6000806000806000806000806000806101408b8d031215614ae557600080fd5b614aee8b6144c4565b995060208b01356001600160401b0380821115614b0a57600080fd5b614b168e838f01614a13565b9a5060408d0135915080821115614b2c57600080fd5b614b388e838f01614a13565b995060608d0135915080821115614b4e57600080fd5b614b5a8e838f01614a13565b985060808d0135915080821115614b7057600080fd5b50614b7d8d828e01614a33565b965050614b8c60a08c016144c4565b9450614b9a60c08c016144c4565b9350614ba860e08c01614aae565b9250614bb76101008c01614aae565b9150614bc66101208c016144c4565b90509295989b9194979a5092959850565b60008060408385031215614bea57600080fd5b614bf3836144c4565b9150614754602084016144c4565b600181811c90821680614c1557607f821691505b60208210811415614c3657634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215614c4e57600080fd5b81516117118161475d565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615614c8957614c89614c59565b500290565b600082614cab57634e487b7160e01b600052601260045260246000fd5b500490565b6000808335601e19843603018112614cc757600080fd5b8301803591506001600160401b03821115614ce157600080fd5b602001915036819003821315613b9d57600080fd5b6000808335601e19843603018112614d0d57600080fd5b83016020810192503590506001600160401b03811115614d2c57600080fd5b803603831315613b9d57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152614d8560208201614d78846144c4565b6001600160a01b03169052565b6000614d93602084016144c4565b6001600160a01b03811660408401525060408301356060830152614db9606084016144c4565b6001600160a01b038116608084015250614dd66080840184614cf6565b6101408060a0860152614dee61016086018385614d3b565b925060a086013560c0860152614e0660c087016144c4565b6001600160a01b03811660e08701529150614e2360e08701614aae565b9150610100614e3c818701846001600160801b03169052565b614e47818801614aae565b925050610120614e61818701846001600160801b03169052565b9590950135939094019290925250919050565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614e9e57614e9e614c59565b5060010190565b60008219821115614eb857614eb8614c59565b500190565b6020815260006126aa602083018486614d3b565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b600060208284031215614f3157600080fd5b61171182614aae565b600082821015614f4c57614f4c614c59565b500390565b60008251614f638184602087016145a6565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614ff08160178501602088016145a6565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516150218160288401602088016145a6565b01602801949350505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b8183823760009101908152919050565b60008161509e5761509e614c59565b506000190190565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906150ef908301846145d2565b9695505050505050565b60006020828403121561510b57600080fd5b815161171181614573565b634e487b7160e01b600052602160045260246000fdfe8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122091f25293ff2143ed79b9f5b90f9c2e8739c914ee18c375facf1028a5ccd7ee7764736f6c634300080c0033