[ { "inputs": [], "name": "EditionDoesNotExist", "type": "error" }, { "inputs": [], "name": "InsufficientBalance", "type": "error" }, { "inputs": [], "name": "InvalidBurn", "type": "error" }, { "inputs": [], "name": "InvalidEditionSizeUpdate", "type": "error" }, { "inputs": [], "name": "InvalidInput", "type": "error" }, { "inputs": [], "name": "InvalidManager", "type": "error" }, { "inputs": [], "name": "InvalidOperator", "type": "error" }, { "inputs": [], "name": "InvalidOwner", "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": "MintFrozen", "type": "error" }, { "inputs": [], "name": "MinterRegistrationInvalid", "type": "error" }, { "inputs": [], "name": "NotMinter", "type": "error" }, { "inputs": [], "name": "NotTokenOwnerOrApproved", "type": "error" }, { "inputs": [], "name": "ReceiverNonImplementer", "type": "error" }, { "inputs": [], "name": "ReceiverRejectedTokens", "type": "error" }, { "inputs": [], "name": "RoyaltyBPSInvalid", "type": "error" }, { "inputs": [], "name": "RoyaltySetBlocked", "type": "error" }, { "inputs": [], "name": "SoldOut", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "TransferFromZeroAddress", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "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": true, "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "indexed": false, "internalType": "uint128", "name": "oldSize", "type": "uint128" }, { "indexed": false, "internalType": "uint128", "name": "newSize", "type": "uint128" } ], "name": "HighlightUpdated1155EditionSize", "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": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "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": "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": "mechanicVectorData", "type": "bytes" } ], "name": "createEditionWithMechanicVector", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "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" }, { "internalType": "bytes", "name": "mechanicVectorData", "type": "bytes" } ], "name": "createEditionWithMechanicVectorAndPublicFixedPriceVector", "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": "editionSupply", "outputs": [ { "internalType": "uint128", "name": "currentSupply", "type": "uint128" }, { "internalType": "uint128", "name": "maxSupply", "type": "uint128" } ], "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": "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": [ { "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": [], "name": "highlightContractStandardHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "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": "account", "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 IObservabilityV2", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "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": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "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": "uint128", "name": "newSize", "type": "uint128" } ], "name": "setEditionSize", "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": "_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": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "unregisterMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
608060405234801561001057600080fd5b50615ea380620000216000396000f3fe608060405234801561001057600080fd5b50600436106102715760003560e01c8062fdd58e1461027657806301ffc9a71461029c578063063a7502146102bf5780630690a78d146102c957806306fdde03146102dc5780630e89341c146102f157806317360d341461030457806318160ddd1461032557806318bae6c81461032d5780631b30808d1461034d5780632a55205a146103605780632a5ac764146103815780632eb2c2d614610394578063336211bf146103a7578063377e5e27146103ba57806346134b50146103cd57806347230dcb146103e05780634e1273f4146103f35780634f58122a1461041357806350cf5a3114610426578063572b6c05146104395780636502abea1461044c578063662fff381461045f5780636b15fd4514610472578063715018a61461048557806375794a3c1461048d578063834a20df146104975780638da5cb5b146104aa57806391d0049e146104b257806392172704146104c557806395d89b41146104d8578063a22cb465146104e0578063a305f5b2146104f3578063b1b00d0e14610506578063b5c5801e14610519578063b859c93514610521578063bfb2995c14610534578063c2f5070114610547578063c87b56dd1461054f578063cbab0bd314610562578063d1f5789414610588578063ddf990f91461059b578063e8a3d485146105bb578063e985e9c5146105c3578063eb872150146105d6578063ee295d62146105e9578063eeab0589146105fc578063ef60ceaf1461060f578063f242432a14610622578063f2fde38b14610635578063f5298aca14610648578063f775baac1461065b578063f83e6ed81461066e578063f97b57ec146106b1575b600080fd5b6102896102843660046145d4565b6106c6565b6040519081526020015b60405180910390f35b6102af6102aa366004614616565b610712565b6040519015158152602001610293565b6102c761071d565b005b6102c76102d7366004614674565b6107dd565b6102e4610a18565b6040516102939190614717565b6102e46102ff36600461472a565b610aa7565b610317610312366004614787565b610ab2565b60405161029392919061485c565b610289610c05565b60cb54610340906001600160a01b031681565b60405161029391906148df565b61028961035b3660046148f3565b610c1c565b61037361036e36600461492b565b610cb0565b60405161029392919061494d565b6102c761038f366004614966565b610cc8565b6102c76103a2366004614b58565b610dc5565b6102896103b536600461472a565b610e1b565b6102e46103c836600461472a565b610e41565b6103406103db36600461472a565b610f02565b6102c76103ee366004614c05565b610f0d565b610406610401366004614c91565b610fba565b6040516102939190614d25565b6102c7610421366004614787565b611099565b6102c7610434366004614c05565b6112bb565b6102af610447366004614c05565b61145e565b61034061045a36600461472a565b611472565b61028961046d366004614d38565b6114a1565b610289610480366004614df9565b61151a565b6102c76117c4565b6102896101375481565b6102c76104a5366004614c05565b6117d6565b610340611854565b6102896104c0366004614ebd565b611863565b6102896104d3366004614f38565b611a46565b6102e4611acc565b6102c76104ee366004614f82565b611ada565b6102c7610501366004614c05565b611aec565b6102c7610514366004614fbb565b611c50565b6102c7611d7b565b61028961052f366004614fec565b611ecf565b6102c7610542366004615011565b611f49565b6102c761226f565b6102e461055d36600461472a565b612380565b7f3a9654d81ac4dafbb9a2fb1cd3efa3de2783ae40b06b17a456bf5922ed02a3a7610289565b6102c76105963660046150aa565b6123a2565b6105ae6105a936600461472a565b612529565b60405161029391906150ef565b6102e461255a565b6102af6105d1366004615102565b612568565b60d054610340906001600160a01b031681565b60cf54610340906001600160a01b031681565b6102c761060a366004615130565b612597565b6102c761061d36600461519b565b612861565b6102c76106303660046151ad565b612a6f565b6102c7610643366004614c05565b612abe565b6102c7610656366004615215565b612b34565b610289610669366004614ebd565b612d73565b6106a361067c36600461472a565b610138602052600090815260409020546001600160801b0380821691600160801b90041682565b60405161029392919061524a565b6106b9612eb0565b6040516102939190615264565b60006001600160a01b0383166106e6576106e66349e27cff60e01b612ebc565b506000818152610103602090815260408083206001600160a01b03861684529091529020545b92915050565b600061070c82612ec5565b610725612f15565b61072d612f84565b60cf805460ff60a01b1916600160a01b1790556040517f9d4b38394dff663b46f53f52ced584161b5021180321b381f6104325eecebf4990600090a160d060009054906101000a90046001600160a01b03166001600160a01b031663fd120bd26040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107b957600080fd5b505af11580156107cd573d6000803e3d6000fd5b505050506107db6001609755565b565b60006107e884611472565b905060006107f4612fe5565b90506001600160a01b03821661083e57600061080e611854565b9050806001600160a01b0316826001600160a01b031614610838576108386282b42960e81b612ebc565b506108cc565b604051634e9173c760e11b81526001600160a01b03831690639d22e78e9061087590309085908a908a908a906006906004016152da565b6020604051808303816000875af1158015610894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b8919061534f565b6108cc576108cc631b04458960e01b612ebc565b6000858152610139602052604090206108e690858561448e565b5060408051600180825281830190925260009160208083019080368337019050509050858160008151811061091d5761091d61536c565b6020908102919091010152604080516001808252818301909252600091816020015b606081526020019060019003908161093f57905050905085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508551869450909250151590506109a0576109a061536c565b602090810291909101015260d0546040516374c1ace160e01b81526001600160a01b03909116906374c1ace1906109dd9085908590600401615382565b600060405180830381600087803b1580156109f757600080fd5b505af1158015610a0b573d6000803e3d6000fd5b5050505050505050505050565b6101358054610a26906153a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a52906153a7565b8015610a9f5780601f10610a7457610100808354040283529160200191610a9f565b820191906000526020600020905b815481529060010190602001808311610a8257829003601f168201915b505050505081565b606061070c82612380565b606080826000816001600160401b03811115610ad057610ad06149ff565b604051908082528060200260200182016040528015610b0957816020015b610af661450e565b815260200190600190039081610aee5790505b5090506000826001600160401b03811115610b2657610b266149ff565b604051908082528060200260200182016040528015610b5957816020015b6060815260200190600190039081610b445790505b50905060005b83811015610bf657610b88888883818110610b7c57610b7c61536c565b90506020020135610e41565b828281518110610b9a57610b9a61536c565b6020026020010181905250610bc6888883818110610bba57610bba61536c565b90506020020135612fef565b838281518110610bd857610bd861536c565b60200260200101819052508080610bee906153f2565b915050610b5f565b509093509150505b9250929050565b6000600161013754610c17919061540d565b905090565b6000610c31610c29612fe5565b60c99061304b565b610c4557610c45633e34a41b60e21b612ebc565b610c4d612f84565b60cf54600160a01b900460ff1660011415610c7257610c726345a9661760e01b612ebc565b610c7e84610137541190565b610c9257610c9263eb49290360e01b612ebc565b610c9d848484613060565b9050610ca96001609755565b9392505050565b600080610cbd8484613134565b915091509250929050565b610cd0612f15565b610d4386868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a0181900481028201810190925288815292508891508790819084018382808284376000920191909152506131cf92505050565b610d50610134838361448e565b5060d054604051635bf57bc360e01b81526001600160a01b0390911690635bf57bc390610d8b90899089908990899089908990600401615424565b600060405180830381600087803b158015610da557600080fd5b505af1158015610db9573d6000803e3d6000fd5b50505050505050505050565b610dcd612fe5565b6001600160a01b0316856001600160a01b03161480610df35750610df3856105d1612fe5565b610e0757610e07634cd9539b60e11b612ebc565b610e1485858585856131f8565b5050505050565b6000610e2982610137541190565b610e3d57610e3d63677510db60e11b612ebc565b5090565b6060610e4f82610137541190565b610e6357610e6363eb49290360e01b612ebc565b6000828152610139602052604090208054610e7d906153a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea9906153a7565b8015610ef65780601f10610ecb57610100808354040283529160200191610ef6565b820191906000526020600020905b815481529060010190602001808311610ed957829003601f168201915b50505050509050919050565b600061070c82611472565b610f15612f15565b610f2060c98261339a565b610f3457610f3463ea6eb5c360e01b612ebc565b6040516001906001600160a01b03831690600080516020615e5783398151915290600090a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f90610f8c90849060019060040161546d565b600060405180830381600087803b158015610fa657600080fd5b505af1158015610e14573d6000803e3d6000fd5b60608151835114610fd557610fd563b4fa3fb360e01b612ebc565b600083516001600160401b03811115610ff057610ff06149ff565b604051908082528060200260200182016040528015611019578160200160208202803683370190505b50905060005b84518110156110915761106485828151811061103d5761103d61536c565b60200260200101518583815181106110575761105761536c565b60200260200101516106c6565b8282815181106110765761107661536c565b602090810291909101015261108a816153f2565b905061101f565b509392505050565b6110a1612f84565b60006110ab612fe5565b90508160005b8181101561120d57600060cc60008787858181106110d1576110d161536c565b60209081029290920135835250810191909152604001600020546001600160a01b031690508061110b5761110b635f98be1560e11b612ebc565b806001600160a01b031663ce2003a58588888681811061112d5761112d61536c565b905060200201356040518363ffffffff1660e01b815260040161115192919061494d565b6020604051808303816000875af1158015611170573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611194919061534f565b6111a8576111a863251c48e160e11b612ebc565b600060cc60008888868181106111c0576111c061536c565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550508080611205906153f2565b9150506110b1565b507f4d30c2588339a383e2c3092b5383924cf202ae9c377b76c5fe5208cd41d8d2aa848460405161123f9291906154be565b60405180910390a160d0546040516320364dcd60e21b81526001600160a01b03909116906380d937349061127990879087906004016154be565b600060405180830381600087803b15801561129357600080fd5b505af11580156112a7573d6000803e3d6000fd5b5050505050506112b76001609755565b5050565b6112c3612f84565b6112cc816133af565b6112e0576112e0631a7387bd60e11b612ebc565b60006112ea612fe5565b60cf549091506001600160a01b03168061133257611306611854565b6001600160a01b0316826001600160a01b03161461132d5761132d6282b42960e81b612ebc565b6113b8565b60405163bcdbc94760e01b81526001600160a01b038481166004830152838116602483015282169063bcdbc94790604401602060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a4919061534f565b6113b8576113b863e10a050560e01b612ebc565b60cf80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615e7783398151915290600090a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab4229061141d9086906004016148df565b600060405180830381600087803b15801561143757600080fd5b505af115801561144b573d6000803e3d6000fd5b50505050505061145b6001609755565b50565b6065546001600160a01b0391821691161490565b60cb54600082815260cc60205260409020546001600160a01b039182169116801561149b578091505b50919050565b60006114ae610c29612fe5565b6114c2576114c2633e34a41b60e21b612ebc565b6114ca612f84565b60cf54600160a01b900460ff16600114156114ef576114ef6345a9661760e01b612ebc565b6114fb84610137541190565b61150f5761150f63eb49290360e01b612ebc565b610c9d8484846133cb565b6000611524612f15565b61152c612f84565b60006115398a8a8a6134ed565b87519091506001600160a01b03161561158e57600081815260ce6020908152604090912088518154928a015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b84156116ee5760008060008060008060008060008e8e8101906115b191906154f0565b985098509850985098509850985098509850886001600160a01b03166377a856ea604051806101c00160405280306001600160a01b031681526020018a65ffffffffffff1681526020018965ffffffffffff1681526020018b6001600160a01b031681526020018665ffffffffffff168152602001600065ffffffffffff168152602001846001600160a01b031681526020018765ffffffffffff1681526020018565ffffffffffff168152602001886001600160c01b031681526020018d65ffffffffffff1681526020016001151581526020016000151581526020016000801b8152506040518263ffffffff1660e01b81526004016116b291906155ba565b600060405180830381600087803b1580156116cc57600080fd5b505af11580156116e0573d6000803e3d6000fd5b505050505050505050505050505b82156117ac576000808080611705878901896156bd565b6040805160c0810182523081526001600160601b038b1660208201526001600160a01b03808616828401526001606083015260006080830181905260a083015291516338a2f85160e21b8152959950939750919550935084169163e28be14491611775918890869060040161573d565b600060405180830381600087803b15801561178f57600080fd5b505af11580156117a3573d6000803e3d6000fd5b50505050505050505b90506117b86001609755565b98975050505050505050565b6117cc612f15565b6107db60006135ef565b6117de612f15565b6117e960c982613641565b6117fd576117fd63ea6eb5c360e01b612ebc565b6040516000906001600160a01b03831690600080516020615e57833981519152908390a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f90610f8c90849060009060040161546d565b6033546001600160a01b031690565b600061186d612f15565b611875612f84565b60006118828888886134ed565b85519091506001600160a01b0316156118d757600081815260ce60209081526040909120865181549288015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b8215611a3057600080808080808080806118f38c8e018e6154f0565b985098509850985098509850985098509850886001600160a01b03166377a856ea604051806101c00160405280306001600160a01b031681526020018a65ffffffffffff1681526020018965ffffffffffff1681526020018b6001600160a01b031681526020018665ffffffffffff168152602001600065ffffffffffff168152602001846001600160a01b031681526020018765ffffffffffff1681526020018565ffffffffffff168152602001886001600160c01b031681526020018d65ffffffffffff1681526020016001151581526020016000151581526020016000801b8152506040518263ffffffff1660e01b81526004016119f491906155ba565b600060405180830381600087803b158015611a0e57600080fd5b505af1158015611a22573d6000803e3d6000fd5b505050505050505050505050505b9050611a3c6001609755565b9695505050505050565b6000611a53610c29612fe5565b611a6757611a67633e34a41b60e21b612ebc565b611a6f612f84565b60cf54600160a01b900460ff1660011415611a9457611a946345a9661760e01b612ebc565b611aa083610137541190565b611ab457611ab463eb49290360e01b612ebc565b611ac0838360016133cb565b905061070c6001609755565b6101368054610a26906153a7565b6112b7611ae5612fe5565b8383613656565b611af4612f84565b611afd816136ee565b611b1157611b11631a7387bd60e11b612ebc565b6000611b1b612fe5565b60cb549091506001600160a01b031680611b6357611b37611854565b6001600160a01b0316826001600160a01b031614611b5e57611b5e6282b42960e81b612ebc565b611beb565b6040516342f19adb60e11b81526001600160a01b038216906385e335b690611b9490859060009088906004016157bc565b6020604051808303816000875af1158015611bb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd7919061534f565b611beb57611beb63e10a050560e01b612ebc565b60cb80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615e3783398151915290600090a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd9061141d9086906004016148df565b611c58612f15565b611c6482610137541190565b611c7857611c7863eb49290360e01b612ebc565b600082815261013860209081526040918290208251808401909352546001600160801b038082168452600160801b909104169082018190521580611cda575060208101516001600160801b031615801590611cda57506001600160801b038216155b80611cfa575080600001516001600160801b0316826001600160801b0316105b15611d0f57611d0f6352d7c80b60e11b612ebc565b827f3c2d7b840f03bc7a1e02b5faf6a89bb740590f5871b876deae799c89188634d1826020015184604051611d4592919061524a565b60405180910390a2506000918252610138602052604090912080546001600160801b03928316600160801b029216919091179055565b611d83612f84565b6000611d8d612fe5565b60cb549091506001600160a01b031680611db157611db1635f98be1560e11b612ebc565b60405163ce2003a560e01b81526001600160a01b0382169063ce2003a590611de090859060009060040161494d565b6020604051808303816000875af1158015611dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e23919061534f565b611e3757611e3763251c48e160e11b612ebc565b60cb80546001600160a01b0319169055604051600090600080516020615e37833981519152908290a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd90611e91906000906004016148df565b600060405180830381600087803b158015611eab57600080fd5b505af1158015611ebf573d6000803e3d6000fd5b5050505050506107db6001609755565b6000611edc610c29612fe5565b611ef057611ef0633e34a41b60e21b612ebc565b611ef8612f84565b60cf54600160a01b900460ff1660011415611f1d57611f1d6345a9661760e01b612ebc565b611f2983610137541190565b611f3d57611f3d63eb49290360e01b612ebc565b611ac083836001613060565b611f51612f84565b6000611f5b612fe5565b90506000611f67611854565b60cf549091506001600160a01b0316858161206857826001600160a01b0316846001600160a01b031614611fa457611fa46282b42960e81b612ebc565b60005b8181101561206257611fea878783818110611fc457611fc461536c565b9050604002016020016020810190611fdc91906157df565b61271061ffff909116111590565b611ffe57611ffe633daf741f60e21b612ebc565b8686828181106120105761201061536c565b90506040020160ce60008b8b8581811061202c5761202c61536c565b905060200201358152602001908152602001600020818161204d91906157fc565b5081905061205a816153f2565b915050611fa7565b506121b6565b60005b818110156121b457612088878783818110611fc457611fc461536c565b61209c5761209c633daf741f60e21b612ebc565b826001600160a01b031663ad6e40c78a8a848181106120bd576120bd61536c565b905060200201358989858181106120d6576120d661536c565b905060400201886040518463ffffffff1660e01b81526004016120fb93929190615889565b602060405180830381865afa158015612118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213c919061534f565b6121505761215063270e710760e21b612ebc565b8686828181106121625761216261536c565b90506040020160ce60008b8b8581811061217e5761217e61536c565b905060200201358152602001908152602001600020818161219f91906157fc565b508190506121ac816153f2565b91505061206b565b505b7feaf422d1ab2d8f38856ab6be8378c08d2886463a33667e896ba3a6ebf2c6260c888888886040516121eb94939291906158b6565b60405180910390a160d054604051632be18fef60e11b81526001600160a01b03909116906357c31fde90612229908b908b908b908b906004016158b6565b600060405180830381600087803b15801561224357600080fd5b505af1158015612257573d6000803e3d6000fd5b50505050505050506122696001609755565b50505050565b612277612f84565b6000612281612fe5565b60cf549091506001600160a01b0316806122a5576122a5635f98be1560e11b612ebc565b60405163680c607d60e11b81526001600160a01b0382169063d018c0fa906122d19085906004016148df565b602060405180830381865afa1580156122ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612312919061534f565b6123265761232663251c48e160e11b612ebc565b60cf80546001600160a01b0319169055604051600090600080516020615e77833981519152908290a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab42290611e91906000906004016148df565b606061238e82610137541190565b610e6357610e6363677510db60e11b612ebc565b600054610100900460ff16158080156123c25750600054600160ff909116105b806123e357506123d13061370a565b1580156123e3575060005460ff166001145b61244b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561246e576000805461ff0019166101001790555b60008060008060008060008880602001905181019061248d91906159d7565b96509650965096509650965096506000604051806040016040528060006001600160a01b03168152602001600061ffff1681525090506124d68b8260008b8b8b8b8b8b8b613719565b50505050505050508015612524576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b61253161450e565b61253d82610137541190565b6125515761255163eb49290360e01b612ebc565b61070c82612fef565b6101348054610a26906153a7565b6001600160a01b0391821660009081526101046020908152604080832093909416825291909152205460ff1690565b61259f612f84565b60006125a9612fe5565b905060006125b5611854565b90508460005b818110156127ae576125f28686838181106125d8576125d861536c565b90506020020160208101906125ed9190614c05565b6136ee565b61260657612606631a7387bd60e11b612ebc565b600061262989898481811061261d5761261d61536c565b90506020020135611472565b90506001600160a01b03811661266657836001600160a01b0316856001600160a01b031614612661576126616282b42960e81b612ebc565b612724565b806001600160a01b03166385e335b6868b8b868181106126885761268861536c565b600088815260cc60209081526040918290205491516001600160e01b031960e089901b1681526126cd969591909302013592506001600160a01b0316906004016157bc565b6020604051808303816000875af11580156126ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612710919061534f565b6127245761272463e10a050560e01b612ebc565b8686838181106127365761273661536c565b905060200201602081019061274b9190614c05565b60cc60008b8b868181106127615761276161536c565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505080806127a6906153f2565b9150506125bb565b507facc0f6922d8ccd133dbdaee1908d4d734f25a540223d55145e9fad2898471a4e878787876040516127e49493929190615ab5565b60405180910390a160d0546040516315bd85bf60e01b81526001600160a01b03909116906315bd85bf90612822908a908a908a908a90600401615ab5565b600060405180830381600087803b15801561283c57600080fd5b505af1158015612850573d6000803e3d6000fd5b505050505050506122696001609755565b612869612f84565b61287960408201602083016157df565b61271061ffff8216111561289757612897633daf741f60e21b612ebc565b60006128a1612fe5565b60cf549091506001600160a01b0316806128e9576128bd611854565b6001600160a01b0316826001600160a01b0316146128e4576128e46282b42960e81b612ebc565b61296c565b60405163049a5c0f60e41b81526001600160a01b038216906349a5c0f0906129179087908690600401615b0d565b602060405180830381865afa158015612934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612958919061534f565b61296c5761296c63270e710760e21b612ebc565b8360cd61297982826157fc565b5061298c905060408501602086016157df565b61ffff1661299d6020860186614c05565b6001600160a01b03167f2c5ea6e4103e78cb101e796fb2dace540362fc542cbff5145eaa24af7dd8fe4160405160405180910390a360d0546001600160a01b031663d10072c06129f06020870187614c05565b612a0060408801602089016157df565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015261ffff166024820152604401600060405180830381600087803b158015612a4a57600080fd5b505af1158015612a5e573d6000803e3d6000fd5b5050505050505061145b6001609755565b612a77612fe5565b6001600160a01b0316856001600160a01b03161480612a9d5750612a9d856105d1612fe5565b612ab157612ab1634cd9539b60e11b612ebc565b610e14858585858561382b565b612ac6612f15565b6001600160a01b038116612b2b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401612442565b61145b816135ef565b612b3c612f84565b6000612b4783611472565b90506000612b53612fe5565b600085815261013860205260409020549091506001600160801b031680841115612b8757612b8763eeddf6ab60e01b612ebc565b6001600160a01b03831615801590612c0e57506040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790612bcd9063129dae8b60e01b90600401615b33565b602060405180830381865afa158015612bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0e919061534f565b15612c825760405163129dae8b60e01b81526001600160a01b03838116600483015287811660248301526044820187905284169063129dae8b90606401600060405180830381600087803b158015612c6557600080fd5b505af1158015612c79573d6000803e3d6000fd5b50505050612cbb565b612c8c8683612568565b80612ca85750856001600160a01b0316826001600160a01b0316145b612cbb57612cbb6282b42960e81b612ebc565b612cc6868686613953565b612cd08482615b48565b6000868152610138602052604080822080546001600160801b0319166001600160801b03949094169390931790925560d054915163205b13af60e01b81526001600160a01b039092169163205b13af91612d349186918b918b908b90600401615b70565b600060405180830381600087803b158015612d4e57600080fd5b505af1158015612d62573d6000803e3d6000fd5b505050505050506125246001609755565b6000612d7d612f15565b612d85612f84565b6000612d928888886134ed565b85519091506001600160a01b031615612de757600081815260ce60209081526040909120865181549288015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b8215611a30576000808080612dfe878901896156bd565b6040805160c0810182523081526001600160601b038b1660208201526001600160a01b03808616828401526001606083015260006080830181905260a083015291516338a2f85160e21b8152959950939750919550935084169163e28be14491612e6e918890869060040161573d565b600060405180830381600087803b158015612e8857600080fd5b505af1158015612e9c573d6000803e3d6000fd5b50505050505050509050611a3c6001609755565b6060610c1760c9613a50565b61145b81613a5d565b60006001600160e01b03198216636cdb3d1360e11b1480612ef657506001600160e01b031982166303a24d0760e21b145b8061070c57506301ffc9a760e01b6001600160e01b031983161461070c565b612f1d612fe5565b6001600160a01b0316612f2e611854565b6001600160a01b0316146107db5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401612442565b60026097541415612fd75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401612442565b6002609755565b6001609755565b6000610c17613a67565b612ff761450e565b506040805160a08101825260006080820181815282528381526101386020818152848320546001600160801b03600160801b8204811683870152938790529190521691810191909152606081019190915290565b6000610ca9836001600160a01b038416613a8c565b6000838152610138602090815260408083208151808301909252546001600160801b03808216808452600160801b90920416928201929092529082906130a7908590615ba4565b9050600082602001516001600160801b03161180156130d2575081602001516001600160801b031681115b156130e7576130e76352df9fe560e01b612ebc565b61310285878660405180602001604052806000815250613aa4565b6000958652610138602052604090952080546001600160801b0319166001600160801b03871617905550929392505050565b600082815260ce602090815260408083208151808301909252546001600160a01b038116808352600160a01b90910461ffff1692820192909252829161319f57506040805180820190915260cd546001600160a01b0381168252600160a01b900461ffff1660208201525b80516020820151909350612710906131bb9061ffff1686615bbc565b6131c59190615bdb565b9150509250929050565b81516131e390610135906020850190614536565b50805161252490610136906020840190614536565b81518351146132115761321163b4fa3fb360e01b612ebc565b6001600160a01b03841661322f5761322f633a954ecd60e21b612ebc565b6000613239612fe5565b905060005b845181101561331e57600085828151811061325b5761325b61536c565b6020026020010151905060008583815181106132795761327961536c565b6020908102919091018101516000848152610103835260408082206001600160a01b038e1683529093529190912054909150818110156132c3576132c3631e9acf1760e31b612ebc565b6000838152610103602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290613303908490615ba4565b9250508190555050505080613317906153f2565b905061323e565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161336e929190615bfd565b60405180910390a4613384818787878787613b7b565b613392818787878787613e22565b505050505050565b6000610ca9836001600160a01b038416613f2d565b600061070c6001600160a01b03831663440444c560e11b613f77565b81516000848152610138602090815260408083208151808301909252546001600160801b038082168352600160801b9091041691810191909152909190826134138584615bbc565b825161342891906001600160801b0316615ba4565b9050600082602001516001600160801b0316118015613453575081602001516001600160801b031681115b15613468576134686352df9fe560e01b612ebc565b60005b838110156134b9576134a78782815181106134885761348861536c565b6020026020010151898860405180602001604052806000815250613aa4565b806134b1816153f2565b91505061346b565b506000968752610138602052604090962080546001600160801b0319166001600160801b0388161790555093949350505050565b610137546000906134ff816001615ba4565b6101375560408051808201825260008082526001600160801b0387811660208085019182528684526101388152858420945191518316600160801b029190921617909255610139825291909120865161355a92880190614536565b506001600160a01b038316156135af57613573836136ee565b61358757613587631a7387bd60e11b612ebc565b600081815260cc6020526040902080546001600160a01b0319166001600160a01b0385161790555b826001600160a01b031684827f7fe7f72f14a53255f3c9e225ab1d40fdb21335b87a7912726a196fb816866ae060405160405180910390a4949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000610ca9836001600160a01b038416613f93565b816001600160a01b0316836001600160a01b031614156136805761368063ccea9e6f60e01b612ebc565b6001600160a01b0383811660008181526101046020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600061070c6001600160a01b038316633b209e2f60e11b613f77565b6001600160a01b03163b151590565b6137248a8a8a614086565b61372e86866131cf565b61373784614162565b825160005b81811015613784576137718582815181106137595761375961536c565b602002602001015160c961339a90919063ffffffff16565b508061377c816153f2565b91505061373c565b50600161013755875161379f906101349060208b0190614536565b506040516316550d7160e11b81526001600160a01b03831690632caa1ae2906137cc9030906004016148df565b600060405180830381600087803b1580156137e657600080fd5b505af11580156137fa573d6000803e3d6000fd5b505060d080546001600160a01b0319166001600160a01b039590951694909417909355505050505050505050505050565b6001600160a01b03841661384957613849633a954ecd60e21b612ebc565b6000613853612fe5565b90506000613860856141ab565b9050600061386d856141ab565b6000878152610103602090815260408083206001600160a01b038d168452909152902054909150858110156138ac576138ac631e9acf1760e31b612ebc565b6000878152610103602090815260408083206001600160a01b038d8116855292528083208985039055908a168252812080548892906138ec908490615ba4565b909155505060408051888152602081018890526001600160a01b03808b16928c82169291881691600080516020615e17833981519152910160405180910390a461393a848a8a86868a613b7b565b613948848a8a8a8a8a6141f6565b505050505050505050565b6001600160a01b03831661397157613971630b07e54560e11b612ebc565b600061397b612fe5565b90506000613988846141ab565b90506000613995846141ab565b6000868152610103602090815260408083206001600160a01b038b168452909152902054909150848110156139d4576139d4631e9acf1760e31b612ebc565b6000868152610103602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a9052909290881691600080516020615e17833981519152910160405180910390a4613a4784886000868660405180602001604052806000815250613b7b565b50505050505050565b60606000610ca9836142b0565b8060005260046000fd5b6000613a723361145e565b15613a84575060131936013560601c90565b503390565b90565b60009081526001919091016020526040902054151590565b6001600160a01b038416613ac257613ac2633a954ecd60e21b612ebc565b6000613acc612fe5565b90506000613ad9856141ab565b90506000613ae6856141ab565b6000878152610103602090815260408083206001600160a01b038c168452909152812080549293508792909190613b1e908490615ba4565b909155505060408051878152602081018790526001600160a01b03808a169260009291871691600080516020615e17833981519152910160405180910390a4613b6c83600089858589613b7b565b613a47836000898989896141f6565b8251869060005b81811015613cef576000613bae878381518110613ba157613ba161536c565b6020026020010151610f02565b90506001600160a01b03811615801590613c3757506040516301ffc9a760e01b81526001600160a01b038216906301ffc9a790613bf690637af46b4f60e11b90600401615b33565b602060405180830381865afa158015613c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c37919061534f565b15613cdc57806001600160a01b0316637f1eaf85858b8b8b8781518110613c6057613c6061536c565b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526064810191909152608401600060405180830381600087803b158015613cc357600080fd5b505af1158015613cd7573d6000803e3d6000fd5b505050505b5080613ce7816153f2565b915050613b82565b508060011415613dad5760d060009054906101000a90046001600160a01b03166001600160a01b031663205b13af83898989600081518110613d3357613d3361536c565b602002602001015189600081518110613d4e57613d4e61536c565b60200260200101516040518663ffffffff1660e01b8152600401613d76959493929190615b70565b600060405180830381600087803b158015613d9057600080fd5b505af1158015613da4573d6000803e3d6000fd5b50505050613e18565b60d05460405163bcee357960e01b81526001600160a01b039091169063bcee357990613de59085908b908b908b908b90600401615c22565b600060405180830381600087803b158015613dff57600080fd5b505af1158015613e13573d6000803e3d6000fd5b505050505b5050505050505050565b613e34846001600160a01b031661370a565b156133925760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190613e6d9089908990889088908890600401615c68565b6020604051808303816000875af1925050508015613ea8575060408051601f3d908101601f19168201909252613ea591810190615cba565b60015b613f0557613eb4615cd7565b806308c379a01415613eee5750613ec9615cf2565b80613ed45750613ef0565b8060405162461bcd60e51b81526004016124429190614717565b505b613f00637e1e096960e11b612ebc565b613392565b6001600160e01b0319811663bc197c8160e01b14613a4757613a4763c6017f5f60e01b612ebc565b6000613f398383613a8c565b613f6f5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561070c565b50600061070c565b6000613f828361430b565b8015610ca95750610ca9838361433e565b6000818152600183016020526040812054801561407c576000613fb760018361540d565b8554909150600090613fcb9060019061540d565b9050818114614030576000866000018281548110613feb57613feb61536c565b906000526020600020015490508087600001848154811061400e5761400e61536c565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061404157614041615d7b565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061070c565b600091505061070c565b600054610100900460ff166140ad5760405162461bcd60e51b815260040161244290615d91565b602082015161271061ffff821611156140d0576140d0633daf741f60e21b612ebc565b6140d86143d2565b6140e0614401565b6140e9846135ef565b82516001600160a01b03161561413057825160cd8054602086015161ffff16600160a01b026001600160b01b03199091166001600160a01b03909316929092179190911790555b6001600160a01b038216156122695760cb80546001600160a01b0384166001600160a01b031990911617905550505050565b600054610100900460ff166141895760405162461bcd60e51b815260040161244290615d91565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106141e5576141e561536c565b602090810291909101015292915050565b614208846001600160a01b031661370a565b156133925760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906142419089908990889088908890600401615ddc565b6020604051808303816000875af192505050801561427c575060408051601f3d908101601f1916820190925261427991810190615cba565b60015b61428857613eb4615cd7565b6001600160e01b0319811663f23a6e6160e01b14613a4757613a4763c6017f5f60e01b612ebc565b606081600001805480602002602001604051908101604052809291908181526020018280548015610ef657602002820191906000526020600020905b8154815260200190600101908083116142ec5750505050509050919050565b600061431e826301ffc9a760e01b61433e565b801561070c5750614337826001600160e01b031961433e565b1592915050565b6000806301ffc9a760e01b8360405160240161435a9190615b33565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000806000602060008551602087018a617530fa92503d915060005190508280156143bb575060208210155b80156143c75750600081115b979650505050505050565b600054610100900460ff166143f95760405162461bcd60e51b815260040161244290615d91565b6107db614430565b600054610100900460ff166144285760405162461bcd60e51b815260040161244290615d91565b6107db614467565b600054610100900460ff166144575760405162461bcd60e51b815260040161244290615d91565b6107db614462612fe5565b6135ef565b600054610100900460ff16612fde5760405162461bcd60e51b815260040161244290615d91565b82805461449a906153a7565b90600052602060002090601f0160209004810192826144bc5760008555614502565b82601f106144d55782800160ff19823516178555614502565b82800160010185558215614502579182015b828111156145025782358255916020019190600101906144e7565b50610e3d9291506145aa565b6040518060800160405280606081526020016000815260200160008152602001600081525090565b828054614542906153a7565b90600052602060002090601f0160209004810192826145645760008555614502565b82601f1061457d57805160ff1916838001178555614502565b82800160010185558215614502579182015b8281111561450257825182559160200191906001019061458f565b5b80821115610e3d57600081556001016145ab565b6001600160a01b038116811461145b57600080fd5b600080604083850312156145e757600080fd5b82356145f2816145bf565b946020939093013593505050565b6001600160e01b03198116811461145b57600080fd5b60006020828403121561462857600080fd5b8135610ca981614600565b60008083601f84011261464557600080fd5b5081356001600160401b0381111561465c57600080fd5b602083019150836020828501011115610bfe57600080fd5b60008060006040848603121561468957600080fd5b8335925060208401356001600160401b038111156146a657600080fd5b6146b286828701614633565b9497909650939450505050565b60005b838110156146da5781810151838201526020016146c2565b838111156122695750506000910152565b600081518084526147038160208601602086016146bf565b601f01601f19169290920160200192915050565b602081526000610ca960208301846146eb565b60006020828403121561473c57600080fd5b5035919050565b60008083601f84011261475557600080fd5b5081356001600160401b0381111561476c57600080fd5b6020830191508360208260051b8501011115610bfe57600080fd5b6000806020838503121561479a57600080fd5b82356001600160401b038111156147b057600080fd5b6147bc85828601614743565b90969095509350505050565b60008151608084526147dd60808501826146eb565b90506020830151602085015260408301516040850152606083015160608501528091505092915050565b600081518084526020808501808196508360051b8101915082860160005b8581101561484f57828403895261483d8483516146eb565b98850198935090840190600101614825565b5091979650505050505050565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b838110156148b357605f198887030185526148a18683516147c8565b95509382019390820190600101614885565b5050858403818701525050506148c98185614807565b95945050505050565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b60008060006060848603121561490857600080fd5b83359250602084013561491a816145bf565b929592945050506040919091013590565b6000806040838503121561493e57600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b6000806000806000806060878903121561497f57600080fd5b86356001600160401b038082111561499657600080fd5b6149a28a838b01614633565b909850965060208901359150808211156149bb57600080fd5b6149c78a838b01614633565b909650945060408901359150808211156149e057600080fd5b506149ed89828a01614633565b979a9699509497509295939492505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715614a3a57614a3a6149ff565b6040525050565b60006001600160401b03821115614a5a57614a5a6149ff565b5060051b60200190565b600082601f830112614a7557600080fd5b81356020614a8282614a41565b604051614a8f8282614a15565b83815260059390931b8501820192828101915086841115614aaf57600080fd5b8286015b84811015614aca5780358352918301918301614ab3565b509695505050505050565b60006001600160401b03821115614aee57614aee6149ff565b50601f01601f191660200190565b600082601f830112614b0d57600080fd5b8135614b1881614ad5565b604051614b258282614a15565b828152856020848701011115614b3a57600080fd5b82602086016020830137600092810160200192909252509392505050565b600080600080600060a08688031215614b7057600080fd5b8535614b7b816145bf565b94506020860135614b8b816145bf565b935060408601356001600160401b0380821115614ba757600080fd5b614bb389838a01614a64565b94506060880135915080821115614bc957600080fd5b614bd589838a01614a64565b93506080880135915080821115614beb57600080fd5b50614bf888828901614afc565b9150509295509295909350565b600060208284031215614c1757600080fd5b8135610ca9816145bf565b600082601f830112614c3357600080fd5b81356020614c4082614a41565b604051614c4d8282614a15565b83815260059390931b8501820192828101915086841115614c6d57600080fd5b8286015b84811015614aca578035614c84816145bf565b8352918301918301614c71565b60008060408385031215614ca457600080fd5b82356001600160401b0380821115614cbb57600080fd5b614cc786838701614c22565b93506020850135915080821115614cdd57600080fd5b506131c585828601614a64565b600081518084526020808501945080840160005b83811015614d1a57815187529582019590820190600101614cfe565b509495945050505050565b602081526000610ca96020830184614cea565b600080600060608486031215614d4d57600080fd5b8335925060208401356001600160401b03811115614d6a57600080fd5b614d7686828701614c22565b925050604084013590509250925092565b61ffff8116811461145b57600080fd5b600060408284031215614da957600080fd5b604080519081016001600160401b0381118282101715614dcb57614dcb6149ff565b6040529050808235614ddc816145bf565b81526020830135614dec81614d87565b6020919091015292915050565b60008060008060008060008060e0898b031215614e1557600080fd5b88356001600160401b0380821115614e2c57600080fd5b614e388c838d01614afc565b995060208b0135985060408b01359150614e51826145bf565b819750614e618c60608d01614d97565b965060a08b0135915080821115614e7757600080fd5b614e838c838d01614633565b909650945060c08b0135915080821115614e9c57600080fd5b50614ea98b828c01614633565b999c989b5096995094979396929594505050565b60008060008060008060c08789031215614ed657600080fd5b86356001600160401b0380821115614eed57600080fd5b614ef98a838b01614afc565b97506020890135965060408901359150614f12826145bf565b819550614f228a60608b01614d97565b945060a08901359150808211156149e057600080fd5b60008060408385031215614f4b57600080fd5b8235915060208301356001600160401b03811115614f6857600080fd5b6131c585828601614c22565b801515811461145b57600080fd5b60008060408385031215614f9557600080fd5b8235614fa0816145bf565b91506020830135614fb081614f74565b809150509250929050565b60008060408385031215614fce57600080fd5b8235915060208301356001600160801b0381168114614fb057600080fd5b60008060408385031215614fff57600080fd5b823591506020830135614fb0816145bf565b6000806000806040858703121561502757600080fd5b84356001600160401b038082111561503e57600080fd5b61504a88838901614743565b9096509450602087013591508082111561506357600080fd5b818701915087601f83011261507757600080fd5b81358181111561508657600080fd5b8860208260061b850101111561509b57600080fd5b95989497505060200194505050565b600080604083850312156150bd57600080fd5b82356150c8816145bf565b915060208301356001600160401b038111156150e357600080fd5b6131c585828601614afc565b602081526000610ca960208301846147c8565b6000806040838503121561511557600080fd5b8235615120816145bf565b91506020830135614fb0816145bf565b6000806000806040858703121561514657600080fd5b84356001600160401b038082111561515d57600080fd5b61516988838901614743565b9096509450602087013591508082111561518257600080fd5b5061518f87828801614743565b95989497509550505050565b60006040828403121561149b57600080fd5b600080600080600060a086880312156151c557600080fd5b85356151d0816145bf565b945060208601356151e0816145bf565b9350604086013592506060860135915060808601356001600160401b0381111561520957600080fd5b614bf888828901614afc565b60008060006060848603121561522a57600080fd5b8335615235816145bf565b95602085013595506040909401359392505050565b6001600160801b0392831681529116602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156152a55783516001600160a01b031683529284019291840191600101615280565b50909695505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038781168252861660208201526040810185905260a06060820181905260009061530e90830185876152b1565b90506007831061532e57634e487b7160e01b600052602160045260246000fd5b826080830152979650505050505050565b805161534a81614f74565b919050565b60006020828403121561536157600080fd5b8151610ca981614f74565b634e487b7160e01b600052603260045260246000fd5b6040815260006153956040830185614cea565b82810360208401526148c98185614807565b600181811c908216806153bb57607f821691505b6020821081141561149b57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415615406576154066153dc565b5060010190565b60008282101561541f5761541f6153dc565b500390565b60608152600061543860608301888a6152b1565b828103602084015261544b8187896152b1565b905082810360408401526154608185876152b1565b9998505050505050505050565b6001600160a01b039290921682521515602082015260400190565b81835260006001600160fb1b038311156154a157600080fd5b8260051b8083602087013760009401602001938452509192915050565b6020815260006154d2602083018486615488565b949350505050565b803565ffffffffffff8116811461534a57600080fd5b60008060008060008060008060006101208a8c03121561550f57600080fd5b893561551a816145bf565b985060208a013561552a816145bf565b975061553860408b016154da565b965061554660608b016154da565b955060808a01356001600160c01b038116811461556257600080fd5b945061557060a08b016154da565b935061557e60c08b016154da565b925061558c60e08b016154da565b91506101008a013561559d816145bf565b809150509295985092959850929598565b65ffffffffffff169052565b60006101c0820190506155ce8284516148d2565b60208301516155e060208401826155ae565b5060408301516155f360408401826155ae565b50606083015161560660608401826148d2565b50608083015161561960808401826155ae565b5060a083015161562c60a08401826155ae565b5060c083015161563f60c08401826148d2565b5060e083015161565260e08401826155ae565b5061010080840151615666828501826155ae565b5050610120838101516001600160c01b0316908301526101408084015161568f828501826155ae565b505061016083810151151590830152610180808401511515908301526101a092830151929091019190915290565b600080600080608085870312156156d357600080fd5b84356001600160601b03811681146156ea57600080fd5b935060208501356156fa816145bf565b9250604085013561570a816145bf565b915060608501356001600160401b0381111561572557600080fd5b61573187828801614afc565b91505092959194509250565b83516001600160a01b0390811682526020808601516001600160601b0316908301526040808601519091169082015260608085015115159082015260808085015115159082015260a08481015115159082015260006101006157aa60c08401866001600160601b03169052565b8060e0840152611a3c818401856146eb565b6001600160a01b0393841681526020810192909252909116604082015260600190565b6000602082840312156157f157600080fd5b8135610ca981614d87565b8135615807816145bf565b81546001600160a01b031981166001600160a01b03929092169182178355602084013561583381614d87565b6001600160b01b03199190911690911760a09190911b61ffff60a01b1617905550565b8035615861816145bf565b6001600160a01b03168252602081013561587a81614d87565b61ffff81166020840152505050565b8381526080810161589d6020830185615856565b6001600160a01b03929092166060919091015292915050565b600060408083526158ca8184018789615488565b83810360208086019190915285825286910160005b86811015615901576158f18284615856565b91830191908301906001016158df565b5098975050505050505050565b600082601f83011261591f57600080fd5b815161592a81614ad5565b6040516159378282614a15565b82815285602084870101111561594c57600080fd5b6148c98360208301602088016146bf565b805161534a816145bf565b600082601f83011261597957600080fd5b8151602061598682614a41565b6040516159938282614a15565b83815260059390931b85018201928281019150868411156159b357600080fd5b8286015b84811015614aca5780516159ca816145bf565b83529183019183016159b7565b600080600080600080600060e0888a0312156159f257600080fd5b87516001600160401b0380821115615a0957600080fd5b615a158b838c0161590e565b985060208a0151915080821115615a2b57600080fd5b615a378b838c0161590e565b975060408a0151915080821115615a4d57600080fd5b615a598b838c0161590e565b9650615a6760608b0161595d565b955060808a0151915080821115615a7d57600080fd5b50615a8a8a828b01615968565b935050615a9960a0890161533f565b9150615aa760c0890161595d565b905092959891949750929550565b604081526000615ac9604083018688615488565b8281036020848101919091528482528591810160005b86811015615901578335615af2816145bf565b6001600160a01b031682529282019290820190600101615adf565b60608101615b1b8285615856565b6001600160a01b039290921660409190910152919050565b6001600160e01b031991909116815260200190565b60006001600160801b0383811690831681811015615b6857615b686153dc565b039392505050565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b60008219821115615bb757615bb76153dc565b500190565b6000816000190483118215151615615bd657615bd66153dc565b500290565b600082615bf857634e487b7160e01b600052601260045260246000fd5b500490565b604081526000615c106040830185614cea565b82810360208401526148c98185614cea565b6001600160a01b03868116825285811660208301528416604082015260a060608201819052600090615c5690830185614cea565b82810360808401526117b88185614cea565b6001600160a01b0386811682528516602082015260a060408201819052600090615c9490830186614cea565b8281036060840152615ca68186614cea565b905082810360808401526117b881856146eb565b600060208284031215615ccc57600080fd5b8151610ca981614600565b600060033d1115613a895760046000803e5060005160e01c90565b600060443d1015615d005790565b6040516003193d81016004833e81513d6001600160401b038083116024840183101715615d2f57505050505090565b8285019150815181811115615d475750505050505090565b843d8701016020828501011115615d615750505050505090565b615d7060208286010187614a15565b509095945050505050565b634e487b7160e01b600052603160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906143c7908301846146eb56fec3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62c407dfe559ca4a63d7cf8439b9fce2965d7a4c8c92eb5d5047f53bb9eec295fd73e05f4c0a27cbf60841afa4a2f8577f5e99db3e3e9c293800d6e6b1f7b8a7abe236d251e7da4ac8a3c275f80aebc9b74cbf356425fa04864da5043511a81219a164736f6c634300080a000a