[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": 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": "address", "name": "platformFeeRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "flatFee", "type": "uint256" } ], "name": "FlatPlatformFeeUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [], "name": "MetadataFrozen", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "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": false, "internalType": "enum IPlatformFee.PlatformFeeType", "name": "feeType", "type": "uint8" } ], "name": "PlatformFeeTypeUpdated", "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": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "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": [], "name": "freezeMetadata", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "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": "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": "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": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "setTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "uriFrozen", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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" } ]
60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b62001c2f1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b614ccc806200015c6000396000f3fe6080604052600436106102535760003560e01c80636352211e116101405780636352211e146105c35780636f4f2837146105e357806370a08231146106035780638da5cb5b146106235780639010d07c1461063857806391d1485414610658578063938e3d7b1461067857806395d89b41146106985780639bcf7a15146106ad578063a0a8e460146106cd578063a217fddf146106e9578063a22cb465146106fe578063ac9650d81461071e578063b24f2d391461074b578063b88d4fde1461077a578063c87b56dd1461079a578063ca15c873146107ba578063cb2ef6f7146107da578063d111515d146107fb578063d45573f614610810578063d547741f14610846578063de90377414610866578063e1591634146108a5578063e8a3d485146108c5578063e985e9c5146108da578063eb13554f146108fa57600080fd5b806275a3171461025857806301ffc9a71461028b57806306fdde03146102bb578063079fe40e146102dd578063081812fc14610316578063095ea7b31461033657806313af403514610358578063162094c41461037857806318160ddd146103985780631e7ac488146103ae57806323b872dd146103ce578063248a9ca3146103ee578063274e4a1d1461040e5780632a55205a146104295780632c4510f8146104575780632f2ff15d1461046a5780632f745c591461048a57806336568abe146104aa5780633b1475a7146104ca57806342842e0e146104e157806342966c68146105015780634cc157df146105215780634f6ccce714610563578063572b6c0514610583578063600dd5ea146105a3575b600080fd5b34801561026457600080fd5b50610278610273366004613f22565b61091b565b6040519081526020015b60405180910390f35b34801561029757600080fd5b506102ab6102a6366004613f8a565b610949565b6040519015158152602001610282565b3480156102c757600080fd5b506102d0610975565b6040516102829190613fff565b3480156102e957600080fd5b506101fb546102fe906001600160a01b031681565b6040516001600160a01b039091168152602001610282565b34801561032257600080fd5b506102fe61033136600461401f565b610a08565b34801561034257600080fd5b50610356610351366004614038565b610a30565b005b34801561036457600080fd5b50610356610373366004614062565b610b5d565b34801561038457600080fd5b5061035661039336600461413a565b610c11565b3480156103a457600080fd5b506101c754610278565b3480156103ba57600080fd5b506103566103c9366004614038565b610cdc565b3480156103da57600080fd5b506103566103e9366004614180565b610d82565b3480156103fa57600080fd5b5061027861040936600461401f565b610dba565b34801561041a57600080fd5b506101f7546102ab9060ff1681565b34801561043557600080fd5b506104496104443660046141bc565b610dd0565b6040516102829291906141de565b6102786104653660046141f7565b610e0d565b34801561047657600080fd5b5061035661048536600461425b565b610f83565b34801561049657600080fd5b506102786104a5366004614038565b610f9f565b3480156104b657600080fd5b506103566104c536600461425b565b611036565b3480156104d657600080fd5b506102786101fa5481565b3480156104ed57600080fd5b506103566104fc366004614180565b6110c0565b34801561050d57600080fd5b5061035661051c36600461401f565b6110db565b34801561052d57600080fd5b5061054161053c36600461401f565b611157565b604080516001600160a01b03909316835261ffff909116602083015201610282565b34801561056f57600080fd5b5061027861057e36600461401f565b6111c7565b34801561058f57600080fd5b506102ab61059e366004614062565b61125c565b3480156105af57600080fd5b506103566105be366004614038565b61127a565b3480156105cf57600080fd5b506102fe6105de36600461401f565b611312565b3480156105ef57600080fd5b506103566105fe366004614062565b611348565b34801561060f57600080fd5b5061027861061e366004614062565b61139f565b34801561062f57600080fd5b506102fe611426565b34801561064457600080fd5b506102fe6106533660046141bc565b61145e565b34801561066457600080fd5b506102ab61067336600461425b565b61147e565b34801561068457600080fd5b50610356610693366004614287565b6114aa565b3480156106a457600080fd5b506102d06114c8565b3480156106b957600080fd5b506103566106c83660046142c8565b6114d8565b3480156106d957600080fd5b5060405160018152602001610282565b3480156106f557600080fd5b50610278600081565b34801561070a57600080fd5b506103566107193660046142fb565b61158c565b34801561072a57600080fd5b5061073e610739366004614332565b61159e565b60405161028291906143a6565b34801561075757600080fd5b506101fd546101fe546001600160a01b03909116906001600160801b0316610541565b34801561078657600080fd5b50610356610795366004614408565b611692565b3480156107a657600080fd5b506102d06107b536600461401f565b6116cb565b3480156107c657600080fd5b506102786107d536600461401f565b61176e565b3480156107e657600080fd5b506a546f6b656e45524337323160a81b610278565b34801561080757600080fd5b50610356611786565b34801561081c57600080fd5b506101fc546101fe546001600160a01b0390911690600160801b90046001600160801b0316610541565b34801561085257600080fd5b5061035661086136600461425b565b611829565b34801561087257600080fd5b506108866108813660046141f7565b611845565b6040805192151583526001600160a01b03909116602083015201610282565b3480156108b157600080fd5b506103566108c0366004614515565b61189c565b3480156108d157600080fd5b506102d0611b71565b3480156108e657600080fd5b506102ab6108f5366004614627565b611c00565b34801561090657600080fd5b506101fc546102fe906001600160a01b031681565b6000600080516020614c5783398151915261093581611c3e565b610940858585611c4f565b95945050505050565b600061095482611d38565b8061096f57506001600160e01b0319821663152a902d60e11b145b92915050565b6060610193805461098590614651565b80601f01602080910402602001604051908101604052809291908181526020018280546109b190614651565b80156109fe5780601f106109d3576101008083540402835291602001916109fe565b820191906000526020600020905b8154815290600101906020018083116109e157829003601f168201915b5050505050905090565b6000610a1382611d5d565b50600090815261019760205260409020546001600160a01b031690565b6000610a3b82611312565b9050806001600160a01b0316836001600160a01b03161415610aae5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b806001600160a01b0316610ac0611d82565b6001600160a01b03161480610adc5750610adc816108f5611d82565b610b4e5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610aa5565b610b588383611d8c565b505050565b6000610b6881611c3e565b610b7360008361147e565b610bbd5760405162461bcd60e51b815260206004820152601b60248201527a3732bb9037bbb732b9103737ba1036b7b23ab6329030b236b4b71760291b6044820152606401610aa5565b6101f980546001600160a01b038481166001600160a01b0319831681179093556040519116919082907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a3505050565b610c19611dfb565b610c7a5760405162461bcd60e51b815260206004820152602c60248201527f4e46544d657461646174613a206e6f7420617574686f72697a656420746f207360448201526b32ba1036b2ba30b230ba309760a11b6064820152608401610aa5565b6101f75460ff1615610cce5760405162461bcd60e51b815260206004820181905260248201527f4e46544d657461646174613a206d657461646174612069732066726f7a656e2e6044820152606401610aa5565b610cd88282611e17565b5050565b6000610ce781611c3e565b612710821115610d095760405162461bcd60e51b8152600401610aa59061468c565b6101fe80546001600160801b03166001600160401b038416600160801b021790556101fc80546001600160a01b0319166001600160a01b0385169081179091556040518381527fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f18304906020015b60405180910390a2505050565b610d93610d8d611d82565b82611ebf565b610daf5760405162461bcd60e51b8152600401610aa5906146b5565b610b58838383611f1e565b600090815261012f602052604090206001015490565b600080600080610ddf86611157565b90945084925061ffff169050612710610df88287614719565b610e029190614738565b925050509250929050565b600060026001541415610e625760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610aa5565b60026001556000610e748585856120b6565b90506000610e856020870187614062565b9050610e9d81610e98608089018961475a565b611c4f565b92506000610eb16040880160208901614062565b6001600160a01b031614610f21576040518060400160405280876020016020810190610edd9190614062565b6001600160a01b0390811682526040898101356020938401526000878152610201845220835181546001600160a01b03191692169190911781559101516001909101555b610f2a86612212565b82816001600160a01b0316836001600160a01b03167f110d160a1bedeea919a88fbc4b2a9fb61b7e664084391b6ca2740db66fef80fe89604051610f6e919061480e565b60405180910390a45050600180559392505050565b610f8c82610dba565b610f9581611c3e565b610b5883836123ec565b6000610faa8361139f565b821061100c5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610aa5565b506001600160a01b039190911660009081526101c560209081526040808320938352929052205490565b61103e611d82565b6001600160a01b0316816001600160a01b0316146110b65760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610aa5565b610cd8828261240f565b610b5883838360405180602001604052806000815250611692565b6110e6610d8d611d82565b61114b5760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b6064820152608401610aa5565b61115481612432565b50565b600081815261020160209081526040808320815180830190925280546001600160a01b03168083526001909101549282019290925282911561119f57805160208201516111bd565b6101fd546101fe546001600160a01b03909116906001600160801b03165b9250925050915091565b60006111d36101c75490565b82106112365760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610aa5565b6101c7828154811061124a5761124a614910565b90600052602060002001549050919050565b6001600160a01b031660009081526099602052604090205460ff1690565b600061128581611c3e565b6127108211156112a75760405162461bcd60e51b8152600401610aa590614926565b6101fd80546001600160a01b0319166001600160a01b0385169081179091556101fe80546001600160801b0319166001600160801b0385161790556040518381527f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb90602001610d75565b600081815261019560205260408120546001600160a01b03168061096f5760405162461bcd60e51b8152600401610aa590614952565b600061135381611c3e565b6101fb80546001600160a01b0319166001600160a01b0384169081179091556040517f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a25050565b60006001600160a01b0382166114095760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610aa5565b506001600160a01b03166000908152610196602052604090205490565b6101f9546000906114419082906001600160a01b031661147e565b61144b5750600090565b6101f9546001600160a01b03165b905090565b60008281526101616020526040812061147790836124c9565b9392505050565b600091825261012f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006114b581611c3e565b6114c26101ff8484613db8565b50505050565b6060610194805461098590614651565b60006114e381611c3e565b6127108211156115055760405162461bcd60e51b8152600401610aa590614926565b6040805180820182526001600160a01b03858116808352602080840187815260008a81526102018352869020945185546001600160a01b031916941693909317845591516001909301929092559151848152909186917f7365cf4122f072a3365c20d54eff9b38d73c096c28e1892ec8f5b0e403a0f12d910160405180910390a350505050565b610cd8611597611d82565b83836124d5565b6060816001600160401b038111156115b8576115b861407d565b6040519080825280602002602001820160405280156115eb57816020015b60608152602001906001900390816115d65790505b50905060005b8281101561168b5761165b3085858481811061160f5761160f614910565b9050602002810190611621919061475a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506125a192505050565b82828151811061166d5761166d614910565b6020026020010181905250808061168390614984565b9150506115f1565b5092915050565b6116a361169d611d82565b83611ebf565b6116bf5760405162461bcd60e51b8152600401610aa5906146b5565b6114c28484848461268a565b60008181526101f8602052604090208054606091906116e990614651565b80601f016020809104026020016040519081016040528092919081815260200182805461171590614651565b80156117625780601f1061173757610100808354040283529160200191611762565b820191906000526020600020905b81548152906001019060200180831161174557829003601f168201915b50505050509050919050565b60008181526101616020526040812061096f906126bd565b61178e611dfb565b6117f05760405162461bcd60e51b815260206004820152602d60248201527f4e46544d657461646174613a206e6f7420617574686f72697a656420746f206660448201526c7265657a65206d65746461746160981b6064820152608401610aa5565b6101f7805460ff191660011790556040517feef043febddf4e1d1cf1f72ff1407b84e036e805aa0934418cb82095da8d716490600090a1565b61183282610dba565b61183b81611c3e565b610b58838361240f565b60008060006118558686866126c7565b6101208701356000908152610200602052604090205490915060ff161580156118915750611891600080516020614c578339815191528261147e565b969095509350505050565b600054610100900460ff16158080156118bc5750600054600160ff909116105b806118dd57506118cb30611c2f565b1580156118dd575060005460ff166001145b6119405760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610aa5565b6000805460ff191660011790558015611963576000805461ff0019166101001790555b61196b612723565b6119b16040518060400160405280600b81526020016a546f6b656e45524337323160a81b815250604051806040016040528060018152602001603160f81b815250612754565b6119ba87612785565b6119c48a8a6127bd565b6101fd80546001600160a01b03199081166001600160a01b03888116919091179092556101fe80546001600160801b0319166001600160801b0388161790556101fc805482168584161790556101fb80549091169188169190911790558751611a35906101ff9060208b0190613e3c565b50612710836001600160801b03161115611a615760405162461bcd60e51b8152600401610aa59061468c565b6101fe80546001600160801b03808616600160801b0291161790556101f980546001600160a01b038d166001600160a01b0319909116179055611aa560008c6127ee565b611abd600080516020614c578339815191528c6127ee565b611ad5600080516020614c108339815191528c6127ee565b611aed600080516020614c10833981519152806127f8565b611b05600080516020614bf08339815191528c6127ee565b611b1e600080516020614bf083398151915260006127ee565b8015611b64576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b6101ff8054611b7f90614651565b80601f0160208091040260200160405190810160405280929190818152602001828054611bab90614651565b8015611bf85780601f10611bcd57610100808354040283529160200191611bf8565b820191906000526020600020905b815481529060010190602001808311611bdb57829003601f168201915b505050505081565b6001600160a01b0391821660009081526101986020908152604080832093909416825291909152205460ff1690565b6001600160a01b03163b151590565b61115481611c4a611d82565b61284c565b6101fa8054906001906000611c64838561499f565b909155505081611ca35760405162461bcd60e51b815260206004820152600a60248201526932b6b83a3c903ab9349760b11b6044820152606401610aa5565b611ce38184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e1792505050565b611ced84826128b0565b80846001600160a01b03167f9d89e36eadf856db0ad9ffb5a569e07f95634dddd9501141ecf04820484ad0dc8585604051611d299291906149b7565b60405180910390a39392505050565b60006001600160e01b0319821663780e9d6360e01b148061096f575061096f826128ca565b611d668161290a565b6111545760405162461bcd60e51b8152600401610aa590614952565b6000611459612928565b60008181526101976020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611dc282611312565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611459600080516020614c10833981519152610673611d82565b6000815111611e675760405162461bcd60e51b815260206004820152601c60248201527b27232a26b2ba30b230ba309d1032b6b83a3c9036b2ba30b230ba309760211b6044820152606401610aa5565b60008281526101f8602090815260409091208251611e8792840190613e3c565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b600080611ecb83611312565b9050806001600160a01b0316846001600160a01b03161480611ef25750611ef28185611c00565b80611f165750836001600160a01b0316611f0b84610a08565b6001600160a01b0316145b949350505050565b826001600160a01b0316611f3182611312565b6001600160a01b031614611f955760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610aa5565b6001600160a01b038216611ff75760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa5565b61200283838361294a565b61200d600082611d8c565b6001600160a01b0383166000908152610196602052604081208054600192906120379084906149cb565b90915550506001600160a01b03821660009081526101966020526040812080546001929061206690849061499f565b90915550506000818152610195602052604080822080546001600160a01b0319166001600160a01b038681169182179092559151849391871691600080516020614c7783398151915291a4505050565b60008060006120c6868686611845565b915091508161210b5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610aa5565b4261211d610100880160e089016149e2565b6001600160801b03161115801561214e575042612142610120880161010089016149e2565b6001600160801b031610155b61218c5760405162461bcd60e51b815260206004820152600f60248201526e1c995c5d595cdd08195e1c1a5c9959608a1b6044820152606401610aa5565b600061219b6020880188614062565b6001600160a01b031614156121e85760405162461bcd60e51b81526020600482015260136024820152721c9958da5c1a595b9d081d5b9919599a5b9959606a1b6044820152606401610aa5565b610120860135600090815261020060205260409020805460ff191660011790559150509392505050565b60a08101356122525734156111545760405162461bcd60e51b81526020600482015260066024820152652156616c756560d01b6044820152606401610aa5565b6101fe5460a0820135906000906127109061227d90600160801b90046001600160801b031684614719565b6122879190614738565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6122ae60e0850160c08601614062565b6001600160a01b0316141561230a578134146123055760405162461bcd60e51b815260206004820152601660248201527536bab9ba1039b2b732103a37ba30b610383934b1b29760511b6044820152606401610aa5565b61234d565b341561234d5760405162461bcd60e51b81526020600482015260126024820152716d73672076616c7565206e6f74207a65726f60701b6044820152606401610aa5565b6000806123606080860160608701614062565b6001600160a01b0316146123835761237e6080850160608601614062565b612391565b6101fb546001600160a01b03165b90506123c16123a660e0860160c08701614062565b6123ae611d82565b6101fc546001600160a01b031685612a2a565b6114c26123d460e0860160c08701614062565b6123dc611d82565b836123e786886149cb565b612a2a565b6123f68282612a74565b600082815261016160205260409020610b589082612afc565b6124198282612b11565b600082815261016160205260409020610b589082612b97565b600061243d82611312565b905061244b8160008461294a565b612456600083611d8c565b6001600160a01b0381166000908152610196602052604081208054600192906124809084906149cb565b90915550506000828152610195602052604080822080546001600160a01b0319169055518391906001600160a01b03841690600080516020614c77833981519152908390a45050565b60006114778383612bac565b816001600160a01b0316836001600160a01b031614156125335760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610aa5565b6001600160a01b0383811660008181526101986020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60606125ac83611c2f565b6126075760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610aa5565b600080846001600160a01b03168460405161262291906149fd565b600060405180830381855af49150503d806000811461265d576040519150601f19603f3d011682016040523d82523d6000602084013e612662565b606091505b50915091506109408282604051806060016040528060278152602001614c3060279139612bd6565b612695848484611f1e565b6126a184848484612c0f565b6114c25760405162461bcd60e51b8152600401610aa590614a19565b600061096f825490565b6000611f1683838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061271d92506127119150889050612d1b565b80519060200120612e55565b90612ea3565b600054610100900460ff1661274a5760405162461bcd60e51b8152600401610aa590614a6b565b612752612ec7565b565b600054610100900460ff1661277b5760405162461bcd60e51b8152600401610aa590614a6b565b610cd88282612ef4565b600054610100900460ff166127ac5760405162461bcd60e51b8152600401610aa590614a6b565b6127b4612f35565b61115481612f5c565b600054610100900460ff166127e45760405162461bcd60e51b8152600401610aa590614a6b565b610cd88282612feb565b610cd882826123ec565b600061280383610dba565b600084815261012f6020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b612856828261147e565b610cd85761286e816001600160a01b0316601461303b565b61287983602061303b565b60405160200161288a929190614ab6565b60408051601f198184030181529082905262461bcd60e51b8252610aa591600401613fff565b610cd88282604051806020016040528060008152506131d6565b60006001600160e01b031982166380ac58cd60e01b14806128fb57506001600160e01b03198216635b5e139f60e01b145b8061096f575061096f82613209565b600090815261019560205260409020546001600160a01b0316151590565b60006129333361125c565b15612945575060131936013560601c90565b503390565b61295583838361322e565b61296e600080516020614bf0833981519152600061147e565b15801561298357506001600160a01b03831615155b801561299757506001600160a01b03821615155b15610b58576129b4600080516020614bf08339815191528461147e565b806129d257506129d2600080516020614bf08339815191528361147e565b610b585760405162461bcd60e51b815260206004820152602360248201527f7265737472696374656420746f205452414e534645525f524f4c4520686f6c6460448201526265727360e81b6064820152608401610aa5565b80612a34576114c2565b6001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612a6857612a6382826132e8565b6114c2565b6114c28484848461338a565b612a7e828261147e565b610cd857600082815261012f602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612ab8611d82565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000611477836001600160a01b0384166133e3565b612b1b828261147e565b15610cd857600082815261012f602090815260408083206001600160a01b03851684529091529020805460ff19169055612b53611d82565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000611477836001600160a01b038416613432565b6000826000018281548110612bc357612bc3614910565b9060005260206000200154905092915050565b60608315612be5575081611477565b825115612bf55782518084602001fd5b8160405162461bcd60e51b8152600401610aa59190613fff565b6000612c23846001600160a01b0316611c2f565b15612d1057836001600160a01b031663150b7a02612c3f611d82565b8786866040518563ffffffff1660e01b8152600401612c619493929190614b25565b6020604051808303816000875af1925050508015612c9c575060408051601f3d908101601f19168201909252612c9991810190614b62565b60015b612cf6573d808015612cca576040519150601f19603f3d011682016040523d82523d6000602084013e612ccf565b606091505b508051612cee5760405162461bcd60e51b8152600401610aa590614a19565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611f16565b506001949350505050565b60607f86633b4ffa94b7c3d316ca70d7d2700f3fdfa7a7806efd31499b513d9176692e612d4b6020840184614062565b612d5b6040850160208601614062565b6040850135612d706080870160608801614062565b612d7d608088018861475a565b604051612d8b929190614b7f565b60405190819003902060a0880135612da960e08a0160c08b01614062565b612dba6101008b0160e08c016149e2565b612dcc6101208c016101008d016149e2565b60408051602081019b909b526001600160a01b03998a16908b015296881660608a0152608089019590955292861660a088015260c087019190915260e08601529092166101008401526001600160801b03918216610120808501919091529116610140830152830135610160820152610180016040516020818303038152906040529050919050565b600061096f612e62613525565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000612eb285856135a0565b91509150612ebf816135e6565b509392505050565b600054610100900460ff16612eee5760405162461bcd60e51b8152600401610aa590614a6b565b60018055565b600054610100900460ff16612f1b5760405162461bcd60e51b8152600401610aa590614a6b565b815160209283012081519190920120603391909155603455565b600054610100900460ff166127525760405162461bcd60e51b8152600401610aa590614a6b565b600054610100900460ff16612f835760405162461bcd60e51b8152600401610aa590614a6b565b60005b8151811015610cd857600160996000848481518110612fa757612fa7614910565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580612fe381614984565b915050612f86565b600054610100900460ff166130125760405162461bcd60e51b8152600401610aa590614a6b565b815161302690610193906020850190613e3c565b508051610b5890610194906020840190613e3c565b6060600061304a836002614719565b61305590600261499f565b6001600160401b0381111561306c5761306c61407d565b6040519080825280601f01601f191660200182016040528015613096576020820181803683370190505b509050600360fc1b816000815181106130b1576130b1614910565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106130e0576130e0614910565b60200101906001600160f81b031916908160001a9053506000613104846002614719565b61310f90600161499f565b90505b6001811115613187576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061314357613143614910565b1a60f81b82828151811061315957613159614910565b60200101906001600160f81b031916908160001a90535060049490941c9361318081614b8f565b9050613112565b5083156114775760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610aa5565b6131e0838361379c565b6131ed6000848484612c0f565b610b585760405162461bcd60e51b8152600401610aa590614a19565b60006001600160e01b03198216635a05180f60e01b148061096f575061096f826138ca565b6001600160a01b03831661328b57613286816101c7805460008381526101c860205260408120829055600182018355919091527fff6df30967a6a678f565c59a19e91e5c0dbb20cfe9f9bf26d7da6dea0fffa24c0155565b6132ae565b816001600160a01b0316836001600160a01b0316146132ae576132ae83826138ff565b6001600160a01b0382166132c557610b58816139a1565b826001600160a01b0316826001600160a01b031614610b5857610b588282613a56565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613335576040519150601f19603f3d011682016040523d82523d6000602084013e61333a565b606091505b5050905080610b585760405162461bcd60e51b815260206004820152601c60248201527b1b985d1a5d99481d1bdad95b881d1c985b9cd9995c8819985a5b195960221b6044820152606401610aa5565b816001600160a01b0316836001600160a01b031614156133a9576114c2565b6001600160a01b0383163014156133ce57612a636001600160a01b0385168383613a9c565b6114c26001600160a01b038516848484613af2565b600081815260018301602052604081205461342a5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561096f565b50600061096f565b6000818152600183016020526040812054801561351b5760006134566001836149cb565b855490915060009061346a906001906149cb565b90508181146134cf57600086600001828154811061348a5761348a614910565b90600052602060002001549050808760000184815481106134ad576134ad614910565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806134e0576134e0614ba6565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061096f565b600091505061096f565b60006114597f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61355460335490565b6034546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6000808251604114156135d75760208301516040840151606085015160001a6135cb87828585613b2a565b945094505050506135df565b506000905060025b9250929050565b60008160048111156135fa576135fa614bbc565b14156136035750565b600181600481111561361757613617614bbc565b14156136605760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610aa5565b600281600481111561367457613674614bbc565b14156136c25760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610aa5565b60038160048111156136d6576136d6614bbc565b141561372f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610aa5565b600481600481111561374357613743614bbc565b14156111545760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610aa5565b6001600160a01b0382166137f25760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610aa5565b6137fb8161290a565b156138475760405162461bcd60e51b815260206004820152601c60248201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b6044820152606401610aa5565b6138536000838361294a565b6001600160a01b03821660009081526101966020526040812080546001929061387d90849061499f565b90915550506000818152610195602052604080822080546001600160a01b0319166001600160a01b0386169081179091559051839290600080516020614c77833981519152908290a45050565b60006001600160e01b03198216637965db0b60e01b148061096f57506301ffc9a760e01b6001600160e01b031983161461096f565b6000600161390c8461139f565b61391691906149cb565b60008381526101c6602052604090205490915080821461396c576001600160a01b03841660009081526101c56020908152604080832085845282528083205484845281842081905583526101c690915290208190555b5060009182526101c6602090815260408084208490556001600160a01b0390941683526101c581528383209183525290812055565b6101c7546000906139b4906001906149cb565b60008381526101c860205260408120546101c780549394509092849081106139de576139de614910565b90600052602060002001549050806101c78381548110613a0057613a00614910565b60009182526020808320909101929092558281526101c890915260408082208490558582528120556101c7805480613a3a57613a3a614ba6565b6001900381819060005260206000200160009055905550505050565b6000613a618361139f565b6001600160a01b0390931660009081526101c56020908152604080832086845282528083208590559382526101c69052919091209190915550565b610b588363a9059cbb60e01b8484604051602401613abb9291906141de565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613c0d565b6040516001600160a01b03808516602483015283166044820152606481018290526114c29085906323b872dd60e01b90608401613abb565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115613b575750600090506003613c04565b8460ff16601b14158015613b6f57508460ff16601c14155b15613b805750600090506004613c04565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613bd4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613bfd57600060019250925050613c04565b9150600090505b94509492505050565b6000613c62826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613cdf9092919063ffffffff16565b805190915015610b585780806020019051810190613c809190614bd2565b610b585760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610aa5565b6060611f16848460008585613cf385611c2f565b613d3f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aa5565b600080866001600160a01b03168587604051613d5b91906149fd565b60006040518083038185875af1925050503d8060008114613d98576040519150601f19603f3d011682016040523d82523d6000602084013e613d9d565b606091505b5091509150613dad828286612bd6565b979650505050505050565b828054613dc490614651565b90600052602060002090601f016020900481019282613de65760008555613e2c565b82601f10613dff5782800160ff19823516178555613e2c565b82800160010185558215613e2c579182015b82811115613e2c578235825591602001919060010190613e11565b50613e38929150613eb0565b5090565b828054613e4890614651565b90600052602060002090601f016020900481019282613e6a5760008555613e2c565b82601f10613e8357805160ff1916838001178555613e2c565b82800160010185558215613e2c579182015b82811115613e2c578251825591602001919060010190613e95565b5b80821115613e385760008155600101613eb1565b80356001600160a01b0381168114613edc57600080fd5b919050565b60008083601f840112613ef357600080fd5b5081356001600160401b03811115613f0a57600080fd5b6020830191508360208285010111156135df57600080fd5b600080600060408486031215613f3757600080fd5b613f4084613ec5565b925060208401356001600160401b03811115613f5b57600080fd5b613f6786828701613ee1565b9497909650939450505050565b6001600160e01b03198116811461115457600080fd5b600060208284031215613f9c57600080fd5b813561147781613f74565b60005b83811015613fc2578181015183820152602001613faa565b838111156114c25750506000910152565b60008151808452613feb816020860160208601613fa7565b601f01601f19169290920160200192915050565b6020815260006114776020830184613fd3565b6001600160a01b03169052565b60006020828403121561403157600080fd5b5035919050565b6000806040838503121561404b57600080fd5b61405483613ec5565b946020939093013593505050565b60006020828403121561407457600080fd5b61147782613ec5565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156140bb576140bb61407d565b604052919050565b60006001600160401b038311156140dc576140dc61407d565b6140ef601f8401601f1916602001614093565b905082815283838301111561410357600080fd5b828260208301376000602084830101529392505050565b600082601f83011261412b57600080fd5b611477838335602085016140c3565b6000806040838503121561414d57600080fd5b8235915060208301356001600160401b0381111561416a57600080fd5b6141768582860161411a565b9150509250929050565b60008060006060848603121561419557600080fd5b61419e84613ec5565b92506141ac60208501613ec5565b9150604084013590509250925092565b600080604083850312156141cf57600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b60008060006040848603121561420c57600080fd5b83356001600160401b038082111561422357600080fd5b90850190610140828803121561423857600080fd5b9093506020850135908082111561424e57600080fd5b50613f6786828701613ee1565b6000806040838503121561426e57600080fd5b8235915061427e60208401613ec5565b90509250929050565b6000806020838503121561429a57600080fd5b82356001600160401b038111156142b057600080fd5b6142bc85828601613ee1565b90969095509350505050565b6000806000606084860312156142dd57600080fd5b833592506141ac60208501613ec5565b801515811461115457600080fd5b6000806040838503121561430e57600080fd5b61431783613ec5565b91506020830135614327816142ed565b809150509250929050565b6000806020838503121561434557600080fd5b82356001600160401b038082111561435c57600080fd5b818501915085601f83011261437057600080fd5b81358181111561437f57600080fd5b8660208260051b850101111561439457600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156143fb57603f198886030184526143e9858351613fd3565b945092850192908501906001016143cd565b5092979650505050505050565b6000806000806080858703121561441e57600080fd5b61442785613ec5565b935061443560208601613ec5565b92506040850135915060608501356001600160401b0381111561445757600080fd5b8501601f8101871361446857600080fd5b614477878235602084016140c3565b91505092959194509250565b600082601f83011261449457600080fd5b813560206001600160401b038211156144af576144af61407d565b8160051b6144be828201614093565b92835284810182019282810190878511156144d857600080fd5b83870192505b84831015613dad576144ef83613ec5565b825291830191908301906144de565b80356001600160801b0381168114613edc57600080fd5b6000806000806000806000806000806101408b8d03121561453557600080fd5b61453e8b613ec5565b995060208b01356001600160401b038082111561455a57600080fd5b6145668e838f0161411a565b9a5060408d013591508082111561457c57600080fd5b6145888e838f0161411a565b995060608d013591508082111561459e57600080fd5b6145aa8e838f0161411a565b985060808d01359150808211156145c057600080fd5b506145cd8d828e01614483565b9650506145dc60a08c01613ec5565b94506145ea60c08c01613ec5565b93506145f860e08c016144fe565b92506146076101008c016144fe565b91506146166101208c01613ec5565b90509295989b9194979a5092959850565b6000806040838503121561463a57600080fd5b61464383613ec5565b915061427e60208401613ec5565b600181811c9082168061466557607f821691505b6020821081141561468657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600f908201526e65786365656473204d41585f42505360881b604082015260600190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561473357614733614703565b500290565b60008261475557634e487b7160e01b600052601260045260246000fd5b500490565b6000808335601e1984360301811261477157600080fd5b8301803591506001600160401b0382111561478b57600080fd5b6020019150368190038213156135df57600080fd5b6000808335601e198436030181126147b757600080fd5b83016020810192503590506001600160401b038111156147d657600080fd5b8036038313156135df57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526148276020820161482284613ec5565b614012565b600061483560208401613ec5565b6148426040840182614012565b506040830135606083015261485960608401613ec5565b6148666080840182614012565b5061487460808401846147a0565b6101408060a086015261488c610160860183856147e5565b925060a086013560c08601526148a460c08701613ec5565b91506148b360e0860183614012565b6148bf60e087016144fe565b91506101006148d8818701846001600160801b03169052565b6148e38188016144fe565b9250506101206148fd818701846001600160801b03169052565b9590950135939094019290925250919050565b634e487b7160e01b600052603260045260246000fd5b60208082526012908201527165786365656420726f79616c74792062707360701b604082015260600190565b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b600060001982141561499857614998614703565b5060010190565b600082198211156149b2576149b2614703565b500190565b602081526000611f166020830184866147e5565b6000828210156149dd576149dd614703565b500390565b6000602082840312156149f457600080fd5b611477826144fe565b60008251614a0f818460208701613fa7565b9190910192915050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351614ae8816017850160208801613fa7565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614b19816028840160208801613fa7565b01602801949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614b5890830184613fd3565b9695505050505050565b600060208284031215614b7457600080fd5b815161147781613f74565b8183823760009101908152919050565b600081614b9e57614b9e614703565b506000190190565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b600060208284031215614be457600080fd5b8151611477816142ed56fe8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c6bd6b5318a46e5fff572d5e4258a20774aab40cc35ac7680654b9081fcc82f80416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65649f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205ea0e47af360befd346af28a4d08c0c7610214d9b9c1f30d972518b81dd9f46764736f6c634300080c0033