// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 // protoc v3.6.1 // source: routerrpc/router.proto package routerrpc import ( context "context" proto "github.com/golang/protobuf/proto" lnrpc "github.com/lightningnetwork/lnd/lnrpc" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) // This is a compile-time assertion that a sufficiently up-to-date version // of the legacy proto package is being used. const _ = proto.ProtoPackageIsVersion4 type FailureDetail int32 const ( FailureDetail_UNKNOWN FailureDetail = 0 FailureDetail_NO_DETAIL FailureDetail = 1 FailureDetail_ONION_DECODE FailureDetail = 2 FailureDetail_LINK_NOT_ELIGIBLE FailureDetail = 3 FailureDetail_ON_CHAIN_TIMEOUT FailureDetail = 4 FailureDetail_HTLC_EXCEEDS_MAX FailureDetail = 5 FailureDetail_INSUFFICIENT_BALANCE FailureDetail = 6 FailureDetail_INCOMPLETE_FORWARD FailureDetail = 7 FailureDetail_HTLC_ADD_FAILED FailureDetail = 8 FailureDetail_FORWARDS_DISABLED FailureDetail = 9 FailureDetail_INVOICE_CANCELED FailureDetail = 10 FailureDetail_INVOICE_UNDERPAID FailureDetail = 11 FailureDetail_INVOICE_EXPIRY_TOO_SOON FailureDetail = 12 FailureDetail_INVOICE_NOT_OPEN FailureDetail = 13 FailureDetail_MPP_INVOICE_TIMEOUT FailureDetail = 14 FailureDetail_ADDRESS_MISMATCH FailureDetail = 15 FailureDetail_SET_TOTAL_MISMATCH FailureDetail = 16 FailureDetail_SET_TOTAL_TOO_LOW FailureDetail = 17 FailureDetail_SET_OVERPAID FailureDetail = 18 FailureDetail_UNKNOWN_INVOICE FailureDetail = 19 FailureDetail_INVALID_KEYSEND FailureDetail = 20 FailureDetail_MPP_IN_PROGRESS FailureDetail = 21 FailureDetail_CIRCULAR_ROUTE FailureDetail = 22 ) // Enum value maps for FailureDetail. var ( FailureDetail_name = map[int32]string{ 0: "UNKNOWN", 1: "NO_DETAIL", 2: "ONION_DECODE", 3: "LINK_NOT_ELIGIBLE", 4: "ON_CHAIN_TIMEOUT", 5: "HTLC_EXCEEDS_MAX", 6: "INSUFFICIENT_BALANCE", 7: "INCOMPLETE_FORWARD", 8: "HTLC_ADD_FAILED", 9: "FORWARDS_DISABLED", 10: "INVOICE_CANCELED", 11: "INVOICE_UNDERPAID", 12: "INVOICE_EXPIRY_TOO_SOON", 13: "INVOICE_NOT_OPEN", 14: "MPP_INVOICE_TIMEOUT", 15: "ADDRESS_MISMATCH", 16: "SET_TOTAL_MISMATCH", 17: "SET_TOTAL_TOO_LOW", 18: "SET_OVERPAID", 19: "UNKNOWN_INVOICE", 20: "INVALID_KEYSEND", 21: "MPP_IN_PROGRESS", 22: "CIRCULAR_ROUTE", } FailureDetail_value = map[string]int32{ "UNKNOWN": 0, "NO_DETAIL": 1, "ONION_DECODE": 2, "LINK_NOT_ELIGIBLE": 3, "ON_CHAIN_TIMEOUT": 4, "HTLC_EXCEEDS_MAX": 5, "INSUFFICIENT_BALANCE": 6, "INCOMPLETE_FORWARD": 7, "HTLC_ADD_FAILED": 8, "FORWARDS_DISABLED": 9, "INVOICE_CANCELED": 10, "INVOICE_UNDERPAID": 11, "INVOICE_EXPIRY_TOO_SOON": 12, "INVOICE_NOT_OPEN": 13, "MPP_INVOICE_TIMEOUT": 14, "ADDRESS_MISMATCH": 15, "SET_TOTAL_MISMATCH": 16, "SET_TOTAL_TOO_LOW": 17, "SET_OVERPAID": 18, "UNKNOWN_INVOICE": 19, "INVALID_KEYSEND": 20, "MPP_IN_PROGRESS": 21, "CIRCULAR_ROUTE": 22, } ) func (x FailureDetail) Enum() *FailureDetail { p := new(FailureDetail) *p = x return p } func (x FailureDetail) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (FailureDetail) Descriptor() protoreflect.EnumDescriptor { return file_routerrpc_router_proto_enumTypes[0].Descriptor() } func (FailureDetail) Type() protoreflect.EnumType { return &file_routerrpc_router_proto_enumTypes[0] } func (x FailureDetail) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use FailureDetail.Descriptor instead. func (FailureDetail) EnumDescriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{0} } type PaymentState int32 const ( // //Payment is still in flight. PaymentState_IN_FLIGHT PaymentState = 0 // //Payment completed successfully. PaymentState_SUCCEEDED PaymentState = 1 // //There are more routes to try, but the payment timeout was exceeded. PaymentState_FAILED_TIMEOUT PaymentState = 2 // //All possible routes were tried and failed permanently. Or were no //routes to the destination at all. PaymentState_FAILED_NO_ROUTE PaymentState = 3 // //A non-recoverable error has occured. PaymentState_FAILED_ERROR PaymentState = 4 // //Payment details incorrect (unknown hash, invalid amt or //invalid final cltv delta) PaymentState_FAILED_INCORRECT_PAYMENT_DETAILS PaymentState = 5 // //Insufficient local balance. PaymentState_FAILED_INSUFFICIENT_BALANCE PaymentState = 6 ) // Enum value maps for PaymentState. var ( PaymentState_name = map[int32]string{ 0: "IN_FLIGHT", 1: "SUCCEEDED", 2: "FAILED_TIMEOUT", 3: "FAILED_NO_ROUTE", 4: "FAILED_ERROR", 5: "FAILED_INCORRECT_PAYMENT_DETAILS", 6: "FAILED_INSUFFICIENT_BALANCE", } PaymentState_value = map[string]int32{ "IN_FLIGHT": 0, "SUCCEEDED": 1, "FAILED_TIMEOUT": 2, "FAILED_NO_ROUTE": 3, "FAILED_ERROR": 4, "FAILED_INCORRECT_PAYMENT_DETAILS": 5, "FAILED_INSUFFICIENT_BALANCE": 6, } ) func (x PaymentState) Enum() *PaymentState { p := new(PaymentState) *p = x return p } func (x PaymentState) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (PaymentState) Descriptor() protoreflect.EnumDescriptor { return file_routerrpc_router_proto_enumTypes[1].Descriptor() } func (PaymentState) Type() protoreflect.EnumType { return &file_routerrpc_router_proto_enumTypes[1] } func (x PaymentState) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use PaymentState.Descriptor instead. func (PaymentState) EnumDescriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{1} } type ResolveHoldForwardAction int32 const ( ResolveHoldForwardAction_SETTLE ResolveHoldForwardAction = 0 ResolveHoldForwardAction_FAIL ResolveHoldForwardAction = 1 ResolveHoldForwardAction_RESUME ResolveHoldForwardAction = 2 ) // Enum value maps for ResolveHoldForwardAction. var ( ResolveHoldForwardAction_name = map[int32]string{ 0: "SETTLE", 1: "FAIL", 2: "RESUME", } ResolveHoldForwardAction_value = map[string]int32{ "SETTLE": 0, "FAIL": 1, "RESUME": 2, } ) func (x ResolveHoldForwardAction) Enum() *ResolveHoldForwardAction { p := new(ResolveHoldForwardAction) *p = x return p } func (x ResolveHoldForwardAction) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (ResolveHoldForwardAction) Descriptor() protoreflect.EnumDescriptor { return file_routerrpc_router_proto_enumTypes[2].Descriptor() } func (ResolveHoldForwardAction) Type() protoreflect.EnumType { return &file_routerrpc_router_proto_enumTypes[2] } func (x ResolveHoldForwardAction) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use ResolveHoldForwardAction.Descriptor instead. func (ResolveHoldForwardAction) EnumDescriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{2} } type ChanStatusAction int32 const ( ChanStatusAction_ENABLE ChanStatusAction = 0 ChanStatusAction_DISABLE ChanStatusAction = 1 ChanStatusAction_AUTO ChanStatusAction = 2 ) // Enum value maps for ChanStatusAction. var ( ChanStatusAction_name = map[int32]string{ 0: "ENABLE", 1: "DISABLE", 2: "AUTO", } ChanStatusAction_value = map[string]int32{ "ENABLE": 0, "DISABLE": 1, "AUTO": 2, } ) func (x ChanStatusAction) Enum() *ChanStatusAction { p := new(ChanStatusAction) *p = x return p } func (x ChanStatusAction) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (ChanStatusAction) Descriptor() protoreflect.EnumDescriptor { return file_routerrpc_router_proto_enumTypes[3].Descriptor() } func (ChanStatusAction) Type() protoreflect.EnumType { return &file_routerrpc_router_proto_enumTypes[3] } func (x ChanStatusAction) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use ChanStatusAction.Descriptor instead. func (ChanStatusAction) EnumDescriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{3} } type HtlcEvent_EventType int32 const ( HtlcEvent_UNKNOWN HtlcEvent_EventType = 0 HtlcEvent_SEND HtlcEvent_EventType = 1 HtlcEvent_RECEIVE HtlcEvent_EventType = 2 HtlcEvent_FORWARD HtlcEvent_EventType = 3 ) // Enum value maps for HtlcEvent_EventType. var ( HtlcEvent_EventType_name = map[int32]string{ 0: "UNKNOWN", 1: "SEND", 2: "RECEIVE", 3: "FORWARD", } HtlcEvent_EventType_value = map[string]int32{ "UNKNOWN": 0, "SEND": 1, "RECEIVE": 2, "FORWARD": 3, } ) func (x HtlcEvent_EventType) Enum() *HtlcEvent_EventType { p := new(HtlcEvent_EventType) *p = x return p } func (x HtlcEvent_EventType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (HtlcEvent_EventType) Descriptor() protoreflect.EnumDescriptor { return file_routerrpc_router_proto_enumTypes[4].Descriptor() } func (HtlcEvent_EventType) Type() protoreflect.EnumType { return &file_routerrpc_router_proto_enumTypes[4] } func (x HtlcEvent_EventType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use HtlcEvent_EventType.Descriptor instead. func (HtlcEvent_EventType) EnumDescriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{24, 0} } type SendPaymentRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The identity pubkey of the payment recipient Dest []byte `protobuf:"bytes,1,opt,name=dest,proto3" json:"dest,omitempty"` // //Number of satoshis to send. // //The fields amt and amt_msat are mutually exclusive. Amt int64 `protobuf:"varint,2,opt,name=amt,proto3" json:"amt,omitempty"` // //Number of millisatoshis to send. // //The fields amt and amt_msat are mutually exclusive. AmtMsat int64 `protobuf:"varint,12,opt,name=amt_msat,json=amtMsat,proto3" json:"amt_msat,omitempty"` // The hash to use within the payment's HTLC PaymentHash []byte `protobuf:"bytes,3,opt,name=payment_hash,json=paymentHash,proto3" json:"payment_hash,omitempty"` // //The CLTV delta from the current height that should be used to set the //timelock for the final hop. FinalCltvDelta int32 `protobuf:"varint,4,opt,name=final_cltv_delta,json=finalCltvDelta,proto3" json:"final_cltv_delta,omitempty"` // An optional payment addr to be included within the last hop of the route. PaymentAddr []byte `protobuf:"bytes,20,opt,name=payment_addr,json=paymentAddr,proto3" json:"payment_addr,omitempty"` // //A bare-bones invoice for a payment within the Lightning Network. With the //details of the invoice, the sender has all the data necessary to send a //payment to the recipient. The amount in the payment request may be zero. In //that case it is required to set the amt field as well. If no payment request //is specified, the following fields are required: dest, amt and payment_hash. PaymentRequest string `protobuf:"bytes,5,opt,name=payment_request,json=paymentRequest,proto3" json:"payment_request,omitempty"` // //An upper limit on the amount of time we should spend when attempting to //fulfill the payment. This is expressed in seconds. If we cannot make a //successful payment within this time frame, an error will be returned. //This field must be non-zero. TimeoutSeconds int32 `protobuf:"varint,6,opt,name=timeout_seconds,json=timeoutSeconds,proto3" json:"timeout_seconds,omitempty"` // //The maximum number of satoshis that will be paid as a fee of the payment. //If this field is left to the default value of 0, only zero-fee routes will //be considered. This usually means single hop routes connecting directly to //the destination. To send the payment without a fee limit, use max int here. // //The fields fee_limit_sat and fee_limit_msat are mutually exclusive. FeeLimitSat int64 `protobuf:"varint,7,opt,name=fee_limit_sat,json=feeLimitSat,proto3" json:"fee_limit_sat,omitempty"` // //The maximum number of millisatoshis that will be paid as a fee of the //payment. If this field is left to the default value of 0, only zero-fee //routes will be considered. This usually means single hop routes connecting //directly to the destination. To send the payment without a fee limit, use //max int here. // //The fields fee_limit_sat and fee_limit_msat are mutually exclusive. FeeLimitMsat int64 `protobuf:"varint,13,opt,name=fee_limit_msat,json=feeLimitMsat,proto3" json:"fee_limit_msat,omitempty"` // //Deprecated, use outgoing_chan_ids. The channel id of the channel that must //be taken to the first hop. If zero, any channel may be used (unless //outgoing_chan_ids are set). // // Deprecated: Do not use. OutgoingChanId uint64 `protobuf:"varint,8,opt,name=outgoing_chan_id,json=outgoingChanId,proto3" json:"outgoing_chan_id,omitempty"` // //The channel ids of the channels are allowed for the first hop. If empty, //any channel may be used. OutgoingChanIds []uint64 `protobuf:"varint,19,rep,packed,name=outgoing_chan_ids,json=outgoingChanIds,proto3" json:"outgoing_chan_ids,omitempty"` // //The pubkey of the last hop of the route. If empty, any hop may be used. LastHopPubkey []byte `protobuf:"bytes,14,opt,name=last_hop_pubkey,json=lastHopPubkey,proto3" json:"last_hop_pubkey,omitempty"` // //An optional maximum total time lock for the route. This should not exceed //lnd's `--max-cltv-expiry` setting. If zero, then the value of //`--max-cltv-expiry` is enforced. CltvLimit int32 `protobuf:"varint,9,opt,name=cltv_limit,json=cltvLimit,proto3" json:"cltv_limit,omitempty"` // //Optional route hints to reach the destination through private channels. RouteHints []*lnrpc.RouteHint `protobuf:"bytes,10,rep,name=route_hints,json=routeHints,proto3" json:"route_hints,omitempty"` // //An optional field that can be used to pass an arbitrary set of TLV records //to a peer which understands the new records. This can be used to pass //application specific data during the payment attempt. Record types are //required to be in the custom range >= 65536. When using REST, the values //must be encoded as base64. DestCustomRecords map[uint64][]byte `protobuf:"bytes,11,rep,name=dest_custom_records,json=destCustomRecords,proto3" json:"dest_custom_records,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // If set, circular payments to self are permitted. AllowSelfPayment bool `protobuf:"varint,15,opt,name=allow_self_payment,json=allowSelfPayment,proto3" json:"allow_self_payment,omitempty"` // //Features assumed to be supported by the final node. All transitive feature //dependencies must also be set properly. For a given feature bit pair, either //optional or remote may be set, but not both. If this field is nil or empty, //the router will try to load destination features from the graph as a //fallback. DestFeatures []lnrpc.FeatureBit `protobuf:"varint,16,rep,packed,name=dest_features,json=destFeatures,proto3,enum=lnrpc.FeatureBit" json:"dest_features,omitempty"` // //The maximum number of partial payments that may be use to complete the full //amount. MaxParts uint32 `protobuf:"varint,17,opt,name=max_parts,json=maxParts,proto3" json:"max_parts,omitempty"` // //If set, only the final payment update is streamed back. Intermediate updates //that show which htlcs are still in flight are suppressed. NoInflightUpdates bool `protobuf:"varint,18,opt,name=no_inflight_updates,json=noInflightUpdates,proto3" json:"no_inflight_updates,omitempty"` // //The largest payment split that should be attempted when making a payment if //splitting is necessary. Setting this value will effectively cause lnd to //split more aggressively, vs only when it thinks it needs to. Note that this //value is in milli-satoshis. MaxShardSizeMsat uint64 `protobuf:"varint,21,opt,name=max_shard_size_msat,json=maxShardSizeMsat,proto3" json:"max_shard_size_msat,omitempty"` // //If set, an AMP-payment will be attempted. Amp bool `protobuf:"varint,22,opt,name=amp,proto3" json:"amp,omitempty"` } func (x *SendPaymentRequest) Reset() { *x = SendPaymentRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SendPaymentRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*SendPaymentRequest) ProtoMessage() {} func (x *SendPaymentRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SendPaymentRequest.ProtoReflect.Descriptor instead. func (*SendPaymentRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{0} } func (x *SendPaymentRequest) GetDest() []byte { if x != nil { return x.Dest } return nil } func (x *SendPaymentRequest) GetAmt() int64 { if x != nil { return x.Amt } return 0 } func (x *SendPaymentRequest) GetAmtMsat() int64 { if x != nil { return x.AmtMsat } return 0 } func (x *SendPaymentRequest) GetPaymentHash() []byte { if x != nil { return x.PaymentHash } return nil } func (x *SendPaymentRequest) GetFinalCltvDelta() int32 { if x != nil { return x.FinalCltvDelta } return 0 } func (x *SendPaymentRequest) GetPaymentAddr() []byte { if x != nil { return x.PaymentAddr } return nil } func (x *SendPaymentRequest) GetPaymentRequest() string { if x != nil { return x.PaymentRequest } return "" } func (x *SendPaymentRequest) GetTimeoutSeconds() int32 { if x != nil { return x.TimeoutSeconds } return 0 } func (x *SendPaymentRequest) GetFeeLimitSat() int64 { if x != nil { return x.FeeLimitSat } return 0 } func (x *SendPaymentRequest) GetFeeLimitMsat() int64 { if x != nil { return x.FeeLimitMsat } return 0 } // Deprecated: Do not use. func (x *SendPaymentRequest) GetOutgoingChanId() uint64 { if x != nil { return x.OutgoingChanId } return 0 } func (x *SendPaymentRequest) GetOutgoingChanIds() []uint64 { if x != nil { return x.OutgoingChanIds } return nil } func (x *SendPaymentRequest) GetLastHopPubkey() []byte { if x != nil { return x.LastHopPubkey } return nil } func (x *SendPaymentRequest) GetCltvLimit() int32 { if x != nil { return x.CltvLimit } return 0 } func (x *SendPaymentRequest) GetRouteHints() []*lnrpc.RouteHint { if x != nil { return x.RouteHints } return nil } func (x *SendPaymentRequest) GetDestCustomRecords() map[uint64][]byte { if x != nil { return x.DestCustomRecords } return nil } func (x *SendPaymentRequest) GetAllowSelfPayment() bool { if x != nil { return x.AllowSelfPayment } return false } func (x *SendPaymentRequest) GetDestFeatures() []lnrpc.FeatureBit { if x != nil { return x.DestFeatures } return nil } func (x *SendPaymentRequest) GetMaxParts() uint32 { if x != nil { return x.MaxParts } return 0 } func (x *SendPaymentRequest) GetNoInflightUpdates() bool { if x != nil { return x.NoInflightUpdates } return false } func (x *SendPaymentRequest) GetMaxShardSizeMsat() uint64 { if x != nil { return x.MaxShardSizeMsat } return 0 } func (x *SendPaymentRequest) GetAmp() bool { if x != nil { return x.Amp } return false } type TrackPaymentRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The hash of the payment to look up. PaymentHash []byte `protobuf:"bytes,1,opt,name=payment_hash,json=paymentHash,proto3" json:"payment_hash,omitempty"` // //If set, only the final payment update is streamed back. Intermediate updates //that show which htlcs are still in flight are suppressed. NoInflightUpdates bool `protobuf:"varint,2,opt,name=no_inflight_updates,json=noInflightUpdates,proto3" json:"no_inflight_updates,omitempty"` } func (x *TrackPaymentRequest) Reset() { *x = TrackPaymentRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *TrackPaymentRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*TrackPaymentRequest) ProtoMessage() {} func (x *TrackPaymentRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TrackPaymentRequest.ProtoReflect.Descriptor instead. func (*TrackPaymentRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{1} } func (x *TrackPaymentRequest) GetPaymentHash() []byte { if x != nil { return x.PaymentHash } return nil } func (x *TrackPaymentRequest) GetNoInflightUpdates() bool { if x != nil { return x.NoInflightUpdates } return false } type RouteFeeRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // //The destination once wishes to obtain a routing fee quote to. Dest []byte `protobuf:"bytes,1,opt,name=dest,proto3" json:"dest,omitempty"` // //The amount one wishes to send to the target destination. AmtSat int64 `protobuf:"varint,2,opt,name=amt_sat,json=amtSat,proto3" json:"amt_sat,omitempty"` } func (x *RouteFeeRequest) Reset() { *x = RouteFeeRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *RouteFeeRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*RouteFeeRequest) ProtoMessage() {} func (x *RouteFeeRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use RouteFeeRequest.ProtoReflect.Descriptor instead. func (*RouteFeeRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{2} } func (x *RouteFeeRequest) GetDest() []byte { if x != nil { return x.Dest } return nil } func (x *RouteFeeRequest) GetAmtSat() int64 { if x != nil { return x.AmtSat } return 0 } type RouteFeeResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // //A lower bound of the estimated fee to the target destination within the //network, expressed in milli-satoshis. RoutingFeeMsat int64 `protobuf:"varint,1,opt,name=routing_fee_msat,json=routingFeeMsat,proto3" json:"routing_fee_msat,omitempty"` // //An estimate of the worst case time delay that can occur. Note that callers //will still need to factor in the final CLTV delta of the last hop into this //value. TimeLockDelay int64 `protobuf:"varint,2,opt,name=time_lock_delay,json=timeLockDelay,proto3" json:"time_lock_delay,omitempty"` } func (x *RouteFeeResponse) Reset() { *x = RouteFeeResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *RouteFeeResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*RouteFeeResponse) ProtoMessage() {} func (x *RouteFeeResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use RouteFeeResponse.ProtoReflect.Descriptor instead. func (*RouteFeeResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{3} } func (x *RouteFeeResponse) GetRoutingFeeMsat() int64 { if x != nil { return x.RoutingFeeMsat } return 0 } func (x *RouteFeeResponse) GetTimeLockDelay() int64 { if x != nil { return x.TimeLockDelay } return 0 } type SendToRouteRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The payment hash to use for the HTLC. PaymentHash []byte `protobuf:"bytes,1,opt,name=payment_hash,json=paymentHash,proto3" json:"payment_hash,omitempty"` // Route that should be used to attempt to complete the payment. Route *lnrpc.Route `protobuf:"bytes,2,opt,name=route,proto3" json:"route,omitempty"` } func (x *SendToRouteRequest) Reset() { *x = SendToRouteRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SendToRouteRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*SendToRouteRequest) ProtoMessage() {} func (x *SendToRouteRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SendToRouteRequest.ProtoReflect.Descriptor instead. func (*SendToRouteRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{4} } func (x *SendToRouteRequest) GetPaymentHash() []byte { if x != nil { return x.PaymentHash } return nil } func (x *SendToRouteRequest) GetRoute() *lnrpc.Route { if x != nil { return x.Route } return nil } type SendToRouteResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The preimage obtained by making the payment. Preimage []byte `protobuf:"bytes,1,opt,name=preimage,proto3" json:"preimage,omitempty"` // The failure message in case the payment failed. Failure *lnrpc.Failure `protobuf:"bytes,2,opt,name=failure,proto3" json:"failure,omitempty"` } func (x *SendToRouteResponse) Reset() { *x = SendToRouteResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SendToRouteResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*SendToRouteResponse) ProtoMessage() {} func (x *SendToRouteResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SendToRouteResponse.ProtoReflect.Descriptor instead. func (*SendToRouteResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{5} } func (x *SendToRouteResponse) GetPreimage() []byte { if x != nil { return x.Preimage } return nil } func (x *SendToRouteResponse) GetFailure() *lnrpc.Failure { if x != nil { return x.Failure } return nil } type ResetMissionControlRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *ResetMissionControlRequest) Reset() { *x = ResetMissionControlRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ResetMissionControlRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*ResetMissionControlRequest) ProtoMessage() {} func (x *ResetMissionControlRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ResetMissionControlRequest.ProtoReflect.Descriptor instead. func (*ResetMissionControlRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{6} } type ResetMissionControlResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *ResetMissionControlResponse) Reset() { *x = ResetMissionControlResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ResetMissionControlResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*ResetMissionControlResponse) ProtoMessage() {} func (x *ResetMissionControlResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ResetMissionControlResponse.ProtoReflect.Descriptor instead. func (*ResetMissionControlResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{7} } type QueryMissionControlRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *QueryMissionControlRequest) Reset() { *x = QueryMissionControlRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *QueryMissionControlRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*QueryMissionControlRequest) ProtoMessage() {} func (x *QueryMissionControlRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use QueryMissionControlRequest.ProtoReflect.Descriptor instead. func (*QueryMissionControlRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{8} } // QueryMissionControlResponse contains mission control state. type QueryMissionControlResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Node pair-level mission control state. Pairs []*PairHistory `protobuf:"bytes,2,rep,name=pairs,proto3" json:"pairs,omitempty"` } func (x *QueryMissionControlResponse) Reset() { *x = QueryMissionControlResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *QueryMissionControlResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*QueryMissionControlResponse) ProtoMessage() {} func (x *QueryMissionControlResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use QueryMissionControlResponse.ProtoReflect.Descriptor instead. func (*QueryMissionControlResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{9} } func (x *QueryMissionControlResponse) GetPairs() []*PairHistory { if x != nil { return x.Pairs } return nil } type XImportMissionControlRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Node pair-level mission control state to be imported. Pairs []*PairHistory `protobuf:"bytes,1,rep,name=pairs,proto3" json:"pairs,omitempty"` } func (x *XImportMissionControlRequest) Reset() { *x = XImportMissionControlRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *XImportMissionControlRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*XImportMissionControlRequest) ProtoMessage() {} func (x *XImportMissionControlRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use XImportMissionControlRequest.ProtoReflect.Descriptor instead. func (*XImportMissionControlRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{10} } func (x *XImportMissionControlRequest) GetPairs() []*PairHistory { if x != nil { return x.Pairs } return nil } type XImportMissionControlResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *XImportMissionControlResponse) Reset() { *x = XImportMissionControlResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *XImportMissionControlResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*XImportMissionControlResponse) ProtoMessage() {} func (x *XImportMissionControlResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use XImportMissionControlResponse.ProtoReflect.Descriptor instead. func (*XImportMissionControlResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{11} } // PairHistory contains the mission control state for a particular node pair. type PairHistory struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The source node pubkey of the pair. NodeFrom []byte `protobuf:"bytes,1,opt,name=node_from,json=nodeFrom,proto3" json:"node_from,omitempty"` // The destination node pubkey of the pair. NodeTo []byte `protobuf:"bytes,2,opt,name=node_to,json=nodeTo,proto3" json:"node_to,omitempty"` History *PairData `protobuf:"bytes,7,opt,name=history,proto3" json:"history,omitempty"` } func (x *PairHistory) Reset() { *x = PairHistory{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PairHistory) String() string { return protoimpl.X.MessageStringOf(x) } func (*PairHistory) ProtoMessage() {} func (x *PairHistory) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PairHistory.ProtoReflect.Descriptor instead. func (*PairHistory) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{12} } func (x *PairHistory) GetNodeFrom() []byte { if x != nil { return x.NodeFrom } return nil } func (x *PairHistory) GetNodeTo() []byte { if x != nil { return x.NodeTo } return nil } func (x *PairHistory) GetHistory() *PairData { if x != nil { return x.History } return nil } type PairData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Time of last failure. FailTime int64 `protobuf:"varint,1,opt,name=fail_time,json=failTime,proto3" json:"fail_time,omitempty"` // //Lowest amount that failed to forward rounded to whole sats. This may be //set to zero if the failure is independent of amount. FailAmtSat int64 `protobuf:"varint,2,opt,name=fail_amt_sat,json=failAmtSat,proto3" json:"fail_amt_sat,omitempty"` // //Lowest amount that failed to forward in millisats. This may be //set to zero if the failure is independent of amount. FailAmtMsat int64 `protobuf:"varint,4,opt,name=fail_amt_msat,json=failAmtMsat,proto3" json:"fail_amt_msat,omitempty"` // Time of last success. SuccessTime int64 `protobuf:"varint,5,opt,name=success_time,json=successTime,proto3" json:"success_time,omitempty"` // Highest amount that we could successfully forward rounded to whole sats. SuccessAmtSat int64 `protobuf:"varint,6,opt,name=success_amt_sat,json=successAmtSat,proto3" json:"success_amt_sat,omitempty"` // Highest amount that we could successfully forward in millisats. SuccessAmtMsat int64 `protobuf:"varint,7,opt,name=success_amt_msat,json=successAmtMsat,proto3" json:"success_amt_msat,omitempty"` } func (x *PairData) Reset() { *x = PairData{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PairData) String() string { return protoimpl.X.MessageStringOf(x) } func (*PairData) ProtoMessage() {} func (x *PairData) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PairData.ProtoReflect.Descriptor instead. func (*PairData) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{13} } func (x *PairData) GetFailTime() int64 { if x != nil { return x.FailTime } return 0 } func (x *PairData) GetFailAmtSat() int64 { if x != nil { return x.FailAmtSat } return 0 } func (x *PairData) GetFailAmtMsat() int64 { if x != nil { return x.FailAmtMsat } return 0 } func (x *PairData) GetSuccessTime() int64 { if x != nil { return x.SuccessTime } return 0 } func (x *PairData) GetSuccessAmtSat() int64 { if x != nil { return x.SuccessAmtSat } return 0 } func (x *PairData) GetSuccessAmtMsat() int64 { if x != nil { return x.SuccessAmtMsat } return 0 } type GetMissionControlConfigRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *GetMissionControlConfigRequest) Reset() { *x = GetMissionControlConfigRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GetMissionControlConfigRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*GetMissionControlConfigRequest) ProtoMessage() {} func (x *GetMissionControlConfigRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use GetMissionControlConfigRequest.ProtoReflect.Descriptor instead. func (*GetMissionControlConfigRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{14} } type GetMissionControlConfigResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // //Mission control's currently active config. Config *MissionControlConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` } func (x *GetMissionControlConfigResponse) Reset() { *x = GetMissionControlConfigResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GetMissionControlConfigResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*GetMissionControlConfigResponse) ProtoMessage() {} func (x *GetMissionControlConfigResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use GetMissionControlConfigResponse.ProtoReflect.Descriptor instead. func (*GetMissionControlConfigResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{15} } func (x *GetMissionControlConfigResponse) GetConfig() *MissionControlConfig { if x != nil { return x.Config } return nil } type SetMissionControlConfigRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // //The config to set for mission control. Note that all values *must* be set, //because the full config will be applied. Config *MissionControlConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` } func (x *SetMissionControlConfigRequest) Reset() { *x = SetMissionControlConfigRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SetMissionControlConfigRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*SetMissionControlConfigRequest) ProtoMessage() {} func (x *SetMissionControlConfigRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SetMissionControlConfigRequest.ProtoReflect.Descriptor instead. func (*SetMissionControlConfigRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{16} } func (x *SetMissionControlConfigRequest) GetConfig() *MissionControlConfig { if x != nil { return x.Config } return nil } type SetMissionControlConfigResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *SetMissionControlConfigResponse) Reset() { *x = SetMissionControlConfigResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SetMissionControlConfigResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*SetMissionControlConfigResponse) ProtoMessage() {} func (x *SetMissionControlConfigResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SetMissionControlConfigResponse.ProtoReflect.Descriptor instead. func (*SetMissionControlConfigResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{17} } type MissionControlConfig struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // //The amount of time mission control will take to restore a penalized node //or channel back to 50% success probability, expressed in seconds. Setting //this value to a higher value will penalize failures for longer, making //mission control less likely to route through nodes and channels that we //have previously recorded failures for. HalfLifeSeconds uint64 `protobuf:"varint,1,opt,name=half_life_seconds,json=halfLifeSeconds,proto3" json:"half_life_seconds,omitempty"` // //The probability of success mission control should assign to hop in a route //where it has no other information available. Higher values will make mission //control more willing to try hops that we have no information about, lower //values will discourage trying these hops. HopProbability float32 `protobuf:"fixed32,2,opt,name=hop_probability,json=hopProbability,proto3" json:"hop_probability,omitempty"` // //The importance that mission control should place on historical results, //expressed as a value in [0;1]. Setting this value to 1 will ignore all //historical payments and just use the hop probability to assess the //probability of success for each hop. A zero value ignores hop probability //completely and relies entirely on historical results, unless none are //available. Weight float32 `protobuf:"fixed32,3,opt,name=weight,proto3" json:"weight,omitempty"` // //The maximum number of payment results that mission control will store. MaximumPaymentResults uint32 `protobuf:"varint,4,opt,name=maximum_payment_results,json=maximumPaymentResults,proto3" json:"maximum_payment_results,omitempty"` // //The minimum time that must have passed since the previously recorded failure //before we raise the failure amount. MinimumFailureRelaxInterval uint64 `protobuf:"varint,5,opt,name=minimum_failure_relax_interval,json=minimumFailureRelaxInterval,proto3" json:"minimum_failure_relax_interval,omitempty"` } func (x *MissionControlConfig) Reset() { *x = MissionControlConfig{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MissionControlConfig) String() string { return protoimpl.X.MessageStringOf(x) } func (*MissionControlConfig) ProtoMessage() {} func (x *MissionControlConfig) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use MissionControlConfig.ProtoReflect.Descriptor instead. func (*MissionControlConfig) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{18} } func (x *MissionControlConfig) GetHalfLifeSeconds() uint64 { if x != nil { return x.HalfLifeSeconds } return 0 } func (x *MissionControlConfig) GetHopProbability() float32 { if x != nil { return x.HopProbability } return 0 } func (x *MissionControlConfig) GetWeight() float32 { if x != nil { return x.Weight } return 0 } func (x *MissionControlConfig) GetMaximumPaymentResults() uint32 { if x != nil { return x.MaximumPaymentResults } return 0 } func (x *MissionControlConfig) GetMinimumFailureRelaxInterval() uint64 { if x != nil { return x.MinimumFailureRelaxInterval } return 0 } type QueryProbabilityRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The source node pubkey of the pair. FromNode []byte `protobuf:"bytes,1,opt,name=from_node,json=fromNode,proto3" json:"from_node,omitempty"` // The destination node pubkey of the pair. ToNode []byte `protobuf:"bytes,2,opt,name=to_node,json=toNode,proto3" json:"to_node,omitempty"` // The amount for which to calculate a probability. AmtMsat int64 `protobuf:"varint,3,opt,name=amt_msat,json=amtMsat,proto3" json:"amt_msat,omitempty"` } func (x *QueryProbabilityRequest) Reset() { *x = QueryProbabilityRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *QueryProbabilityRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*QueryProbabilityRequest) ProtoMessage() {} func (x *QueryProbabilityRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use QueryProbabilityRequest.ProtoReflect.Descriptor instead. func (*QueryProbabilityRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{19} } func (x *QueryProbabilityRequest) GetFromNode() []byte { if x != nil { return x.FromNode } return nil } func (x *QueryProbabilityRequest) GetToNode() []byte { if x != nil { return x.ToNode } return nil } func (x *QueryProbabilityRequest) GetAmtMsat() int64 { if x != nil { return x.AmtMsat } return 0 } type QueryProbabilityResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The success probability for the requested pair. Probability float64 `protobuf:"fixed64,1,opt,name=probability,proto3" json:"probability,omitempty"` // The historical data for the requested pair. History *PairData `protobuf:"bytes,2,opt,name=history,proto3" json:"history,omitempty"` } func (x *QueryProbabilityResponse) Reset() { *x = QueryProbabilityResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *QueryProbabilityResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*QueryProbabilityResponse) ProtoMessage() {} func (x *QueryProbabilityResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use QueryProbabilityResponse.ProtoReflect.Descriptor instead. func (*QueryProbabilityResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{20} } func (x *QueryProbabilityResponse) GetProbability() float64 { if x != nil { return x.Probability } return 0 } func (x *QueryProbabilityResponse) GetHistory() *PairData { if x != nil { return x.History } return nil } type BuildRouteRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // //The amount to send expressed in msat. If set to zero, the minimum routable //amount is used. AmtMsat int64 `protobuf:"varint,1,opt,name=amt_msat,json=amtMsat,proto3" json:"amt_msat,omitempty"` // //CLTV delta from the current height that should be used for the timelock //of the final hop FinalCltvDelta int32 `protobuf:"varint,2,opt,name=final_cltv_delta,json=finalCltvDelta,proto3" json:"final_cltv_delta,omitempty"` // //The channel id of the channel that must be taken to the first hop. If zero, //any channel may be used. OutgoingChanId uint64 `protobuf:"varint,3,opt,name=outgoing_chan_id,json=outgoingChanId,proto3" json:"outgoing_chan_id,omitempty"` // //A list of hops that defines the route. This does not include the source hop //pubkey. HopPubkeys [][]byte `protobuf:"bytes,4,rep,name=hop_pubkeys,json=hopPubkeys,proto3" json:"hop_pubkeys,omitempty"` // An optional payment addr to be included within the last hop of the route. PaymentAddr []byte `protobuf:"bytes,5,opt,name=payment_addr,json=paymentAddr,proto3" json:"payment_addr,omitempty"` } func (x *BuildRouteRequest) Reset() { *x = BuildRouteRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *BuildRouteRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*BuildRouteRequest) ProtoMessage() {} func (x *BuildRouteRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use BuildRouteRequest.ProtoReflect.Descriptor instead. func (*BuildRouteRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{21} } func (x *BuildRouteRequest) GetAmtMsat() int64 { if x != nil { return x.AmtMsat } return 0 } func (x *BuildRouteRequest) GetFinalCltvDelta() int32 { if x != nil { return x.FinalCltvDelta } return 0 } func (x *BuildRouteRequest) GetOutgoingChanId() uint64 { if x != nil { return x.OutgoingChanId } return 0 } func (x *BuildRouteRequest) GetHopPubkeys() [][]byte { if x != nil { return x.HopPubkeys } return nil } func (x *BuildRouteRequest) GetPaymentAddr() []byte { if x != nil { return x.PaymentAddr } return nil } type BuildRouteResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // //Fully specified route that can be used to execute the payment. Route *lnrpc.Route `protobuf:"bytes,1,opt,name=route,proto3" json:"route,omitempty"` } func (x *BuildRouteResponse) Reset() { *x = BuildRouteResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *BuildRouteResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*BuildRouteResponse) ProtoMessage() {} func (x *BuildRouteResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use BuildRouteResponse.ProtoReflect.Descriptor instead. func (*BuildRouteResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{22} } func (x *BuildRouteResponse) GetRoute() *lnrpc.Route { if x != nil { return x.Route } return nil } type SubscribeHtlcEventsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *SubscribeHtlcEventsRequest) Reset() { *x = SubscribeHtlcEventsRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SubscribeHtlcEventsRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*SubscribeHtlcEventsRequest) ProtoMessage() {} func (x *SubscribeHtlcEventsRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SubscribeHtlcEventsRequest.ProtoReflect.Descriptor instead. func (*SubscribeHtlcEventsRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{23} } // //HtlcEvent contains the htlc event that was processed. These are served on a //best-effort basis; events are not persisted, delivery is not guaranteed //(in the event of a crash in the switch, forward events may be lost) and //some events may be replayed upon restart. Events consumed from this package //should be de-duplicated by the htlc's unique combination of incoming and //outgoing channel id and htlc id. [EXPERIMENTAL] type HtlcEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // //The short channel id that the incoming htlc arrived at our node on. This //value is zero for sends. IncomingChannelId uint64 `protobuf:"varint,1,opt,name=incoming_channel_id,json=incomingChannelId,proto3" json:"incoming_channel_id,omitempty"` // //The short channel id that the outgoing htlc left our node on. This value //is zero for receives. OutgoingChannelId uint64 `protobuf:"varint,2,opt,name=outgoing_channel_id,json=outgoingChannelId,proto3" json:"outgoing_channel_id,omitempty"` // //Incoming id is the index of the incoming htlc in the incoming channel. //This value is zero for sends. IncomingHtlcId uint64 `protobuf:"varint,3,opt,name=incoming_htlc_id,json=incomingHtlcId,proto3" json:"incoming_htlc_id,omitempty"` // //Outgoing id is the index of the outgoing htlc in the outgoing channel. //This value is zero for receives. OutgoingHtlcId uint64 `protobuf:"varint,4,opt,name=outgoing_htlc_id,json=outgoingHtlcId,proto3" json:"outgoing_htlc_id,omitempty"` // //The time in unix nanoseconds that the event occurred. TimestampNs uint64 `protobuf:"varint,5,opt,name=timestamp_ns,json=timestampNs,proto3" json:"timestamp_ns,omitempty"` // //The event type indicates whether the htlc was part of a send, receive or //forward. EventType HtlcEvent_EventType `protobuf:"varint,6,opt,name=event_type,json=eventType,proto3,enum=routerrpc.HtlcEvent_EventType" json:"event_type,omitempty"` // Types that are assignable to Event: // *HtlcEvent_ForwardEvent // *HtlcEvent_ForwardFailEvent // *HtlcEvent_SettleEvent // *HtlcEvent_LinkFailEvent Event isHtlcEvent_Event `protobuf_oneof:"event"` } func (x *HtlcEvent) Reset() { *x = HtlcEvent{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *HtlcEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*HtlcEvent) ProtoMessage() {} func (x *HtlcEvent) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use HtlcEvent.ProtoReflect.Descriptor instead. func (*HtlcEvent) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{24} } func (x *HtlcEvent) GetIncomingChannelId() uint64 { if x != nil { return x.IncomingChannelId } return 0 } func (x *HtlcEvent) GetOutgoingChannelId() uint64 { if x != nil { return x.OutgoingChannelId } return 0 } func (x *HtlcEvent) GetIncomingHtlcId() uint64 { if x != nil { return x.IncomingHtlcId } return 0 } func (x *HtlcEvent) GetOutgoingHtlcId() uint64 { if x != nil { return x.OutgoingHtlcId } return 0 } func (x *HtlcEvent) GetTimestampNs() uint64 { if x != nil { return x.TimestampNs } return 0 } func (x *HtlcEvent) GetEventType() HtlcEvent_EventType { if x != nil { return x.EventType } return HtlcEvent_UNKNOWN } func (m *HtlcEvent) GetEvent() isHtlcEvent_Event { if m != nil { return m.Event } return nil } func (x *HtlcEvent) GetForwardEvent() *ForwardEvent { if x, ok := x.GetEvent().(*HtlcEvent_ForwardEvent); ok { return x.ForwardEvent } return nil } func (x *HtlcEvent) GetForwardFailEvent() *ForwardFailEvent { if x, ok := x.GetEvent().(*HtlcEvent_ForwardFailEvent); ok { return x.ForwardFailEvent } return nil } func (x *HtlcEvent) GetSettleEvent() *SettleEvent { if x, ok := x.GetEvent().(*HtlcEvent_SettleEvent); ok { return x.SettleEvent } return nil } func (x *HtlcEvent) GetLinkFailEvent() *LinkFailEvent { if x, ok := x.GetEvent().(*HtlcEvent_LinkFailEvent); ok { return x.LinkFailEvent } return nil } type isHtlcEvent_Event interface { isHtlcEvent_Event() } type HtlcEvent_ForwardEvent struct { ForwardEvent *ForwardEvent `protobuf:"bytes,7,opt,name=forward_event,json=forwardEvent,proto3,oneof"` } type HtlcEvent_ForwardFailEvent struct { ForwardFailEvent *ForwardFailEvent `protobuf:"bytes,8,opt,name=forward_fail_event,json=forwardFailEvent,proto3,oneof"` } type HtlcEvent_SettleEvent struct { SettleEvent *SettleEvent `protobuf:"bytes,9,opt,name=settle_event,json=settleEvent,proto3,oneof"` } type HtlcEvent_LinkFailEvent struct { LinkFailEvent *LinkFailEvent `protobuf:"bytes,10,opt,name=link_fail_event,json=linkFailEvent,proto3,oneof"` } func (*HtlcEvent_ForwardEvent) isHtlcEvent_Event() {} func (*HtlcEvent_ForwardFailEvent) isHtlcEvent_Event() {} func (*HtlcEvent_SettleEvent) isHtlcEvent_Event() {} func (*HtlcEvent_LinkFailEvent) isHtlcEvent_Event() {} type HtlcInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The timelock on the incoming htlc. IncomingTimelock uint32 `protobuf:"varint,1,opt,name=incoming_timelock,json=incomingTimelock,proto3" json:"incoming_timelock,omitempty"` // The timelock on the outgoing htlc. OutgoingTimelock uint32 `protobuf:"varint,2,opt,name=outgoing_timelock,json=outgoingTimelock,proto3" json:"outgoing_timelock,omitempty"` // The amount of the incoming htlc. IncomingAmtMsat uint64 `protobuf:"varint,3,opt,name=incoming_amt_msat,json=incomingAmtMsat,proto3" json:"incoming_amt_msat,omitempty"` // The amount of the outgoing htlc. OutgoingAmtMsat uint64 `protobuf:"varint,4,opt,name=outgoing_amt_msat,json=outgoingAmtMsat,proto3" json:"outgoing_amt_msat,omitempty"` } func (x *HtlcInfo) Reset() { *x = HtlcInfo{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *HtlcInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*HtlcInfo) ProtoMessage() {} func (x *HtlcInfo) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use HtlcInfo.ProtoReflect.Descriptor instead. func (*HtlcInfo) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{25} } func (x *HtlcInfo) GetIncomingTimelock() uint32 { if x != nil { return x.IncomingTimelock } return 0 } func (x *HtlcInfo) GetOutgoingTimelock() uint32 { if x != nil { return x.OutgoingTimelock } return 0 } func (x *HtlcInfo) GetIncomingAmtMsat() uint64 { if x != nil { return x.IncomingAmtMsat } return 0 } func (x *HtlcInfo) GetOutgoingAmtMsat() uint64 { if x != nil { return x.OutgoingAmtMsat } return 0 } type ForwardEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Info contains details about the htlc that was forwarded. Info *HtlcInfo `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` } func (x *ForwardEvent) Reset() { *x = ForwardEvent{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ForwardEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*ForwardEvent) ProtoMessage() {} func (x *ForwardEvent) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ForwardEvent.ProtoReflect.Descriptor instead. func (*ForwardEvent) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{26} } func (x *ForwardEvent) GetInfo() *HtlcInfo { if x != nil { return x.Info } return nil } type ForwardFailEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *ForwardFailEvent) Reset() { *x = ForwardFailEvent{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ForwardFailEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*ForwardFailEvent) ProtoMessage() {} func (x *ForwardFailEvent) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ForwardFailEvent.ProtoReflect.Descriptor instead. func (*ForwardFailEvent) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{27} } type SettleEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The revealed preimage. Preimage []byte `protobuf:"bytes,1,opt,name=preimage,proto3" json:"preimage,omitempty"` } func (x *SettleEvent) Reset() { *x = SettleEvent{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SettleEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*SettleEvent) ProtoMessage() {} func (x *SettleEvent) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SettleEvent.ProtoReflect.Descriptor instead. func (*SettleEvent) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{28} } func (x *SettleEvent) GetPreimage() []byte { if x != nil { return x.Preimage } return nil } type LinkFailEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Info contains details about the htlc that we failed. Info *HtlcInfo `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` // FailureCode is the BOLT error code for the failure. WireFailure lnrpc.Failure_FailureCode `protobuf:"varint,2,opt,name=wire_failure,json=wireFailure,proto3,enum=lnrpc.Failure_FailureCode" json:"wire_failure,omitempty"` // //FailureDetail provides additional information about the reason for the //failure. This detail enriches the information provided by the wire message //and may be 'no detail' if the wire message requires no additional metadata. FailureDetail FailureDetail `protobuf:"varint,3,opt,name=failure_detail,json=failureDetail,proto3,enum=routerrpc.FailureDetail" json:"failure_detail,omitempty"` // A string representation of the link failure. FailureString string `protobuf:"bytes,4,opt,name=failure_string,json=failureString,proto3" json:"failure_string,omitempty"` } func (x *LinkFailEvent) Reset() { *x = LinkFailEvent{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LinkFailEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*LinkFailEvent) ProtoMessage() {} func (x *LinkFailEvent) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LinkFailEvent.ProtoReflect.Descriptor instead. func (*LinkFailEvent) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{29} } func (x *LinkFailEvent) GetInfo() *HtlcInfo { if x != nil { return x.Info } return nil } func (x *LinkFailEvent) GetWireFailure() lnrpc.Failure_FailureCode { if x != nil { return x.WireFailure } return lnrpc.Failure_RESERVED } func (x *LinkFailEvent) GetFailureDetail() FailureDetail { if x != nil { return x.FailureDetail } return FailureDetail_UNKNOWN } func (x *LinkFailEvent) GetFailureString() string { if x != nil { return x.FailureString } return "" } type PaymentStatus struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Current state the payment is in. State PaymentState `protobuf:"varint,1,opt,name=state,proto3,enum=routerrpc.PaymentState" json:"state,omitempty"` // //The pre-image of the payment when state is SUCCEEDED. Preimage []byte `protobuf:"bytes,2,opt,name=preimage,proto3" json:"preimage,omitempty"` // //The HTLCs made in attempt to settle the payment [EXPERIMENTAL]. Htlcs []*lnrpc.HTLCAttempt `protobuf:"bytes,4,rep,name=htlcs,proto3" json:"htlcs,omitempty"` } func (x *PaymentStatus) Reset() { *x = PaymentStatus{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PaymentStatus) String() string { return protoimpl.X.MessageStringOf(x) } func (*PaymentStatus) ProtoMessage() {} func (x *PaymentStatus) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PaymentStatus.ProtoReflect.Descriptor instead. func (*PaymentStatus) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{30} } func (x *PaymentStatus) GetState() PaymentState { if x != nil { return x.State } return PaymentState_IN_FLIGHT } func (x *PaymentStatus) GetPreimage() []byte { if x != nil { return x.Preimage } return nil } func (x *PaymentStatus) GetHtlcs() []*lnrpc.HTLCAttempt { if x != nil { return x.Htlcs } return nil } type CircuitKey struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields /// The id of the channel that the is part of this circuit. ChanId uint64 `protobuf:"varint,1,opt,name=chan_id,json=chanId,proto3" json:"chan_id,omitempty"` /// The index of the incoming htlc in the incoming channel. HtlcId uint64 `protobuf:"varint,2,opt,name=htlc_id,json=htlcId,proto3" json:"htlc_id,omitempty"` } func (x *CircuitKey) Reset() { *x = CircuitKey{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *CircuitKey) String() string { return protoimpl.X.MessageStringOf(x) } func (*CircuitKey) ProtoMessage() {} func (x *CircuitKey) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use CircuitKey.ProtoReflect.Descriptor instead. func (*CircuitKey) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{31} } func (x *CircuitKey) GetChanId() uint64 { if x != nil { return x.ChanId } return 0 } func (x *CircuitKey) GetHtlcId() uint64 { if x != nil { return x.HtlcId } return 0 } type ForwardHtlcInterceptRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // //The key of this forwarded htlc. It defines the incoming channel id and //the index in this channel. IncomingCircuitKey *CircuitKey `protobuf:"bytes,1,opt,name=incoming_circuit_key,json=incomingCircuitKey,proto3" json:"incoming_circuit_key,omitempty"` // The incoming htlc amount. IncomingAmountMsat uint64 `protobuf:"varint,5,opt,name=incoming_amount_msat,json=incomingAmountMsat,proto3" json:"incoming_amount_msat,omitempty"` // The incoming htlc expiry. IncomingExpiry uint32 `protobuf:"varint,6,opt,name=incoming_expiry,json=incomingExpiry,proto3" json:"incoming_expiry,omitempty"` // //The htlc payment hash. This value is not guaranteed to be unique per //request. PaymentHash []byte `protobuf:"bytes,2,opt,name=payment_hash,json=paymentHash,proto3" json:"payment_hash,omitempty"` // The requested outgoing channel id for this forwarded htlc. Because of // non-strict forwarding, this isn't necessarily the channel over which the // packet will be forwarded eventually. A different channel to the same peer // may be selected as well. OutgoingRequestedChanId uint64 `protobuf:"varint,7,opt,name=outgoing_requested_chan_id,json=outgoingRequestedChanId,proto3" json:"outgoing_requested_chan_id,omitempty"` // The outgoing htlc amount. OutgoingAmountMsat uint64 `protobuf:"varint,3,opt,name=outgoing_amount_msat,json=outgoingAmountMsat,proto3" json:"outgoing_amount_msat,omitempty"` // The outgoing htlc expiry. OutgoingExpiry uint32 `protobuf:"varint,4,opt,name=outgoing_expiry,json=outgoingExpiry,proto3" json:"outgoing_expiry,omitempty"` // Any custom records that were present in the payload. CustomRecords map[uint64][]byte `protobuf:"bytes,8,rep,name=custom_records,json=customRecords,proto3" json:"custom_records,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // The onion blob for the next hop OnionBlob []byte `protobuf:"bytes,9,opt,name=onion_blob,json=onionBlob,proto3" json:"onion_blob,omitempty"` } func (x *ForwardHtlcInterceptRequest) Reset() { *x = ForwardHtlcInterceptRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ForwardHtlcInterceptRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*ForwardHtlcInterceptRequest) ProtoMessage() {} func (x *ForwardHtlcInterceptRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ForwardHtlcInterceptRequest.ProtoReflect.Descriptor instead. func (*ForwardHtlcInterceptRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{32} } func (x *ForwardHtlcInterceptRequest) GetIncomingCircuitKey() *CircuitKey { if x != nil { return x.IncomingCircuitKey } return nil } func (x *ForwardHtlcInterceptRequest) GetIncomingAmountMsat() uint64 { if x != nil { return x.IncomingAmountMsat } return 0 } func (x *ForwardHtlcInterceptRequest) GetIncomingExpiry() uint32 { if x != nil { return x.IncomingExpiry } return 0 } func (x *ForwardHtlcInterceptRequest) GetPaymentHash() []byte { if x != nil { return x.PaymentHash } return nil } func (x *ForwardHtlcInterceptRequest) GetOutgoingRequestedChanId() uint64 { if x != nil { return x.OutgoingRequestedChanId } return 0 } func (x *ForwardHtlcInterceptRequest) GetOutgoingAmountMsat() uint64 { if x != nil { return x.OutgoingAmountMsat } return 0 } func (x *ForwardHtlcInterceptRequest) GetOutgoingExpiry() uint32 { if x != nil { return x.OutgoingExpiry } return 0 } func (x *ForwardHtlcInterceptRequest) GetCustomRecords() map[uint64][]byte { if x != nil { return x.CustomRecords } return nil } func (x *ForwardHtlcInterceptRequest) GetOnionBlob() []byte { if x != nil { return x.OnionBlob } return nil } //* //ForwardHtlcInterceptResponse enables the caller to resolve a previously hold //forward. The caller can choose either to: //- `Resume`: Execute the default behavior (usually forward). //- `Reject`: Fail the htlc backwards. //- `Settle`: Settle this htlc with a given preimage. type ForwardHtlcInterceptResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields //* //The key of this forwarded htlc. It defines the incoming channel id and //the index in this channel. IncomingCircuitKey *CircuitKey `protobuf:"bytes,1,opt,name=incoming_circuit_key,json=incomingCircuitKey,proto3" json:"incoming_circuit_key,omitempty"` // The resolve action for this intercepted htlc. Action ResolveHoldForwardAction `protobuf:"varint,2,opt,name=action,proto3,enum=routerrpc.ResolveHoldForwardAction" json:"action,omitempty"` // The preimage in case the resolve action is Settle. Preimage []byte `protobuf:"bytes,3,opt,name=preimage,proto3" json:"preimage,omitempty"` } func (x *ForwardHtlcInterceptResponse) Reset() { *x = ForwardHtlcInterceptResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ForwardHtlcInterceptResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*ForwardHtlcInterceptResponse) ProtoMessage() {} func (x *ForwardHtlcInterceptResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ForwardHtlcInterceptResponse.ProtoReflect.Descriptor instead. func (*ForwardHtlcInterceptResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{33} } func (x *ForwardHtlcInterceptResponse) GetIncomingCircuitKey() *CircuitKey { if x != nil { return x.IncomingCircuitKey } return nil } func (x *ForwardHtlcInterceptResponse) GetAction() ResolveHoldForwardAction { if x != nil { return x.Action } return ResolveHoldForwardAction_SETTLE } func (x *ForwardHtlcInterceptResponse) GetPreimage() []byte { if x != nil { return x.Preimage } return nil } type UpdateChanStatusRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields ChanPoint *lnrpc.ChannelPoint `protobuf:"bytes,1,opt,name=chan_point,json=chanPoint,proto3" json:"chan_point,omitempty"` Action ChanStatusAction `protobuf:"varint,2,opt,name=action,proto3,enum=routerrpc.ChanStatusAction" json:"action,omitempty"` } func (x *UpdateChanStatusRequest) Reset() { *x = UpdateChanStatusRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UpdateChanStatusRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*UpdateChanStatusRequest) ProtoMessage() {} func (x *UpdateChanStatusRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UpdateChanStatusRequest.ProtoReflect.Descriptor instead. func (*UpdateChanStatusRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{34} } func (x *UpdateChanStatusRequest) GetChanPoint() *lnrpc.ChannelPoint { if x != nil { return x.ChanPoint } return nil } func (x *UpdateChanStatusRequest) GetAction() ChanStatusAction { if x != nil { return x.Action } return ChanStatusAction_ENABLE } type UpdateChanStatusResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *UpdateChanStatusResponse) Reset() { *x = UpdateChanStatusResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UpdateChanStatusResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*UpdateChanStatusResponse) ProtoMessage() {} func (x *UpdateChanStatusResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UpdateChanStatusResponse.ProtoReflect.Descriptor instead. func (*UpdateChanStatusResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{35} } var File_routerrpc_router_proto protoreflect.FileDescriptor var file_routerrpc_router_proto_rawDesc = []byte{ 0x0a, 0x16, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x1a, 0x09, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd7, 0x07, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6d, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x61, 0x6d, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6d, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x61, 0x6d, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x74, 0x76, 0x5f, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x43, 0x6c, 0x74, 0x76, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x73, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x66, 0x65, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x53, 0x61, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x66, 0x65, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x66, 0x65, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x2e, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x42, 0x04, 0x18, 0x01, 0x30, 0x01, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0f, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x6f, 0x70, 0x5f, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x48, 0x6f, 0x70, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x74, 0x76, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x6c, 0x74, 0x76, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x31, 0x0a, 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x68, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x69, 0x6e, 0x74, 0x52, 0x0a, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x64, 0x0a, 0x13, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x64, 0x65, 0x73, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x6c, 0x66, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x0d, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x69, 0x74, 0x52, 0x0c, 0x64, 0x65, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6e, 0x6f, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6e, 0x6f, 0x49, 0x6e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x6d, 0x61, 0x78, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6d, 0x70, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6d, 0x70, 0x1a, 0x44, 0x0a, 0x16, 0x44, 0x65, 0x73, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x68, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2e, 0x0a, 0x13, 0x6e, 0x6f, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6e, 0x6f, 0x49, 0x6e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x22, 0x3e, 0x0a, 0x0f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x46, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x6d, 0x74, 0x5f, 0x73, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x74, 0x53, 0x61, 0x74, 0x22, 0x64, 0x0a, 0x10, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x46, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x46, 0x65, 0x65, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x22, 0x5b, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x22, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0x5b, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x72, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x07, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x07, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x52, 0x65, 0x73, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x1d, 0x0a, 0x1b, 0x52, 0x65, 0x73, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x51, 0x0a, 0x1b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x4c, 0x0a, 0x1c, 0x58, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x58, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0b, 0x50, 0x61, 0x69, 0x72, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x54, 0x6f, 0x12, 0x2d, 0x0a, 0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0xe8, 0x01, 0x0a, 0x08, 0x50, 0x61, 0x69, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x6d, 0x74, 0x5f, 0x73, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x41, 0x6d, 0x74, 0x53, 0x61, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x6d, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x41, 0x6d, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x61, 0x6d, 0x74, 0x5f, 0x73, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x41, 0x6d, 0x74, 0x53, 0x61, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x61, 0x6d, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x41, 0x6d, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x20, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5a, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x59, 0x0a, 0x1e, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x21, 0x0a, 0x1f, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x80, 0x02, 0x0a, 0x14, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x11, 0x68, 0x61, 0x6c, 0x66, 0x5f, 0x6c, 0x69, 0x66, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x68, 0x61, 0x6c, 0x66, 0x4c, 0x69, 0x66, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x68, 0x6f, 0x70, 0x5f, 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x68, 0x6f, 0x70, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x1e, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x78, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1b, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0x6a, 0x0a, 0x17, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6f, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x6f, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6d, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x61, 0x6d, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x22, 0x6b, 0x0a, 0x18, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x2d, 0x0a, 0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x22, 0xca, 0x01, 0x0a, 0x11, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6d, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x61, 0x6d, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x74, 0x76, 0x5f, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x43, 0x6c, 0x74, 0x76, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x42, 0x02, 0x30, 0x01, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x6f, 0x70, 0x5f, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, 0x68, 0x6f, 0x70, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x22, 0x38, 0x0a, 0x12, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x48, 0x74, 0x6c, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xf6, 0x04, 0x0a, 0x09, 0x48, 0x74, 0x6c, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x74, 0x6c, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x74, 0x6c, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x73, 0x12, 0x3d, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x74, 0x6c, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x4b, 0x0a, 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x0c, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x42, 0x0a, 0x0f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x46, 0x61, 0x69, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x6c, 0x69, 0x6e, 0x6b, 0x46, 0x61, 0x69, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x3c, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x10, 0x03, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xbc, 0x01, 0x0a, 0x08, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2b, 0x0a, 0x11, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6d, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x41, 0x6d, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6d, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x41, 0x6d, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x22, 0x37, 0x0a, 0x0c, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x12, 0x0a, 0x10, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x29, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x72, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0xdf, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x6e, 0x6b, 0x46, 0x61, 0x69, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3d, 0x0a, 0x0c, 0x77, 0x69, 0x72, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0b, 0x77, 0x69, 0x72, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x12, 0x3f, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x8a, 0x01, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x72, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x68, 0x74, 0x6c, 0x63, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x54, 0x4c, 0x43, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x52, 0x05, 0x68, 0x74, 0x6c, 0x63, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x3e, 0x0a, 0x0a, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x74, 0x6c, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x74, 0x6c, 0x63, 0x49, 0x64, 0x22, 0xbf, 0x04, 0x0a, 0x1b, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x14, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x12, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x3b, 0x0a, 0x1a, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x17, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x60, 0x0a, 0x0e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x6e, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6f, 0x6e, 0x69, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x62, 0x1a, 0x40, 0x0a, 0x12, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc0, 0x01, 0x0a, 0x1c, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x14, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x12, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x48, 0x6f, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x72, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1a, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x81, 0x04, 0x0a, 0x0d, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x54, 0x41, 0x49, 0x4c, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x4e, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x54, 0x4c, 0x43, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x53, 0x5f, 0x4d, 0x41, 0x58, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x53, 0x55, 0x46, 0x46, 0x49, 0x43, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x06, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x48, 0x54, 0x4c, 0x43, 0x5f, 0x41, 0x44, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x08, 0x12, 0x15, 0x0a, 0x11, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x53, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x09, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x0a, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x44, 0x45, 0x52, 0x50, 0x41, 0x49, 0x44, 0x10, 0x0b, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x45, 0x58, 0x50, 0x49, 0x52, 0x59, 0x5f, 0x54, 0x4f, 0x4f, 0x5f, 0x53, 0x4f, 0x4f, 0x4e, 0x10, 0x0c, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x10, 0x0d, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x50, 0x50, 0x5f, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x0e, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x49, 0x53, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x0f, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x45, 0x54, 0x5f, 0x54, 0x4f, 0x54, 0x41, 0x4c, 0x5f, 0x4d, 0x49, 0x53, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x10, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x45, 0x54, 0x5f, 0x54, 0x4f, 0x54, 0x41, 0x4c, 0x5f, 0x54, 0x4f, 0x4f, 0x5f, 0x4c, 0x4f, 0x57, 0x10, 0x11, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x45, 0x54, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x50, 0x41, 0x49, 0x44, 0x10, 0x12, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x10, 0x13, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x4b, 0x45, 0x59, 0x53, 0x45, 0x4e, 0x44, 0x10, 0x14, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x50, 0x50, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x15, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x49, 0x52, 0x43, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x10, 0x16, 0x2a, 0xae, 0x01, 0x0a, 0x0c, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x5f, 0x46, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, 0x43, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4e, 0x4f, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x24, 0x0a, 0x20, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x52, 0x52, 0x45, 0x43, 0x54, 0x5f, 0x50, 0x41, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x54, 0x41, 0x49, 0x4c, 0x53, 0x10, 0x05, 0x12, 0x1f, 0x0a, 0x1b, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x53, 0x55, 0x46, 0x46, 0x49, 0x43, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x06, 0x2a, 0x3c, 0x0a, 0x18, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x48, 0x6f, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x45, 0x54, 0x54, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x53, 0x55, 0x4d, 0x45, 0x10, 0x02, 0x2a, 0x35, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x02, 0x32, 0xf1, 0x0b, 0x0a, 0x06, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x40, 0x0a, 0x0d, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x32, 0x12, 0x1d, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x32, 0x12, 0x1e, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x4b, 0x0a, 0x10, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x46, 0x65, 0x65, 0x12, 0x1a, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x46, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x46, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x42, 0x0a, 0x0d, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x56, 0x32, 0x12, 0x1d, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x54, 0x4c, 0x43, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x12, 0x64, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x25, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x25, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x15, 0x58, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x27, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x58, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x58, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x10, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x22, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x48, 0x74, 0x6c, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x48, 0x74, 0x6c, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x74, 0x6c, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x4d, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x03, 0x88, 0x02, 0x01, 0x30, 0x01, 0x12, 0x4f, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x03, 0x88, 0x02, 0x01, 0x30, 0x01, 0x12, 0x66, 0x0a, 0x0f, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x27, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x26, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6e, 0x64, 0x2f, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_routerrpc_router_proto_rawDescOnce sync.Once file_routerrpc_router_proto_rawDescData = file_routerrpc_router_proto_rawDesc ) func file_routerrpc_router_proto_rawDescGZIP() []byte { file_routerrpc_router_proto_rawDescOnce.Do(func() { file_routerrpc_router_proto_rawDescData = protoimpl.X.CompressGZIP(file_routerrpc_router_proto_rawDescData) }) return file_routerrpc_router_proto_rawDescData } var file_routerrpc_router_proto_enumTypes = make([]protoimpl.EnumInfo, 5) var file_routerrpc_router_proto_msgTypes = make([]protoimpl.MessageInfo, 38) var file_routerrpc_router_proto_goTypes = []interface{}{ (FailureDetail)(0), // 0: routerrpc.FailureDetail (PaymentState)(0), // 1: routerrpc.PaymentState (ResolveHoldForwardAction)(0), // 2: routerrpc.ResolveHoldForwardAction (ChanStatusAction)(0), // 3: routerrpc.ChanStatusAction (HtlcEvent_EventType)(0), // 4: routerrpc.HtlcEvent.EventType (*SendPaymentRequest)(nil), // 5: routerrpc.SendPaymentRequest (*TrackPaymentRequest)(nil), // 6: routerrpc.TrackPaymentRequest (*RouteFeeRequest)(nil), // 7: routerrpc.RouteFeeRequest (*RouteFeeResponse)(nil), // 8: routerrpc.RouteFeeResponse (*SendToRouteRequest)(nil), // 9: routerrpc.SendToRouteRequest (*SendToRouteResponse)(nil), // 10: routerrpc.SendToRouteResponse (*ResetMissionControlRequest)(nil), // 11: routerrpc.ResetMissionControlRequest (*ResetMissionControlResponse)(nil), // 12: routerrpc.ResetMissionControlResponse (*QueryMissionControlRequest)(nil), // 13: routerrpc.QueryMissionControlRequest (*QueryMissionControlResponse)(nil), // 14: routerrpc.QueryMissionControlResponse (*XImportMissionControlRequest)(nil), // 15: routerrpc.XImportMissionControlRequest (*XImportMissionControlResponse)(nil), // 16: routerrpc.XImportMissionControlResponse (*PairHistory)(nil), // 17: routerrpc.PairHistory (*PairData)(nil), // 18: routerrpc.PairData (*GetMissionControlConfigRequest)(nil), // 19: routerrpc.GetMissionControlConfigRequest (*GetMissionControlConfigResponse)(nil), // 20: routerrpc.GetMissionControlConfigResponse (*SetMissionControlConfigRequest)(nil), // 21: routerrpc.SetMissionControlConfigRequest (*SetMissionControlConfigResponse)(nil), // 22: routerrpc.SetMissionControlConfigResponse (*MissionControlConfig)(nil), // 23: routerrpc.MissionControlConfig (*QueryProbabilityRequest)(nil), // 24: routerrpc.QueryProbabilityRequest (*QueryProbabilityResponse)(nil), // 25: routerrpc.QueryProbabilityResponse (*BuildRouteRequest)(nil), // 26: routerrpc.BuildRouteRequest (*BuildRouteResponse)(nil), // 27: routerrpc.BuildRouteResponse (*SubscribeHtlcEventsRequest)(nil), // 28: routerrpc.SubscribeHtlcEventsRequest (*HtlcEvent)(nil), // 29: routerrpc.HtlcEvent (*HtlcInfo)(nil), // 30: routerrpc.HtlcInfo (*ForwardEvent)(nil), // 31: routerrpc.ForwardEvent (*ForwardFailEvent)(nil), // 32: routerrpc.ForwardFailEvent (*SettleEvent)(nil), // 33: routerrpc.SettleEvent (*LinkFailEvent)(nil), // 34: routerrpc.LinkFailEvent (*PaymentStatus)(nil), // 35: routerrpc.PaymentStatus (*CircuitKey)(nil), // 36: routerrpc.CircuitKey (*ForwardHtlcInterceptRequest)(nil), // 37: routerrpc.ForwardHtlcInterceptRequest (*ForwardHtlcInterceptResponse)(nil), // 38: routerrpc.ForwardHtlcInterceptResponse (*UpdateChanStatusRequest)(nil), // 39: routerrpc.UpdateChanStatusRequest (*UpdateChanStatusResponse)(nil), // 40: routerrpc.UpdateChanStatusResponse nil, // 41: routerrpc.SendPaymentRequest.DestCustomRecordsEntry nil, // 42: routerrpc.ForwardHtlcInterceptRequest.CustomRecordsEntry (*lnrpc.RouteHint)(nil), // 43: lnrpc.RouteHint (lnrpc.FeatureBit)(0), // 44: lnrpc.FeatureBit (*lnrpc.Route)(nil), // 45: lnrpc.Route (*lnrpc.Failure)(nil), // 46: lnrpc.Failure (lnrpc.Failure_FailureCode)(0), // 47: lnrpc.Failure.FailureCode (*lnrpc.HTLCAttempt)(nil), // 48: lnrpc.HTLCAttempt (*lnrpc.ChannelPoint)(nil), // 49: lnrpc.ChannelPoint (*lnrpc.Payment)(nil), // 50: lnrpc.Payment } var file_routerrpc_router_proto_depIdxs = []int32{ 43, // 0: routerrpc.SendPaymentRequest.route_hints:type_name -> lnrpc.RouteHint 41, // 1: routerrpc.SendPaymentRequest.dest_custom_records:type_name -> routerrpc.SendPaymentRequest.DestCustomRecordsEntry 44, // 2: routerrpc.SendPaymentRequest.dest_features:type_name -> lnrpc.FeatureBit 45, // 3: routerrpc.SendToRouteRequest.route:type_name -> lnrpc.Route 46, // 4: routerrpc.SendToRouteResponse.failure:type_name -> lnrpc.Failure 17, // 5: routerrpc.QueryMissionControlResponse.pairs:type_name -> routerrpc.PairHistory 17, // 6: routerrpc.XImportMissionControlRequest.pairs:type_name -> routerrpc.PairHistory 18, // 7: routerrpc.PairHistory.history:type_name -> routerrpc.PairData 23, // 8: routerrpc.GetMissionControlConfigResponse.config:type_name -> routerrpc.MissionControlConfig 23, // 9: routerrpc.SetMissionControlConfigRequest.config:type_name -> routerrpc.MissionControlConfig 18, // 10: routerrpc.QueryProbabilityResponse.history:type_name -> routerrpc.PairData 45, // 11: routerrpc.BuildRouteResponse.route:type_name -> lnrpc.Route 4, // 12: routerrpc.HtlcEvent.event_type:type_name -> routerrpc.HtlcEvent.EventType 31, // 13: routerrpc.HtlcEvent.forward_event:type_name -> routerrpc.ForwardEvent 32, // 14: routerrpc.HtlcEvent.forward_fail_event:type_name -> routerrpc.ForwardFailEvent 33, // 15: routerrpc.HtlcEvent.settle_event:type_name -> routerrpc.SettleEvent 34, // 16: routerrpc.HtlcEvent.link_fail_event:type_name -> routerrpc.LinkFailEvent 30, // 17: routerrpc.ForwardEvent.info:type_name -> routerrpc.HtlcInfo 30, // 18: routerrpc.LinkFailEvent.info:type_name -> routerrpc.HtlcInfo 47, // 19: routerrpc.LinkFailEvent.wire_failure:type_name -> lnrpc.Failure.FailureCode 0, // 20: routerrpc.LinkFailEvent.failure_detail:type_name -> routerrpc.FailureDetail 1, // 21: routerrpc.PaymentStatus.state:type_name -> routerrpc.PaymentState 48, // 22: routerrpc.PaymentStatus.htlcs:type_name -> lnrpc.HTLCAttempt 36, // 23: routerrpc.ForwardHtlcInterceptRequest.incoming_circuit_key:type_name -> routerrpc.CircuitKey 42, // 24: routerrpc.ForwardHtlcInterceptRequest.custom_records:type_name -> routerrpc.ForwardHtlcInterceptRequest.CustomRecordsEntry 36, // 25: routerrpc.ForwardHtlcInterceptResponse.incoming_circuit_key:type_name -> routerrpc.CircuitKey 2, // 26: routerrpc.ForwardHtlcInterceptResponse.action:type_name -> routerrpc.ResolveHoldForwardAction 49, // 27: routerrpc.UpdateChanStatusRequest.chan_point:type_name -> lnrpc.ChannelPoint 3, // 28: routerrpc.UpdateChanStatusRequest.action:type_name -> routerrpc.ChanStatusAction 5, // 29: routerrpc.Router.SendPaymentV2:input_type -> routerrpc.SendPaymentRequest 6, // 30: routerrpc.Router.TrackPaymentV2:input_type -> routerrpc.TrackPaymentRequest 7, // 31: routerrpc.Router.EstimateRouteFee:input_type -> routerrpc.RouteFeeRequest 9, // 32: routerrpc.Router.SendToRoute:input_type -> routerrpc.SendToRouteRequest 9, // 33: routerrpc.Router.SendToRouteV2:input_type -> routerrpc.SendToRouteRequest 11, // 34: routerrpc.Router.ResetMissionControl:input_type -> routerrpc.ResetMissionControlRequest 13, // 35: routerrpc.Router.QueryMissionControl:input_type -> routerrpc.QueryMissionControlRequest 15, // 36: routerrpc.Router.XImportMissionControl:input_type -> routerrpc.XImportMissionControlRequest 19, // 37: routerrpc.Router.GetMissionControlConfig:input_type -> routerrpc.GetMissionControlConfigRequest 21, // 38: routerrpc.Router.SetMissionControlConfig:input_type -> routerrpc.SetMissionControlConfigRequest 24, // 39: routerrpc.Router.QueryProbability:input_type -> routerrpc.QueryProbabilityRequest 26, // 40: routerrpc.Router.BuildRoute:input_type -> routerrpc.BuildRouteRequest 28, // 41: routerrpc.Router.SubscribeHtlcEvents:input_type -> routerrpc.SubscribeHtlcEventsRequest 5, // 42: routerrpc.Router.SendPayment:input_type -> routerrpc.SendPaymentRequest 6, // 43: routerrpc.Router.TrackPayment:input_type -> routerrpc.TrackPaymentRequest 38, // 44: routerrpc.Router.HtlcInterceptor:input_type -> routerrpc.ForwardHtlcInterceptResponse 39, // 45: routerrpc.Router.UpdateChanStatus:input_type -> routerrpc.UpdateChanStatusRequest 50, // 46: routerrpc.Router.SendPaymentV2:output_type -> lnrpc.Payment 50, // 47: routerrpc.Router.TrackPaymentV2:output_type -> lnrpc.Payment 8, // 48: routerrpc.Router.EstimateRouteFee:output_type -> routerrpc.RouteFeeResponse 10, // 49: routerrpc.Router.SendToRoute:output_type -> routerrpc.SendToRouteResponse 48, // 50: routerrpc.Router.SendToRouteV2:output_type -> lnrpc.HTLCAttempt 12, // 51: routerrpc.Router.ResetMissionControl:output_type -> routerrpc.ResetMissionControlResponse 14, // 52: routerrpc.Router.QueryMissionControl:output_type -> routerrpc.QueryMissionControlResponse 16, // 53: routerrpc.Router.XImportMissionControl:output_type -> routerrpc.XImportMissionControlResponse 20, // 54: routerrpc.Router.GetMissionControlConfig:output_type -> routerrpc.GetMissionControlConfigResponse 22, // 55: routerrpc.Router.SetMissionControlConfig:output_type -> routerrpc.SetMissionControlConfigResponse 25, // 56: routerrpc.Router.QueryProbability:output_type -> routerrpc.QueryProbabilityResponse 27, // 57: routerrpc.Router.BuildRoute:output_type -> routerrpc.BuildRouteResponse 29, // 58: routerrpc.Router.SubscribeHtlcEvents:output_type -> routerrpc.HtlcEvent 35, // 59: routerrpc.Router.SendPayment:output_type -> routerrpc.PaymentStatus 35, // 60: routerrpc.Router.TrackPayment:output_type -> routerrpc.PaymentStatus 37, // 61: routerrpc.Router.HtlcInterceptor:output_type -> routerrpc.ForwardHtlcInterceptRequest 40, // 62: routerrpc.Router.UpdateChanStatus:output_type -> routerrpc.UpdateChanStatusResponse 46, // [46:63] is the sub-list for method output_type 29, // [29:46] is the sub-list for method input_type 29, // [29:29] is the sub-list for extension type_name 29, // [29:29] is the sub-list for extension extendee 0, // [0:29] is the sub-list for field type_name } func init() { file_routerrpc_router_proto_init() } func file_routerrpc_router_proto_init() { if File_routerrpc_router_proto != nil { return } if !protoimpl.UnsafeEnabled { file_routerrpc_router_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SendPaymentRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TrackPaymentRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RouteFeeRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RouteFeeResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SendToRouteRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SendToRouteResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResetMissionControlRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResetMissionControlResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueryMissionControlRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueryMissionControlResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*XImportMissionControlRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*XImportMissionControlResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PairHistory); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PairData); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetMissionControlConfigRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetMissionControlConfigResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetMissionControlConfigRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetMissionControlConfigResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MissionControlConfig); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueryProbabilityRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueryProbabilityResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BuildRouteRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BuildRouteResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeHtlcEventsRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HtlcEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HtlcInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ForwardEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ForwardFailEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SettleEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LinkFailEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PaymentStatus); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CircuitKey); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ForwardHtlcInterceptRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ForwardHtlcInterceptResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateChanStatusRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateChanStatusResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } file_routerrpc_router_proto_msgTypes[24].OneofWrappers = []interface{}{ (*HtlcEvent_ForwardEvent)(nil), (*HtlcEvent_ForwardFailEvent)(nil), (*HtlcEvent_SettleEvent)(nil), (*HtlcEvent_LinkFailEvent)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_routerrpc_router_proto_rawDesc, NumEnums: 5, NumMessages: 38, NumExtensions: 0, NumServices: 1, }, GoTypes: file_routerrpc_router_proto_goTypes, DependencyIndexes: file_routerrpc_router_proto_depIdxs, EnumInfos: file_routerrpc_router_proto_enumTypes, MessageInfos: file_routerrpc_router_proto_msgTypes, }.Build() File_routerrpc_router_proto = out.File file_routerrpc_router_proto_rawDesc = nil file_routerrpc_router_proto_goTypes = nil file_routerrpc_router_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion6 // RouterClient is the client API for Router service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type RouterClient interface { // //SendPaymentV2 attempts to route a payment described by the passed //PaymentRequest to the final destination. The call returns a stream of //payment updates. SendPaymentV2(ctx context.Context, in *SendPaymentRequest, opts ...grpc.CallOption) (Router_SendPaymentV2Client, error) // //TrackPaymentV2 returns an update stream for the payment identified by the //payment hash. TrackPaymentV2(ctx context.Context, in *TrackPaymentRequest, opts ...grpc.CallOption) (Router_TrackPaymentV2Client, error) // //EstimateRouteFee allows callers to obtain a lower bound w.r.t how much it //may cost to send an HTLC to the target end destination. EstimateRouteFee(ctx context.Context, in *RouteFeeRequest, opts ...grpc.CallOption) (*RouteFeeResponse, error) // Deprecated: Do not use. // //Deprecated, use SendToRouteV2. SendToRoute attempts to make a payment via //the specified route. This method differs from SendPayment in that it //allows users to specify a full route manually. This can be used for //things like rebalancing, and atomic swaps. It differs from the newer //SendToRouteV2 in that it doesn't return the full HTLC information. SendToRoute(ctx context.Context, in *SendToRouteRequest, opts ...grpc.CallOption) (*SendToRouteResponse, error) // //SendToRouteV2 attempts to make a payment via the specified route. This //method differs from SendPayment in that it allows users to specify a full //route manually. This can be used for things like rebalancing, and atomic //swaps. SendToRouteV2(ctx context.Context, in *SendToRouteRequest, opts ...grpc.CallOption) (*lnrpc.HTLCAttempt, error) // //ResetMissionControl clears all mission control state and starts with a clean //slate. ResetMissionControl(ctx context.Context, in *ResetMissionControlRequest, opts ...grpc.CallOption) (*ResetMissionControlResponse, error) // //QueryMissionControl exposes the internal mission control state to callers. //It is a development feature. QueryMissionControl(ctx context.Context, in *QueryMissionControlRequest, opts ...grpc.CallOption) (*QueryMissionControlResponse, error) // //XImportMissionControl is an experimental API that imports the state provided //to the internal mission control's state, using all results which are more //recent than our existing values. These values will only be imported //in-memory, and will not be persisted across restarts. XImportMissionControl(ctx context.Context, in *XImportMissionControlRequest, opts ...grpc.CallOption) (*XImportMissionControlResponse, error) // //GetMissionControlConfig returns mission control's current config. GetMissionControlConfig(ctx context.Context, in *GetMissionControlConfigRequest, opts ...grpc.CallOption) (*GetMissionControlConfigResponse, error) // //SetMissionControlConfig will set mission control's config, if the config //provided is valid. SetMissionControlConfig(ctx context.Context, in *SetMissionControlConfigRequest, opts ...grpc.CallOption) (*SetMissionControlConfigResponse, error) // //QueryProbability returns the current success probability estimate for a //given node pair and amount. QueryProbability(ctx context.Context, in *QueryProbabilityRequest, opts ...grpc.CallOption) (*QueryProbabilityResponse, error) // //BuildRoute builds a fully specified route based on a list of hop public //keys. It retrieves the relevant channel policies from the graph in order to //calculate the correct fees and time locks. BuildRoute(ctx context.Context, in *BuildRouteRequest, opts ...grpc.CallOption) (*BuildRouteResponse, error) // //SubscribeHtlcEvents creates a uni-directional stream from the server to //the client which delivers a stream of htlc events. SubscribeHtlcEvents(ctx context.Context, in *SubscribeHtlcEventsRequest, opts ...grpc.CallOption) (Router_SubscribeHtlcEventsClient, error) // Deprecated: Do not use. // //Deprecated, use SendPaymentV2. SendPayment attempts to route a payment //described by the passed PaymentRequest to the final destination. The call //returns a stream of payment status updates. SendPayment(ctx context.Context, in *SendPaymentRequest, opts ...grpc.CallOption) (Router_SendPaymentClient, error) // Deprecated: Do not use. // //Deprecated, use TrackPaymentV2. TrackPayment returns an update stream for //the payment identified by the payment hash. TrackPayment(ctx context.Context, in *TrackPaymentRequest, opts ...grpc.CallOption) (Router_TrackPaymentClient, error) //* //HtlcInterceptor dispatches a bi-directional streaming RPC in which //Forwarded HTLC requests are sent to the client and the client responds with //a boolean that tells LND if this htlc should be intercepted. //In case of interception, the htlc can be either settled, cancelled or //resumed later by using the ResolveHoldForward endpoint. HtlcInterceptor(ctx context.Context, opts ...grpc.CallOption) (Router_HtlcInterceptorClient, error) // //UpdateChanStatus attempts to manually set the state of a channel //(enabled, disabled, or auto). A manual "disable" request will cause the //channel to stay disabled until a subsequent manual request of either //"enable" or "auto". UpdateChanStatus(ctx context.Context, in *UpdateChanStatusRequest, opts ...grpc.CallOption) (*UpdateChanStatusResponse, error) } type routerClient struct { cc grpc.ClientConnInterface } func NewRouterClient(cc grpc.ClientConnInterface) RouterClient { return &routerClient{cc} } func (c *routerClient) SendPaymentV2(ctx context.Context, in *SendPaymentRequest, opts ...grpc.CallOption) (Router_SendPaymentV2Client, error) { stream, err := c.cc.NewStream(ctx, &_Router_serviceDesc.Streams[0], "/routerrpc.Router/SendPaymentV2", opts...) if err != nil { return nil, err } x := &routerSendPaymentV2Client{stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } if err := x.ClientStream.CloseSend(); err != nil { return nil, err } return x, nil } type Router_SendPaymentV2Client interface { Recv() (*lnrpc.Payment, error) grpc.ClientStream } type routerSendPaymentV2Client struct { grpc.ClientStream } func (x *routerSendPaymentV2Client) Recv() (*lnrpc.Payment, error) { m := new(lnrpc.Payment) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err } return m, nil } func (c *routerClient) TrackPaymentV2(ctx context.Context, in *TrackPaymentRequest, opts ...grpc.CallOption) (Router_TrackPaymentV2Client, error) { stream, err := c.cc.NewStream(ctx, &_Router_serviceDesc.Streams[1], "/routerrpc.Router/TrackPaymentV2", opts...) if err != nil { return nil, err } x := &routerTrackPaymentV2Client{stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } if err := x.ClientStream.CloseSend(); err != nil { return nil, err } return x, nil } type Router_TrackPaymentV2Client interface { Recv() (*lnrpc.Payment, error) grpc.ClientStream } type routerTrackPaymentV2Client struct { grpc.ClientStream } func (x *routerTrackPaymentV2Client) Recv() (*lnrpc.Payment, error) { m := new(lnrpc.Payment) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err } return m, nil } func (c *routerClient) EstimateRouteFee(ctx context.Context, in *RouteFeeRequest, opts ...grpc.CallOption) (*RouteFeeResponse, error) { out := new(RouteFeeResponse) err := c.cc.Invoke(ctx, "/routerrpc.Router/EstimateRouteFee", in, out, opts...) if err != nil { return nil, err } return out, nil } // Deprecated: Do not use. func (c *routerClient) SendToRoute(ctx context.Context, in *SendToRouteRequest, opts ...grpc.CallOption) (*SendToRouteResponse, error) { out := new(SendToRouteResponse) err := c.cc.Invoke(ctx, "/routerrpc.Router/SendToRoute", in, out, opts...) if err != nil { return nil, err } return out, nil } func (c *routerClient) SendToRouteV2(ctx context.Context, in *SendToRouteRequest, opts ...grpc.CallOption) (*lnrpc.HTLCAttempt, error) { out := new(lnrpc.HTLCAttempt) err := c.cc.Invoke(ctx, "/routerrpc.Router/SendToRouteV2", in, out, opts...) if err != nil { return nil, err } return out, nil } func (c *routerClient) ResetMissionControl(ctx context.Context, in *ResetMissionControlRequest, opts ...grpc.CallOption) (*ResetMissionControlResponse, error) { out := new(ResetMissionControlResponse) err := c.cc.Invoke(ctx, "/routerrpc.Router/ResetMissionControl", in, out, opts...) if err != nil { return nil, err } return out, nil } func (c *routerClient) QueryMissionControl(ctx context.Context, in *QueryMissionControlRequest, opts ...grpc.CallOption) (*QueryMissionControlResponse, error) { out := new(QueryMissionControlResponse) err := c.cc.Invoke(ctx, "/routerrpc.Router/QueryMissionControl", in, out, opts...) if err != nil { return nil, err } return out, nil } func (c *routerClient) XImportMissionControl(ctx context.Context, in *XImportMissionControlRequest, opts ...grpc.CallOption) (*XImportMissionControlResponse, error) { out := new(XImportMissionControlResponse) err := c.cc.Invoke(ctx, "/routerrpc.Router/XImportMissionControl", in, out, opts...) if err != nil { return nil, err } return out, nil } func (c *routerClient) GetMissionControlConfig(ctx context.Context, in *GetMissionControlConfigRequest, opts ...grpc.CallOption) (*GetMissionControlConfigResponse, error) { out := new(GetMissionControlConfigResponse) err := c.cc.Invoke(ctx, "/routerrpc.Router/GetMissionControlConfig", in, out, opts...) if err != nil { return nil, err } return out, nil } func (c *routerClient) SetMissionControlConfig(ctx context.Context, in *SetMissionControlConfigRequest, opts ...grpc.CallOption) (*SetMissionControlConfigResponse, error) { out := new(SetMissionControlConfigResponse) err := c.cc.Invoke(ctx, "/routerrpc.Router/SetMissionControlConfig", in, out, opts...) if err != nil { return nil, err } return out, nil } func (c *routerClient) QueryProbability(ctx context.Context, in *QueryProbabilityRequest, opts ...grpc.CallOption) (*QueryProbabilityResponse, error) { out := new(QueryProbabilityResponse) err := c.cc.Invoke(ctx, "/routerrpc.Router/QueryProbability", in, out, opts...) if err != nil { return nil, err } return out, nil } func (c *routerClient) BuildRoute(ctx context.Context, in *BuildRouteRequest, opts ...grpc.CallOption) (*BuildRouteResponse, error) { out := new(BuildRouteResponse) err := c.cc.Invoke(ctx, "/routerrpc.Router/BuildRoute", in, out, opts...) if err != nil { return nil, err } return out, nil } func (c *routerClient) SubscribeHtlcEvents(ctx context.Context, in *SubscribeHtlcEventsRequest, opts ...grpc.CallOption) (Router_SubscribeHtlcEventsClient, error) { stream, err := c.cc.NewStream(ctx, &_Router_serviceDesc.Streams[2], "/routerrpc.Router/SubscribeHtlcEvents", opts...) if err != nil { return nil, err } x := &routerSubscribeHtlcEventsClient{stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } if err := x.ClientStream.CloseSend(); err != nil { return nil, err } return x, nil } type Router_SubscribeHtlcEventsClient interface { Recv() (*HtlcEvent, error) grpc.ClientStream } type routerSubscribeHtlcEventsClient struct { grpc.ClientStream } func (x *routerSubscribeHtlcEventsClient) Recv() (*HtlcEvent, error) { m := new(HtlcEvent) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err } return m, nil } // Deprecated: Do not use. func (c *routerClient) SendPayment(ctx context.Context, in *SendPaymentRequest, opts ...grpc.CallOption) (Router_SendPaymentClient, error) { stream, err := c.cc.NewStream(ctx, &_Router_serviceDesc.Streams[3], "/routerrpc.Router/SendPayment", opts...) if err != nil { return nil, err } x := &routerSendPaymentClient{stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } if err := x.ClientStream.CloseSend(); err != nil { return nil, err } return x, nil } type Router_SendPaymentClient interface { Recv() (*PaymentStatus, error) grpc.ClientStream } type routerSendPaymentClient struct { grpc.ClientStream } func (x *routerSendPaymentClient) Recv() (*PaymentStatus, error) { m := new(PaymentStatus) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err } return m, nil } // Deprecated: Do not use. func (c *routerClient) TrackPayment(ctx context.Context, in *TrackPaymentRequest, opts ...grpc.CallOption) (Router_TrackPaymentClient, error) { stream, err := c.cc.NewStream(ctx, &_Router_serviceDesc.Streams[4], "/routerrpc.Router/TrackPayment", opts...) if err != nil { return nil, err } x := &routerTrackPaymentClient{stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } if err := x.ClientStream.CloseSend(); err != nil { return nil, err } return x, nil } type Router_TrackPaymentClient interface { Recv() (*PaymentStatus, error) grpc.ClientStream } type routerTrackPaymentClient struct { grpc.ClientStream } func (x *routerTrackPaymentClient) Recv() (*PaymentStatus, error) { m := new(PaymentStatus) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err } return m, nil } func (c *routerClient) HtlcInterceptor(ctx context.Context, opts ...grpc.CallOption) (Router_HtlcInterceptorClient, error) { stream, err := c.cc.NewStream(ctx, &_Router_serviceDesc.Streams[5], "/routerrpc.Router/HtlcInterceptor", opts...) if err != nil { return nil, err } x := &routerHtlcInterceptorClient{stream} return x, nil } type Router_HtlcInterceptorClient interface { Send(*ForwardHtlcInterceptResponse) error Recv() (*ForwardHtlcInterceptRequest, error) grpc.ClientStream } type routerHtlcInterceptorClient struct { grpc.ClientStream } func (x *routerHtlcInterceptorClient) Send(m *ForwardHtlcInterceptResponse) error { return x.ClientStream.SendMsg(m) } func (x *routerHtlcInterceptorClient) Recv() (*ForwardHtlcInterceptRequest, error) { m := new(ForwardHtlcInterceptRequest) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err } return m, nil } func (c *routerClient) UpdateChanStatus(ctx context.Context, in *UpdateChanStatusRequest, opts ...grpc.CallOption) (*UpdateChanStatusResponse, error) { out := new(UpdateChanStatusResponse) err := c.cc.Invoke(ctx, "/routerrpc.Router/UpdateChanStatus", in, out, opts...) if err != nil { return nil, err } return out, nil } // RouterServer is the server API for Router service. type RouterServer interface { // //SendPaymentV2 attempts to route a payment described by the passed //PaymentRequest to the final destination. The call returns a stream of //payment updates. SendPaymentV2(*SendPaymentRequest, Router_SendPaymentV2Server) error // //TrackPaymentV2 returns an update stream for the payment identified by the //payment hash. TrackPaymentV2(*TrackPaymentRequest, Router_TrackPaymentV2Server) error // //EstimateRouteFee allows callers to obtain a lower bound w.r.t how much it //may cost to send an HTLC to the target end destination. EstimateRouteFee(context.Context, *RouteFeeRequest) (*RouteFeeResponse, error) // Deprecated: Do not use. // //Deprecated, use SendToRouteV2. SendToRoute attempts to make a payment via //the specified route. This method differs from SendPayment in that it //allows users to specify a full route manually. This can be used for //things like rebalancing, and atomic swaps. It differs from the newer //SendToRouteV2 in that it doesn't return the full HTLC information. SendToRoute(context.Context, *SendToRouteRequest) (*SendToRouteResponse, error) // //SendToRouteV2 attempts to make a payment via the specified route. This //method differs from SendPayment in that it allows users to specify a full //route manually. This can be used for things like rebalancing, and atomic //swaps. SendToRouteV2(context.Context, *SendToRouteRequest) (*lnrpc.HTLCAttempt, error) // //ResetMissionControl clears all mission control state and starts with a clean //slate. ResetMissionControl(context.Context, *ResetMissionControlRequest) (*ResetMissionControlResponse, error) // //QueryMissionControl exposes the internal mission control state to callers. //It is a development feature. QueryMissionControl(context.Context, *QueryMissionControlRequest) (*QueryMissionControlResponse, error) // //XImportMissionControl is an experimental API that imports the state provided //to the internal mission control's state, using all results which are more //recent than our existing values. These values will only be imported //in-memory, and will not be persisted across restarts. XImportMissionControl(context.Context, *XImportMissionControlRequest) (*XImportMissionControlResponse, error) // //GetMissionControlConfig returns mission control's current config. GetMissionControlConfig(context.Context, *GetMissionControlConfigRequest) (*GetMissionControlConfigResponse, error) // //SetMissionControlConfig will set mission control's config, if the config //provided is valid. SetMissionControlConfig(context.Context, *SetMissionControlConfigRequest) (*SetMissionControlConfigResponse, error) // //QueryProbability returns the current success probability estimate for a //given node pair and amount. QueryProbability(context.Context, *QueryProbabilityRequest) (*QueryProbabilityResponse, error) // //BuildRoute builds a fully specified route based on a list of hop public //keys. It retrieves the relevant channel policies from the graph in order to //calculate the correct fees and time locks. BuildRoute(context.Context, *BuildRouteRequest) (*BuildRouteResponse, error) // //SubscribeHtlcEvents creates a uni-directional stream from the server to //the client which delivers a stream of htlc events. SubscribeHtlcEvents(*SubscribeHtlcEventsRequest, Router_SubscribeHtlcEventsServer) error // Deprecated: Do not use. // //Deprecated, use SendPaymentV2. SendPayment attempts to route a payment //described by the passed PaymentRequest to the final destination. The call //returns a stream of payment status updates. SendPayment(*SendPaymentRequest, Router_SendPaymentServer) error // Deprecated: Do not use. // //Deprecated, use TrackPaymentV2. TrackPayment returns an update stream for //the payment identified by the payment hash. TrackPayment(*TrackPaymentRequest, Router_TrackPaymentServer) error //* //HtlcInterceptor dispatches a bi-directional streaming RPC in which //Forwarded HTLC requests are sent to the client and the client responds with //a boolean that tells LND if this htlc should be intercepted. //In case of interception, the htlc can be either settled, cancelled or //resumed later by using the ResolveHoldForward endpoint. HtlcInterceptor(Router_HtlcInterceptorServer) error // //UpdateChanStatus attempts to manually set the state of a channel //(enabled, disabled, or auto). A manual "disable" request will cause the //channel to stay disabled until a subsequent manual request of either //"enable" or "auto". UpdateChanStatus(context.Context, *UpdateChanStatusRequest) (*UpdateChanStatusResponse, error) } // UnimplementedRouterServer can be embedded to have forward compatible implementations. type UnimplementedRouterServer struct { } func (*UnimplementedRouterServer) SendPaymentV2(*SendPaymentRequest, Router_SendPaymentV2Server) error { return status.Errorf(codes.Unimplemented, "method SendPaymentV2 not implemented") } func (*UnimplementedRouterServer) TrackPaymentV2(*TrackPaymentRequest, Router_TrackPaymentV2Server) error { return status.Errorf(codes.Unimplemented, "method TrackPaymentV2 not implemented") } func (*UnimplementedRouterServer) EstimateRouteFee(context.Context, *RouteFeeRequest) (*RouteFeeResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method EstimateRouteFee not implemented") } func (*UnimplementedRouterServer) SendToRoute(context.Context, *SendToRouteRequest) (*SendToRouteResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SendToRoute not implemented") } func (*UnimplementedRouterServer) SendToRouteV2(context.Context, *SendToRouteRequest) (*lnrpc.HTLCAttempt, error) { return nil, status.Errorf(codes.Unimplemented, "method SendToRouteV2 not implemented") } func (*UnimplementedRouterServer) ResetMissionControl(context.Context, *ResetMissionControlRequest) (*ResetMissionControlResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ResetMissionControl not implemented") } func (*UnimplementedRouterServer) QueryMissionControl(context.Context, *QueryMissionControlRequest) (*QueryMissionControlResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method QueryMissionControl not implemented") } func (*UnimplementedRouterServer) XImportMissionControl(context.Context, *XImportMissionControlRequest) (*XImportMissionControlResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method XImportMissionControl not implemented") } func (*UnimplementedRouterServer) GetMissionControlConfig(context.Context, *GetMissionControlConfigRequest) (*GetMissionControlConfigResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetMissionControlConfig not implemented") } func (*UnimplementedRouterServer) SetMissionControlConfig(context.Context, *SetMissionControlConfigRequest) (*SetMissionControlConfigResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SetMissionControlConfig not implemented") } func (*UnimplementedRouterServer) QueryProbability(context.Context, *QueryProbabilityRequest) (*QueryProbabilityResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method QueryProbability not implemented") } func (*UnimplementedRouterServer) BuildRoute(context.Context, *BuildRouteRequest) (*BuildRouteResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method BuildRoute not implemented") } func (*UnimplementedRouterServer) SubscribeHtlcEvents(*SubscribeHtlcEventsRequest, Router_SubscribeHtlcEventsServer) error { return status.Errorf(codes.Unimplemented, "method SubscribeHtlcEvents not implemented") } func (*UnimplementedRouterServer) SendPayment(*SendPaymentRequest, Router_SendPaymentServer) error { return status.Errorf(codes.Unimplemented, "method SendPayment not implemented") } func (*UnimplementedRouterServer) TrackPayment(*TrackPaymentRequest, Router_TrackPaymentServer) error { return status.Errorf(codes.Unimplemented, "method TrackPayment not implemented") } func (*UnimplementedRouterServer) HtlcInterceptor(Router_HtlcInterceptorServer) error { return status.Errorf(codes.Unimplemented, "method HtlcInterceptor not implemented") } func (*UnimplementedRouterServer) UpdateChanStatus(context.Context, *UpdateChanStatusRequest) (*UpdateChanStatusResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateChanStatus not implemented") } func RegisterRouterServer(s *grpc.Server, srv RouterServer) { s.RegisterService(&_Router_serviceDesc, srv) } func _Router_SendPaymentV2_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(SendPaymentRequest) if err := stream.RecvMsg(m); err != nil { return err } return srv.(RouterServer).SendPaymentV2(m, &routerSendPaymentV2Server{stream}) } type Router_SendPaymentV2Server interface { Send(*lnrpc.Payment) error grpc.ServerStream } type routerSendPaymentV2Server struct { grpc.ServerStream } func (x *routerSendPaymentV2Server) Send(m *lnrpc.Payment) error { return x.ServerStream.SendMsg(m) } func _Router_TrackPaymentV2_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(TrackPaymentRequest) if err := stream.RecvMsg(m); err != nil { return err } return srv.(RouterServer).TrackPaymentV2(m, &routerTrackPaymentV2Server{stream}) } type Router_TrackPaymentV2Server interface { Send(*lnrpc.Payment) error grpc.ServerStream } type routerTrackPaymentV2Server struct { grpc.ServerStream } func (x *routerTrackPaymentV2Server) Send(m *lnrpc.Payment) error { return x.ServerStream.SendMsg(m) } func _Router_EstimateRouteFee_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(RouteFeeRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { return srv.(RouterServer).EstimateRouteFee(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, FullMethod: "/routerrpc.Router/EstimateRouteFee", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RouterServer).EstimateRouteFee(ctx, req.(*RouteFeeRequest)) } return interceptor(ctx, in, info, handler) } func _Router_SendToRoute_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(SendToRouteRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { return srv.(RouterServer).SendToRoute(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, FullMethod: "/routerrpc.Router/SendToRoute", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RouterServer).SendToRoute(ctx, req.(*SendToRouteRequest)) } return interceptor(ctx, in, info, handler) } func _Router_SendToRouteV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(SendToRouteRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { return srv.(RouterServer).SendToRouteV2(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, FullMethod: "/routerrpc.Router/SendToRouteV2", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RouterServer).SendToRouteV2(ctx, req.(*SendToRouteRequest)) } return interceptor(ctx, in, info, handler) } func _Router_ResetMissionControl_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ResetMissionControlRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { return srv.(RouterServer).ResetMissionControl(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, FullMethod: "/routerrpc.Router/ResetMissionControl", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RouterServer).ResetMissionControl(ctx, req.(*ResetMissionControlRequest)) } return interceptor(ctx, in, info, handler) } func _Router_QueryMissionControl_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryMissionControlRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { return srv.(RouterServer).QueryMissionControl(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, FullMethod: "/routerrpc.Router/QueryMissionControl", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RouterServer).QueryMissionControl(ctx, req.(*QueryMissionControlRequest)) } return interceptor(ctx, in, info, handler) } func _Router_XImportMissionControl_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(XImportMissionControlRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { return srv.(RouterServer).XImportMissionControl(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, FullMethod: "/routerrpc.Router/XImportMissionControl", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RouterServer).XImportMissionControl(ctx, req.(*XImportMissionControlRequest)) } return interceptor(ctx, in, info, handler) } func _Router_GetMissionControlConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetMissionControlConfigRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { return srv.(RouterServer).GetMissionControlConfig(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, FullMethod: "/routerrpc.Router/GetMissionControlConfig", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RouterServer).GetMissionControlConfig(ctx, req.(*GetMissionControlConfigRequest)) } return interceptor(ctx, in, info, handler) } func _Router_SetMissionControlConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(SetMissionControlConfigRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { return srv.(RouterServer).SetMissionControlConfig(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, FullMethod: "/routerrpc.Router/SetMissionControlConfig", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RouterServer).SetMissionControlConfig(ctx, req.(*SetMissionControlConfigRequest)) } return interceptor(ctx, in, info, handler) } func _Router_QueryProbability_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryProbabilityRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { return srv.(RouterServer).QueryProbability(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, FullMethod: "/routerrpc.Router/QueryProbability", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RouterServer).QueryProbability(ctx, req.(*QueryProbabilityRequest)) } return interceptor(ctx, in, info, handler) } func _Router_BuildRoute_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(BuildRouteRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { return srv.(RouterServer).BuildRoute(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, FullMethod: "/routerrpc.Router/BuildRoute", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RouterServer).BuildRoute(ctx, req.(*BuildRouteRequest)) } return interceptor(ctx, in, info, handler) } func _Router_SubscribeHtlcEvents_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(SubscribeHtlcEventsRequest) if err := stream.RecvMsg(m); err != nil { return err } return srv.(RouterServer).SubscribeHtlcEvents(m, &routerSubscribeHtlcEventsServer{stream}) } type Router_SubscribeHtlcEventsServer interface { Send(*HtlcEvent) error grpc.ServerStream } type routerSubscribeHtlcEventsServer struct { grpc.ServerStream } func (x *routerSubscribeHtlcEventsServer) Send(m *HtlcEvent) error { return x.ServerStream.SendMsg(m) } func _Router_SendPayment_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(SendPaymentRequest) if err := stream.RecvMsg(m); err != nil { return err } return srv.(RouterServer).SendPayment(m, &routerSendPaymentServer{stream}) } type Router_SendPaymentServer interface { Send(*PaymentStatus) error grpc.ServerStream } type routerSendPaymentServer struct { grpc.ServerStream } func (x *routerSendPaymentServer) Send(m *PaymentStatus) error { return x.ServerStream.SendMsg(m) } func _Router_TrackPayment_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(TrackPaymentRequest) if err := stream.RecvMsg(m); err != nil { return err } return srv.(RouterServer).TrackPayment(m, &routerTrackPaymentServer{stream}) } type Router_TrackPaymentServer interface { Send(*PaymentStatus) error grpc.ServerStream } type routerTrackPaymentServer struct { grpc.ServerStream } func (x *routerTrackPaymentServer) Send(m *PaymentStatus) error { return x.ServerStream.SendMsg(m) } func _Router_HtlcInterceptor_Handler(srv interface{}, stream grpc.ServerStream) error { return srv.(RouterServer).HtlcInterceptor(&routerHtlcInterceptorServer{stream}) } type Router_HtlcInterceptorServer interface { Send(*ForwardHtlcInterceptRequest) error Recv() (*ForwardHtlcInterceptResponse, error) grpc.ServerStream } type routerHtlcInterceptorServer struct { grpc.ServerStream } func (x *routerHtlcInterceptorServer) Send(m *ForwardHtlcInterceptRequest) error { return x.ServerStream.SendMsg(m) } func (x *routerHtlcInterceptorServer) Recv() (*ForwardHtlcInterceptResponse, error) { m := new(ForwardHtlcInterceptResponse) if err := x.ServerStream.RecvMsg(m); err != nil { return nil, err } return m, nil } func _Router_UpdateChanStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(UpdateChanStatusRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { return srv.(RouterServer).UpdateChanStatus(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, FullMethod: "/routerrpc.Router/UpdateChanStatus", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RouterServer).UpdateChanStatus(ctx, req.(*UpdateChanStatusRequest)) } return interceptor(ctx, in, info, handler) } var _Router_serviceDesc = grpc.ServiceDesc{ ServiceName: "routerrpc.Router", HandlerType: (*RouterServer)(nil), Methods: []grpc.MethodDesc{ { MethodName: "EstimateRouteFee", Handler: _Router_EstimateRouteFee_Handler, }, { MethodName: "SendToRoute", Handler: _Router_SendToRoute_Handler, }, { MethodName: "SendToRouteV2", Handler: _Router_SendToRouteV2_Handler, }, { MethodName: "ResetMissionControl", Handler: _Router_ResetMissionControl_Handler, }, { MethodName: "QueryMissionControl", Handler: _Router_QueryMissionControl_Handler, }, { MethodName: "XImportMissionControl", Handler: _Router_XImportMissionControl_Handler, }, { MethodName: "GetMissionControlConfig", Handler: _Router_GetMissionControlConfig_Handler, }, { MethodName: "SetMissionControlConfig", Handler: _Router_SetMissionControlConfig_Handler, }, { MethodName: "QueryProbability", Handler: _Router_QueryProbability_Handler, }, { MethodName: "BuildRoute", Handler: _Router_BuildRoute_Handler, }, { MethodName: "UpdateChanStatus", Handler: _Router_UpdateChanStatus_Handler, }, }, Streams: []grpc.StreamDesc{ { StreamName: "SendPaymentV2", Handler: _Router_SendPaymentV2_Handler, ServerStreams: true, }, { StreamName: "TrackPaymentV2", Handler: _Router_TrackPaymentV2_Handler, ServerStreams: true, }, { StreamName: "SubscribeHtlcEvents", Handler: _Router_SubscribeHtlcEvents_Handler, ServerStreams: true, }, { StreamName: "SendPayment", Handler: _Router_SendPayment_Handler, ServerStreams: true, }, { StreamName: "TrackPayment", Handler: _Router_TrackPayment_Handler, ServerStreams: true, }, { StreamName: "HtlcInterceptor", Handler: _Router_HtlcInterceptor_Handler, ServerStreams: true, ClientStreams: true, }, }, Metadata: "routerrpc/router.proto", }