[ { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "EmptyString", "type": "error" }, { "inputs": [], "name": "FileAlreadyRegistered", "type": "error" }, { "inputs": [], "name": "FileNotRegistered", "type": "error" }, { "inputs": [], "name": "InvalidManager", "type": "error" }, { "inputs": [], "name": "ManagerDoesNotExist", "type": "error" }, { "inputs": [], "name": "ManagerRemoveBlocked", "type": "error" }, { "inputs": [], "name": "ManagerSwapBlocked", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintFrozen", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "MinterRegistrationInvalid", "type": "error" }, { "inputs": [], "name": "MismatchedArrayLengths", "type": "error" }, { "inputs": [], "name": "NotMinter", "type": "error" }, { "inputs": [], "name": "OverLimitSupply", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "RoyaltyBPSInvalid", "type": "error" }, { "inputs": [], "name": "RoyaltySetBlocked", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "TokenNotInRange", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "Unauthorized", "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": false, "internalType": "string", "name": "oldBaseUri", "type": "string" }, { "indexed": false, "internalType": "string", "name": "newBaseURI", "type": "string" } ], "name": "BaseURISet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipientAddress", "type": "address" }, { "indexed": true, "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "name": "DefaultRoyaltySet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newDefaultTokenManager", "type": "address" } ], "name": "DefaultTokenManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "indexed": false, "internalType": "struct IRoyaltyManager.Royalty[]", "name": "_newRoyalties", "type": "tuple[]" } ], "name": "GranularRoyaltiesSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" } ], "name": "GranularTokenManagersRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" }, { "indexed": false, "internalType": "address[]", "name": "_tokenManagers", "type": "address[]" } ], "name": "GranularTokenManagersSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newLimitSupply", "type": "uint256" } ], "name": "LimitSupplySet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "registered", "type": "bool" } ], "name": "MinterRegistrationChanged", "type": "event" }, { "anonymous": false, "inputs": [], "name": "MintsFrozen", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newRoyaltyManager", "type": "address" } ], "name": "RoyaltyManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "TokenURIsSet", "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": [ { "internalType": "string", "name": "fileName", "type": "string" }, { "internalType": "address[]", "name": "fileStorageAddresses", "type": "address[]" } ], "name": "addFile", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "customRendererConfig", "outputs": [ { "internalType": "address", "name": "renderer", "type": "address" }, { "internalType": "bool", "name": "processMintDataOnRenderer", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "fileName", "type": "string" } ], "name": "fileContents", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "fileName", "type": "string" } ], "name": "fileStorage", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "files", "outputs": [ { "internalType": "string[]", "name": "", "type": "string[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "freezeMints", "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": [ { "internalType": "address", "name": "creator", "type": "address" }, { "internalType": "string", "name": "_contractURI", "type": "string" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "defaultRoyalty", "type": "tuple" }, { "internalType": "address", "name": "_defaultTokenManager", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "address", "name": "trustedForwarder", "type": "address" }, { "internalType": "address", "name": "initialMinter", "type": "address" }, { "internalType": "string", "name": "newBaseURI", "type": "string" }, { "internalType": "uint256", "name": "_limitSupply", "type": "uint256" }, { "internalType": "bool", "name": "useMarketplaceFiltererRegistry", "type": "bool" }, { "internalType": "address", "name": "_observability", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "creator", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "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": [], "name": "limitSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintAmountToOneRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "recipients", "type": "address[]" } ], "name": "mintOneToMultipleRecipients", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "mintOneToOneRecipient", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "recipients", "type": "address[]" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintSameAmountToMultipleRecipients", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "minters", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "observability", "outputs": [ { "internalType": "contract IObservability", "name": "", "type": "address" } ], "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": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "registerMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "removeDefaultTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "fileName", "type": "string" } ], "name": "removeFile", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" } ], "name": "removeGranularTokenManagers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "removeRoyaltyManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenGroupingId", "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": [], "name": "royaltyManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "payable", "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": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newBaseURI", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newName", "type": "string" }, { "internalType": "string", "name": "newSymbol", "type": "string" }, { "internalType": "string", "name": "newContractUri", "type": "string" } ], "name": "setContractMetadata", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "renderer", "type": "address" }, { "internalType": "bool", "name": "processMintDataOnRenderer", "type": "bool" } ], "internalType": "struct ERC721GeneralSequenceBase.CustomRendererConfig", "name": "_customRendererConfig", "type": "tuple" } ], "name": "setCustomRenderer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "_royalty", "type": "tuple" } ], "name": "setDefaultRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_defaultTokenManager", "type": "address" } ], "name": "setDefaultTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty[]", "name": "_newRoyalties", "type": "tuple[]" } ], "name": "setGranularRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" }, { "internalType": "address[]", "name": "_tokenManagers", "type": "address[]" } ], "name": "setGranularTokenManagers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_limitSupply", "type": "uint256" } ], "name": "setLimitSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyManager", "type": "address" } ], "name": "setRoyaltyManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "setTokenURIs", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "supply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": "id", "type": "uint256" } ], "name": "tokenManager", "outputs": [ { "internalType": "address", "name": "manager", "type": "address" } ], "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": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "unregisterMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b50615fc280620000216000396000f3fe6080604052600436106102865760003560e01c806301ffc9a71461028b57806302ee1211146102c0578063047fc9aa146102ed578063063a75021461031057806306fdde0314610327578063081812fc14610349578063095ea7b31461037657806318160ddd14610389578063184a94d51461039e57806318bae6c8146103be57806323b872dd146103de5780632a55205a146103f15780632a5ac7641461041f5780632b566c2a1461043f5780632ddcb21f1461045f5780632fc3a8d9146104765780633113cca0146104965780633713c1a1146104b657806342842e0e146104d657806342966c68146104e957806347230dcb146105095780634f58122a146105295780634fc8416d1461054957806350cf5a311461058457806351f13167146105a457806354820541146105c457806355f804b3146105e4578063572b6c05146106045780635be95448146106245780636352211e146106445780636502abea146106645780636c0360eb1461068457806370a0823114610699578063715018a6146106b95780637c39601d146106ce578063834a20df146106f05780638da5cb5b1461071057806395d89b4114610725578063a22cb4651461073a578063a305f5b21461075a578063b5c5801e1461077a578063b88d4fde1461078f578063bfb2995c146107a2578063c2f50701146107c2578063c87b56dd146107d7578063d1f57894146107f7578063db3e4c8414610817578063e8a3d48514610837578063e985e9c51461084c578063eb8721501461086c578063ee295d621461088c578063eeab0589146108ac578063ef60ceaf146108cc578063f1afe04d146108ec578063f2fde38b1461090c578063f7441c3a1461092c578063f97b57ec1461094c575b600080fd5b34801561029757600080fd5b506102ab6102a6366004614bd1565b610961565b60405190151581526020015b60405180910390f35b3480156102cc57600080fd5b506102e06102db366004614c36565b610972565b6040516102b79190614c77565b3480156102f957600080fd5b50610302610a62565b6040519081526020016102b7565b34801561031c57600080fd5b50610325610a71565b005b34801561033357600080fd5b5061033c610b31565b6040516102b79190614d1c565b34801561035557600080fd5b50610369610364366004614d2f565b610bcc565b6040516102b79190614d48565b610325610384366004614d7c565b610c10565b34801561039557600080fd5b50610302610c20565b3480156103aa57600080fd5b506103026103b9366004614da8565b610c40565b3480156103ca57600080fd5b5060cb54610369906001600160a01b031681565b6103256103ec366004614dc5565b610d5f565b3480156103fd57600080fd5b5061041161040c366004614e06565b610f03565b6040516102b7929190614e28565b34801561042b57600080fd5b5061032561043a366004614e41565b610f9e565b34801561044b57600080fd5b5061033c61045a366004614c36565b611034565b34801561046b57600080fd5b506103026101085481565b34801561048257600080fd5b50610325610491366004614f1e565b6111a1565b3480156104a257600080fd5b506103256104b1366004614f69565b611322565b3480156104c257600080fd5b506103256104d1366004614d2f565b611416565b6103256104e4366004614dc5565b6114c2565b3480156104f557600080fd5b50610325610504366004614d2f565b6114dd565b34801561051557600080fd5b50610325610524366004614da8565b611699565b34801561053557600080fd5b50610325610544366004614fd4565b61174d565b34801561055557600080fd5b5061010954610576906001600160a01b03811690600160a01b900460ff1682565b6040516102b7929190615009565b34801561059057600080fd5b5061032561059f366004614da8565b61196b565b3480156105b057600080fd5b506103256105bf366004615036565b611acd565b3480156105d057600080fd5b506103256105df3660046151a8565b611b3e565b3480156105f057600080fd5b506103256105ff366004614c36565b611c15565b34801561061057600080fd5b506102ab61061f366004614da8565b611dbc565b34801561063057600080fd5b5061032561063f366004614d7c565b611dd0565b34801561065057600080fd5b5061036961065f366004614d2f565b611ec2565b34801561067057600080fd5b5061036961067f366004614d2f565b611ecd565b34801561069057600080fd5b5061033c611efc565b3480156106a557600080fd5b506103026106b4366004614da8565b611f8a565b3480156106c557600080fd5b50610325611fe9565b3480156106da57600080fd5b506106e3611ffb565b6040516102b791906152f0565b3480156106fc57600080fd5b5061032561070b366004614da8565b612182565b34801561071c57600080fd5b50610369612200565b34801561073157600080fd5b5061033c61220f565b34801561074657600080fd5b50610325610755366004615352565b612227565b34801561076657600080fd5b50610325610775366004614da8565b6122a4565b34801561078657600080fd5b50610325612408565b61032561079d36600461538b565b61255c565b3480156107ae57600080fd5b506103256107bd3660046153f6565b61259d565b3480156107ce57600080fd5b506103256128bd565b3480156107e357600080fd5b5061033c6107f2366004614d2f565b6129ce565b34801561080357600080fd5b5061032561081236600461548f565b612a5e565b34801561082357600080fd5b506103256108323660046154d4565b612b70565b34801561084357600080fd5b5061033c612ca3565b34801561085857600080fd5b506102ab61086736600461550d565b612cb1565b34801561087857600080fd5b5060d054610369906001600160a01b031681565b34801561089857600080fd5b5060cf54610369906001600160a01b031681565b3480156108b857600080fd5b506103256108c73660046154d4565b612cee565b3480156108d857600080fd5b506103256108e7366004615036565b612fb8565b3480156108f857600080fd5b50610325610907366004614c36565b6131c6565b34801561091857600080fd5b50610325610927366004614da8565b613451565b34801561093857600080fd5b50610325610947366004614fd4565b6134c7565b34801561095857600080fd5b506102e0613636565b600061096c82613642565b92915050565b6060600083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060405192935061010a926109c1925084915061553b565b908152604051908190036020019020546109e5576109e563098f417360e21b613690565b61010a84846040516109f8929190615557565b9081526040805191829003602090810183208054808302850183019093528284529190830182828015610a5457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a36575b505050505091505092915050565b6000610a6c61369a565b905090565b610a796136ad565b610a8161371c565b60cf805460ff60a01b1916600160a01b1790556040517f9d4b38394dff663b46f53f52ced584161b5021180321b381f6104325eecebf4990600090a160d060009054906101000a90046001600160a01b03166001600160a01b031663fd120bd26040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b0d57600080fd5b505af1158015610b21573d6000803e3d6000fd5b50505050610b2f6001609755565b565b6060610b3b61377d565b6002018054610b4990615567565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7590615567565b8015610bc25780601f10610b9757610100808354040283529160200191610bc2565b820191906000526020600020905b815481529060010190602001808311610ba557829003601f168201915b5050505050905090565b6000610bd7826137a1565b610beb57610beb6333d1c03960e21b613690565b610bf361377d565b60009283526006016020525060409020546001600160a01b031690565b610c1c828260016137fd565b5050565b60006001610c2c61377d565b60010154610c3861377d565b540303919050565b6000610c55610c4d6138ae565b60c9906138b8565b610c6957610c69633e34a41b60e21b613690565b610c7161371c565b60cf54600160a01b900460ff1660011415610c9657610c966345a9661760e01b613690565b6000610ca06138d4565b9050610cab816138e4565b610cb683600161390b565b60408051808201909152610109546001600160a01b0381168252600160a01b900460ff161580156020830152610d4d578051604051630298386160e01b81526001600160a01b0390911690630298386190610d1a908590600190899060040161559c565b600060405180830381600087803b158015610d3457600080fd5b505af1158015610d48573d6000803e3d6000fd5b505050505b509050610d5a6001609755565b919050565b6000610d6a826139dc565b6001600160a01b039485169490915081168414610d9057610d9062a1148160e81b613690565b600080610d9c84613a9a565b91509150610db18187610dac3390565b613ac2565b610dd357610dbf8633612cb1565b610dd357610dd3632ce44b5f60e11b613690565b8015610dde57600082555b610de661377d565b6001600160a01b0387166000908152600591909101602052604090208054600019019055610e1261377d565b6001600160a01b03861660009081526005919091016020526040902080546001019055610e4385600160e11b613ad7565b610e4b61377d565b60008681526004919091016020526040902055600160e11b8316610eba5760018401610e7561377d565b60008281526004919091016020526040902054610eb857610e9461377d565b548114610eb85783610ea461377d565b600083815260049190910160205260409020555b505b6001600160a01b038516848188600080516020615f76833981519152600080a480610eef57610eef633a954ecd60e21b613690565b610efa878787613aec565b50505050505050565b600082815260ce602090815260408083208151808301909252546001600160a01b038116808352600160a01b90910461ffff16928201929092528291610f6e57506040805180820190915260cd546001600160a01b0381168252600160a01b900461ffff1660208201525b8051602082015190935061271090610f8a9061ffff16866155d1565b610f9491906155f0565b9150509250929050565b610fa66136ad565b610fb286868686613c87565b610fbf6101078383614991565b5060d054604051635bf57bc360e01b81526001600160a01b0390911690635bf57bc390610ffa9089908990899089908990899060040161563b565b600060405180830381600087803b15801561101457600080fd5b505af1158015611028573d6000803e3d6000fd5b50505050505050505050565b6060600083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060405192935061010a92611083925084915061553b565b908152604051908190036020019020546110a7576110a763098f417360e21b613690565b600061010a85856040516110bc929190615557565b908152604080519182900360209081018320805480830285018301909352828452919083018282801561111857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110fa575b505083516040805160208082018352600091829052915196975091959450909250905081805b858110156111835786818151811061115857611158615684565b60200260200101519150600161116c833b90565b039350836001848701843c9183019160010161113e565b5050601f19601f820181168401604052018252509695505050505050565b6111ac610c4d6138ae565b6111c0576111c0633e34a41b60e21b613690565b6111c861371c565b60cf54600160a01b900460ff16600114156111ed576111ed6345a9661760e01b613690565b81600060016111fa6138d4565b611204919061569a565b905060005b828110156112535761124186868381811061122657611226615684565b905060200201602081019061123b9190614da8565b8561390b565b8061124b816156b1565b915050611209565b5061127061126184846155d1565b61126b90836156cc565b6138e4565b60408051808201909152610109546001600160a01b0381168252600160a01b900460ff1615801560208301526113105780516001600160a01b03166358b916466112bb8460016156cc565b8689896040518563ffffffff1660e01b81526004016112dd949392919061572d565b600060405180830381600087803b1580156112f757600080fd5b505af115801561130b573d6000803e3d6000fd5b505050505b50505061131d6001609755565b505050565b61132a6136ad565b600084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060405192935061010a92611377925084915061553b565b908152604051908190036020019020541561139c5761139c63aa2fa7cb60e01b613690565b61010b805460018101825560009190915281516113e0917fc4a0eda7235d7f6fd09c1e1f9f82dc3264d0d2f064cb41576c42a996a7be289201906020840190614a15565b50828261010a836040516113f4919061553b565b90815260405190819003602001902061140e929091614a89565b505050505050565b61141e6136ad565b61142661371c565b61010881905560405181907fad7735a1decc3db45c1eab757cc4a1cb4bff8e332877b55f6db4ea11d82320c690600090a260d054604051630941255b60e21b8152600481018390526001600160a01b0390911690632504956c90602401600060405180830381600087803b15801561149d57600080fd5b505af11580156114b1573d6000803e3d6000fd5b505050506114bf6001609755565b50565b61131d8383836040518060200160405280600081525061255c565b6114e561371c565b60006114f082611ecd565b905060006114fc6138ae565b90506001600160a01b0382161580159061158557506040516301ffc9a760e01b81526001600160a01b038316906301ffc9a7906115449063129dae8b60e01b90600401615757565b602060405180830381865afa158015611561573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115859190615777565b1561160057600061159584611ec2565b60405163129dae8b60e01b81529091506001600160a01b0384169063129dae8b906115c890859085908990600401615794565b600060405180830381600087803b1580156115e257600080fd5b505af11580156115f6573d6000803e3d6000fd5b505050505061161d565b61160a8184613cbc565b61161d5761161d6282b42960e81b613690565b61162683613cf5565b60d0546040516323de665160e01b81526001600160a01b03909116906323de66519061165b9084906000908890600401615794565b600060405180830381600087803b15801561167557600080fd5b505af1158015611689573d6000803e3d6000fd5b5050505050506114bf6001609755565b6116a16136ad565b6116ac60c982613d35565b6116c0576116c063ea6eb5c360e01b613690565b6040516001906001600160a01b03831690600080516020615f3683398151915290600090a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f90611718908490600190600401615009565b600060405180830381600087803b15801561173257600080fd5b505af1158015611746573d6000803e3d6000fd5b5050505050565b61175561371c565b600061175f6138ae565b90508160005b818110156118c157600060cc600087878581811061178557611785615684565b60209081029290920135835250810191909152604001600020546001600160a01b03169050806117bf576117bf635f98be1560e11b613690565b806001600160a01b031663ce2003a5858888868181106117e1576117e1615684565b905060200201356040518363ffffffff1660e01b8152600401611805929190614e28565b6020604051808303816000875af1158015611824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118489190615777565b61185c5761185c63251c48e160e11b613690565b600060cc600088888681811061187457611874615684565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505080806118b9906156b1565b915050611765565b507f4d30c2588339a383e2c3092b5383924cf202ae9c377b76c5fe5208cd41d8d2aa84846040516118f39291906157ee565b60405180910390a160d0546040516320364dcd60e21b81526001600160a01b03909116906380d937349061192d90879087906004016157ee565b600060405180830381600087803b15801561194757600080fd5b505af115801561195b573d6000803e3d6000fd5b505050505050610c1c6001609755565b61197361371c565b61197c81613d4a565b61199057611990631a7387bd60e11b613690565b600061199a6138ae565b60cf549091506001600160a01b0316806119e2576119b6612200565b6001600160a01b0316826001600160a01b0316146119dd576119dd6282b42960e81b613690565b611a68565b60405163bcdbc94760e01b81526001600160a01b038481166004830152838116602483015282169063bcdbc94790604401602060405180830381865afa158015611a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a549190615777565b611a6857611a6863e10a050560e01b613690565b60cf80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615f9683398151915290600090a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab4229061165b908690600401614d48565b611ad56136ad565b6000611ae46020830183614da8565b6001600160a01b03161415611b305760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081a5b9c1d5d609a1b60448201526064015b60405180910390fd5b8061010961131d8282615822565b600054610100900460ff1615808015611b5e5750600054600160ff909116105b80611b7f5750611b6d30613d66565b158015611b7f575060005460ff166001145b611b9b5760405162461bcd60e51b8152600401611b2790615861565b6000805460ff191660011790558015611bbe576000805461ff0019166101001790555b611bd28d8d8d8d8d8d8d8d8d8d8d8d613d75565b8015611c06576000805461ff001916905560405160018152600080516020615f568339815191529060200160405180910390a15b50505050505050505050505050565b611c1d61371c565b80611c3257611c3263ecd7b0d160e01b613690565b60cb546001600160a01b031680611c7e57611c4b612200565b6001600160a01b0316611c5c6138ae565b6001600160a01b031614611c7957611c796282b42960e81b613690565b611d0e565b806001600160a01b0316633d820a4d611c956138ae565b600086866040518563ffffffff1660e01b8152600401611cb894939291906158af565b6020604051808303816000875af1158015611cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfb9190615777565b611d0e57611d0e6282b42960e81b613690565b611d4d83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613e6092505050565b60d054604051632cfd654b60e11b81526001600160a01b03909116906359faca9690611d7f90869086906004016158d7565b600060405180830381600087803b158015611d9957600080fd5b505af1158015611dad573d6000803e3d6000fd5b5050505050610c1c6001609755565b6065546001600160a01b0391821691161490565b611ddb610c4d6138ae565b611def57611def633e34a41b60e21b613690565b611df761371c565b60cf54600160a01b900460ff1660011415611e1c57611e1c6345a9661760e01b613690565b60006001611e286138d4565b611e32919061569a565b9050611e3e838361390b565b611e4b61126b83836156cc565b60408051808201909152610109546001600160a01b0381168252600160a01b900460ff161580156020830152611eb65780516001600160a01b03166302983861611e968460016156cc565b85876040518463ffffffff1660e01b815260040161192d9392919061559c565b5050610c1c6001609755565b600061096c826139dc565b60cb54600082815260cc60205260409020546001600160a01b0391821691168015611ef6578091505b50919050565b60d58054611f0990615567565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3590615567565b8015611f825780601f10611f5757610100808354040283529160200191611f82565b820191906000526020600020905b815481529060010190602001808311611f6557829003601f168201915b505050505081565b60006001600160a01b038216611faa57611faa6323d3ad8160e21b613690565b6001600160401b03611fba61377d565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b611ff16136ad565b610b2f6000613ead565b6060600061010b805480602002602001604051908101604052809291908181526020016000905b828210156120ce57838290600052602060002001805461204190615567565b80601f016020809104026020016040519081016040528092919081815260200182805461206d90615567565b80156120ba5780601f1061208f576101008083540402835291602001916120ba565b820191906000526020600020905b81548152906001019060200180831161209d57829003601f168201915b505050505081526020019060010190612022565b505050509050600081516001600160401b038111156120ef576120ef615052565b60405190808252806020026020018201604052801561212257816020015b606081526020019060019003908161210d5790505b50905060005b825181101561217b5782818151811061214357612143615684565b602002602001015182828151811061215d5761215d615684565b60200260200101819052508080612173906156b1565b915050612128565b5092915050565b61218a6136ad565b61219560c982613eff565b6121a9576121a963ea6eb5c360e01b613690565b6040516000906001600160a01b03831690600080516020615f36833981519152908390a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f90611718908490600090600401615009565b6033546001600160a01b031690565b606061221961377d565b6003018054610b4990615567565b8061223061377d565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6122ac61371c565b6122b581613f14565b6122c9576122c9631a7387bd60e11b613690565b60006122d36138ae565b60cb549091506001600160a01b03168061231b576122ef612200565b6001600160a01b0316826001600160a01b031614612316576123166282b42960e81b613690565b6123a3565b6040516342f19adb60e11b81526001600160a01b038216906385e335b69061234c90859060009088906004016158eb565b6020604051808303816000875af115801561236b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238f9190615777565b6123a3576123a363e10a050560e01b613690565b60cb80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615f1683398151915290600090a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd9061165b908690600401614d48565b61241061371c565b600061241a6138ae565b60cb549091506001600160a01b03168061243e5761243e635f98be1560e11b613690565b60405163ce2003a560e01b81526001600160a01b0382169063ce2003a59061246d908590600090600401614e28565b6020604051808303816000875af115801561248c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b09190615777565b6124c4576124c463251c48e160e11b613690565b60cb80546001600160a01b0319169055604051600090600080516020615f16833981519152908290a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd9061251e90600090600401614d48565b600060405180830381600087803b15801561253857600080fd5b505af115801561254c573d6000803e3d6000fd5b505050505050610b2f6001609755565b612567848484610d5f565b6001600160a01b0383163b156125975761258384848484613f30565b612597576125976368d2bf6b60e11b613690565b50505050565b6125a561371c565b60006125af6138ae565b905060006125bb612200565b60cf549091506001600160a01b031685816126bc57826001600160a01b0316846001600160a01b0316146125f8576125f86282b42960e81b613690565b60005b818110156126b65761263e87878381811061261857612618615684565b9050604002016020016020810190612630919061590e565b61271061ffff909116111590565b61265257612652633daf741f60e21b613690565b86868281811061266457612664615684565b90506040020160ce60008b8b8581811061268057612680615684565b90506020020135815260200190815260200160002081816126a1919061592b565b508190506126ae816156b1565b9150506125fb565b5061280a565b60005b81811015612808576126dc87878381811061261857612618615684565b6126f0576126f0633daf741f60e21b613690565b826001600160a01b031663ad6e40c78a8a8481811061271157612711615684565b9050602002013589898581811061272a5761272a615684565b905060400201886040518463ffffffff1660e01b815260040161274f9392919061599f565b602060405180830381865afa15801561276c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127909190615777565b6127a4576127a463270e710760e21b613690565b8686828181106127b6576127b6615684565b90506040020160ce60008b8b858181106127d2576127d2615684565b90506020020135815260200190815260200160002081816127f3919061592b565b50819050612800816156b1565b9150506126bf565b505b7feaf422d1ab2d8f38856ab6be8378c08d2886463a33667e896ba3a6ebf2c6260c8888888860405161283f94939291906159cc565b60405180910390a160d054604051632be18fef60e11b81526001600160a01b03909116906357c31fde9061287d908b908b908b908b906004016159cc565b600060405180830381600087803b15801561289757600080fd5b505af11580156128ab573d6000803e3d6000fd5b50505050505050506125976001609755565b6128c561371c565b60006128cf6138ae565b60cf549091506001600160a01b0316806128f3576128f3635f98be1560e11b613690565b60405163680c607d60e11b81526001600160a01b0382169063d018c0fa9061291f908590600401614d48565b602060405180830381865afa15801561293c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129609190615777565b6129745761297463251c48e160e11b613690565b60cf80546001600160a01b0319169055604051600090600080516020615f96833981519152908290a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab4229061251e90600090600401614d48565b610109546060906001600160a01b031615612a55576101095460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd90602401600060405180830381865afa158015612a2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261096c9190810190615a69565b61096c8261400f565b600054610100900460ff1615808015612a7e5750600054600160ff909116105b80612a9f5750612a8d30613d66565b158015612a9f575060005460ff166001145b612abb5760405162461bcd60e51b8152600401611b2790615861565b6000805460ff191660011790558015612ade576000805461ff0019166101001790555b60008060008060008060008060008060008c806020019051810190612b039190615adf565b9a509a509a509a509a509a509a509a509a509a509a50612b2d8e8c8c8c8c8c8c8c8c8c8c8c613d75565b5050505050505050505050801561131d576000805461ff001916905560405160018152600080516020615f568339815191529060200160405180910390a1505050565b612b7861371c565b82818114612b9057612b90632b477e7160e11b613690565b60005b81811015612bf257612be0868683818110612bb057612bb0615684565b90506020020135858584818110612bc957612bc9615684565b9050602002810190612bdb9190615c12565b6140da565b80612bea816156b1565b915050612b93565b507f2df7dd608aac5806395769062aca937bf08722cb45659d38c0cce82f5cd0cde385858585604051612c289493929190615c58565b60405180910390a160d0546040516374c1ace160e01b81526001600160a01b03909116906374c1ace190612c66908890889088908890600401615c58565b600060405180830381600087803b158015612c8057600080fd5b505af1158015612c94573d6000803e3d6000fd5b50505050506125976001609755565b6101078054611f0990615567565b6000612cbb61377d565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b612cf661371c565b6000612d006138ae565b90506000612d0c612200565b90508460005b81811015612f0557612d49868683818110612d2f57612d2f615684565b9050602002016020810190612d449190614da8565b613f14565b612d5d57612d5d631a7387bd60e11b613690565b6000612d80898984818110612d7457612d74615684565b90506020020135611ecd565b90506001600160a01b038116612dbd57836001600160a01b0316856001600160a01b031614612db857612db86282b42960e81b613690565b612e7b565b806001600160a01b03166385e335b6868b8b86818110612ddf57612ddf615684565b600088815260cc60209081526040918290205491516001600160e01b031960e089901b168152612e24969591909302013592506001600160a01b0316906004016158eb565b6020604051808303816000875af1158015612e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e679190615777565b612e7b57612e7b63e10a050560e01b613690565b868683818110612e8d57612e8d615684565b9050602002016020810190612ea29190614da8565b60cc60008b8b86818110612eb857612eb8615684565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550508080612efd906156b1565b915050612d12565b507facc0f6922d8ccd133dbdaee1908d4d734f25a540223d55145e9fad2898471a4e87878787604051612f3b9493929190615d08565b60405180910390a160d0546040516315bd85bf60e01b81526001600160a01b03909116906315bd85bf90612f79908a908a908a908a90600401615d08565b600060405180830381600087803b158015612f9357600080fd5b505af1158015612fa7573d6000803e3d6000fd5b505050505050506125976001609755565b612fc061371c565b612fd0604082016020830161590e565b61271061ffff82161115612fee57612fee633daf741f60e21b613690565b6000612ff86138ae565b60cf549091506001600160a01b03168061304057613014612200565b6001600160a01b0316826001600160a01b03161461303b5761303b6282b42960e81b613690565b6130c3565b60405163049a5c0f60e41b81526001600160a01b038216906349a5c0f09061306e9087908690600401615d2f565b602060405180830381865afa15801561308b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130af9190615777565b6130c3576130c363270e710760e21b613690565b8360cd6130d0828261592b565b506130e39050604085016020860161590e565b61ffff166130f46020860186614da8565b6001600160a01b03167f2c5ea6e4103e78cb101e796fb2dace540362fc542cbff5145eaa24af7dd8fe4160405160405180910390a360d0546001600160a01b031663d10072c06131476020870187614da8565b613157604088016020890161590e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015261ffff166024820152604401600060405180830381600087803b1580156131a157600080fd5b505af11580156131b5573d6000803e3d6000fd5b505050505050506114bf6001609755565b6131ce6136ad565b600082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060405192935061010a9261321b925084915061553b565b9081526040519081900360200190205461323f5761323f63098f417360e21b613690565b600061010b805480602002602001604051908101604052809291908181526020016000905b8282101561331057838290600052602060002001805461328390615567565b80601f01602080910402602001604051908101604052809291908181526020018280546132af90615567565b80156132fc5780601f106132d1576101008083540402835291602001916132fc565b820191906000526020600020905b8154815290600101906020018083116132df57829003601f168201915b505050505081526020019060010190613264565b505050509050600060018251613326919061569a565b6001600160401b0381111561333d5761333d615052565b60405190808252806020026020018201604052801561337057816020015b606081526020019060019003908161335b5790505b508251909150600090815b8181101561341057858051906020012085828151811061339d5761339d615684565b60200260200101518051906020012014156133bb57600192506133fe565b8481815181106133cd576133cd615684565b60200260200101518484836133e2919061569a565b815181106133f2576133f2615684565b60200260200101819052505b80613408816156b1565b91505061337b565b5082516134259061010b906020860190614adc565b5061010a85604051613437919061553b565b90815260200160405180910390206000610efa9190614b35565b6134596136ad565b6001600160a01b0381166134be5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611b27565b6114bf81613ead565b6134d2610c4d6138ae565b6134e6576134e6633e34a41b60e21b613690565b6134ee61371c565b60cf54600160a01b900460ff1660011415613513576135136345a9661760e01b613690565b80600060016135206138d4565b61352a919061569a565b905060005b8281101561357a5761356885858381811061354c5761354c615684565b90506020020160208101906135619190614da8565b600161390b565b80613572816156b1565b91505061352f565b5061358861126b83836156cc565b60408051808201909152610109546001600160a01b0381168252600160a01b900460ff1615801560208301526136295780516001600160a01b03166358b916466135d38460016156cc565b600188886040518563ffffffff1660e01b81526004016135f6949392919061572d565b600060405180830381600087803b15801561361057600080fd5b505af1158015613624573d6000803e3d6000fd5b505050505b505050610c1c6001609755565b6060610a6c60c96141db565b60006301ffc9a760e01b6001600160e01b03198316148061367357506380ac58cd60e01b6001600160e01b03198316145b8061096c5750506001600160e01b031916635b5e139f60e01b1490565b8060005260046000fd5b600060016136a661377d565b5403919050565b6136b56138ae565b6001600160a01b03166136c6612200565b6001600160a01b031614610b2f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611b27565b6002609754141561376f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611b27565b6002609755565b6001609755565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b600081600111610d5a576137b361377d565b54821015610d5a5760005b6137c661377d565b600084815260049190910160205260409020549050806137f0576137e983615d55565b92506137be565b600160e01b161592915050565b600061380883611ec2565b90508180156138205750336001600160a01b03821614155b156138435761382f8133612cb1565b613843576138436367d9dca160e11b613690565b8361384c61377d565b6000858152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551859287811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a450505050565b6000610a6c6141e8565b60006138cd836001600160a01b0384166141f2565b9392505050565b60006138de61377d565b54919050565b6101085480158015906138f657508082115b15610c1c57610c1c63be1a657d60e01b613690565b600061391561377d565b5490508161392d5761392d63b562e8dd60e01b613690565b61393d836001841460e11b613ad7565b61394561377d565b600083815260049190910160205260409020556001600160401b01820261396a61377d565b6001600160a01b038516600081815260059290920160205260409091208054909201909155806139a3576139a3622e076360e81b613690565b818301825b80836000600080516020615f76833981519152600080a4600101808214156139a857816139d361377d565b55505050505050565b600081600111613a8a576139ee61377d565b60008381526004919091016020526040902054905080613a7a57613a1061377d565b548210613a2757613a27636f96cda160e11b613690565b613a2f61377d565b6000199092016000818152600493909301602052604090922054905080613a5557613a27565b600160e01b8116613a6557919050565b613a75636f96cda160e11b613690565b613a27565b600160e01b8116613a8a57919050565b610d5a636f96cda160e11b613690565b6000806000613aa761377d565b60009485526006016020525050604090912080549092909150565b6001600160a01b039081169116811491141790565b4260a01b176001600160a01b03919091161790565b6000613af782611ecd565b90506001600160a01b03811615801590613b8057506040516301ffc9a760e01b81526001600160a01b038216906301ffc9a790613b3f90637af46b4f60e11b90600401615757565b602060405180830381865afa158015613b5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b809190615777565b15613c1b57806001600160a01b0316638af6791b613b9c6138ae565b6040516001600160e01b031960e084901b1681526001600160a01b039182166004820152818816602482015290861660448201526064810185905260a06084820152600060a482015260c401600060405180830381600087803b158015613c0257600080fd5b505af1158015613c16573d6000803e3d6000fd5b505050505b60d0546040516323de665160e01b81526001600160a01b03909116906323de665190613c4f90879087908790600401615794565b600060405180830381600087803b158015613c6957600080fd5b505af1158015613c7d573d6000803e3d6000fd5b5050505050505050565b8383613c9161377d565b6002019190613ca1929190614991565b508181613cac61377d565b6003019190611746929190614991565b600080613cc883611ec2565b9050613cd48185612cb1565b80613ced5750613ced613ce684610bcc565b8286613ac2565b949350505050565b613cfe8161420a565b600081815260d1602052604090208054613d1790615567565b1590506114bf57600081815260d1602052604081206114bf91614b53565b60006138cd836001600160a01b038416614215565b600061096c6001600160a01b03831663440444c560e11b61425f565b6001600160a01b03163b151590565b613d7d61427b565b613d888c8b8b6142a2565b613d918661437e565b613d9b88886143c7565b613da660c986613d35565b508a51613dbb906101079060208e0190614a15565b50604051631222d4db60e11b81526001600160a01b03821690632445a9b690613de8903090600401614d48565b600060405180830381600087803b158015613e0257600080fd5b505af1158015613e16573d6000803e3d6000fd5b505060d080546001600160a01b0319166001600160a01b0385161790555050835115613e4557613e4584613e60565b8215613e52576101088390555b505050505050505050505050565b7f2e0a5b969d96a99aee0b35787d9a60516a02ca6f528a5f66d3f936468d8f038260d582604051613e92929190615d6c565b60405180910390a18051610c1c9060d5906020840190614a15565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006138cd836001600160a01b0384166143f8565b600061096c6001600160a01b038316633b209e2f60e11b61425f565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290613f65903390899088908890600401615e28565b6020604051808303816000875af1925050508015613fa0575060408051601f3d908101601f19168201909252613f9d91810190615e5b565b60015b613ff2573d808015613fce576040519150601f19603f3d011682016040523d82523d6000602084013e613fd3565b606091505b508051613fea57613fea6368d2bf6b60e11b613690565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b606061401a826137a1565b61402e5761402e63677510db60e11b613690565b600082815260d160205260408120805461404790615567565b80601f016020809104026020016040519081016040528092919081815260200182805461407390615567565b80156140c05780601f10614095576101008083540402835291602001916140c0565b820191906000526020600020905b8154815290600101906020018083116140a357829003601f168201915b5050505050905080516000141561096c576138cd836144eb565b60006140e584611ecd565b905060006140f16138ae565b905060006140fd612200565b90506001600160a01b03831661413a57806001600160a01b0316826001600160a01b031614614135576141356282b42960e81b613690565b6141c2565b604051633d820a4d60e01b81526001600160a01b03841690633d820a4d9061416c9085908a908a908a906004016158af565b6020604051808303816000875af115801561418b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141af9190615777565b6141c2576141c26282b42960e81b613690565b600086815260d160205260409020610efa908686614991565b606060006138cd83614566565b6000610a6c6145c2565b60009081526001919091016020526040902054151590565b6114bf8160006145e4565b600061422183836141f2565b6142575750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561096c565b50600061096c565b600061426a8361473b565b80156138cd57506138cd838361476e565b600054610100900460ff16610b2f5760405162461bcd60e51b8152600401611b2790615e78565b600054610100900460ff166142c95760405162461bcd60e51b8152600401611b2790615e78565b602082015161271061ffff821611156142ec576142ec633daf741f60e21b613690565b6142f4614802565b6142fc614831565b61430584613ead565b82516001600160a01b03161561434c57825160cd8054602086015161ffff16600160a01b026001600160b01b03199091166001600160a01b03909316929092179190911790555b6001600160a01b038216156125975760cb80546001600160a01b0384166001600160a01b031990911617905550505050565b600054610100900460ff166143a55760405162461bcd60e51b8152600401611b2790615e78565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff166143ee5760405162461bcd60e51b8152600401611b2790615e78565b610c1c8282614860565b600081815260018301602052604081205480156144e157600061441c60018361569a565b85549091506000906144309060019061569a565b905081811461449557600086600001828154811061445057614450615684565b906000526020600020015490508087600001848154811061447357614473615684565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806144a6576144a6615ec3565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061096c565b600091505061096c565b60606144f6826137a1565b61450a5761450a630a14c4b560e41b613690565b60006145146148d6565b905080516000141561453557604051806020016040528060008152506138cd565b8061453f846148e5565b604051602001614550929190615ed9565b6040516020818303038152906040529392505050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156145b657602002820191906000526020600020905b8154815260200190600101908083116145a2575b50505050509050919050565b60006145cd33611dbc565b156145df575060131936013560601c90565b503390565b60006145ef836139dc565b9050806000806145fe86613a9a565b91509150841561463557614613818433613ac2565b614635576146218333612cb1565b61463557614635632ce44b5f60e11b613690565b801561464057600082555b6001600160801b0361465061377d565b6001600160a01b038516600090815260059190910160205260409020805491909101905561468283600360e01b613ad7565b61468a61377d565b60008881526004919091016020526040902055600160e11b84166146f957600186016146b461377d565b600082815260049190910160205260409020546146f7576146d361377d565b5481146146f757846146e361377d565b600083815260049190910160205260409020555b505b60405186906000906001600160a01b03861690600080516020615f76833981519152908390a461472761377d565b600190810180549091019055505050505050565b600061474e826301ffc9a760e01b61476e565b801561096c5750614767826001600160e01b031961476e565b1592915050565b6000806301ffc9a760e01b8360405160240161478a9190615757565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000806000602060008551602087018a617530fa92503d915060005190508280156147eb575060208210155b80156147f75750600081115b979650505050505050565b600054610100900460ff166148295760405162461bcd60e51b8152600401611b2790615e78565b610b2f614933565b600054610100900460ff166148585760405162461bcd60e51b8152600401611b2790615e78565b610b2f61496a565b600054610100900460ff166148875760405162461bcd60e51b8152600401611b2790615e78565b8161489061377d565b60020190805190602001906148a6929190614a15565b50806148b061377d565b60030190805190602001906148c6929190614a15565b5060016148d161377d565b555050565b606060d58054610b4990615567565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a90048061491c57614921565b6148ff565b50819003601f19909101908152919050565b600054610100900460ff1661495a5760405162461bcd60e51b8152600401611b2790615e78565b610b2f6149656138ae565b613ead565b600054610100900460ff166137765760405162461bcd60e51b8152600401611b2790615e78565b82805461499d90615567565b90600052602060002090601f0160209004810192826149bf5760008555614a05565b82601f106149d85782800160ff19823516178555614a05565b82800160010185558215614a05579182015b82811115614a055782358255916020019190600101906149ea565b50614a11929150614b89565b5090565b828054614a2190615567565b90600052602060002090601f016020900481019282614a435760008555614a05565b82601f10614a5c57805160ff1916838001178555614a05565b82800160010185558215614a05579182015b82811115614a05578251825591602001919060010190614a6e565b828054828255906000526020600020908101928215614a05579160200282015b82811115614a055781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190614aa9565b828054828255906000526020600020908101928215614b29579160200282015b82811115614b295782518051614b19918491602090910190614a15565b5091602001919060010190614afc565b50614a11929150614b9e565b50805460008255906000526020600020908101906114bf9190614b89565b508054614b5f90615567565b6000825580601f10614b6f575050565b601f0160209004906000526020600020908101906114bf91905b5b80821115614a115760008155600101614b8a565b80821115614a11576000614bb28282614b53565b50600101614b9e565b6001600160e01b0319811681146114bf57600080fd5b600060208284031215614be357600080fd5b81356138cd81614bbb565b60008083601f840112614c0057600080fd5b5081356001600160401b03811115614c1757600080fd5b602083019150836020828501011115614c2f57600080fd5b9250929050565b60008060208385031215614c4957600080fd5b82356001600160401b03811115614c5f57600080fd5b614c6b85828601614bee565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015614cb85783516001600160a01b031683529284019291840191600101614c93565b50909695505050505050565b60005b83811015614cdf578181015183820152602001614cc7565b838111156125975750506000910152565b60008151808452614d08816020860160208601614cc4565b601f01601f19169290920160200192915050565b6020815260006138cd6020830184614cf0565b600060208284031215614d4157600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146114bf57600080fd5b8035610d5a81614d5c565b60008060408385031215614d8f57600080fd5b8235614d9a81614d5c565b946020939093013593505050565b600060208284031215614dba57600080fd5b81356138cd81614d5c565b600080600060608486031215614dda57600080fd5b8335614de581614d5c565b92506020840135614df581614d5c565b929592945050506040919091013590565b60008060408385031215614e1957600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b60008060008060008060608789031215614e5a57600080fd5b86356001600160401b0380821115614e7157600080fd5b614e7d8a838b01614bee565b90985096506020890135915080821115614e9657600080fd5b614ea28a838b01614bee565b90965094506040890135915080821115614ebb57600080fd5b50614ec889828a01614bee565b979a9699509497509295939492505050565b60008083601f840112614eec57600080fd5b5081356001600160401b03811115614f0357600080fd5b6020830191508360208260051b8501011115614c2f57600080fd5b600080600060408486031215614f3357600080fd5b83356001600160401b03811115614f4957600080fd5b614f5586828701614eda565b909790965060209590950135949350505050565b60008060008060408587031215614f7f57600080fd5b84356001600160401b0380821115614f9657600080fd5b614fa288838901614bee565b90965094506020870135915080821115614fbb57600080fd5b50614fc887828801614eda565b95989497509550505050565b60008060208385031215614fe757600080fd5b82356001600160401b03811115614ffd57600080fd5b614c6b85828601614eda565b6001600160a01b039290921682521515602082015260400190565b600060408284031215611ef657600080fd5b60006040828403121561504857600080fd5b6138cd8383615024565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561508a5761508a615052565b60405290565b604051601f8201601f191681016001600160401b03811182821017156150b8576150b8615052565b604052919050565b60006001600160401b038211156150d9576150d9615052565b50601f01601f191660200190565b600082601f8301126150f857600080fd5b813561510b615106826150c0565b615090565b81815284602083860101111561512057600080fd5b816020850160208301376000918101602001919091529392505050565b61ffff811681146114bf57600080fd5b60006040828403121561515f57600080fd5b615167615068565b9050813561517481614d5c565b815260208201356151848161513d565b602082015292915050565b80151581146114bf57600080fd5b8035610d5a8161518f565b6000806000806000806000806000806000806101a08d8f0312156151cb57600080fd5b6151d48d614d71565b9b506001600160401b0360208e013511156151ee57600080fd5b6151fe8e60208f01358f016150e7565b9a5061520d8e60408f0161514d565b995061521b60808e01614d71565b98506001600160401b0360a08e0135111561523557600080fd5b6152458e60a08f01358f016150e7565b97506001600160401b0360c08e0135111561525f57600080fd5b61526f8e60c08f01358f016150e7565b965061527d60e08e01614d71565b955061528c6101008e01614d71565b94506001600160401b036101208e013511156152a757600080fd5b6152b88e6101208f01358f016150e7565b93506101408d013592506152cf6101608e0161519d565b91506152de6101808e01614d71565b90509295989b509295989b509295989b565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561534557603f19888603018452615333858351614cf0565b94509285019290850190600101615317565b5092979650505050505050565b6000806040838503121561536557600080fd5b823561537081614d5c565b915060208301356153808161518f565b809150509250929050565b600080600080608085870312156153a157600080fd5b84356153ac81614d5c565b935060208501356153bc81614d5c565b92506040850135915060608501356001600160401b038111156153de57600080fd5b6153ea878288016150e7565b91505092959194509250565b6000806000806040858703121561540c57600080fd5b84356001600160401b038082111561542357600080fd5b61542f88838901614eda565b9096509450602087013591508082111561544857600080fd5b818701915087601f83011261545c57600080fd5b81358181111561546b57600080fd5b8860208260061b850101111561548057600080fd5b95989497505060200194505050565b600080604083850312156154a257600080fd5b82356154ad81614d5c565b915060208301356001600160401b038111156154c857600080fd5b610f94858286016150e7565b600080600080604085870312156154ea57600080fd5b84356001600160401b038082111561550157600080fd5b614fa288838901614eda565b6000806040838503121561552057600080fd5b823561552b81614d5c565b9150602083013561538081614d5c565b6000825161554d818460208701614cc4565b9190910192915050565b8183823760009101908152919050565b600181811c9082168061557b57607f821691505b60208210811415611ef657634e487b7160e01b600052602260045260246000fd5b92835260208301919091526001600160a01b0316604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156155eb576155eb6155bb565b500290565b60008261560d57634e487b7160e01b600052601260045260246000fd5b500490565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061564f60608301888a615612565b8281036020840152615662818789615612565b90508281036040840152615677818587615612565b9998505050505050505050565b634e487b7160e01b600052603260045260246000fd5b6000828210156156ac576156ac6155bb565b500390565b60006000198214156156c5576156c56155bb565b5060010190565b600082198211156156df576156df6155bb565b500190565b8183526000602080850194508260005b8581101561572257813561570781614d5c565b6001600160a01b0316875295820195908201906001016156f4565b509495945050505050565b84815283602082015260606040820152600061574d6060830184866156e4565b9695505050505050565b6001600160e01b031991909116815260200190565b8051610d5a8161518f565b60006020828403121561578957600080fd5b81516138cd8161518f565b6001600160a01b039384168152919092166020820152604081019190915260600190565b81835260006001600160fb1b038311156157d157600080fd5b8260051b8083602087013760009401602001938452509192915050565b602081526000613ced6020830184866157b8565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561582d81614d5c565b6158378183615802565b5060208201356158468161518f565b815460ff60a01b191690151560a01b60ff60a01b1617905550565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60018060a01b038516815283602082015260606040820152600061574d606083018486615612565b602081526000613ced602083018486615612565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60006020828403121561592057600080fd5b81356138cd8161513d565b813561593681614d5c565b6159408183615802565b50602082013561594f8161513d565b815461ffff60a01b191660a09190911b61ffff60a01b1617905550565b803561597781614d5c565b6001600160a01b0316825260208101356159908161513d565b61ffff81166020840152505050565b838152608081016159b3602083018561596c565b6001600160a01b03929092166060919091015292915050565b600060408083526159e081840187896157b8565b83810360208086019190915285825286910160005b86811015615a1757615a07828461596c565b91830191908301906001016159f5565b5098975050505050505050565b600082601f830112615a3557600080fd5b8151615a43615106826150c0565b818152846020838601011115615a5857600080fd5b613ced826020830160208701614cc4565b600060208284031215615a7b57600080fd5b81516001600160401b03811115615a9157600080fd5b613ced84828501615a24565b600060408284031215615aaf57600080fd5b615ab7615068565b90508151615ac481614d5c565b815260208201516151848161513d565b8051610d5a81614d5c565b60008060008060008060008060008060006101808c8e031215615b0157600080fd5b8b516001600160401b03811115615b1757600080fd5b615b238e828f01615a24565b9b5050615b338d60208e01615a9d565b9950615b4160608d01615ad4565b60808d01519099506001600160401b03811115615b5d57600080fd5b615b698e828f01615a24565b60a08e015190995090506001600160401b03811115615b8757600080fd5b615b938e828f01615a24565b975050615ba260c08d01615ad4565b9550615bb060e08d01615ad4565b6101008d01519095506001600160401b03811115615bcd57600080fd5b615bd98e828f01615a24565b9450506101208c01519250615bf16101408d0161576c565b9150615c006101608d01615ad4565b90509295989b509295989b9093969950565b6000808335601e19843603018112615c2957600080fd5b8301803591506001600160401b03821115615c4357600080fd5b602001915036819003821315614c2f57600080fd5b604081526000615c6c6040830186886157b8565b602083820381850152818583528183019050818660051b8401018760005b88811015615cf857858303601f190184528135368b9003601e19018112615cb057600080fd5b8a0180356001600160401b03811115615cc857600080fd5b8036038c1315615cd757600080fd5b615ce48582898501615612565b958701959450505090840190600101615c8a565b50909a9950505050505050505050565b604081526000615d1c6040830186886157b8565b82810360208401526147f78185876156e4565b60608101615d3d828561596c565b6001600160a01b039290921660409190910152919050565b600081615d6457615d646155bb565b506000190190565b60408152600080845481600182811c915080831680615d8c57607f831692505b6020808410821415615dac57634e487b7160e01b86526022600452602486fd5b6040880184905260608801828015615dcb5760018114615ddc57615e07565b60ff19871682528282019750615e07565b60008c81526020902060005b87811015615e0157815484820152908601908401615de8565b83019850505b5050878603818901525050505050615e1f8185614cf0565b95945050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061574d90830184614cf0565b600060208284031215615e6d57600080fd5b81516138cd81614bbb565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fd5b60008351615eeb818460208801614cc4565b602f60f81b9083019081528351615f09816001840160208801614cc4565b0160010194935050505056fec407dfe559ca4a63d7cf8439b9fce2965d7a4c8c92eb5d5047f53bb9eec295fd73e05f4c0a27cbf60841afa4a2f8577f5e99db3e3e9c293800d6e6b1f7b8a7ab7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efe236d251e7da4ac8a3c275f80aebc9b74cbf356425fa04864da5043511a81219a164736f6c634300080a000a