Loading
[ { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "EditionDoesNotExist", "type": "error" }, { "inputs": [], "name": "InvalidManager", "type": "error" }, { "inputs": [], "name": "InvalidSize", "type": "error" }, { "inputs": [], "name": "ManagerDoesNotExist", "type": "error" }, { "inputs": [], "name": "ManagerRemoveBlocked", "type": "error" }, { "inputs": [], "name": "ManagerSwapBlocked", "type": "error" }, { "inputs": [], "name": "MetadataUpdateBlocked", "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": "NotAContract", "type": "error" }, { "inputs": [], "name": "NotMinter", "type": "error" }, { "inputs": [], "name": "OperatorNotAllowed", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "QuantityTooLarge", "type": "error" }, { "inputs": [], "name": "RoyaltyBPSInvalid", "type": "error" }, { "inputs": [], "name": "RoyaltySetBlocked", "type": "error" }, { "inputs": [], "name": "SoldOut", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "TokenMintedAlready", "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": 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": true, "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "size", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "editionTokenManager", "type": "address" } ], "name": "EditionCreated", "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": "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": 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": "address", "name": "operator", "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": [ { "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": [ { "internalType": "string", "name": "_editionUri", "type": "string" }, { "internalType": "uint256", "name": "_editionSize", "type": "uint256" }, { "internalType": "address", "name": "_editionTokenManager", "type": "address" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "editionRoyalty", "type": "tuple" }, { "internalType": "bytes", "name": "mintVectorData", "type": "bytes" } ], "name": "createEdition", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_editionUri", "type": "string" }, { "internalType": "bytes", "name": "auctionData", "type": "bytes" }, { "internalType": "address", "name": "_editionTokenManager", "type": "address" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "editionRoyalty", "type": "tuple" } ], "name": "createEditionWithAuction", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "defaultManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "editionCurrentSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "editionMaxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "editionStartId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" } ], "name": "editionURI", "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": "uint256", "name": "editionId", "type": "uint256" } ], "name": "getEditionDetails", "outputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "uint256", "name": "size", "type": "uint256" }, { "internalType": "uint256", "name": "supply", "type": "uint256" }, { "internalType": "uint256", "name": "initialTokenId", "type": "uint256" } ], "internalType": "struct IEditionCollection.EditionDetails", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getEditionId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getEditionStartIds", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "editionIds", "type": "uint256[]" } ], "name": "getEditionsDetailsAndUri", "outputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "uint256", "name": "size", "type": "uint256" }, { "internalType": "uint256", "name": "supply", "type": "uint256" }, { "internalType": "uint256", "name": "initialTokenId", "type": "uint256" } ], "internalType": "struct IEditionCollection.EditionDetails[]", "name": "", "type": "tuple[]" }, { "internalType": "string[]", "name": "", "type": "string[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "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": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintAmountToRecipient", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "address[]", "name": "recipients", "type": "address[]" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintAmountToRecipients", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "mintOneToRecipient", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "address[]", "name": "recipients", "type": "address[]" } ], "name": "mintOneToRecipients", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "nextTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "observability", "outputs": [ { "internalType": "contract IObservability", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "operatorFiltererRegistry", "outputs": [ { "internalType": "address", "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": "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": "_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": [], "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": "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": "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": "editionId", "type": "uint256" }, { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "setEditionURI", "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": "address", "name": "newRegistry", "type": "address" }, { "internalType": "address", "name": "subscription", "type": "address" } ], "name": "setRegistryAndSubscription", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyManager", "type": "address" } ], "name": "setRoyaltyManager", "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": "id", "type": "uint256" } ], "name": "tokenManager", "outputs": [ { "internalType": "address", "name": "manager", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenManagerByTokenId", "outputs": [ { "internalType": "address", "name": "", "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" } ]
608060405234801561001057600080fd5b50615fee80620000216000396000f3fe6080604052600436106102915760003560e01c806301ffc9a714610296578063063a7502146102cb5780630690a78d146102e257806306fdde0314610302578063081812fc14610324578063095ea7b31461035157806317360d341461036457806318160ddd1461039257806318bae6c8146103b55780631b30808d146103d557806323b872dd146103f55780632a55205a146104085780632a5ac76414610436578063336211bf14610456578063377e5e271461047657806342842e0e1461049657806342966c68146104a9578063439fab91146104c957806346134b50146104e957806347230dcb146105095780634f58122a1461052957806350cf5a3114610549578063572b6c05146105695780636352211e146105895780636502abea146105a9578063662fff38146105c9578063703c19d7146105e957806370a082311461060b578063715018a61461062b578063752d4cad1461064057806375794a3c14610660578063834a20df146106765780638da5cb5b1461069657806391d0049e146106ab57806392172704146106cb57806395d89b41146106eb578063994d8d9a14610700578063a22cb46514610720578063a305f5b214610740578063b0e5afe314610760578063b5c5801e14610780578063b859c93514610795578063b88d4fde146107b5578063bfb2995c146107c8578063c2f50701146107e8578063c73ef573146107fd578063c87b56dd1461081d578063ddf990f91461083d578063e8a3d4851461086a578063e985e9c51461087f578063eb8721501461089f578063ee295d62146108bf578063ee947a9a146108df578063eeab0589146108ff578063ef60ceaf1461091f578063f2fde38b1461093f578063f97b57ec1461095f578063fac70dc914610981575b600080fd5b3480156102a257600080fd5b506102b66102b1366004614b46565b6109a1565b60405190151581526020015b60405180910390f35b3480156102d757600080fd5b506102e06109b2565b005b3480156102ee57600080fd5b506102e06102fd366004614ba4565b610a96565b34801561030e57600080fd5b50610317610cd0565b6040516102c29190614c3c565b34801561033057600080fd5b5061034461033f366004614c4f565b610d6b565b6040516102c29190614c75565b6102e061035f366004614c9e565b610daf565b34801561037057600080fd5b5061038461037f366004614d0e565b610dc8565b6040516102c2929190614de0565b34801561039e57600080fd5b506103a7610f1b565b6040519081526020016102c2565b3480156103c157600080fd5b5060cb54610344906001600160a01b031681565b3480156103e157600080fd5b506103a76103f0366004614e56565b610f6d565b6102e0610403366004614e8e565b61101a565b34801561041457600080fd5b50610428610423366004614ebe565b6111d7565b6040516102c2929190614ee0565b34801561044257600080fd5b506102e0610451366004614ef9565b6111f7565b34801561046257600080fd5b506103a7610471366004614c4f565b61128c565b34801561048257600080fd5b50610317610491366004614c4f565b6112b4565b6102e06104a4366004614e8e565b611373565b3480156104b557600080fd5b506102e06104c4366004614c4f565b61138e565b3480156104d557600080fd5b506102e06104e4366004614f92565b61156f565b3480156104f557600080fd5b50610344610504366004614c4f565b6116e2565b34801561051557600080fd5b506102e0610524366004614fc7565b6116f0565b34801561053557600080fd5b506102e0610544366004614d0e565b6117a4565b34801561055557600080fd5b506102e0610564366004614fc7565b6119a4565b34801561057557600080fd5b506102b6610584366004614fc7565b611b5f565b34801561059557600080fd5b506103446105a4366004614c4f565b611b73565b3480156105b557600080fd5b506103446105c4366004614c4f565b611b7e565b3480156105d557600080fd5b506103a76105e43660046150a7565b611ba9565b3480156105f557600080fd5b506105fe611c41565b6040516102c29190615131565b34801561061757600080fd5b506103a7610626366004614fc7565b611c98565b34801561063757600080fd5b506102e0611cf7565b34801561064c57600080fd5b506102e061065b366004615144565b611d0b565b34801561066c57600080fd5b506103a760d35481565b34801561068257600080fd5b506102e0610691366004614fc7565b611d21565b3480156106a257600080fd5b50610344611d9f565b3480156106b757600080fd5b506103a76106c636600461525e565b611dae565b3480156106d757600080fd5b506103a76106e63660046152d9565b611fa9565b3480156106f757600080fd5b5061031761204e565b34801561070c57600080fd5b506103a761071b366004615315565b612066565b34801561072c57600080fd5b506102e061073b3660046153b5565b612210565b34801561074c57600080fd5b506102e061075b366004614fc7565b612224565b34801561076c57600080fd5b5060d154610344906001600160a01b031681565b34801561078c57600080fd5b506102e06123a8565b3480156107a157600080fd5b506103a76107b03660046153e3565b612519565b6102e06107c3366004615408565b6125b2565b3480156107d457600080fd5b506102e06107e3366004615473565b6125f3565b3480156107f457600080fd5b506102e0612934565b34801561080957600080fd5b506103a7610818366004614c4f565b612a65565b34801561082957600080fd5b50610317610838366004614c4f565b612a86565b34801561084957600080fd5b5061085d610858366004614c4f565b612b53565b6040516102c2919061550c565b34801561087657600080fd5b50610317612b83565b34801561088b57600080fd5b506102b661089a366004615144565b612c11565b3480156108ab57600080fd5b5060d054610344906001600160a01b031681565b3480156108cb57600080fd5b5060cf54610344906001600160a01b031681565b3480156108eb57600080fd5b506103a76108fa366004614c4f565b612c4e565b34801561090b57600080fd5b506102e061091a36600461551f565b612c5e565b34801561092b57600080fd5b506102e061093a36600461558a565b612f49565b34801561094b57600080fd5b506102e061095a366004614fc7565b61313d565b34801561096b57600080fd5b506109746131b6565b6040516102c2919061559c565b34801561098d57600080fd5b506103a761099c366004614c4f565b6131c7565b60006109ac826131d7565b92915050565b6109ba613225565b600260975414156109e65760405162461bcd60e51b81526004016109dd906155e9565b60405180910390fd5b600260975560cf805460ff60a01b1916600160a01b1790556040517f9d4b38394dff663b46f53f52ced584161b5021180321b381f6104325eecebf4990600090a160d060009054906101000a90046001600160a01b03166001600160a01b031663fd120bd26040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a7757600080fd5b505af1158015610a8b573d6000803e3d6000fd5b505060016097555050565b6000610aa184611b7e565b90506000610aad613294565b90506001600160a01b038216610af7576000610ac7611d9f565b9050806001600160a01b0316826001600160a01b031614610af157610af16282b42960e81b61329e565b50610b85565b604051634e9173c760e11b81526001600160a01b03831690639d22e78e90610b2e90309085908a908a908a9060069060040161565f565b6020604051808303816000875af1158015610b4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7191906156b6565b610b8557610b85631b04458960e01b61329e565b600085815260d760205260409020610b9e9085856149fb565b50604080516001808252818301909252600091602080830190803683370190505090508581600081518110610bd557610bd56156d3565b6020908102919091010152604080516001808252818301909252600091816020015b6060815260200190600190039081610bf757905050905085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250855186945090925015159050610c5857610c586156d3565b602090810291909101015260d0546040516374c1ace160e01b81526001600160a01b03909116906374c1ace190610c9590859085906004016156e9565b600060405180830381600087803b158015610caf57600080fd5b505af1158015610cc3573d6000803e3d6000fd5b5050505050505050505050565b6060610cda6132a7565b6002018054610ce89061570e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d149061570e565b8015610d615780601f10610d3657610100808354040283529160200191610d61565b820191906000526020600020905b815481529060010190602001808311610d4457829003601f168201915b5050505050905090565b6000610d76826132cb565b610d8a57610d8a6333d1c03960e21b61329e565b610d926132a7565b60009283526006016020525060409020546001600160a01b031690565b81610db981613315565b610dc383836133ad565b505050565b606080826000816001600160401b03811115610de657610de6614fe4565b604051908082528060200260200182016040528015610e1f57816020015b610e0c614a7f565b815260200190600190039081610e045790505b5090506000826001600160401b03811115610e3c57610e3c614fe4565b604051908082528060200260200182016040528015610e6f57816020015b6060815260200190600190039081610e5a5790505b50905060005b83811015610f0c57610e9e888883818110610e9257610e926156d3565b905060200201356112b4565b828281518110610eb057610eb06156d3565b6020026020010181905250610edc888883818110610ed057610ed06156d3565b905060200201356133b9565b838281518110610eee57610eee6156d3565b60200260200101819052508080610f0490615759565b915050610e75565b509093509150505b9250929050565b600080805b60d454811015610f675760d48181548110610f3d57610f3d6156d3565b906000526020600020015482610f539190615774565b915080610f5f81615759565b915050610f20565b50919050565b6000610f82610f7a613294565b60c99061344f565b610f9657610f96633e34a41b60e21b61329e565b60026097541415610fb95760405162461bcd60e51b81526004016109dd906155e9565b600260975560cf54600160a01b900460ff1660011415610fe357610fe36345a9661760e01b61329e565b610fee8460d4541190565b6110025761100263eb49290360e01b61329e565b61100d84848461346b565b6001609755949350505050565b600061102582613537565b6001600160a01b03948516949091508116841461104b5761104b62a1148160e81b61329e565b60008061105784613608565b9150915061106c81876110673390565b613630565b61108e5761107a8633612c11565b61108e5761108e632ce44b5f60e11b61329e565b801561109957600082555b6110a16132a7565b6001600160a01b03871660009081526005919091016020526040902080546000190190556110cd6132a7565b6001600160a01b0386166000908152600591909101602052604081208054600101905561111090869061110590899083908890613645565b600160e11b1761366c565b6111186132a7565b60008681526004919091016020526040902055600160e11b831661118e57600184016111426132a7565b6000828152600491909101602052604090205461118c5761116281613681565b1561118c5761117084613705565b6111786132a7565b600083815260049190910160205260409020555b505b6001600160a01b038516848188600080516020615fa2833981519152600080a4806111c3576111c3633a954ecd60e21b61329e565b6111ce878787613711565b50505050505050565b6000806111ec6111e6856138b8565b8461395b565b915091509250929050565b6111ff613225565b61120b868686866139f6565b61121760d283836149fb565b5060d054604051635bf57bc360e01b81526001600160a01b0390911690635bf57bc3906112529089908990899089908990899060040161578c565b600060405180830381600087803b15801561126c57600080fd5b505af1158015611280573d6000803e3d6000fd5b50505050505050505050565b6000611297826132cb565b6112ab576112ab63677510db60e11b61329e565b6109ac826138b8565b60606112c18260d4541190565b6112d5576112d563eb49290360e01b61329e565b600082815260d76020526040902080546112ee9061570e565b80601f016020809104026020016040519081016040528092919081815260200182805461131a9061570e565b80156113675780601f1061133c57610100808354040283529160200191611367565b820191906000526020600020905b81548152906001019060200180831161134a57829003601f168201915b50505050509050919050565b610dc3838383604051806020016040528060008152506125b2565b600260975414156113b15760405162461bcd60e51b81526004016109dd906155e9565b600260975560006113c18261128c565b905060006113ce82611b7e565b905060006113da613294565b90506001600160a01b0382161580159061146357506040516301ffc9a760e01b81526001600160a01b038316906301ffc9a7906114229063129dae8b60e01b906004016157d5565b602060405180830381865afa15801561143f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146391906156b6565b156114d757816001600160a01b031663129dae8b8261148187611b73565b866040518463ffffffff1660e01b81526004016114a0939291906157ea565b600060405180830381600087803b1580156114ba57600080fd5b505af11580156114ce573d6000803e3d6000fd5b505050506114f4565b6114e18185613a2b565b6114f4576114f46282b42960e81b61329e565b6114fd84613a5c565b60d0546040516323de665160e01b81526001600160a01b03909116906323de66519061153290849060009089906004016157ea565b600060405180830381600087803b15801561154c57600080fd5b505af1158015611560573d6000803e3d6000fd5b50506001609755505050505050565b600054610100900460ff161580801561158f5750600054600160ff909116105b806115a95750303b1580156115a9575060005460ff166001145b61160c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109dd565b6000805460ff19166001179055801561162f576000805461ff0019166101001790555b6000808080808080806116448a8c018c615819565b975097509750975097509750975097506000604051806040016040528060006001600160a01b03168152602001600061ffff16815250905061168f898260008b8b8b8b8b8b8b613a67565b5050505050505050508015610dc3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60006109ac6105c48361128c565b6116f8613225565b61170360c982613b7f565b6117175761171763ea6eb5c360e01b61329e565b6040516001906001600160a01b03831690600080516020615f8283398151915290600090a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f9061176f908490600190600401615908565b600060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b5050505050565b600260975414156117c75760405162461bcd60e51b81526004016109dd906155e9565b600260975560006117d6613294565b90508160005b8181101561193857600060cc60008787858181106117fc576117fc6156d3565b60209081029290920135835250810191909152604001600020546001600160a01b031690508061183657611836635f98be1560e11b61329e565b806001600160a01b031663ce2003a585888886818110611858576118586156d3565b905060200201356040518363ffffffff1660e01b815260040161187c929190614ee0565b6020604051808303816000875af115801561189b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bf91906156b6565b6118d3576118d363251c48e160e11b61329e565b600060cc60008888868181106118eb576118eb6156d3565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050808061193090615759565b9150506117dc565b507f4d30c2588339a383e2c3092b5383924cf202ae9c377b76c5fe5208cd41d8d2aa848460405161196a929190615959565b60405180910390a160d0546040516320364dcd60e21b81526001600160a01b03909116906380d93734906115329087908790600401615959565b600260975414156119c75760405162461bcd60e51b81526004016109dd906155e9565b60026097556119d581613b94565b6119e9576119e9631a7387bd60e11b61329e565b60006119f3613294565b60cf549091506001600160a01b031680611a3b57611a0f611d9f565b6001600160a01b0316826001600160a01b031614611a3657611a366282b42960e81b61329e565b611abe565b60405163bcdbc94760e01b81526001600160a01b0382169063bcdbc94790611a69908690869060040161596d565b602060405180830381865afa158015611a86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aaa91906156b6565b611abe57611abe63e10a050560e01b61329e565b60cf80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615fc283398151915290600090a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab42290611b23908690600401614c75565b600060405180830381600087803b158015611b3d57600080fd5b505af1158015611b51573d6000803e3d6000fd5b505060016097555050505050565b6065546001600160a01b0391821691161490565b60006109ac82613537565b60cb54600082815260cc60205260409020546001600160a01b0391821691168015610f675792915050565b6000611bb6610f7a613294565b611bca57611bca633e34a41b60e21b61329e565b60026097541415611bed5760405162461bcd60e51b81526004016109dd906155e9565b600260975560cf54600160a01b900460ff1660011415611c1757611c176345a9661760e01b61329e565b611c228460d4541190565b611c3657611c3663eb49290360e01b61329e565b61100d848484613bb0565b606060d6805480602002602001604051908101604052809291908181526020018280548015610d6157602002820191906000526020600020905b815481526020019060010190808311611c7b575050505050905090565b60006001600160a01b038216611cb857611cb86323d3ad8160e21b61329e565b6001600160401b03611cc86132a7565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b611cff613225565b611d096000613ccb565b565b611d13613225565b611d1d8282613d1d565b5050565b611d29613225565b611d3460c982613dc3565b611d4857611d4863ea6eb5c360e01b61329e565b6040516000906001600160a01b03831690600080516020615f82833981519152908390a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f9061176f908490600090600401615908565b6033546001600160a01b031690565b6000611db8613225565b60026097541415611ddb5760405162461bcd60e51b81526004016109dd906155e9565b60026097556000611ded888888613dd8565b85519091506001600160a01b031615611e4257600081815260ce60209081526040909120865181549288015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b8215611f995760008080808080808080611e5e8c8e018e61599d565b985098509850985098509850985098509850886001600160a01b03166377a856ea604051806101c00160405280306001600160a01b031681526020018a65ffffffffffff1681526020018965ffffffffffff1681526020018b6001600160a01b031681526020018665ffffffffffff168152602001600065ffffffffffff16815260200160006001600160a01b031681526020018765ffffffffffff1681526020018565ffffffffffff168152602001886001600160c01b031681526020018d65ffffffffffff168152602001600115158152602001600015158152602001848152506040518263ffffffff1660e01b8152600401611f5d9190615a5c565b600060405180830381600087803b158015611f7757600080fd5b505af1158015611f8b573d6000803e3d6000fd5b505050505050505050505050505b6001609755979650505050505050565b6000611fb6610f7a613294565b611fca57611fca633e34a41b60e21b61329e565b60026097541415611fed5760405162461bcd60e51b81526004016109dd906155e9565b600260975560cf54600160a01b900460ff1660011415612017576120176345a9661760e01b61329e565b6120228360d4541190565b6120365761203663eb49290360e01b61329e565b61204283836001613bb0565b60016097559392505050565b60606120586132a7565b6003018054610ce89061570e565b6000612070613225565b600260975414156120935760405162461bcd60e51b81526004016109dd906155e9565b600260975560006120a686600186613dd8565b83519091506001600160a01b0316156120fb57600081815260ce60209081526040909120845181549286015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b6000806000806000898060200190518101906121179190615b5f565b945094509450945094506000604051806101000160405280306001600160a01b03168152602001856001600160a01b03168152602001336001600160a01b03168152602001846001600160a01b03168152602001838152602001600081526020016001151581526020016001600381111561219457612194615649565b905260405163712f1bf760e11b81529091506001600160a01b0387169063e25e37ee906121c990889085908c90600401615bd4565b600060405180830381600087803b1580156121e357600080fd5b505af11580156121f7573d6000803e3d6000fd5b5050600160975550969c9b505050505050505050505050565b8161221a81613315565b610dc38383613f51565b600260975414156122475760405162461bcd60e51b81526004016109dd906155e9565b600260975561225581613fce565b61226957612269631a7387bd60e11b61329e565b6000612273613294565b60cb549091506001600160a01b0316806122bb5761228f611d9f565b6001600160a01b0316826001600160a01b0316146122b6576122b66282b42960e81b61329e565b612343565b6040516342f19adb60e11b81526001600160a01b038216906385e335b6906122ec9085906000908890600401615c67565b6020604051808303816000875af115801561230b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232f91906156b6565b6123435761234363e10a050560e01b61329e565b60cb80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615f6283398151915290600090a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd90611b23908690600401614c75565b600260975414156123cb5760405162461bcd60e51b81526004016109dd906155e9565b600260975560006123da613294565b60cb549091506001600160a01b0316806123fe576123fe635f98be1560e11b61329e565b60405163ce2003a560e01b81526001600160a01b0382169063ce2003a59061242d908590600090600401614ee0565b6020604051808303816000875af115801561244c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247091906156b6565b6124845761248463251c48e160e11b61329e565b60cb80546001600160a01b0319169055604051600090600080516020615f62833981519152908290a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd906124de90600090600401614c75565b600060405180830381600087803b1580156124f857600080fd5b505af115801561250c573d6000803e3d6000fd5b5050600160975550505050565b6000612526610f7a613294565b61253a5761253a633e34a41b60e21b61329e565b6002609754141561255d5760405162461bcd60e51b81526004016109dd906155e9565b600260975560cf54600160a01b900460ff1660011415612587576125876345a9661760e01b61329e565b6125928360d4541190565b6125a6576125a663eb49290360e01b61329e565b6120428383600161346b565b6125bd84848461101a565b6001600160a01b0383163b156125ed576125d984848484613fea565b6125ed576125ed6368d2bf6b60e11b61329e565b50505050565b600260975414156126165760405162461bcd60e51b81526004016109dd906155e9565b60026097556000612625613294565b90506000612631611d9f565b60cf549091506001600160a01b0316858161273257826001600160a01b0316846001600160a01b03161461266e5761266e6282b42960e81b61329e565b60005b8181101561272c576126b487878381811061268e5761268e6156d3565b90506040020160200160208101906126a69190615c8a565b61271061ffff909116111590565b6126c8576126c8633daf741f60e21b61329e565b8686828181106126da576126da6156d3565b90506040020160ce60008b8b858181106126f6576126f66156d3565b90506020020135815260200190815260200160002081816127179190615ca7565b5081905061272481615759565b915050612671565b50612880565b60005b8181101561287e5761275287878381811061268e5761268e6156d3565b61276657612766633daf741f60e21b61329e565b826001600160a01b031663ad6e40c78a8a84818110612787576127876156d3565b905060200201358989858181106127a0576127a06156d3565b905060400201886040518463ffffffff1660e01b81526004016127c593929190615d34565b602060405180830381865afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280691906156b6565b61281a5761281a63270e710760e21b61329e565b86868281811061282c5761282c6156d3565b90506040020160ce60008b8b85818110612848576128486156d3565b90506020020135815260200190815260200160002081816128699190615ca7565b5081905061287681615759565b915050612735565b505b7feaf422d1ab2d8f38856ab6be8378c08d2886463a33667e896ba3a6ebf2c6260c888888886040516128b59493929190615d61565b60405180910390a160d054604051632be18fef60e11b81526001600160a01b03909116906357c31fde906128f3908b908b908b908b90600401615d61565b600060405180830381600087803b15801561290d57600080fd5b505af1158015612921573d6000803e3d6000fd5b5050600160975550505050505050505050565b600260975414156129575760405162461bcd60e51b81526004016109dd906155e9565b60026097556000612966613294565b60cf549091506001600160a01b03168061298a5761298a635f98be1560e11b61329e565b60405163680c607d60e11b81526001600160a01b0382169063d018c0fa906129b6908590600401614c75565b602060405180830381865afa1580156129d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f791906156b6565b612a0b57612a0b63251c48e160e11b61329e565b60cf80546001600160a01b0319169055604051600090600080516020615fc2833981519152908290a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab422906124de90600090600401614c75565b60d48181548110612a7557600080fd5b600091825260209091200154905081565b6060612a91826132cb565b612aa557612aa563677510db60e11b61329e565b6000612ab08361128c565b600081815260d760205260409020805491925090612acd9061570e565b80601f0160208091040260200160405190810160405280929190818152602001828054612af99061570e565b8015612b465780601f10612b1b57610100808354040283529160200191612b46565b820191906000526020600020905b815481529060010190602001808311612b2957829003601f168201915b5050505050915050919050565b612b5b614a7f565b612b668260d4541190565b612b7a57612b7a63eb49290360e01b61329e565b6109ac826133b9565b60d28054612b909061570e565b80601f0160208091040260200160405190810160405280929190818152602001828054612bbc9061570e565b8015612c095780601f10612bde57610100808354040283529160200191612c09565b820191906000526020600020905b815481529060010190602001808311612bec57829003601f168201915b505050505081565b6000612c1b6132a7565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b60d58181548110612a7557600080fd5b60026097541415612c815760405162461bcd60e51b81526004016109dd906155e9565b60026097556000612c90613294565b90506000612c9c611d9f565b90508460005b81811015612e9557612cd9868683818110612cbf57612cbf6156d3565b9050602002016020810190612cd49190614fc7565b613fce565b612ced57612ced631a7387bd60e11b61329e565b6000612d10898984818110612d0457612d046156d3565b90506020020135611b7e565b90506001600160a01b038116612d4d57836001600160a01b0316856001600160a01b031614612d4857612d486282b42960e81b61329e565b612e0b565b806001600160a01b03166385e335b6868b8b86818110612d6f57612d6f6156d3565b600088815260cc60209081526040918290205491516001600160e01b031960e089901b168152612db4969591909302013592506001600160a01b031690600401615c67565b6020604051808303816000875af1158015612dd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df791906156b6565b612e0b57612e0b63e10a050560e01b61329e565b868683818110612e1d57612e1d6156d3565b9050602002016020810190612e329190614fc7565b60cc60008b8b86818110612e4857612e486156d3565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550508080612e8d90615759565b915050612ca2565b507facc0f6922d8ccd133dbdaee1908d4d734f25a540223d55145e9fad2898471a4e87878787604051612ecb9493929190615db9565b60405180910390a160d0546040516315bd85bf60e01b81526001600160a01b03909116906315bd85bf90612f09908a908a908a908a90600401615db9565b600060405180830381600087803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b50506001609755505050505050505050565b60026097541415612f6c5760405162461bcd60e51b81526004016109dd906155e9565b6002609755612f816040820160208301615c8a565b61271061ffff82161115612f9f57612f9f633daf741f60e21b61329e565b6000612fa9613294565b60cf549091506001600160a01b031680612ff157612fc5611d9f565b6001600160a01b0316826001600160a01b031614612fec57612fec6282b42960e81b61329e565b613074565b60405163049a5c0f60e41b81526001600160a01b038216906349a5c0f09061301f9087908690600401615e11565b602060405180830381865afa15801561303c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306091906156b6565b6130745761307463270e710760e21b61329e565b8360cd6130818282615ca7565b5061309490506040850160208601615c8a565b61ffff166130a56020860186614fc7565b6001600160a01b03167f2c5ea6e4103e78cb101e796fb2dace540362fc542cbff5145eaa24af7dd8fe4160405160405180910390a360d0546001600160a01b031663d10072c06130f86020870187614fc7565b6131086040880160208901615c8a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015261ffff166024820152604401611532565b613145613225565b6001600160a01b0381166131aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109dd565b6131b381613ccb565b50565b60606131c260c96140c6565b905090565b60d68181548110612a7557600080fd5b60006301ffc9a760e01b6001600160e01b03198316148061320857506380ac58cd60e01b6001600160e01b03198316145b806109ac5750506001600160e01b031916635b5e139f60e01b1490565b61322d613294565b6001600160a01b031661323e611d9f565b6001600160a01b031614611d095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109dd565b60006131c26140d3565b6131b3816140f5565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b6000816001116133105760006132df6132a7565b600084815260049190910160205260409020549050600160e01b811615801561330c575061330c83613681565b9150505b919050565b60d1546001600160a01b0316156131b35760d154604051633185c44d60e21b81526001600160a01b039091169063c617113490613358903090859060040161596d565b602060405180830381865afa158015613375573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339991906156b6565b6131b3576131b3638a10919360e01b61329e565b611d1d828260016140ff565b6133c1614a7f565b604051806080016040528060405180602001604052806000815250815260200160d584815481106133f4576133f46156d3565b9060005260206000200154815260200160d48481548110613417576134176156d3565b9060005260206000200154815260200160d6848154811061343a5761343a6156d3565b90600052602060002001548152509050919050565b6000613464836001600160a01b0384166141b0565b9392505050565b60008060d58581548110613481576134816156d3565b90600052602060002001549050600060d486815481106134a3576134a36156d3565b90600052602060002001549050600060d687815481106134c5576134c56156d3565b600091825260208220015491506134dc8684615774565b9050838111156134f6576134f66352df9fe560e01b61329e565b61350c87876135058686615774565b60006141c8565b8060d48981548110613520576135206156d3565b600091825260209091200155979650505050505050565b6000816001116135f8576135496132a7565b600083815260049190910160205260409020549050806135e85761356c826132cb565b61358057613580636f96cda160e11b61329e565b8161359557613595636f96cda160e11b61329e565b61359d6132a7565b60001990920160008181526004939093016020526040909220549050806135c357613580565b600160e01b81166135d357919050565b6135e3636f96cda160e11b61329e565b613580565b600160e01b81166135f857919050565b613310636f96cda160e11b61329e565b60008060006136156132a7565b60009485526006016020525050604090912080549092909150565b6001600160a01b039081169116811491141790565b600060e883811c90613659878784876142f5565b62ffffff16901b9150505b949350505050565b4260a01b176001600160a01b03919091161790565b600081600111613310578160005b60e86136996132a7565b60008681526004919091016020526040902054901c905062ffffff81166136d957836136c9575060009392505050565b6136d284615e37565b935061368f565b62ffffff81166136e98584615e4e565b62ffffff1610156136fe575060019392505050565b5050919050565b6001600160e81b031690565b600061371b613294565b9050806001600160a01b0316846001600160a01b03161461373f5761373f81613315565b600061374a836116e2565b90506001600160a01b038116158015906137d357506040516301ffc9a760e01b81526001600160a01b038216906301ffc9a79061379290637af46b4f60e11b906004016157d5565b602060405180830381865afa1580156137af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d391906156b6565b1561384b57604051637f1eaf8560e01b81526001600160a01b0383811660048301528681166024830152858116604483015260648201859052821690637f1eaf8590608401600060405180830381600087803b15801561383257600080fd5b505af1158015613846573d6000803e3d6000fd5b505050505b60d0546040516323de665160e01b81526001600160a01b03909116906323de66519061387f908890889088906004016157ea565b600060405180830381600087803b15801561389957600080fd5b505af11580156138ad573d6000803e3d6000fd5b505050505050505050565b60d68054604080516020808402820181019092528281526000938493849383018282801561390557602002820191906000526020600020905b8154815260200190600101908083116138f1575b505083519394506000925050505b818110156139515782818151811061392d5761392d6156d3565b6020026020010151861061393f578093505b61394a600182615774565b9050613913565b5091949350505050565b600082815260ce602090815260408083208151808301909252546001600160a01b038116808352600160a01b90910461ffff169282019290925282916139c657506040805180820190915260cd546001600160a01b0381168252600160a01b900461ffff1660208201525b80516020820151909350612710906139e29061ffff1686615e65565b6139ec9190615e84565b9150509250929050565b8383613a006132a7565b6002019190613a109291906149fb565b508181613a1b6132a7565b600301919061179d9291906149fb565b600080613a3783611b73565b9050613a438185612c11565b806136645750613664613a5584610d6b565b8286613630565b6131b3816000614329565b613a728a8a8a614497565b613a7c8686614574565b613a85846145a5565b613a8e826145ee565b825160005b81811015613adb57613ac8858281518110613ab057613ab06156d3565b602002602001015160c9613b7f90919063ffffffff16565b5080613ad381615759565b915050613a93565b50600160d3558751613af49060d29060208b0190614aa7565b5060405162df38cb60e71b81526001600160a01b03831690636f9c658090613b20903090600401614c75565b600060405180830381600087803b158015613b3a57600080fd5b505af1158015613b4e573d6000803e3d6000fd5b505060d080546001600160a01b0319166001600160a01b039590951694909417909355505050505050505050505050565b6000613464836001600160a01b038416614647565b60006109ac6001600160a01b03831663440444c560e11b614691565b60008083519050600060d58681548110613bcc57613bcc6156d3565b90600052602060002001549050600060d48781548110613bee57613bee6156d3565b90600052602060002001549050600060d68881548110613c1057613c106156d3565b60009182526020822001549150613c278786615e65565b613c319084615774565b905083811115613c4b57613c4b6352df9fe560e01b61329e565b60005b85811015613c9e57613c80898281518110613c6b57613c6b6156d3565b60200260200101518985876135059190615774565b613c8a8885615774565b935080613c9681615759565b915050613c4e565b508260d48a81548110613cb357613cb36156d3565b60009182526020909120015598975050505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60d180546001600160a01b0319166001600160a01b03841690811790915515611d1d576001600160a01b0382163b613d5f57613d5f6309ee12d560e01b61329e565b604051633e9f1edf60e11b81526001600160a01b03831690637d3e3dbe90613d8d903090859060040161596d565b600060405180830381600087803b158015613da757600080fd5b505af1158015613dbb573d6000803e3d6000fd5b505050505050565b6000613464836001600160a01b0384166146ad565b600082613def57613def630ffd11ad60e01b61329e565b60d6805460d3805460018084019094557fe767803f8ecf1dee6bb0345811f7312cda556058b19db6389ad9ae3568643ddd83015560d580548085019091557f51858de9989bf7441865ebdadbf7382c8838edbf830f5d86a9a51ac773676dd60186905560d48054938401815560009081527f9780e26d96b1f2a9a18ef8fc72d589dbf03ef788137b64f43897e83a91e7feec909301839055805491928692613e98908490615774565b9091555050600081815260d7602090815260409091208651613ebc92880190614aa7565b506001600160a01b03831615613f1157613ed583613fce565b613ee957613ee9631a7387bd60e11b61329e565b600081815260cc6020526040902080546001600160a01b0319166001600160a01b0385161790555b826001600160a01b031684827f7fe7f72f14a53255f3c9e225ab1d40fdb21335b87a7912726a196fb816866ae060405160405180910390a4949350505050565b80613f5a6132a7565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60006109ac6001600160a01b038316633b209e2f60e11b614691565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061401f903390899088908890600401615ea6565b6020604051808303816000875af192505050801561405a575060408051601f3d908101601f1916820190925261405791810190615ee3565b60015b6140ac573d808015614088576040519150601f19603f3d011682016040523d82523d6000602084013e61408d565b606091505b5080516140a4576140a46368d2bf6b60e11b61329e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050613664565b60606000613464836147a0565b60006140de33611b5f565b156140f0575060131936013560601c90565b503390565b8060005260046000fd5b600061410a83611b73565b90508180156141225750336001600160a01b03821614155b15614145576141318133612c11565b614145576141456367d9dca160e11b61329e565b8361414e6132a7565b6000858152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551859287811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a450505050565b60009081526001919091016020526040902054151590565b630100000083106141e3576141e36312387aa160e01b61329e565b806141f4576141f06132a7565b5490505b816142015780915061421f565b61420a82613681565b1561421f5761421f63638e967560e11b61329e565b826142345761423463b562e8dd60e01b61329e565b61425384614246600087600088613645565b6001861460e11b1761366c565b61425b6132a7565b600084815260049190910160205260409020556001600160401b0183026142806132a7565b6001600160a01b038616600081815260059290920160205260409091208054909201909155806142b9576142b9622e076360e81b61329e565b828401835b80836000600080516020615fa2833981519152600080a4600101808214156142be578584016142eb6132a7565b5550505050505050565b60006001600160a01b03851615801561431657506001600160a01b03841615155b15614322575080613664565b5081613664565b600061433483613537565b90508060008061434386613608565b91509150841561437a57614358818433613630565b61437a576143668333612c11565b61437a5761437a632ce44b5f60e11b61329e565b801561438557600082555b6001600160801b036143956132a7565b6001600160a01b03851660009081526005919091016020526040812080549092019091556143d79084906143cc9082908881613645565b600360e01b1761366c565b6143df6132a7565b60008881526004919091016020526040902055600160e11b841661445557600186016144096132a7565b600082815260049190910160205260409020546144535761442981613681565b156144535761443785613705565b61443f6132a7565b600083815260049190910160205260409020555b505b60405186906000906001600160a01b03861690600080516020615fa2833981519152908390a46144836132a7565b600190810180549091019055505050505050565b600054610100900460ff166144be5760405162461bcd60e51b81526004016109dd90615f00565b602082015161271061ffff821611156144e1576144e1633daf741f60e21b61329e565b6144e96147fb565b6144f161482a565b6144fa84613ccb565b60cd546001600160a01b03161561454257825160cd8054602086015161ffff16600160a01b026001600160b01b03199091166001600160a01b03909316929092179190911790555b6001600160a01b038216156125ed5760cb80546001600160a01b0384166001600160a01b031990911617905550505050565b600054610100900460ff1661459b5760405162461bcd60e51b81526004016109dd90615f00565b611d1d8282614859565b600054610100900460ff166145cc5760405162461bcd60e51b81526004016109dd90615f00565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff166146155760405162461bcd60e51b81526004016109dd90615f00565b80156131b3576131b36daaeb6d7670e522a718067333cd4e733cc6cdda760b79bafa08df41ecfa224f810dceb6613d1d565b600061465383836141b0565b614689575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109ac565b5060006109ac565b600061469c836148cf565b801561346457506134648383614902565b600081815260018301602052604081205480156147965760006146d1600183615e4e565b85549091506000906146e590600190615e4e565b905081811461474a576000866000018281548110614705576147056156d3565b9060005260206000200154905080876000018481548110614728576147286156d3565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061475b5761475b615f4b565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506109ac565b60009150506109ac565b60608160000180548060200260200160405190810160405280929190818152602001828054801561136757602002820191906000526020600020905b8154815260200190600101908083116147dc5750505050509050919050565b600054610100900460ff166148225760405162461bcd60e51b81526004016109dd90615f00565b611d09614996565b600054610100900460ff166148515760405162461bcd60e51b81526004016109dd90615f00565b611d096149cd565b600054610100900460ff166148805760405162461bcd60e51b81526004016109dd90615f00565b816148896132a7565b600201908051906020019061489f929190614aa7565b50806148a96132a7565b60030190805190602001906148bf929190614aa7565b5060016148ca6132a7565b555050565b60006148e2826301ffc9a760e01b614902565b80156109ac57506148fb826001600160e01b0319614902565b1592915050565b6000806301ffc9a760e01b8360405160240161491e91906157d5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000806000602060008551602087018a617530fa92503d9150600051905082801561497f575060208210155b801561498b5750600081115b979650505050505050565b600054610100900460ff166149bd5760405162461bcd60e51b81526004016109dd90615f00565b611d096149c8613294565b613ccb565b600054610100900460ff166149f45760405162461bcd60e51b81526004016109dd90615f00565b6001609755565b828054614a079061570e565b90600052602060002090601f016020900481019282614a295760008555614a6f565b82601f10614a425782800160ff19823516178555614a6f565b82800160010185558215614a6f579182015b82811115614a6f578235825591602001919060010190614a54565b50614a7b929150614b1b565b5090565b6040518060800160405280606081526020016000815260200160008152602001600081525090565b828054614ab39061570e565b90600052602060002090601f016020900481019282614ad55760008555614a6f565b82601f10614aee57805160ff1916838001178555614a6f565b82800160010185558215614a6f579182015b82811115614a6f578251825591602001919060010190614b00565b5b80821115614a7b5760008155600101614b1c565b6001600160e01b0319811681146131b357600080fd5b600060208284031215614b5857600080fd5b813561346481614b30565b60008083601f840112614b7557600080fd5b5081356001600160401b03811115614b8c57600080fd5b602083019150836020828501011115610f1457600080fd5b600080600060408486031215614bb957600080fd5b8335925060208401356001600160401b03811115614bd657600080fd5b614be286828701614b63565b9497909650939450505050565b6000815180845260005b81811015614c1557602081850181015186830182015201614bf9565b81811115614c27576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006134646020830184614bef565b600060208284031215614c6157600080fd5b5035919050565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146131b357600080fd5b60008060408385031215614cb157600080fd5b8235614cbc81614c89565b946020939093013593505050565b60008083601f840112614cdc57600080fd5b5081356001600160401b03811115614cf357600080fd5b6020830191508360208260051b8501011115610f1457600080fd5b60008060208385031215614d2157600080fd5b82356001600160401b03811115614d3757600080fd5b614d4385828601614cca565b90969095509350505050565b6000815160808452614d646080850182614bef565b90506020830151602085015260408301516040850152606083015160608501528091505092915050565b6000815180845260208085019450848260051b860182860160005b85811015614dd3578383038952614dc1838351614bef565b98850198925090840190600101614da9565b5090979650505050505050565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b83811015614e3757605f19888703018552614e25868351614d4f565b95509382019390820190600101614e09565b505085840381870152505050614e4d8185614d8e565b95945050505050565b600080600060608486031215614e6b57600080fd5b833592506020840135614e7d81614c89565b929592945050506040919091013590565b600080600060608486031215614ea357600080fd5b8335614eae81614c89565b92506020840135614e7d81614c89565b60008060408385031215614ed157600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b60008060008060008060608789031215614f1257600080fd5b86356001600160401b0380821115614f2957600080fd5b614f358a838b01614b63565b90985096506020890135915080821115614f4e57600080fd5b614f5a8a838b01614b63565b90965094506040890135915080821115614f7357600080fd5b50614f8089828a01614b63565b979a9699509497509295939492505050565b60008060208385031215614fa557600080fd5b82356001600160401b03811115614fbb57600080fd5b614d4385828601614b63565b600060208284031215614fd957600080fd5b813561346481614c89565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561502257615022614fe4565b604052919050565b600082601f83011261503b57600080fd5b813560206001600160401b0382111561505657615056614fe4565b8160051b615065828201614ffa565b928352848101820192828101908785111561507f57600080fd5b83870192505b8483101561498b57823561509881614c89565b82529183019190830190615085565b6000806000606084860312156150bc57600080fd5b8335925060208401356001600160401b038111156150d957600080fd5b6150e58682870161502a565b925050604084013590509250925092565b600081518084526020808501945080840160005b838110156151265781518752958201959082019060010161510a565b509495945050505050565b60208152600061346460208301846150f6565b6000806040838503121561515757600080fd5b823561516281614c89565b9150602083013561517281614c89565b809150509250929050565b600082601f83011261518e57600080fd5b81356001600160401b038111156151a7576151a7614fe4565b6151ba601f8201601f1916602001614ffa565b8181528460208386010111156151cf57600080fd5b816020850160208301376000918101602001919091529392505050565b61ffff811681146131b357600080fd5b60006040828403121561520e57600080fd5b604080519081016001600160401b038111828210171561523057615230614fe4565b604052905080823561524181614c89565b81526020830135615251816151ec565b6020919091015292915050565b60008060008060008060c0878903121561527757600080fd5b86356001600160401b038082111561528e57600080fd5b61529a8a838b0161517d565b975060208901359650604089013591506152b382614c89565b8195506152c38a60608b016151fc565b945060a0890135915080821115614f7357600080fd5b600080604083850312156152ec57600080fd5b8235915060208301356001600160401b0381111561530957600080fd5b6139ec8582860161502a565b60008060008060a0858703121561532b57600080fd5b84356001600160401b038082111561534257600080fd5b61534e8883890161517d565b9550602087013591508082111561536457600080fd5b506153718782880161517d565b935050604085013561538281614c89565b915061539186606087016151fc565b905092959194509250565b80151581146131b357600080fd5b80356133108161539c565b600080604083850312156153c857600080fd5b82356153d381614c89565b915060208301356151728161539c565b600080604083850312156153f657600080fd5b82359150602083013561517281614c89565b6000806000806080858703121561541e57600080fd5b843561542981614c89565b9350602085013561543981614c89565b92506040850135915060608501356001600160401b0381111561545b57600080fd5b6154678782880161517d565b91505092959194509250565b6000806000806040858703121561548957600080fd5b84356001600160401b03808211156154a057600080fd5b6154ac88838901614cca565b909650945060208701359150808211156154c557600080fd5b818701915087601f8301126154d957600080fd5b8135818111156154e857600080fd5b8860208260061b85010111156154fd57600080fd5b95989497505060200194505050565b6020815260006134646020830184614d4f565b6000806000806040858703121561553557600080fd5b84356001600160401b038082111561554c57600080fd5b61555888838901614cca565b9096509450602087013591508082111561557157600080fd5b5061557e87828801614cca565b95989497509550505050565b600060408284031215610f6757600080fd5b6020808252825182820181905260009190848201906040850190845b818110156155dd5783516001600160a01b0316835292840192918401916001016155b8565b50909695505050505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b038781168252861660208201526040810185905260a0606082018190526000906156939083018587615620565b9050600783106156a5576156a5615649565b826080830152979650505050505050565b6000602082840312156156c857600080fd5b81516134648161539c565b634e487b7160e01b600052603260045260246000fd5b6040815260006156fc60408301856150f6565b8281036020840152614e4d8185614d8e565b600181811c9082168061572257607f821691505b60208210811415610f6757634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561576d5761576d615743565b5060010190565b6000821982111561578757615787615743565b500190565b6060815260006157a060608301888a615620565b82810360208401526157b3818789615620565b905082810360408401526157c8818587615620565b9998505050505050505050565b6001600160e01b031991909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b803561331081614c89565b600080600080600080600080610100898b03121561583657600080fd5b61583f8961580e565b975060208901356001600160401b038082111561585b57600080fd5b6158678c838d0161517d565b985060408b013591508082111561587d57600080fd5b6158898c838d0161517d565b975060608b013591508082111561589f57600080fd5b6158ab8c838d0161517d565b96506158b960808c0161580e565b955060a08b01359150808211156158cf57600080fd5b506158dc8b828c0161502a565b9350506158eb60c08a016153aa565b91506158f960e08a0161580e565b90509295985092959890939650565b6001600160a01b039290921682521515602082015260400190565b81835260006001600160fb1b0383111561593c57600080fd5b8260051b8083602087013760009401602001938452509192915050565b602081526000613664602083018486615923565b6001600160a01b0392831681529116602082015260400190565b803565ffffffffffff8116811461331057600080fd5b60008060008060008060008060006101208a8c0312156159bc57600080fd5b89356159c781614c89565b985060208a01356159d781614c89565b97506159e560408b01615987565b96506159f360608b01615987565b955060808a01356001600160c01b0381168114615a0f57600080fd5b9450615a1d60a08b01615987565b9350615a2b60c08b01615987565b9250615a3960e08b01615987565b91506101008a013590509295985092959850929598565b65ffffffffffff169052565b60006101c082019050615a70828451614c68565b6020830151615a826020840182615a50565b506040830151615a956040840182615a50565b506060830151615aa86060840182614c68565b506080830151615abb6080840182615a50565b5060a0830151615ace60a0840182615a50565b5060c0830151615ae160c0840182614c68565b5060e0830151615af460e0840182615a50565b5061010080840151615b0882850182615a50565b5050610120838101516001600160c01b03169083015261014080840151615b3182850182615a50565b505061016083810151151590830152610180808401511515908301526101a092830151929091019190915290565b600080600080600060a08688031215615b7757600080fd5b8551615b8281614c89565b602087015160408801519196509450615b9a81614c89565b6060870151909350615bab81614c89565b80925050608086015190509295509295909350565b60048110615bd057615bd0615649565b9052565b60006101408201905084825260018060a01b03808551166020840152806020860151166040840152806040860151166060840152506060840151615c1b6080840182614c68565b50608084015160a083015260a084015160c083015260c0840151615c4360e084018215159052565b5060e0840151615c57610100840182615bc0565b5082610120830152949350505050565b6001600160a01b0393841681526020810192909252909116604082015260600190565b600060208284031215615c9c57600080fd5b8135613464816151ec565b8135615cb281614c89565b81546001600160a01b031981166001600160a01b039290921691821783556020840135615cde816151ec565b6001600160b01b03199190911690911760a09190911b61ffff60a01b1617905550565b8035615d0c81614c89565b6001600160a01b031682526020810135615d25816151ec565b61ffff81166020840152505050565b83815260808101615d486020830185615d01565b6001600160a01b03929092166060919091015292915050565b60006040808352615d758184018789615923565b83810360208086019190915285825286910160005b86811015615dac57615d9c8284615d01565b9183019190830190600101615d8a565b5098975050505050505050565b604081526000615dcd604083018688615923565b8281036020848101919091528482528591810160005b86811015615dac578335615df681614c89565b6001600160a01b031682529282019290820190600101615de3565b60608101615e1f8285615d01565b6001600160a01b039290921660409190910152919050565b600081615e4657615e46615743565b506000190190565b600082821015615e6057615e60615743565b500390565b6000816000190483118215151615615e7f57615e7f615743565b500290565b600082615ea157634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090615ed990830184614bef565b9695505050505050565b600060208284031215615ef557600080fd5b815161346481614b30565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fdfec407dfe559ca4a63d7cf8439b9fce2965d7a4c8c92eb5d5047f53bb9eec295fd73e05f4c0a27cbf60841afa4a2f8577f5e99db3e3e9c293800d6e6b1f7b8a7abddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efe236d251e7da4ac8a3c275f80aebc9b74cbf356425fa04864da5043511a81219a164736f6c634300080a000a