From 921d2e58641dead8ca657b84d4c9a30f95ff5ddf Mon Sep 17 00:00:00 2001 From: Ulf Bjorkengren Date: Tue, 15 Oct 2024 16:00:24 +0200 Subject: [PATCH] Cleanup of VISSv2 remnants. Documentation update. Signed-off-by: Ulf Bjorkengren --- .../Javascript/appclient_commands.txt | 6 +- grpc_pb/README.md | 4 +- grpc_pb/{VISSv2.pb.go => VISSv3.pb.go} | 1125 +++++++------- grpc_pb/{VISSv2.proto => VISSv3.proto} | 14 +- .../{VISSv2_grpc.pb.go => VISSv3_grpc.pb.go} | 4 +- protobuf/README.md | 9 +- ...Sv2messages.proto => VISSv3messages.proto} | 14 +- ...Sv2messages.pb.go => VISSv3messages.pb.go} | 1317 ++++++++--------- server/ServerSignalSpecification.vspec | 163 ++ server/vissv2server/forest/server.binary | Bin 2674 -> 2663 bytes .../forest/{vss.binary => vss_v5.0.0.binary} | Bin .../forest/vss_vissv2-full-access.binary | Bin 169416 -> 0 bytes .../forest/vss_vissv2_vehicle.binary | Bin 169416 -> 0 bytes server/vissv2server/serviceMgr/serviceMgr.go | 10 - server/vissv2server/viss.him | 18 +- server/vissv2server/vissv2server.go | 22 +- tutorial/content/_index.md | 18 +- tutorial/content/build-system/_index.md | 3 +- tutorial/content/client/_index.md | 54 +- tutorial/content/datastore/_index.md | 24 +- tutorial/content/feeder/_index.md | 35 +- tutorial/content/server/_index.md | 42 +- utils/grcputils.go | 29 +- utils/pbutils.go | 33 +- 24 files changed, 1468 insertions(+), 1476 deletions(-) rename grpc_pb/{VISSv2.pb.go => VISSv3.pb.go} (64%) rename grpc_pb/{VISSv2.proto => VISSv3.proto} (93%) rename grpc_pb/{VISSv2_grpc.pb.go => VISSv3_grpc.pb.go} (99%) rename protobuf/{VISSv2messages.proto => VISSv3messages.proto} (93%) rename protobuf/protoc-out/{VISSv2messages.pb.go => VISSv3messages.pb.go} (62%) create mode 100644 server/ServerSignalSpecification.vspec rename server/vissv2server/forest/{vss.binary => vss_v5.0.0.binary} (100%) delete mode 100644 server/vissv2server/forest/vss_vissv2-full-access.binary delete mode 100644 server/vissv2server/forest/vss_vissv2_vehicle.binary diff --git a/client/client-1.0/Javascript/appclient_commands.txt b/client/client-1.0/Javascript/appclient_commands.txt index 2fcdd595..635f7045 100644 --- a/client/client-1.0/Javascript/appclient_commands.txt +++ b/client/client-1.0/Javascript/appclient_commands.txt @@ -27,9 +27,7 @@ Get request with AT token (XXX must be replaced with actual token): {"action":"get","path":"Vehicle.Body.BodyType","authorization":"XXX","requestId":"243"} Metadata request: -{"action":"get","path":"Vehicle/ADAS/ABS","filter":{"type":"static-metadata","parameter":""},"requestId":"244"} -{"action":"get","path":"Vehicle","filter":{"type":"dynamic-metadata","parameter":"server_capabilities"},"requestId":"244"} -{"action":"get","path":"Vehicle/ADAS","filter":[{"type":"paths","parameter":["ABS/*","CruiseControl/Error"]},{"type":"dynamic-metadata","parameter":"availability"}],"requestId":"237"} +{"action":"get","path":"Vehicle/ADAS/ABS","filter":{"type":"metadata","parameter":""},"requestId":"244"} Set request: {"action":"set", "path":"Vehicle/Cabin/Door/Row1/PassengerSide/IsOpen", "value":"999", "requestId":"245"} @@ -70,7 +68,7 @@ Payload: 0.123 Service discovery request: HTTP GET -URL: Vehicle/ADAS/ABS?filter={"type":"static-metadata", "parameter":""} +URL: Vehicle/ADAS/ABS?filter={"type":"metadata", "parameter":""} // ********* Access control testing ************* // requires that a binary VSS file has been generated with "validate" tags added into vspec file(s) for the requested signals. diff --git a/grpc_pb/README.md b/grpc_pb/README.md index 852b0237..727a7026 100644 --- a/grpc_pb/README.md +++ b/grpc_pb/README.md @@ -4,8 +4,8 @@ The gRPC implementation is payload compatible with the Websocket and MQTT implementations. -The following command builds the VISSv2.proto file: +The following command builds the VISSv3.proto file: -protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative VISSv2.proto +protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative VISSv3.proto diff --git a/grpc_pb/VISSv2.pb.go b/grpc_pb/VISSv3.pb.go similarity index 64% rename from grpc_pb/VISSv2.pb.go rename to grpc_pb/VISSv3.pb.go index 4fe23d58..db52a720 100644 --- a/grpc_pb/VISSv2.pb.go +++ b/grpc_pb/VISSv3.pb.go @@ -10,7 +10,7 @@ // versions: // protoc-gen-go v1.31.0 // protoc v3.15.8 -// source: VISSv2.proto +// source: VISSv3.proto package __ @@ -58,11 +58,11 @@ func (x ResponseStatus) String() string { } func (ResponseStatus) Descriptor() protoreflect.EnumDescriptor { - return file_VISSv2_proto_enumTypes[0].Descriptor() + return file_VISSv3_proto_enumTypes[0].Descriptor() } func (ResponseStatus) Type() protoreflect.EnumType { - return &file_VISSv2_proto_enumTypes[0] + return &file_VISSv3_proto_enumTypes[0] } func (x ResponseStatus) Number() protoreflect.EnumNumber { @@ -71,7 +71,7 @@ func (x ResponseStatus) Number() protoreflect.EnumNumber { // Deprecated: Use ResponseStatus.Descriptor instead. func (ResponseStatus) EnumDescriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{0} + return file_VISSv3_proto_rawDescGZIP(), []int{0} } type SubscribeResponseType int32 @@ -104,11 +104,11 @@ func (x SubscribeResponseType) String() string { } func (SubscribeResponseType) Descriptor() protoreflect.EnumDescriptor { - return file_VISSv2_proto_enumTypes[1].Descriptor() + return file_VISSv3_proto_enumTypes[1].Descriptor() } func (SubscribeResponseType) Type() protoreflect.EnumType { - return &file_VISSv2_proto_enumTypes[1] + return &file_VISSv3_proto_enumTypes[1] } func (x SubscribeResponseType) Number() protoreflect.EnumNumber { @@ -117,20 +117,19 @@ func (x SubscribeResponseType) Number() protoreflect.EnumNumber { // Deprecated: Use SubscribeResponseType.Descriptor instead. func (SubscribeResponseType) EnumDescriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{1} + return file_VISSv3_proto_rawDescGZIP(), []int{1} } type FilterExpressions_FilterExpression_FilterType int32 const ( - FilterExpressions_FilterExpression_PATHS FilterExpressions_FilterExpression_FilterType = 0 - FilterExpressions_FilterExpression_TIMEBASED FilterExpressions_FilterExpression_FilterType = 1 - FilterExpressions_FilterExpression_RANGE FilterExpressions_FilterExpression_FilterType = 2 - FilterExpressions_FilterExpression_CHANGE FilterExpressions_FilterExpression_FilterType = 3 - FilterExpressions_FilterExpression_CURVELOG FilterExpressions_FilterExpression_FilterType = 4 - FilterExpressions_FilterExpression_HISTORY FilterExpressions_FilterExpression_FilterType = 5 - FilterExpressions_FilterExpression_STATIC_METADATA FilterExpressions_FilterExpression_FilterType = 6 - FilterExpressions_FilterExpression_DYNAMIC_METADATA FilterExpressions_FilterExpression_FilterType = 7 + FilterExpressions_FilterExpression_PATHS FilterExpressions_FilterExpression_FilterType = 0 + FilterExpressions_FilterExpression_TIMEBASED FilterExpressions_FilterExpression_FilterType = 1 + FilterExpressions_FilterExpression_RANGE FilterExpressions_FilterExpression_FilterType = 2 + FilterExpressions_FilterExpression_CHANGE FilterExpressions_FilterExpression_FilterType = 3 + FilterExpressions_FilterExpression_CURVELOG FilterExpressions_FilterExpression_FilterType = 4 + FilterExpressions_FilterExpression_HISTORY FilterExpressions_FilterExpression_FilterType = 5 + FilterExpressions_FilterExpression_METADATA FilterExpressions_FilterExpression_FilterType = 6 ) // Enum value maps for FilterExpressions_FilterExpression_FilterType. @@ -142,18 +141,16 @@ var ( 3: "CHANGE", 4: "CURVELOG", 5: "HISTORY", - 6: "STATIC_METADATA", - 7: "DYNAMIC_METADATA", + 6: "METADATA", } FilterExpressions_FilterExpression_FilterType_value = map[string]int32{ - "PATHS": 0, - "TIMEBASED": 1, - "RANGE": 2, - "CHANGE": 3, - "CURVELOG": 4, - "HISTORY": 5, - "STATIC_METADATA": 6, - "DYNAMIC_METADATA": 7, + "PATHS": 0, + "TIMEBASED": 1, + "RANGE": 2, + "CHANGE": 3, + "CURVELOG": 4, + "HISTORY": 5, + "METADATA": 6, } ) @@ -168,11 +165,11 @@ func (x FilterExpressions_FilterExpression_FilterType) String() string { } func (FilterExpressions_FilterExpression_FilterType) Descriptor() protoreflect.EnumDescriptor { - return file_VISSv2_proto_enumTypes[2].Descriptor() + return file_VISSv3_proto_enumTypes[2].Descriptor() } func (FilterExpressions_FilterExpression_FilterType) Type() protoreflect.EnumType { - return &file_VISSv2_proto_enumTypes[2] + return &file_VISSv3_proto_enumTypes[2] } func (x FilterExpressions_FilterExpression_FilterType) Number() protoreflect.EnumNumber { @@ -181,7 +178,7 @@ func (x FilterExpressions_FilterExpression_FilterType) Number() protoreflect.Enu // Deprecated: Use FilterExpressions_FilterExpression_FilterType.Descriptor instead. func (FilterExpressions_FilterExpression_FilterType) EnumDescriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{1, 0, 0} + return file_VISSv3_proto_rawDescGZIP(), []int{1, 0, 0} } type ErrorResponseMessage struct { @@ -197,7 +194,7 @@ type ErrorResponseMessage struct { func (x *ErrorResponseMessage) Reset() { *x = ErrorResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[0] + mi := &file_VISSv3_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -210,7 +207,7 @@ func (x *ErrorResponseMessage) String() string { func (*ErrorResponseMessage) ProtoMessage() {} func (x *ErrorResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[0] + mi := &file_VISSv3_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -223,7 +220,7 @@ func (x *ErrorResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ErrorResponseMessage.ProtoReflect.Descriptor instead. func (*ErrorResponseMessage) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{0} + return file_VISSv3_proto_rawDescGZIP(), []int{0} } func (x *ErrorResponseMessage) GetNumber() string { @@ -258,7 +255,7 @@ type FilterExpressions struct { func (x *FilterExpressions) Reset() { *x = FilterExpressions{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[1] + mi := &file_VISSv3_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -271,7 +268,7 @@ func (x *FilterExpressions) String() string { func (*FilterExpressions) ProtoMessage() {} func (x *FilterExpressions) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[1] + mi := &file_VISSv3_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -284,7 +281,7 @@ func (x *FilterExpressions) ProtoReflect() protoreflect.Message { // Deprecated: Use FilterExpressions.ProtoReflect.Descriptor instead. func (*FilterExpressions) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{1} + return file_VISSv3_proto_rawDescGZIP(), []int{1} } func (x *FilterExpressions) GetFilterExp() []*FilterExpressions_FilterExpression { @@ -305,7 +302,7 @@ type DataPackages struct { func (x *DataPackages) Reset() { *x = DataPackages{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[2] + mi := &file_VISSv3_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -318,7 +315,7 @@ func (x *DataPackages) String() string { func (*DataPackages) ProtoMessage() {} func (x *DataPackages) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[2] + mi := &file_VISSv3_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -331,7 +328,7 @@ func (x *DataPackages) ProtoReflect() protoreflect.Message { // Deprecated: Use DataPackages.ProtoReflect.Descriptor instead. func (*DataPackages) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{2} + return file_VISSv3_proto_rawDescGZIP(), []int{2} } func (x *DataPackages) GetData() []*DataPackages_DataPackage { @@ -355,7 +352,7 @@ type GetRequestMessage struct { func (x *GetRequestMessage) Reset() { *x = GetRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[3] + mi := &file_VISSv3_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -368,7 +365,7 @@ func (x *GetRequestMessage) String() string { func (*GetRequestMessage) ProtoMessage() {} func (x *GetRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[3] + mi := &file_VISSv3_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -381,7 +378,7 @@ func (x *GetRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRequestMessage.ProtoReflect.Descriptor instead. func (*GetRequestMessage) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{3} + return file_VISSv3_proto_rawDescGZIP(), []int{3} } func (x *GetRequestMessage) GetPath() string { @@ -429,7 +426,7 @@ type GetResponseMessage struct { func (x *GetResponseMessage) Reset() { *x = GetResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[4] + mi := &file_VISSv3_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -442,7 +439,7 @@ func (x *GetResponseMessage) String() string { func (*GetResponseMessage) ProtoMessage() {} func (x *GetResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[4] + mi := &file_VISSv3_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -455,7 +452,7 @@ func (x *GetResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetResponseMessage.ProtoReflect.Descriptor instead. func (*GetResponseMessage) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{4} + return file_VISSv3_proto_rawDescGZIP(), []int{4} } func (x *GetResponseMessage) GetStatus() ResponseStatus { @@ -521,7 +518,7 @@ type SetRequestMessage struct { func (x *SetRequestMessage) Reset() { *x = SetRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[5] + mi := &file_VISSv3_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -534,7 +531,7 @@ func (x *SetRequestMessage) String() string { func (*SetRequestMessage) ProtoMessage() {} func (x *SetRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[5] + mi := &file_VISSv3_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -547,7 +544,7 @@ func (x *SetRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use SetRequestMessage.ProtoReflect.Descriptor instead. func (*SetRequestMessage) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{5} + return file_VISSv3_proto_rawDescGZIP(), []int{5} } func (x *SetRequestMessage) GetPath() string { @@ -593,7 +590,7 @@ type SetResponseMessage struct { func (x *SetResponseMessage) Reset() { *x = SetResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[6] + mi := &file_VISSv3_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -606,7 +603,7 @@ func (x *SetResponseMessage) String() string { func (*SetResponseMessage) ProtoMessage() {} func (x *SetResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[6] + mi := &file_VISSv3_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -619,7 +616,7 @@ func (x *SetResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use SetResponseMessage.ProtoReflect.Descriptor instead. func (*SetResponseMessage) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{6} + return file_VISSv3_proto_rawDescGZIP(), []int{6} } func (x *SetResponseMessage) GetStatus() ResponseStatus { @@ -671,7 +668,7 @@ type SubscribeRequestMessage struct { func (x *SubscribeRequestMessage) Reset() { *x = SubscribeRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[7] + mi := &file_VISSv3_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -684,7 +681,7 @@ func (x *SubscribeRequestMessage) String() string { func (*SubscribeRequestMessage) ProtoMessage() {} func (x *SubscribeRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[7] + mi := &file_VISSv3_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -697,7 +694,7 @@ func (x *SubscribeRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeRequestMessage.ProtoReflect.Descriptor instead. func (*SubscribeRequestMessage) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{7} + return file_VISSv3_proto_rawDescGZIP(), []int{7} } func (x *SubscribeRequestMessage) GetPath() string { @@ -742,7 +739,7 @@ type SubscribeStreamMessage struct { func (x *SubscribeStreamMessage) Reset() { *x = SubscribeStreamMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[8] + mi := &file_VISSv3_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -755,7 +752,7 @@ func (x *SubscribeStreamMessage) String() string { func (*SubscribeStreamMessage) ProtoMessage() {} func (x *SubscribeStreamMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[8] + mi := &file_VISSv3_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -768,7 +765,7 @@ func (x *SubscribeStreamMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeStreamMessage.ProtoReflect.Descriptor instead. func (*SubscribeStreamMessage) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{8} + return file_VISSv3_proto_rawDescGZIP(), []int{8} } func (x *SubscribeStreamMessage) GetMType() SubscribeResponseType { @@ -811,7 +808,7 @@ type UnsubscribeRequestMessage struct { func (x *UnsubscribeRequestMessage) Reset() { *x = UnsubscribeRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[9] + mi := &file_VISSv3_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -824,7 +821,7 @@ func (x *UnsubscribeRequestMessage) String() string { func (*UnsubscribeRequestMessage) ProtoMessage() {} func (x *UnsubscribeRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[9] + mi := &file_VISSv3_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -837,7 +834,7 @@ func (x *UnsubscribeRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use UnsubscribeRequestMessage.ProtoReflect.Descriptor instead. func (*UnsubscribeRequestMessage) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{9} + return file_VISSv3_proto_rawDescGZIP(), []int{9} } func (x *UnsubscribeRequestMessage) GetSubscriptionId() string { @@ -869,7 +866,7 @@ type UnsubscribeResponseMessage struct { func (x *UnsubscribeResponseMessage) Reset() { *x = UnsubscribeResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[10] + mi := &file_VISSv3_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -882,7 +879,7 @@ func (x *UnsubscribeResponseMessage) String() string { func (*UnsubscribeResponseMessage) ProtoMessage() {} func (x *UnsubscribeResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[10] + mi := &file_VISSv3_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -895,7 +892,7 @@ func (x *UnsubscribeResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use UnsubscribeResponseMessage.ProtoReflect.Descriptor instead. func (*UnsubscribeResponseMessage) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{10} + return file_VISSv3_proto_rawDescGZIP(), []int{10} } func (x *UnsubscribeResponseMessage) GetSubscriptionId() string { @@ -945,7 +942,7 @@ type FilterExpressions_FilterExpression struct { func (x *FilterExpressions_FilterExpression) Reset() { *x = FilterExpressions_FilterExpression{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[11] + mi := &file_VISSv3_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -958,7 +955,7 @@ func (x *FilterExpressions_FilterExpression) String() string { func (*FilterExpressions_FilterExpression) ProtoMessage() {} func (x *FilterExpressions_FilterExpression) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[11] + mi := &file_VISSv3_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -971,7 +968,7 @@ func (x *FilterExpressions_FilterExpression) ProtoReflect() protoreflect.Message // Deprecated: Use FilterExpressions_FilterExpression.ProtoReflect.Descriptor instead. func (*FilterExpressions_FilterExpression) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{1, 0} + return file_VISSv3_proto_rawDescGZIP(), []int{1, 0} } func (x *FilterExpressions_FilterExpression) GetFType() FilterExpressions_FilterExpression_FilterType { @@ -993,20 +990,19 @@ type FilterExpressions_FilterExpression_FilterValue struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ValuePaths *FilterExpressions_FilterExpression_FilterValue_PathsValue `protobuf:"bytes,1,opt,name=ValuePaths,proto3,oneof" json:"ValuePaths,omitempty"` - ValueTimebased *FilterExpressions_FilterExpression_FilterValue_TimebasedValue `protobuf:"bytes,2,opt,name=ValueTimebased,proto3,oneof" json:"ValueTimebased,omitempty"` - ValueRange []*FilterExpressions_FilterExpression_FilterValue_RangeValue `protobuf:"bytes,3,rep,name=ValueRange,proto3" json:"ValueRange,omitempty"` - ValueChange *FilterExpressions_FilterExpression_FilterValue_ChangeValue `protobuf:"bytes,4,opt,name=ValueChange,proto3,oneof" json:"ValueChange,omitempty"` - ValueCurvelog *FilterExpressions_FilterExpression_FilterValue_CurvelogValue `protobuf:"bytes,5,opt,name=ValueCurvelog,proto3,oneof" json:"ValueCurvelog,omitempty"` - ValueHistory *FilterExpressions_FilterExpression_FilterValue_HistoryValue `protobuf:"bytes,6,opt,name=ValueHistory,proto3,oneof" json:"ValueHistory,omitempty"` - ValueStaticMetadata *FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue `protobuf:"bytes,7,opt,name=ValueStaticMetadata,proto3,oneof" json:"ValueStaticMetadata,omitempty"` - ValueDynamicMetadata *FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue `protobuf:"bytes,8,opt,name=ValueDynamicMetadata,proto3,oneof" json:"ValueDynamicMetadata,omitempty"` + ValuePaths *FilterExpressions_FilterExpression_FilterValue_PathsValue `protobuf:"bytes,1,opt,name=ValuePaths,proto3,oneof" json:"ValuePaths,omitempty"` + ValueTimebased *FilterExpressions_FilterExpression_FilterValue_TimebasedValue `protobuf:"bytes,2,opt,name=ValueTimebased,proto3,oneof" json:"ValueTimebased,omitempty"` + ValueRange []*FilterExpressions_FilterExpression_FilterValue_RangeValue `protobuf:"bytes,3,rep,name=ValueRange,proto3" json:"ValueRange,omitempty"` + ValueChange *FilterExpressions_FilterExpression_FilterValue_ChangeValue `protobuf:"bytes,4,opt,name=ValueChange,proto3,oneof" json:"ValueChange,omitempty"` + ValueCurvelog *FilterExpressions_FilterExpression_FilterValue_CurvelogValue `protobuf:"bytes,5,opt,name=ValueCurvelog,proto3,oneof" json:"ValueCurvelog,omitempty"` + ValueHistory *FilterExpressions_FilterExpression_FilterValue_HistoryValue `protobuf:"bytes,6,opt,name=ValueHistory,proto3,oneof" json:"ValueHistory,omitempty"` + ValueMetadata *FilterExpressions_FilterExpression_FilterValue_MetadataValue `protobuf:"bytes,7,opt,name=ValueMetadata,proto3,oneof" json:"ValueMetadata,omitempty"` } func (x *FilterExpressions_FilterExpression_FilterValue) Reset() { *x = FilterExpressions_FilterExpression_FilterValue{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[12] + mi := &file_VISSv3_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1019,7 +1015,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue) String() string { func (*FilterExpressions_FilterExpression_FilterValue) ProtoMessage() {} func (x *FilterExpressions_FilterExpression_FilterValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[12] + mi := &file_VISSv3_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1032,7 +1028,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue) ProtoReflect() protoref // Deprecated: Use FilterExpressions_FilterExpression_FilterValue.ProtoReflect.Descriptor instead. func (*FilterExpressions_FilterExpression_FilterValue) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{1, 0, 0} + return file_VISSv3_proto_rawDescGZIP(), []int{1, 0, 0} } func (x *FilterExpressions_FilterExpression_FilterValue) GetValuePaths() *FilterExpressions_FilterExpression_FilterValue_PathsValue { @@ -1077,16 +1073,9 @@ func (x *FilterExpressions_FilterExpression_FilterValue) GetValueHistory() *Filt return nil } -func (x *FilterExpressions_FilterExpression_FilterValue) GetValueStaticMetadata() *FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue { +func (x *FilterExpressions_FilterExpression_FilterValue) GetValueMetadata() *FilterExpressions_FilterExpression_FilterValue_MetadataValue { if x != nil { - return x.ValueStaticMetadata - } - return nil -} - -func (x *FilterExpressions_FilterExpression_FilterValue) GetValueDynamicMetadata() *FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue { - if x != nil { - return x.ValueDynamicMetadata + return x.ValueMetadata } return nil } @@ -1102,7 +1091,7 @@ type FilterExpressions_FilterExpression_FilterValue_PathsValue struct { func (x *FilterExpressions_FilterExpression_FilterValue_PathsValue) Reset() { *x = FilterExpressions_FilterExpression_FilterValue_PathsValue{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[13] + mi := &file_VISSv3_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1115,7 +1104,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_PathsValue) String() str func (*FilterExpressions_FilterExpression_FilterValue_PathsValue) ProtoMessage() {} func (x *FilterExpressions_FilterExpression_FilterValue_PathsValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[13] + mi := &file_VISSv3_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1128,7 +1117,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_PathsValue) ProtoReflect // Deprecated: Use FilterExpressions_FilterExpression_FilterValue_PathsValue.ProtoReflect.Descriptor instead. func (*FilterExpressions_FilterExpression_FilterValue_PathsValue) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{1, 0, 0, 0} + return file_VISSv3_proto_rawDescGZIP(), []int{1, 0, 0, 0} } func (x *FilterExpressions_FilterExpression_FilterValue_PathsValue) GetRelativePath() []string { @@ -1149,7 +1138,7 @@ type FilterExpressions_FilterExpression_FilterValue_TimebasedValue struct { func (x *FilterExpressions_FilterExpression_FilterValue_TimebasedValue) Reset() { *x = FilterExpressions_FilterExpression_FilterValue_TimebasedValue{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[14] + mi := &file_VISSv3_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1162,7 +1151,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_TimebasedValue) String() func (*FilterExpressions_FilterExpression_FilterValue_TimebasedValue) ProtoMessage() {} func (x *FilterExpressions_FilterExpression_FilterValue_TimebasedValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[14] + mi := &file_VISSv3_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1175,7 +1164,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_TimebasedValue) ProtoRef // Deprecated: Use FilterExpressions_FilterExpression_FilterValue_TimebasedValue.ProtoReflect.Descriptor instead. func (*FilterExpressions_FilterExpression_FilterValue_TimebasedValue) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{1, 0, 0, 1} + return file_VISSv3_proto_rawDescGZIP(), []int{1, 0, 0, 1} } func (x *FilterExpressions_FilterExpression_FilterValue_TimebasedValue) GetPeriod() string { @@ -1197,7 +1186,7 @@ type FilterExpressions_FilterExpression_FilterValue_RangeValue struct { func (x *FilterExpressions_FilterExpression_FilterValue_RangeValue) Reset() { *x = FilterExpressions_FilterExpression_FilterValue_RangeValue{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[15] + mi := &file_VISSv3_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1210,7 +1199,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_RangeValue) String() str func (*FilterExpressions_FilterExpression_FilterValue_RangeValue) ProtoMessage() {} func (x *FilterExpressions_FilterExpression_FilterValue_RangeValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[15] + mi := &file_VISSv3_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1223,7 +1212,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_RangeValue) ProtoReflect // Deprecated: Use FilterExpressions_FilterExpression_FilterValue_RangeValue.ProtoReflect.Descriptor instead. func (*FilterExpressions_FilterExpression_FilterValue_RangeValue) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{1, 0, 0, 2} + return file_VISSv3_proto_rawDescGZIP(), []int{1, 0, 0, 2} } func (x *FilterExpressions_FilterExpression_FilterValue_RangeValue) GetLogicOperator() string { @@ -1252,7 +1241,7 @@ type FilterExpressions_FilterExpression_FilterValue_ChangeValue struct { func (x *FilterExpressions_FilterExpression_FilterValue_ChangeValue) Reset() { *x = FilterExpressions_FilterExpression_FilterValue_ChangeValue{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[16] + mi := &file_VISSv3_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1265,7 +1254,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_ChangeValue) String() st func (*FilterExpressions_FilterExpression_FilterValue_ChangeValue) ProtoMessage() {} func (x *FilterExpressions_FilterExpression_FilterValue_ChangeValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[16] + mi := &file_VISSv3_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1278,7 +1267,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_ChangeValue) ProtoReflec // Deprecated: Use FilterExpressions_FilterExpression_FilterValue_ChangeValue.ProtoReflect.Descriptor instead. func (*FilterExpressions_FilterExpression_FilterValue_ChangeValue) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{1, 0, 0, 3} + return file_VISSv3_proto_rawDescGZIP(), []int{1, 0, 0, 3} } func (x *FilterExpressions_FilterExpression_FilterValue_ChangeValue) GetLogicOperator() string { @@ -1307,7 +1296,7 @@ type FilterExpressions_FilterExpression_FilterValue_CurvelogValue struct { func (x *FilterExpressions_FilterExpression_FilterValue_CurvelogValue) Reset() { *x = FilterExpressions_FilterExpression_FilterValue_CurvelogValue{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[17] + mi := &file_VISSv3_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1320,7 +1309,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_CurvelogValue) String() func (*FilterExpressions_FilterExpression_FilterValue_CurvelogValue) ProtoMessage() {} func (x *FilterExpressions_FilterExpression_FilterValue_CurvelogValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[17] + mi := &file_VISSv3_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1333,7 +1322,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_CurvelogValue) ProtoRefl // Deprecated: Use FilterExpressions_FilterExpression_FilterValue_CurvelogValue.ProtoReflect.Descriptor instead. func (*FilterExpressions_FilterExpression_FilterValue_CurvelogValue) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{1, 0, 0, 4} + return file_VISSv3_proto_rawDescGZIP(), []int{1, 0, 0, 4} } func (x *FilterExpressions_FilterExpression_FilterValue_CurvelogValue) GetMaxErr() string { @@ -1361,7 +1350,7 @@ type FilterExpressions_FilterExpression_FilterValue_HistoryValue struct { func (x *FilterExpressions_FilterExpression_FilterValue_HistoryValue) Reset() { *x = FilterExpressions_FilterExpression_FilterValue_HistoryValue{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[18] + mi := &file_VISSv3_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1374,7 +1363,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_HistoryValue) String() s func (*FilterExpressions_FilterExpression_FilterValue_HistoryValue) ProtoMessage() {} func (x *FilterExpressions_FilterExpression_FilterValue_HistoryValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[18] + mi := &file_VISSv3_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1387,7 +1376,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_HistoryValue) ProtoRefle // Deprecated: Use FilterExpressions_FilterExpression_FilterValue_HistoryValue.ProtoReflect.Descriptor instead. func (*FilterExpressions_FilterExpression_FilterValue_HistoryValue) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{1, 0, 0, 5} + return file_VISSv3_proto_rawDescGZIP(), []int{1, 0, 0, 5} } func (x *FilterExpressions_FilterExpression_FilterValue_HistoryValue) GetTimePeriod() string { @@ -1397,7 +1386,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_HistoryValue) GetTimePer return "" } -type FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue struct { +type FilterExpressions_FilterExpression_FilterValue_MetadataValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1405,23 +1394,23 @@ type FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue struct { Tree string `protobuf:"bytes,1,opt,name=Tree,proto3" json:"Tree,omitempty"` } -func (x *FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue) Reset() { - *x = FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue{} +func (x *FilterExpressions_FilterExpression_FilterValue_MetadataValue) Reset() { + *x = FilterExpressions_FilterExpression_FilterValue_MetadataValue{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[19] + mi := &file_VISSv3_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue) String() string { +func (x *FilterExpressions_FilterExpression_FilterValue_MetadataValue) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue) ProtoMessage() {} +func (*FilterExpressions_FilterExpression_FilterValue_MetadataValue) ProtoMessage() {} -func (x *FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[19] +func (x *FilterExpressions_FilterExpression_FilterValue_MetadataValue) ProtoReflect() protoreflect.Message { + mi := &file_VISSv3_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1432,65 +1421,18 @@ func (x *FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue) Pro return mi.MessageOf(x) } -// Deprecated: Use FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue.ProtoReflect.Descriptor instead. -func (*FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{1, 0, 0, 6} +// Deprecated: Use FilterExpressions_FilterExpression_FilterValue_MetadataValue.ProtoReflect.Descriptor instead. +func (*FilterExpressions_FilterExpression_FilterValue_MetadataValue) Descriptor() ([]byte, []int) { + return file_VISSv3_proto_rawDescGZIP(), []int{1, 0, 0, 6} } -func (x *FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue) GetTree() string { +func (x *FilterExpressions_FilterExpression_FilterValue_MetadataValue) GetTree() string { if x != nil { return x.Tree } return "" } -type FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MetadataDomain string `protobuf:"bytes,1,opt,name=MetadataDomain,proto3" json:"MetadataDomain,omitempty"` -} - -func (x *FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue) Reset() { - *x = FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue{} - if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue) ProtoMessage() {} - -func (x *FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue.ProtoReflect.Descriptor instead. -func (*FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{1, 0, 0, 7} -} - -func (x *FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue) GetMetadataDomain() string { - if x != nil { - return x.MetadataDomain - } - return "" -} - type DataPackages_DataPackage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1504,7 +1446,7 @@ type DataPackages_DataPackage struct { func (x *DataPackages_DataPackage) Reset() { *x = DataPackages_DataPackage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[21] + mi := &file_VISSv3_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1517,7 +1459,7 @@ func (x *DataPackages_DataPackage) String() string { func (*DataPackages_DataPackage) ProtoMessage() {} func (x *DataPackages_DataPackage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[21] + mi := &file_VISSv3_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1530,7 +1472,7 @@ func (x *DataPackages_DataPackage) ProtoReflect() protoreflect.Message { // Deprecated: Use DataPackages_DataPackage.ProtoReflect.Descriptor instead. func (*DataPackages_DataPackage) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{2, 0} + return file_VISSv3_proto_rawDescGZIP(), []int{2, 0} } func (x *DataPackages_DataPackage) GetPath() string { @@ -1567,7 +1509,7 @@ type DataPackages_DataPackage_DataPoint struct { func (x *DataPackages_DataPackage_DataPoint) Reset() { *x = DataPackages_DataPackage_DataPoint{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[22] + mi := &file_VISSv3_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1580,7 +1522,7 @@ func (x *DataPackages_DataPackage_DataPoint) String() string { func (*DataPackages_DataPackage_DataPoint) ProtoMessage() {} func (x *DataPackages_DataPackage_DataPoint) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[22] + mi := &file_VISSv3_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1593,7 +1535,7 @@ func (x *DataPackages_DataPackage_DataPoint) ProtoReflect() protoreflect.Message // Deprecated: Use DataPackages_DataPackage_DataPoint.ProtoReflect.Descriptor instead. func (*DataPackages_DataPackage_DataPoint) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{2, 0, 0} + return file_VISSv3_proto_rawDescGZIP(), []int{2, 0, 0} } func (x *DataPackages_DataPackage_DataPoint) GetValue() string { @@ -1623,13 +1565,13 @@ type GetResponseMessage_SuccessResponseMessage struct { unknownFields protoimpl.UnknownFields DataPack *DataPackages `protobuf:"bytes,1,opt,name=DataPack,proto3,oneof" json:"DataPack,omitempty"` - Metadata *string `protobuf:"bytes,2,opt,name=Metadata,proto3,oneof" json:"Metadata,omitempty"` // replaces DataPack in static metadata and one dynamic metadata variant + Metadata *string `protobuf:"bytes,2,opt,name=Metadata,proto3,oneof" json:"Metadata,omitempty"` // replaces DataPack in metadata variant } func (x *GetResponseMessage_SuccessResponseMessage) Reset() { *x = GetResponseMessage_SuccessResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[23] + mi := &file_VISSv3_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1642,7 +1584,7 @@ func (x *GetResponseMessage_SuccessResponseMessage) String() string { func (*GetResponseMessage_SuccessResponseMessage) ProtoMessage() {} func (x *GetResponseMessage_SuccessResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[23] + mi := &file_VISSv3_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1655,7 +1597,7 @@ func (x *GetResponseMessage_SuccessResponseMessage) ProtoReflect() protoreflect. // Deprecated: Use GetResponseMessage_SuccessResponseMessage.ProtoReflect.Descriptor instead. func (*GetResponseMessage_SuccessResponseMessage) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{4, 0} + return file_VISSv3_proto_rawDescGZIP(), []int{4, 0} } func (x *GetResponseMessage_SuccessResponseMessage) GetDataPack() *DataPackages { @@ -1687,7 +1629,7 @@ type SubscribeStreamMessage_SubscribeResponseMessage struct { func (x *SubscribeStreamMessage_SubscribeResponseMessage) Reset() { *x = SubscribeStreamMessage_SubscribeResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[24] + mi := &file_VISSv3_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1700,7 +1642,7 @@ func (x *SubscribeStreamMessage_SubscribeResponseMessage) String() string { func (*SubscribeStreamMessage_SubscribeResponseMessage) ProtoMessage() {} func (x *SubscribeStreamMessage_SubscribeResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[24] + mi := &file_VISSv3_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1713,7 +1655,7 @@ func (x *SubscribeStreamMessage_SubscribeResponseMessage) ProtoReflect() protore // Deprecated: Use SubscribeStreamMessage_SubscribeResponseMessage.ProtoReflect.Descriptor instead. func (*SubscribeStreamMessage_SubscribeResponseMessage) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{8, 0} + return file_VISSv3_proto_rawDescGZIP(), []int{8, 0} } func (x *SubscribeStreamMessage_SubscribeResponseMessage) GetErrorResponse() *ErrorResponseMessage { @@ -1766,7 +1708,7 @@ type SubscribeStreamMessage_SubscribeEventMessage struct { func (x *SubscribeStreamMessage_SubscribeEventMessage) Reset() { *x = SubscribeStreamMessage_SubscribeEventMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[25] + mi := &file_VISSv3_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1779,7 +1721,7 @@ func (x *SubscribeStreamMessage_SubscribeEventMessage) String() string { func (*SubscribeStreamMessage_SubscribeEventMessage) ProtoMessage() {} func (x *SubscribeStreamMessage_SubscribeEventMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[25] + mi := &file_VISSv3_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1792,7 +1734,7 @@ func (x *SubscribeStreamMessage_SubscribeEventMessage) ProtoReflect() protorefle // Deprecated: Use SubscribeStreamMessage_SubscribeEventMessage.ProtoReflect.Descriptor instead. func (*SubscribeStreamMessage_SubscribeEventMessage) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{8, 1} + return file_VISSv3_proto_rawDescGZIP(), []int{8, 1} } func (x *SubscribeStreamMessage_SubscribeEventMessage) GetSubscriptionId() string { @@ -1841,7 +1783,7 @@ type SubscribeStreamMessage_SubscribeEventMessage_SuccessResponseMessage struct func (x *SubscribeStreamMessage_SubscribeEventMessage_SuccessResponseMessage) Reset() { *x = SubscribeStreamMessage_SubscribeEventMessage_SuccessResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2_proto_msgTypes[26] + mi := &file_VISSv3_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1854,7 +1796,7 @@ func (x *SubscribeStreamMessage_SubscribeEventMessage_SuccessResponseMessage) St func (*SubscribeStreamMessage_SubscribeEventMessage_SuccessResponseMessage) ProtoMessage() {} func (x *SubscribeStreamMessage_SubscribeEventMessage_SuccessResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2_proto_msgTypes[26] + mi := &file_VISSv3_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1867,7 +1809,7 @@ func (x *SubscribeStreamMessage_SubscribeEventMessage_SuccessResponseMessage) Pr // Deprecated: Use SubscribeStreamMessage_SubscribeEventMessage_SuccessResponseMessage.ProtoReflect.Descriptor instead. func (*SubscribeStreamMessage_SubscribeEventMessage_SuccessResponseMessage) Descriptor() ([]byte, []int) { - return file_VISSv2_proto_rawDescGZIP(), []int{8, 1, 0} + return file_VISSv3_proto_rawDescGZIP(), []int{8, 1, 0} } func (x *SubscribeStreamMessage_SubscribeEventMessage_SuccessResponseMessage) GetDataPack() *DataPackages { @@ -1877,10 +1819,10 @@ func (x *SubscribeStreamMessage_SubscribeEventMessage_SuccessResponseMessage) Ge return nil } -var File_VISSv2_proto protoreflect.FileDescriptor +var File_VISSv3_proto protoreflect.FileDescriptor -var file_VISSv2_proto_rawDesc = []byte{ - 0x0a, 0x0c, 0x56, 0x49, 0x53, 0x53, 0x76, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, +var file_VISSv3_proto_rawDesc = []byte{ + 0x0a, 0x0c, 0x56, 0x49, 0x53, 0x53, 0x76, 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x81, 0x01, 0x0a, 0x14, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, @@ -1890,14 +1832,14 @@ var file_VISSv2_proto_rawDesc = []byte{ 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x42, 0x0a, 0x0a, 0x08, - 0x5f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xab, 0x10, 0x0a, 0x11, 0x46, 0x69, 0x6c, + 0x5f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x80, 0x0e, 0x0a, 0x11, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x56, 0x0a, 0x09, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x1a, 0xbd, 0x0f, 0x0a, 0x10, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x1a, 0x92, 0x0d, 0x0a, 0x10, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x05, 0x46, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, @@ -1910,7 +1852,7 @@ var file_VISSv2_proto_rawDesc = []byte{ 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x1a, 0xeb, 0x0c, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x1a, 0xde, 0x0a, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x0a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x46, 0x69, @@ -1957,342 +1899,323 @@ var file_VISSv2_proto_rawDesc = []byte{ 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x04, 0x52, 0x0c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x88, 0x01, 0x01, - 0x12, 0x8f, 0x01, 0x0a, 0x13, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x58, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x05, 0x52, 0x13, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, - 0x01, 0x01, 0x12, 0x92, 0x01, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x79, 0x6e, 0x61, - 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x59, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, - 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x06, 0x52, 0x14, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x1a, 0x30, 0x0a, 0x0a, 0x50, 0x61, 0x74, 0x68, 0x73, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x52, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x1a, 0x28, 0x0a, 0x0e, 0x54, 0x69, 0x6d, - 0x65, 0x62, 0x61, 0x73, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x65, 0x72, - 0x69, 0x6f, 0x64, 0x1a, 0x4e, 0x0a, 0x0a, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x6f, 0x75, 0x6e, 0x64, - 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x42, 0x6f, 0x75, 0x6e, 0x64, - 0x61, 0x72, 0x79, 0x1a, 0x47, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x63, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x69, 0x66, 0x66, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x69, 0x66, 0x66, 0x1a, 0x41, 0x0a, 0x0d, - 0x43, 0x75, 0x72, 0x76, 0x65, 0x6c, 0x6f, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x4d, 0x61, 0x78, 0x45, 0x72, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4d, - 0x61, 0x78, 0x45, 0x72, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x75, 0x66, 0x53, 0x69, 0x7a, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x42, 0x75, 0x66, 0x53, 0x69, 0x7a, 0x65, 0x1a, - 0x2e, 0x0a, 0x0c, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x1e, 0x0a, 0x0a, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x1a, - 0x29, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x72, 0x65, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x72, 0x65, 0x65, 0x1a, 0x3e, 0x0a, 0x14, 0x44, 0x79, - 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x62, 0x61, 0x73, 0x65, 0x64, 0x42, 0x0e, 0x0a, 0x0c, - 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x10, 0x0a, 0x0e, - 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x75, 0x72, 0x76, 0x65, 0x6c, 0x6f, 0x67, 0x42, 0x0f, - 0x0a, 0x0d, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x42, - 0x16, 0x0a, 0x14, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x83, 0x01, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x09, 0x0a, 0x05, 0x50, 0x41, 0x54, 0x48, 0x53, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, - 0x4d, 0x45, 0x42, 0x41, 0x53, 0x45, 0x44, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x41, 0x4e, - 0x47, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x03, - 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x55, 0x52, 0x56, 0x45, 0x4c, 0x4f, 0x47, 0x10, 0x04, 0x12, 0x0b, - 0x0a, 0x07, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x52, 0x59, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x53, - 0x54, 0x41, 0x54, 0x49, 0x43, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x10, 0x06, - 0x12, 0x14, 0x0a, 0x10, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x4d, 0x45, 0x54, 0x41, - 0x44, 0x41, 0x54, 0x41, 0x10, 0x07, 0x22, 0xd1, 0x02, 0x0a, 0x0c, 0x44, 0x61, 0x74, 0x61, 0x50, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x1a, 0xfc, 0x01, 0x0a, 0x0b, - 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x50, - 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x50, 0x61, 0x74, - 0x68, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x50, 0x61, 0x74, 0x68, 0x43, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x05, 0x50, 0x61, 0x74, 0x68, 0x43, 0x88, 0x01, 0x01, 0x12, - 0x48, 0x0a, 0x02, 0x44, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, - 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x02, 0x44, 0x70, 0x1a, 0x5c, 0x0a, 0x09, 0x44, 0x61, 0x74, - 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x13, 0x0a, 0x02, - 0x54, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x54, 0x73, 0x88, 0x01, - 0x01, 0x12, 0x15, 0x0a, 0x03, 0x54, 0x73, 0x43, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, - 0x52, 0x03, 0x54, 0x73, 0x43, 0x88, 0x01, 0x01, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x54, 0x73, 0x42, - 0x06, 0x0a, 0x04, 0x5f, 0x54, 0x73, 0x43, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x50, 0x61, 0x74, 0x68, - 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x50, 0x61, 0x74, 0x68, 0x43, 0x22, 0xe6, 0x01, 0x0a, 0x11, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x50, 0x61, 0x74, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, - 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0d, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x01, 0x52, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x49, 0x64, 0x22, 0x83, 0x05, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x70, + 0x12, 0x7d, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x52, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x05, 0x52, 0x0d, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x1a, + 0x30, 0x0a, 0x0a, 0x50, 0x61, 0x74, 0x68, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, + 0x0c, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0c, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x68, 0x1a, 0x28, 0x0a, 0x0e, 0x54, 0x69, 0x6d, 0x65, 0x62, 0x61, 0x73, 0x65, 0x64, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x1a, 0x4e, 0x0a, 0x0a, 0x52, + 0x61, 0x6e, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, + 0x69, 0x63, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x1a, 0x0a, 0x08, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x1a, 0x47, 0x0a, 0x0b, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, + 0x67, 0x69, 0x63, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x12, 0x12, 0x0a, 0x04, 0x44, 0x69, 0x66, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x44, 0x69, 0x66, 0x66, 0x1a, 0x41, 0x0a, 0x0d, 0x43, 0x75, 0x72, 0x76, 0x65, 0x6c, 0x6f, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x45, 0x72, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x45, 0x72, 0x72, 0x12, 0x18, 0x0a, + 0x07, 0x42, 0x75, 0x66, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x42, 0x75, 0x66, 0x53, 0x69, 0x7a, 0x65, 0x1a, 0x2e, 0x0a, 0x0c, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x69, 0x6d, 0x65, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x54, 0x69, 0x6d, + 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x1a, 0x23, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x72, 0x65, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x72, 0x65, 0x65, 0x42, 0x0d, 0x0a, 0x0b, + 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x42, 0x11, 0x0a, 0x0f, 0x5f, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x62, 0x61, 0x73, 0x65, 0x64, 0x42, 0x0e, + 0x0a, 0x0c, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x10, + 0x0a, 0x0e, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x75, 0x72, 0x76, 0x65, 0x6c, 0x6f, 0x67, + 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x66, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x41, 0x54, 0x48, 0x53, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, + 0x54, 0x49, 0x4d, 0x45, 0x42, 0x41, 0x53, 0x45, 0x44, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x52, + 0x41, 0x4e, 0x47, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, + 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x55, 0x52, 0x56, 0x45, 0x4c, 0x4f, 0x47, 0x10, 0x04, + 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x52, 0x59, 0x10, 0x05, 0x12, 0x0c, 0x0a, + 0x08, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x10, 0x06, 0x22, 0xd1, 0x02, 0x0a, 0x0c, + 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x04, + 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x6e, 0x0a, 0x0f, 0x53, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x55, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x0d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, - 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x02, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, - 0x01, 0x01, 0x12, 0x13, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, - 0x52, 0x02, 0x54, 0x73, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x54, 0x73, 0x43, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x48, 0x04, 0x52, 0x03, 0x54, 0x73, 0x43, 0x88, 0x01, 0x01, 0x12, 0x29, + 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, + 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, + 0x1a, 0xfc, 0x01, 0x0a, 0x0b, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x12, 0x17, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x50, 0x61, 0x74, + 0x68, 0x43, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x05, 0x50, 0x61, 0x74, 0x68, + 0x43, 0x88, 0x01, 0x01, 0x12, 0x48, 0x0a, 0x02, 0x44, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, + 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x02, 0x44, 0x70, 0x1a, 0x5c, + 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x13, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x02, 0x54, 0x73, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x54, 0x73, 0x43, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x03, 0x54, 0x73, 0x43, 0x88, 0x01, 0x01, 0x42, 0x05, 0x0a, + 0x03, 0x5f, 0x54, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x54, 0x73, 0x43, 0x42, 0x07, 0x0a, 0x05, + 0x5f, 0x50, 0x61, 0x74, 0x68, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x50, 0x61, 0x74, 0x68, 0x43, 0x22, + 0xe6, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x48, 0x00, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, + 0x29, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, + 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, + 0x07, 0x5f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x41, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x83, 0x05, 0x0a, 0x12, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x3c, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x24, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x6e, 0x0a, + 0x0f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x53, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x55, 0x0a, + 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x01, 0x52, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x13, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x02, 0x54, 0x73, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, + 0x54, 0x73, 0x43, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x48, 0x04, 0x52, 0x03, 0x54, 0x73, 0x43, + 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x05, 0x52, 0x0d, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x1a, 0x98, + 0x01, 0x0a, 0x16, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x44, 0x61, 0x74, + 0x61, 0x50, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x48, + 0x00, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x88, 0x01, 0x01, 0x12, 0x1f, + 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x01, 0x52, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, + 0x0b, 0x0a, 0x09, 0x5f, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x42, 0x0b, 0x0a, 0x09, + 0x5f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x53, 0x75, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x10, 0x0a, + 0x0e, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, + 0x0c, 0x0a, 0x0a, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x05, 0x0a, + 0x03, 0x5f, 0x54, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x54, 0x73, 0x43, 0x42, 0x10, 0x0a, 0x0e, + 0x5f, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xab, + 0x01, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x29, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x05, 0x52, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x1a, 0x98, 0x01, 0x0a, 0x16, 0x53, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x61, - 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x48, 0x00, 0x52, 0x08, 0x44, 0x61, - 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x08, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x08, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x44, - 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x54, 0x73, 0x42, - 0x06, 0x0a, 0x04, 0x5f, 0x54, 0x73, 0x43, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xab, 0x01, 0x0a, 0x11, 0x53, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, - 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x29, 0x0a, 0x0d, 0x41, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0xb9, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3c, - 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x10, 0x0a, 0x0e, + 0x5f, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0c, + 0x0a, 0x0a, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0xb9, 0x02, 0x0a, + 0x12, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x55, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x0e, 0x0a, 0x02, 0x54, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x54, 0x73, 0x12, 0x29, 0x0a, 0x0d, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x02, 0x52, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd9, 0x01, 0x0a, 0x17, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x48, 0x00, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x29, + 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x87, 0x09, 0x0a, 0x16, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x41, 0x0a, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x55, 0x0a, 0x0d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x54, 0x73, 0x12, 0x29, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, - 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, - 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, - 0x64, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0xd9, 0x01, 0x0a, 0x17, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, - 0x61, 0x74, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x06, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0d, 0x41, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x01, 0x52, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x88, 0x01, 0x01, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x49, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x10, 0x0a, - 0x0e, 0x5f, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x87, 0x09, 0x0a, 0x16, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x41, 0x0a, 0x05, 0x4d, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, - 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x66, 0x0a, 0x08, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x88, 0x01, 0x01, 0x12, 0x5d, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x4d, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x66, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x88, - 0x01, 0x01, 0x1a, 0xae, 0x02, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x55, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, - 0x52, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x88, 0x01, 0x01, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, - 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x54, - 0x73, 0x12, 0x29, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0d, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x10, 0x0a, 0x0e, - 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x11, - 0x0a, 0x0f, 0x5f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x1a, 0xdc, 0x03, 0x0a, 0x15, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, - 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x88, 0x01, 0x0a, 0x0f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x59, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x53, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, - 0x12, 0x55, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x13, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x02, 0x54, 0x73, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, - 0x54, 0x73, 0x43, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x48, 0x03, 0x52, 0x03, 0x54, 0x73, 0x43, - 0x88, 0x01, 0x01, 0x1a, 0x58, 0x0a, 0x16, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3e, 0x0a, - 0x08, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x73, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x42, 0x12, 0x0a, - 0x10, 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x54, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x54, - 0x73, 0x43, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, - 0x08, 0x0a, 0x06, 0x5f, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x74, 0x0a, 0x19, 0x55, 0x6e, 0x73, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x21, - 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, 0x01, - 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, - 0xac, 0x02, 0x0a, 0x1a, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x26, - 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x55, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x72, + 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x08, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x5d, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x05, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x1a, 0xae, 0x02, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x55, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, - 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x0e, - 0x0a, 0x02, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x54, 0x73, 0x42, 0x10, - 0x0a, 0x0e, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x2a, 0x28, - 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x00, 0x12, 0x09, 0x0a, - 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x2a, 0x30, 0x0a, 0x15, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x10, 0x00, 0x12, - 0x09, 0x0a, 0x05, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x32, 0xb6, 0x03, 0x0a, 0x06, 0x56, - 0x49, 0x53, 0x53, 0x76, 0x32, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x28, 0x2e, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0e, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x54, 0x73, 0x12, 0x29, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, + 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, + 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xdc, 0x03, 0x0a, 0x15, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x88, 0x01, 0x0a, 0x0f, 0x53, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x59, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x0f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x55, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5f, 0x0a, 0x0a, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x28, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x71, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x2c, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x30, 0x01, 0x12, 0x77, 0x0a, 0x12, 0x55, 0x6e, - 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x1a, 0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, + 0x67, 0x65, 0x73, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x0d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x13, 0x0a, 0x02, + 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x02, 0x54, 0x73, 0x88, 0x01, + 0x01, 0x12, 0x15, 0x0a, 0x03, 0x54, 0x73, 0x43, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x48, 0x03, + 0x52, 0x03, 0x54, 0x73, 0x43, 0x88, 0x01, 0x01, 0x1a, 0x58, 0x0a, 0x16, 0x53, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, + 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, + 0x63, 0x6b, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x54, 0x73, 0x42, + 0x06, 0x0a, 0x04, 0x5f, 0x54, 0x73, 0x43, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x74, + 0x0a, 0x19, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x49, 0x64, 0x22, 0xac, 0x02, 0x0a, 0x1a, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x42, 0x04, 0x5a, 0x02, 0x2e, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x06, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x55, 0x0a, 0x0d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, + 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, + 0x88, 0x01, 0x01, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x54, 0x73, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x49, 0x64, 0x2a, 0x28, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, + 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x2a, 0x30, 0x0a, + 0x15, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, + 0x53, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x32, + 0xb6, 0x03, 0x0a, 0x06, 0x56, 0x49, 0x53, 0x53, 0x76, 0x32, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x1a, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5f, 0x0a, 0x0a, 0x53, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x1a, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x71, 0x0a, 0x10, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x2d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, + 0x2c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x30, 0x01, 0x12, + 0x77, 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x55, 0x6e, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x55, 0x6e, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x04, 0x5a, 0x02, 0x2e, 0x2f, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_VISSv2_proto_rawDescOnce sync.Once - file_VISSv2_proto_rawDescData = file_VISSv2_proto_rawDesc + file_VISSv3_proto_rawDescOnce sync.Once + file_VISSv3_proto_rawDescData = file_VISSv3_proto_rawDesc ) -func file_VISSv2_proto_rawDescGZIP() []byte { - file_VISSv2_proto_rawDescOnce.Do(func() { - file_VISSv2_proto_rawDescData = protoimpl.X.CompressGZIP(file_VISSv2_proto_rawDescData) +func file_VISSv3_proto_rawDescGZIP() []byte { + file_VISSv3_proto_rawDescOnce.Do(func() { + file_VISSv3_proto_rawDescData = protoimpl.X.CompressGZIP(file_VISSv3_proto_rawDescData) }) - return file_VISSv2_proto_rawDescData + return file_VISSv3_proto_rawDescData } -var file_VISSv2_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_VISSv2_proto_msgTypes = make([]protoimpl.MessageInfo, 27) -var file_VISSv2_proto_goTypes = []interface{}{ +var file_VISSv3_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_VISSv3_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_VISSv3_proto_goTypes = []interface{}{ (ResponseStatus)(0), // 0: grpcProtobufMessages.ResponseStatus (SubscribeResponseType)(0), // 1: grpcProtobufMessages.SubscribeResponseType (FilterExpressions_FilterExpression_FilterType)(0), // 2: grpcProtobufMessages.FilterExpressions.FilterExpression.FilterType @@ -2315,29 +2238,28 @@ var file_VISSv2_proto_goTypes = []interface{}{ (*FilterExpressions_FilterExpression_FilterValue_ChangeValue)(nil), // 19: grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.ChangeValue (*FilterExpressions_FilterExpression_FilterValue_CurvelogValue)(nil), // 20: grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.CurvelogValue (*FilterExpressions_FilterExpression_FilterValue_HistoryValue)(nil), // 21: grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.HistoryValue - (*FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue)(nil), // 22: grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.StaticMetadataValue - (*FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue)(nil), // 23: grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.DynamicMetadataValue - (*DataPackages_DataPackage)(nil), // 24: grpcProtobufMessages.DataPackages.DataPackage - (*DataPackages_DataPackage_DataPoint)(nil), // 25: grpcProtobufMessages.DataPackages.DataPackage.DataPoint - (*GetResponseMessage_SuccessResponseMessage)(nil), // 26: grpcProtobufMessages.GetResponseMessage.SuccessResponseMessage - (*SubscribeStreamMessage_SubscribeResponseMessage)(nil), // 27: grpcProtobufMessages.SubscribeStreamMessage.SubscribeResponseMessage - (*SubscribeStreamMessage_SubscribeEventMessage)(nil), // 28: grpcProtobufMessages.SubscribeStreamMessage.SubscribeEventMessage - (*SubscribeStreamMessage_SubscribeEventMessage_SuccessResponseMessage)(nil), // 29: grpcProtobufMessages.SubscribeStreamMessage.SubscribeEventMessage.SuccessResponseMessage -} -var file_VISSv2_proto_depIdxs = []int32{ + (*FilterExpressions_FilterExpression_FilterValue_MetadataValue)(nil), // 22: grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.MetadataValue + (*DataPackages_DataPackage)(nil), // 23: grpcProtobufMessages.DataPackages.DataPackage + (*DataPackages_DataPackage_DataPoint)(nil), // 24: grpcProtobufMessages.DataPackages.DataPackage.DataPoint + (*GetResponseMessage_SuccessResponseMessage)(nil), // 25: grpcProtobufMessages.GetResponseMessage.SuccessResponseMessage + (*SubscribeStreamMessage_SubscribeResponseMessage)(nil), // 26: grpcProtobufMessages.SubscribeStreamMessage.SubscribeResponseMessage + (*SubscribeStreamMessage_SubscribeEventMessage)(nil), // 27: grpcProtobufMessages.SubscribeStreamMessage.SubscribeEventMessage + (*SubscribeStreamMessage_SubscribeEventMessage_SuccessResponseMessage)(nil), // 28: grpcProtobufMessages.SubscribeStreamMessage.SubscribeEventMessage.SuccessResponseMessage +} +var file_VISSv3_proto_depIdxs = []int32{ 14, // 0: grpcProtobufMessages.FilterExpressions.FilterExp:type_name -> grpcProtobufMessages.FilterExpressions.FilterExpression - 24, // 1: grpcProtobufMessages.DataPackages.Data:type_name -> grpcProtobufMessages.DataPackages.DataPackage + 23, // 1: grpcProtobufMessages.DataPackages.Data:type_name -> grpcProtobufMessages.DataPackages.DataPackage 4, // 2: grpcProtobufMessages.GetRequestMessage.Filter:type_name -> grpcProtobufMessages.FilterExpressions 0, // 3: grpcProtobufMessages.GetResponseMessage.Status:type_name -> grpcProtobufMessages.ResponseStatus - 26, // 4: grpcProtobufMessages.GetResponseMessage.SuccessResponse:type_name -> grpcProtobufMessages.GetResponseMessage.SuccessResponseMessage + 25, // 4: grpcProtobufMessages.GetResponseMessage.SuccessResponse:type_name -> grpcProtobufMessages.GetResponseMessage.SuccessResponseMessage 3, // 5: grpcProtobufMessages.GetResponseMessage.ErrorResponse:type_name -> grpcProtobufMessages.ErrorResponseMessage 0, // 6: grpcProtobufMessages.SetResponseMessage.Status:type_name -> grpcProtobufMessages.ResponseStatus 3, // 7: grpcProtobufMessages.SetResponseMessage.ErrorResponse:type_name -> grpcProtobufMessages.ErrorResponseMessage 4, // 8: grpcProtobufMessages.SubscribeRequestMessage.Filter:type_name -> grpcProtobufMessages.FilterExpressions 1, // 9: grpcProtobufMessages.SubscribeStreamMessage.MType:type_name -> grpcProtobufMessages.SubscribeResponseType 0, // 10: grpcProtobufMessages.SubscribeStreamMessage.Status:type_name -> grpcProtobufMessages.ResponseStatus - 27, // 11: grpcProtobufMessages.SubscribeStreamMessage.Response:type_name -> grpcProtobufMessages.SubscribeStreamMessage.SubscribeResponseMessage - 28, // 12: grpcProtobufMessages.SubscribeStreamMessage.Event:type_name -> grpcProtobufMessages.SubscribeStreamMessage.SubscribeEventMessage + 26, // 11: grpcProtobufMessages.SubscribeStreamMessage.Response:type_name -> grpcProtobufMessages.SubscribeStreamMessage.SubscribeResponseMessage + 27, // 12: grpcProtobufMessages.SubscribeStreamMessage.Event:type_name -> grpcProtobufMessages.SubscribeStreamMessage.SubscribeEventMessage 0, // 13: grpcProtobufMessages.UnsubscribeResponseMessage.Status:type_name -> grpcProtobufMessages.ResponseStatus 3, // 14: grpcProtobufMessages.UnsubscribeResponseMessage.ErrorResponse:type_name -> grpcProtobufMessages.ErrorResponseMessage 2, // 15: grpcProtobufMessages.FilterExpressions.FilterExpression.FType:type_name -> grpcProtobufMessages.FilterExpressions.FilterExpression.FilterType @@ -2348,36 +2270,35 @@ var file_VISSv2_proto_depIdxs = []int32{ 19, // 20: grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.ValueChange:type_name -> grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.ChangeValue 20, // 21: grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.ValueCurvelog:type_name -> grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.CurvelogValue 21, // 22: grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.ValueHistory:type_name -> grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.HistoryValue - 22, // 23: grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.ValueStaticMetadata:type_name -> grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.StaticMetadataValue - 23, // 24: grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.ValueDynamicMetadata:type_name -> grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.DynamicMetadataValue - 25, // 25: grpcProtobufMessages.DataPackages.DataPackage.Dp:type_name -> grpcProtobufMessages.DataPackages.DataPackage.DataPoint - 5, // 26: grpcProtobufMessages.GetResponseMessage.SuccessResponseMessage.DataPack:type_name -> grpcProtobufMessages.DataPackages - 3, // 27: grpcProtobufMessages.SubscribeStreamMessage.SubscribeResponseMessage.ErrorResponse:type_name -> grpcProtobufMessages.ErrorResponseMessage - 29, // 28: grpcProtobufMessages.SubscribeStreamMessage.SubscribeEventMessage.SuccessResponse:type_name -> grpcProtobufMessages.SubscribeStreamMessage.SubscribeEventMessage.SuccessResponseMessage - 3, // 29: grpcProtobufMessages.SubscribeStreamMessage.SubscribeEventMessage.ErrorResponse:type_name -> grpcProtobufMessages.ErrorResponseMessage - 5, // 30: grpcProtobufMessages.SubscribeStreamMessage.SubscribeEventMessage.SuccessResponseMessage.DataPack:type_name -> grpcProtobufMessages.DataPackages - 6, // 31: grpcProtobufMessages.VISSv2.GetRequest:input_type -> grpcProtobufMessages.GetRequestMessage - 8, // 32: grpcProtobufMessages.VISSv2.SetRequest:input_type -> grpcProtobufMessages.SetRequestMessage - 10, // 33: grpcProtobufMessages.VISSv2.SubscribeRequest:input_type -> grpcProtobufMessages.SubscribeRequestMessage - 12, // 34: grpcProtobufMessages.VISSv2.UnsubscribeRequest:input_type -> grpcProtobufMessages.UnsubscribeRequestMessage - 7, // 35: grpcProtobufMessages.VISSv2.GetRequest:output_type -> grpcProtobufMessages.GetResponseMessage - 9, // 36: grpcProtobufMessages.VISSv2.SetRequest:output_type -> grpcProtobufMessages.SetResponseMessage - 11, // 37: grpcProtobufMessages.VISSv2.SubscribeRequest:output_type -> grpcProtobufMessages.SubscribeStreamMessage - 13, // 38: grpcProtobufMessages.VISSv2.UnsubscribeRequest:output_type -> grpcProtobufMessages.UnsubscribeResponseMessage - 35, // [35:39] is the sub-list for method output_type - 31, // [31:35] is the sub-list for method input_type - 31, // [31:31] is the sub-list for extension type_name - 31, // [31:31] is the sub-list for extension extendee - 0, // [0:31] is the sub-list for field type_name -} - -func init() { file_VISSv2_proto_init() } -func file_VISSv2_proto_init() { - if File_VISSv2_proto != nil { + 22, // 23: grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.ValueMetadata:type_name -> grpcProtobufMessages.FilterExpressions.FilterExpression.FilterValue.MetadataValue + 24, // 24: grpcProtobufMessages.DataPackages.DataPackage.Dp:type_name -> grpcProtobufMessages.DataPackages.DataPackage.DataPoint + 5, // 25: grpcProtobufMessages.GetResponseMessage.SuccessResponseMessage.DataPack:type_name -> grpcProtobufMessages.DataPackages + 3, // 26: grpcProtobufMessages.SubscribeStreamMessage.SubscribeResponseMessage.ErrorResponse:type_name -> grpcProtobufMessages.ErrorResponseMessage + 28, // 27: grpcProtobufMessages.SubscribeStreamMessage.SubscribeEventMessage.SuccessResponse:type_name -> grpcProtobufMessages.SubscribeStreamMessage.SubscribeEventMessage.SuccessResponseMessage + 3, // 28: grpcProtobufMessages.SubscribeStreamMessage.SubscribeEventMessage.ErrorResponse:type_name -> grpcProtobufMessages.ErrorResponseMessage + 5, // 29: grpcProtobufMessages.SubscribeStreamMessage.SubscribeEventMessage.SuccessResponseMessage.DataPack:type_name -> grpcProtobufMessages.DataPackages + 6, // 30: grpcProtobufMessages.VISSv2.GetRequest:input_type -> grpcProtobufMessages.GetRequestMessage + 8, // 31: grpcProtobufMessages.VISSv2.SetRequest:input_type -> grpcProtobufMessages.SetRequestMessage + 10, // 32: grpcProtobufMessages.VISSv2.SubscribeRequest:input_type -> grpcProtobufMessages.SubscribeRequestMessage + 12, // 33: grpcProtobufMessages.VISSv2.UnsubscribeRequest:input_type -> grpcProtobufMessages.UnsubscribeRequestMessage + 7, // 34: grpcProtobufMessages.VISSv2.GetRequest:output_type -> grpcProtobufMessages.GetResponseMessage + 9, // 35: grpcProtobufMessages.VISSv2.SetRequest:output_type -> grpcProtobufMessages.SetResponseMessage + 11, // 36: grpcProtobufMessages.VISSv2.SubscribeRequest:output_type -> grpcProtobufMessages.SubscribeStreamMessage + 13, // 37: grpcProtobufMessages.VISSv2.UnsubscribeRequest:output_type -> grpcProtobufMessages.UnsubscribeResponseMessage + 34, // [34:38] is the sub-list for method output_type + 30, // [30:34] is the sub-list for method input_type + 30, // [30:30] is the sub-list for extension type_name + 30, // [30:30] is the sub-list for extension extendee + 0, // [0:30] is the sub-list for field type_name +} + +func init() { file_VISSv3_proto_init() } +func file_VISSv3_proto_init() { + if File_VISSv3_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_VISSv2_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ErrorResponseMessage); i { case 0: return &v.state @@ -2389,7 +2310,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions); i { case 0: return &v.state @@ -2401,7 +2322,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DataPackages); i { case 0: return &v.state @@ -2413,7 +2334,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetRequestMessage); i { case 0: return &v.state @@ -2425,7 +2346,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetResponseMessage); i { case 0: return &v.state @@ -2437,7 +2358,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetRequestMessage); i { case 0: return &v.state @@ -2449,7 +2370,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetResponseMessage); i { case 0: return &v.state @@ -2461,7 +2382,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeRequestMessage); i { case 0: return &v.state @@ -2473,7 +2394,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeStreamMessage); i { case 0: return &v.state @@ -2485,7 +2406,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnsubscribeRequestMessage); i { case 0: return &v.state @@ -2497,7 +2418,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnsubscribeResponseMessage); i { case 0: return &v.state @@ -2509,7 +2430,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions_FilterExpression); i { case 0: return &v.state @@ -2521,7 +2442,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions_FilterExpression_FilterValue); i { case 0: return &v.state @@ -2533,7 +2454,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions_FilterExpression_FilterValue_PathsValue); i { case 0: return &v.state @@ -2545,7 +2466,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions_FilterExpression_FilterValue_TimebasedValue); i { case 0: return &v.state @@ -2557,7 +2478,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions_FilterExpression_FilterValue_RangeValue); i { case 0: return &v.state @@ -2569,7 +2490,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions_FilterExpression_FilterValue_ChangeValue); i { case 0: return &v.state @@ -2581,7 +2502,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions_FilterExpression_FilterValue_CurvelogValue); i { case 0: return &v.state @@ -2593,7 +2514,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions_FilterExpression_FilterValue_HistoryValue); i { case 0: return &v.state @@ -2605,20 +2526,8 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_VISSv2_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue); i { + file_VISSv3_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FilterExpressions_FilterExpression_FilterValue_MetadataValue); i { case 0: return &v.state case 1: @@ -2629,7 +2538,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DataPackages_DataPackage); i { case 0: return &v.state @@ -2641,7 +2550,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DataPackages_DataPackage_DataPoint); i { case 0: return &v.state @@ -2653,7 +2562,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetResponseMessage_SuccessResponseMessage); i { case 0: return &v.state @@ -2665,7 +2574,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeStreamMessage_SubscribeResponseMessage); i { case 0: return &v.state @@ -2677,7 +2586,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeStreamMessage_SubscribeEventMessage); i { case 0: return &v.state @@ -2689,7 +2598,7 @@ func file_VISSv2_proto_init() { return nil } } - file_VISSv2_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeStreamMessage_SubscribeEventMessage_SuccessResponseMessage); i { case 0: return &v.state @@ -2702,38 +2611,38 @@ func file_VISSv2_proto_init() { } } } - file_VISSv2_proto_msgTypes[0].OneofWrappers = []interface{}{} - file_VISSv2_proto_msgTypes[3].OneofWrappers = []interface{}{} - file_VISSv2_proto_msgTypes[4].OneofWrappers = []interface{}{} - file_VISSv2_proto_msgTypes[5].OneofWrappers = []interface{}{} - file_VISSv2_proto_msgTypes[6].OneofWrappers = []interface{}{} - file_VISSv2_proto_msgTypes[7].OneofWrappers = []interface{}{} - file_VISSv2_proto_msgTypes[8].OneofWrappers = []interface{}{} - file_VISSv2_proto_msgTypes[9].OneofWrappers = []interface{}{} - file_VISSv2_proto_msgTypes[10].OneofWrappers = []interface{}{} - file_VISSv2_proto_msgTypes[12].OneofWrappers = []interface{}{} - file_VISSv2_proto_msgTypes[21].OneofWrappers = []interface{}{} - file_VISSv2_proto_msgTypes[22].OneofWrappers = []interface{}{} - file_VISSv2_proto_msgTypes[23].OneofWrappers = []interface{}{} - file_VISSv2_proto_msgTypes[24].OneofWrappers = []interface{}{} - file_VISSv2_proto_msgTypes[25].OneofWrappers = []interface{}{} + file_VISSv3_proto_msgTypes[0].OneofWrappers = []interface{}{} + file_VISSv3_proto_msgTypes[3].OneofWrappers = []interface{}{} + file_VISSv3_proto_msgTypes[4].OneofWrappers = []interface{}{} + file_VISSv3_proto_msgTypes[5].OneofWrappers = []interface{}{} + file_VISSv3_proto_msgTypes[6].OneofWrappers = []interface{}{} + file_VISSv3_proto_msgTypes[7].OneofWrappers = []interface{}{} + file_VISSv3_proto_msgTypes[8].OneofWrappers = []interface{}{} + file_VISSv3_proto_msgTypes[9].OneofWrappers = []interface{}{} + file_VISSv3_proto_msgTypes[10].OneofWrappers = []interface{}{} + file_VISSv3_proto_msgTypes[12].OneofWrappers = []interface{}{} + file_VISSv3_proto_msgTypes[20].OneofWrappers = []interface{}{} + file_VISSv3_proto_msgTypes[21].OneofWrappers = []interface{}{} + file_VISSv3_proto_msgTypes[22].OneofWrappers = []interface{}{} + file_VISSv3_proto_msgTypes[23].OneofWrappers = []interface{}{} + file_VISSv3_proto_msgTypes[24].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_VISSv2_proto_rawDesc, + RawDescriptor: file_VISSv3_proto_rawDesc, NumEnums: 3, - NumMessages: 27, + NumMessages: 26, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_VISSv2_proto_goTypes, - DependencyIndexes: file_VISSv2_proto_depIdxs, - EnumInfos: file_VISSv2_proto_enumTypes, - MessageInfos: file_VISSv2_proto_msgTypes, + GoTypes: file_VISSv3_proto_goTypes, + DependencyIndexes: file_VISSv3_proto_depIdxs, + EnumInfos: file_VISSv3_proto_enumTypes, + MessageInfos: file_VISSv3_proto_msgTypes, }.Build() - File_VISSv2_proto = out.File - file_VISSv2_proto_rawDesc = nil - file_VISSv2_proto_goTypes = nil - file_VISSv2_proto_depIdxs = nil + File_VISSv3_proto = out.File + file_VISSv3_proto_rawDesc = nil + file_VISSv3_proto_goTypes = nil + file_VISSv3_proto_depIdxs = nil } diff --git a/grpc_pb/VISSv2.proto b/grpc_pb/VISSv3.proto similarity index 93% rename from grpc_pb/VISSv2.proto rename to grpc_pb/VISSv3.proto index e50b806a..72d1ad86 100644 --- a/grpc_pb/VISSv2.proto +++ b/grpc_pb/VISSv3.proto @@ -48,8 +48,7 @@ message FilterExpressions { CHANGE = 3; CURVELOG = 4; HISTORY = 5; - STATIC_METADATA = 6; - DYNAMIC_METADATA = 7; + METADATA = 6; } FilterType FType = 1; @@ -87,15 +86,10 @@ message FilterExpressions { } optional HistoryValue ValueHistory = 6; - message StaticMetadataValue { + message MetadataValue { string Tree = 1; } - optional StaticMetadataValue ValueStaticMetadata = 7; - - message DynamicMetadataValue { - string MetadataDomain = 1; - } - optional DynamicMetadataValue ValueDynamicMetadata = 8; + optional MetadataValue ValueMetadata = 7; } FilterValue Value = 2; } @@ -128,7 +122,7 @@ message GetResponseMessage { ResponseStatus Status = 1; message SuccessResponseMessage { optional DataPackages DataPack = 1; - optional string Metadata = 2; // replaces DataPack in static metadata and one dynamic metadata variant + optional string Metadata = 2; // replaces DataPack in metadata variant } optional SuccessResponseMessage SuccessResponse = 2; optional ErrorResponseMessage ErrorResponse = 3; diff --git a/grpc_pb/VISSv2_grpc.pb.go b/grpc_pb/VISSv3_grpc.pb.go similarity index 99% rename from grpc_pb/VISSv2_grpc.pb.go rename to grpc_pb/VISSv3_grpc.pb.go index d4aacf72..6a17f3bb 100644 --- a/grpc_pb/VISSv2_grpc.pb.go +++ b/grpc_pb/VISSv3_grpc.pb.go @@ -2,7 +2,7 @@ // versions: // - protoc-gen-go-grpc v1.2.0 // - protoc v3.15.8 -// source: VISSv2.proto +// source: VISSv3.proto package __ @@ -237,5 +237,5 @@ var VISSv2_ServiceDesc = grpc.ServiceDesc{ ServerStreams: true, }, }, - Metadata: "VISSv2.proto", + Metadata: "VISSv3.proto", } diff --git a/protobuf/README.md b/protobuf/README.md index 0e1d414c..ed5e624b 100644 --- a/protobuf/README.md +++ b/protobuf/README.md @@ -1,12 +1,13 @@ +**(C) 2024 Foed Motor Cmpany**
**(C) 2022 Geotab Inc**
# Protobuf implementation of the VISSv2 payload messages -The VISSv2messages.proto file contains a definition that encompasses all payload messages that the VISSv2 standard defines for the Websocket, and MQTT protocols. For HTTP the requests carry most parts of this not as a payload but explicitly in the protocol, so this design may need some tweaks for supporting HTTP. At a minimum the code that transforms between JSON and protobuf would need modifications.
+The VISSv3messages.proto file contains a definition that encompasses all payload messages that the VISSv3 standard defines for the Websocket, and MQTT protocols. For HTTP the requests carry most parts of this not as a payload but explicitly in the protocol, so this design may need some tweaks for supporting HTTP. At a minimum the code that transforms between JSON and protobuf would need modifications.
-The VISSv2messages.proto file is used as input to the protoc tool. To generate a Golang output file, the following command can be used:
-$ protoc --go_out=protoc-out VISSv2messages.proto
-which creates the VISSv2messages.pb.go file in the protoc-out directory.
+The VISSv3messages.proto file is used as input to the protoc tool. To generate a Golang output file, the following command can be used:
+$ protoc --go_out=protoc-out VISSv3messages.proto
+which creates the VISSv3messages.pb.go file in the protoc-out directory.
The different type of messages that serialised protobuf blob supports are the following:
diff --git a/protobuf/VISSv2messages.proto b/protobuf/VISSv3messages.proto similarity index 93% rename from protobuf/VISSv2messages.proto rename to protobuf/VISSv3messages.proto index 453c977b..15e0bd5b 100644 --- a/protobuf/VISSv2messages.proto +++ b/protobuf/VISSv3messages.proto @@ -37,8 +37,7 @@ message FilterExpressions { CHANGE = 3; CURVELOG = 4; HISTORY = 5; - STATIC_METADATA = 6; - DYNAMIC_METADATA = 7; + METADATA = 6; } FilterType FType = 1; @@ -76,15 +75,10 @@ message FilterExpressions { } optional HistoryValue ValueHistory = 6; - message StaticMetadataValue { + message MetadataValue { string Tree = 1; } - optional StaticMetadataValue ValueStaticMetadata = 7; - - message DynamicMetadataValue { - string MetadataDomain = 1; - } - optional DynamicMetadataValue ValueDynamicMetadata = 8; + optional MetadataValue ValueMetadata = 7; } FilterValue Value = 2; } @@ -121,7 +115,7 @@ message GetMessage { ResponseStatus Status = 1; message SuccessResponseMessage { optional DataPackages DataPack = 1; - optional string Metadata = 2; // replaces DataPack in static metadata and one dynamic metadata variant + optional string Metadata = 2; // replaces DataPack in metadata variant } optional SuccessResponseMessage SuccessResponse = 2; optional ErrorResponseMessage ErrorResponse = 3; diff --git a/protobuf/protoc-out/VISSv2messages.pb.go b/protobuf/protoc-out/VISSv3messages.pb.go similarity index 62% rename from protobuf/protoc-out/VISSv2messages.pb.go rename to protobuf/protoc-out/VISSv3messages.pb.go index 337be0ea..5df16031 100644 --- a/protobuf/protoc-out/VISSv2messages.pb.go +++ b/protobuf/protoc-out/VISSv3messages.pb.go @@ -1,8 +1,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 -// protoc v3.19.1 -// source: VISSv2messages.proto +// protoc-gen-go v1.31.0 +// protoc v3.15.8 +// source: VISSv3messages.proto package __ @@ -56,11 +56,11 @@ func (x MessageMethod) String() string { } func (MessageMethod) Descriptor() protoreflect.EnumDescriptor { - return file_VISSv2messages_proto_enumTypes[0].Descriptor() + return file_VISSv3messages_proto_enumTypes[0].Descriptor() } func (MessageMethod) Type() protoreflect.EnumType { - return &file_VISSv2messages_proto_enumTypes[0] + return &file_VISSv3messages_proto_enumTypes[0] } func (x MessageMethod) Number() protoreflect.EnumNumber { @@ -69,7 +69,7 @@ func (x MessageMethod) Number() protoreflect.EnumNumber { // Deprecated: Use MessageMethod.Descriptor instead. func (MessageMethod) EnumDescriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{0} + return file_VISSv3messages_proto_rawDescGZIP(), []int{0} } type MessageType int32 @@ -105,11 +105,11 @@ func (x MessageType) String() string { } func (MessageType) Descriptor() protoreflect.EnumDescriptor { - return file_VISSv2messages_proto_enumTypes[1].Descriptor() + return file_VISSv3messages_proto_enumTypes[1].Descriptor() } func (MessageType) Type() protoreflect.EnumType { - return &file_VISSv2messages_proto_enumTypes[1] + return &file_VISSv3messages_proto_enumTypes[1] } func (x MessageType) Number() protoreflect.EnumNumber { @@ -118,7 +118,7 @@ func (x MessageType) Number() protoreflect.EnumNumber { // Deprecated: Use MessageType.Descriptor instead. func (MessageType) EnumDescriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{1} + return file_VISSv3messages_proto_rawDescGZIP(), []int{1} } type ResponseStatus int32 @@ -151,11 +151,11 @@ func (x ResponseStatus) String() string { } func (ResponseStatus) Descriptor() protoreflect.EnumDescriptor { - return file_VISSv2messages_proto_enumTypes[2].Descriptor() + return file_VISSv3messages_proto_enumTypes[2].Descriptor() } func (ResponseStatus) Type() protoreflect.EnumType { - return &file_VISSv2messages_proto_enumTypes[2] + return &file_VISSv3messages_proto_enumTypes[2] } func (x ResponseStatus) Number() protoreflect.EnumNumber { @@ -164,20 +164,19 @@ func (x ResponseStatus) Number() protoreflect.EnumNumber { // Deprecated: Use ResponseStatus.Descriptor instead. func (ResponseStatus) EnumDescriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{2} + return file_VISSv3messages_proto_rawDescGZIP(), []int{2} } type FilterExpressions_FilterExpression_FilterType int32 const ( - FilterExpressions_FilterExpression_PATHS FilterExpressions_FilterExpression_FilterType = 0 - FilterExpressions_FilterExpression_TIMEBASED FilterExpressions_FilterExpression_FilterType = 1 - FilterExpressions_FilterExpression_RANGE FilterExpressions_FilterExpression_FilterType = 2 - FilterExpressions_FilterExpression_CHANGE FilterExpressions_FilterExpression_FilterType = 3 - FilterExpressions_FilterExpression_CURVELOG FilterExpressions_FilterExpression_FilterType = 4 - FilterExpressions_FilterExpression_HISTORY FilterExpressions_FilterExpression_FilterType = 5 - FilterExpressions_FilterExpression_STATIC_METADATA FilterExpressions_FilterExpression_FilterType = 6 - FilterExpressions_FilterExpression_DYNAMIC_METADATA FilterExpressions_FilterExpression_FilterType = 7 + FilterExpressions_FilterExpression_PATHS FilterExpressions_FilterExpression_FilterType = 0 + FilterExpressions_FilterExpression_TIMEBASED FilterExpressions_FilterExpression_FilterType = 1 + FilterExpressions_FilterExpression_RANGE FilterExpressions_FilterExpression_FilterType = 2 + FilterExpressions_FilterExpression_CHANGE FilterExpressions_FilterExpression_FilterType = 3 + FilterExpressions_FilterExpression_CURVELOG FilterExpressions_FilterExpression_FilterType = 4 + FilterExpressions_FilterExpression_HISTORY FilterExpressions_FilterExpression_FilterType = 5 + FilterExpressions_FilterExpression_METADATA FilterExpressions_FilterExpression_FilterType = 6 ) // Enum value maps for FilterExpressions_FilterExpression_FilterType. @@ -189,18 +188,16 @@ var ( 3: "CHANGE", 4: "CURVELOG", 5: "HISTORY", - 6: "STATIC_METADATA", - 7: "DYNAMIC_METADATA", + 6: "METADATA", } FilterExpressions_FilterExpression_FilterType_value = map[string]int32{ - "PATHS": 0, - "TIMEBASED": 1, - "RANGE": 2, - "CHANGE": 3, - "CURVELOG": 4, - "HISTORY": 5, - "STATIC_METADATA": 6, - "DYNAMIC_METADATA": 7, + "PATHS": 0, + "TIMEBASED": 1, + "RANGE": 2, + "CHANGE": 3, + "CURVELOG": 4, + "HISTORY": 5, + "METADATA": 6, } ) @@ -215,11 +212,11 @@ func (x FilterExpressions_FilterExpression_FilterType) String() string { } func (FilterExpressions_FilterExpression_FilterType) Descriptor() protoreflect.EnumDescriptor { - return file_VISSv2messages_proto_enumTypes[3].Descriptor() + return file_VISSv3messages_proto_enumTypes[3].Descriptor() } func (FilterExpressions_FilterExpression_FilterType) Type() protoreflect.EnumType { - return &file_VISSv2messages_proto_enumTypes[3] + return &file_VISSv3messages_proto_enumTypes[3] } func (x FilterExpressions_FilterExpression_FilterType) Number() protoreflect.EnumNumber { @@ -228,7 +225,7 @@ func (x FilterExpressions_FilterExpression_FilterType) Number() protoreflect.Enu // Deprecated: Use FilterExpressions_FilterExpression_FilterType.Descriptor instead. func (FilterExpressions_FilterExpression_FilterType) EnumDescriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{1, 0, 0} + return file_VISSv3messages_proto_rawDescGZIP(), []int{1, 0, 0} } type ErrorResponseMessage struct { @@ -244,7 +241,7 @@ type ErrorResponseMessage struct { func (x *ErrorResponseMessage) Reset() { *x = ErrorResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[0] + mi := &file_VISSv3messages_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -257,7 +254,7 @@ func (x *ErrorResponseMessage) String() string { func (*ErrorResponseMessage) ProtoMessage() {} func (x *ErrorResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[0] + mi := &file_VISSv3messages_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -270,7 +267,7 @@ func (x *ErrorResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ErrorResponseMessage.ProtoReflect.Descriptor instead. func (*ErrorResponseMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{0} + return file_VISSv3messages_proto_rawDescGZIP(), []int{0} } func (x *ErrorResponseMessage) GetNumber() string { @@ -305,7 +302,7 @@ type FilterExpressions struct { func (x *FilterExpressions) Reset() { *x = FilterExpressions{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[1] + mi := &file_VISSv3messages_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -318,7 +315,7 @@ func (x *FilterExpressions) String() string { func (*FilterExpressions) ProtoMessage() {} func (x *FilterExpressions) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[1] + mi := &file_VISSv3messages_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -331,7 +328,7 @@ func (x *FilterExpressions) ProtoReflect() protoreflect.Message { // Deprecated: Use FilterExpressions.ProtoReflect.Descriptor instead. func (*FilterExpressions) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{1} + return file_VISSv3messages_proto_rawDescGZIP(), []int{1} } func (x *FilterExpressions) GetFilterExp() []*FilterExpressions_FilterExpression { @@ -352,7 +349,7 @@ type DataPackages struct { func (x *DataPackages) Reset() { *x = DataPackages{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[2] + mi := &file_VISSv3messages_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -365,7 +362,7 @@ func (x *DataPackages) String() string { func (*DataPackages) ProtoMessage() {} func (x *DataPackages) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[2] + mi := &file_VISSv3messages_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -378,7 +375,7 @@ func (x *DataPackages) ProtoReflect() protoreflect.Message { // Deprecated: Use DataPackages.ProtoReflect.Descriptor instead. func (*DataPackages) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{2} + return file_VISSv3messages_proto_rawDescGZIP(), []int{2} } func (x *DataPackages) GetData() []*DataPackages_DataPackage { @@ -401,7 +398,7 @@ type GetMessage struct { func (x *GetMessage) Reset() { *x = GetMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[3] + mi := &file_VISSv3messages_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -414,7 +411,7 @@ func (x *GetMessage) String() string { func (*GetMessage) ProtoMessage() {} func (x *GetMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[3] + mi := &file_VISSv3messages_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -427,7 +424,7 @@ func (x *GetMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMessage.ProtoReflect.Descriptor instead. func (*GetMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{3} + return file_VISSv3messages_proto_rawDescGZIP(), []int{3} } func (x *GetMessage) GetMType() MessageType { @@ -464,7 +461,7 @@ type SetMessage struct { func (x *SetMessage) Reset() { *x = SetMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[4] + mi := &file_VISSv3messages_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -477,7 +474,7 @@ func (x *SetMessage) String() string { func (*SetMessage) ProtoMessage() {} func (x *SetMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[4] + mi := &file_VISSv3messages_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -490,7 +487,7 @@ func (x *SetMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use SetMessage.ProtoReflect.Descriptor instead. func (*SetMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{4} + return file_VISSv3messages_proto_rawDescGZIP(), []int{4} } func (x *SetMessage) GetMType() MessageType { @@ -528,7 +525,7 @@ type SubscribeMessage struct { func (x *SubscribeMessage) Reset() { *x = SubscribeMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[5] + mi := &file_VISSv3messages_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -541,7 +538,7 @@ func (x *SubscribeMessage) String() string { func (*SubscribeMessage) ProtoMessage() {} func (x *SubscribeMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[5] + mi := &file_VISSv3messages_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -554,7 +551,7 @@ func (x *SubscribeMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeMessage.ProtoReflect.Descriptor instead. func (*SubscribeMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{5} + return file_VISSv3messages_proto_rawDescGZIP(), []int{5} } func (x *SubscribeMessage) GetMType() MessageType { @@ -598,7 +595,7 @@ type UnSubscribeMessage struct { func (x *UnSubscribeMessage) Reset() { *x = UnSubscribeMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[6] + mi := &file_VISSv3messages_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -611,7 +608,7 @@ func (x *UnSubscribeMessage) String() string { func (*UnSubscribeMessage) ProtoMessage() {} func (x *UnSubscribeMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[6] + mi := &file_VISSv3messages_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -624,7 +621,7 @@ func (x *UnSubscribeMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use UnSubscribeMessage.ProtoReflect.Descriptor instead. func (*UnSubscribeMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{6} + return file_VISSv3messages_proto_rawDescGZIP(), []int{6} } func (x *UnSubscribeMessage) GetMType() MessageType { @@ -663,7 +660,7 @@ type ProtobufMessage struct { func (x *ProtobufMessage) Reset() { *x = ProtobufMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[7] + mi := &file_VISSv3messages_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -676,7 +673,7 @@ func (x *ProtobufMessage) String() string { func (*ProtobufMessage) ProtoMessage() {} func (x *ProtobufMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[7] + mi := &file_VISSv3messages_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -689,7 +686,7 @@ func (x *ProtobufMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ProtobufMessage.ProtoReflect.Descriptor instead. func (*ProtobufMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{7} + return file_VISSv3messages_proto_rawDescGZIP(), []int{7} } func (x *ProtobufMessage) GetMethod() MessageMethod { @@ -739,7 +736,7 @@ type FilterExpressions_FilterExpression struct { func (x *FilterExpressions_FilterExpression) Reset() { *x = FilterExpressions_FilterExpression{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[8] + mi := &file_VISSv3messages_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -752,7 +749,7 @@ func (x *FilterExpressions_FilterExpression) String() string { func (*FilterExpressions_FilterExpression) ProtoMessage() {} func (x *FilterExpressions_FilterExpression) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[8] + mi := &file_VISSv3messages_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -765,7 +762,7 @@ func (x *FilterExpressions_FilterExpression) ProtoReflect() protoreflect.Message // Deprecated: Use FilterExpressions_FilterExpression.ProtoReflect.Descriptor instead. func (*FilterExpressions_FilterExpression) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{1, 0} + return file_VISSv3messages_proto_rawDescGZIP(), []int{1, 0} } func (x *FilterExpressions_FilterExpression) GetFType() FilterExpressions_FilterExpression_FilterType { @@ -787,20 +784,19 @@ type FilterExpressions_FilterExpression_FilterValue struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ValuePaths *FilterExpressions_FilterExpression_FilterValue_PathsValue `protobuf:"bytes,1,opt,name=ValuePaths,proto3,oneof" json:"ValuePaths,omitempty"` - ValueTimebased *FilterExpressions_FilterExpression_FilterValue_TimebasedValue `protobuf:"bytes,2,opt,name=ValueTimebased,proto3,oneof" json:"ValueTimebased,omitempty"` - ValueRange []*FilterExpressions_FilterExpression_FilterValue_RangeValue `protobuf:"bytes,3,rep,name=ValueRange,proto3" json:"ValueRange,omitempty"` - ValueChange *FilterExpressions_FilterExpression_FilterValue_ChangeValue `protobuf:"bytes,4,opt,name=ValueChange,proto3,oneof" json:"ValueChange,omitempty"` - ValueCurvelog *FilterExpressions_FilterExpression_FilterValue_CurvelogValue `protobuf:"bytes,5,opt,name=ValueCurvelog,proto3,oneof" json:"ValueCurvelog,omitempty"` - ValueHistory *FilterExpressions_FilterExpression_FilterValue_HistoryValue `protobuf:"bytes,6,opt,name=ValueHistory,proto3,oneof" json:"ValueHistory,omitempty"` - ValueStaticMetadata *FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue `protobuf:"bytes,7,opt,name=ValueStaticMetadata,proto3,oneof" json:"ValueStaticMetadata,omitempty"` - ValueDynamicMetadata *FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue `protobuf:"bytes,8,opt,name=ValueDynamicMetadata,proto3,oneof" json:"ValueDynamicMetadata,omitempty"` + ValuePaths *FilterExpressions_FilterExpression_FilterValue_PathsValue `protobuf:"bytes,1,opt,name=ValuePaths,proto3,oneof" json:"ValuePaths,omitempty"` + ValueTimebased *FilterExpressions_FilterExpression_FilterValue_TimebasedValue `protobuf:"bytes,2,opt,name=ValueTimebased,proto3,oneof" json:"ValueTimebased,omitempty"` + ValueRange []*FilterExpressions_FilterExpression_FilterValue_RangeValue `protobuf:"bytes,3,rep,name=ValueRange,proto3" json:"ValueRange,omitempty"` + ValueChange *FilterExpressions_FilterExpression_FilterValue_ChangeValue `protobuf:"bytes,4,opt,name=ValueChange,proto3,oneof" json:"ValueChange,omitempty"` + ValueCurvelog *FilterExpressions_FilterExpression_FilterValue_CurvelogValue `protobuf:"bytes,5,opt,name=ValueCurvelog,proto3,oneof" json:"ValueCurvelog,omitempty"` + ValueHistory *FilterExpressions_FilterExpression_FilterValue_HistoryValue `protobuf:"bytes,6,opt,name=ValueHistory,proto3,oneof" json:"ValueHistory,omitempty"` + ValueMetadata *FilterExpressions_FilterExpression_FilterValue_MetadataValue `protobuf:"bytes,7,opt,name=ValueMetadata,proto3,oneof" json:"ValueMetadata,omitempty"` } func (x *FilterExpressions_FilterExpression_FilterValue) Reset() { *x = FilterExpressions_FilterExpression_FilterValue{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[9] + mi := &file_VISSv3messages_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -813,7 +809,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue) String() string { func (*FilterExpressions_FilterExpression_FilterValue) ProtoMessage() {} func (x *FilterExpressions_FilterExpression_FilterValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[9] + mi := &file_VISSv3messages_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -826,7 +822,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue) ProtoReflect() protoref // Deprecated: Use FilterExpressions_FilterExpression_FilterValue.ProtoReflect.Descriptor instead. func (*FilterExpressions_FilterExpression_FilterValue) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{1, 0, 0} + return file_VISSv3messages_proto_rawDescGZIP(), []int{1, 0, 0} } func (x *FilterExpressions_FilterExpression_FilterValue) GetValuePaths() *FilterExpressions_FilterExpression_FilterValue_PathsValue { @@ -871,16 +867,9 @@ func (x *FilterExpressions_FilterExpression_FilterValue) GetValueHistory() *Filt return nil } -func (x *FilterExpressions_FilterExpression_FilterValue) GetValueStaticMetadata() *FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue { +func (x *FilterExpressions_FilterExpression_FilterValue) GetValueMetadata() *FilterExpressions_FilterExpression_FilterValue_MetadataValue { if x != nil { - return x.ValueStaticMetadata - } - return nil -} - -func (x *FilterExpressions_FilterExpression_FilterValue) GetValueDynamicMetadata() *FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue { - if x != nil { - return x.ValueDynamicMetadata + return x.ValueMetadata } return nil } @@ -896,7 +885,7 @@ type FilterExpressions_FilterExpression_FilterValue_PathsValue struct { func (x *FilterExpressions_FilterExpression_FilterValue_PathsValue) Reset() { *x = FilterExpressions_FilterExpression_FilterValue_PathsValue{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[10] + mi := &file_VISSv3messages_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -909,7 +898,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_PathsValue) String() str func (*FilterExpressions_FilterExpression_FilterValue_PathsValue) ProtoMessage() {} func (x *FilterExpressions_FilterExpression_FilterValue_PathsValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[10] + mi := &file_VISSv3messages_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -922,7 +911,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_PathsValue) ProtoReflect // Deprecated: Use FilterExpressions_FilterExpression_FilterValue_PathsValue.ProtoReflect.Descriptor instead. func (*FilterExpressions_FilterExpression_FilterValue_PathsValue) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{1, 0, 0, 0} + return file_VISSv3messages_proto_rawDescGZIP(), []int{1, 0, 0, 0} } func (x *FilterExpressions_FilterExpression_FilterValue_PathsValue) GetRelativePath() []string { @@ -943,7 +932,7 @@ type FilterExpressions_FilterExpression_FilterValue_TimebasedValue struct { func (x *FilterExpressions_FilterExpression_FilterValue_TimebasedValue) Reset() { *x = FilterExpressions_FilterExpression_FilterValue_TimebasedValue{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[11] + mi := &file_VISSv3messages_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -956,7 +945,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_TimebasedValue) String() func (*FilterExpressions_FilterExpression_FilterValue_TimebasedValue) ProtoMessage() {} func (x *FilterExpressions_FilterExpression_FilterValue_TimebasedValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[11] + mi := &file_VISSv3messages_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -969,7 +958,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_TimebasedValue) ProtoRef // Deprecated: Use FilterExpressions_FilterExpression_FilterValue_TimebasedValue.ProtoReflect.Descriptor instead. func (*FilterExpressions_FilterExpression_FilterValue_TimebasedValue) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{1, 0, 0, 1} + return file_VISSv3messages_proto_rawDescGZIP(), []int{1, 0, 0, 1} } func (x *FilterExpressions_FilterExpression_FilterValue_TimebasedValue) GetPeriod() string { @@ -991,7 +980,7 @@ type FilterExpressions_FilterExpression_FilterValue_RangeValue struct { func (x *FilterExpressions_FilterExpression_FilterValue_RangeValue) Reset() { *x = FilterExpressions_FilterExpression_FilterValue_RangeValue{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[12] + mi := &file_VISSv3messages_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1004,7 +993,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_RangeValue) String() str func (*FilterExpressions_FilterExpression_FilterValue_RangeValue) ProtoMessage() {} func (x *FilterExpressions_FilterExpression_FilterValue_RangeValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[12] + mi := &file_VISSv3messages_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1017,7 +1006,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_RangeValue) ProtoReflect // Deprecated: Use FilterExpressions_FilterExpression_FilterValue_RangeValue.ProtoReflect.Descriptor instead. func (*FilterExpressions_FilterExpression_FilterValue_RangeValue) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{1, 0, 0, 2} + return file_VISSv3messages_proto_rawDescGZIP(), []int{1, 0, 0, 2} } func (x *FilterExpressions_FilterExpression_FilterValue_RangeValue) GetLogicOperator() string { @@ -1046,7 +1035,7 @@ type FilterExpressions_FilterExpression_FilterValue_ChangeValue struct { func (x *FilterExpressions_FilterExpression_FilterValue_ChangeValue) Reset() { *x = FilterExpressions_FilterExpression_FilterValue_ChangeValue{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[13] + mi := &file_VISSv3messages_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1059,7 +1048,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_ChangeValue) String() st func (*FilterExpressions_FilterExpression_FilterValue_ChangeValue) ProtoMessage() {} func (x *FilterExpressions_FilterExpression_FilterValue_ChangeValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[13] + mi := &file_VISSv3messages_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1072,7 +1061,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_ChangeValue) ProtoReflec // Deprecated: Use FilterExpressions_FilterExpression_FilterValue_ChangeValue.ProtoReflect.Descriptor instead. func (*FilterExpressions_FilterExpression_FilterValue_ChangeValue) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{1, 0, 0, 3} + return file_VISSv3messages_proto_rawDescGZIP(), []int{1, 0, 0, 3} } func (x *FilterExpressions_FilterExpression_FilterValue_ChangeValue) GetLogicOperator() string { @@ -1101,7 +1090,7 @@ type FilterExpressions_FilterExpression_FilterValue_CurvelogValue struct { func (x *FilterExpressions_FilterExpression_FilterValue_CurvelogValue) Reset() { *x = FilterExpressions_FilterExpression_FilterValue_CurvelogValue{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[14] + mi := &file_VISSv3messages_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1114,7 +1103,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_CurvelogValue) String() func (*FilterExpressions_FilterExpression_FilterValue_CurvelogValue) ProtoMessage() {} func (x *FilterExpressions_FilterExpression_FilterValue_CurvelogValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[14] + mi := &file_VISSv3messages_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1127,7 +1116,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_CurvelogValue) ProtoRefl // Deprecated: Use FilterExpressions_FilterExpression_FilterValue_CurvelogValue.ProtoReflect.Descriptor instead. func (*FilterExpressions_FilterExpression_FilterValue_CurvelogValue) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{1, 0, 0, 4} + return file_VISSv3messages_proto_rawDescGZIP(), []int{1, 0, 0, 4} } func (x *FilterExpressions_FilterExpression_FilterValue_CurvelogValue) GetMaxErr() string { @@ -1155,7 +1144,7 @@ type FilterExpressions_FilterExpression_FilterValue_HistoryValue struct { func (x *FilterExpressions_FilterExpression_FilterValue_HistoryValue) Reset() { *x = FilterExpressions_FilterExpression_FilterValue_HistoryValue{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[15] + mi := &file_VISSv3messages_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1168,7 +1157,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_HistoryValue) String() s func (*FilterExpressions_FilterExpression_FilterValue_HistoryValue) ProtoMessage() {} func (x *FilterExpressions_FilterExpression_FilterValue_HistoryValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[15] + mi := &file_VISSv3messages_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1181,7 +1170,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_HistoryValue) ProtoRefle // Deprecated: Use FilterExpressions_FilterExpression_FilterValue_HistoryValue.ProtoReflect.Descriptor instead. func (*FilterExpressions_FilterExpression_FilterValue_HistoryValue) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{1, 0, 0, 5} + return file_VISSv3messages_proto_rawDescGZIP(), []int{1, 0, 0, 5} } func (x *FilterExpressions_FilterExpression_FilterValue_HistoryValue) GetTimePeriod() string { @@ -1191,7 +1180,7 @@ func (x *FilterExpressions_FilterExpression_FilterValue_HistoryValue) GetTimePer return "" } -type FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue struct { +type FilterExpressions_FilterExpression_FilterValue_MetadataValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1199,23 +1188,23 @@ type FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue struct { Tree string `protobuf:"bytes,1,opt,name=Tree,proto3" json:"Tree,omitempty"` } -func (x *FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue) Reset() { - *x = FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue{} +func (x *FilterExpressions_FilterExpression_FilterValue_MetadataValue) Reset() { + *x = FilterExpressions_FilterExpression_FilterValue_MetadataValue{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[16] + mi := &file_VISSv3messages_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue) String() string { +func (x *FilterExpressions_FilterExpression_FilterValue_MetadataValue) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue) ProtoMessage() {} +func (*FilterExpressions_FilterExpression_FilterValue_MetadataValue) ProtoMessage() {} -func (x *FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[16] +func (x *FilterExpressions_FilterExpression_FilterValue_MetadataValue) ProtoReflect() protoreflect.Message { + mi := &file_VISSv3messages_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1226,65 +1215,18 @@ func (x *FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue) Pro return mi.MessageOf(x) } -// Deprecated: Use FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue.ProtoReflect.Descriptor instead. -func (*FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{1, 0, 0, 6} +// Deprecated: Use FilterExpressions_FilterExpression_FilterValue_MetadataValue.ProtoReflect.Descriptor instead. +func (*FilterExpressions_FilterExpression_FilterValue_MetadataValue) Descriptor() ([]byte, []int) { + return file_VISSv3messages_proto_rawDescGZIP(), []int{1, 0, 0, 6} } -func (x *FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue) GetTree() string { +func (x *FilterExpressions_FilterExpression_FilterValue_MetadataValue) GetTree() string { if x != nil { return x.Tree } return "" } -type FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MetadataDomain string `protobuf:"bytes,1,opt,name=MetadataDomain,proto3" json:"MetadataDomain,omitempty"` -} - -func (x *FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue) Reset() { - *x = FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue{} - if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue) ProtoMessage() {} - -func (x *FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue.ProtoReflect.Descriptor instead. -func (*FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{1, 0, 0, 7} -} - -func (x *FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue) GetMetadataDomain() string { - if x != nil { - return x.MetadataDomain - } - return "" -} - type DataPackages_DataPackage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1298,7 +1240,7 @@ type DataPackages_DataPackage struct { func (x *DataPackages_DataPackage) Reset() { *x = DataPackages_DataPackage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[18] + mi := &file_VISSv3messages_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1311,7 +1253,7 @@ func (x *DataPackages_DataPackage) String() string { func (*DataPackages_DataPackage) ProtoMessage() {} func (x *DataPackages_DataPackage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[18] + mi := &file_VISSv3messages_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1324,7 +1266,7 @@ func (x *DataPackages_DataPackage) ProtoReflect() protoreflect.Message { // Deprecated: Use DataPackages_DataPackage.ProtoReflect.Descriptor instead. func (*DataPackages_DataPackage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{2, 0} + return file_VISSv3messages_proto_rawDescGZIP(), []int{2, 0} } func (x *DataPackages_DataPackage) GetPath() string { @@ -1361,7 +1303,7 @@ type DataPackages_DataPackage_DataPoint struct { func (x *DataPackages_DataPackage_DataPoint) Reset() { *x = DataPackages_DataPackage_DataPoint{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[19] + mi := &file_VISSv3messages_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1374,7 +1316,7 @@ func (x *DataPackages_DataPackage_DataPoint) String() string { func (*DataPackages_DataPackage_DataPoint) ProtoMessage() {} func (x *DataPackages_DataPackage_DataPoint) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[19] + mi := &file_VISSv3messages_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1387,7 +1329,7 @@ func (x *DataPackages_DataPackage_DataPoint) ProtoReflect() protoreflect.Message // Deprecated: Use DataPackages_DataPackage_DataPoint.ProtoReflect.Descriptor instead. func (*DataPackages_DataPackage_DataPoint) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{2, 0, 0} + return file_VISSv3messages_proto_rawDescGZIP(), []int{2, 0, 0} } func (x *DataPackages_DataPackage_DataPoint) GetValue() string { @@ -1425,7 +1367,7 @@ type GetMessage_RequestMessage struct { func (x *GetMessage_RequestMessage) Reset() { *x = GetMessage_RequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[20] + mi := &file_VISSv3messages_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1438,7 +1380,7 @@ func (x *GetMessage_RequestMessage) String() string { func (*GetMessage_RequestMessage) ProtoMessage() {} func (x *GetMessage_RequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[20] + mi := &file_VISSv3messages_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1451,7 +1393,7 @@ func (x *GetMessage_RequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMessage_RequestMessage.ProtoReflect.Descriptor instead. func (*GetMessage_RequestMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{3, 0} + return file_VISSv3messages_proto_rawDescGZIP(), []int{3, 0} } func (x *GetMessage_RequestMessage) GetPath() string { @@ -1498,7 +1440,7 @@ type GetMessage_ResponseMessage struct { func (x *GetMessage_ResponseMessage) Reset() { *x = GetMessage_ResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[21] + mi := &file_VISSv3messages_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1511,7 +1453,7 @@ func (x *GetMessage_ResponseMessage) String() string { func (*GetMessage_ResponseMessage) ProtoMessage() {} func (x *GetMessage_ResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[21] + mi := &file_VISSv3messages_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1524,7 +1466,7 @@ func (x *GetMessage_ResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMessage_ResponseMessage.ProtoReflect.Descriptor instead. func (*GetMessage_ResponseMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{3, 1} + return file_VISSv3messages_proto_rawDescGZIP(), []int{3, 1} } func (x *GetMessage_ResponseMessage) GetStatus() ResponseStatus { @@ -1575,13 +1517,13 @@ type GetMessage_ResponseMessage_SuccessResponseMessage struct { unknownFields protoimpl.UnknownFields DataPack *DataPackages `protobuf:"bytes,1,opt,name=DataPack,proto3,oneof" json:"DataPack,omitempty"` - Metadata *string `protobuf:"bytes,2,opt,name=Metadata,proto3,oneof" json:"Metadata,omitempty"` // replaces DataPack in static metadata and one dynamic metadata variant + Metadata *string `protobuf:"bytes,2,opt,name=Metadata,proto3,oneof" json:"Metadata,omitempty"` // replaces DataPack in metadata variant } func (x *GetMessage_ResponseMessage_SuccessResponseMessage) Reset() { *x = GetMessage_ResponseMessage_SuccessResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[22] + mi := &file_VISSv3messages_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1594,7 +1536,7 @@ func (x *GetMessage_ResponseMessage_SuccessResponseMessage) String() string { func (*GetMessage_ResponseMessage_SuccessResponseMessage) ProtoMessage() {} func (x *GetMessage_ResponseMessage_SuccessResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[22] + mi := &file_VISSv3messages_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1607,7 +1549,7 @@ func (x *GetMessage_ResponseMessage_SuccessResponseMessage) ProtoReflect() proto // Deprecated: Use GetMessage_ResponseMessage_SuccessResponseMessage.ProtoReflect.Descriptor instead. func (*GetMessage_ResponseMessage_SuccessResponseMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{3, 1, 0} + return file_VISSv3messages_proto_rawDescGZIP(), []int{3, 1, 0} } func (x *GetMessage_ResponseMessage_SuccessResponseMessage) GetDataPack() *DataPackages { @@ -1638,7 +1580,7 @@ type SetMessage_RequestMessage struct { func (x *SetMessage_RequestMessage) Reset() { *x = SetMessage_RequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[23] + mi := &file_VISSv3messages_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1651,7 +1593,7 @@ func (x *SetMessage_RequestMessage) String() string { func (*SetMessage_RequestMessage) ProtoMessage() {} func (x *SetMessage_RequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[23] + mi := &file_VISSv3messages_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1664,7 +1606,7 @@ func (x *SetMessage_RequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use SetMessage_RequestMessage.ProtoReflect.Descriptor instead. func (*SetMessage_RequestMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{4, 0} + return file_VISSv3messages_proto_rawDescGZIP(), []int{4, 0} } func (x *SetMessage_RequestMessage) GetPath() string { @@ -1709,7 +1651,7 @@ type SetMessage_ResponseMessage struct { func (x *SetMessage_ResponseMessage) Reset() { *x = SetMessage_ResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[24] + mi := &file_VISSv3messages_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1722,7 +1664,7 @@ func (x *SetMessage_ResponseMessage) String() string { func (*SetMessage_ResponseMessage) ProtoMessage() {} func (x *SetMessage_ResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[24] + mi := &file_VISSv3messages_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1735,7 +1677,7 @@ func (x *SetMessage_ResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use SetMessage_ResponseMessage.ProtoReflect.Descriptor instead. func (*SetMessage_ResponseMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{4, 1} + return file_VISSv3messages_proto_rawDescGZIP(), []int{4, 1} } func (x *SetMessage_ResponseMessage) GetStatus() ResponseStatus { @@ -1780,7 +1722,7 @@ type SubscribeMessage_RequestMessage struct { func (x *SubscribeMessage_RequestMessage) Reset() { *x = SubscribeMessage_RequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[25] + mi := &file_VISSv3messages_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1793,7 +1735,7 @@ func (x *SubscribeMessage_RequestMessage) String() string { func (*SubscribeMessage_RequestMessage) ProtoMessage() {} func (x *SubscribeMessage_RequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[25] + mi := &file_VISSv3messages_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1806,7 +1748,7 @@ func (x *SubscribeMessage_RequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeMessage_RequestMessage.ProtoReflect.Descriptor instead. func (*SubscribeMessage_RequestMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{5, 0} + return file_VISSv3messages_proto_rawDescGZIP(), []int{5, 0} } func (x *SubscribeMessage_RequestMessage) GetPath() string { @@ -1852,7 +1794,7 @@ type SubscribeMessage_ResponseMessage struct { func (x *SubscribeMessage_ResponseMessage) Reset() { *x = SubscribeMessage_ResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[26] + mi := &file_VISSv3messages_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1865,7 +1807,7 @@ func (x *SubscribeMessage_ResponseMessage) String() string { func (*SubscribeMessage_ResponseMessage) ProtoMessage() {} func (x *SubscribeMessage_ResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[26] + mi := &file_VISSv3messages_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1878,7 +1820,7 @@ func (x *SubscribeMessage_ResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeMessage_ResponseMessage.ProtoReflect.Descriptor instead. func (*SubscribeMessage_ResponseMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{5, 1} + return file_VISSv3messages_proto_rawDescGZIP(), []int{5, 1} } func (x *SubscribeMessage_ResponseMessage) GetStatus() ResponseStatus { @@ -1932,7 +1874,7 @@ type SubscribeMessage_NotificationMessage struct { func (x *SubscribeMessage_NotificationMessage) Reset() { *x = SubscribeMessage_NotificationMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[27] + mi := &file_VISSv3messages_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1945,7 +1887,7 @@ func (x *SubscribeMessage_NotificationMessage) String() string { func (*SubscribeMessage_NotificationMessage) ProtoMessage() {} func (x *SubscribeMessage_NotificationMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[27] + mi := &file_VISSv3messages_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1958,7 +1900,7 @@ func (x *SubscribeMessage_NotificationMessage) ProtoReflect() protoreflect.Messa // Deprecated: Use SubscribeMessage_NotificationMessage.ProtoReflect.Descriptor instead. func (*SubscribeMessage_NotificationMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{5, 2} + return file_VISSv3messages_proto_rawDescGZIP(), []int{5, 2} } func (x *SubscribeMessage_NotificationMessage) GetSubscriptionId() string { @@ -2014,7 +1956,7 @@ type SubscribeMessage_NotificationMessage_SuccessResponseMessage struct { func (x *SubscribeMessage_NotificationMessage_SuccessResponseMessage) Reset() { *x = SubscribeMessage_NotificationMessage_SuccessResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[28] + mi := &file_VISSv3messages_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2027,7 +1969,7 @@ func (x *SubscribeMessage_NotificationMessage_SuccessResponseMessage) String() s func (*SubscribeMessage_NotificationMessage_SuccessResponseMessage) ProtoMessage() {} func (x *SubscribeMessage_NotificationMessage_SuccessResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[28] + mi := &file_VISSv3messages_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2040,7 +1982,7 @@ func (x *SubscribeMessage_NotificationMessage_SuccessResponseMessage) ProtoRefle // Deprecated: Use SubscribeMessage_NotificationMessage_SuccessResponseMessage.ProtoReflect.Descriptor instead. func (*SubscribeMessage_NotificationMessage_SuccessResponseMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{5, 2, 0} + return file_VISSv3messages_proto_rawDescGZIP(), []int{5, 2, 0} } func (x *SubscribeMessage_NotificationMessage_SuccessResponseMessage) GetDataPack() *DataPackages { @@ -2062,7 +2004,7 @@ type UnSubscribeMessage_RequestMessage struct { func (x *UnSubscribeMessage_RequestMessage) Reset() { *x = UnSubscribeMessage_RequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[29] + mi := &file_VISSv3messages_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2075,7 +2017,7 @@ func (x *UnSubscribeMessage_RequestMessage) String() string { func (*UnSubscribeMessage_RequestMessage) ProtoMessage() {} func (x *UnSubscribeMessage_RequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[29] + mi := &file_VISSv3messages_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2088,7 +2030,7 @@ func (x *UnSubscribeMessage_RequestMessage) ProtoReflect() protoreflect.Message // Deprecated: Use UnSubscribeMessage_RequestMessage.ProtoReflect.Descriptor instead. func (*UnSubscribeMessage_RequestMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{6, 0} + return file_VISSv3messages_proto_rawDescGZIP(), []int{6, 0} } func (x *UnSubscribeMessage_RequestMessage) GetSubscriptionId() string { @@ -2120,7 +2062,7 @@ type UnSubscribeMessage_ResponseMessage struct { func (x *UnSubscribeMessage_ResponseMessage) Reset() { *x = UnSubscribeMessage_ResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_VISSv2messages_proto_msgTypes[30] + mi := &file_VISSv3messages_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2133,7 +2075,7 @@ func (x *UnSubscribeMessage_ResponseMessage) String() string { func (*UnSubscribeMessage_ResponseMessage) ProtoMessage() {} func (x *UnSubscribeMessage_ResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_VISSv2messages_proto_msgTypes[30] + mi := &file_VISSv3messages_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2146,7 +2088,7 @@ func (x *UnSubscribeMessage_ResponseMessage) ProtoReflect() protoreflect.Message // Deprecated: Use UnSubscribeMessage_ResponseMessage.ProtoReflect.Descriptor instead. func (*UnSubscribeMessage_ResponseMessage) Descriptor() ([]byte, []int) { - return file_VISSv2messages_proto_rawDescGZIP(), []int{6, 1} + return file_VISSv3messages_proto_rawDescGZIP(), []int{6, 1} } func (x *UnSubscribeMessage_ResponseMessage) GetSubscriptionId() string { @@ -2184,10 +2126,10 @@ func (x *UnSubscribeMessage_ResponseMessage) GetTs() string { return "" } -var File_VISSv2messages_proto protoreflect.FileDescriptor +var File_VISSv3messages_proto protoreflect.FileDescriptor -var file_VISSv2messages_proto_rawDesc = []byte{ - 0x0a, 0x14, 0x56, 0x49, 0x53, 0x53, 0x76, 0x32, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, +var file_VISSv3messages_proto_rawDesc = []byte{ + 0x0a, 0x14, 0x56, 0x49, 0x53, 0x53, 0x76, 0x33, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x81, 0x01, 0x0a, 0x14, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, @@ -2197,14 +2139,14 @@ var file_VISSv2messages_proto_rawDesc = []byte{ 0x73, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xfe, 0x0f, 0x0a, + 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xd7, 0x0d, 0x0a, 0x11, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x52, 0x0a, 0x09, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x1a, 0x94, 0x0f, 0x0a, 0x10, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x1a, 0xed, 0x0c, 0x0a, 0x10, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x55, 0x0a, 0x05, 0x46, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x46, 0x69, @@ -2216,7 +2158,7 @@ var file_VISSv2messages_proto_rawDesc = []byte{ 0x61, 0x67, 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0xca, 0x0c, 0x0a, 0x0b, 0x46, + 0x6c, 0x75, 0x65, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0xc1, 0x0a, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x70, 0x0a, 0x0a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, @@ -2262,429 +2204,409 @@ var file_VISSv2messages_proto_rawDesc = []byte{ 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x04, 0x52, 0x0c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x88, 0x01, 0x01, 0x12, - 0x8b, 0x01, 0x0a, 0x13, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x54, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x48, 0x05, 0x52, 0x13, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x69, 0x63, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x12, 0x8e, 0x01, - 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x55, 0x2e, 0x70, + 0x79, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x05, 0x52, 0x0d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x1a, 0x30, 0x0a, 0x0a, 0x50, 0x61, + 0x74, 0x68, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x1a, 0x28, 0x0a, 0x0e, + 0x54, 0x69, 0x6d, 0x65, 0x62, 0x61, 0x73, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x1a, 0x4e, 0x0a, 0x0a, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x4c, 0x6f, 0x67, + 0x69, 0x63, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x1a, 0x47, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x4c, 0x6f, + 0x67, 0x69, 0x63, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x44, + 0x69, 0x66, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x69, 0x66, 0x66, 0x1a, + 0x41, 0x0a, 0x0d, 0x43, 0x75, 0x72, 0x76, 0x65, 0x6c, 0x6f, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x45, 0x72, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x4d, 0x61, 0x78, 0x45, 0x72, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x75, 0x66, 0x53, + 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x42, 0x75, 0x66, 0x53, 0x69, + 0x7a, 0x65, 0x1a, 0x2e, 0x0a, 0x0c, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x1a, 0x23, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x72, 0x65, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x54, 0x72, 0x65, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x62, 0x61, 0x73, 0x65, 0x64, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x43, 0x75, 0x72, 0x76, 0x65, 0x6c, 0x6f, 0x67, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x10, 0x0a, 0x0e, + 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x66, + 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, + 0x50, 0x41, 0x54, 0x48, 0x53, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x42, + 0x41, 0x53, 0x45, 0x44, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, + 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x03, 0x12, 0x0c, 0x0a, + 0x08, 0x43, 0x55, 0x52, 0x56, 0x45, 0x4c, 0x4f, 0x47, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x48, + 0x49, 0x53, 0x54, 0x4f, 0x52, 0x59, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x45, 0x54, 0x41, + 0x44, 0x41, 0x54, 0x41, 0x10, 0x06, 0x22, 0xc9, 0x02, 0x0a, 0x0c, 0x44, 0x61, 0x74, 0x61, 0x50, + 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x1a, 0xf8, 0x01, 0x0a, 0x0b, 0x44, 0x61, 0x74, 0x61, + 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x88, 0x01, 0x01, + 0x12, 0x19, 0x0a, 0x05, 0x50, 0x61, 0x74, 0x68, 0x43, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, + 0x01, 0x52, 0x05, 0x50, 0x61, 0x74, 0x68, 0x43, 0x88, 0x01, 0x01, 0x12, 0x44, 0x0a, 0x02, 0x44, + 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, + 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, + 0x61, 0x67, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x02, 0x44, + 0x70, 0x1a, 0x5c, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x13, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x02, 0x54, 0x73, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x54, 0x73, 0x43, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x03, 0x54, 0x73, 0x43, 0x88, 0x01, 0x01, + 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x54, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x54, 0x73, 0x43, 0x42, + 0x07, 0x0a, 0x05, 0x5f, 0x50, 0x61, 0x74, 0x68, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x50, 0x61, 0x74, + 0x68, 0x43, 0x22, 0x95, 0x08, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x33, 0x0a, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4a, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x88, + 0x01, 0x01, 0x12, 0x4d, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x01, 0x52, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, + 0x01, 0x1a, 0xdf, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, 0x40, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, + 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0d, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x01, 0x52, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x49, 0x64, 0x1a, 0xbb, 0x04, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x72, 0x0a, 0x0f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x47, 0x65, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x0f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x51, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x44, - 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x48, 0x06, 0x52, 0x14, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x79, 0x6e, 0x61, - 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x1a, 0x30, - 0x0a, 0x0a, 0x50, 0x61, 0x74, 0x68, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0c, - 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0c, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, - 0x1a, 0x28, 0x0a, 0x0e, 0x54, 0x69, 0x6d, 0x65, 0x62, 0x61, 0x73, 0x65, 0x64, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x1a, 0x4e, 0x0a, 0x0a, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x69, - 0x63, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1a, - 0x0a, 0x08, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x1a, 0x47, 0x0a, 0x0b, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, - 0x69, 0x63, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, - 0x12, 0x0a, 0x04, 0x44, 0x69, 0x66, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, - 0x69, 0x66, 0x66, 0x1a, 0x41, 0x0a, 0x0d, 0x43, 0x75, 0x72, 0x76, 0x65, 0x6c, 0x6f, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x45, 0x72, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x45, 0x72, 0x72, 0x12, 0x18, 0x0a, 0x07, - 0x42, 0x75, 0x66, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x42, - 0x75, 0x66, 0x53, 0x69, 0x7a, 0x65, 0x1a, 0x2e, 0x0a, 0x0c, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x65, - 0x72, 0x69, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x54, 0x69, 0x6d, 0x65, - 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x1a, 0x29, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x54, 0x72, 0x65, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x72, 0x65, - 0x65, 0x1a, 0x3e, 0x0a, 0x14, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, - 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x62, 0x61, - 0x73, 0x65, 0x64, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x75, 0x72, - 0x76, 0x65, 0x6c, 0x6f, 0x67, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x17, - 0x0a, 0x15, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x83, 0x01, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x41, 0x54, 0x48, 0x53, 0x10, - 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x42, 0x41, 0x53, 0x45, 0x44, 0x10, 0x01, - 0x12, 0x09, 0x0a, 0x05, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, - 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x55, 0x52, 0x56, 0x45, - 0x4c, 0x4f, 0x47, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x52, 0x59, - 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x5f, 0x4d, 0x45, 0x54, - 0x41, 0x44, 0x41, 0x54, 0x41, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x59, 0x4e, 0x41, 0x4d, - 0x49, 0x43, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x10, 0x07, 0x22, 0xc9, 0x02, - 0x0a, 0x0c, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x3e, - 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x09, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x13, 0x0a, 0x02, 0x54, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x02, 0x54, 0x73, 0x88, 0x01, 0x01, + 0x12, 0x15, 0x0a, 0x03, 0x54, 0x73, 0x43, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x48, 0x04, 0x52, + 0x03, 0x54, 0x73, 0x43, 0x88, 0x01, 0x01, 0x1a, 0x94, 0x01, 0x0a, 0x16, 0x53, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, + 0x61, 0x67, 0x65, 0x73, 0x48, 0x00, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, + 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, + 0x6b, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x12, + 0x0a, 0x10, 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x49, 0x64, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x54, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x54, 0x73, + 0x43, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0b, 0x0a, + 0x09, 0x5f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x94, 0x05, 0x0a, 0x0a, 0x53, + 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x05, 0x4d, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4a, + 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x4d, 0x0a, 0x08, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, - 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x1a, 0xf8, - 0x01, 0x0a, 0x0b, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x17, - 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, - 0x50, 0x61, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x50, 0x61, 0x74, 0x68, 0x43, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x05, 0x50, 0x61, 0x74, 0x68, 0x43, 0x88, - 0x01, 0x01, 0x12, 0x44, 0x0a, 0x02, 0x44, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, - 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x02, 0x44, 0x70, 0x1a, 0x5c, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x13, 0x0a, 0x02, 0x54, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x54, 0x73, 0x88, 0x01, 0x01, - 0x12, 0x15, 0x0a, 0x03, 0x54, 0x73, 0x43, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, - 0x03, 0x54, 0x73, 0x43, 0x88, 0x01, 0x01, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x54, 0x73, 0x42, 0x06, - 0x0a, 0x04, 0x5f, 0x54, 0x73, 0x43, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x50, 0x61, 0x74, 0x68, 0x42, - 0x08, 0x0a, 0x06, 0x5f, 0x50, 0x61, 0x74, 0x68, 0x43, 0x22, 0x95, 0x08, 0x0a, 0x0a, 0x47, 0x65, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x05, 0x4d, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4a, 0x0a, - 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x4d, 0x0a, 0x08, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x47, - 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x08, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x1a, 0xdf, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x50, - 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, - 0x40, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, - 0x01, 0x12, 0x29, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0d, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x02, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, - 0x09, 0x0a, 0x07, 0x5f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, - 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x1a, 0xbb, 0x04, 0x0a, 0x0f, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, - 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x72, 0x0a, 0x0f, 0x53, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, - 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x51, 0x0a, 0x0d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x0d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, - 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x02, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, - 0x01, 0x01, 0x12, 0x13, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, - 0x52, 0x02, 0x54, 0x73, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x54, 0x73, 0x43, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x48, 0x04, 0x52, 0x03, 0x54, 0x73, 0x43, 0x88, 0x01, 0x01, 0x1a, 0x94, - 0x01, 0x0a, 0x16, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x44, 0x61, 0x74, - 0x61, 0x50, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, - 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x48, 0x00, 0x52, 0x08, 0x44, - 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x08, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x08, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, - 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x54, 0x73, - 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x54, 0x73, 0x43, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x52, 0x65, 0x71, + 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x08, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x1a, 0xa8, 0x01, 0x0a, 0x0e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, + 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x29, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, + 0x01, 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, + 0x64, 0x88, 0x01, 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x49, 0x64, 0x1a, 0xf1, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x51, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x54, 0x73, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x94, 0x05, 0x0a, 0x0a, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x33, 0x0a, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, - 0x4d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4a, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x88, 0x01, - 0x01, 0x12, 0x4d, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x01, 0x52, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, - 0x1a, 0xa8, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x29, 0x0a, - 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x5f, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0c, 0x0a, - 0x0a, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x1a, 0xf1, 0x01, 0x0a, 0x0f, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x38, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x51, 0x0a, 0x0d, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x01, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, - 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x54, 0x73, 0x42, - 0x10, 0x0a, 0x0e, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, - 0x0a, 0x0a, 0x08, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x5f, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd3, 0x0a, 0x0a, 0x10, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, - 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x70, + 0x65, 0x22, 0xd3, 0x0a, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x50, 0x0a, 0x07, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x4d, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x50, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x88, 0x01, 0x01, 0x12, 0x53, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x08, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x5f, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x53, 0x0a, + 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x02, 0x52, 0x0c, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x1a, 0xcc, 0x01, 0x0a, 0x0e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x40, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0d, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x1c, - 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x09, 0x0a, 0x07, - 0x5f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x86, 0x02, 0x0a, 0x0f, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, - 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x51, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, + 0x01, 0x01, 0x12, 0x5f, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x02, 0x52, 0x0c, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x88, 0x01, 0x01, 0x1a, 0xcc, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, 0x40, 0x0a, 0x06, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x48, + 0x00, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0d, + 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x1a, 0x86, 0x02, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x51, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x54, 0x73, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xff, 0x03, 0x0a, 0x13, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x06, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x7c, 0x0a, 0x0f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0e, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x54, 0x73, - 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x1a, 0xff, 0x03, 0x0a, 0x13, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x38, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x7c, 0x0a, 0x0f, - 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x51, 0x0a, 0x0d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x0d, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x13, 0x0a, - 0x02, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x02, 0x54, 0x73, 0x88, - 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x54, 0x73, 0x43, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x48, - 0x03, 0x52, 0x03, 0x54, 0x73, 0x43, 0x88, 0x01, 0x01, 0x1a, 0x54, 0x0a, 0x16, 0x53, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x73, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x42, - 0x12, 0x0a, 0x10, 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x54, 0x73, 0x42, 0x06, 0x0a, 0x04, - 0x5f, 0x54, 0x73, 0x43, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0f, 0x0a, - 0x0d, 0x5f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x94, - 0x05, 0x0a, 0x12, 0x55, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x52, 0x0a, 0x07, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x55, - 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x55, - 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x2e, 0x55, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x88, 0x01, 0x01, 0x1a, 0x69, 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, - 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x1a, 0x99, 0x02, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x06, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x51, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, + 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x0f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x88, 0x01, 0x01, 0x12, 0x51, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x01, 0x52, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x13, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x02, 0x52, 0x02, 0x54, 0x73, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x54, + 0x73, 0x43, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x48, 0x03, 0x52, 0x03, 0x54, 0x73, 0x43, 0x88, + 0x01, 0x01, 0x1a, 0x54, 0x0a, 0x16, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x08, + 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x52, 0x08, + 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x53, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x10, 0x0a, 0x0e, + 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x05, + 0x0a, 0x03, 0x5f, 0x54, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x54, 0x73, 0x43, 0x42, 0x0a, 0x0a, + 0x08, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x94, 0x05, 0x0a, 0x12, 0x55, 0x6e, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x33, + 0x0a, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x0e, 0x0a, 0x02, - 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x54, 0x73, 0x42, 0x10, 0x0a, 0x0e, - 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0c, - 0x0a, 0x0a, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x0a, 0x0a, 0x08, - 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf6, 0x02, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x4d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x4d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x03, 0x47, 0x65, 0x74, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x03, 0x53, 0x65, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x01, 0x52, 0x03, 0x53, 0x65, 0x74, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x09, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x02, 0x52, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x88, 0x01, 0x01, 0x12, 0x4b, 0x0a, 0x0b, 0x55, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x55, 0x6e, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x03, - 0x52, 0x0b, 0x55, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x88, 0x01, 0x01, - 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x47, 0x65, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x53, 0x65, 0x74, - 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x42, 0x0e, - 0x0a, 0x0c, 0x5f, 0x55, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2a, 0x41, - 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, - 0x07, 0x0a, 0x03, 0x47, 0x45, 0x54, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, - 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x02, - 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, - 0x03, 0x2a, 0x3a, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x00, 0x12, 0x0c, 0x0a, - 0x08, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4e, - 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x2a, 0x28, 0x0a, - 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, - 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x42, 0x04, 0x5a, 0x02, 0x2e, 0x2f, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x4d, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x52, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x55, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x55, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x55, 0x6e, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x01, 0x52, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x1a, 0x69, + 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x26, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x1a, 0x99, 0x02, 0x0a, 0x0f, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, + 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x51, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, + 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x54, 0x73, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf6, + 0x02, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, + 0x68, 0x6f, 0x64, 0x52, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x47, + 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x03, 0x47, 0x65, 0x74, 0x88, 0x01, 0x01, + 0x12, 0x33, 0x0a, 0x03, 0x53, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x03, 0x53, + 0x65, 0x74, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x02, 0x52, 0x09, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x88, 0x01, 0x01, 0x12, 0x4b, 0x0a, 0x0b, + 0x55, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x2e, 0x55, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x03, 0x52, 0x0b, 0x55, 0x6e, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x47, 0x65, + 0x74, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x53, 0x65, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x55, 0x6e, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2a, 0x41, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, 0x54, 0x10, + 0x00, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, + 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, + 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x03, 0x2a, 0x3a, 0x0a, 0x0b, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x51, + 0x55, 0x45, 0x53, 0x54, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, + 0x53, 0x45, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x2a, 0x28, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, + 0x45, 0x53, 0x53, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, + 0x42, 0x04, 0x5a, 0x02, 0x2e, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_VISSv2messages_proto_rawDescOnce sync.Once - file_VISSv2messages_proto_rawDescData = file_VISSv2messages_proto_rawDesc + file_VISSv3messages_proto_rawDescOnce sync.Once + file_VISSv3messages_proto_rawDescData = file_VISSv3messages_proto_rawDesc ) -func file_VISSv2messages_proto_rawDescGZIP() []byte { - file_VISSv2messages_proto_rawDescOnce.Do(func() { - file_VISSv2messages_proto_rawDescData = protoimpl.X.CompressGZIP(file_VISSv2messages_proto_rawDescData) +func file_VISSv3messages_proto_rawDescGZIP() []byte { + file_VISSv3messages_proto_rawDescOnce.Do(func() { + file_VISSv3messages_proto_rawDescData = protoimpl.X.CompressGZIP(file_VISSv3messages_proto_rawDescData) }) - return file_VISSv2messages_proto_rawDescData + return file_VISSv3messages_proto_rawDescData } -var file_VISSv2messages_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_VISSv2messages_proto_msgTypes = make([]protoimpl.MessageInfo, 31) -var file_VISSv2messages_proto_goTypes = []interface{}{ +var file_VISSv3messages_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_VISSv3messages_proto_msgTypes = make([]protoimpl.MessageInfo, 30) +var file_VISSv3messages_proto_goTypes = []interface{}{ (MessageMethod)(0), // 0: protobufMessages.MessageMethod (MessageType)(0), // 1: protobufMessages.MessageType (ResponseStatus)(0), // 2: protobufMessages.ResponseStatus - (FilterExpressions_FilterExpression_FilterType)(0), // 3: protobufMessages.FilterExpressions.FilterExpression.FilterType - (*ErrorResponseMessage)(nil), // 4: protobufMessages.ErrorResponseMessage - (*FilterExpressions)(nil), // 5: protobufMessages.FilterExpressions - (*DataPackages)(nil), // 6: protobufMessages.DataPackages - (*GetMessage)(nil), // 7: protobufMessages.GetMessage - (*SetMessage)(nil), // 8: protobufMessages.SetMessage - (*SubscribeMessage)(nil), // 9: protobufMessages.SubscribeMessage - (*UnSubscribeMessage)(nil), // 10: protobufMessages.UnSubscribeMessage - (*ProtobufMessage)(nil), // 11: protobufMessages.ProtobufMessage - (*FilterExpressions_FilterExpression)(nil), // 12: protobufMessages.FilterExpressions.FilterExpression - (*FilterExpressions_FilterExpression_FilterValue)(nil), // 13: protobufMessages.FilterExpressions.FilterExpression.FilterValue - (*FilterExpressions_FilterExpression_FilterValue_PathsValue)(nil), // 14: protobufMessages.FilterExpressions.FilterExpression.FilterValue.PathsValue - (*FilterExpressions_FilterExpression_FilterValue_TimebasedValue)(nil), // 15: protobufMessages.FilterExpressions.FilterExpression.FilterValue.TimebasedValue - (*FilterExpressions_FilterExpression_FilterValue_RangeValue)(nil), // 16: protobufMessages.FilterExpressions.FilterExpression.FilterValue.RangeValue - (*FilterExpressions_FilterExpression_FilterValue_ChangeValue)(nil), // 17: protobufMessages.FilterExpressions.FilterExpression.FilterValue.ChangeValue - (*FilterExpressions_FilterExpression_FilterValue_CurvelogValue)(nil), // 18: protobufMessages.FilterExpressions.FilterExpression.FilterValue.CurvelogValue - (*FilterExpressions_FilterExpression_FilterValue_HistoryValue)(nil), // 19: protobufMessages.FilterExpressions.FilterExpression.FilterValue.HistoryValue - (*FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue)(nil), // 20: protobufMessages.FilterExpressions.FilterExpression.FilterValue.StaticMetadataValue - (*FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue)(nil), // 21: protobufMessages.FilterExpressions.FilterExpression.FilterValue.DynamicMetadataValue - (*DataPackages_DataPackage)(nil), // 22: protobufMessages.DataPackages.DataPackage - (*DataPackages_DataPackage_DataPoint)(nil), // 23: protobufMessages.DataPackages.DataPackage.DataPoint - (*GetMessage_RequestMessage)(nil), // 24: protobufMessages.GetMessage.RequestMessage - (*GetMessage_ResponseMessage)(nil), // 25: protobufMessages.GetMessage.ResponseMessage - (*GetMessage_ResponseMessage_SuccessResponseMessage)(nil), // 26: protobufMessages.GetMessage.ResponseMessage.SuccessResponseMessage - (*SetMessage_RequestMessage)(nil), // 27: protobufMessages.SetMessage.RequestMessage - (*SetMessage_ResponseMessage)(nil), // 28: protobufMessages.SetMessage.ResponseMessage - (*SubscribeMessage_RequestMessage)(nil), // 29: protobufMessages.SubscribeMessage.RequestMessage - (*SubscribeMessage_ResponseMessage)(nil), // 30: protobufMessages.SubscribeMessage.ResponseMessage - (*SubscribeMessage_NotificationMessage)(nil), // 31: protobufMessages.SubscribeMessage.NotificationMessage - (*SubscribeMessage_NotificationMessage_SuccessResponseMessage)(nil), // 32: protobufMessages.SubscribeMessage.NotificationMessage.SuccessResponseMessage - (*UnSubscribeMessage_RequestMessage)(nil), // 33: protobufMessages.UnSubscribeMessage.RequestMessage - (*UnSubscribeMessage_ResponseMessage)(nil), // 34: protobufMessages.UnSubscribeMessage.ResponseMessage -} -var file_VISSv2messages_proto_depIdxs = []int32{ + (FilterExpressions_FilterExpression_FilterType)(0), // 3: protobufMessages.FilterExpressions.FilterExpression.FilterType + (*ErrorResponseMessage)(nil), // 4: protobufMessages.ErrorResponseMessage + (*FilterExpressions)(nil), // 5: protobufMessages.FilterExpressions + (*DataPackages)(nil), // 6: protobufMessages.DataPackages + (*GetMessage)(nil), // 7: protobufMessages.GetMessage + (*SetMessage)(nil), // 8: protobufMessages.SetMessage + (*SubscribeMessage)(nil), // 9: protobufMessages.SubscribeMessage + (*UnSubscribeMessage)(nil), // 10: protobufMessages.UnSubscribeMessage + (*ProtobufMessage)(nil), // 11: protobufMessages.ProtobufMessage + (*FilterExpressions_FilterExpression)(nil), // 12: protobufMessages.FilterExpressions.FilterExpression + (*FilterExpressions_FilterExpression_FilterValue)(nil), // 13: protobufMessages.FilterExpressions.FilterExpression.FilterValue + (*FilterExpressions_FilterExpression_FilterValue_PathsValue)(nil), // 14: protobufMessages.FilterExpressions.FilterExpression.FilterValue.PathsValue + (*FilterExpressions_FilterExpression_FilterValue_TimebasedValue)(nil), // 15: protobufMessages.FilterExpressions.FilterExpression.FilterValue.TimebasedValue + (*FilterExpressions_FilterExpression_FilterValue_RangeValue)(nil), // 16: protobufMessages.FilterExpressions.FilterExpression.FilterValue.RangeValue + (*FilterExpressions_FilterExpression_FilterValue_ChangeValue)(nil), // 17: protobufMessages.FilterExpressions.FilterExpression.FilterValue.ChangeValue + (*FilterExpressions_FilterExpression_FilterValue_CurvelogValue)(nil), // 18: protobufMessages.FilterExpressions.FilterExpression.FilterValue.CurvelogValue + (*FilterExpressions_FilterExpression_FilterValue_HistoryValue)(nil), // 19: protobufMessages.FilterExpressions.FilterExpression.FilterValue.HistoryValue + (*FilterExpressions_FilterExpression_FilterValue_MetadataValue)(nil), // 20: protobufMessages.FilterExpressions.FilterExpression.FilterValue.MetadataValue + (*DataPackages_DataPackage)(nil), // 21: protobufMessages.DataPackages.DataPackage + (*DataPackages_DataPackage_DataPoint)(nil), // 22: protobufMessages.DataPackages.DataPackage.DataPoint + (*GetMessage_RequestMessage)(nil), // 23: protobufMessages.GetMessage.RequestMessage + (*GetMessage_ResponseMessage)(nil), // 24: protobufMessages.GetMessage.ResponseMessage + (*GetMessage_ResponseMessage_SuccessResponseMessage)(nil), // 25: protobufMessages.GetMessage.ResponseMessage.SuccessResponseMessage + (*SetMessage_RequestMessage)(nil), // 26: protobufMessages.SetMessage.RequestMessage + (*SetMessage_ResponseMessage)(nil), // 27: protobufMessages.SetMessage.ResponseMessage + (*SubscribeMessage_RequestMessage)(nil), // 28: protobufMessages.SubscribeMessage.RequestMessage + (*SubscribeMessage_ResponseMessage)(nil), // 29: protobufMessages.SubscribeMessage.ResponseMessage + (*SubscribeMessage_NotificationMessage)(nil), // 30: protobufMessages.SubscribeMessage.NotificationMessage + (*SubscribeMessage_NotificationMessage_SuccessResponseMessage)(nil), // 31: protobufMessages.SubscribeMessage.NotificationMessage.SuccessResponseMessage + (*UnSubscribeMessage_RequestMessage)(nil), // 32: protobufMessages.UnSubscribeMessage.RequestMessage + (*UnSubscribeMessage_ResponseMessage)(nil), // 33: protobufMessages.UnSubscribeMessage.ResponseMessage +} +var file_VISSv3messages_proto_depIdxs = []int32{ 12, // 0: protobufMessages.FilterExpressions.FilterExp:type_name -> protobufMessages.FilterExpressions.FilterExpression - 22, // 1: protobufMessages.DataPackages.Data:type_name -> protobufMessages.DataPackages.DataPackage + 21, // 1: protobufMessages.DataPackages.Data:type_name -> protobufMessages.DataPackages.DataPackage 1, // 2: protobufMessages.GetMessage.MType:type_name -> protobufMessages.MessageType - 24, // 3: protobufMessages.GetMessage.Request:type_name -> protobufMessages.GetMessage.RequestMessage - 25, // 4: protobufMessages.GetMessage.Response:type_name -> protobufMessages.GetMessage.ResponseMessage + 23, // 3: protobufMessages.GetMessage.Request:type_name -> protobufMessages.GetMessage.RequestMessage + 24, // 4: protobufMessages.GetMessage.Response:type_name -> protobufMessages.GetMessage.ResponseMessage 1, // 5: protobufMessages.SetMessage.MType:type_name -> protobufMessages.MessageType - 27, // 6: protobufMessages.SetMessage.Request:type_name -> protobufMessages.SetMessage.RequestMessage - 28, // 7: protobufMessages.SetMessage.Response:type_name -> protobufMessages.SetMessage.ResponseMessage + 26, // 6: protobufMessages.SetMessage.Request:type_name -> protobufMessages.SetMessage.RequestMessage + 27, // 7: protobufMessages.SetMessage.Response:type_name -> protobufMessages.SetMessage.ResponseMessage 1, // 8: protobufMessages.SubscribeMessage.MType:type_name -> protobufMessages.MessageType - 29, // 9: protobufMessages.SubscribeMessage.Request:type_name -> protobufMessages.SubscribeMessage.RequestMessage - 30, // 10: protobufMessages.SubscribeMessage.Response:type_name -> protobufMessages.SubscribeMessage.ResponseMessage - 31, // 11: protobufMessages.SubscribeMessage.Notification:type_name -> protobufMessages.SubscribeMessage.NotificationMessage + 28, // 9: protobufMessages.SubscribeMessage.Request:type_name -> protobufMessages.SubscribeMessage.RequestMessage + 29, // 10: protobufMessages.SubscribeMessage.Response:type_name -> protobufMessages.SubscribeMessage.ResponseMessage + 30, // 11: protobufMessages.SubscribeMessage.Notification:type_name -> protobufMessages.SubscribeMessage.NotificationMessage 1, // 12: protobufMessages.UnSubscribeMessage.MType:type_name -> protobufMessages.MessageType - 33, // 13: protobufMessages.UnSubscribeMessage.Request:type_name -> protobufMessages.UnSubscribeMessage.RequestMessage - 34, // 14: protobufMessages.UnSubscribeMessage.Response:type_name -> protobufMessages.UnSubscribeMessage.ResponseMessage + 32, // 13: protobufMessages.UnSubscribeMessage.Request:type_name -> protobufMessages.UnSubscribeMessage.RequestMessage + 33, // 14: protobufMessages.UnSubscribeMessage.Response:type_name -> protobufMessages.UnSubscribeMessage.ResponseMessage 0, // 15: protobufMessages.ProtobufMessage.Method:type_name -> protobufMessages.MessageMethod 7, // 16: protobufMessages.ProtobufMessage.Get:type_name -> protobufMessages.GetMessage 8, // 17: protobufMessages.ProtobufMessage.Set:type_name -> protobufMessages.SetMessage @@ -2698,39 +2620,38 @@ var file_VISSv2messages_proto_depIdxs = []int32{ 17, // 25: protobufMessages.FilterExpressions.FilterExpression.FilterValue.ValueChange:type_name -> protobufMessages.FilterExpressions.FilterExpression.FilterValue.ChangeValue 18, // 26: protobufMessages.FilterExpressions.FilterExpression.FilterValue.ValueCurvelog:type_name -> protobufMessages.FilterExpressions.FilterExpression.FilterValue.CurvelogValue 19, // 27: protobufMessages.FilterExpressions.FilterExpression.FilterValue.ValueHistory:type_name -> protobufMessages.FilterExpressions.FilterExpression.FilterValue.HistoryValue - 20, // 28: protobufMessages.FilterExpressions.FilterExpression.FilterValue.ValueStaticMetadata:type_name -> protobufMessages.FilterExpressions.FilterExpression.FilterValue.StaticMetadataValue - 21, // 29: protobufMessages.FilterExpressions.FilterExpression.FilterValue.ValueDynamicMetadata:type_name -> protobufMessages.FilterExpressions.FilterExpression.FilterValue.DynamicMetadataValue - 23, // 30: protobufMessages.DataPackages.DataPackage.Dp:type_name -> protobufMessages.DataPackages.DataPackage.DataPoint - 5, // 31: protobufMessages.GetMessage.RequestMessage.Filter:type_name -> protobufMessages.FilterExpressions - 2, // 32: protobufMessages.GetMessage.ResponseMessage.Status:type_name -> protobufMessages.ResponseStatus - 26, // 33: protobufMessages.GetMessage.ResponseMessage.SuccessResponse:type_name -> protobufMessages.GetMessage.ResponseMessage.SuccessResponseMessage - 4, // 34: protobufMessages.GetMessage.ResponseMessage.ErrorResponse:type_name -> protobufMessages.ErrorResponseMessage - 6, // 35: protobufMessages.GetMessage.ResponseMessage.SuccessResponseMessage.DataPack:type_name -> protobufMessages.DataPackages - 2, // 36: protobufMessages.SetMessage.ResponseMessage.Status:type_name -> protobufMessages.ResponseStatus - 4, // 37: protobufMessages.SetMessage.ResponseMessage.ErrorResponse:type_name -> protobufMessages.ErrorResponseMessage - 5, // 38: protobufMessages.SubscribeMessage.RequestMessage.Filter:type_name -> protobufMessages.FilterExpressions - 2, // 39: protobufMessages.SubscribeMessage.ResponseMessage.Status:type_name -> protobufMessages.ResponseStatus - 4, // 40: protobufMessages.SubscribeMessage.ResponseMessage.ErrorResponse:type_name -> protobufMessages.ErrorResponseMessage - 2, // 41: protobufMessages.SubscribeMessage.NotificationMessage.Status:type_name -> protobufMessages.ResponseStatus - 32, // 42: protobufMessages.SubscribeMessage.NotificationMessage.SuccessResponse:type_name -> protobufMessages.SubscribeMessage.NotificationMessage.SuccessResponseMessage - 4, // 43: protobufMessages.SubscribeMessage.NotificationMessage.ErrorResponse:type_name -> protobufMessages.ErrorResponseMessage - 6, // 44: protobufMessages.SubscribeMessage.NotificationMessage.SuccessResponseMessage.DataPack:type_name -> protobufMessages.DataPackages - 2, // 45: protobufMessages.UnSubscribeMessage.ResponseMessage.Status:type_name -> protobufMessages.ResponseStatus - 4, // 46: protobufMessages.UnSubscribeMessage.ResponseMessage.ErrorResponse:type_name -> protobufMessages.ErrorResponseMessage - 47, // [47:47] is the sub-list for method output_type - 47, // [47:47] is the sub-list for method input_type - 47, // [47:47] is the sub-list for extension type_name - 47, // [47:47] is the sub-list for extension extendee - 0, // [0:47] is the sub-list for field type_name -} - -func init() { file_VISSv2messages_proto_init() } -func file_VISSv2messages_proto_init() { - if File_VISSv2messages_proto != nil { + 20, // 28: protobufMessages.FilterExpressions.FilterExpression.FilterValue.ValueMetadata:type_name -> protobufMessages.FilterExpressions.FilterExpression.FilterValue.MetadataValue + 22, // 29: protobufMessages.DataPackages.DataPackage.Dp:type_name -> protobufMessages.DataPackages.DataPackage.DataPoint + 5, // 30: protobufMessages.GetMessage.RequestMessage.Filter:type_name -> protobufMessages.FilterExpressions + 2, // 31: protobufMessages.GetMessage.ResponseMessage.Status:type_name -> protobufMessages.ResponseStatus + 25, // 32: protobufMessages.GetMessage.ResponseMessage.SuccessResponse:type_name -> protobufMessages.GetMessage.ResponseMessage.SuccessResponseMessage + 4, // 33: protobufMessages.GetMessage.ResponseMessage.ErrorResponse:type_name -> protobufMessages.ErrorResponseMessage + 6, // 34: protobufMessages.GetMessage.ResponseMessage.SuccessResponseMessage.DataPack:type_name -> protobufMessages.DataPackages + 2, // 35: protobufMessages.SetMessage.ResponseMessage.Status:type_name -> protobufMessages.ResponseStatus + 4, // 36: protobufMessages.SetMessage.ResponseMessage.ErrorResponse:type_name -> protobufMessages.ErrorResponseMessage + 5, // 37: protobufMessages.SubscribeMessage.RequestMessage.Filter:type_name -> protobufMessages.FilterExpressions + 2, // 38: protobufMessages.SubscribeMessage.ResponseMessage.Status:type_name -> protobufMessages.ResponseStatus + 4, // 39: protobufMessages.SubscribeMessage.ResponseMessage.ErrorResponse:type_name -> protobufMessages.ErrorResponseMessage + 2, // 40: protobufMessages.SubscribeMessage.NotificationMessage.Status:type_name -> protobufMessages.ResponseStatus + 31, // 41: protobufMessages.SubscribeMessage.NotificationMessage.SuccessResponse:type_name -> protobufMessages.SubscribeMessage.NotificationMessage.SuccessResponseMessage + 4, // 42: protobufMessages.SubscribeMessage.NotificationMessage.ErrorResponse:type_name -> protobufMessages.ErrorResponseMessage + 6, // 43: protobufMessages.SubscribeMessage.NotificationMessage.SuccessResponseMessage.DataPack:type_name -> protobufMessages.DataPackages + 2, // 44: protobufMessages.UnSubscribeMessage.ResponseMessage.Status:type_name -> protobufMessages.ResponseStatus + 4, // 45: protobufMessages.UnSubscribeMessage.ResponseMessage.ErrorResponse:type_name -> protobufMessages.ErrorResponseMessage + 46, // [46:46] is the sub-list for method output_type + 46, // [46:46] is the sub-list for method input_type + 46, // [46:46] is the sub-list for extension type_name + 46, // [46:46] is the sub-list for extension extendee + 0, // [0:46] is the sub-list for field type_name +} + +func init() { file_VISSv3messages_proto_init() } +func file_VISSv3messages_proto_init() { + if File_VISSv3messages_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_VISSv2messages_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ErrorResponseMessage); i { case 0: return &v.state @@ -2742,7 +2663,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions); i { case 0: return &v.state @@ -2754,7 +2675,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DataPackages); i { case 0: return &v.state @@ -2766,7 +2687,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetMessage); i { case 0: return &v.state @@ -2778,7 +2699,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetMessage); i { case 0: return &v.state @@ -2790,7 +2711,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeMessage); i { case 0: return &v.state @@ -2802,7 +2723,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnSubscribeMessage); i { case 0: return &v.state @@ -2814,7 +2735,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProtobufMessage); i { case 0: return &v.state @@ -2826,7 +2747,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions_FilterExpression); i { case 0: return &v.state @@ -2838,7 +2759,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions_FilterExpression_FilterValue); i { case 0: return &v.state @@ -2850,7 +2771,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions_FilterExpression_FilterValue_PathsValue); i { case 0: return &v.state @@ -2862,7 +2783,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions_FilterExpression_FilterValue_TimebasedValue); i { case 0: return &v.state @@ -2874,7 +2795,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions_FilterExpression_FilterValue_RangeValue); i { case 0: return &v.state @@ -2886,7 +2807,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions_FilterExpression_FilterValue_ChangeValue); i { case 0: return &v.state @@ -2898,7 +2819,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions_FilterExpression_FilterValue_CurvelogValue); i { case 0: return &v.state @@ -2910,7 +2831,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressions_FilterExpression_FilterValue_HistoryValue); i { case 0: return &v.state @@ -2922,20 +2843,8 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FilterExpressions_FilterExpression_FilterValue_StaticMetadataValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_VISSv2messages_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue); i { + file_VISSv3messages_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FilterExpressions_FilterExpression_FilterValue_MetadataValue); i { case 0: return &v.state case 1: @@ -2946,7 +2855,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DataPackages_DataPackage); i { case 0: return &v.state @@ -2958,7 +2867,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DataPackages_DataPackage_DataPoint); i { case 0: return &v.state @@ -2970,7 +2879,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetMessage_RequestMessage); i { case 0: return &v.state @@ -2982,7 +2891,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetMessage_ResponseMessage); i { case 0: return &v.state @@ -2994,7 +2903,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetMessage_ResponseMessage_SuccessResponseMessage); i { case 0: return &v.state @@ -3006,7 +2915,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetMessage_RequestMessage); i { case 0: return &v.state @@ -3018,7 +2927,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetMessage_ResponseMessage); i { case 0: return &v.state @@ -3030,7 +2939,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeMessage_RequestMessage); i { case 0: return &v.state @@ -3042,7 +2951,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeMessage_ResponseMessage); i { case 0: return &v.state @@ -3054,7 +2963,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeMessage_NotificationMessage); i { case 0: return &v.state @@ -3066,7 +2975,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeMessage_NotificationMessage_SuccessResponseMessage); i { case 0: return &v.state @@ -3078,7 +2987,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnSubscribeMessage_RequestMessage); i { case 0: return &v.state @@ -3090,7 +2999,7 @@ func file_VISSv2messages_proto_init() { return nil } } - file_VISSv2messages_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_VISSv3messages_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnSubscribeMessage_ResponseMessage); i { case 0: return &v.state @@ -3103,42 +3012,42 @@ func file_VISSv2messages_proto_init() { } } } - file_VISSv2messages_proto_msgTypes[0].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[3].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[4].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[5].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[6].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[7].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[9].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[18].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[19].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[20].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[21].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[22].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[23].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[24].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[25].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[26].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[27].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[29].OneofWrappers = []interface{}{} - file_VISSv2messages_proto_msgTypes[30].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[0].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[3].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[4].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[5].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[6].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[7].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[9].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[17].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[18].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[19].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[20].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[21].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[22].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[23].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[24].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[25].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[26].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[28].OneofWrappers = []interface{}{} + file_VISSv3messages_proto_msgTypes[29].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_VISSv2messages_proto_rawDesc, + RawDescriptor: file_VISSv3messages_proto_rawDesc, NumEnums: 4, - NumMessages: 31, + NumMessages: 30, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_VISSv2messages_proto_goTypes, - DependencyIndexes: file_VISSv2messages_proto_depIdxs, - EnumInfos: file_VISSv2messages_proto_enumTypes, - MessageInfos: file_VISSv2messages_proto_msgTypes, + GoTypes: file_VISSv3messages_proto_goTypes, + DependencyIndexes: file_VISSv3messages_proto_depIdxs, + EnumInfos: file_VISSv3messages_proto_enumTypes, + MessageInfos: file_VISSv3messages_proto_msgTypes, }.Build() - File_VISSv2messages_proto = out.File - file_VISSv2messages_proto_rawDesc = nil - file_VISSv2messages_proto_goTypes = nil - file_VISSv2messages_proto_depIdxs = nil + File_VISSv3messages_proto = out.File + file_VISSv3messages_proto_rawDesc = nil + file_VISSv3messages_proto_goTypes = nil + file_VISSv3messages_proto_depIdxs = nil } diff --git a/server/ServerSignalSpecification.vspec b/server/ServerSignalSpecification.vspec new file mode 100644 index 00000000..249b7c14 --- /dev/null +++ b/server/ServerSignalSpecification.vspec @@ -0,0 +1,163 @@ +# Copyright (c) 2024 Contributors to COVESA +# +# This program and the accompanying materials are made available under the +# terms of the Mozilla Public License 2.0 which is available at +# https://www.mozilla.org/en-US/MPL/2.0/ +# +# SPDX-License-Identifier: MPL-2.0 + +# +# Server capabilities Signal Specification file +# +# +# The server capabilities declaration. +# +Server: + type: branch + description: Root for the server capabilities. + +Server.Support: + type: branch + description: Top branch declaring the server supported features. + +Server.Support.Protocol: + type: attribute + datatype: string[] + default: ["HTTPS", "WSS", "MQTTS", "gRPC"] + description: List of supported transport protocols. + +Server.Support.Security: + type: attribute + datatype: string[] + default: ["TLSv1.2", "access-control", "ecf"] + description: List of supported security related features. + +Server.Support.Filter: + type: attribute + datatype: string[] + default: ["timebased", "change", "range", "curvelog", "paths"] + description: List of supported filter features. + +Server.Config: + type: branch + description: Top branch declaring the configuration of server supported features. + +Server.Config.Protocol: + type: branch + description: Top branch declaring the configuration of server supported protocols. + +Server.Config.Protocol.Http: + type: branch + description: Top branch for the server supported HTTP protocol. + +Server.Config.Protocol.Http.Primary: + type: branch + description: HTTP configuration for the primary payload format. + +Server.Config.Protocol.Http.Primary.PortNum: + type: attribute + datatype: uint32 + default: 443 + description: HTTP port number for the primary payload format. + +Server.Config.Protocol.Websocket: + type: branch + description: Top branch for the server supported Websocket protocol. + +Server.Config.Protocol.Websocket.Primary: + type: branch + description: Websocket configuration for the primary payload format. + +Server.Config.Protocol.Websocket.Primary.PortNum: + type: attribute + datatype: uint32 + default: 6443 + description: Websocket protocol port number for the primary payload format. + +Server.Config.Protocol.Websocket.Protobuf: + type: branch + description: Websocket configuration for the protobuf encoded payload format. + +Server.Config.Protocol.Websocket.Protobuf.PortNum: + type: attribute + datatype: uint32 + description: Websocket protocol port number for the protobuf encoded payload format. + +Server.Config.Protocol.Mqtt: + type: branch + description: Top branch for the server supported MQTT protocol. + +Server.Config.Protocol.Mqtt.PortNum: + type: attribute + datatype: uint32 + default: 8883 + description: MQTT port number. + +Server.Config.Protocol.Mqtt.Primary: + type: branch + description: MQTT configuration for the primary payload format. + +Server.Config.Protocol.Mqtt.Primary.Topic: + type: attribute + datatype: string + description: MQTT topic name for the primary payload format. + +Server.Config.Protocol.Mqtt.Protobuf: + type: branch + description: MQTT configuration for the protobuf encoded payload format. + +Server.Config.Protocol.Mqtt.Protobuf.Topic: + type: attribute + datatype: string + description: Postfix "/protobuf" added to the MQTT topic name for the protobuf encoded payload format. + +Server.Config.Protocol.Grpc: + type: branch + description: Top branch for the server supported gRPC protocol. + +Server.Config.Protocol.Grpc.Protobuf: + type: branch + description: gRPC configuration with the protobuf encoded payload format. + +Server.Config.Protocol.Grpc.Protobuf.PortNum: + type: attribute + datatype: uint32 + description: gRPC port number for the protobuf encoded payload format. + +Server.Config.AccessControl: + type: branch + description: Access control configuration. + +Server.Config.AccessControl.AgtsUrl: + type: attribute + datatype: string + description: Access Grant Token Server URL including port number and path. + +Server.Config.AccessControl.AgtsPortNum: + type: attribute + datatype: uint32 + default: 7443 + description: Access Token Server port number. + +Server.Config.AccessControl.AtsPortNum: + type: attribute + datatype: uint32 + default: 8443 + description: Access Token Server port number. + +Server.Config.AccessControl.Flow: + type: attribute + datatype: string[] + default: ["short-term", "long-term"] + description: Supported access control flows. + +Server.Config.Consent: + type: branch + description: Consent configuration. + +Server.Config.Consent.Ecf: + type: attribute + datatype: string + description: External Consent Framework description. + + diff --git a/server/vissv2server/forest/server.binary b/server/vissv2server/forest/server.binary index a7cf6cee47a976f2a284acb041e5e25cdddf1003..ed28147fe195d2853a06c11562d3e8f423ad76bc 100644 GIT binary patch delta 18 acmew)@?2!YCPqfn$(tGVHoswP;{X6k{Rch( delta 26 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 E0aPxcKmY&$ diff --git a/server/vissv2server/forest/vss_vissv2_vehicle.binary b/server/vissv2server/forest/vss_vissv2_vehicle.binary deleted file mode 100644 index 887b8bbe4b0a66143156777a036d684409aa4279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169416 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 E0aPxcKmY&$ diff --git a/server/vissv2server/serviceMgr/serviceMgr.go b/server/vissv2server/serviceMgr/serviceMgr.go index 59341342..d91866b0 100644 --- a/server/vissv2server/serviceMgr/serviceMgr.go +++ b/server/vissv2server/serviceMgr/serviceMgr.go @@ -894,11 +894,6 @@ func getDataPack(pathArray []string, filterList []utils.FilterObject) string { utils.Info.Printf("Historic data request, period=%s", period) getHistory = true break - } else if filterList[i].Type == "dynamic-metadata" { - domain = filterList[i].Parameter - utils.Info.Printf("Dynamic metadata request, domain=%s", domain) - getDomain = true - break } } } @@ -1402,11 +1397,6 @@ func ServiceMgrInit(mgrId int, serviceMgrChan chan string, stateStorageType stri dataChan <- utils.FinalizeMessage(errorResponseMap) break } - if filterList[0].Type == "dynamic-metadata" && filterList[0].Parameter == "server_capabilities" { - metadataPack := `{"filter":["paths","timebased","change","range","curvelog","history","dynamic-metadata","static-metadata"],"access_ctrl":["short_term","long_term","signalset_claim"],"transport_protocol":["https","wss","mqtts"]}` - dataChan <- addPackage(utils.FinalizeMessage(responseMap), "metadata", metadataPack) - break - } } dataPack := getDataPack(pathArray, filterList) if len(dataPack) == 0 { diff --git a/server/vissv2server/viss.him b/server/vissv2server/viss.him index c5b420e9..7cd0b618 100644 --- a/server/vissv2server/viss.him +++ b/server/vissv2server/viss.him @@ -6,18 +6,18 @@ HIM: HIM.Vehicle: type: direct domain: Vehicle.Car.ResourceData - version: 5.0 - local: forest/vss_vissv2.binary + version: 5.0.0 + local: forest/vss_v5.0.0.binary # public: https://himrepo.oem.com?instance=Vehicle.Car.ResourceData.X.Y.Z description: A VSS tree. -HIM.Vehicle2: - type: direct - domain: Vehicle.Car.ResourceData - version: 5.0 - local: forest/vss_vissv2.binary +#HIM.Vehicle2: +# type: direct +# domain: Vehicle.Car.ResourceData +# version: 5.0.0 +# local: forest/vss_v5.0.0.binary # public: https://himrepo.oem.com?instance=Vehicle.Car.ResourceData.X.Y.Z - description: Another VSS tree. +# description: Another VSS tree. HIM.Types: type: direct @@ -32,5 +32,5 @@ HIM.Server: domain: Server.Capabilities.ResourceData version: 0.1 local: forest/server.binary -# public: https://himrepo.oem.com?instance=Vehicle.Car.ResourceData.X.Y.Z +# public: https://himrepo.oem.com?instance=Server.Capabilities.ResourceData.X.Y.Z description: The server capabilities tree. diff --git a/server/vissv2server/vissv2server.go b/server/vissv2server/vissv2server.go index d102a98d..14f11063 100644 --- a/server/vissv2server/vissv2server.go +++ b/server/vissv2server/vissv2server.go @@ -478,7 +478,7 @@ func isValidGetParams(request string) bool { return true } -func isValidGetFilter(request string) bool { // paths, history,static-metadata, dynamic-metadata supported +func isValidGetFilter(request string) bool { // paths, history, metadata supported if strings.Contains(request, "paths") == true { if strings.Contains(request, "parameter") == true { return true @@ -489,12 +489,7 @@ func isValidGetFilter(request string) bool { // paths, history,static-metadata, return true } } - if strings.Contains(request, "static-metadata") == true { - if strings.Contains(request, "parameter") == true { - return true - } - } - if strings.Contains(request, "dynamic-metadata") == true { + if strings.Contains(request, "metadata") == true { if strings.Contains(request, "parameter") == true { return true } @@ -516,7 +511,7 @@ func isValidSubscribeParams(request string) bool { return true } -func isValidSubscribeFilter(request string) bool { // paths, history, timebased, range, change, curvelog, static-metadata, dynamic-metadata supported +func isValidSubscribeFilter(request string) bool { // paths, history, timebased, range, change, curvelog, metadata supported if isValidGetFilter(request) == true { return true } @@ -636,8 +631,8 @@ func issueServiceRequest(requestMap map[string]interface{}, tDChanIndex int, sDC break // only one paths object is allowed } - // STATIC METADATA FILTER - if filterList[i].Type == "static-metadata" { + // METADATA FILTER + if filterList[i].Type == "metadata" { tokenContext := getTokenContext(requestMap) // Gets the client context from the token in the request if len(tokenContext) == 0 { tokenContext = "Undefined+Undefined+Undefined" @@ -656,11 +651,6 @@ func issueServiceRequest(requestMap map[string]interface{}, tDChanIndex int, sDC backendChan[tDChanIndex] <- utils.FinalizeMessage(errorResponseMap) return } - // DYNAMIC METADATA FILTER - if filterList[i].Type == "dynamic-metadata" && filterList[i].Parameter == "server_capabilities" { - serviceDataChan[sDChanIndex] <- utils.FinalizeMessage(requestMap) // no further verification - return - } } } if requestMap["filter"] == nil || len(searchPath) == 0 { @@ -753,7 +743,7 @@ func issueServiceRequest(requestMap map[string]interface{}, tDChanIndex int, sDC func main() { // Create new parser object - parser := argparse.NewParser("print", "Server Core") + parser := argparse.NewParser("print", "VISS v3.0 Server") // Create string flag logFile := parser.Flag("", "logfile", &argparse.Options{Required: false, Help: "outputs to logfile in ./logs folder"}) logLevel := parser.Selector("", "loglevel", []string{"trace", "debug", "info", "warn", "error", "fatal", "panic"}, &argparse.Options{ diff --git a/tutorial/content/_index.md b/tutorial/content/_index.md index ae3d2f35..d4e11444 100644 --- a/tutorial/content/_index.md +++ b/tutorial/content/_index.md @@ -18,6 +18,11 @@ It is with a few small exceptions backwards compatible with VISSv2.0. The except * gRPC support. This wa already available on an experimental level in VISSR @v2.0. * Any further new features added to the VISSv3.0 specification will become implemented. +### Non-backwards compatible changes from VISSv2.0 +* The filter keyname "type" is changed to "variant". +* The filter variants "static-metadata" and "dynamic-metadata" are replaced by the variant "metadata". +* The "subscriptionId" parameter in unsubscribe response messages is deleted. + Also found on this repo are implementations of other components that are needed to realize a communication tech stack that reaches from clients through the server and to the underlying vehicle system interface. ![VISSv2 communication tech stack](/vissr/images/WAII-tech-stack.jpg?width=40pc) @@ -32,16 +37,3 @@ These software components (SwCs) can be categorized as follows: The tutorial describes each SwC category in a separate chapter. It also contains a few Proof of concept (POC) examples, and information about installing, building and running Golang based SwCs, a Docker containerization, and about some peripheral components. - -### Client deployment options -As is shown in the figure above the VISS interface is well suited to serve clients deployed in different environments: -* Cloud deployment. Typically connected via Internet connectivity. -* Proximity deployment. Typcially in a mobile phone connected via any short range connectivity such as Bluetooth or WiFi. -* In-vehicle deployment. Typically as an app in the infotainment environment. - -The payloads handled by the clients at any of these deployments are identical. - -The MQTT transport protocol option, with the broker deployed in the cloud, -is well suited for the client cloud deployment as the communication can traverse across subnets. -The thin application layer protocol on top of MQTT that VISS defines makes it possible -to keep the client-server communication, and payload compatibility. diff --git a/tutorial/content/build-system/_index.md b/tutorial/content/build-system/_index.md index 8526854c..8244749f 100644 --- a/tutorial/content/build-system/_index.md +++ b/tutorial/content/build-system/_index.md @@ -53,7 +53,8 @@ If it says "package main" it is a separate executable and shall then be built an Logging can be command line configured at startup. * logging level can be set to either of [trace, debug, info, warn, error, fatal, panic]. * logging output destination. It can either be written to file, or directed to standard output. -The levels currently used are mainly info, warn, error. Info is appropriate during testing and debugging, while error is appropriate when performance is important. + +The levels currently used are mainly info, warning, error. Info is appropriate during testing and debugging, while error is appropriate when performance is important. ### Transport protocols Besides the transport protocols diff --git a/tutorial/content/client/_index.md b/tutorial/content/client/_index.md index 455273d8..7be20528 100644 --- a/tutorial/content/client/_index.md +++ b/tutorial/content/client/_index.md @@ -2,9 +2,38 @@ title: "VISSv2 Clients" --- -There are a number of different clients avaliable on this repo in the client/client-1.0 directory. +## Client deployment options +As is shown in the figure above the VISS interface is well suited to serve clients deployed in different environments: +* Cloud deployment. Typically connected via Internet connectivity. +* Proximity deployment. Typcially in a mobile phone connected via any short range connectivity such as Bluetooth or WiFi. +* In-vehicle deployment. Typically as an app in the infotainment environment. -## Compression client +The payloads handled by the clients at any of these deployments are identical. + +The MQTT transport protocol option, with the broker deployed in the cloud, +is well suited for the client cloud deployment as the communication can traverse across subnets. +The thin application layer protocol on top of MQTT that VISS defines makes it possible +to keep the client-server communication, and payload compatibility. + +## Client implementations +There are a number of different clients avaliable on this repo, mainly in the client/client-1.0 directory. + +### gRPC client +The gRPC implementation uses the protobuf encoding in the VISSv2messages.proto file found [here](https://github.com/covesa/vissr/tree/master/grpc_pb). +The server currently only supports the protobuf level 1 encoding. + +### MQTT client +The [MQTT client](https://github.com/UlfBj/vissr/tree/master/client/client-1.0/mqtt_client) implements the application level protocol described in the +[specification](https://raw.githack.com/COVESA/vehicle-information-service-specification/main/spec/VISSv2_Transport.html#application-level-protocol). + +### CSV client +The [CSV client]() is developed for testing the [curve logging algorithm](https://www.geotab.com/blog/gps-logging-curve-algorithm/) that Geotab has opened for public cuse. +A client can equest it to be aplied to data by using a [filter](https://raw.githack.com/COVESA/vehicle-information-service-specification/main/spec/VISSv2_Core.html#curvelog-filter-operation) option. + +It generates a comma separated (CSV) file in which it saves the curve logged data that it has reuested from the server. +The CSV format makes it easy to import it into an Excel sheet and visualize it as a graph which allows it e. g. to be compared with the original, non-curved data. + +### Compression client The [compression client](https://github.com/covesa/vissr/blob/master/client/client-1.0/compress_client/compress_client.go) can be used for testing three payload compression variants. * Proprietary compression algorithm * Protobuf encoding, level 1 @@ -31,21 +60,6 @@ Going the other way, the array is simply indexed by the integer value from the p The string based timestamps are replaced by an int32 as shown in the CompressTS() procedure found in [computils.go](https://github.com/covesa/vissr/blob/master/utils/computils.go). Level 2 achieves compression rates of around 5 or better. -## gRPC client -The gRPC implementation uses the protobuf encoding in the VISSv2messages.proto file found [here](https://github.com/covesa/vissr/tree/master/grpc_pb). -The server currently only supports the protobuf level 1 encoding. - -## MQTT client -The [MQTT client](https://github.com/UlfBj/vissr/tree/master/client/client-1.0/mqtt_client) implements the application level protocol described in the -[specification](https://raw.githack.com/COVESA/vehicle-information-service-specification/main/spec/VISSv2_Transport.html#application-level-protocol). - -## CSV client -The [CSV client]() is developed for testing the [curve logging algorithm](https://www.geotab.com/blog/gps-logging-curve-algorithm/) that Geotab has opened for public cuse. -A client can equest it to be aplied to data by using a [filter](https://raw.githack.com/COVESA/vehicle-information-service-specification/main/spec/VISSv2_Core.html#curvelog-filter-operation) option. - -It generates a comma separated (CSV) file in which it saves the curve logged data that it has reuested from the server. -The CSV format makes it easy to import it into an Excel sheet and visualize it as a graph which allows it e. g. to be compared with the original, non-curved data. - ## Java script clients There are a few clients that are written in Javascript, and thus when started opens in a browser. Thes clients can be quite handy for quick testing of the server functionality. @@ -89,6 +103,12 @@ In the leftmost field below "atserver" (no quotes) must be written, then in the A payload example can be found in the [appclient_commands.txt](https://github.com/covesa/vissr/blob/master/client/client-1.0/Javascript/appclient_commands.txt) file. The token that is provided in the request must include an Access Grant token from the response of a successful reuquest to the AGT server. +## Android app client +The client/android/covesa-vissr-app-demo directory contains an Android app that realizes a VISSv2.0 client. +This was demoed at the COVESA spring 2024 AMM in Gothenburg. +[Presentation](https://wiki.covesa.global/download/attachments/98271360/Empowering%20digital%20services%20-%20COVESA%20AMM%20Gbg%202024.pdf?version=1&modificationDate=1714401997052&api=v2), +[Demo recording](https://wiki.covesa.global/download/attachments/98271360/Empowering%20digital%20services%20-%20COVESA%20AMM%20Gbg%202024_Demo.mp4?version=1&modificationDate=1714634868645&api=v2) + ## Clients on other repos ### VISS Web Client diff --git a/tutorial/content/datastore/_index.md b/tutorial/content/datastore/_index.md index 898dc832..a3a5029a 100644 --- a/tutorial/content/datastore/_index.md +++ b/tutorial/content/datastore/_index.md @@ -2,13 +2,25 @@ title: "VISSR Data Storage" --- -Two realizations of data storage are available on the [COVESA/CCS-components Github](https://github.com/COVESA/ccs-components), -one using an SQLite database, and the other a Redis database. In addition WAII also supports connection to an Apache IoTDB server. +The VISSR tech stack architecture contains a data storage component located between the server and the feeder(s). +This data store provides a decoupling between the server data access operations and the data access operations of a feeder. +Feeders are expected to keep the data store updated with the latest available value of the signals defined in the VSS tree, +and for client read/subscribe requests the server reads from what is available in the data store. +This leads to that for all client read/subscribe requests the underlying vehicle system does not get involved by instantaneously +having to provide a signal value when asked for by a client. +Client write requests are not passed through the data store (except for the soon to be deprecated version 1 client template type), +but are instead communicated over an Unix Domain Socket IPC channel directly to the feeder by the server. -The server implements the APIs to these databases, which to use is selected by its command line configuration. +There are currently four plugin compatible data stores available, based on the following data base solutions. +* SQLite +* Redis +* Memcached +* Apache IotDB -The same support should be available on the other SwC that accesses the data storage, -however the current feeder implementation only implements Redis support, hence it is not merged into the master branch but resides on the feeder branch. +The server is at startup configured via a CLI parameter which DB solution to use, default is Redis. +A feeder must be configured to use the same DB, and implement the common interface for that DB. +An example of this is e. g. found in the feeder/feeder-template/feederv3/feederv3.go in the method +statestorageSet(path, val, ts) which implements SQLite, Redis and Memcached. It may be a bit confusing that sometimes this is referred to as "data store/storage" and sometimes "state storage". The latter name is legacy from a previous COVESA project, the Cloud & Connected Services project, while the former has emerged later in the COVESA architecture group work. @@ -16,4 +28,4 @@ An argument for keeping both could be to say that the state storage refers to a while the data store refers to a more general database that can also keep time series of values of a signal. There are two scenarios where the VISSv2 server operates on time series data, [curve logging](https://raw.githack.com/covesa/vehicle-information-service-specification/main/spec/VISSv2_Core.html#curvelog-filter-operation), and [historic data](https://raw.githack.com/covesa/vehicle-information-service-specification/main/spec/VISSv2_Core.html#history-filter-operation), -but in this server implementation these data series is temporarily stored within the server, so a "state storage" functionality is sufficient for its needs. +but in this server implementation these data series are temporarily stored within the server, so a "state storage" functionality is sufficient for its needs. diff --git a/tutorial/content/feeder/_index.md b/tutorial/content/feeder/_index.md index 0285068a..e21d6ebd 100644 --- a/tutorial/content/feeder/_index.md +++ b/tutorial/content/feeder/_index.md @@ -2,13 +2,28 @@ title: "VISSR Feeders" --- -A feeder is a Sw component that needs to implement three tasks: -* Implement an interface to the data storage -* Implement an interface to the underlying vehicle interface -* Translate data from the format used in the "VSS domain" to te format used in the "Vehicle domain". +A feeder is a Sw component that needs to implement the following tasks, depending on which template version they implement: -The SW architecture shown in figure 1 reflects the division of the three tasks in that the translation (map & scale) is done in the min process, -which spawns two threads that implement the respective interface task. +The soon to be deprecated template version 1: +* Use an interface to the data storage for writing and reading data. +* Use an interface to the underlying vehicle interface for reading and writing data. +* Translate data from the format used in the "VSS domain" to the format used in the "Vehicle domain", and vice versa. + +Template version 2: +* Use an interface to the data storage for writing data. +* Use an interface to the underlying vehicle interface for reading and writing data. +* Translate data from the format used in the "VSS domain" to the format used in the "Vehicle domain", and vice versa. +* Use an Unix domain socket interface for receiving "client set data" from the server. + +Template version 3: +* Use an interface to the data storage for writing data. +* Use an interface to the underlying vehicle interface for reading and writing data. +* Translate data from the format used in the "VSS domain" to the format used in the "Vehicle domain", and vice versa. +* Use an Unix domain socket interface for receiving "client set data" from the server. +* Use the UDS interface to receive instructions from the server on which signals to begin/stop issuing events after writing to the data store. +* Use the UDS interface to issue events when instructed by he server to do so. + +The SW architecture shown in figure 1 shows a logical partition into the three main tasks of template version 1. The architecture shown handle all its communication with the server via the state storage. This leads to a polling paradigm and thus a potential latency and performance weakness. This architecture is therefore not found on the master branch, but available on the datastore-poll branch. @@ -25,7 +40,7 @@ the state storage to find new write requests. A feeder implementing this solution can be found in the feeder-template/feederv2 directory. This feeder can be configured to either use an SQLite, or a Redis state storage interface, please see the Datastore chapter for details. -However, the solution implementd in the feederv2 template does not support that the server also can replace the polling with a more effective event based solution. +However, the solution implemented in the feederv2 template does not support that the server also can replace the polling with a more effective event based solution. For this the feeder implementation in the feeder-template/feederv3 directory needs to be used. The server is able via the interface to detect whether a feeder implements version 2 or 3 of the interface. @@ -50,6 +65,12 @@ where the Vehicle interface is implemented to connect to a RemotiveLabs broker. There is also an External Vehicle Interface Client [EVIC](https://github.com/covesa/vissr/tree/master/feeder/feeder-evic) feeder that enables the interface client to be implemented in a separate executable. +## Data storage interface +If the feeder is implemented to support multiple data base solutions, see the Data store chapter for which are currently supported, +then to configure which to use could be done at startup via a CLI parameter, +see e. g. how it is done in the feeder/feeder-template/feederv3/feederv3.go. +There also the interface implementations to some DB solutions can be seen in the method statestorageSet(path, val, ts). + ## Simulated vehicle data sources The feederv2 template contains two different simulation mechanisms that are selected via the command line configuration parameters. diff --git a/tutorial/content/server/_index.md b/tutorial/content/server/_index.md index f7b2956a..1f8252cc 100644 --- a/tutorial/content/server/_index.md +++ b/tutorial/content/server/_index.md @@ -50,14 +50,40 @@ The AT server uses the purposelist.json file to validate that a client request t It therefore necessary to ensure that this file contains purpose(s) that includes the data that is access controlled tagged in the tree. #### Command line configuration -The server has the following command line configurations: -* Data storage implementation. Select one of the following options: SQLite (-s sqlite), Redis (-s redis) or Apache IoTDB (-s apache-iotdb). Default is SQLite. -* Data storage file name (--dbfile 'file-name'). Only relevant for SQLite configuration. Default is "serviceMgr/statestorage.db". -* Request the server to generate a pathlist file, then terminate (--dryrun). Default is not to terminate after generating it. -* Pathlist file name (--vssjson 'file-name'. Default is "../vsspathlist.json". -* UDS path for history control (--uds 'file-name'). Name of the Unix domain socket file. Default is "/var/tmp/vissv2/histctrlserver.sock". -* Level of logging (--loglevel levelx). Levelx is one of [trace, debug, info, warn, error, fatal, panic]. Default is "info". -* Whether logging should end up in standard output (false) or in a log file (true) (--logfile false/true). The default is 'false'. +Starting the server with the command line option -h will show the screen below. +``` +usage: print [-h|--help] [--logfile] [--loglevel + (trace|debug|info|warn|error|fatal|panic)] [-d|--dpop] + [-p|--pathlist] [--pListPath ""] [-s|--statestorage + (sqlite|redis|memcache|apache-iotdb|none)] [-j|--history] + [--dbfile ""] [-c|--consentsupport] + + VISS v3.0 Server + +Arguments: + + -h --help Print help information + --logfile outputs to logfile in ./logs folder + --loglevel changes log output level. Default: info + -d --dpop Populate tree defaults. Default: false + -p --pathlist Generate pathlist file. Default: false + --pListPath path to pathlist file. Default: ../ + -s --statestorage Statestorage must be either sqlite, redis, memcache, + apache-iotdb, or none. Default: redis + -j --history Support for historic data requests. Default: false + --dbfile statestorage database filename. Default: + serviceMgr/statestorage.db + -c --consentsupport try to connect to ECF. Default: false +``` +More information for some of the options: +* -p: Whether pathlist files should be generated or not at startup. True if is set, false if not set. +* --pListPath 'path: Path to where "pathlistX.json" file(s) are stored. X=[1..] Default is "../". +* -d: Whether default values defined in the tree(s) should be copied to the data store or not at startup. True if is set, false if not set. +* --loglevel levelx: Levelx is one of [trace, debug, info, warn, error, fatal, panic]. Default is "info". +* --logfile: Whether logging should end up in standard output (false) or in a log file (true). True if is set, false if not set. +* --dbfile filepath: Only relevant if SQLite is configured via "-s sqlite". +* -j: Starts up an internal server thread if true. Currently not supported even if set to true. True if is set, false if not set. +* -c: If set to true an ECF SwC must be available to connect to the server. True if is set, false if not set. #### Data storage configuration Currently the server supports two different databases, SQLite and Redis, which one to use is selected in the command line configuration. diff --git a/utils/grcputils.go b/utils/grcputils.go index 87ded220..e7431545 100644 --- a/utils/grcputils.go +++ b/utils/grcputils.go @@ -363,11 +363,8 @@ func createPbFilter(index int, filterExpression map[string]interface{}, filter * case pb.FilterExpressions_FilterExpression_HISTORY: filter.FilterExp[index].Value.ValueHistory = &pb.FilterExpressions_FilterExpression_FilterValue_HistoryValue{} filter.FilterExp[index].Value.ValueHistory.TimePeriod = filterExpression["parameter"].(string) - case pb.FilterExpressions_FilterExpression_STATIC_METADATA: + case pb.FilterExpressions_FilterExpression_METADATA: Warning.Printf("Filter type is not supported by protobuf compression.") - case pb.FilterExpressions_FilterExpression_DYNAMIC_METADATA: - filter.FilterExp[index].Value.ValueDynamicMetadata = &pb.FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue{} - filter.FilterExp[index].Value.ValueDynamicMetadata.MetadataDomain = filterExpression["parameter"].(string) default: Error.Printf("Filter type is unknown.") } @@ -451,12 +448,10 @@ func getFilterType(filterType string) pb.FilterExpressions_FilterExpression_Filt return pb.FilterExpressions_FilterExpression_CURVELOG case "history": return pb.FilterExpressions_FilterExpression_HISTORY - case "static-metadata": - return pb.FilterExpressions_FilterExpression_STATIC_METADATA - case "dynamic-metadata": - return pb.FilterExpressions_FilterExpression_DYNAMIC_METADATA + case "metadata": + return pb.FilterExpressions_FilterExpression_METADATA } - return pb.FilterExpressions_FilterExpression_DYNAMIC_METADATA + 100 //undefined filter type + return pb.FilterExpressions_FilterExpression_METADATA + 100 //undefined filter type } func createSubscribeRequestPb(protoMessage *pb.SubscribeRequestMessage, messageMap map[string]interface{}) { @@ -740,11 +735,8 @@ func synthesizeFilter(filterExp *pb.FilterExpressions_FilterExpression) string { fType = "history" value = getJsonFilterValueHistory(filterExp) case 6: - fType = "static-metadata" - value = getJsonFilterValueStaticMetadata(filterExp) - case 7: - fType = "dynamic-metadata" - value = getJsonFilterValueDynamicMetadata(filterExp) + fType = "metadata" + value = getJsonFilterValueMetadata(filterExp) } return `{"type":"` + fType + `","parameter":` + value + `}` } @@ -805,16 +797,11 @@ func getJsonFilterValueHistory(filterExp *pb.FilterExpressions_FilterExpression) return `"` + timePeriod + `"` } -func getJsonFilterValueStaticMetadata(filterExp *pb.FilterExpressions_FilterExpression) string { - tree := filterExp.GetValue().GetValueStaticMetadata().GetTree() +func getJsonFilterValueMetadata(filterExp *pb.FilterExpressions_FilterExpression) string { + tree := filterExp.GetValue().GetValueMetadata().GetTree() return tree } -func getJsonFilterValueDynamicMetadata(filterExp *pb.FilterExpressions_FilterExpression) string { - metadataDomain := filterExp.GetValue().GetValueDynamicMetadata().GetMetadataDomain() - return metadataDomain -} - func createJSON(value string, key string) string { if len(value) > 0 { return `,"` + key + `":"` + value + `"` diff --git a/utils/pbutils.go b/utils/pbutils.go index af41fe27..97a08231 100644 --- a/utils/pbutils.go +++ b/utils/pbutils.go @@ -289,8 +289,7 @@ func createPbFilter_pb(index int, filterExpression map[string]interface{}, proto } if protoMessage.Method == pb.MessageMethod_SUBSCRIBE && (filterType == pb.FilterExpressions_FilterExpression_HISTORY || - filterType == pb.FilterExpressions_FilterExpression_STATIC_METADATA || - filterType == pb.FilterExpressions_FilterExpression_DYNAMIC_METADATA) { + filterType == pb.FilterExpressions_FilterExpression_METADATA) { Error.Printf("Filter function is not supported for SUBSCRIBE requests.") return } @@ -337,12 +336,8 @@ func createPbFilter_pb(index int, filterExpression map[string]interface{}, proto protoMessage.Get.Request.Filter.FilterExp[index].Value.ValueHistory = &pb.FilterExpressions_FilterExpression_FilterValue_HistoryValue{} protoMessage.Get.Request.Filter.FilterExp[index].Value.ValueHistory.TimePeriod = filterExpression["parameter"].(string) - case pb.FilterExpressions_FilterExpression_STATIC_METADATA: + case pb.FilterExpressions_FilterExpression_METADATA: Warning.Printf("Filter type is not supported by protobuf compression.") - case pb.FilterExpressions_FilterExpression_DYNAMIC_METADATA: - protoMessage.Get.Request.Filter.FilterExp[index].Value.ValueDynamicMetadata = - &pb.FilterExpressions_FilterExpression_FilterValue_DynamicMetadataValue{} - protoMessage.Get.Request.Filter.FilterExp[index].Value.ValueDynamicMetadata.MetadataDomain = filterExpression["parameter"].(string) default: Error.Printf("Filter type is unknown.") } @@ -426,12 +421,10 @@ func getFilterType_pb(filterType string) pb.FilterExpressions_FilterExpression_F return pb.FilterExpressions_FilterExpression_CURVELOG case "history": return pb.FilterExpressions_FilterExpression_HISTORY - case "static-metadata": - return pb.FilterExpressions_FilterExpression_STATIC_METADATA - case "dynamic-metadata": - return pb.FilterExpressions_FilterExpression_DYNAMIC_METADATA + case "metadata": + return pb.FilterExpressions_FilterExpression_METADATA } - return pb.FilterExpressions_FilterExpression_DYNAMIC_METADATA + 100 //undefined filter type + return pb.FilterExpressions_FilterExpression_METADATA + 100 //undefined filter type } func createSubscribePb(protoMessage *pb.ProtobufMessage, messageMap map[string]interface{}, mType pb.MessageType) { @@ -716,11 +709,8 @@ func getJsonFilter_pb(protoMessage *pb.ProtobufMessage, mMethod pb.MessageMethod fType = "history" value = getJsonFilterValueHistory_pb(filterExp[0]) case 6: - fType = "static-metadata" - value = getJsonFilterValueStaticMetadata_pb(filterExp[0]) - case 7: - fType = "dynamic-metadata" - value = getJsonFilterValueDynamicMetadata_pb(filterExp[0]) + fType = "metadata" + value = getJsonFilterValueMetadata_pb(filterExp[0]) } return `,"filter":{"type":"` + fType + `","parameter":` + value + `}` } @@ -781,16 +771,11 @@ func getJsonFilterValueHistory_pb(filterExp *pb.FilterExpressions_FilterExpressi return `"` + timePeriod + `"` } -func getJsonFilterValueStaticMetadata_pb(filterExp *pb.FilterExpressions_FilterExpression) string { - tree := filterExp.GetValue().GetValueStaticMetadata().GetTree() +func getJsonFilterValueMetadata_pb(filterExp *pb.FilterExpressions_FilterExpression) string { + tree := filterExp.GetValue().GetValueMetadata().GetTree() return tree } -func getJsonFilterValueDynamicMetadata_pb(filterExp *pb.FilterExpressions_FilterExpression) string { - metadataDomain := filterExp.GetValue().GetValueDynamicMetadata().GetMetadataDomain() - return metadataDomain -} - func getJsonAuthorization(protoMessage *pb.ProtobufMessage, mMethod pb.MessageMethod, mType pb.MessageType) string { authorization := "" value := ""