UNPKG

@venusprotocol/governance-contracts

Version:
1,359 lines 96.4 kB
{ "_format": "hh-sol-artifact-1", "contractName": "DestinationStewardReceiver", "sourceName": "contracts/RiskSteward/DestinationStewardReceiver.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "endpoint_", "type": "address" }, { "internalType": "uint32", "name": "layerZeroEid_", "type": "uint32" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ConfigNotActive", "type": "error" }, { "inputs": [], "name": "ConfigStatusUnchanged", "type": "error" }, { "inputs": [], "name": "ExecutorStatusUnchanged", "type": "error" }, { "inputs": [], "name": "InvalidDebounce", "type": "error" }, { "inputs": [], "name": "InvalidDelegate", "type": "error" }, { "inputs": [], "name": "InvalidEndpointCall", "type": "error" }, { "inputs": [], "name": "InvalidLayerZeroEid", "type": "error" }, { "inputs": [], "name": "InvalidRemoteDelay", "type": "error" }, { "inputs": [], "name": "InvalidUpdateType", "type": "error" }, { "inputs": [ { "internalType": "uint32", "name": "eid", "type": "uint32" } ], "name": "NoPeer", "type": "error" }, { "inputs": [], "name": "NotAnExecutor", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "OnlyEndpoint", "type": "error" }, { "inputs": [ { "internalType": "uint32", "name": "eid", "type": "uint32" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" } ], "name": "OnlyPeer", "type": "error" }, { "inputs": [], "name": "RemoteDelayUnchanged", "type": "error" }, { "inputs": [], "name": "RenounceOwnershipNotAllowed", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "calledContract", "type": "address" }, { "internalType": "string", "name": "methodSignature", "type": "string" } ], "name": "Unauthorized", "type": "error" }, { "inputs": [], "name": "UnsupportedUpdateType", "type": "error" }, { "inputs": [], "name": "UpdateIsExpired", "type": "error" }, { "inputs": [], "name": "UpdateNotFound", "type": "error" }, { "inputs": [], "name": "UpdateNotUnlocked", "type": "error" }, { "inputs": [], "name": "UpdateTooFrequent", "type": "error" }, { "inputs": [], "name": "ZeroAddressNotAllowed", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "updateTypeHash", "type": "bytes32" }, { "indexed": false, "internalType": "string", "name": "updateType", "type": "string" }, { "indexed": false, "internalType": "bool", "name": "previousActive", "type": "bool" }, { "indexed": true, "internalType": "bool", "name": "active", "type": "bool" } ], "name": "ConfigActiveUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "updateId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "arrivalTime", "type": "uint256" }, { "indexed": true, "internalType": "string", "name": "updateType", "type": "string" }, { "indexed": true, "internalType": "address", "name": "market", "type": "address" } ], "name": "DuplicateUpdateReceived", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "executor", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "previousApproved", "type": "bool" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ExecutorStatusUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldAccessControlManager", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newAccessControlManager", "type": "address" } ], "name": "NewAccessControlManager", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "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": false, "internalType": "uint32", "name": "eid", "type": "uint32" }, { "indexed": false, "internalType": "bytes32", "name": "peer", "type": "bytes32" } ], "name": "PeerSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "updateId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "arrivalTime", "type": "uint256" }, { "indexed": true, "internalType": "string", "name": "updateType", "type": "string" }, { "indexed": true, "internalType": "address", "name": "market", "type": "address" } ], "name": "RegisteredPendingUpdateExist", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "remoteDelay", "type": "uint256" } ], "name": "RemoteDelaySet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "updateId", "type": "uint256" } ], "name": "RemoteUpdateExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "updateId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "arrivalTime", "type": "uint256" }, { "indexed": true, "internalType": "string", "name": "updateType", "type": "string" }, { "indexed": true, "internalType": "address", "name": "market", "type": "address" } ], "name": "RemoteUpdateRegistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "updateTypeHash", "type": "bytes32" }, { "indexed": false, "internalType": "string", "name": "updateType", "type": "string" }, { "indexed": true, "internalType": "address", "name": "previousRiskSteward", "type": "address" }, { "indexed": true, "internalType": "address", "name": "riskSteward", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "previousDebounce", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "debounce", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "previousActive", "type": "bool" }, { "indexed": false, "internalType": "bool", "name": "active", "type": "bool" } ], "name": "RiskParameterConfigUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "updateId", "type": "uint256" } ], "name": "UpdateRejected", "type": "event" }, { "inputs": [], "name": "LAYER_ZERO_EID", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REMOTE_UPDATE_EXPIRATION_TIME", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "accessControlManager", "outputs": [ { "internalType": "contract IAccessControlManagerV8", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, { "internalType": "uint64", "name": "nonce", "type": "uint64" } ], "internalType": "struct Origin", "name": "origin", "type": "tuple" } ], "name": "allowInitializePath", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "endpoint", "outputs": [ { "internalType": "contract ILayerZeroEndpointV2", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "updateId", "type": "uint256" } ], "name": "executeUpdate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "updateType", "type": "string" }, { "internalType": "address", "name": "comptroller", "type": "address" } ], "name": "getExecutableUpdates", "outputs": [ { "internalType": "uint256[]", "name": "executableUpdates", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "updateType", "type": "string" }, { "internalType": "address", "name": "market", "type": "address" } ], "name": "getLastExecutedAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "updateType", "type": "string" }, { "internalType": "address", "name": "market", "type": "address" } ], "name": "getRegisteredUpdate", "outputs": [ { "components": [ { "components": [ { "internalType": "string", "name": "referenceId", "type": "string" }, { "internalType": "uint256", "name": "updateId", "type": "uint256" }, { "internalType": "address", "name": "market", "type": "address" }, { "internalType": "string", "name": "updateType", "type": "string" }, { "internalType": "bytes32", "name": "updateTypeKey", "type": "bytes32" }, { "internalType": "bytes", "name": "newValue", "type": "bytes" }, { "internalType": "bytes", "name": "previousValue", "type": "bytes" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "internalType": "address", "name": "publisher", "type": "address" }, { "internalType": "uint96", "name": "poolId", "type": "uint96" }, { "internalType": "uint32", "name": "destLzEid", "type": "uint32" }, { "internalType": "bytes", "name": "additionalData", "type": "bytes" } ], "internalType": "struct RiskParameterUpdate", "name": "update", "type": "tuple" }, { "internalType": "enum IDestinationStewardReceiver.UpdateStatus", "name": "status", "type": "uint8" }, { "internalType": "uint256", "name": "arrivalTime", "type": "uint256" }, { "internalType": "address", "name": "executor", "type": "address" } ], "internalType": "struct IDestinationStewardReceiver.DestinationUpdate", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "updateType", "type": "string" } ], "name": "getRiskParameterConfig", "outputs": [ { "components": [ { "internalType": "bool", "name": "active", "type": "bool" }, { "internalType": "uint256", "name": "debounce", "type": "uint256" }, { "internalType": "address", "name": "riskSteward", "type": "address" } ], "internalType": "struct IDestinationStewardReceiver.RiskParamConfig", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "accessControlManager_", "type": "address" }, { "internalType": "address", "name": "delegate_", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, { "internalType": "uint64", "name": "nonce", "type": "uint64" } ], "internalType": "struct Origin", "name": "", "type": "tuple" }, { "internalType": "bytes", "name": "", "type": "bytes" }, { "internalType": "address", "name": "_sender", "type": "address" } ], "name": "isComposeMsgSender", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" }, { "internalType": "address", "name": "market", "type": "address" } ], "name": "lastExecutedAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" }, { "internalType": "address", "name": "market", "type": "address" } ], "name": "lastRegisteredUpdateId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, { "internalType": "uint64", "name": "nonce", "type": "uint64" } ], "internalType": "struct Origin", "name": "_origin", "type": "tuple" }, { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, { "internalType": "bytes", "name": "_message", "type": "bytes" }, { "internalType": "address", "name": "_executor", "type": "address" }, { "internalType": "bytes", "name": "_extraData", "type": "bytes" } ], "name": "lzReceive", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "", "type": "uint32" }, { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "nextNonce", "outputs": [ { "internalType": "uint64", "name": "nonce", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "oAppVersion", "outputs": [ { "internalType": "uint64", "name": "senderVersion", "type": "uint64" }, { "internalType": "uint64", "name": "receiverVersion", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_eid", "type": "uint32" } ], "name": "peers", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "updateId", "type": "uint256" } ], "name": "rejectUpdate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "remoteDelay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "riskParameterConfigs", "outputs": [ { "internalType": "bool", "name": "active", "type": "bool" }, { "internalType": "uint256", "name": "debounce", "type": "uint256" }, { "internalType": "address", "name": "riskSteward", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "accessControlManager_", "type": "address" } ], "name": "setAccessControlManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "updateType", "type": "string" }, { "internalType": "bool", "name": "active", "type": "bool" } ], "name": "setConfigActive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_delegate", "type": "address" } ], "name": "setDelegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_eid", "type": "uint32" }, { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } ], "name": "setPeer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newRemoteDelay", "type": "uint256" } ], "name": "setRemoteDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "updateType", "type": "string" }, { "internalType": "address", "name": "riskSteward", "type": "address" }, { "internalType": "uint256", "name": "debounce", "type": "uint256" } ], "name": "setRiskParameterConfig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "executor", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setWhitelistedExecutor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "updateId", "type": "uint256" } ], "name": "updates", "outputs": [ { "components": [ { "internalType": "string", "name": "referenceId", "type": "string" }, { "internalType": "uint256", "name": "updateId", "type": "uint256" }, { "internalType": "address", "name": "market", "type": "address" }, { "internalType": "string", "name": "updateType", "type": "string" }, { "internalType": "bytes32", "name": "updateTypeKey", "type": "bytes32" }, { "internalType": "bytes", "name": "newValue", "type": "bytes" }, { "internalType": "bytes", "name": "previousValue", "type": "bytes" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "internalType": "address", "name": "publisher", "type": "address" }, { "internalType": "uint96", "name": "poolId", "type": "uint96" }, { "internalType": "uint32", "name": "destLzEid", "type": "uint32" }, { "internalType": "bytes", "name": "additionalData", "type": "bytes" } ], "internalType": "struct RiskParameterUpdate", "name": "update", "type": "tuple" }, { "internalType": "enum IDestinationStewardReceiver.UpdateStatus", "name": "status", "type": "uint8" }, { "internalType": "uint256", "name": "arrivalTime", "type": "uint256" }, { "internalType": "address", "name": "executor", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "whitelistedExecutors", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60c060405234801561001057600080fd5b5060405161418938038061418983398101604081905261002f9161016d565b6001600160a01b038216608052610044610083565b61004d82610143565b8063ffffffff16600003610074576040516349961c7360e11b815260040160405180910390fd5b63ffffffff1660a052506101bc565b600054610100900460ff16156100ef5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015610141576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811661016a576040516342bcdf7f60e11b815260040160405180910390fd5b50565b6000806040838503121561018057600080fd5b82516001600160a01b038116811461019757600080fd5b602084015190925063ffffffff811681146101b157600080fd5b809150509250929050565b60805160a051613f9a6101ef60003960006103d101526000818161041a015281816108320152611d3d0152613f9a6000f3fe6080604052600436106102345760003560e01c80638da5cb5b11610138578063ca136b99116100b0578063f2fde38b1161007f578063f63106e411610064578063f63106e41461079f578063fe2b3502146107cc578063ff7bd03d146107fc57600080fd5b8063f2fde38b14610752578063f5d3b7b31461077257600080fd5b8063ca136b99146106de578063ca5eb5e1146106fe578063e2509c761461071e578063e30c39781461073457600080fd5b8063b4a0bdf311610107578063bb0b6a53116100ec578063bb0b6a531461064c578063be3881b41461069e578063c3e10deb146106be57600080fd5b8063b4a0bdf3146105fe578063b4c2f7271461061c57600080fd5b80638da5cb5b14610519578063a49e9ea114610537578063af9e0fd31461056f578063b080d71d146105de57600080fd5b8063438653fe116101cb578063715018a61161019a57806379edd1001161017f57806379edd1001461047e5780637d25a05e1461049e57806382413eac146104da57600080fd5b8063715018a61461045457806379ba50971461046957600080fd5b8063438653fe1461037f578063485cc9551461039f5780634c213449146103bf5780635e280f111461040857600080fd5b806317442b701161020757806317442b70146102d057806328207141146102f25780633400288b1461033f5780633aed7f311461035f57600080fd5b8063050d8986146102395780630e32cb861461026357806313137d6514610285578063170338c814610298575b600080fd5b34801561024557600080fd5b506102506202a30081565b6040519081526020015b60405180910390f35b34801561026f57600080fd5b5061028361027e3660046131cc565b61081c565b005b61028361029336600461324a565b610830565b3480156102a457600080fd5b506102506102b33660046132ea565b60cd60209081526000928352604080842090915290825290205481565b3480156102dc57600080fd5b506040805160008152600260208201520161025a565b3480156102fe57600080fd5b5061031261030d36600461331a565b610922565b6040805182511515815260208084015190820152918101516001600160a01b03169082015260600161025a565b34801561034b57600080fd5b5061028361035a366004613370565b6109a1565b34801561036b57600080fd5b5061028361037a3660046133a8565b610a20565b34801561038b57600080fd5b5061028361039a3660046133d6565b610b09565b3480156103ab57600080fd5b506102836103ba36600461342d565b610c6a565b3480156103cb57600080fd5b506103f37f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161025a565b34801561041457600080fd5b5061043c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025a565b34801561046057600080fd5b50610283610e21565b34801561047557600080fd5b50610283610e53565b34801561048a57600080fd5b5061028361049936600461345b565b610ef8565b3480156104aa57600080fd5b506104c16104b9366004613370565b600092915050565b60405167ffffffffffffffff909116815260200161025a565b3480156104e657600080fd5b506105096104f5366004613474565b6001600160a01b0381163014949350505050565b604051901515815260200161025a565b34801561052557600080fd5b506033546001600160a01b031661043c565b34801561054357600080fd5b506102506105523660046132ea565b60cc60209081526000928352604080842090915290825290205481565b34801561057b57600080fd5b506105b861058a36600461345b565b60ca6020526000908152604090208054600182015460029092015460ff90911691906001600160a01b031683565b60408051931515845260208401929092526001600160a01b03169082015260600161025a565b3480156105ea57600080fd5b506102836105f93660046134db565b611589565b34801561060a57600080fd5b506097546001600160a01b031661043c565b34801561062857600080fd5b5061063c61063736600461345b565b611725565b60405161025a94939291906136fb565b34801561065857600080fd5b5061025061066736600461373b565b63ffffffff1660009081527f72ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f900602052604090205490565b3480156106aa57600080fd5b506102506106b9366004613756565b611ad0565b3480156106ca57600080fd5b506102836106d936600461345b565b611b18565b3480156106ea57600080fd5b506102836106f936600461345b565b611bff565b34801561070a57600080fd5b506102836107193660046131cc565b611cfd565b34801561072a57600080fd5b5061025060c95481565b34801561074057600080fd5b506065546001600160a01b031661043c565b34801561075e57600080fd5b5061028361076d3660046131cc565b611d9c565b34801561077e57600080fd5b5061079261078d366004613756565b611dad565b60405161025a91906137a2565b3480156107ab57600080fd5b506107bf6107ba366004613756565b61224d565b60405161025a91906137fa565b3480156107d857600080fd5b506105096107e73660046131cc565b60ce6020526000908152604090205460ff1681565b34801561080857600080fd5b5061050961081736600461383e565b612508565b610824612526565b61082d8161259c565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610899576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b602087018035906108b3906108ae908a61373b565b6126a4565b1461090a576108c5602088018861373b565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260208801356024820152604401610890565b6109198787878787878761271a565b50505050505050565b60408051606081018252600080825260208201819052918101919091526000838360405161095192919061385a565b60408051918290038220600090815260ca602090815290829020606084018352805460ff1615158452600181015491840191909152600201546001600160a01b0316908201529150505b92915050565b6109a9612526565b63ffffffff821660008181527f72ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f900602081815260409283902085905582519384528301849052917f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b91015b60405180910390a1505050565b610a41604051806060016040528060248152602001613f1360249139612a6e565b610a4a82612b3e565b6001600160a01b038216600090815260ce602052604090205460ff1681151581151503610aa3576040517f8eee990d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316600081815260ce6020908152604091829020805460ff191686151590811790915582518515158152918201527f10c0e7519c24c8e42dbd4d2405e9976e893c51df86614145b2758289f197ec3b910160405180910390a2505050565b610b476040518060400160405280601c81526020017f736574436f6e66696741637469766528737472696e672c626f6f6c2900000000815250612a6e565b60008383604051610b5992919061385a565b6040805191829003909120600081815260ca60205291909120600201549091506001600160a01b0316610bb8576040517f80919d7b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260ca602052604090205460ff1682151581151503610c07576040517f01e852dc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260ca602052604090819020805460ff1916851515908117909155905183907fcba816b2fc5cd49700523a79b6e6c7dda19292fbb932cca77f7bccb1e500479290610c5b90899089908790613895565b60405180910390a35050505050565b600054610100900460ff1615808015610c8a5750600054600160ff909116105b80610ca45750303b158015610ca4575060005460ff166001145b610d30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610890565b6000805460ff191660011790558015610d7057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610d7983612b7e565b610d8282612c26565b61546060c98190556040519081527fa1c2964049f672e1cba842d393f777ed468b9846eb7de186d7e73665a326b3019060200160405180910390a18015610e1c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610a13565b505050565b6040517f96c553eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60655433906001600160a01b03168114610eef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610890565b61082d81612cc6565b33600090815260ce602052604090205460ff16610f41576040517f341f61ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260cb602052604080822081516101808101909252805490929190839082908290610f6f906138bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9b906138bb565b8015610fe85780601f10610fbd57610100808354040283529160200191610fe8565b820191906000526020600020905b815481529060010190602001808311610fcb57829003601f168201915b50505091835250506001820154602082015260028201546001600160a01b03166040820152600382018054606090920191611022906138bb565b80601f016020809104026020016040519081016040528092919081815260200182805461104e906138bb565b801561109b5780601f106110705761010080835404028352916020019161109b565b820191906000526020600020905b81548152906001019060200180831161107e57829003601f168201915b50505050508152602001600482015481526020016005820180546110be906138bb565b80601f01602080910402602001604051908101604052809291908181526020018280546110ea906138bb565b80156111375780601f1061110c57610100808354040283529160200191611137565b820191906000526020600020905b81548152906001019060200180831161111a57829003601f168201915b50505050508152602001600682018054611150906138bb565b80601f016020809104026020016040519081016040528092919081815260200182805461117c906138bb565b80156111c95780601f1061119e576101008083540402835291602001916111c9565b820191906000526020600020905b8154815290600101906020018083116111ac57829003601f168201915b50505091835250506007820154602082015260088201546001600160a01b03811660408301527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff166060820152600982015463ffffffff166080820152600a8201805460a09092019161123f906138bb565b80601f016020809104026020016040519081016040528092919081815260200182805461126b906138bb565b80156112b85780601f1061128d576101008083540402835291602001916112b8565b820191906000526020600020905b81548152906001019060200180831161129b57829003601f168201915b505050919092525050506080810151600081815260ca6020526040902080549293509091429060ff16611317576040517fdea2a21200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600b86015460ff16600381111561133257611332613691565b14611369576040517f6196e5a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c95485600c015461137b9190613937565b8110156113b4576040517f05f5f49800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806202a3008560e001516113c89190613937565b1015611400576040517fc2a16f1400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083815260cd60209081526040808320878201516001600160a01b0316845290915290205480158015906114435750818360010154826114419190613937565b115b1561147a576040517f53f7a6ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260cd60209081526040808320888201516001600160a01b039081168552925291829020849055600b88018054600260ff199091168117909155600d890180547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317905585015491517fbf63783900000000000000000000000000000000000000000000000000000000815291169063bf6378399061152390889060040161394a565b600060405180830381600087803b15801561153d57600080fd5b505af1158015611551573d6000803e3d6000fd5b50506040518992507f27f52b13359f1687e1c3c6179b59fd5f217e9f580e76053c074a51d65de2dac79150600090a250505050505050565b6115aa6040518060600160405280602e8152602001613f37602e9139612a6e565b6115b382612b3e565b8215806115c05750604083115b156115f6576040517e64280000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003611630576040517ff6ea4e0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848460405161164292919061385a565b60408051918290038220600081815260ca602081815284832060608701865260018088528288018a81526001600160a01b038c81168a8a0181815297899052959094529751825460ff19169015159081178355975181830181905594516002830180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919094169081179093559551949750959194909387937f2cbea64d1a2ece216f5461b535881b82196130c6a988a9d3b323bd6d5cfe608e93611715938e938e93928d9260ff9091169161395d565b60405180910390a4505050505050565b60cb6020528060005260406000206000915090508060000160405180610180016040529081600082018054611759906138bb565b80601f0160208091040260200160405190810160405280929190818152602001828054611785906138bb565b80156117d25780601f106117a7576101008083540402835291602001916117d2565b820191906000526020600020905b8154815290600101906020018083116117b557829003601f168201915b50505091835250506001820154602082015260028201546001600160a01b0316604082015260038201805460609092019161180c906138bb565b80601f0160208091040260200160405190810160405280929190818152602001828054611838906138bb565b80156118855780601f1061185a57610100808354040283529160200191611885565b820191906000526020600020905b81548152906001019060200180831161186857829003601f168201915b50505050508152602001600482015481526020016005820180546118a8906138bb565b80601f01602080910402602001604051908101604052809291908181526020018280546118d4906138bb565b80156119215780601f106118f657610100808354040283529160200191611921565b820191906000526020600020905b81548152906001019060200180831161190457829003601f168201915b5050505050815260200160068201805461193a906138bb565b80601f0160208091040260200160405190810160405280929190818152602001828054611966906138bb565b80156119b35780601f10611988576101008083540402835291602001916119b3565b820191906000526020600020905b81548152906001019060200180831161199657829003601f168201915b50505091835250506007820154602082015260088201546001600160a01b03811660408301527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff166060820152600982015463ffffffff166080820152600a8201805460a090920191611a29906138bb565b80601f0160208091040260200160405190810160405280929190818152602001828054611a55906138bb565b8015611aa25780601f10611a7757610100808354040283529160200191611aa2565b820191906000526020600020905b815481529060010190602001808311611a8557829003601f168201915b50505091909252505050600b820154600c830154600d90930154919260ff909116916001600160a01b031684565b6000808484604051611ae392919061385a565b6040805191829003909120600090815260cd60209081528282206001600160a01b0387168352905220549150505b9392505050565b33600090815260ce602052604090205460ff16611b61576040517f341f61ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260cb602052604090206001600b82015460ff166003811115611b8a57611b8a613691565b14611bc1576040517f6196e5a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b8101805460ff1916600317905560405182907f0a4273908b9362e571cacd5610879e3dfd7ddc7c9b3ce1d7ea7ea8b41869116490600090a25050565b611c3d6040518060400160405280601781526020017f73657452656d6f746544656c61792875696e7432353629000000000000000000815250612a6e565b801580611c4d57506202a3008110155b15611c84576040517f545f991300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c954818103611cc0576040517fbb45c33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c98290556040518281527fa1c2964049f672e1cba842d393f777ed468b9846eb7de186d7e73665a326b301906020015b60405180910390a15050565b611d05612526565b6040517fca5eb5e10000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b158015611d8157600080fd5b505af1158015611d95573d6000803e3d6000fd5b5050505050565b611da4612526565b61082d81612ccf565b6040805161020081018252606060808201818152600060a0840181905260c0840181905260e08401839052610100840181905261012084018390526101408401839052610160840181905261018084018190526101a084018190526101c084018190526101e084018390529083526020830181905292820183905281019190915260008484604051611e4092919061385a565b60408051918290038220600081815260cc60209081528382206001600160a01b038916835281528382205480835260cb909152908390206102008501909352825491945092919082906080820190839082908290611e9d906138bb565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec9906138bb565b8015611f165780601f10611eeb57610100808354040283529160200191611f16565b820191906000526020600020905b815481529060010190602001808311611ef957829003601f168201915b50505091835250506001820154602082015260028201546001600160a01b03166040820152600382018054606090920191611f50906138bb565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7c906138bb565b8015611fc95780601f10611f9e57610100808354040283529160200191611fc9565b820191906000526020600020905b815481529060010190602001808311611fac57829003601f168201915b5050505050815260200160048201548152602001600582018054611fec906138bb565b80601f0160208091040260200160405190810160405280929190818152602001828054612018906138bb565b80156120655780601f1061203a57610100808354040283529160200191612065565b820191906000526020600020905b81548152906001019060200180831161204857829003601f168201915b5050505050815260200160068201805461207e906138bb565b80601f01602080910402602001604051908101604052809291908181526020018280546120aa906138bb565b80156120f75780601f106120cc576101008083540402835291602001916120f7565b820191906000526020600020905b8154815290600101906020018083116120da57829003601f168201915b50505091835250506007820154602082015260088201546001600160a01b03811660408301527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff166060820152600982015463ffffffff166080820152600a8201805460a09092019161216d906138bb565b80601f0160208091040260200160405190810160405280929190818152602001828054612199906138bb565b80156121e65780601f106121bb576101008083540402835291602001916121e6565b820191906000526020600020905b8154815290600101906020018083116121c957829003601f168201915b505050919092525050508152600b82015460209091019060ff16600381111561221157612211613691565b600381111561222257612222613691565b8152600c8201546020820152600d909101546001600160a01b03166040909101529695505050505050565b60606000848460405161226192919061385a565b604051809103902090506000836001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156122ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122d39190810190613a22565b805190915060008167ffffffffffffffff8111156122f3576122f3613998565b60405190808252806020026020018201604052801561231c578160200160208202803683370190505b50600085815260ca602052604081208054929350909160ff166123565750506040805160008152602081019091529450611b119350505050565b60005b8481101561246a57600086828151811061237557612375613ad4565b60209081029190910181015160008a815260cc835260408082206001600160a01b038416835284528082205480835260cb90945290209092506123b782612d58565b6123c357505050612462565b60c95481600c01546123d59190613937565b4210156123e457505050612462565b60008a815260cd602090815260408083206001600160a01b038716845290915290205480158015906124245750428660010154826124229190613937565b115b156124325750505050612462565b8288888151811061244557612445613ad4565b60209081029190910101528661245a81613b03565b975050505050505b600101612359565b508167ffffffffffffffff81111561248457612484613998565b6040519080825280602002602001820160405280156124ad578160200160208202803683370190505b50965060005b828110156124fa