@venusprotocol/governance-contracts
Version:
1,359 lines • 96.4 kB
JSON
{
"_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