From b9ec8856093da0134746b7c22f39643d43e44faf Mon Sep 17 00:00:00 2001 From: Cedric Cordenier Date: Mon, 4 Sep 2023 13:05:55 +0100 Subject: [PATCH] [BCF-2365] Combine providers into one constructor - Remove NewMercuryProvider, NewMedianProvider, NewFunctionsProvider from the Relayer interface. This is to allow transparent proxying of provider calls from reporting plugin loopps to relayer loopps, without the core node needing to be aware of the types. - From now on, creating a provider should happen via NewPluginProvider, setting RelayArgs.ProviderType as appropriate. - RelayArgs.ProviderType maps to the OCR2PluginType, which this commit relocates from the core node to here. - LOOPP Relayer implementations can still implement NewMercuryProvider/NewMedianProvider/.... The RelayerServer will check whether the underlying implementation contains these methods and will redirect the call to this more specialized function if that is the case. - For interoperability with legacy code in the core node which needs to be aware of the product providers, the RelayerClient will instantiate a provider of the right type inside NewPluginProvider, thus allowing calling code to typecast to the right underlying provider type. --- .../{provider.go => contract_transmitter.go} | 0 pkg/loop/internal/median.go | 16 +- pkg/loop/internal/pb/relayer.pb.go | 1370 ++++++++--------- pkg/loop/internal/pb/relayer.proto | 36 +- pkg/loop/internal/pb/relayer_grpc.pb.go | 75 +- pkg/loop/internal/plugin_provider.go | 25 + pkg/loop/internal/relayer.go | 97 +- pkg/loop/internal/test/plugin_provider.go | 31 + pkg/loop/internal/test/relayer.go | 84 +- pkg/loop/internal/test/test.go | 1 + pkg/loop/internal/types.go | 16 +- pkg/loop/plugin_median_test.go | 10 +- pkg/loop/relayer_service.go | 18 +- pkg/types/plugin.go | 16 + pkg/types/provider_mercury.go | 5 +- pkg/types/relayer.go | 1 + 16 files changed, 900 insertions(+), 901 deletions(-) rename pkg/loop/internal/{provider.go => contract_transmitter.go} (100%) create mode 100644 pkg/loop/internal/plugin_provider.go create mode 100644 pkg/loop/internal/test/plugin_provider.go create mode 100644 pkg/types/plugin.go diff --git a/pkg/loop/internal/provider.go b/pkg/loop/internal/contract_transmitter.go similarity index 100% rename from pkg/loop/internal/provider.go rename to pkg/loop/internal/contract_transmitter.go diff --git a/pkg/loop/internal/median.go b/pkg/loop/internal/median.go index 1c217e1b3..34631b463 100644 --- a/pkg/loop/internal/median.go +++ b/pkg/loop/internal/median.go @@ -170,28 +170,22 @@ var ( ) type medianProviderClient struct { - *configProviderClient - contractTransmitter libocr.ContractTransmitter - reportCodec median.ReportCodec - medianContract median.MedianContract - onchainConfigCodec median.OnchainConfigCodec + *pluginProviderClient + reportCodec median.ReportCodec + medianContract median.MedianContract + onchainConfigCodec median.OnchainConfigCodec } func (m *medianProviderClient) ClientConn() grpc.ClientConnInterface { return m.cc } func newMedianProviderClient(b *brokerExt, cc grpc.ClientConnInterface) *medianProviderClient { - m := &medianProviderClient{configProviderClient: newConfigProviderClient(b.withName("MedianProviderClient"), cc)} - m.contractTransmitter = &contractTransmitterClient{b, pb.NewContractTransmitterClient(m.cc)} + m := &medianProviderClient{pluginProviderClient: newPluginProviderClient(b.withName("MedianProviderClient"), cc)} m.reportCodec = &reportCodecClient{b, pb.NewReportCodecClient(m.cc)} m.medianContract = &medianContractClient{pb.NewMedianContractClient(m.cc)} m.onchainConfigCodec = &onchainConfigCodecClient{b, pb.NewOnchainConfigCodecClient(m.cc)} return m } -func (m *medianProviderClient) ContractTransmitter() libocr.ContractTransmitter { - return m.contractTransmitter -} - func (m *medianProviderClient) ReportCodec() median.ReportCodec { return m.reportCodec } diff --git a/pkg/loop/internal/pb/relayer.pb.go b/pkg/loop/internal/pb/relayer.pb.go index 97398baf5..6cc307b4d 100644 --- a/pkg/loop/internal/pb/relayer.pb.go +++ b/pkg/loop/internal/pb/relayer.pb.go @@ -283,6 +283,7 @@ type RelayArgs struct { ContractID string `protobuf:"bytes,3,opt,name=contractID,proto3" json:"contractID,omitempty"` New bool `protobuf:"varint,4,opt,name=new,proto3" json:"new,omitempty"` RelayConfig []byte `protobuf:"bytes,5,opt,name=relayConfig,proto3" json:"relayConfig,omitempty"` + ProviderType string `protobuf:"bytes,6,opt,name=providerType,proto3" json:"providerType,omitempty"` } func (x *RelayArgs) Reset() { @@ -352,6 +353,13 @@ func (x *RelayArgs) GetRelayConfig() []byte { return nil } +func (x *RelayArgs) GetProviderType() string { + if x != nil { + return x.ProviderType + } + return "" +} + // RelayArgs represents [github.com/smartcontractkit/chainlink-relay/pkg/types.PluginArgs]. type PluginArgs struct { state protoimpl.MessageState @@ -408,17 +416,18 @@ func (x *PluginArgs) GetPluginConfig() []byte { return nil } -// NewConfigProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewConfigProvider]. -type NewConfigProviderRequest struct { +// NewPluginProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewPluginProvider]. +type NewPluginProviderRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RelayArgs *RelayArgs `protobuf:"bytes,1,opt,name=relayArgs,proto3" json:"relayArgs,omitempty"` + RelayArgs *RelayArgs `protobuf:"bytes,1,opt,name=relayArgs,proto3" json:"relayArgs,omitempty"` + PluginArgs *PluginArgs `protobuf:"bytes,2,opt,name=pluginArgs,proto3" json:"pluginArgs,omitempty"` } -func (x *NewConfigProviderRequest) Reset() { - *x = NewConfigProviderRequest{} +func (x *NewPluginProviderRequest) Reset() { + *x = NewPluginProviderRequest{} if protoimpl.UnsafeEnabled { mi := &file_relayer_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -426,13 +435,13 @@ func (x *NewConfigProviderRequest) Reset() { } } -func (x *NewConfigProviderRequest) String() string { +func (x *NewPluginProviderRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NewConfigProviderRequest) ProtoMessage() {} +func (*NewPluginProviderRequest) ProtoMessage() {} -func (x *NewConfigProviderRequest) ProtoReflect() protoreflect.Message { +func (x *NewPluginProviderRequest) ProtoReflect() protoreflect.Message { mi := &file_relayer_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -444,29 +453,36 @@ func (x *NewConfigProviderRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NewConfigProviderRequest.ProtoReflect.Descriptor instead. -func (*NewConfigProviderRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use NewPluginProviderRequest.ProtoReflect.Descriptor instead. +func (*NewPluginProviderRequest) Descriptor() ([]byte, []int) { return file_relayer_proto_rawDescGZIP(), []int{7} } -func (x *NewConfigProviderRequest) GetRelayArgs() *RelayArgs { +func (x *NewPluginProviderRequest) GetRelayArgs() *RelayArgs { if x != nil { return x.RelayArgs } return nil } -// NewConfigProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewConfigProvider]. -type NewConfigProviderReply struct { +func (x *NewPluginProviderRequest) GetPluginArgs() *PluginArgs { + if x != nil { + return x.PluginArgs + } + return nil +} + +// NewPluginProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewPluginProvider]. +type NewPluginProviderReply struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ConfigProviderID uint32 `protobuf:"varint,1,opt,name=configProviderID,proto3" json:"configProviderID,omitempty"` + PluginProviderID uint32 `protobuf:"varint,1,opt,name=pluginProviderID,proto3" json:"pluginProviderID,omitempty"` } -func (x *NewConfigProviderReply) Reset() { - *x = NewConfigProviderReply{} +func (x *NewPluginProviderReply) Reset() { + *x = NewPluginProviderReply{} if protoimpl.UnsafeEnabled { mi := &file_relayer_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -474,13 +490,13 @@ func (x *NewConfigProviderReply) Reset() { } } -func (x *NewConfigProviderReply) String() string { +func (x *NewPluginProviderReply) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NewConfigProviderReply) ProtoMessage() {} +func (*NewPluginProviderReply) ProtoMessage() {} -func (x *NewConfigProviderReply) ProtoReflect() protoreflect.Message { +func (x *NewPluginProviderReply) ProtoReflect() protoreflect.Message { mi := &file_relayer_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -492,30 +508,29 @@ func (x *NewConfigProviderReply) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NewConfigProviderReply.ProtoReflect.Descriptor instead. -func (*NewConfigProviderReply) Descriptor() ([]byte, []int) { +// Deprecated: Use NewPluginProviderReply.ProtoReflect.Descriptor instead. +func (*NewPluginProviderReply) Descriptor() ([]byte, []int) { return file_relayer_proto_rawDescGZIP(), []int{8} } -func (x *NewConfigProviderReply) GetConfigProviderID() uint32 { +func (x *NewPluginProviderReply) GetPluginProviderID() uint32 { if x != nil { - return x.ConfigProviderID + return x.PluginProviderID } return 0 } -// NewMedianProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewMedianProvider]. -type NewMedianProviderRequest struct { +// NewConfigProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewConfigProvider]. +type NewConfigProviderRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RelayArgs *RelayArgs `protobuf:"bytes,1,opt,name=relayArgs,proto3" json:"relayArgs,omitempty"` - PluginArgs *PluginArgs `protobuf:"bytes,2,opt,name=pluginArgs,proto3" json:"pluginArgs,omitempty"` + RelayArgs *RelayArgs `protobuf:"bytes,1,opt,name=relayArgs,proto3" json:"relayArgs,omitempty"` } -func (x *NewMedianProviderRequest) Reset() { - *x = NewMedianProviderRequest{} +func (x *NewConfigProviderRequest) Reset() { + *x = NewConfigProviderRequest{} if protoimpl.UnsafeEnabled { mi := &file_relayer_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -523,13 +538,13 @@ func (x *NewMedianProviderRequest) Reset() { } } -func (x *NewMedianProviderRequest) String() string { +func (x *NewConfigProviderRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NewMedianProviderRequest) ProtoMessage() {} +func (*NewConfigProviderRequest) ProtoMessage() {} -func (x *NewMedianProviderRequest) ProtoReflect() protoreflect.Message { +func (x *NewConfigProviderRequest) ProtoReflect() protoreflect.Message { mi := &file_relayer_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -541,36 +556,29 @@ func (x *NewMedianProviderRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NewMedianProviderRequest.ProtoReflect.Descriptor instead. -func (*NewMedianProviderRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use NewConfigProviderRequest.ProtoReflect.Descriptor instead. +func (*NewConfigProviderRequest) Descriptor() ([]byte, []int) { return file_relayer_proto_rawDescGZIP(), []int{9} } -func (x *NewMedianProviderRequest) GetRelayArgs() *RelayArgs { +func (x *NewConfigProviderRequest) GetRelayArgs() *RelayArgs { if x != nil { return x.RelayArgs } return nil } -func (x *NewMedianProviderRequest) GetPluginArgs() *PluginArgs { - if x != nil { - return x.PluginArgs - } - return nil -} - -// NewMedianProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewMedianProvider]. -type NewMedianProviderReply struct { +// NewConfigProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewConfigProvider]. +type NewConfigProviderReply struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - MedianProviderID uint32 `protobuf:"varint,1,opt,name=medianProviderID,proto3" json:"medianProviderID,omitempty"` + ConfigProviderID uint32 `protobuf:"varint,1,opt,name=configProviderID,proto3" json:"configProviderID,omitempty"` } -func (x *NewMedianProviderReply) Reset() { - *x = NewMedianProviderReply{} +func (x *NewConfigProviderReply) Reset() { + *x = NewConfigProviderReply{} if protoimpl.UnsafeEnabled { mi := &file_relayer_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -578,13 +586,13 @@ func (x *NewMedianProviderReply) Reset() { } } -func (x *NewMedianProviderReply) String() string { +func (x *NewConfigProviderReply) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NewMedianProviderReply) ProtoMessage() {} +func (*NewConfigProviderReply) ProtoMessage() {} -func (x *NewMedianProviderReply) ProtoReflect() protoreflect.Message { +func (x *NewConfigProviderReply) ProtoReflect() protoreflect.Message { mi := &file_relayer_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -596,118 +604,14 @@ func (x *NewMedianProviderReply) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NewMedianProviderReply.ProtoReflect.Descriptor instead. -func (*NewMedianProviderReply) Descriptor() ([]byte, []int) { +// Deprecated: Use NewConfigProviderReply.ProtoReflect.Descriptor instead. +func (*NewConfigProviderReply) Descriptor() ([]byte, []int) { return file_relayer_proto_rawDescGZIP(), []int{10} } -func (x *NewMedianProviderReply) GetMedianProviderID() uint32 { - if x != nil { - return x.MedianProviderID - } - return 0 -} - -// NewMercuryProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewMercuryProvider]. -type NewMercuryProviderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RelayArgs *RelayArgs `protobuf:"bytes,1,opt,name=relayArgs,proto3" json:"relayArgs,omitempty"` - PluginArgs *PluginArgs `protobuf:"bytes,2,opt,name=pluginArgs,proto3" json:"pluginArgs,omitempty"` -} - -func (x *NewMercuryProviderRequest) Reset() { - *x = NewMercuryProviderRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NewMercuryProviderRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NewMercuryProviderRequest) ProtoMessage() {} - -func (x *NewMercuryProviderRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_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 NewMercuryProviderRequest.ProtoReflect.Descriptor instead. -func (*NewMercuryProviderRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{11} -} - -func (x *NewMercuryProviderRequest) GetRelayArgs() *RelayArgs { - if x != nil { - return x.RelayArgs - } - return nil -} - -func (x *NewMercuryProviderRequest) GetPluginArgs() *PluginArgs { - if x != nil { - return x.PluginArgs - } - return nil -} - -// NewMercuryProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewMercuryProvider]. -type NewMercuryProviderReply struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MercuryProviderID uint32 `protobuf:"varint,1,opt,name=mercuryProviderID,proto3" json:"mercuryProviderID,omitempty"` -} - -func (x *NewMercuryProviderReply) Reset() { - *x = NewMercuryProviderReply{} - if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NewMercuryProviderReply) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NewMercuryProviderReply) ProtoMessage() {} - -func (x *NewMercuryProviderReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_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 NewMercuryProviderReply.ProtoReflect.Descriptor instead. -func (*NewMercuryProviderReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{12} -} - -func (x *NewMercuryProviderReply) GetMercuryProviderID() uint32 { +func (x *NewConfigProviderReply) GetConfigProviderID() uint32 { if x != nil { - return x.MercuryProviderID + return x.ConfigProviderID } return 0 } @@ -721,7 +625,7 @@ type GetChainStatusRequest struct { func (x *GetChainStatusRequest) Reset() { *x = GetChainStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[13] + mi := &file_relayer_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -734,7 +638,7 @@ func (x *GetChainStatusRequest) String() string { func (*GetChainStatusRequest) ProtoMessage() {} func (x *GetChainStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[13] + mi := &file_relayer_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -747,7 +651,7 @@ func (x *GetChainStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetChainStatusRequest.ProtoReflect.Descriptor instead. func (*GetChainStatusRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{13} + return file_relayer_proto_rawDescGZIP(), []int{11} } // ChainStatusReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.ChainStatus]. @@ -762,7 +666,7 @@ type GetChainStatusReply struct { func (x *GetChainStatusReply) Reset() { *x = GetChainStatusReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[14] + mi := &file_relayer_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -775,7 +679,7 @@ func (x *GetChainStatusReply) String() string { func (*GetChainStatusReply) ProtoMessage() {} func (x *GetChainStatusReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[14] + mi := &file_relayer_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -788,7 +692,7 @@ func (x *GetChainStatusReply) ProtoReflect() protoreflect.Message { // Deprecated: Use GetChainStatusReply.ProtoReflect.Descriptor instead. func (*GetChainStatusReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{14} + return file_relayer_proto_rawDescGZIP(), []int{12} } func (x *GetChainStatusReply) GetChain() *ChainStatus { @@ -812,7 +716,7 @@ type ChainStatus struct { func (x *ChainStatus) Reset() { *x = ChainStatus{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[15] + mi := &file_relayer_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -825,7 +729,7 @@ func (x *ChainStatus) String() string { func (*ChainStatus) ProtoMessage() {} func (x *ChainStatus) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[15] + mi := &file_relayer_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -838,7 +742,7 @@ func (x *ChainStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use ChainStatus.ProtoReflect.Descriptor instead. func (*ChainStatus) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{15} + return file_relayer_proto_rawDescGZIP(), []int{13} } func (x *ChainStatus) GetId() string { @@ -875,7 +779,7 @@ type ListNodeStatusesRequest struct { func (x *ListNodeStatusesRequest) Reset() { *x = ListNodeStatusesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[16] + mi := &file_relayer_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -888,7 +792,7 @@ func (x *ListNodeStatusesRequest) String() string { func (*ListNodeStatusesRequest) ProtoMessage() {} func (x *ListNodeStatusesRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[16] + mi := &file_relayer_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -901,7 +805,7 @@ func (x *ListNodeStatusesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListNodeStatusesRequest.ProtoReflect.Descriptor instead. func (*ListNodeStatusesRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{16} + return file_relayer_proto_rawDescGZIP(), []int{14} } func (x *ListNodeStatusesRequest) GetPageSize() int32 { @@ -932,7 +836,7 @@ type ListNodeStatusesReply struct { func (x *ListNodeStatusesReply) Reset() { *x = ListNodeStatusesReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[17] + mi := &file_relayer_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -945,7 +849,7 @@ func (x *ListNodeStatusesReply) String() string { func (*ListNodeStatusesReply) ProtoMessage() {} func (x *ListNodeStatusesReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[17] + mi := &file_relayer_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -958,7 +862,7 @@ func (x *ListNodeStatusesReply) ProtoReflect() protoreflect.Message { // Deprecated: Use ListNodeStatusesReply.ProtoReflect.Descriptor instead. func (*ListNodeStatusesReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{17} + return file_relayer_proto_rawDescGZIP(), []int{15} } func (x *ListNodeStatusesReply) GetNodes() []*NodeStatus { @@ -997,7 +901,7 @@ type NodeStatus struct { func (x *NodeStatus) Reset() { *x = NodeStatus{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[18] + mi := &file_relayer_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1010,7 +914,7 @@ func (x *NodeStatus) String() string { func (*NodeStatus) ProtoMessage() {} func (x *NodeStatus) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[18] + mi := &file_relayer_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1023,7 +927,7 @@ func (x *NodeStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use NodeStatus.ProtoReflect.Descriptor instead. func (*NodeStatus) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{18} + return file_relayer_proto_rawDescGZIP(), []int{16} } func (x *NodeStatus) GetChainID() string { @@ -1069,7 +973,7 @@ type TransactionRequest struct { func (x *TransactionRequest) Reset() { *x = TransactionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[19] + mi := &file_relayer_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1082,7 +986,7 @@ func (x *TransactionRequest) String() string { func (*TransactionRequest) ProtoMessage() {} func (x *TransactionRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[19] + mi := &file_relayer_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1095,7 +999,7 @@ func (x *TransactionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionRequest.ProtoReflect.Descriptor instead. func (*TransactionRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{19} + return file_relayer_proto_rawDescGZIP(), []int{17} } func (x *TransactionRequest) GetFrom() string { @@ -1138,7 +1042,7 @@ type ObserveRequest struct { func (x *ObserveRequest) Reset() { *x = ObserveRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[20] + mi := &file_relayer_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1151,7 +1055,7 @@ func (x *ObserveRequest) String() string { func (*ObserveRequest) ProtoMessage() {} func (x *ObserveRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[20] + mi := &file_relayer_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1164,7 +1068,7 @@ func (x *ObserveRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ObserveRequest.ProtoReflect.Descriptor instead. func (*ObserveRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{20} + return file_relayer_proto_rawDescGZIP(), []int{18} } func (x *ObserveRequest) GetReportTimestamp() *ReportTimestamp { @@ -1186,7 +1090,7 @@ type ObserveReply struct { func (x *ObserveReply) Reset() { *x = ObserveReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[21] + mi := &file_relayer_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1199,7 +1103,7 @@ func (x *ObserveReply) String() string { func (*ObserveReply) ProtoMessage() {} func (x *ObserveReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[21] + mi := &file_relayer_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1212,7 +1116,7 @@ func (x *ObserveReply) ProtoReflect() protoreflect.Message { // Deprecated: Use ObserveReply.ProtoReflect.Descriptor instead. func (*ObserveReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{21} + return file_relayer_proto_rawDescGZIP(), []int{19} } func (x *ObserveReply) GetValue() *BigInt { @@ -1241,7 +1145,7 @@ type ContractConfig struct { func (x *ContractConfig) Reset() { *x = ContractConfig{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[22] + mi := &file_relayer_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1254,7 +1158,7 @@ func (x *ContractConfig) String() string { func (*ContractConfig) ProtoMessage() {} func (x *ContractConfig) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[22] + mi := &file_relayer_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1267,7 +1171,7 @@ func (x *ContractConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ContractConfig.ProtoReflect.Descriptor instead. func (*ContractConfig) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{22} + return file_relayer_proto_rawDescGZIP(), []int{20} } func (x *ContractConfig) GetConfigDigest() []byte { @@ -1338,7 +1242,7 @@ type ConfigDigestRequest struct { func (x *ConfigDigestRequest) Reset() { *x = ConfigDigestRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[23] + mi := &file_relayer_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1351,7 +1255,7 @@ func (x *ConfigDigestRequest) String() string { func (*ConfigDigestRequest) ProtoMessage() {} func (x *ConfigDigestRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[23] + mi := &file_relayer_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1364,7 +1268,7 @@ func (x *ConfigDigestRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigDigestRequest.ProtoReflect.Descriptor instead. func (*ConfigDigestRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{23} + return file_relayer_proto_rawDescGZIP(), []int{21} } func (x *ConfigDigestRequest) GetContractConfig() *ContractConfig { @@ -1386,7 +1290,7 @@ type ConfigDigestReply struct { func (x *ConfigDigestReply) Reset() { *x = ConfigDigestReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[24] + mi := &file_relayer_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1399,7 +1303,7 @@ func (x *ConfigDigestReply) String() string { func (*ConfigDigestReply) ProtoMessage() {} func (x *ConfigDigestReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[24] + mi := &file_relayer_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1412,7 +1316,7 @@ func (x *ConfigDigestReply) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigDigestReply.ProtoReflect.Descriptor instead. func (*ConfigDigestReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{24} + return file_relayer_proto_rawDescGZIP(), []int{22} } func (x *ConfigDigestReply) GetConfigDigest() []byte { @@ -1431,7 +1335,7 @@ type ConfigDigestPrefixRequest struct { func (x *ConfigDigestPrefixRequest) Reset() { *x = ConfigDigestPrefixRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[25] + mi := &file_relayer_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1444,7 +1348,7 @@ func (x *ConfigDigestPrefixRequest) String() string { func (*ConfigDigestPrefixRequest) ProtoMessage() {} func (x *ConfigDigestPrefixRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[25] + mi := &file_relayer_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1457,7 +1361,7 @@ func (x *ConfigDigestPrefixRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigDigestPrefixRequest.ProtoReflect.Descriptor instead. func (*ConfigDigestPrefixRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{25} + return file_relayer_proto_rawDescGZIP(), []int{23} } // ConfigDigestPrefixReply has return arguments for [github.com/smartcontractkit/libocr/offchainreporting2plus/types.OffchainConfigDigester.ConfigDigestPrefix]. @@ -1472,7 +1376,7 @@ type ConfigDigestPrefixReply struct { func (x *ConfigDigestPrefixReply) Reset() { *x = ConfigDigestPrefixReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[26] + mi := &file_relayer_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1485,7 +1389,7 @@ func (x *ConfigDigestPrefixReply) String() string { func (*ConfigDigestPrefixReply) ProtoMessage() {} func (x *ConfigDigestPrefixReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[26] + mi := &file_relayer_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1498,7 +1402,7 @@ func (x *ConfigDigestPrefixReply) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigDigestPrefixReply.ProtoReflect.Descriptor instead. func (*ConfigDigestPrefixReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{26} + return file_relayer_proto_rawDescGZIP(), []int{24} } func (x *ConfigDigestPrefixReply) GetConfigDigestPrefix() uint32 { @@ -1517,7 +1421,7 @@ type LatestConfigDetailsRequest struct { func (x *LatestConfigDetailsRequest) Reset() { *x = LatestConfigDetailsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[27] + mi := &file_relayer_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1530,7 +1434,7 @@ func (x *LatestConfigDetailsRequest) String() string { func (*LatestConfigDetailsRequest) ProtoMessage() {} func (x *LatestConfigDetailsRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[27] + mi := &file_relayer_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1543,7 +1447,7 @@ func (x *LatestConfigDetailsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestConfigDetailsRequest.ProtoReflect.Descriptor instead. func (*LatestConfigDetailsRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{27} + return file_relayer_proto_rawDescGZIP(), []int{25} } // LatestConfigDetailsReply has return arguments for [github.com/smartcontractkit/libocr/offchainreporting2plus/types.ContractConfigTracker.LatestConfigDetails]. @@ -1559,7 +1463,7 @@ type LatestConfigDetailsReply struct { func (x *LatestConfigDetailsReply) Reset() { *x = LatestConfigDetailsReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[28] + mi := &file_relayer_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1572,7 +1476,7 @@ func (x *LatestConfigDetailsReply) String() string { func (*LatestConfigDetailsReply) ProtoMessage() {} func (x *LatestConfigDetailsReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[28] + mi := &file_relayer_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1585,7 +1489,7 @@ func (x *LatestConfigDetailsReply) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestConfigDetailsReply.ProtoReflect.Descriptor instead. func (*LatestConfigDetailsReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{28} + return file_relayer_proto_rawDescGZIP(), []int{26} } func (x *LatestConfigDetailsReply) GetChangedInBlock() uint64 { @@ -1614,7 +1518,7 @@ type LatestConfigRequest struct { func (x *LatestConfigRequest) Reset() { *x = LatestConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[29] + mi := &file_relayer_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1627,7 +1531,7 @@ func (x *LatestConfigRequest) String() string { func (*LatestConfigRequest) ProtoMessage() {} func (x *LatestConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[29] + mi := &file_relayer_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1640,7 +1544,7 @@ func (x *LatestConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestConfigRequest.ProtoReflect.Descriptor instead. func (*LatestConfigRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{29} + return file_relayer_proto_rawDescGZIP(), []int{27} } func (x *LatestConfigRequest) GetChangedInBlock() uint64 { @@ -1662,7 +1566,7 @@ type LatestConfigReply struct { func (x *LatestConfigReply) Reset() { *x = LatestConfigReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[30] + mi := &file_relayer_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1675,7 +1579,7 @@ func (x *LatestConfigReply) String() string { func (*LatestConfigReply) ProtoMessage() {} func (x *LatestConfigReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[30] + mi := &file_relayer_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1688,7 +1592,7 @@ func (x *LatestConfigReply) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestConfigReply.ProtoReflect.Descriptor instead. func (*LatestConfigReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{30} + return file_relayer_proto_rawDescGZIP(), []int{28} } func (x *LatestConfigReply) GetContractConfig() *ContractConfig { @@ -1707,7 +1611,7 @@ type LatestBlockHeightRequest struct { func (x *LatestBlockHeightRequest) Reset() { *x = LatestBlockHeightRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[31] + mi := &file_relayer_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1720,7 +1624,7 @@ func (x *LatestBlockHeightRequest) String() string { func (*LatestBlockHeightRequest) ProtoMessage() {} func (x *LatestBlockHeightRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[31] + mi := &file_relayer_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1733,7 +1637,7 @@ func (x *LatestBlockHeightRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestBlockHeightRequest.ProtoReflect.Descriptor instead. func (*LatestBlockHeightRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{31} + return file_relayer_proto_rawDescGZIP(), []int{29} } // LatestBlockHeightReply has return arguments for [github.com/smartcontractkit/libocr/offchainreporting2plus/types.ContractConfigTracker.LatestBlockHeightReply]. @@ -1748,7 +1652,7 @@ type LatestBlockHeightReply struct { func (x *LatestBlockHeightReply) Reset() { *x = LatestBlockHeightReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[32] + mi := &file_relayer_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1761,7 +1665,7 @@ func (x *LatestBlockHeightReply) String() string { func (*LatestBlockHeightReply) ProtoMessage() {} func (x *LatestBlockHeightReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[32] + mi := &file_relayer_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1774,7 +1678,7 @@ func (x *LatestBlockHeightReply) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestBlockHeightReply.ProtoReflect.Descriptor instead. func (*LatestBlockHeightReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{32} + return file_relayer_proto_rawDescGZIP(), []int{30} } func (x *LatestBlockHeightReply) GetBlockHeight() uint64 { @@ -1798,7 +1702,7 @@ type ReportTimestamp struct { func (x *ReportTimestamp) Reset() { *x = ReportTimestamp{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[33] + mi := &file_relayer_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1811,7 +1715,7 @@ func (x *ReportTimestamp) String() string { func (*ReportTimestamp) ProtoMessage() {} func (x *ReportTimestamp) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[33] + mi := &file_relayer_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1824,7 +1728,7 @@ func (x *ReportTimestamp) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportTimestamp.ProtoReflect.Descriptor instead. func (*ReportTimestamp) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{33} + return file_relayer_proto_rawDescGZIP(), []int{31} } func (x *ReportTimestamp) GetConfigDigest() []byte { @@ -1861,7 +1765,7 @@ type ReportContext struct { func (x *ReportContext) Reset() { *x = ReportContext{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[34] + mi := &file_relayer_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1874,7 +1778,7 @@ func (x *ReportContext) String() string { func (*ReportContext) ProtoMessage() {} func (x *ReportContext) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[34] + mi := &file_relayer_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1887,7 +1791,7 @@ func (x *ReportContext) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportContext.ProtoReflect.Descriptor instead. func (*ReportContext) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{34} + return file_relayer_proto_rawDescGZIP(), []int{32} } func (x *ReportContext) GetReportTimestamp() *ReportTimestamp { @@ -1917,7 +1821,7 @@ type AttributedOnchainSignature struct { func (x *AttributedOnchainSignature) Reset() { *x = AttributedOnchainSignature{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[35] + mi := &file_relayer_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1930,7 +1834,7 @@ func (x *AttributedOnchainSignature) String() string { func (*AttributedOnchainSignature) ProtoMessage() {} func (x *AttributedOnchainSignature) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[35] + mi := &file_relayer_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1943,7 +1847,7 @@ func (x *AttributedOnchainSignature) ProtoReflect() protoreflect.Message { // Deprecated: Use AttributedOnchainSignature.ProtoReflect.Descriptor instead. func (*AttributedOnchainSignature) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{35} + return file_relayer_proto_rawDescGZIP(), []int{33} } func (x *AttributedOnchainSignature) GetSignature() []byte { @@ -1974,7 +1878,7 @@ type TransmitRequest struct { func (x *TransmitRequest) Reset() { *x = TransmitRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[36] + mi := &file_relayer_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1987,7 +1891,7 @@ func (x *TransmitRequest) String() string { func (*TransmitRequest) ProtoMessage() {} func (x *TransmitRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[36] + mi := &file_relayer_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2000,7 +1904,7 @@ func (x *TransmitRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TransmitRequest.ProtoReflect.Descriptor instead. func (*TransmitRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{36} + return file_relayer_proto_rawDescGZIP(), []int{34} } func (x *TransmitRequest) GetReportContext() *ReportContext { @@ -2033,7 +1937,7 @@ type TransmitReply struct { func (x *TransmitReply) Reset() { *x = TransmitReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[37] + mi := &file_relayer_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2046,7 +1950,7 @@ func (x *TransmitReply) String() string { func (*TransmitReply) ProtoMessage() {} func (x *TransmitReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[37] + mi := &file_relayer_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2059,7 +1963,7 @@ func (x *TransmitReply) ProtoReflect() protoreflect.Message { // Deprecated: Use TransmitReply.ProtoReflect.Descriptor instead. func (*TransmitReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{37} + return file_relayer_proto_rawDescGZIP(), []int{35} } type LatestConfigDigestAndEpochRequest struct { @@ -2071,7 +1975,7 @@ type LatestConfigDigestAndEpochRequest struct { func (x *LatestConfigDigestAndEpochRequest) Reset() { *x = LatestConfigDigestAndEpochRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[38] + mi := &file_relayer_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2084,7 +1988,7 @@ func (x *LatestConfigDigestAndEpochRequest) String() string { func (*LatestConfigDigestAndEpochRequest) ProtoMessage() {} func (x *LatestConfigDigestAndEpochRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[38] + mi := &file_relayer_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2097,7 +2001,7 @@ func (x *LatestConfigDigestAndEpochRequest) ProtoReflect() protoreflect.Message // Deprecated: Use LatestConfigDigestAndEpochRequest.ProtoReflect.Descriptor instead. func (*LatestConfigDigestAndEpochRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{38} + return file_relayer_proto_rawDescGZIP(), []int{36} } // LatestConfigDigestAndEpochReply has return arguments for [github.com/smartcontractkit/libocr/offchainreporting2plus/types.ContractTransmitter.LatestConfigDigestAndEpoch]. @@ -2113,7 +2017,7 @@ type LatestConfigDigestAndEpochReply struct { func (x *LatestConfigDigestAndEpochReply) Reset() { *x = LatestConfigDigestAndEpochReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[39] + mi := &file_relayer_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2126,7 +2030,7 @@ func (x *LatestConfigDigestAndEpochReply) String() string { func (*LatestConfigDigestAndEpochReply) ProtoMessage() {} func (x *LatestConfigDigestAndEpochReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[39] + mi := &file_relayer_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2139,7 +2043,7 @@ func (x *LatestConfigDigestAndEpochReply) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestConfigDigestAndEpochReply.ProtoReflect.Descriptor instead. func (*LatestConfigDigestAndEpochReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{39} + return file_relayer_proto_rawDescGZIP(), []int{37} } func (x *LatestConfigDigestAndEpochReply) GetConfigDigest() []byte { @@ -2165,7 +2069,7 @@ type FromAccountRequest struct { func (x *FromAccountRequest) Reset() { *x = FromAccountRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[40] + mi := &file_relayer_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2178,7 +2082,7 @@ func (x *FromAccountRequest) String() string { func (*FromAccountRequest) ProtoMessage() {} func (x *FromAccountRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[40] + mi := &file_relayer_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2191,7 +2095,7 @@ func (x *FromAccountRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FromAccountRequest.ProtoReflect.Descriptor instead. func (*FromAccountRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{40} + return file_relayer_proto_rawDescGZIP(), []int{38} } // FromAccountReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/types.Service.FromAccount]. @@ -2206,7 +2110,7 @@ type FromAccountReply struct { func (x *FromAccountReply) Reset() { *x = FromAccountReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[41] + mi := &file_relayer_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2219,7 +2123,7 @@ func (x *FromAccountReply) String() string { func (*FromAccountReply) ProtoMessage() {} func (x *FromAccountReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[41] + mi := &file_relayer_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2232,7 +2136,7 @@ func (x *FromAccountReply) ProtoReflect() protoreflect.Message { // Deprecated: Use FromAccountReply.ProtoReflect.Descriptor instead. func (*FromAccountReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{41} + return file_relayer_proto_rawDescGZIP(), []int{39} } func (x *FromAccountReply) GetAccount() string { @@ -2254,7 +2158,7 @@ type NameReply struct { func (x *NameReply) Reset() { *x = NameReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[42] + mi := &file_relayer_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2267,7 +2171,7 @@ func (x *NameReply) String() string { func (*NameReply) ProtoMessage() {} func (x *NameReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[42] + mi := &file_relayer_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2280,7 +2184,7 @@ func (x *NameReply) ProtoReflect() protoreflect.Message { // Deprecated: Use NameReply.ProtoReflect.Descriptor instead. func (*NameReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{42} + return file_relayer_proto_rawDescGZIP(), []int{40} } func (x *NameReply) GetName() string { @@ -2302,7 +2206,7 @@ type HealthReportReply struct { func (x *HealthReportReply) Reset() { *x = HealthReportReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[43] + mi := &file_relayer_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2315,7 +2219,7 @@ func (x *HealthReportReply) String() string { func (*HealthReportReply) ProtoMessage() {} func (x *HealthReportReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[43] + mi := &file_relayer_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2328,7 +2232,7 @@ func (x *HealthReportReply) ProtoReflect() protoreflect.Message { // Deprecated: Use HealthReportReply.ProtoReflect.Descriptor instead. func (*HealthReportReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{43} + return file_relayer_proto_rawDescGZIP(), []int{41} } func (x *HealthReportReply) GetHealthReport() map[string]string { @@ -2351,7 +2255,7 @@ type BigInt struct { func (x *BigInt) Reset() { *x = BigInt{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[44] + mi := &file_relayer_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2364,7 +2268,7 @@ func (x *BigInt) String() string { func (*BigInt) ProtoMessage() {} func (x *BigInt) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[44] + mi := &file_relayer_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2377,7 +2281,7 @@ func (x *BigInt) ProtoReflect() protoreflect.Message { // Deprecated: Use BigInt.ProtoReflect.Descriptor instead. func (*BigInt) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{44} + return file_relayer_proto_rawDescGZIP(), []int{42} } func (x *BigInt) GetNegative() bool { @@ -2406,7 +2310,7 @@ type StarknetSignature struct { func (x *StarknetSignature) Reset() { *x = StarknetSignature{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[45] + mi := &file_relayer_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2419,7 +2323,7 @@ func (x *StarknetSignature) String() string { func (*StarknetSignature) ProtoMessage() {} func (x *StarknetSignature) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[45] + mi := &file_relayer_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2432,7 +2336,7 @@ func (x *StarknetSignature) ProtoReflect() protoreflect.Message { // Deprecated: Use StarknetSignature.ProtoReflect.Descriptor instead. func (*StarknetSignature) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{45} + return file_relayer_proto_rawDescGZIP(), []int{43} } func (x *StarknetSignature) GetX() *BigInt { @@ -2460,7 +2364,7 @@ type StarknetMessageHash struct { func (x *StarknetMessageHash) Reset() { *x = StarknetMessageHash{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[46] + mi := &file_relayer_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2473,7 +2377,7 @@ func (x *StarknetMessageHash) String() string { func (*StarknetMessageHash) ProtoMessage() {} func (x *StarknetMessageHash) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[46] + mi := &file_relayer_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2486,7 +2390,7 @@ func (x *StarknetMessageHash) ProtoReflect() protoreflect.Message { // Deprecated: Use StarknetMessageHash.ProtoReflect.Descriptor instead. func (*StarknetMessageHash) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{46} + return file_relayer_proto_rawDescGZIP(), []int{44} } func (x *StarknetMessageHash) GetHash() *BigInt { @@ -2519,7 +2423,7 @@ var file_relayer_proto_rawDesc = []byte{ 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2b, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x22, 0x9b, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x6c, 0x61, + 0x6e, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x22, 0xbf, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4a, 0x6f, 0x62, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4a, 0x6f, 0x62, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x6a, @@ -2529,332 +2433,316 @@ var file_relayer_proto_rawDesc = []byte{ 0x44, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x65, 0x77, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6e, 0x65, 0x77, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x56, 0x0a, 0x0a, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, - 0x72, 0x67, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0c, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x49, 0x0a, - 0x18, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x09, 0x72, 0x65, 0x6c, - 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6c, - 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x52, 0x09, 0x72, - 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x22, 0x44, 0x0a, 0x16, 0x4e, 0x65, 0x77, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, - 0x6c, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x22, 0x7b, - 0x0a, 0x18, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x09, 0x72, 0x65, - 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, - 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x52, 0x09, - 0x72, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x12, 0x30, 0x0a, 0x0a, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x52, - 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x22, 0x44, 0x0a, 0x16, 0x4e, - 0x65, 0x77, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x10, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, - 0x44, 0x22, 0x7c, 0x0a, 0x19, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x72, 0x63, 0x75, 0x72, 0x79, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, - 0x0a, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, - 0x67, 0x73, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x12, 0x30, 0x0a, - 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, - 0x72, 0x67, 0x73, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x22, - 0x47, 0x0a, 0x17, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x72, 0x63, 0x75, 0x72, 0x79, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2c, 0x0a, 0x11, 0x6d, 0x65, - 0x72, 0x63, 0x75, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x6d, 0x65, 0x72, 0x63, 0x75, 0x72, 0x79, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x3e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x22, 0x4f, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x22, 0x55, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, - 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x7d, 0x0a, 0x15, 0x4c, 0x69, 0x73, - 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x70, - 0x6c, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, - 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x68, 0x0a, 0x0a, 0x4e, 0x6f, 0x64, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, - 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, - 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, - 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x24, 0x0a, - 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x52, 0x06, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x22, 0x51, 0x0a, 0x0e, 0x4f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0f, 0x72, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x32, 0x0a, 0x0c, 0x4f, 0x62, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, - 0x2e, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa6, - 0x02, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, - 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x72, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x46, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x01, 0x46, 0x12, 0x24, 0x0a, 0x0d, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6f, 0x6e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x34, 0x0a, 0x15, 0x6f, 0x66, 0x66, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x26, 0x0a, 0x0e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x53, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, - 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x37, 0x0a, 0x11, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, - 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x1b, 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x49, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2e, 0x0a, - 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x1c, 0x0a, - 0x1a, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x66, 0x0a, 0x18, 0x4c, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x22, 0x56, 0x0a, 0x0a, 0x50, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x22, 0x0a, + 0x0c, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x22, 0x7b, 0x0a, 0x18, 0x4e, 0x65, 0x77, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, + 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, + 0x73, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x12, 0x30, 0x0a, 0x0a, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x72, + 0x67, 0x73, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x22, 0x44, + 0x0a, 0x16, 0x4e, 0x65, 0x77, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x10, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x49, 0x44, 0x22, 0x49, 0x0a, 0x18, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x2d, 0x0a, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, + 0x41, 0x72, 0x67, 0x73, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x22, + 0x44, 0x0a, 0x16, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x49, 0x44, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3e, + 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x22, 0x4f, + 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, + 0x55, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, + 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, + 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x7d, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, + 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, + 0x26, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x26, 0x0a, + 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x68, 0x0a, 0x0a, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, + 0x82, 0x01, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x24, 0x0a, 0x06, 0x61, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, 0x6f, + 0x70, 0x2e, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x22, 0x51, 0x0a, 0x0e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x32, 0x0a, 0x0c, 0x4f, 0x62, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x42, 0x69, + 0x67, 0x49, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa6, 0x02, 0x0a, 0x0e, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x22, + 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x22, + 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x74, 0x65, + 0x72, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x46, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x01, 0x46, + 0x12, 0x24, 0x0a, 0x0d, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x34, 0x0a, 0x15, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0e, + 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x22, 0x53, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0e, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x72, + 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x37, 0x0a, 0x11, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x22, + 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x22, 0x1b, 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x49, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, + 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x1c, 0x0a, 0x1a, 0x4c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x66, 0x0a, 0x18, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, + 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x22, 0x0a, 0x0c, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x22, 0x3d, 0x0a, 0x13, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, - 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x22, 0x3d, 0x0a, 0x13, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x22, 0x51, 0x0a, 0x11, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x3c, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x1a, 0x0a, 0x18, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x3a, 0x0a, 0x16, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x61, 0x0a, - 0x0f, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x22, 0x6e, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x12, 0x3f, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x6f, 0x6f, - 0x70, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x48, 0x61, 0x73, 0x68, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x48, 0x61, 0x73, 0x68, - 0x22, 0x52, 0x0a, 0x1a, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x4f, 0x6e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x69, - 0x67, 0x6e, 0x65, 0x72, 0x22, 0xc8, 0x01, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x62, 0x0a, 0x1b, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x64, 0x4f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x52, 0x1b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x4f, 0x6e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, - 0x0f, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, - 0x22, 0x23, 0x0a, 0x21, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5b, 0x0a, 0x1f, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x22, 0x14, 0x0a, 0x12, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2c, 0x0a, 0x10, 0x46, 0x72, 0x6f, 0x6d, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xa3, 0x01, 0x0a, 0x11, 0x48, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x4d, 0x0a, - 0x0c, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, - 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x3f, 0x0a, 0x11, - 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3a, 0x0a, - 0x06, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4b, 0x0a, 0x11, 0x53, 0x74, 0x61, - 0x72, 0x6b, 0x6e, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, - 0x0a, 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, - 0x2e, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x52, 0x01, 0x78, 0x12, 0x1a, 0x0a, 0x01, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x42, 0x69, 0x67, - 0x49, 0x6e, 0x74, 0x52, 0x01, 0x79, 0x22, 0x37, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x6b, 0x6e, - 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x20, 0x0a, - 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, - 0x6f, 0x70, 0x2e, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x32, - 0x4f, 0x0a, 0x0d, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x65, 0x77, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x17, - 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, - 0x65, 0x77, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, - 0x32, 0x73, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x39, 0x0a, 0x08, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x13, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x04, 0x53, 0x69, 0x67, 0x6e, 0x12, - 0x11, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, 0xe9, 0x03, 0x0a, 0x07, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x12, 0x53, 0x0a, 0x11, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x1e, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x65, - 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x65, - 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, - 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x11, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x64, - 0x69, 0x61, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x1e, 0x2e, 0x6c, 0x6f, - 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x6f, - 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x12, 0x4e, - 0x65, 0x77, 0x4d, 0x65, 0x72, 0x63, 0x75, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x12, 0x1f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x72, 0x63, - 0x75, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x72, - 0x63, 0x75, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, - 0x79, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, - 0x50, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, - 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, - 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, - 0x00, 0x12, 0x3e, 0x0a, 0x08, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x12, 0x18, 0x2e, - 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x00, 0x32, 0x43, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x35, 0x0a, 0x07, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x12, 0x14, 0x2e, 0x6c, 0x6f, 0x6f, - 0x70, 0x2e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x12, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, - 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, 0xb6, 0x01, 0x0a, 0x16, 0x4f, 0x66, 0x66, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x65, - 0x72, 0x12, 0x44, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x12, 0x19, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6c, - 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x1f, 0x2e, - 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, - 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, - 0x8d, 0x02, 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x59, 0x0a, 0x13, 0x4c, 0x61, 0x74, + 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x22, + 0x51, 0x0a, 0x11, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x12, 0x3c, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, + 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x22, 0x1a, 0x0a, 0x18, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3a, + 0x0a, 0x16, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x61, 0x0a, 0x0f, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x22, 0x0a, + 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x6e, 0x0a, + 0x0d, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3f, + 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, + 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, + 0x1c, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x48, 0x61, 0x73, 0x68, 0x22, 0x52, 0x0a, + 0x1a, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, + 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x72, 0x22, 0xc8, 0x01, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, + 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x62, 0x0a, 0x1b, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x4f, + 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, + 0x1b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x0f, 0x0a, 0x0d, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x23, 0x0a, + 0x21, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x5b, 0x0a, 0x1f, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, + 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x22, + 0x14, 0x0a, 0x12, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2c, 0x0a, 0x10, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x22, 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xa3, 0x01, 0x0a, 0x11, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x4d, 0x0a, 0x0c, 0x68, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x68, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x3f, 0x0a, 0x11, 0x48, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3a, 0x0a, 0x06, 0x42, 0x69, + 0x67, 0x49, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4b, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x6b, 0x6e, + 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x01, 0x78, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x42, 0x69, + 0x67, 0x49, 0x6e, 0x74, 0x52, 0x01, 0x78, 0x12, 0x1a, 0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, + 0x52, 0x01, 0x79, 0x22, 0x37, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x6b, 0x6e, 0x65, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x68, 0x61, + 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, + 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x32, 0x4f, 0x0a, 0x0d, + 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x3e, 0x0a, + 0x0a, 0x4e, 0x65, 0x77, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x17, 0x2e, 0x6c, 0x6f, + 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x52, + 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, 0x73, 0x0a, + 0x08, 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x13, 0x2e, + 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x04, 0x53, 0x69, 0x67, 0x6e, 0x12, 0x11, 0x2e, 0x6c, + 0x6f, 0x6f, 0x70, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x0f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x22, 0x00, 0x32, 0x91, 0x03, 0x0a, 0x07, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x53, + 0x0a, 0x11, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x12, 0x1e, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x11, 0x4e, 0x65, 0x77, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x1e, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, + 0x4e, 0x65, 0x77, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, + 0x4e, 0x65, 0x77, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x2e, 0x6c, 0x6f, 0x6f, + 0x70, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x08, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x12, 0x18, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x43, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x35, 0x0a, 0x07, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x12, + 0x14, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4f, 0x62, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, 0xb6, 0x01, 0x0a, 0x16, + 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x19, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x17, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x12, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x12, 0x1f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x22, 0x00, 0x32, 0x8d, 0x02, 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x59, + 0x0a, 0x13, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x20, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x12, 0x20, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x70, - 0x6c, 0x79, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, - 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x17, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x11, 0x4c, 0x61, - 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, - 0x1e, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, - 0x82, 0x02, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x08, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x6d, 0x69, 0x74, 0x12, 0x15, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x6c, 0x6f, 0x6f, - 0x70, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, - 0x00, 0x12, 0x6e, 0x0a, 0x1a, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, - 0x27, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x70, 0x6f, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, - 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, - 0x00, 0x12, 0x41, 0x0a, 0x0b, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x18, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6c, 0x6f, 0x6f, - 0x70, 0x2e, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x70, - 0x6c, 0x79, 0x22, 0x00, 0x32, 0xf5, 0x01, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x31, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x0f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, - 0x79, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x05, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x16, 0x2e, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, + 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x0c, 0x4c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, + 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, + 0x53, 0x0a, 0x11, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x12, 0x1e, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x22, 0x00, 0x32, 0x82, 0x02, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, + 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x08, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x12, 0x15, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x13, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x6e, 0x0a, 0x1a, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x12, 0x27, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6e, + 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, + 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x0b, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x46, 0x72, 0x6f, + 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, 0xf5, 0x01, 0x0a, 0x07, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x61, 0x6d, + 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x05, 0x43, 0x6c, 0x6f, 0x73, + 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x05, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x39, - 0x0a, 0x05, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x0c, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x17, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x42, 0x5a, 0x40, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6d, 0x61, 0x72, 0x74, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6b, 0x69, 0x74, 0x2f, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x2f, 0x70, 0x6b, 0x67, 0x2f, - 0x6c, 0x6f, 0x6f, 0x70, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x62, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x41, + 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x48, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, + 0x00, 0x42, 0x42, 0x5a, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x73, 0x6d, 0x61, 0x72, 0x74, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6b, 0x69, 0x74, + 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x79, + 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6c, 0x6f, 0x6f, 0x70, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2869,7 +2757,7 @@ func file_relayer_proto_rawDescGZIP() []byte { return file_relayer_proto_rawDescData } -var file_relayer_proto_msgTypes = make([]protoimpl.MessageInfo, 48) +var file_relayer_proto_msgTypes = make([]protoimpl.MessageInfo, 46) var file_relayer_proto_goTypes = []interface{}{ (*NewRelayerRequest)(nil), // 0: loop.NewRelayerRequest (*NewRelayerReply)(nil), // 1: loop.NewRelayerReply @@ -2878,118 +2766,112 @@ var file_relayer_proto_goTypes = []interface{}{ (*SignReply)(nil), // 4: loop.SignReply (*RelayArgs)(nil), // 5: loop.RelayArgs (*PluginArgs)(nil), // 6: loop.PluginArgs - (*NewConfigProviderRequest)(nil), // 7: loop.NewConfigProviderRequest - (*NewConfigProviderReply)(nil), // 8: loop.NewConfigProviderReply - (*NewMedianProviderRequest)(nil), // 9: loop.NewMedianProviderRequest - (*NewMedianProviderReply)(nil), // 10: loop.NewMedianProviderReply - (*NewMercuryProviderRequest)(nil), // 11: loop.NewMercuryProviderRequest - (*NewMercuryProviderReply)(nil), // 12: loop.NewMercuryProviderReply - (*GetChainStatusRequest)(nil), // 13: loop.GetChainStatusRequest - (*GetChainStatusReply)(nil), // 14: loop.GetChainStatusReply - (*ChainStatus)(nil), // 15: loop.ChainStatus - (*ListNodeStatusesRequest)(nil), // 16: loop.ListNodeStatusesRequest - (*ListNodeStatusesReply)(nil), // 17: loop.ListNodeStatusesReply - (*NodeStatus)(nil), // 18: loop.NodeStatus - (*TransactionRequest)(nil), // 19: loop.TransactionRequest - (*ObserveRequest)(nil), // 20: loop.ObserveRequest - (*ObserveReply)(nil), // 21: loop.ObserveReply - (*ContractConfig)(nil), // 22: loop.ContractConfig - (*ConfigDigestRequest)(nil), // 23: loop.ConfigDigestRequest - (*ConfigDigestReply)(nil), // 24: loop.ConfigDigestReply - (*ConfigDigestPrefixRequest)(nil), // 25: loop.ConfigDigestPrefixRequest - (*ConfigDigestPrefixReply)(nil), // 26: loop.ConfigDigestPrefixReply - (*LatestConfigDetailsRequest)(nil), // 27: loop.LatestConfigDetailsRequest - (*LatestConfigDetailsReply)(nil), // 28: loop.LatestConfigDetailsReply - (*LatestConfigRequest)(nil), // 29: loop.LatestConfigRequest - (*LatestConfigReply)(nil), // 30: loop.LatestConfigReply - (*LatestBlockHeightRequest)(nil), // 31: loop.LatestBlockHeightRequest - (*LatestBlockHeightReply)(nil), // 32: loop.LatestBlockHeightReply - (*ReportTimestamp)(nil), // 33: loop.ReportTimestamp - (*ReportContext)(nil), // 34: loop.ReportContext - (*AttributedOnchainSignature)(nil), // 35: loop.AttributedOnchainSignature - (*TransmitRequest)(nil), // 36: loop.TransmitRequest - (*TransmitReply)(nil), // 37: loop.TransmitReply - (*LatestConfigDigestAndEpochRequest)(nil), // 38: loop.LatestConfigDigestAndEpochRequest - (*LatestConfigDigestAndEpochReply)(nil), // 39: loop.LatestConfigDigestAndEpochReply - (*FromAccountRequest)(nil), // 40: loop.FromAccountRequest - (*FromAccountReply)(nil), // 41: loop.FromAccountReply - (*NameReply)(nil), // 42: loop.NameReply - (*HealthReportReply)(nil), // 43: loop.HealthReportReply - (*BigInt)(nil), // 44: loop.BigInt - (*StarknetSignature)(nil), // 45: loop.StarknetSignature - (*StarknetMessageHash)(nil), // 46: loop.StarknetMessageHash - nil, // 47: loop.HealthReportReply.HealthReportEntry - (*emptypb.Empty)(nil), // 48: google.protobuf.Empty + (*NewPluginProviderRequest)(nil), // 7: loop.NewPluginProviderRequest + (*NewPluginProviderReply)(nil), // 8: loop.NewPluginProviderReply + (*NewConfigProviderRequest)(nil), // 9: loop.NewConfigProviderRequest + (*NewConfigProviderReply)(nil), // 10: loop.NewConfigProviderReply + (*GetChainStatusRequest)(nil), // 11: loop.GetChainStatusRequest + (*GetChainStatusReply)(nil), // 12: loop.GetChainStatusReply + (*ChainStatus)(nil), // 13: loop.ChainStatus + (*ListNodeStatusesRequest)(nil), // 14: loop.ListNodeStatusesRequest + (*ListNodeStatusesReply)(nil), // 15: loop.ListNodeStatusesReply + (*NodeStatus)(nil), // 16: loop.NodeStatus + (*TransactionRequest)(nil), // 17: loop.TransactionRequest + (*ObserveRequest)(nil), // 18: loop.ObserveRequest + (*ObserveReply)(nil), // 19: loop.ObserveReply + (*ContractConfig)(nil), // 20: loop.ContractConfig + (*ConfigDigestRequest)(nil), // 21: loop.ConfigDigestRequest + (*ConfigDigestReply)(nil), // 22: loop.ConfigDigestReply + (*ConfigDigestPrefixRequest)(nil), // 23: loop.ConfigDigestPrefixRequest + (*ConfigDigestPrefixReply)(nil), // 24: loop.ConfigDigestPrefixReply + (*LatestConfigDetailsRequest)(nil), // 25: loop.LatestConfigDetailsRequest + (*LatestConfigDetailsReply)(nil), // 26: loop.LatestConfigDetailsReply + (*LatestConfigRequest)(nil), // 27: loop.LatestConfigRequest + (*LatestConfigReply)(nil), // 28: loop.LatestConfigReply + (*LatestBlockHeightRequest)(nil), // 29: loop.LatestBlockHeightRequest + (*LatestBlockHeightReply)(nil), // 30: loop.LatestBlockHeightReply + (*ReportTimestamp)(nil), // 31: loop.ReportTimestamp + (*ReportContext)(nil), // 32: loop.ReportContext + (*AttributedOnchainSignature)(nil), // 33: loop.AttributedOnchainSignature + (*TransmitRequest)(nil), // 34: loop.TransmitRequest + (*TransmitReply)(nil), // 35: loop.TransmitReply + (*LatestConfigDigestAndEpochRequest)(nil), // 36: loop.LatestConfigDigestAndEpochRequest + (*LatestConfigDigestAndEpochReply)(nil), // 37: loop.LatestConfigDigestAndEpochReply + (*FromAccountRequest)(nil), // 38: loop.FromAccountRequest + (*FromAccountReply)(nil), // 39: loop.FromAccountReply + (*NameReply)(nil), // 40: loop.NameReply + (*HealthReportReply)(nil), // 41: loop.HealthReportReply + (*BigInt)(nil), // 42: loop.BigInt + (*StarknetSignature)(nil), // 43: loop.StarknetSignature + (*StarknetMessageHash)(nil), // 44: loop.StarknetMessageHash + nil, // 45: loop.HealthReportReply.HealthReportEntry + (*emptypb.Empty)(nil), // 46: google.protobuf.Empty } var file_relayer_proto_depIdxs = []int32{ - 5, // 0: loop.NewConfigProviderRequest.relayArgs:type_name -> loop.RelayArgs - 5, // 1: loop.NewMedianProviderRequest.relayArgs:type_name -> loop.RelayArgs - 6, // 2: loop.NewMedianProviderRequest.pluginArgs:type_name -> loop.PluginArgs - 5, // 3: loop.NewMercuryProviderRequest.relayArgs:type_name -> loop.RelayArgs - 6, // 4: loop.NewMercuryProviderRequest.pluginArgs:type_name -> loop.PluginArgs - 15, // 5: loop.GetChainStatusReply.chain:type_name -> loop.ChainStatus - 18, // 6: loop.ListNodeStatusesReply.nodes:type_name -> loop.NodeStatus - 44, // 7: loop.TransactionRequest.amount:type_name -> loop.BigInt - 33, // 8: loop.ObserveRequest.reportTimestamp:type_name -> loop.ReportTimestamp - 44, // 9: loop.ObserveReply.value:type_name -> loop.BigInt - 22, // 10: loop.ConfigDigestRequest.contractConfig:type_name -> loop.ContractConfig - 22, // 11: loop.LatestConfigReply.contractConfig:type_name -> loop.ContractConfig - 33, // 12: loop.ReportContext.reportTimestamp:type_name -> loop.ReportTimestamp - 34, // 13: loop.TransmitRequest.reportContext:type_name -> loop.ReportContext - 35, // 14: loop.TransmitRequest.attributedOnchainSignatures:type_name -> loop.AttributedOnchainSignature - 47, // 15: loop.HealthReportReply.healthReport:type_name -> loop.HealthReportReply.HealthReportEntry - 44, // 16: loop.StarknetSignature.x:type_name -> loop.BigInt - 44, // 17: loop.StarknetSignature.y:type_name -> loop.BigInt - 44, // 18: loop.StarknetMessageHash.hash:type_name -> loop.BigInt - 0, // 19: loop.PluginRelayer.NewRelayer:input_type -> loop.NewRelayerRequest - 48, // 20: loop.Keystore.Accounts:input_type -> google.protobuf.Empty - 3, // 21: loop.Keystore.Sign:input_type -> loop.SignRequest - 7, // 22: loop.Relayer.NewConfigProvider:input_type -> loop.NewConfigProviderRequest - 9, // 23: loop.Relayer.NewMedianProvider:input_type -> loop.NewMedianProviderRequest - 11, // 24: loop.Relayer.NewMercuryProvider:input_type -> loop.NewMercuryProviderRequest - 13, // 25: loop.Relayer.GetChainStatus:input_type -> loop.GetChainStatusRequest - 16, // 26: loop.Relayer.ListNodeStatuses:input_type -> loop.ListNodeStatusesRequest - 19, // 27: loop.Relayer.Transact:input_type -> loop.TransactionRequest - 20, // 28: loop.DataSource.Observe:input_type -> loop.ObserveRequest - 23, // 29: loop.OffchainConfigDigester.ConfigDigest:input_type -> loop.ConfigDigestRequest - 25, // 30: loop.OffchainConfigDigester.ConfigDigestPrefix:input_type -> loop.ConfigDigestPrefixRequest - 27, // 31: loop.ContractConfigTracker.LatestConfigDetails:input_type -> loop.LatestConfigDetailsRequest - 29, // 32: loop.ContractConfigTracker.LatestConfig:input_type -> loop.LatestConfigRequest - 31, // 33: loop.ContractConfigTracker.LatestBlockHeight:input_type -> loop.LatestBlockHeightRequest - 36, // 34: loop.ContractTransmitter.Transmit:input_type -> loop.TransmitRequest - 38, // 35: loop.ContractTransmitter.LatestConfigDigestAndEpoch:input_type -> loop.LatestConfigDigestAndEpochRequest - 40, // 36: loop.ContractTransmitter.FromAccount:input_type -> loop.FromAccountRequest - 48, // 37: loop.Service.Name:input_type -> google.protobuf.Empty - 48, // 38: loop.Service.Close:input_type -> google.protobuf.Empty - 48, // 39: loop.Service.Ready:input_type -> google.protobuf.Empty - 48, // 40: loop.Service.HealthReport:input_type -> google.protobuf.Empty - 1, // 41: loop.PluginRelayer.NewRelayer:output_type -> loop.NewRelayerReply - 2, // 42: loop.Keystore.Accounts:output_type -> loop.AccountsReply - 4, // 43: loop.Keystore.Sign:output_type -> loop.SignReply - 8, // 44: loop.Relayer.NewConfigProvider:output_type -> loop.NewConfigProviderReply - 10, // 45: loop.Relayer.NewMedianProvider:output_type -> loop.NewMedianProviderReply - 12, // 46: loop.Relayer.NewMercuryProvider:output_type -> loop.NewMercuryProviderReply - 14, // 47: loop.Relayer.GetChainStatus:output_type -> loop.GetChainStatusReply - 17, // 48: loop.Relayer.ListNodeStatuses:output_type -> loop.ListNodeStatusesReply - 48, // 49: loop.Relayer.Transact:output_type -> google.protobuf.Empty - 21, // 50: loop.DataSource.Observe:output_type -> loop.ObserveReply - 24, // 51: loop.OffchainConfigDigester.ConfigDigest:output_type -> loop.ConfigDigestReply - 26, // 52: loop.OffchainConfigDigester.ConfigDigestPrefix:output_type -> loop.ConfigDigestPrefixReply - 28, // 53: loop.ContractConfigTracker.LatestConfigDetails:output_type -> loop.LatestConfigDetailsReply - 30, // 54: loop.ContractConfigTracker.LatestConfig:output_type -> loop.LatestConfigReply - 32, // 55: loop.ContractConfigTracker.LatestBlockHeight:output_type -> loop.LatestBlockHeightReply - 37, // 56: loop.ContractTransmitter.Transmit:output_type -> loop.TransmitReply - 39, // 57: loop.ContractTransmitter.LatestConfigDigestAndEpoch:output_type -> loop.LatestConfigDigestAndEpochReply - 41, // 58: loop.ContractTransmitter.FromAccount:output_type -> loop.FromAccountReply - 42, // 59: loop.Service.Name:output_type -> loop.NameReply - 48, // 60: loop.Service.Close:output_type -> google.protobuf.Empty - 48, // 61: loop.Service.Ready:output_type -> google.protobuf.Empty - 43, // 62: loop.Service.HealthReport:output_type -> loop.HealthReportReply - 41, // [41:63] is the sub-list for method output_type - 19, // [19:41] is the sub-list for method input_type - 19, // [19:19] is the sub-list for extension type_name - 19, // [19:19] is the sub-list for extension extendee - 0, // [0:19] is the sub-list for field type_name + 5, // 0: loop.NewPluginProviderRequest.relayArgs:type_name -> loop.RelayArgs + 6, // 1: loop.NewPluginProviderRequest.pluginArgs:type_name -> loop.PluginArgs + 5, // 2: loop.NewConfigProviderRequest.relayArgs:type_name -> loop.RelayArgs + 13, // 3: loop.GetChainStatusReply.chain:type_name -> loop.ChainStatus + 16, // 4: loop.ListNodeStatusesReply.nodes:type_name -> loop.NodeStatus + 42, // 5: loop.TransactionRequest.amount:type_name -> loop.BigInt + 31, // 6: loop.ObserveRequest.reportTimestamp:type_name -> loop.ReportTimestamp + 42, // 7: loop.ObserveReply.value:type_name -> loop.BigInt + 20, // 8: loop.ConfigDigestRequest.contractConfig:type_name -> loop.ContractConfig + 20, // 9: loop.LatestConfigReply.contractConfig:type_name -> loop.ContractConfig + 31, // 10: loop.ReportContext.reportTimestamp:type_name -> loop.ReportTimestamp + 32, // 11: loop.TransmitRequest.reportContext:type_name -> loop.ReportContext + 33, // 12: loop.TransmitRequest.attributedOnchainSignatures:type_name -> loop.AttributedOnchainSignature + 45, // 13: loop.HealthReportReply.healthReport:type_name -> loop.HealthReportReply.HealthReportEntry + 42, // 14: loop.StarknetSignature.x:type_name -> loop.BigInt + 42, // 15: loop.StarknetSignature.y:type_name -> loop.BigInt + 42, // 16: loop.StarknetMessageHash.hash:type_name -> loop.BigInt + 0, // 17: loop.PluginRelayer.NewRelayer:input_type -> loop.NewRelayerRequest + 46, // 18: loop.Keystore.Accounts:input_type -> google.protobuf.Empty + 3, // 19: loop.Keystore.Sign:input_type -> loop.SignRequest + 9, // 20: loop.Relayer.NewConfigProvider:input_type -> loop.NewConfigProviderRequest + 7, // 21: loop.Relayer.NewPluginProvider:input_type -> loop.NewPluginProviderRequest + 11, // 22: loop.Relayer.GetChainStatus:input_type -> loop.GetChainStatusRequest + 14, // 23: loop.Relayer.ListNodeStatuses:input_type -> loop.ListNodeStatusesRequest + 17, // 24: loop.Relayer.Transact:input_type -> loop.TransactionRequest + 18, // 25: loop.DataSource.Observe:input_type -> loop.ObserveRequest + 21, // 26: loop.OffchainConfigDigester.ConfigDigest:input_type -> loop.ConfigDigestRequest + 23, // 27: loop.OffchainConfigDigester.ConfigDigestPrefix:input_type -> loop.ConfigDigestPrefixRequest + 25, // 28: loop.ContractConfigTracker.LatestConfigDetails:input_type -> loop.LatestConfigDetailsRequest + 27, // 29: loop.ContractConfigTracker.LatestConfig:input_type -> loop.LatestConfigRequest + 29, // 30: loop.ContractConfigTracker.LatestBlockHeight:input_type -> loop.LatestBlockHeightRequest + 34, // 31: loop.ContractTransmitter.Transmit:input_type -> loop.TransmitRequest + 36, // 32: loop.ContractTransmitter.LatestConfigDigestAndEpoch:input_type -> loop.LatestConfigDigestAndEpochRequest + 38, // 33: loop.ContractTransmitter.FromAccount:input_type -> loop.FromAccountRequest + 46, // 34: loop.Service.Name:input_type -> google.protobuf.Empty + 46, // 35: loop.Service.Close:input_type -> google.protobuf.Empty + 46, // 36: loop.Service.Ready:input_type -> google.protobuf.Empty + 46, // 37: loop.Service.HealthReport:input_type -> google.protobuf.Empty + 1, // 38: loop.PluginRelayer.NewRelayer:output_type -> loop.NewRelayerReply + 2, // 39: loop.Keystore.Accounts:output_type -> loop.AccountsReply + 4, // 40: loop.Keystore.Sign:output_type -> loop.SignReply + 10, // 41: loop.Relayer.NewConfigProvider:output_type -> loop.NewConfigProviderReply + 8, // 42: loop.Relayer.NewPluginProvider:output_type -> loop.NewPluginProviderReply + 12, // 43: loop.Relayer.GetChainStatus:output_type -> loop.GetChainStatusReply + 15, // 44: loop.Relayer.ListNodeStatuses:output_type -> loop.ListNodeStatusesReply + 46, // 45: loop.Relayer.Transact:output_type -> google.protobuf.Empty + 19, // 46: loop.DataSource.Observe:output_type -> loop.ObserveReply + 22, // 47: loop.OffchainConfigDigester.ConfigDigest:output_type -> loop.ConfigDigestReply + 24, // 48: loop.OffchainConfigDigester.ConfigDigestPrefix:output_type -> loop.ConfigDigestPrefixReply + 26, // 49: loop.ContractConfigTracker.LatestConfigDetails:output_type -> loop.LatestConfigDetailsReply + 28, // 50: loop.ContractConfigTracker.LatestConfig:output_type -> loop.LatestConfigReply + 30, // 51: loop.ContractConfigTracker.LatestBlockHeight:output_type -> loop.LatestBlockHeightReply + 35, // 52: loop.ContractTransmitter.Transmit:output_type -> loop.TransmitReply + 37, // 53: loop.ContractTransmitter.LatestConfigDigestAndEpoch:output_type -> loop.LatestConfigDigestAndEpochReply + 39, // 54: loop.ContractTransmitter.FromAccount:output_type -> loop.FromAccountReply + 40, // 55: loop.Service.Name:output_type -> loop.NameReply + 46, // 56: loop.Service.Close:output_type -> google.protobuf.Empty + 46, // 57: loop.Service.Ready:output_type -> google.protobuf.Empty + 41, // 58: loop.Service.HealthReport:output_type -> loop.HealthReportReply + 38, // [38:59] is the sub-list for method output_type + 17, // [17:38] is the sub-list for method input_type + 17, // [17:17] is the sub-list for extension type_name + 17, // [17:17] is the sub-list for extension extendee + 0, // [0:17] is the sub-list for field type_name } func init() { file_relayer_proto_init() } @@ -3083,7 +2965,7 @@ func file_relayer_proto_init() { } } file_relayer_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewConfigProviderRequest); i { + switch v := v.(*NewPluginProviderRequest); i { case 0: return &v.state case 1: @@ -3095,7 +2977,7 @@ func file_relayer_proto_init() { } } file_relayer_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewConfigProviderReply); i { + switch v := v.(*NewPluginProviderReply); i { case 0: return &v.state case 1: @@ -3107,7 +2989,7 @@ func file_relayer_proto_init() { } } file_relayer_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewMedianProviderRequest); i { + switch v := v.(*NewConfigProviderRequest); i { case 0: return &v.state case 1: @@ -3119,7 +3001,7 @@ func file_relayer_proto_init() { } } file_relayer_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewMedianProviderReply); i { + switch v := v.(*NewConfigProviderReply); i { case 0: return &v.state case 1: @@ -3131,30 +3013,6 @@ func file_relayer_proto_init() { } } file_relayer_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewMercuryProviderRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_relayer_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewMercuryProviderReply); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_relayer_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetChainStatusRequest); i { case 0: return &v.state @@ -3166,7 +3024,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetChainStatusReply); i { case 0: return &v.state @@ -3178,7 +3036,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChainStatus); i { case 0: return &v.state @@ -3190,7 +3048,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListNodeStatusesRequest); i { case 0: return &v.state @@ -3202,7 +3060,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListNodeStatusesReply); i { case 0: return &v.state @@ -3214,7 +3072,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NodeStatus); i { case 0: return &v.state @@ -3226,7 +3084,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionRequest); i { case 0: return &v.state @@ -3238,7 +3096,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ObserveRequest); i { case 0: return &v.state @@ -3250,7 +3108,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ObserveReply); i { case 0: return &v.state @@ -3262,7 +3120,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ContractConfig); i { case 0: return &v.state @@ -3274,7 +3132,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConfigDigestRequest); i { case 0: return &v.state @@ -3286,7 +3144,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConfigDigestReply); i { case 0: return &v.state @@ -3298,7 +3156,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConfigDigestPrefixRequest); i { case 0: return &v.state @@ -3310,7 +3168,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConfigDigestPrefixReply); i { case 0: return &v.state @@ -3322,7 +3180,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LatestConfigDetailsRequest); i { case 0: return &v.state @@ -3334,7 +3192,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LatestConfigDetailsReply); i { case 0: return &v.state @@ -3346,7 +3204,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LatestConfigRequest); i { case 0: return &v.state @@ -3358,7 +3216,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LatestConfigReply); i { case 0: return &v.state @@ -3370,7 +3228,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LatestBlockHeightRequest); i { case 0: return &v.state @@ -3382,7 +3240,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LatestBlockHeightReply); i { case 0: return &v.state @@ -3394,7 +3252,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReportTimestamp); i { case 0: return &v.state @@ -3406,7 +3264,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReportContext); i { case 0: return &v.state @@ -3418,7 +3276,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AttributedOnchainSignature); i { case 0: return &v.state @@ -3430,7 +3288,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransmitRequest); i { case 0: return &v.state @@ -3442,7 +3300,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransmitReply); i { case 0: return &v.state @@ -3454,7 +3312,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LatestConfigDigestAndEpochRequest); i { case 0: return &v.state @@ -3466,7 +3324,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LatestConfigDigestAndEpochReply); i { case 0: return &v.state @@ -3478,7 +3336,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FromAccountRequest); i { case 0: return &v.state @@ -3490,7 +3348,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FromAccountReply); i { case 0: return &v.state @@ -3502,7 +3360,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NameReply); i { case 0: return &v.state @@ -3514,7 +3372,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HealthReportReply); i { case 0: return &v.state @@ -3526,7 +3384,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BigInt); i { case 0: return &v.state @@ -3538,7 +3396,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StarknetSignature); i { case 0: return &v.state @@ -3550,7 +3408,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StarknetMessageHash); i { case 0: return &v.state @@ -3569,7 +3427,7 @@ func file_relayer_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_relayer_proto_rawDesc, NumEnums: 0, - NumMessages: 48, + NumMessages: 46, NumExtensions: 0, NumServices: 8, }, diff --git a/pkg/loop/internal/pb/relayer.proto b/pkg/loop/internal/pb/relayer.proto index 78c06e24b..5aded6508 100644 --- a/pkg/loop/internal/pb/relayer.proto +++ b/pkg/loop/internal/pb/relayer.proto @@ -41,8 +41,7 @@ message SignReply { service Relayer { rpc NewConfigProvider (NewConfigProviderRequest) returns (NewConfigProviderReply) {} - rpc NewMedianProvider (NewMedianProviderRequest) returns (NewMedianProviderReply) {} - rpc NewMercuryProvider (NewMercuryProviderRequest) returns (NewMercuryProviderReply) {} + rpc NewPluginProvider (NewPluginProviderRequest) returns (NewPluginProviderReply) {} rpc GetChainStatus (GetChainStatusRequest) returns (GetChainStatusReply) {} rpc ListNodeStatuses (ListNodeStatusesRequest) returns (ListNodeStatusesReply) {} @@ -56,6 +55,7 @@ message RelayArgs { string contractID = 3; bool new = 4; bytes relayConfig = 5; + string providerType = 6; } // RelayArgs represents [github.com/smartcontractkit/chainlink-relay/pkg/types.PluginArgs]. @@ -64,39 +64,29 @@ message PluginArgs { bytes pluginConfig = 2; } -// NewConfigProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewConfigProvider]. -message NewConfigProviderRequest { - RelayArgs relayArgs = 1; -} - -// NewConfigProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewConfigProvider]. -message NewConfigProviderReply { - uint32 configProviderID = 1; -} - -// NewMedianProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewMedianProvider]. -message NewMedianProviderRequest { +// NewPluginProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewPluginProvider]. +message NewPluginProviderRequest { RelayArgs relayArgs = 1; PluginArgs pluginArgs = 2; } -// NewMedianProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewMedianProvider]. -message NewMedianProviderReply { - uint32 medianProviderID = 1; +// NewPluginProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewPluginProvider]. +message NewPluginProviderReply { + uint32 pluginProviderID = 1; } -// NewMercuryProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewMercuryProvider]. -message NewMercuryProviderRequest { +// NewConfigProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewConfigProvider]. +message NewConfigProviderRequest { RelayArgs relayArgs = 1; - PluginArgs pluginArgs = 2; } -// NewMercuryProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewMercuryProvider]. -message NewMercuryProviderReply { - uint32 mercuryProviderID = 1; +// NewConfigProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewConfigProvider]. +message NewConfigProviderReply { + uint32 configProviderID = 1; } message GetChainStatusRequest {} + // ChainStatusReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.ChainStatus]. message GetChainStatusReply { ChainStatus chain = 1; diff --git a/pkg/loop/internal/pb/relayer_grpc.pb.go b/pkg/loop/internal/pb/relayer_grpc.pb.go index b675b6140..c715e31ff 100644 --- a/pkg/loop/internal/pb/relayer_grpc.pb.go +++ b/pkg/loop/internal/pb/relayer_grpc.pb.go @@ -237,12 +237,11 @@ var Keystore_ServiceDesc = grpc.ServiceDesc{ } const ( - Relayer_NewConfigProvider_FullMethodName = "/loop.Relayer/NewConfigProvider" - Relayer_NewMedianProvider_FullMethodName = "/loop.Relayer/NewMedianProvider" - Relayer_NewMercuryProvider_FullMethodName = "/loop.Relayer/NewMercuryProvider" - Relayer_GetChainStatus_FullMethodName = "/loop.Relayer/GetChainStatus" - Relayer_ListNodeStatuses_FullMethodName = "/loop.Relayer/ListNodeStatuses" - Relayer_Transact_FullMethodName = "/loop.Relayer/Transact" + Relayer_NewConfigProvider_FullMethodName = "/loop.Relayer/NewConfigProvider" + Relayer_NewPluginProvider_FullMethodName = "/loop.Relayer/NewPluginProvider" + Relayer_GetChainStatus_FullMethodName = "/loop.Relayer/GetChainStatus" + Relayer_ListNodeStatuses_FullMethodName = "/loop.Relayer/ListNodeStatuses" + Relayer_Transact_FullMethodName = "/loop.Relayer/Transact" ) // RelayerClient is the client API for Relayer service. @@ -250,8 +249,7 @@ const ( // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type RelayerClient interface { NewConfigProvider(ctx context.Context, in *NewConfigProviderRequest, opts ...grpc.CallOption) (*NewConfigProviderReply, error) - NewMedianProvider(ctx context.Context, in *NewMedianProviderRequest, opts ...grpc.CallOption) (*NewMedianProviderReply, error) - NewMercuryProvider(ctx context.Context, in *NewMercuryProviderRequest, opts ...grpc.CallOption) (*NewMercuryProviderReply, error) + NewPluginProvider(ctx context.Context, in *NewPluginProviderRequest, opts ...grpc.CallOption) (*NewPluginProviderReply, error) GetChainStatus(ctx context.Context, in *GetChainStatusRequest, opts ...grpc.CallOption) (*GetChainStatusReply, error) ListNodeStatuses(ctx context.Context, in *ListNodeStatusesRequest, opts ...grpc.CallOption) (*ListNodeStatusesReply, error) Transact(ctx context.Context, in *TransactionRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) @@ -274,18 +272,9 @@ func (c *relayerClient) NewConfigProvider(ctx context.Context, in *NewConfigProv return out, nil } -func (c *relayerClient) NewMedianProvider(ctx context.Context, in *NewMedianProviderRequest, opts ...grpc.CallOption) (*NewMedianProviderReply, error) { - out := new(NewMedianProviderReply) - err := c.cc.Invoke(ctx, Relayer_NewMedianProvider_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *relayerClient) NewMercuryProvider(ctx context.Context, in *NewMercuryProviderRequest, opts ...grpc.CallOption) (*NewMercuryProviderReply, error) { - out := new(NewMercuryProviderReply) - err := c.cc.Invoke(ctx, Relayer_NewMercuryProvider_FullMethodName, in, out, opts...) +func (c *relayerClient) NewPluginProvider(ctx context.Context, in *NewPluginProviderRequest, opts ...grpc.CallOption) (*NewPluginProviderReply, error) { + out := new(NewPluginProviderReply) + err := c.cc.Invoke(ctx, Relayer_NewPluginProvider_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -324,8 +313,7 @@ func (c *relayerClient) Transact(ctx context.Context, in *TransactionRequest, op // for forward compatibility type RelayerServer interface { NewConfigProvider(context.Context, *NewConfigProviderRequest) (*NewConfigProviderReply, error) - NewMedianProvider(context.Context, *NewMedianProviderRequest) (*NewMedianProviderReply, error) - NewMercuryProvider(context.Context, *NewMercuryProviderRequest) (*NewMercuryProviderReply, error) + NewPluginProvider(context.Context, *NewPluginProviderRequest) (*NewPluginProviderReply, error) GetChainStatus(context.Context, *GetChainStatusRequest) (*GetChainStatusReply, error) ListNodeStatuses(context.Context, *ListNodeStatusesRequest) (*ListNodeStatusesReply, error) Transact(context.Context, *TransactionRequest) (*emptypb.Empty, error) @@ -339,11 +327,8 @@ type UnimplementedRelayerServer struct { func (UnimplementedRelayerServer) NewConfigProvider(context.Context, *NewConfigProviderRequest) (*NewConfigProviderReply, error) { return nil, status.Errorf(codes.Unimplemented, "method NewConfigProvider not implemented") } -func (UnimplementedRelayerServer) NewMedianProvider(context.Context, *NewMedianProviderRequest) (*NewMedianProviderReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method NewMedianProvider not implemented") -} -func (UnimplementedRelayerServer) NewMercuryProvider(context.Context, *NewMercuryProviderRequest) (*NewMercuryProviderReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method NewMercuryProvider not implemented") +func (UnimplementedRelayerServer) NewPluginProvider(context.Context, *NewPluginProviderRequest) (*NewPluginProviderReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method NewPluginProvider not implemented") } func (UnimplementedRelayerServer) GetChainStatus(context.Context, *GetChainStatusRequest) (*GetChainStatusReply, error) { return nil, status.Errorf(codes.Unimplemented, "method GetChainStatus not implemented") @@ -385,38 +370,20 @@ func _Relayer_NewConfigProvider_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } -func _Relayer_NewMedianProvider_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(NewMedianProviderRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RelayerServer).NewMedianProvider(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Relayer_NewMedianProvider_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RelayerServer).NewMedianProvider(ctx, req.(*NewMedianProviderRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Relayer_NewMercuryProvider_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(NewMercuryProviderRequest) +func _Relayer_NewPluginProvider_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NewPluginProviderRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(RelayerServer).NewMercuryProvider(ctx, in) + return srv.(RelayerServer).NewPluginProvider(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: Relayer_NewMercuryProvider_FullMethodName, + FullMethod: Relayer_NewPluginProvider_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RelayerServer).NewMercuryProvider(ctx, req.(*NewMercuryProviderRequest)) + return srv.(RelayerServer).NewPluginProvider(ctx, req.(*NewPluginProviderRequest)) } return interceptor(ctx, in, info, handler) } @@ -487,12 +454,8 @@ var Relayer_ServiceDesc = grpc.ServiceDesc{ Handler: _Relayer_NewConfigProvider_Handler, }, { - MethodName: "NewMedianProvider", - Handler: _Relayer_NewMedianProvider_Handler, - }, - { - MethodName: "NewMercuryProvider", - Handler: _Relayer_NewMercuryProvider_Handler, + MethodName: "NewPluginProvider", + Handler: _Relayer_NewPluginProvider_Handler, }, { MethodName: "GetChainStatus", diff --git a/pkg/loop/internal/plugin_provider.go b/pkg/loop/internal/plugin_provider.go new file mode 100644 index 000000000..18551b3d2 --- /dev/null +++ b/pkg/loop/internal/plugin_provider.go @@ -0,0 +1,25 @@ +package internal + +import ( + libocr "github.com/smartcontractkit/libocr/offchainreporting2plus/types" + "google.golang.org/grpc" + + "github.com/smartcontractkit/chainlink-relay/pkg/loop/internal/pb" +) + +type pluginProviderClient struct { + *configProviderClient + contractTransmitter libocr.ContractTransmitter +} + +func (p *pluginProviderClient) ClientConn() grpc.ClientConnInterface { return p.cc } + +func newPluginProviderClient(b *brokerExt, cc grpc.ClientConnInterface) *pluginProviderClient { + p := &pluginProviderClient{configProviderClient: newConfigProviderClient(b.withName("PluginProviderClient"), cc)} + p.contractTransmitter = &contractTransmitterClient{b, pb.NewContractTransmitterClient(p.cc)} + return p +} + +func (p *pluginProviderClient) ContractTransmitter() libocr.ContractTransmitter { + return p.contractTransmitter +} diff --git a/pkg/loop/internal/relayer.go b/pkg/loop/internal/relayer.go index c29894939..86824d559 100644 --- a/pkg/loop/internal/relayer.go +++ b/pkg/loop/internal/relayer.go @@ -184,15 +184,16 @@ func (r *relayerClient) NewConfigProvider(ctx context.Context, rargs types.Relay return newConfigProviderClient(r.withName("ConfigProviderClient"), cc), nil } -func (r *relayerClient) NewMedianProvider(ctx context.Context, rargs types.RelayArgs, pargs types.PluginArgs) (types.MedianProvider, error) { - cc := r.newClientConn("MedianProvider", func(ctx context.Context) (uint32, resources, error) { - reply, err := r.relayer.NewMedianProvider(ctx, &pb.NewMedianProviderRequest{ +func (r *relayerClient) NewPluginProvider(ctx context.Context, rargs types.RelayArgs, pargs types.PluginArgs) (types.PluginProvider, error) { + cc := r.newClientConn("PluginProvider", func(ctx context.Context) (uint32, resources, error) { + reply, err := r.relayer.NewPluginProvider(ctx, &pb.NewPluginProviderRequest{ RelayArgs: &pb.RelayArgs{ ExternalJobID: rargs.ExternalJobID[:], JobID: rargs.JobID, ContractID: rargs.ContractID, New: rargs.New, RelayConfig: rargs.RelayConfig, + ProviderType: rargs.ProviderType, }, PluginArgs: &pb.PluginArgs{ TransmitterID: pargs.TransmitterID, @@ -202,17 +203,20 @@ func (r *relayerClient) NewMedianProvider(ctx context.Context, rargs types.Relay if err != nil { return 0, nil, err } - return reply.MedianProviderID, nil, nil + return reply.PluginProviderID, nil, nil }) - return newMedianProviderClient(r.brokerExt, cc), nil -} - -func (r *relayerClient) NewMercuryProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.MercuryProvider, error) { - return nil, errors.New("mercury is not supported") -} -func (r *relayerClient) NewFunctionsProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.FunctionsProvider, error) { - return nil, errors.New("functions are not supported") + // TODO: Remove this when we have fully transitioned all relayers to running in LOOPPs. + // This allows callers to type assert a PluginProvider into a product provider type (eg. MedianProvider) + // for interoperability with legacy code. + switch rargs.ProviderType { + case string(types.Median): + return newMedianProviderClient(r.brokerExt, cc), nil + case string(types.GenericPlugin): + return newPluginProviderClient(r.brokerExt, cc), nil + default: + return nil, fmt.Errorf("provider type not supported: %s", rargs.ProviderType) + } } func (r *relayerClient) GetChainStatus(ctx context.Context) (types.ChainStatus, error) { @@ -306,27 +310,55 @@ func (r *relayerServer) NewConfigProvider(ctx context.Context, request *pb.NewCo return &pb.NewConfigProviderReply{ConfigProviderID: id}, nil } -func (r *relayerServer) NewMedianProvider(ctx context.Context, request *pb.NewMedianProviderRequest) (*pb.NewMedianProviderReply, error) { +func (r *relayerServer) NewPluginProvider(ctx context.Context, request *pb.NewPluginProviderRequest) (*pb.NewPluginProviderReply, error) { exJobID, err := uuid.FromBytes(request.RelayArgs.ExternalJobID) if err != nil { return nil, fmt.Errorf("invalid uuid bytes for ExternalJobID: %w", err) } - provider, err := r.impl.NewMedianProvider(ctx, types.RelayArgs{ + relayArgs := types.RelayArgs{ ExternalJobID: exJobID, JobID: request.RelayArgs.JobID, ContractID: request.RelayArgs.ContractID, New: request.RelayArgs.New, RelayConfig: request.RelayArgs.RelayConfig, - }, types.PluginArgs{ + ProviderType: request.RelayArgs.ProviderType, + } + pluginArgs := types.PluginArgs{ TransmitterID: request.PluginArgs.TransmitterID, PluginConfig: request.PluginArgs.PluginConfig, - }) + } + + switch request.RelayArgs.ProviderType { + case string(types.Median): + id, err := r.newMedianProvider(ctx, relayArgs, pluginArgs) + if err != nil { + return nil, err + } + return &pb.NewPluginProviderReply{PluginProviderID: id}, nil + case string(types.GenericPlugin): + id, err := r.newPluginProvider(ctx, relayArgs, pluginArgs) + if err != nil { + return nil, err + } + return &pb.NewPluginProviderReply{PluginProviderID: id}, nil + } + + return nil, fmt.Errorf("provider type not supported: %s", relayArgs.ProviderType) +} + +func (r *relayerServer) newMedianProvider(ctx context.Context, relayArgs types.RelayArgs, pluginArgs types.PluginArgs) (uint32, error) { + i, ok := r.impl.(MedianProvider) + if !ok { + return 0, errors.New("median not supported") + } + + provider, err := i.NewMedianProvider(ctx, relayArgs, pluginArgs) if err != nil { - return nil, err + return 0, err } err = provider.Start(ctx) if err != nil { - return nil, err + return 0, err } const name = "MedianProvider" providerRes := resource{name: name, Closer: provider} @@ -341,14 +373,35 @@ func (r *relayerServer) NewMedianProvider(ctx context.Context, request *pb.NewMe pb.RegisterOnchainConfigCodecServer(s, &onchainConfigCodecServer{impl: provider.OnchainConfigCodec()}) }, providerRes) if err != nil { - return nil, err + return 0, err } - return &pb.NewMedianProviderReply{MedianProviderID: id}, nil + return id, err } -func (r *relayerServer) NewMercuryProvider(ctx context.Context, request *pb.NewMercuryProviderRequest) (*pb.NewMercuryProviderReply, error) { - return nil, errors.New("mercury is not supported") +func (r *relayerServer) newPluginProvider(ctx context.Context, relayArgs types.RelayArgs, pluginArgs types.PluginArgs) (uint32, error) { + provider, err := r.impl.NewPluginProvider(ctx, relayArgs, pluginArgs) + if err != nil { + return 0, err + } + err = provider.Start(ctx) + if err != nil { + return 0, err + } + const name = "PluginProvider" + providerRes := resource{name: name, Closer: provider} + + id, _, err := r.serveNew(name, func(s *grpc.Server) { + pb.RegisterServiceServer(s, &serviceServer{srv: provider}) + pb.RegisterOffchainConfigDigesterServer(s, &offchainConfigDigesterServer{impl: provider.OffchainConfigDigester()}) + pb.RegisterContractConfigTrackerServer(s, &contractConfigTrackerServer{impl: provider.ContractConfigTracker()}) + pb.RegisterContractTransmitterServer(s, &contractTransmitterServer{impl: provider.ContractTransmitter()}) + }, providerRes) + if err != nil { + return 0, err + } + + return id, err } func (r *relayerServer) GetChainStatus(ctx context.Context, request *pb.GetChainStatusRequest) (*pb.GetChainStatusReply, error) { diff --git a/pkg/loop/internal/test/plugin_provider.go b/pkg/loop/internal/test/plugin_provider.go new file mode 100644 index 000000000..c9878832f --- /dev/null +++ b/pkg/loop/internal/test/plugin_provider.go @@ -0,0 +1,31 @@ +package test + +import ( + "context" + + libocr "github.com/smartcontractkit/libocr/offchainreporting2plus/types" +) + +type StaticPluginProvider struct{} + +func (s StaticPluginProvider) Start(ctx context.Context) error { return nil } + +func (s StaticPluginProvider) Close() error { return nil } + +func (s StaticPluginProvider) Ready() error { panic("unimplemented") } + +func (s StaticPluginProvider) Name() string { panic("unimplemented") } + +func (s StaticPluginProvider) HealthReport() map[string]error { panic("unimplemented") } + +func (s StaticPluginProvider) OffchainConfigDigester() libocr.OffchainConfigDigester { + return staticOffchainConfigDigester{} +} + +func (s StaticPluginProvider) ContractConfigTracker() libocr.ContractConfigTracker { + return staticContractConfigTracker{} +} + +func (s StaticPluginProvider) ContractTransmitter() libocr.ContractTransmitter { + return staticContractTransmitter{} +} diff --git a/pkg/loop/internal/test/relayer.go b/pkg/loop/internal/test/relayer.go index bce764324..12357e04e 100644 --- a/pkg/loop/internal/test/relayer.go +++ b/pkg/loop/internal/test/relayer.go @@ -76,7 +76,8 @@ func (s staticRelayer) NewConfigProvider(ctx context.Context, r types.RelayArgs) } func (s staticRelayer) NewMedianProvider(ctx context.Context, r types.RelayArgs, p types.PluginArgs) (types.MedianProvider, error) { - if !equalRelayArgs(r, RelayArgs) { + ra := newRelayArgsWithProviderType(types.Median) + if !equalRelayArgs(r, ra) { return nil, fmt.Errorf("expected relay args:\n\t%v\nbut got:\n\t%v", RelayArgs, r) } if !reflect.DeepEqual(PluginArgs, p) { @@ -85,12 +86,15 @@ func (s staticRelayer) NewMedianProvider(ctx context.Context, r types.RelayArgs, return StaticMedianProvider{}, nil } -func (s staticRelayer) NewMercuryProvider(ctx context.Context, rargs types.RelayArgs, pargs types.PluginArgs) (types.MercuryProvider, error) { - panic("unimplemented") -} - -func (s staticRelayer) NewFunctionsProvider(ctx context.Context, rargs types.RelayArgs, pargs types.PluginArgs) (types.FunctionsProvider, error) { - panic("unimplemented") +func (s staticRelayer) NewPluginProvider(ctx context.Context, r types.RelayArgs, p types.PluginArgs) (types.PluginProvider, error) { + ra := newRelayArgsWithProviderType(types.Median) + if !equalRelayArgs(r, ra) { + return nil, fmt.Errorf("expected relay args:\n\t%v\nbut got:\n\t%v", RelayArgs, r) + } + if !reflect.DeepEqual(PluginArgs, p) { + return nil, fmt.Errorf("expected plugin args %v but got %v", PluginArgs, p) + } + return StaticPluginProvider{}, nil } func (s staticRelayer) GetChainStatus(ctx context.Context) (types.ChainStatus, error) { @@ -133,6 +137,17 @@ func equalRelayArgs(a, b types.RelayArgs) bool { bytes.Equal(a.RelayConfig, b.RelayConfig) } +func newRelayArgsWithProviderType(_type types.OCR2PluginType) types.RelayArgs { + return types.RelayArgs{ + ExternalJobID: RelayArgs.ExternalJobID, + JobID: RelayArgs.JobID, + ContractID: RelayArgs.ContractID, + New: RelayArgs.New, + RelayConfig: RelayArgs.RelayConfig, + ProviderType: string(_type), + } +} + func TestPluginRelayer(t *testing.T, p internal.PluginRelayer) { ctx := utils.Context(t) @@ -183,7 +198,9 @@ func TestRelayer(t *testing.T, relayer internal.Relayer) { t.Run("MedianProvider", func(t *testing.T) { t.Parallel() - provider, err := relayer.NewMedianProvider(ctx, RelayArgs, PluginArgs) + ra := newRelayArgsWithProviderType(types.Median) + p, err := relayer.NewPluginProvider(ctx, ra, PluginArgs) + provider := p.(types.MedianProvider) require.NoError(t, err) require.NoError(t, provider.Start(ctx)) t.Cleanup(func() { assert.NoError(t, provider.Close()) }) @@ -270,6 +287,57 @@ func TestRelayer(t *testing.T, relayer internal.Relayer) { }) }) + t.Run("PluginProvider", func(t *testing.T) { + t.Parallel() + ra := newRelayArgsWithProviderType(types.GenericPlugin) + provider, err := relayer.NewPluginProvider(ctx, ra, PluginArgs) + require.NoError(t, err) + require.NoError(t, provider.Start(ctx)) + t.Cleanup(func() { assert.NoError(t, provider.Close()) }) + + t.Run("ReportingPluginProvider", func(t *testing.T) { + t.Parallel() + + t.Run("OffchainConfigDigester", func(t *testing.T) { + t.Parallel() + ocd := provider.OffchainConfigDigester() + gotConfigDigestPrefix, err := ocd.ConfigDigestPrefix() + require.NoError(t, err) + assert.Equal(t, configDigestPrefix, gotConfigDigestPrefix) + gotConfigDigest, err := ocd.ConfigDigest(contractConfig) + require.NoError(t, err) + assert.Equal(t, configDigest, gotConfigDigest) + }) + t.Run("ContractConfigTracker", func(t *testing.T) { + t.Parallel() + cct := provider.ContractConfigTracker() + gotBlockHeight, err := cct.LatestBlockHeight(ctx) + require.NoError(t, err) + assert.Equal(t, blockHeight, gotBlockHeight) + gotChangedInBlock, gotConfigDigest, err := cct.LatestConfigDetails(ctx) + require.NoError(t, err) + assert.Equal(t, changedInBlock, gotChangedInBlock) + assert.Equal(t, configDigest, gotConfigDigest) + gotContractConfig, err := cct.LatestConfig(ctx, changedInBlock) + require.NoError(t, err) + assert.Equal(t, contractConfig, gotContractConfig) + }) + t.Run("ContractTransmitter", func(t *testing.T) { + t.Parallel() + ct := provider.ContractTransmitter() + gotAccount, err := ct.FromAccount() + require.NoError(t, err) + assert.Equal(t, account, gotAccount) + gotConfigDigest, gotEpoch, err := ct.LatestConfigDigestAndEpoch(ctx) + require.NoError(t, err) + assert.Equal(t, configDigest, gotConfigDigest) + assert.Equal(t, epoch, gotEpoch) + err = ct.Transmit(ctx, reportContext, report, sigs) + require.NoError(t, err) + }) + }) + }) + t.Run("GetChainStatus", func(t *testing.T) { t.Parallel() gotChain, err := relayer.GetChainStatus(ctx) diff --git a/pkg/loop/internal/test/test.go b/pkg/loop/internal/test/test.go index bd9e6426f..3e814e9f6 100644 --- a/pkg/loop/internal/test/test.go +++ b/pkg/loop/internal/test/test.go @@ -85,6 +85,7 @@ URL = 'https://test.url' ContractID: "testcontract", New: true, RelayConfig: []byte{42: 11}, + ProviderType: string(types.Median), } report = libocr.Report{42: 101} reportContext = libocr.ReportContext{ diff --git a/pkg/loop/internal/types.go b/pkg/loop/internal/types.go index df2d43b05..f47648472 100644 --- a/pkg/loop/internal/types.go +++ b/pkg/loop/internal/types.go @@ -10,12 +10,22 @@ type PluginRelayer interface { NewRelayer(ctx context.Context, config string, keystore types.Keystore) (Relayer, error) } +type MedianProvider interface { + NewMedianProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.MedianProvider, error) +} + +type MercuryProvider interface { + NewMercuryProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.MercuryProvider, error) +} + +type FunctionsProvider interface { + NewFunctionsProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.FunctionsProvider, error) +} + // Relayer extends [types.Relayer] and includes [context.Context]s. type Relayer interface { types.ChainService NewConfigProvider(context.Context, types.RelayArgs) (types.ConfigProvider, error) - NewMedianProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.MedianProvider, error) - NewMercuryProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.MercuryProvider, error) - NewFunctionsProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.FunctionsProvider, error) + NewPluginProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.PluginProvider, error) } diff --git a/pkg/loop/plugin_median_test.go b/pkg/loop/plugin_median_test.go index 2abfe7ba8..dfb75cfff 100644 --- a/pkg/loop/plugin_median_test.go +++ b/pkg/loop/plugin_median_test.go @@ -69,9 +69,11 @@ func newMedianProvider(t *testing.T, pr loop.PluginRelayer) types.MedianProvider require.NoError(t, err) require.NoError(t, r.Start(ctx)) t.Cleanup(func() { assert.NoError(t, r.Close()) }) - p, err := r.NewMedianProvider(ctx, test.RelayArgs, test.PluginArgs) + p, err := r.NewPluginProvider(ctx, test.RelayArgs, test.PluginArgs) + mp, ok := p.(types.MedianProvider) + require.True(t, ok) require.NoError(t, err) - require.NoError(t, p.Start(ctx)) - t.Cleanup(func() { assert.NoError(t, p.Close()) }) - return p + require.NoError(t, mp.Start(ctx)) + t.Cleanup(func() { assert.NoError(t, mp.Close()) }) + return mp } diff --git a/pkg/loop/relayer_service.go b/pkg/loop/relayer_service.go index dd791312a..fd650cba7 100644 --- a/pkg/loop/relayer_service.go +++ b/pkg/loop/relayer_service.go @@ -49,25 +49,11 @@ func (r *RelayerService) NewConfigProvider(ctx context.Context, args types.Relay return r.service.NewConfigProvider(ctx, args) } -func (r *RelayerService) NewMedianProvider(ctx context.Context, rargs types.RelayArgs, pargs types.PluginArgs) (types.MedianProvider, error) { +func (r *RelayerService) NewPluginProvider(ctx context.Context, rargs types.RelayArgs, pargs types.PluginArgs) (types.PluginProvider, error) { if err := r.wait(ctx); err != nil { return nil, err } - return r.service.NewMedianProvider(ctx, rargs, pargs) -} - -func (r *RelayerService) NewMercuryProvider(ctx context.Context, rargs types.RelayArgs, pargs types.PluginArgs) (types.MercuryProvider, error) { - if err := r.wait(ctx); err != nil { - return nil, err - } - return r.service.NewMercuryProvider(ctx, rargs, pargs) -} - -func (r *RelayerService) NewFunctionsProvider(ctx context.Context, rargs types.RelayArgs, pargs types.PluginArgs) (types.FunctionsProvider, error) { - if err := r.wait(ctx); err != nil { - return nil, err - } - return r.service.NewFunctionsProvider(ctx, rargs, pargs) + return r.service.NewPluginProvider(ctx, rargs, pargs) } func (r *RelayerService) GetChainStatus(ctx context.Context) (types.ChainStatus, error) { diff --git a/pkg/types/plugin.go b/pkg/types/plugin.go new file mode 100644 index 000000000..e352ed40b --- /dev/null +++ b/pkg/types/plugin.go @@ -0,0 +1,16 @@ +package types + +// OCR2PluginType defines supported OCR2 plugin types. +type OCR2PluginType string + +const ( + Median OCR2PluginType = "median" + DKG OCR2PluginType = "dkg" + OCR2VRF OCR2PluginType = "ocr2vrf" + + // TODO: sc-55296 to rename ocr2keeper to ocr2automation in code + OCR2Keeper OCR2PluginType = "ocr2automation" + Functions OCR2PluginType = "functions" + Mercury OCR2PluginType = "mercury" + GenericPlugin OCR2PluginType = "plugin" +) diff --git a/pkg/types/provider_mercury.go b/pkg/types/provider_mercury.go index 0dea7ff8b..d9beda5db 100644 --- a/pkg/types/provider_mercury.go +++ b/pkg/types/provider_mercury.go @@ -10,10 +10,11 @@ import ( // MercuryProvider provides components needed for a mercury OCR2 plugin. // Mercury requires config tracking but does not transmit on-chain. type MercuryProvider interface { - ConfigProvider + PluginProvider + ReportCodecV1() v1.ReportCodec ReportCodecV2() v2.ReportCodec ReportCodecV3() v3.ReportCodec OnchainConfigCodec() mercury.OnchainConfigCodec - ContractTransmitter() mercury.Transmitter + MercuryServerFetcher() mercury.MercuryServerFetcher } diff --git a/pkg/types/relayer.go b/pkg/types/relayer.go index 3cdcc5088..2dcda62a9 100644 --- a/pkg/types/relayer.go +++ b/pkg/types/relayer.go @@ -21,6 +21,7 @@ type RelayArgs struct { ContractID string New bool // Whether this is a first time job add. RelayConfig []byte + ProviderType string } type ChainStatus struct {