From 9317bdce30248fc18268f9e7a5527b5d6970e77c Mon Sep 17 00:00:00 2001 From: Alejandro Pedraza Date: Fri, 5 Feb 2021 10:13:45 -0500 Subject: [PATCH] Simplify SelfCheck API (#5665) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #5575 Now that only viz makes use of the `SelfCheck` api, merged the `healthcheck.proto` into `viz.proto`. Also removed the "checkRPC" functionality that was used for handling multiple API responses and was only used by `SelfCheck`, because the extra complexity was not granted. Revert to use the plain vanilla "check" by just concatenating error responses. ## Success Output ```bash $ bin/linkerd viz check ... linkerd-viz ----------- ... √ viz extension self-check ``` ## Failure Examples Failure when viz fails to connect to the k8s api: ```bash $ bin/linkerd viz check ... linkerd-viz ----------- ... × viz extension self-check Error calling the Kubernetes API: someerror see https://linkerd.io/checks/#l5d-api-control-api for hints Status check results are × ``` Failure when viz fails to connect to Prometheus: ```bash $ bin/linkerd viz check ... linkerd-viz ----------- ... × viz extension self-check Error calling Prometheus from the control plane: someerror see https://linkerd.io/checks/#l5d-api-control-api for hints Status check results are × ``` Failure when viz fails to connect to both the k8s api and Prometheus: ```bash $ bin/linkerd viz check ... linkerd-viz ----------- ... × viz extension self-check Error calling the Kubernetes API: someerror Error calling Prometheus from the control plane: someerror see https://linkerd.io/checks/#l5d-api-control-api for hints Status check results are × ``` Signed-off-by: Jijeesh --- bin/protoc-go.sh | 4 +- .../gen/common/healthcheck/healthcheck.pb.go | 362 --- pkg/healthcheck/healthcheck.go | 103 - pkg/healthcheck/healthcheck_test.go | 5 +- proto/common/healthcheck.proto | 24 - test/integration/testdata/check.viz.golden | 2 - viz/metrics-api/client/client.go | 5 +- viz/metrics-api/gen/viz/viz.pb.go | 2364 +++++++++-------- viz/metrics-api/grpc_server.go | 19 +- viz/metrics-api/http_server.go | 3 +- viz/metrics-api/http_server_test.go | 5 +- viz/metrics-api/proto/viz.proto | 22 +- viz/metrics-api/test_helper.go | 5 +- viz/pkg/healthcheck/healthcheck.go | 26 +- 14 files changed, 1375 insertions(+), 1574 deletions(-) delete mode 100644 controller/gen/common/healthcheck/healthcheck.pb.go delete mode 100644 proto/common/healthcheck.proto diff --git a/bin/protoc-go.sh b/bin/protoc-go.sh index defb1a990bf8a..11e15f6b8c051 100755 --- a/bin/protoc-go.sh +++ b/bin/protoc-go.sh @@ -7,16 +7,14 @@ bindir=$( cd "${0%/*}" && pwd ) go install -mod=readonly github.com/golang/protobuf/protoc-gen-go rm -rf controller/gen/common controller/gen/public controller/gen/config viz/metrics-api/gen -mkdir -p controller/gen/common/healthcheck controller/gen/common/net controller/gen/public viz/metrics-api/gen/viz +mkdir -p controller/gen/common/net controller/gen/public viz/metrics-api/gen/viz "$bindir"/protoc -I proto --go_out=plugins=grpc,paths=source_relative:controller/gen proto/common/net.proto "$bindir"/protoc -I proto --go_out=plugins=grpc,paths=source_relative:controller/gen proto/public.proto "$bindir"/protoc -I proto --go_out=plugins=grpc,paths=source_relative:controller/gen proto/config/config.proto -"$bindir"/protoc -I proto --go_out=plugins=grpc,paths=source_relative:controller/gen proto/common/healthcheck.proto "$bindir"/protoc -I proto -I viz/metrics-api/proto --go_out=plugins=grpc,paths=source_relative:viz/metrics-api/gen viz/metrics-api/proto/viz.proto mv controller/gen/common/net.pb.go controller/gen/common/net/ mv controller/gen/public.pb.go controller/gen/public/ -mv controller/gen/common/healthcheck.pb.go controller/gen/common/healthcheck/ mv viz/metrics-api/gen/viz.pb.go viz/metrics-api/gen/viz/viz.pb.go diff --git a/controller/gen/common/healthcheck/healthcheck.pb.go b/controller/gen/common/healthcheck/healthcheck.pb.go deleted file mode 100644 index 3de1f21f097f4..0000000000000 --- a/controller/gen/common/healthcheck/healthcheck.pb.go +++ /dev/null @@ -1,362 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.24.0 -// protoc v3.6.0 -// source: common/healthcheck.proto - -package healthcheck - -import ( - proto "github.com/golang/protobuf/proto" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - -type CheckStatus int32 - -const ( - CheckStatus_OK CheckStatus = 0 - CheckStatus_FAIL CheckStatus = 1 - CheckStatus_ERROR CheckStatus = 2 -) - -// Enum value maps for CheckStatus. -var ( - CheckStatus_name = map[int32]string{ - 0: "OK", - 1: "FAIL", - 2: "ERROR", - } - CheckStatus_value = map[string]int32{ - "OK": 0, - "FAIL": 1, - "ERROR": 2, - } -) - -func (x CheckStatus) Enum() *CheckStatus { - p := new(CheckStatus) - *p = x - return p -} - -func (x CheckStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (CheckStatus) Descriptor() protoreflect.EnumDescriptor { - return file_common_healthcheck_proto_enumTypes[0].Descriptor() -} - -func (CheckStatus) Type() protoreflect.EnumType { - return &file_common_healthcheck_proto_enumTypes[0] -} - -func (x CheckStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use CheckStatus.Descriptor instead. -func (CheckStatus) EnumDescriptor() ([]byte, []int) { - return file_common_healthcheck_proto_rawDescGZIP(), []int{0} -} - -type CheckResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SubsystemName string `protobuf:"bytes,1,opt,name=SubsystemName,proto3" json:"SubsystemName,omitempty"` - CheckDescription string `protobuf:"bytes,2,opt,name=CheckDescription,proto3" json:"CheckDescription,omitempty"` - Status CheckStatus `protobuf:"varint,3,opt,name=Status,proto3,enum=linkerd2.common.healthcheck.CheckStatus" json:"Status,omitempty"` - FriendlyMessageToUser string `protobuf:"bytes,4,opt,name=FriendlyMessageToUser,proto3" json:"FriendlyMessageToUser,omitempty"` -} - -func (x *CheckResult) Reset() { - *x = CheckResult{} - if protoimpl.UnsafeEnabled { - mi := &file_common_healthcheck_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CheckResult) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CheckResult) ProtoMessage() {} - -func (x *CheckResult) ProtoReflect() protoreflect.Message { - mi := &file_common_healthcheck_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CheckResult.ProtoReflect.Descriptor instead. -func (*CheckResult) Descriptor() ([]byte, []int) { - return file_common_healthcheck_proto_rawDescGZIP(), []int{0} -} - -func (x *CheckResult) GetSubsystemName() string { - if x != nil { - return x.SubsystemName - } - return "" -} - -func (x *CheckResult) GetCheckDescription() string { - if x != nil { - return x.CheckDescription - } - return "" -} - -func (x *CheckResult) GetStatus() CheckStatus { - if x != nil { - return x.Status - } - return CheckStatus_OK -} - -func (x *CheckResult) GetFriendlyMessageToUser() string { - if x != nil { - return x.FriendlyMessageToUser - } - return "" -} - -type SelfCheckRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *SelfCheckRequest) Reset() { - *x = SelfCheckRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_common_healthcheck_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SelfCheckRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SelfCheckRequest) ProtoMessage() {} - -func (x *SelfCheckRequest) ProtoReflect() protoreflect.Message { - mi := &file_common_healthcheck_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SelfCheckRequest.ProtoReflect.Descriptor instead. -func (*SelfCheckRequest) Descriptor() ([]byte, []int) { - return file_common_healthcheck_proto_rawDescGZIP(), []int{1} -} - -type SelfCheckResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Results []*CheckResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` -} - -func (x *SelfCheckResponse) Reset() { - *x = SelfCheckResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_common_healthcheck_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SelfCheckResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SelfCheckResponse) ProtoMessage() {} - -func (x *SelfCheckResponse) ProtoReflect() protoreflect.Message { - mi := &file_common_healthcheck_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SelfCheckResponse.ProtoReflect.Descriptor instead. -func (*SelfCheckResponse) Descriptor() ([]byte, []int) { - return file_common_healthcheck_proto_rawDescGZIP(), []int{2} -} - -func (x *SelfCheckResponse) GetResults() []*CheckResult { - if x != nil { - return x.Results - } - return nil -} - -var File_common_healthcheck_proto protoreflect.FileDescriptor - -var file_common_healthcheck_proto_rawDesc = []byte{ - 0x0a, 0x18, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1b, 0x6c, 0x69, 0x6e, 0x6b, - 0x65, 0x72, 0x64, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x68, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x22, 0xd7, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x53, 0x75, 0x62, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, - 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x06, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, - 0x65, 0x72, 0x64, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x68, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x46, - 0x72, 0x69, 0x65, 0x6e, 0x64, 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x6f, - 0x55, 0x73, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x46, 0x72, 0x69, 0x65, - 0x6e, 0x64, 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x55, 0x73, 0x65, - 0x72, 0x22, 0x12, 0x0a, 0x10, 0x53, 0x65, 0x6c, 0x66, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x57, 0x0a, 0x11, 0x53, 0x65, 0x6c, 0x66, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x07, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x69, - 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x68, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2a, 0x2a, - 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x06, 0x0a, - 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x01, 0x12, - 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x42, 0x3f, 0x5a, 0x3d, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, - 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x6c, 0x65, 0x72, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, - 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, -} - -var ( - file_common_healthcheck_proto_rawDescOnce sync.Once - file_common_healthcheck_proto_rawDescData = file_common_healthcheck_proto_rawDesc -) - -func file_common_healthcheck_proto_rawDescGZIP() []byte { - file_common_healthcheck_proto_rawDescOnce.Do(func() { - file_common_healthcheck_proto_rawDescData = protoimpl.X.CompressGZIP(file_common_healthcheck_proto_rawDescData) - }) - return file_common_healthcheck_proto_rawDescData -} - -var file_common_healthcheck_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_common_healthcheck_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_common_healthcheck_proto_goTypes = []interface{}{ - (CheckStatus)(0), // 0: linkerd2.common.healthcheck.CheckStatus - (*CheckResult)(nil), // 1: linkerd2.common.healthcheck.CheckResult - (*SelfCheckRequest)(nil), // 2: linkerd2.common.healthcheck.SelfCheckRequest - (*SelfCheckResponse)(nil), // 3: linkerd2.common.healthcheck.SelfCheckResponse -} -var file_common_healthcheck_proto_depIdxs = []int32{ - 0, // 0: linkerd2.common.healthcheck.CheckResult.Status:type_name -> linkerd2.common.healthcheck.CheckStatus - 1, // 1: linkerd2.common.healthcheck.SelfCheckResponse.results:type_name -> linkerd2.common.healthcheck.CheckResult - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name -} - -func init() { file_common_healthcheck_proto_init() } -func file_common_healthcheck_proto_init() { - if File_common_healthcheck_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_common_healthcheck_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckResult); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_common_healthcheck_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SelfCheckRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_common_healthcheck_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SelfCheckResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_common_healthcheck_proto_rawDesc, - NumEnums: 1, - NumMessages: 3, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_common_healthcheck_proto_goTypes, - DependencyIndexes: file_common_healthcheck_proto_depIdxs, - EnumInfos: file_common_healthcheck_proto_enumTypes, - MessageInfos: file_common_healthcheck_proto_msgTypes, - }.Build() - File_common_healthcheck_proto = out.File - file_common_healthcheck_proto_rawDesc = nil - file_common_healthcheck_proto_goTypes = nil - file_common_healthcheck_proto_depIdxs = nil -} diff --git a/pkg/healthcheck/healthcheck.go b/pkg/healthcheck/healthcheck.go index 065c27207bd60..9d91b81e7f391 100644 --- a/pkg/healthcheck/healthcheck.go +++ b/pkg/healthcheck/healthcheck.go @@ -12,7 +12,6 @@ import ( "time" "github.com/linkerd/linkerd2/controller/api/public" - healthcheckPb "github.com/linkerd/linkerd2/controller/gen/common/healthcheck" configPb "github.com/linkerd/linkerd2/controller/gen/config" l5dcharts "github.com/linkerd/linkerd2/pkg/charts/linkerd2" "github.com/linkerd/linkerd2/pkg/config" @@ -304,11 +303,6 @@ type Checker struct { // check is the function that's called to execute the check; if the function // returns an error, the check fails check func(context.Context) error - - // checkRPC is an alternative to check that can be used to perform a remote - // check using the SelfCheck gRPC endpoint; check status is based on the value - // of the gRPC response - checkRPC func(context.Context) (*healthcheckPb.SelfCheckResponse, error) } // NewChecker returns a new instance of checker type @@ -355,12 +349,6 @@ func (c *Checker) WithCheck(check func(context.Context) error) *Checker { return c } -// WithCheckRPC returns a checker with the provided checkRPC func -func (c *Checker) WithCheckRPC(checkRPC func(context.Context) (*healthcheckPb.SelfCheckResponse, error)) *Checker { - c.checkRPC = checkRPC - return c -} - // CheckResult encapsulates a check's identifying information and output // Note there exists an analogous user-facing type, `cmd.check`, for output via // `linkerd check -o json`. @@ -1477,17 +1465,6 @@ func (hc *HealthChecker) RunChecks(observer CheckObserver) bool { } } } - - if checker.checkRPC != nil { - if !hc.runCheckRPC(c.ID, &checker, observer) { - if !checker.warning { - success = false - } - if checker.fatal { - return success - } - } - } } } } @@ -1539,77 +1516,6 @@ func (hc *HealthChecker) runCheck(categoryID CategoryID, c *Checker, observer Ch } } -// runCheckRPC calls `c` which itself should make a gRPC call returning `*healthcheckPb.SelfCheckResponse` -// (which can contain multiple responses) or error. -// If that call returns an error, we send it to `observer` and return false. -// Otherwise, we send to `observer` a success message with `c.description` and then proceed to check the -// multiple responses contained in the response. -// We keep on retrying the same call until all the responses have an OK status -// (or until timeout/deadline is reached), sending a message to `observer` for each response, -// while making sure no duplicate messages are sent. -func (hc *HealthChecker) runCheckRPC(categoryID CategoryID, c *Checker, observer CheckObserver) bool { - observedResults := []CheckResult{} - for { - ctx, cancel := context.WithTimeout(context.Background(), RequestTimeout) - defer cancel() - checkRsp, err := c.checkRPC(ctx) - if se, ok := err.(*SkipError); ok { - log.Debugf("Skipping check: %s. Reason: %s", c.description, se.Reason) - return true - } - - checkResult := &CheckResult{ - Category: categoryID, - Description: c.description, - HintAnchor: c.hintAnchor, - Warning: c.warning, - } - - if vs, ok := err.(*VerboseSuccess); ok { - checkResult.Description = fmt.Sprintf("%s\n%s", checkResult.Description, vs.Message) - } else if err != nil { - // errors at the gRPC-call level are not retried - // but we do retry below if the response Status is not OK - checkResult.Err = &CategoryError{categoryID, err} - observer(checkResult) - return false - } - - // General description, only shown once. - // The following calls to `observer()` track specific result entries. - if !checkResult.alreadyObserved(observedResults) { - observer(checkResult) - observedResults = append(observedResults, *checkResult) - } - - for _, check := range checkRsp.Results { - checkResult.Err = nil - checkResult.Description = fmt.Sprintf("[%s] %s", check.SubsystemName, check.CheckDescription) - if check.Status != healthcheckPb.CheckStatus_OK { - checkResult.Err = &CategoryError{categoryID, fmt.Errorf(check.FriendlyMessageToUser)} - checkResult.Retry = time.Now().Before(c.retryDeadline) - // only show the waiting message during retries, - // and send the underlying error on the last try - if !c.surfaceErrorOnRetry && checkResult.Retry { - checkResult.Err = errors.New("waiting for check to complete") - } - observer(checkResult) - } else if !checkResult.alreadyObserved(observedResults) { - observer(checkResult) - } - observedResults = append(observedResults, *checkResult) - } - - if checkResult.Retry { - log.Debug("Retrying on error") - time.Sleep(retryWindow) - continue - } - - return checkResult.Err == nil - } -} - func (hc *HealthChecker) controlPlaneComponentsSelector() string { return fmt.Sprintf("%s,!%s", k8s.ControllerNSLabel, LinkerdCNIResourceLabel) } @@ -2323,15 +2229,6 @@ func (hc *HealthChecker) checkClockSkew(ctx context.Context) error { return nil } -func (cr *CheckResult) alreadyObserved(previousResults []CheckResult) bool { - for _, result := range previousResults { - if result.Description == cr.Description && result.Err == cr.Err { - return true - } - } - return false -} - // CheckRoles checks that the expected roles exist. func CheckRoles(ctx context.Context, kubeAPI *k8s.KubernetesAPI, shouldExist bool, namespace string, expectedNames []string, labelSelector string) error { options := metav1.ListOptions{ diff --git a/pkg/healthcheck/healthcheck_test.go b/pkg/healthcheck/healthcheck_test.go index 82fd4762d99c1..611e8138800d0 100644 --- a/pkg/healthcheck/healthcheck_test.go +++ b/pkg/healthcheck/healthcheck_test.go @@ -12,7 +12,6 @@ import ( "time" "github.com/golang/protobuf/ptypes/duration" - healthcheckPb "github.com/linkerd/linkerd2/controller/gen/common/healthcheck" configPb "github.com/linkerd/linkerd2/controller/gen/config" "github.com/linkerd/linkerd2/pkg/charts/linkerd2" "github.com/linkerd/linkerd2/pkg/identity" @@ -148,8 +147,8 @@ func TestHealthChecker(t *testing.T) { checkers: []Checker{ { description: "skipRpc", - checkRPC: func(context.Context) (*healthcheckPb.SelfCheckResponse, error) { - return nil, &SkipError{Reason: "needs skipping"} + check: func(context.Context) error { + return &SkipError{Reason: "needs skipping"} }, retryDeadline: time.Time{}, }, diff --git a/proto/common/healthcheck.proto b/proto/common/healthcheck.proto deleted file mode 100644 index af5821e03341f..0000000000000 --- a/proto/common/healthcheck.proto +++ /dev/null @@ -1,24 +0,0 @@ -syntax = "proto3"; - -package linkerd2.common.healthcheck; - -option go_package = "github.com/linkerd/linkerd2/controller/gen/common/healthcheck"; - -enum CheckStatus { - OK = 0; - FAIL = 1; - ERROR = 2; -} - -message CheckResult { - string SubsystemName = 1; - string CheckDescription = 2; - CheckStatus Status = 3; - string FriendlyMessageToUser = 4; -} - -message SelfCheckRequest {} - -message SelfCheckResponse { - repeated CheckResult results = 1; -} diff --git a/test/integration/testdata/check.viz.golden b/test/integration/testdata/check.viz.golden index 75ef2fa888226..9631ad772d11d 100644 --- a/test/integration/testdata/check.viz.golden +++ b/test/integration/testdata/check.viz.golden @@ -27,7 +27,5 @@ linkerd-viz √ grafana is installed and configured correctly √ can initialize the client √ viz extension self-check -√ [kubernetes] linkerd viz can talk to Kubernetes -√ [prometheus] linkerd viz can talk to Prometheus Status check results are √ diff --git a/viz/metrics-api/client/client.go b/viz/metrics-api/client/client.go index 03bd6c6508946..cd45997a864a2 100644 --- a/viz/metrics-api/client/client.go +++ b/viz/metrics-api/client/client.go @@ -9,7 +9,6 @@ import ( "net/url" "github.com/golang/protobuf/proto" - healthcheckPb "github.com/linkerd/linkerd2/controller/gen/common/healthcheck" "github.com/linkerd/linkerd2/pkg/k8s" "github.com/linkerd/linkerd2/pkg/protohttp" pb "github.com/linkerd/linkerd2/viz/metrics-api/gen/viz" @@ -62,8 +61,8 @@ func (c *grpcOverHTTPClient) Gateways(ctx context.Context, req *pb.GatewaysReque return &msg, err } -func (c *grpcOverHTTPClient) SelfCheck(ctx context.Context, req *healthcheckPb.SelfCheckRequest, _ ...grpc.CallOption) (*healthcheckPb.SelfCheckResponse, error) { - var msg healthcheckPb.SelfCheckResponse +func (c *grpcOverHTTPClient) SelfCheck(ctx context.Context, req *pb.SelfCheckRequest, _ ...grpc.CallOption) (*pb.SelfCheckResponse, error) { + var msg pb.SelfCheckResponse err := c.apiRequest(ctx, "SelfCheck", req, &msg) return &msg, err } diff --git a/viz/metrics-api/gen/viz/viz.pb.go b/viz/metrics-api/gen/viz/viz.pb.go index 0fbbe69a13c22..c1e8a24ba4bb0 100644 --- a/viz/metrics-api/gen/viz/viz.pb.go +++ b/viz/metrics-api/gen/viz/viz.pb.go @@ -10,7 +10,6 @@ import ( context "context" proto "github.com/golang/protobuf/proto" duration "github.com/golang/protobuf/ptypes/duration" - healthcheck "github.com/linkerd/linkerd2/controller/gen/common/healthcheck" net "github.com/linkerd/linkerd2/controller/gen/common/net" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" @@ -32,6 +31,55 @@ const ( // of the legacy proto package is being used. const _ = proto.ProtoPackageIsVersion4 +type CheckStatus int32 + +const ( + CheckStatus_OK CheckStatus = 0 + CheckStatus_FAIL CheckStatus = 1 + CheckStatus_ERROR CheckStatus = 2 +) + +// Enum value maps for CheckStatus. +var ( + CheckStatus_name = map[int32]string{ + 0: "OK", + 1: "FAIL", + 2: "ERROR", + } + CheckStatus_value = map[string]int32{ + "OK": 0, + "FAIL": 1, + "ERROR": 2, + } +) + +func (x CheckStatus) Enum() *CheckStatus { + p := new(CheckStatus) + *p = x + return p +} + +func (x CheckStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (CheckStatus) Descriptor() protoreflect.EnumDescriptor { + return file_viz_proto_enumTypes[0].Descriptor() +} + +func (CheckStatus) Type() protoreflect.EnumType { + return &file_viz_proto_enumTypes[0] +} + +func (x CheckStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use CheckStatus.Descriptor instead. +func (CheckStatus) EnumDescriptor() ([]byte, []int) { + return file_viz_proto_rawDescGZIP(), []int{0} +} + type HttpMethod_Registered int32 const ( @@ -83,11 +131,11 @@ func (x HttpMethod_Registered) String() string { } func (HttpMethod_Registered) Descriptor() protoreflect.EnumDescriptor { - return file_viz_proto_enumTypes[0].Descriptor() + return file_viz_proto_enumTypes[1].Descriptor() } func (HttpMethod_Registered) Type() protoreflect.EnumType { - return &file_viz_proto_enumTypes[0] + return &file_viz_proto_enumTypes[1] } func (x HttpMethod_Registered) Number() protoreflect.EnumNumber { @@ -96,7 +144,7 @@ func (x HttpMethod_Registered) Number() protoreflect.EnumNumber { // Deprecated: Use HttpMethod_Registered.Descriptor instead. func (HttpMethod_Registered) EnumDescriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{9, 0} + return file_viz_proto_rawDescGZIP(), []int{12, 0} } type Scheme_Registered int32 @@ -129,11 +177,11 @@ func (x Scheme_Registered) String() string { } func (Scheme_Registered) Descriptor() protoreflect.EnumDescriptor { - return file_viz_proto_enumTypes[1].Descriptor() + return file_viz_proto_enumTypes[2].Descriptor() } func (Scheme_Registered) Type() protoreflect.EnumType { - return &file_viz_proto_enumTypes[1] + return &file_viz_proto_enumTypes[2] } func (x Scheme_Registered) Number() protoreflect.EnumNumber { @@ -142,7 +190,7 @@ func (x Scheme_Registered) Number() protoreflect.EnumNumber { // Deprecated: Use Scheme_Registered.Descriptor instead. func (Scheme_Registered) EnumDescriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{10, 0} + return file_viz_proto_rawDescGZIP(), []int{13, 0} } type TapEvent_ProxyDirection int32 @@ -178,11 +226,11 @@ func (x TapEvent_ProxyDirection) String() string { } func (TapEvent_ProxyDirection) Descriptor() protoreflect.EnumDescriptor { - return file_viz_proto_enumTypes[2].Descriptor() + return file_viz_proto_enumTypes[3].Descriptor() } func (TapEvent_ProxyDirection) Type() protoreflect.EnumType { - return &file_viz_proto_enumTypes[2] + return &file_viz_proto_enumTypes[3] } func (x TapEvent_ProxyDirection) Number() protoreflect.EnumNumber { @@ -191,7 +239,7 @@ func (x TapEvent_ProxyDirection) Number() protoreflect.EnumNumber { // Deprecated: Use TapEvent_ProxyDirection.Descriptor instead. func (TapEvent_ProxyDirection) EnumDescriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{13, 0} + return file_viz_proto_rawDescGZIP(), []int{16, 0} } type Empty struct { @@ -232,6 +280,162 @@ func (*Empty) Descriptor() ([]byte, []int) { return file_viz_proto_rawDescGZIP(), []int{0} } +type CheckResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SubsystemName string `protobuf:"bytes,1,opt,name=SubsystemName,proto3" json:"SubsystemName,omitempty"` + CheckDescription string `protobuf:"bytes,2,opt,name=CheckDescription,proto3" json:"CheckDescription,omitempty"` + Status CheckStatus `protobuf:"varint,3,opt,name=Status,proto3,enum=linkerd2.viz.CheckStatus" json:"Status,omitempty"` + FriendlyMessageToUser string `protobuf:"bytes,4,opt,name=FriendlyMessageToUser,proto3" json:"FriendlyMessageToUser,omitempty"` +} + +func (x *CheckResult) Reset() { + *x = CheckResult{} + if protoimpl.UnsafeEnabled { + mi := &file_viz_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CheckResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckResult) ProtoMessage() {} + +func (x *CheckResult) ProtoReflect() protoreflect.Message { + mi := &file_viz_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CheckResult.ProtoReflect.Descriptor instead. +func (*CheckResult) Descriptor() ([]byte, []int) { + return file_viz_proto_rawDescGZIP(), []int{1} +} + +func (x *CheckResult) GetSubsystemName() string { + if x != nil { + return x.SubsystemName + } + return "" +} + +func (x *CheckResult) GetCheckDescription() string { + if x != nil { + return x.CheckDescription + } + return "" +} + +func (x *CheckResult) GetStatus() CheckStatus { + if x != nil { + return x.Status + } + return CheckStatus_OK +} + +func (x *CheckResult) GetFriendlyMessageToUser() string { + if x != nil { + return x.FriendlyMessageToUser + } + return "" +} + +type SelfCheckRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SelfCheckRequest) Reset() { + *x = SelfCheckRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_viz_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SelfCheckRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SelfCheckRequest) ProtoMessage() {} + +func (x *SelfCheckRequest) ProtoReflect() protoreflect.Message { + mi := &file_viz_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SelfCheckRequest.ProtoReflect.Descriptor instead. +func (*SelfCheckRequest) Descriptor() ([]byte, []int) { + return file_viz_proto_rawDescGZIP(), []int{2} +} + +type SelfCheckResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Results []*CheckResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` +} + +func (x *SelfCheckResponse) Reset() { + *x = SelfCheckResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_viz_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SelfCheckResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SelfCheckResponse) ProtoMessage() {} + +func (x *SelfCheckResponse) ProtoReflect() protoreflect.Message { + mi := &file_viz_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SelfCheckResponse.ProtoReflect.Descriptor instead. +func (*SelfCheckResponse) Descriptor() ([]byte, []int) { + return file_viz_proto_rawDescGZIP(), []int{3} +} + +func (x *SelfCheckResponse) GetResults() []*CheckResult { + if x != nil { + return x.Results + } + return nil +} + type ListServicesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -243,7 +447,7 @@ type ListServicesRequest struct { func (x *ListServicesRequest) Reset() { *x = ListServicesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[1] + mi := &file_viz_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -256,7 +460,7 @@ func (x *ListServicesRequest) String() string { func (*ListServicesRequest) ProtoMessage() {} func (x *ListServicesRequest) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[1] + mi := &file_viz_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -269,7 +473,7 @@ func (x *ListServicesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListServicesRequest.ProtoReflect.Descriptor instead. func (*ListServicesRequest) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{1} + return file_viz_proto_rawDescGZIP(), []int{4} } func (x *ListServicesRequest) GetNamespace() string { @@ -290,7 +494,7 @@ type ListServicesResponse struct { func (x *ListServicesResponse) Reset() { *x = ListServicesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[2] + mi := &file_viz_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -303,7 +507,7 @@ func (x *ListServicesResponse) String() string { func (*ListServicesResponse) ProtoMessage() {} func (x *ListServicesResponse) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[2] + mi := &file_viz_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -316,7 +520,7 @@ func (x *ListServicesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListServicesResponse.ProtoReflect.Descriptor instead. func (*ListServicesResponse) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{2} + return file_viz_proto_rawDescGZIP(), []int{5} } func (x *ListServicesResponse) GetServices() []*Service { @@ -338,7 +542,7 @@ type Service struct { func (x *Service) Reset() { *x = Service{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[3] + mi := &file_viz_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -351,7 +555,7 @@ func (x *Service) String() string { func (*Service) ProtoMessage() {} func (x *Service) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[3] + mi := &file_viz_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -364,7 +568,7 @@ func (x *Service) ProtoReflect() protoreflect.Message { // Deprecated: Use Service.ProtoReflect.Descriptor instead. func (*Service) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{3} + return file_viz_proto_rawDescGZIP(), []int{6} } func (x *Service) GetName() string { @@ -394,7 +598,7 @@ type ListPodsRequest struct { func (x *ListPodsRequest) Reset() { *x = ListPodsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[4] + mi := &file_viz_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -407,7 +611,7 @@ func (x *ListPodsRequest) String() string { func (*ListPodsRequest) ProtoMessage() {} func (x *ListPodsRequest) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[4] + mi := &file_viz_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -420,7 +624,7 @@ func (x *ListPodsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPodsRequest.ProtoReflect.Descriptor instead. func (*ListPodsRequest) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{4} + return file_viz_proto_rawDescGZIP(), []int{7} } // Deprecated: Do not use. @@ -449,7 +653,7 @@ type ListPodsResponse struct { func (x *ListPodsResponse) Reset() { *x = ListPodsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[5] + mi := &file_viz_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -462,7 +666,7 @@ func (x *ListPodsResponse) String() string { func (*ListPodsResponse) ProtoMessage() {} func (x *ListPodsResponse) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[5] + mi := &file_viz_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -475,7 +679,7 @@ func (x *ListPodsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPodsResponse.ProtoReflect.Descriptor instead. func (*ListPodsResponse) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{5} + return file_viz_proto_rawDescGZIP(), []int{8} } func (x *ListPodsResponse) GetPods() []*Pod { @@ -514,7 +718,7 @@ type Pod struct { func (x *Pod) Reset() { *x = Pod{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[6] + mi := &file_viz_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -527,7 +731,7 @@ func (x *Pod) String() string { func (*Pod) ProtoMessage() {} func (x *Pod) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[6] + mi := &file_viz_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -540,7 +744,7 @@ func (x *Pod) ProtoReflect() protoreflect.Message { // Deprecated: Use Pod.ProtoReflect.Descriptor instead. func (*Pod) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{6} + return file_viz_proto_rawDescGZIP(), []int{9} } func (x *Pod) GetName() string { @@ -734,7 +938,7 @@ type TapRequest struct { func (x *TapRequest) Reset() { *x = TapRequest{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[7] + mi := &file_viz_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -747,7 +951,7 @@ func (x *TapRequest) String() string { func (*TapRequest) ProtoMessage() {} func (x *TapRequest) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[7] + mi := &file_viz_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -760,7 +964,7 @@ func (x *TapRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TapRequest.ProtoReflect.Descriptor instead. func (*TapRequest) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{7} + return file_viz_proto_rawDescGZIP(), []int{10} } func (m *TapRequest) GetTarget() isTapRequest_Target { @@ -885,7 +1089,7 @@ type TapByResourceRequest struct { func (x *TapByResourceRequest) Reset() { *x = TapByResourceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[8] + mi := &file_viz_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -898,7 +1102,7 @@ func (x *TapByResourceRequest) String() string { func (*TapByResourceRequest) ProtoMessage() {} func (x *TapByResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[8] + mi := &file_viz_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -911,7 +1115,7 @@ func (x *TapByResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TapByResourceRequest.ProtoReflect.Descriptor instead. func (*TapByResourceRequest) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{8} + return file_viz_proto_rawDescGZIP(), []int{11} } func (x *TapByResourceRequest) GetTarget() *ResourceSelection { @@ -956,7 +1160,7 @@ type HttpMethod struct { func (x *HttpMethod) Reset() { *x = HttpMethod{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[9] + mi := &file_viz_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -969,7 +1173,7 @@ func (x *HttpMethod) String() string { func (*HttpMethod) ProtoMessage() {} func (x *HttpMethod) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[9] + mi := &file_viz_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -982,7 +1186,7 @@ func (x *HttpMethod) ProtoReflect() protoreflect.Message { // Deprecated: Use HttpMethod.ProtoReflect.Descriptor instead. func (*HttpMethod) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{9} + return file_viz_proto_rawDescGZIP(), []int{12} } func (m *HttpMethod) GetType() isHttpMethod_Type { @@ -1036,7 +1240,7 @@ type Scheme struct { func (x *Scheme) Reset() { *x = Scheme{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[10] + mi := &file_viz_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1049,7 +1253,7 @@ func (x *Scheme) String() string { func (*Scheme) ProtoMessage() {} func (x *Scheme) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[10] + mi := &file_viz_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1062,7 +1266,7 @@ func (x *Scheme) ProtoReflect() protoreflect.Message { // Deprecated: Use Scheme.ProtoReflect.Descriptor instead. func (*Scheme) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{10} + return file_viz_proto_rawDescGZIP(), []int{13} } func (m *Scheme) GetType() isScheme_Type { @@ -1113,7 +1317,7 @@ type Headers struct { func (x *Headers) Reset() { *x = Headers{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[11] + mi := &file_viz_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1126,7 +1330,7 @@ func (x *Headers) String() string { func (*Headers) ProtoMessage() {} func (x *Headers) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[11] + mi := &file_viz_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1139,7 +1343,7 @@ func (x *Headers) ProtoReflect() protoreflect.Message { // Deprecated: Use Headers.ProtoReflect.Descriptor instead. func (*Headers) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{11} + return file_viz_proto_rawDescGZIP(), []int{14} } func (x *Headers) GetHeaders() []*Headers_Header { @@ -1163,7 +1367,7 @@ type Eos struct { func (x *Eos) Reset() { *x = Eos{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[12] + mi := &file_viz_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1176,7 +1380,7 @@ func (x *Eos) String() string { func (*Eos) ProtoMessage() {} func (x *Eos) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[12] + mi := &file_viz_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1189,7 +1393,7 @@ func (x *Eos) ProtoReflect() protoreflect.Message { // Deprecated: Use Eos.ProtoReflect.Descriptor instead. func (*Eos) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{12} + return file_viz_proto_rawDescGZIP(), []int{15} } func (m *Eos) GetEnd() isEos_End { @@ -1249,7 +1453,7 @@ type TapEvent struct { func (x *TapEvent) Reset() { *x = TapEvent{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[13] + mi := &file_viz_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1262,7 +1466,7 @@ func (x *TapEvent) String() string { func (*TapEvent) ProtoMessage() {} func (x *TapEvent) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[13] + mi := &file_viz_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1275,7 +1479,7 @@ func (x *TapEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use TapEvent.ProtoReflect.Descriptor instead. func (*TapEvent) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{13} + return file_viz_proto_rawDescGZIP(), []int{16} } func (x *TapEvent) GetSource() *net.TcpAddress { @@ -1355,7 +1559,7 @@ type ApiError struct { func (x *ApiError) Reset() { *x = ApiError{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[14] + mi := &file_viz_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1368,7 +1572,7 @@ func (x *ApiError) String() string { func (*ApiError) ProtoMessage() {} func (x *ApiError) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[14] + mi := &file_viz_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1381,7 +1585,7 @@ func (x *ApiError) ProtoReflect() protoreflect.Message { // Deprecated: Use ApiError.ProtoReflect.Descriptor instead. func (*ApiError) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{14} + return file_viz_proto_rawDescGZIP(), []int{17} } func (x *ApiError) GetError() string { @@ -1402,7 +1606,7 @@ type PodErrors struct { func (x *PodErrors) Reset() { *x = PodErrors{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[15] + mi := &file_viz_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1415,7 +1619,7 @@ func (x *PodErrors) String() string { func (*PodErrors) ProtoMessage() {} func (x *PodErrors) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[15] + mi := &file_viz_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1428,7 +1632,7 @@ func (x *PodErrors) ProtoReflect() protoreflect.Message { // Deprecated: Use PodErrors.ProtoReflect.Descriptor instead. func (*PodErrors) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{15} + return file_viz_proto_rawDescGZIP(), []int{18} } func (x *PodErrors) GetErrors() []*PodErrors_PodError { @@ -1461,7 +1665,7 @@ type Resource struct { func (x *Resource) Reset() { *x = Resource{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[16] + mi := &file_viz_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1474,7 +1678,7 @@ func (x *Resource) String() string { func (*Resource) ProtoMessage() {} func (x *Resource) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[16] + mi := &file_viz_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1487,7 +1691,7 @@ func (x *Resource) ProtoReflect() protoreflect.Message { // Deprecated: Use Resource.ProtoReflect.Descriptor instead. func (*Resource) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{16} + return file_viz_proto_rawDescGZIP(), []int{19} } func (x *Resource) GetNamespace() string { @@ -1529,7 +1733,7 @@ type ResourceSelection struct { func (x *ResourceSelection) Reset() { *x = ResourceSelection{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[17] + mi := &file_viz_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1542,7 +1746,7 @@ func (x *ResourceSelection) String() string { func (*ResourceSelection) ProtoMessage() {} func (x *ResourceSelection) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[17] + mi := &file_viz_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1555,7 +1759,7 @@ func (x *ResourceSelection) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceSelection.ProtoReflect.Descriptor instead. func (*ResourceSelection) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{17} + return file_viz_proto_rawDescGZIP(), []int{20} } func (x *ResourceSelection) GetResource() *Resource { @@ -1584,7 +1788,7 @@ type ResourceError struct { func (x *ResourceError) Reset() { *x = ResourceError{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[18] + mi := &file_viz_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1597,7 +1801,7 @@ func (x *ResourceError) String() string { func (*ResourceError) ProtoMessage() {} func (x *ResourceError) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[18] + mi := &file_viz_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1610,7 +1814,7 @@ func (x *ResourceError) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceError.ProtoReflect.Descriptor instead. func (*ResourceError) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{18} + return file_viz_proto_rawDescGZIP(), []int{21} } func (x *ResourceError) GetResource() *Resource { @@ -1646,7 +1850,7 @@ type StatSummaryRequest struct { func (x *StatSummaryRequest) Reset() { *x = StatSummaryRequest{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[19] + mi := &file_viz_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1659,7 +1863,7 @@ func (x *StatSummaryRequest) String() string { func (*StatSummaryRequest) ProtoMessage() {} func (x *StatSummaryRequest) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[19] + mi := &file_viz_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1672,7 +1876,7 @@ func (x *StatSummaryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatSummaryRequest.ProtoReflect.Descriptor instead. func (*StatSummaryRequest) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{19} + return file_viz_proto_rawDescGZIP(), []int{22} } func (x *StatSummaryRequest) GetSelector() *ResourceSelection { @@ -1767,7 +1971,7 @@ type StatSummaryResponse struct { func (x *StatSummaryResponse) Reset() { *x = StatSummaryResponse{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[20] + mi := &file_viz_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1780,7 +1984,7 @@ func (x *StatSummaryResponse) String() string { func (*StatSummaryResponse) ProtoMessage() {} func (x *StatSummaryResponse) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[20] + mi := &file_viz_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1793,7 +1997,7 @@ func (x *StatSummaryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StatSummaryResponse.ProtoReflect.Descriptor instead. func (*StatSummaryResponse) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{20} + return file_viz_proto_rawDescGZIP(), []int{23} } func (m *StatSummaryResponse) GetResponse() isStatSummaryResponse_Response { @@ -1850,7 +2054,7 @@ type BasicStats struct { func (x *BasicStats) Reset() { *x = BasicStats{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[21] + mi := &file_viz_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1863,7 +2067,7 @@ func (x *BasicStats) String() string { func (*BasicStats) ProtoMessage() {} func (x *BasicStats) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[21] + mi := &file_viz_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1876,7 +2080,7 @@ func (x *BasicStats) ProtoReflect() protoreflect.Message { // Deprecated: Use BasicStats.ProtoReflect.Descriptor instead. func (*BasicStats) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{21} + return file_viz_proto_rawDescGZIP(), []int{24} } func (x *BasicStats) GetSuccessCount() uint64 { @@ -1944,7 +2148,7 @@ type TcpStats struct { func (x *TcpStats) Reset() { *x = TcpStats{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[22] + mi := &file_viz_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1957,7 +2161,7 @@ func (x *TcpStats) String() string { func (*TcpStats) ProtoMessage() {} func (x *TcpStats) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[22] + mi := &file_viz_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1970,7 +2174,7 @@ func (x *TcpStats) ProtoReflect() protoreflect.Message { // Deprecated: Use TcpStats.ProtoReflect.Descriptor instead. func (*TcpStats) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{22} + return file_viz_proto_rawDescGZIP(), []int{25} } func (x *TcpStats) GetOpenConnections() uint64 { @@ -2007,7 +2211,7 @@ type TrafficSplitStats struct { func (x *TrafficSplitStats) Reset() { *x = TrafficSplitStats{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[23] + mi := &file_viz_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2020,7 +2224,7 @@ func (x *TrafficSplitStats) String() string { func (*TrafficSplitStats) ProtoMessage() {} func (x *TrafficSplitStats) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[23] + mi := &file_viz_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2033,7 +2237,7 @@ func (x *TrafficSplitStats) ProtoReflect() protoreflect.Message { // Deprecated: Use TrafficSplitStats.ProtoReflect.Descriptor instead. func (*TrafficSplitStats) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{23} + return file_viz_proto_rawDescGZIP(), []int{26} } func (x *TrafficSplitStats) GetApex() string { @@ -2070,7 +2274,7 @@ type StatTable struct { func (x *StatTable) Reset() { *x = StatTable{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[24] + mi := &file_viz_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2083,7 +2287,7 @@ func (x *StatTable) String() string { func (*StatTable) ProtoMessage() {} func (x *StatTable) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[24] + mi := &file_viz_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2096,7 +2300,7 @@ func (x *StatTable) ProtoReflect() protoreflect.Message { // Deprecated: Use StatTable.ProtoReflect.Descriptor instead. func (*StatTable) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{24} + return file_viz_proto_rawDescGZIP(), []int{27} } func (m *StatTable) GetTable() isStatTable_Table { @@ -2134,7 +2338,7 @@ type EdgesRequest struct { func (x *EdgesRequest) Reset() { *x = EdgesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[25] + mi := &file_viz_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2147,7 +2351,7 @@ func (x *EdgesRequest) String() string { func (*EdgesRequest) ProtoMessage() {} func (x *EdgesRequest) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[25] + mi := &file_viz_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2160,7 +2364,7 @@ func (x *EdgesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EdgesRequest.ProtoReflect.Descriptor instead. func (*EdgesRequest) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{25} + return file_viz_proto_rawDescGZIP(), []int{28} } func (x *EdgesRequest) GetSelector() *ResourceSelection { @@ -2184,7 +2388,7 @@ type EdgesResponse struct { func (x *EdgesResponse) Reset() { *x = EdgesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[26] + mi := &file_viz_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2197,7 +2401,7 @@ func (x *EdgesResponse) String() string { func (*EdgesResponse) ProtoMessage() {} func (x *EdgesResponse) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[26] + mi := &file_viz_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2210,7 +2414,7 @@ func (x *EdgesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EdgesResponse.ProtoReflect.Descriptor instead. func (*EdgesResponse) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{26} + return file_viz_proto_rawDescGZIP(), []int{29} } func (m *EdgesResponse) GetResponse() isEdgesResponse_Response { @@ -2265,7 +2469,7 @@ type Edge struct { func (x *Edge) Reset() { *x = Edge{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[27] + mi := &file_viz_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2278,7 +2482,7 @@ func (x *Edge) String() string { func (*Edge) ProtoMessage() {} func (x *Edge) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[27] + mi := &file_viz_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2291,7 +2495,7 @@ func (x *Edge) ProtoReflect() protoreflect.Message { // Deprecated: Use Edge.ProtoReflect.Descriptor instead. func (*Edge) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{27} + return file_viz_proto_rawDescGZIP(), []int{30} } func (x *Edge) GetSrc() *Resource { @@ -2345,7 +2549,7 @@ type TopRoutesRequest struct { func (x *TopRoutesRequest) Reset() { *x = TopRoutesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[28] + mi := &file_viz_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2358,7 +2562,7 @@ func (x *TopRoutesRequest) String() string { func (*TopRoutesRequest) ProtoMessage() {} func (x *TopRoutesRequest) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[28] + mi := &file_viz_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2371,7 +2575,7 @@ func (x *TopRoutesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TopRoutesRequest.ProtoReflect.Descriptor instead. func (*TopRoutesRequest) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{28} + return file_viz_proto_rawDescGZIP(), []int{31} } func (x *TopRoutesRequest) GetSelector() *ResourceSelection { @@ -2439,7 +2643,7 @@ type TopRoutesResponse struct { func (x *TopRoutesResponse) Reset() { *x = TopRoutesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[29] + mi := &file_viz_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2452,7 +2656,7 @@ func (x *TopRoutesResponse) String() string { func (*TopRoutesResponse) ProtoMessage() {} func (x *TopRoutesResponse) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[29] + mi := &file_viz_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2465,7 +2669,7 @@ func (x *TopRoutesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TopRoutesResponse.ProtoReflect.Descriptor instead. func (*TopRoutesResponse) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{29} + return file_viz_proto_rawDescGZIP(), []int{32} } func (m *TopRoutesResponse) GetResponse() isTopRoutesResponse_Response { @@ -2517,7 +2721,7 @@ type RouteTable struct { func (x *RouteTable) Reset() { *x = RouteTable{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[30] + mi := &file_viz_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2530,7 +2734,7 @@ func (x *RouteTable) String() string { func (*RouteTable) ProtoMessage() {} func (x *RouteTable) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[30] + mi := &file_viz_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2543,7 +2747,7 @@ func (x *RouteTable) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteTable.ProtoReflect.Descriptor instead. func (*RouteTable) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{30} + return file_viz_proto_rawDescGZIP(), []int{33} } func (x *RouteTable) GetRows() []*RouteTable_Row { @@ -2571,7 +2775,7 @@ type GatewaysTable struct { func (x *GatewaysTable) Reset() { *x = GatewaysTable{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[31] + mi := &file_viz_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2584,7 +2788,7 @@ func (x *GatewaysTable) String() string { func (*GatewaysTable) ProtoMessage() {} func (x *GatewaysTable) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[31] + mi := &file_viz_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2597,7 +2801,7 @@ func (x *GatewaysTable) ProtoReflect() protoreflect.Message { // Deprecated: Use GatewaysTable.ProtoReflect.Descriptor instead. func (*GatewaysTable) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{31} + return file_viz_proto_rawDescGZIP(), []int{34} } func (x *GatewaysTable) GetRows() []*GatewaysTable_Row { @@ -2620,7 +2824,7 @@ type GatewaysRequest struct { func (x *GatewaysRequest) Reset() { *x = GatewaysRequest{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[32] + mi := &file_viz_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2633,7 +2837,7 @@ func (x *GatewaysRequest) String() string { func (*GatewaysRequest) ProtoMessage() {} func (x *GatewaysRequest) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[32] + mi := &file_viz_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2646,7 +2850,7 @@ func (x *GatewaysRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GatewaysRequest.ProtoReflect.Descriptor instead. func (*GatewaysRequest) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{32} + return file_viz_proto_rawDescGZIP(), []int{35} } func (x *GatewaysRequest) GetRemoteClusterName() string { @@ -2684,7 +2888,7 @@ type GatewaysResponse struct { func (x *GatewaysResponse) Reset() { *x = GatewaysResponse{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[33] + mi := &file_viz_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2697,7 +2901,7 @@ func (x *GatewaysResponse) String() string { func (*GatewaysResponse) ProtoMessage() {} func (x *GatewaysResponse) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[33] + mi := &file_viz_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2710,7 +2914,7 @@ func (x *GatewaysResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GatewaysResponse.ProtoReflect.Descriptor instead. func (*GatewaysResponse) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{33} + return file_viz_proto_rawDescGZIP(), []int{36} } func (m *GatewaysResponse) GetResponse() isGatewaysResponse_Response { @@ -2767,7 +2971,7 @@ type TapByResourceRequest_Match struct { func (x *TapByResourceRequest_Match) Reset() { *x = TapByResourceRequest_Match{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[34] + mi := &file_viz_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2780,7 +2984,7 @@ func (x *TapByResourceRequest_Match) String() string { func (*TapByResourceRequest_Match) ProtoMessage() {} func (x *TapByResourceRequest_Match) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[34] + mi := &file_viz_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2793,7 +2997,7 @@ func (x *TapByResourceRequest_Match) ProtoReflect() protoreflect.Message { // Deprecated: Use TapByResourceRequest_Match.ProtoReflect.Descriptor instead. func (*TapByResourceRequest_Match) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{8, 0} + return file_viz_proto_rawDescGZIP(), []int{11, 0} } func (m *TapByResourceRequest_Match) GetMatch() isTapByResourceRequest_Match_Match { @@ -2890,7 +3094,7 @@ type TapByResourceRequest_Extract struct { func (x *TapByResourceRequest_Extract) Reset() { *x = TapByResourceRequest_Extract{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[35] + mi := &file_viz_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2903,7 +3107,7 @@ func (x *TapByResourceRequest_Extract) String() string { func (*TapByResourceRequest_Extract) ProtoMessage() {} func (x *TapByResourceRequest_Extract) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[35] + mi := &file_viz_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2916,7 +3120,7 @@ func (x *TapByResourceRequest_Extract) ProtoReflect() protoreflect.Message { // Deprecated: Use TapByResourceRequest_Extract.ProtoReflect.Descriptor instead. func (*TapByResourceRequest_Extract) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{8, 1} + return file_viz_proto_rawDescGZIP(), []int{11, 1} } func (m *TapByResourceRequest_Extract) GetExtract() isTapByResourceRequest_Extract_Extract { @@ -2954,7 +3158,7 @@ type TapByResourceRequest_Match_Seq struct { func (x *TapByResourceRequest_Match_Seq) Reset() { *x = TapByResourceRequest_Match_Seq{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[36] + mi := &file_viz_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2967,7 +3171,7 @@ func (x *TapByResourceRequest_Match_Seq) String() string { func (*TapByResourceRequest_Match_Seq) ProtoMessage() {} func (x *TapByResourceRequest_Match_Seq) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[36] + mi := &file_viz_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2980,7 +3184,7 @@ func (x *TapByResourceRequest_Match_Seq) ProtoReflect() protoreflect.Message { // Deprecated: Use TapByResourceRequest_Match_Seq.ProtoReflect.Descriptor instead. func (*TapByResourceRequest_Match_Seq) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{8, 0, 0} + return file_viz_proto_rawDescGZIP(), []int{11, 0, 0} } func (x *TapByResourceRequest_Match_Seq) GetMatches() []*TapByResourceRequest_Match { @@ -3006,7 +3210,7 @@ type TapByResourceRequest_Match_Http struct { func (x *TapByResourceRequest_Match_Http) Reset() { *x = TapByResourceRequest_Match_Http{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[37] + mi := &file_viz_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3019,7 +3223,7 @@ func (x *TapByResourceRequest_Match_Http) String() string { func (*TapByResourceRequest_Match_Http) ProtoMessage() {} func (x *TapByResourceRequest_Match_Http) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[37] + mi := &file_viz_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3032,7 +3236,7 @@ func (x *TapByResourceRequest_Match_Http) ProtoReflect() protoreflect.Message { // Deprecated: Use TapByResourceRequest_Match_Http.ProtoReflect.Descriptor instead. func (*TapByResourceRequest_Match_Http) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{8, 0, 1} + return file_viz_proto_rawDescGZIP(), []int{11, 0, 1} } func (m *TapByResourceRequest_Match_Http) GetMatch() isTapByResourceRequest_Match_Http_Match { @@ -3111,7 +3315,7 @@ type TapByResourceRequest_Extract_Http struct { func (x *TapByResourceRequest_Extract_Http) Reset() { *x = TapByResourceRequest_Extract_Http{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[38] + mi := &file_viz_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3124,7 +3328,7 @@ func (x *TapByResourceRequest_Extract_Http) String() string { func (*TapByResourceRequest_Extract_Http) ProtoMessage() {} func (x *TapByResourceRequest_Extract_Http) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[38] + mi := &file_viz_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3137,7 +3341,7 @@ func (x *TapByResourceRequest_Extract_Http) ProtoReflect() protoreflect.Message // Deprecated: Use TapByResourceRequest_Extract_Http.ProtoReflect.Descriptor instead. func (*TapByResourceRequest_Extract_Http) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{8, 1, 0} + return file_viz_proto_rawDescGZIP(), []int{11, 1, 0} } func (m *TapByResourceRequest_Extract_Http) GetExtract() isTapByResourceRequest_Extract_Http_Extract { @@ -3173,7 +3377,7 @@ type TapByResourceRequest_Extract_Http_Headers struct { func (x *TapByResourceRequest_Extract_Http_Headers) Reset() { *x = TapByResourceRequest_Extract_Http_Headers{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[39] + mi := &file_viz_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3186,7 +3390,7 @@ func (x *TapByResourceRequest_Extract_Http_Headers) String() string { func (*TapByResourceRequest_Extract_Http_Headers) ProtoMessage() {} func (x *TapByResourceRequest_Extract_Http_Headers) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[39] + mi := &file_viz_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3199,7 +3403,7 @@ func (x *TapByResourceRequest_Extract_Http_Headers) ProtoReflect() protoreflect. // Deprecated: Use TapByResourceRequest_Extract_Http_Headers.ProtoReflect.Descriptor instead. func (*TapByResourceRequest_Extract_Http_Headers) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{8, 1, 0, 0} + return file_viz_proto_rawDescGZIP(), []int{11, 1, 0, 0} } type Headers_Header struct { @@ -3222,7 +3426,7 @@ type Headers_Header struct { func (x *Headers_Header) Reset() { *x = Headers_Header{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[40] + mi := &file_viz_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3235,7 +3439,7 @@ func (x *Headers_Header) String() string { func (*Headers_Header) ProtoMessage() {} func (x *Headers_Header) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[40] + mi := &file_viz_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3248,7 +3452,7 @@ func (x *Headers_Header) ProtoReflect() protoreflect.Message { // Deprecated: Use Headers_Header.ProtoReflect.Descriptor instead. func (*Headers_Header) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{11, 0} + return file_viz_proto_rawDescGZIP(), []int{14, 0} } func (x *Headers_Header) GetName() string { @@ -3306,7 +3510,7 @@ type TapEvent_EndpointMeta struct { func (x *TapEvent_EndpointMeta) Reset() { *x = TapEvent_EndpointMeta{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[41] + mi := &file_viz_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3319,7 +3523,7 @@ func (x *TapEvent_EndpointMeta) String() string { func (*TapEvent_EndpointMeta) ProtoMessage() {} func (x *TapEvent_EndpointMeta) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[41] + mi := &file_viz_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3332,7 +3536,7 @@ func (x *TapEvent_EndpointMeta) ProtoReflect() protoreflect.Message { // Deprecated: Use TapEvent_EndpointMeta.ProtoReflect.Descriptor instead. func (*TapEvent_EndpointMeta) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{13, 0} + return file_viz_proto_rawDescGZIP(), []int{16, 0} } func (x *TapEvent_EndpointMeta) GetLabels() map[string]string { @@ -3353,7 +3557,7 @@ type TapEvent_RouteMeta struct { func (x *TapEvent_RouteMeta) Reset() { *x = TapEvent_RouteMeta{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[42] + mi := &file_viz_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3366,7 +3570,7 @@ func (x *TapEvent_RouteMeta) String() string { func (*TapEvent_RouteMeta) ProtoMessage() {} func (x *TapEvent_RouteMeta) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[42] + mi := &file_viz_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3379,7 +3583,7 @@ func (x *TapEvent_RouteMeta) ProtoReflect() protoreflect.Message { // Deprecated: Use TapEvent_RouteMeta.ProtoReflect.Descriptor instead. func (*TapEvent_RouteMeta) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{13, 1} + return file_viz_proto_rawDescGZIP(), []int{16, 1} } func (x *TapEvent_RouteMeta) GetLabels() map[string]string { @@ -3404,7 +3608,7 @@ type TapEvent_Http struct { func (x *TapEvent_Http) Reset() { *x = TapEvent_Http{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[43] + mi := &file_viz_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3417,7 +3621,7 @@ func (x *TapEvent_Http) String() string { func (*TapEvent_Http) ProtoMessage() {} func (x *TapEvent_Http) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[43] + mi := &file_viz_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3430,7 +3634,7 @@ func (x *TapEvent_Http) ProtoReflect() protoreflect.Message { // Deprecated: Use TapEvent_Http.ProtoReflect.Descriptor instead. func (*TapEvent_Http) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{13, 2} + return file_viz_proto_rawDescGZIP(), []int{16, 2} } func (m *TapEvent_Http) GetEvent() isTapEvent_Http_Event { @@ -3497,7 +3701,7 @@ type TapEvent_Http_StreamId struct { func (x *TapEvent_Http_StreamId) Reset() { *x = TapEvent_Http_StreamId{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[46] + mi := &file_viz_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3510,7 +3714,7 @@ func (x *TapEvent_Http_StreamId) String() string { func (*TapEvent_Http_StreamId) ProtoMessage() {} func (x *TapEvent_Http_StreamId) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[46] + mi := &file_viz_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3523,7 +3727,7 @@ func (x *TapEvent_Http_StreamId) ProtoReflect() protoreflect.Message { // Deprecated: Use TapEvent_Http_StreamId.ProtoReflect.Descriptor instead. func (*TapEvent_Http_StreamId) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{13, 2, 0} + return file_viz_proto_rawDescGZIP(), []int{16, 2, 0} } func (x *TapEvent_Http_StreamId) GetBase() uint32 { @@ -3556,7 +3760,7 @@ type TapEvent_Http_RequestInit struct { func (x *TapEvent_Http_RequestInit) Reset() { *x = TapEvent_Http_RequestInit{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[47] + mi := &file_viz_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3569,7 +3773,7 @@ func (x *TapEvent_Http_RequestInit) String() string { func (*TapEvent_Http_RequestInit) ProtoMessage() {} func (x *TapEvent_Http_RequestInit) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[47] + mi := &file_viz_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3582,7 +3786,7 @@ func (x *TapEvent_Http_RequestInit) ProtoReflect() protoreflect.Message { // Deprecated: Use TapEvent_Http_RequestInit.ProtoReflect.Descriptor instead. func (*TapEvent_Http_RequestInit) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{13, 2, 1} + return file_viz_proto_rawDescGZIP(), []int{16, 2, 1} } func (x *TapEvent_Http_RequestInit) GetId() *TapEvent_Http_StreamId { @@ -3641,7 +3845,7 @@ type TapEvent_Http_ResponseInit struct { func (x *TapEvent_Http_ResponseInit) Reset() { *x = TapEvent_Http_ResponseInit{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[48] + mi := &file_viz_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3654,7 +3858,7 @@ func (x *TapEvent_Http_ResponseInit) String() string { func (*TapEvent_Http_ResponseInit) ProtoMessage() {} func (x *TapEvent_Http_ResponseInit) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[48] + mi := &file_viz_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3667,7 +3871,7 @@ func (x *TapEvent_Http_ResponseInit) ProtoReflect() protoreflect.Message { // Deprecated: Use TapEvent_Http_ResponseInit.ProtoReflect.Descriptor instead. func (*TapEvent_Http_ResponseInit) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{13, 2, 2} + return file_viz_proto_rawDescGZIP(), []int{16, 2, 2} } func (x *TapEvent_Http_ResponseInit) GetId() *TapEvent_Http_StreamId { @@ -3714,7 +3918,7 @@ type TapEvent_Http_ResponseEnd struct { func (x *TapEvent_Http_ResponseEnd) Reset() { *x = TapEvent_Http_ResponseEnd{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[49] + mi := &file_viz_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3727,7 +3931,7 @@ func (x *TapEvent_Http_ResponseEnd) String() string { func (*TapEvent_Http_ResponseEnd) ProtoMessage() {} func (x *TapEvent_Http_ResponseEnd) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[49] + mi := &file_viz_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3740,7 +3944,7 @@ func (x *TapEvent_Http_ResponseEnd) ProtoReflect() protoreflect.Message { // Deprecated: Use TapEvent_Http_ResponseEnd.ProtoReflect.Descriptor instead. func (*TapEvent_Http_ResponseEnd) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{13, 2, 3} + return file_viz_proto_rawDescGZIP(), []int{16, 2, 3} } func (x *TapEvent_Http_ResponseEnd) GetId() *TapEvent_Http_StreamId { @@ -3798,7 +4002,7 @@ type PodErrors_PodError struct { func (x *PodErrors_PodError) Reset() { *x = PodErrors_PodError{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[50] + mi := &file_viz_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3811,7 +4015,7 @@ func (x *PodErrors_PodError) String() string { func (*PodErrors_PodError) ProtoMessage() {} func (x *PodErrors_PodError) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[50] + mi := &file_viz_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3824,7 +4028,7 @@ func (x *PodErrors_PodError) ProtoReflect() protoreflect.Message { // Deprecated: Use PodErrors_PodError.ProtoReflect.Descriptor instead. func (*PodErrors_PodError) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{15, 0} + return file_viz_proto_rawDescGZIP(), []int{18, 0} } func (m *PodErrors_PodError) GetError() isPodErrors_PodError_Error { @@ -3866,7 +4070,7 @@ type PodErrors_PodError_ContainerError struct { func (x *PodErrors_PodError_ContainerError) Reset() { *x = PodErrors_PodError_ContainerError{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[51] + mi := &file_viz_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3879,7 +4083,7 @@ func (x *PodErrors_PodError_ContainerError) String() string { func (*PodErrors_PodError_ContainerError) ProtoMessage() {} func (x *PodErrors_PodError_ContainerError) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[51] + mi := &file_viz_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3892,7 +4096,7 @@ func (x *PodErrors_PodError_ContainerError) ProtoReflect() protoreflect.Message // Deprecated: Use PodErrors_PodError_ContainerError.ProtoReflect.Descriptor instead. func (*PodErrors_PodError_ContainerError) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{15, 0, 0} + return file_viz_proto_rawDescGZIP(), []int{18, 0, 0} } func (x *PodErrors_PodError_ContainerError) GetMessage() string { @@ -3934,7 +4138,7 @@ type StatSummaryResponse_Ok struct { func (x *StatSummaryResponse_Ok) Reset() { *x = StatSummaryResponse_Ok{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[52] + mi := &file_viz_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3947,7 +4151,7 @@ func (x *StatSummaryResponse_Ok) String() string { func (*StatSummaryResponse_Ok) ProtoMessage() {} func (x *StatSummaryResponse_Ok) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[52] + mi := &file_viz_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3960,7 +4164,7 @@ func (x *StatSummaryResponse_Ok) ProtoReflect() protoreflect.Message { // Deprecated: Use StatSummaryResponse_Ok.ProtoReflect.Descriptor instead. func (*StatSummaryResponse_Ok) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{20, 0} + return file_viz_proto_rawDescGZIP(), []int{23, 0} } func (x *StatSummaryResponse_Ok) GetStatTables() []*StatTable { @@ -3981,7 +4185,7 @@ type StatTable_PodGroup struct { func (x *StatTable_PodGroup) Reset() { *x = StatTable_PodGroup{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[53] + mi := &file_viz_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3994,7 +4198,7 @@ func (x *StatTable_PodGroup) String() string { func (*StatTable_PodGroup) ProtoMessage() {} func (x *StatTable_PodGroup) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[53] + mi := &file_viz_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4007,7 +4211,7 @@ func (x *StatTable_PodGroup) ProtoReflect() protoreflect.Message { // Deprecated: Use StatTable_PodGroup.ProtoReflect.Descriptor instead. func (*StatTable_PodGroup) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{24, 0} + return file_viz_proto_rawDescGZIP(), []int{27, 0} } func (x *StatTable_PodGroup) GetRows() []*StatTable_PodGroup_Row { @@ -4042,7 +4246,7 @@ type StatTable_PodGroup_Row struct { func (x *StatTable_PodGroup_Row) Reset() { *x = StatTable_PodGroup_Row{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[54] + mi := &file_viz_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4055,7 +4259,7 @@ func (x *StatTable_PodGroup_Row) String() string { func (*StatTable_PodGroup_Row) ProtoMessage() {} func (x *StatTable_PodGroup_Row) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[54] + mi := &file_viz_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4068,7 +4272,7 @@ func (x *StatTable_PodGroup_Row) ProtoReflect() protoreflect.Message { // Deprecated: Use StatTable_PodGroup_Row.ProtoReflect.Descriptor instead. func (*StatTable_PodGroup_Row) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{24, 0, 0} + return file_viz_proto_rawDescGZIP(), []int{27, 0, 0} } func (x *StatTable_PodGroup_Row) GetResource() *Resource { @@ -4152,7 +4356,7 @@ type EdgesResponse_Ok struct { func (x *EdgesResponse_Ok) Reset() { *x = EdgesResponse_Ok{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[56] + mi := &file_viz_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4165,7 +4369,7 @@ func (x *EdgesResponse_Ok) String() string { func (*EdgesResponse_Ok) ProtoMessage() {} func (x *EdgesResponse_Ok) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[56] + mi := &file_viz_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4178,7 +4382,7 @@ func (x *EdgesResponse_Ok) ProtoReflect() protoreflect.Message { // Deprecated: Use EdgesResponse_Ok.ProtoReflect.Descriptor instead. func (*EdgesResponse_Ok) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{26, 0} + return file_viz_proto_rawDescGZIP(), []int{29, 0} } func (x *EdgesResponse_Ok) GetEdges() []*Edge { @@ -4199,7 +4403,7 @@ type TopRoutesResponse_Ok struct { func (x *TopRoutesResponse_Ok) Reset() { *x = TopRoutesResponse_Ok{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[57] + mi := &file_viz_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4212,7 +4416,7 @@ func (x *TopRoutesResponse_Ok) String() string { func (*TopRoutesResponse_Ok) ProtoMessage() {} func (x *TopRoutesResponse_Ok) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[57] + mi := &file_viz_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4225,7 +4429,7 @@ func (x *TopRoutesResponse_Ok) ProtoReflect() protoreflect.Message { // Deprecated: Use TopRoutesResponse_Ok.ProtoReflect.Descriptor instead. func (*TopRoutesResponse_Ok) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{29, 0} + return file_viz_proto_rawDescGZIP(), []int{32, 0} } func (x *TopRoutesResponse_Ok) GetRoutes() []*RouteTable { @@ -4249,7 +4453,7 @@ type RouteTable_Row struct { func (x *RouteTable_Row) Reset() { *x = RouteTable_Row{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[58] + mi := &file_viz_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4262,7 +4466,7 @@ func (x *RouteTable_Row) String() string { func (*RouteTable_Row) ProtoMessage() {} func (x *RouteTable_Row) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[58] + mi := &file_viz_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4275,7 +4479,7 @@ func (x *RouteTable_Row) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteTable_Row.ProtoReflect.Descriptor instead. func (*RouteTable_Row) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{30, 0} + return file_viz_proto_rawDescGZIP(), []int{33, 0} } func (x *RouteTable_Row) GetRoute() string { @@ -4324,7 +4528,7 @@ type GatewaysTable_Row struct { func (x *GatewaysTable_Row) Reset() { *x = GatewaysTable_Row{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[59] + mi := &file_viz_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4337,7 +4541,7 @@ func (x *GatewaysTable_Row) String() string { func (*GatewaysTable_Row) ProtoMessage() {} func (x *GatewaysTable_Row) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[59] + mi := &file_viz_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4350,7 +4554,7 @@ func (x *GatewaysTable_Row) ProtoReflect() protoreflect.Message { // Deprecated: Use GatewaysTable_Row.ProtoReflect.Descriptor instead. func (*GatewaysTable_Row) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{31, 0} + return file_viz_proto_rawDescGZIP(), []int{34, 0} } func (x *GatewaysTable_Row) GetNamespace() string { @@ -4420,7 +4624,7 @@ type GatewaysResponse_Ok struct { func (x *GatewaysResponse_Ok) Reset() { *x = GatewaysResponse_Ok{} if protoimpl.UnsafeEnabled { - mi := &file_viz_proto_msgTypes[60] + mi := &file_viz_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4433,7 +4637,7 @@ func (x *GatewaysResponse_Ok) String() string { func (*GatewaysResponse_Ok) ProtoMessage() {} func (x *GatewaysResponse_Ok) ProtoReflect() protoreflect.Message { - mi := &file_viz_proto_msgTypes[60] + mi := &file_viz_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4446,7 +4650,7 @@ func (x *GatewaysResponse_Ok) ProtoReflect() protoreflect.Message { // Deprecated: Use GatewaysResponse_Ok.ProtoReflect.Descriptor instead. func (*GatewaysResponse_Ok) Descriptor() ([]byte, []int) { - return file_viz_proto_rawDescGZIP(), []int{33, 0} + return file_viz_proto_rawDescGZIP(), []int{36, 0} } func (x *GatewaysResponse_Ok) GetGatewaysTable() *GatewaysTable { @@ -4462,281 +4666,312 @@ var file_viz_proto_rawDesc = []byte{ 0x0a, 0x09, 0x76, 0x69, 0x7a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x33, - 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x22, 0x49, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x08, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3b, - 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x70, 0x0a, 0x0f, 0x4c, - 0x69, 0x73, 0x74, 0x50, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, - 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x3b, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, - 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x39, 0x0a, - 0x10, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x25, 0x0a, 0x04, 0x70, 0x6f, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x50, - 0x6f, 0x64, 0x52, 0x04, 0x70, 0x6f, 0x64, 0x73, 0x22, 0xfa, 0x04, 0x0a, 0x03, 0x50, 0x6f, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x6f, 0x64, 0x49, 0x50, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x6f, 0x64, 0x49, 0x50, 0x12, 0x20, 0x0a, 0x0a, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0b, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x12, - 0x37, 0x0a, 0x16, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x15, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x66, 0x75, 0x6c, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x12, 0x1f, 0x0a, - 0x0a, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x12, - 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x6a, - 0x6f, 0x62, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, - 0x12, 0x43, 0x0a, 0x0f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x52, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x6c, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x75, - 0x70, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1e, - 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x61, 0x64, 0x79, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x22, - 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x07, 0x0a, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x22, 0xaa, 0x02, 0x0a, 0x0a, 0x54, 0x61, 0x70, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x03, 0x70, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x64, 0x12, 0x20, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, - 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, - 0x78, 0x52, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x52, - 0x70, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x6f, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x06, 0x74, 0x6f, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x6f, - 0x49, 0x50, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x6f, 0x49, 0x50, 0x12, 0x1a, - 0x0a, 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x72, - 0x6f, 0x6d, 0x49, 0x50, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x72, 0x6f, 0x6d, - 0x49, 0x50, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x70, 0x61, 0x74, 0x68, 0x3a, 0x02, 0x18, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x22, 0xe5, 0x07, 0x0a, 0x14, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, - 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, - 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x52, 0x70, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x52, 0x70, 0x73, 0x12, 0x44, 0x0a, 0x07, - 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, - 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, - 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x52, 0x07, 0x65, 0x78, 0x74, 0x72, 0x61, - 0x63, 0x74, 0x1a, 0xa4, 0x04, 0x0a, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x40, 0x0a, 0x03, - 0x61, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, - 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x2e, 0x53, 0x65, 0x71, 0x48, 0x00, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x40, - 0x0a, 0x03, 0x61, 0x6e, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x69, - 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x42, 0x79, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x53, 0x65, 0x71, 0x48, 0x00, 0x52, 0x03, 0x61, 0x6e, 0x79, - 0x12, 0x3c, 0x0a, 0x03, 0x6e, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, - 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x03, 0x6e, 0x6f, 0x74, 0x12, 0x45, - 0x0a, 0x0c, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, - 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x43, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, - 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x74, - 0x74, 0x70, 0x48, 0x00, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x1a, 0x49, 0x0a, 0x03, 0x53, 0x65, - 0x71, 0x12, 0x42, 0x0a, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x07, 0x0a, 0x05, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0xc8, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x53, 0x75, 0x62, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, + 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x46, 0x72, 0x69, + 0x65, 0x6e, 0x64, 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x55, 0x73, + 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, + 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x22, + 0x12, 0x0a, 0x10, 0x53, 0x65, 0x6c, 0x66, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x48, 0x0a, 0x11, 0x53, 0x65, 0x6c, 0x66, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, + 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x33, 0x0a, + 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x22, 0x49, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x08, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3b, 0x0a, + 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x70, 0x0a, 0x0f, 0x4c, 0x69, + 0x73, 0x74, 0x50, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x3b, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, + 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x39, 0x0a, 0x10, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x25, 0x0a, 0x04, 0x70, 0x6f, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x50, 0x6f, + 0x64, 0x52, 0x04, 0x70, 0x6f, 0x64, 0x73, 0x22, 0xfa, 0x04, 0x0a, 0x03, 0x50, 0x6f, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x6f, 0x64, 0x49, 0x50, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x70, 0x6f, 0x64, 0x49, 0x50, 0x12, 0x20, 0x0a, 0x0a, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0b, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x12, 0x37, + 0x0a, 0x16, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x15, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x66, 0x75, 0x6c, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x0b, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0a, + 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x12, 0x0a, + 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x6a, 0x6f, + 0x62, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, + 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, + 0x43, 0x0a, 0x0f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x75, 0x70, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x61, 0x64, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x22, 0x0a, + 0x0c, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x22, 0xaa, 0x02, 0x0a, 0x0a, 0x54, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x03, 0x70, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x64, 0x12, 0x20, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, + 0x52, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x52, 0x70, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x6f, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x06, 0x74, 0x6f, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x6f, 0x49, + 0x50, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x6f, 0x49, 0x50, 0x12, 0x1a, 0x0a, + 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x72, 0x6f, + 0x6d, 0x49, 0x50, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x72, 0x6f, 0x6d, 0x49, + 0x50, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, + 0x68, 0x6f, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, + 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x3a, 0x02, 0x18, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x22, 0xe5, 0x07, 0x0a, 0x14, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x6e, + 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x07, 0x6d, 0x61, - 0x74, 0x63, 0x68, 0x65, 0x73, 0x1a, 0x79, 0x0a, 0x04, 0x48, 0x74, 0x74, 0x70, 0x12, 0x18, 0x0a, - 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x12, 0x1e, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x12, 0x14, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x42, 0x07, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x42, 0x07, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x1a, 0xce, 0x01, 0x0a, 0x07, 0x45, 0x78, - 0x74, 0x72, 0x61, 0x63, 0x74, 0x12, 0x45, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, - 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x2e, - 0x48, 0x74, 0x74, 0x70, 0x48, 0x00, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x1a, 0x71, 0x0a, 0x04, - 0x48, 0x74, 0x74, 0x70, 0x12, 0x53, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, - 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x48, 0x00, - 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x1a, 0x09, 0x0a, 0x07, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x42, - 0x09, 0x0a, 0x07, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x22, 0xf1, 0x01, 0x0a, 0x0a, 0x48, - 0x74, 0x74, 0x70, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, - 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x48, 0x74, 0x74, - 0x70, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x65, 0x64, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, - 0x12, 0x24, 0x0a, 0x0c, 0x75, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x22, 0x6e, 0x0a, 0x0a, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x65, 0x64, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, - 0x04, 0x50, 0x4f, 0x53, 0x54, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x55, 0x54, 0x10, 0x02, - 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, - 0x50, 0x41, 0x54, 0x43, 0x48, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, - 0x4e, 0x53, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, - 0x06, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, 0x10, 0x07, 0x12, 0x09, 0x0a, 0x05, 0x54, - 0x52, 0x41, 0x43, 0x45, 0x10, 0x08, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x9c, - 0x01, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0a, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, - 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x65, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x48, 0x00, - 0x52, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0c, - 0x75, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x65, 0x64, 0x22, 0x21, 0x0a, 0x0a, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, - 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x54, - 0x54, 0x50, 0x53, 0x10, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xa6, 0x01, - 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x36, 0x0a, 0x07, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x69, 0x6e, - 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x1a, 0x63, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x1d, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x74, 0x72, 0x12, 0x1d, - 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0c, 0x48, 0x00, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x69, 0x6e, 0x42, 0x07, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x64, 0x0a, 0x03, 0x45, 0x6f, 0x73, 0x12, 0x2a, 0x0a, - 0x10, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x0e, 0x67, 0x72, 0x70, 0x63, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x72, 0x65, 0x73, - 0x65, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x43, 0x6f, 0x64, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x22, 0xc2, 0x0f, 0x0a, - 0x08, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, - 0x65, 0x72, 0x64, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x2e, - 0x54, 0x63, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x44, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, - 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, - 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0a, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x41, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x6e, 0x65, 0x74, 0x2e, 0x54, 0x63, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x10, 0x64, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, - 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x3f, 0x0a, 0x0a, 0x72, - 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, - 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x4e, 0x0a, 0x0f, - 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, - 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x72, - 0x6f, 0x78, 0x79, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x70, 0x72, - 0x6f, 0x78, 0x79, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x04, - 0x68, 0x74, 0x74, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x6e, - 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x48, 0x00, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x1a, - 0x92, 0x01, 0x0a, 0x0c, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x12, 0x47, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, - 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x8c, 0x01, 0x0a, 0x09, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x65, - 0x74, 0x61, 0x12, 0x44, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, - 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x52, 0x70, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x52, 0x70, 0x73, 0x12, 0x44, 0x0a, 0x07, 0x65, + 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x42, + 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x52, 0x07, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, + 0x74, 0x1a, 0xa4, 0x04, 0x0a, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x40, 0x0a, 0x03, 0x61, + 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, + 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x2e, 0x53, 0x65, 0x71, 0x48, 0x00, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x40, 0x0a, + 0x03, 0x61, 0x6e, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x69, 0x6e, + 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x2e, 0x53, 0x65, 0x71, 0x48, 0x00, 0x52, 0x03, 0x61, 0x6e, 0x79, 0x12, + 0x3c, 0x0a, 0x03, 0x6e, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x42, + 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x03, 0x6e, 0x6f, 0x74, 0x12, 0x45, 0x0a, + 0x0c, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, + 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x43, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, + 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x74, 0x74, + 0x70, 0x48, 0x00, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x1a, 0x49, 0x0a, 0x03, 0x53, 0x65, 0x71, + 0x12, 0x42, 0x0a, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, + 0x2e, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x07, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x65, 0x73, 0x1a, 0x79, 0x0a, 0x04, 0x48, 0x74, 0x74, 0x70, 0x12, 0x18, 0x0a, 0x06, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x12, 0x1e, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, + 0x12, 0x14, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x42, 0x07, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, + 0x07, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x1a, 0xce, 0x01, 0x0a, 0x07, 0x45, 0x78, 0x74, + 0x72, 0x61, 0x63, 0x74, 0x12, 0x45, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, + 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x2e, 0x48, + 0x74, 0x74, 0x70, 0x48, 0x00, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x1a, 0x71, 0x0a, 0x04, 0x48, + 0x74, 0x74, 0x70, 0x12, 0x53, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, + 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, + 0x2e, 0x48, 0x74, 0x74, 0x70, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, + 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x1a, 0x09, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x42, 0x09, + 0x0a, 0x07, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x22, 0xf1, 0x01, 0x0a, 0x0a, 0x48, 0x74, + 0x74, 0x70, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x48, 0x74, 0x74, 0x70, + 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, + 0x64, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x12, + 0x24, 0x0a, 0x0c, 0x75, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x65, 0x64, 0x22, 0x6e, 0x0a, 0x0a, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, + 0x72, 0x65, 0x64, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x50, 0x4f, 0x53, 0x54, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x55, 0x54, 0x10, 0x02, 0x12, + 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x50, + 0x41, 0x54, 0x43, 0x48, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, + 0x53, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, 0x06, + 0x12, 0x08, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, 0x10, 0x07, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, + 0x41, 0x43, 0x45, 0x10, 0x08, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x9c, 0x01, + 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0a, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x65, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x48, 0x00, 0x52, + 0x0a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0c, 0x75, + 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, + 0x64, 0x22, 0x21, 0x0a, 0x0a, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x12, + 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x54, 0x54, + 0x50, 0x53, 0x10, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xa6, 0x01, 0x0a, + 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x36, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, + 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, + 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, + 0x1a, 0x63, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, + 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x74, 0x72, 0x12, 0x1d, 0x0a, + 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, + 0x48, 0x00, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x69, 0x6e, 0x42, 0x07, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x64, 0x0a, 0x03, 0x45, 0x6f, 0x73, 0x12, 0x2a, 0x0a, 0x10, + 0x67, 0x72, 0x70, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x0e, 0x67, 0x72, 0x70, 0x63, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x65, + 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x43, 0x6f, 0x64, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x22, 0xc2, 0x0f, 0x0a, 0x08, + 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, + 0x72, 0x64, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x54, + 0x63, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x44, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, + 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x45, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0a, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x41, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, + 0x65, 0x74, 0x2e, 0x54, 0x63, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x10, 0x64, 0x65, + 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, + 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x6e, 0x64, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x3f, 0x0a, 0x0a, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, + 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, + 0x52, 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x4e, 0x0a, 0x0f, 0x70, + 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, + 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x72, 0x6f, + 0x78, 0x79, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x70, 0x72, 0x6f, + 0x78, 0x79, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x04, 0x68, + 0x74, 0x74, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, + 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x48, 0x00, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x1a, 0x92, + 0x01, 0x0a, 0x0c, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, + 0x47, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, + 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0xf8, 0x08, 0x0a, 0x04, 0x48, 0x74, 0x74, 0x70, 0x12, 0x4c, 0x0a, 0x0c, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, - 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x4f, 0x0a, 0x0d, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, - 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x2e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x02, 0x38, 0x01, 0x1a, 0x8c, 0x01, 0x0a, 0x09, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x12, 0x44, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, + 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, + 0x65, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0xf8, 0x08, 0x0a, 0x04, 0x48, 0x74, 0x74, 0x70, 0x12, 0x4c, 0x0a, 0x0c, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x2e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, 0x64, 0x1a, 0x36, 0x0a, 0x08, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x1a, 0x86, 0x02, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x69, - 0x74, 0x12, 0x34, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, - 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x4d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, - 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, - 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x2f, 0x0a, 0x07, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x6e, - 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x1a, 0xdf, 0x01, 0x0a, 0x0c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x34, 0x0a, 0x02, 0x69, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x4f, 0x0a, 0x0d, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, + 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x2e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, + 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x2e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, 0x64, 0x1a, 0x36, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x1a, 0x86, 0x02, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x69, 0x74, + 0x12, 0x34, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, + 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, + 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x06, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x2f, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, + 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, + 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x1a, 0xdf, 0x01, 0x0a, 0x0c, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x34, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, + 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x48, + 0x74, 0x74, 0x70, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x47, 0x0a, 0x12, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x74, 0x74, + 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, + 0x68, 0x74, 0x74, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2f, 0x0a, 0x07, 0x68, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x69, + 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x1a, 0xd6, 0x02, 0x0a, 0x0b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x52, 0x02, 0x69, @@ -4744,356 +4979,343 @@ var file_viz_proto_rawDesc = []byte{ 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x74, - 0x74, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0a, 0x68, 0x74, 0x74, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2f, 0x0a, 0x07, 0x68, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, - 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x1a, 0xd6, 0x02, 0x0a, - 0x0b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, - 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x2e, 0x48, 0x74, 0x74, 0x70, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x47, 0x0a, 0x12, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x73, 0x69, 0x6e, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x49, 0x0a, 0x13, 0x73, - 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x69, 0x6e, - 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x23, 0x0a, - 0x03, 0x65, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6c, 0x69, 0x6e, - 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x45, 0x6f, 0x73, 0x52, 0x03, 0x65, - 0x6f, 0x73, 0x12, 0x31, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, - 0x76, 0x69, 0x7a, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x08, 0x74, 0x72, 0x61, - 0x69, 0x6c, 0x65, 0x72, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x38, - 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, - 0x07, 0x49, 0x4e, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x55, - 0x54, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x22, 0x20, 0x0a, 0x08, 0x41, 0x70, 0x69, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x14, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0xa4, 0x02, 0x0a, 0x09, 0x50, 0x6f, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x73, 0x12, 0x38, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, - 0x2e, 0x50, 0x6f, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2e, 0x50, 0x6f, 0x64, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x1a, 0xdc, 0x01, 0x0a, 0x08, - 0x50, 0x6f, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4f, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6c, 0x69, - 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x50, 0x6f, 0x64, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x73, 0x2e, 0x50, 0x6f, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x43, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x09, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x1a, 0x76, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x50, 0x0a, 0x08, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6e, 0x0a, 0x11, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x32, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, - 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x59, 0x0a, 0x0d, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x32, 0x0a, - 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xdf, 0x02, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x74, - 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, - 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x29, 0x0a, 0x04, - 0x6e, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x6e, - 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, - 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x6e, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x74, 0x6f, 0x5f, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, - 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, - 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x48, 0x00, 0x52, 0x0c, 0x66, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x6b, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x73, - 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x63, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x63, 0x70, 0x53, 0x74, 0x61, 0x74, 0x73, 0x42, 0x0a, 0x0a, - 0x08, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0xce, 0x01, 0x0a, 0x13, 0x53, 0x74, - 0x61, 0x74, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x36, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x4f, 0x6b, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x6b, 0x12, 0x33, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x49, 0x0a, 0x13, 0x73, 0x69, + 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x69, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x11, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x03, + 0x65, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, + 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x45, 0x6f, 0x73, 0x52, 0x03, 0x65, 0x6f, + 0x73, 0x12, 0x31, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, + 0x69, 0x7a, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x08, 0x74, 0x72, 0x61, 0x69, + 0x6c, 0x65, 0x72, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x38, 0x0a, + 0x0e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, + 0x49, 0x4e, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x55, 0x54, + 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x22, 0x20, 0x0a, 0x08, 0x41, 0x70, 0x69, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0xa4, 0x02, 0x0a, 0x09, 0x50, 0x6f, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, + 0x12, 0x38, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, + 0x50, 0x6f, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2e, 0x50, 0x6f, 0x64, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x1a, 0xdc, 0x01, 0x0a, 0x08, 0x50, + 0x6f, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4f, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6c, 0x69, 0x6e, + 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x50, 0x6f, 0x64, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x73, 0x2e, 0x50, 0x6f, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x09, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x1a, 0x76, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x42, 0x07, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x50, 0x0a, 0x08, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6e, 0x0a, 0x11, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x32, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, + 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x73, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x59, 0x0a, 0x0d, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x32, 0x0a, 0x08, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xdf, 0x02, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x74, 0x53, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, + 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x29, 0x0a, 0x04, 0x6e, + 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, + 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, + 0x52, 0x04, 0x6e, 0x6f, 0x6e, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, + 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x3d, 0x0a, 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x3e, - 0x0a, 0x02, 0x4f, 0x6b, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x5f, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, - 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x42, 0x0a, - 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xac, 0x02, 0x0a, 0x0a, 0x42, - 0x61, 0x73, 0x69, 0x63, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0c, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, - 0x0a, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, - 0x73, 0x5f, 0x70, 0x35, 0x30, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6c, 0x61, 0x74, - 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x50, 0x35, 0x30, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x74, - 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x5f, 0x70, 0x39, 0x35, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0c, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x50, 0x39, 0x35, 0x12, - 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x5f, 0x70, 0x39, - 0x39, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, - 0x4d, 0x73, 0x50, 0x39, 0x39, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x5f, - 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x12, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x63, 0x74, 0x75, 0x61, - 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x46, 0x61, 0x69, - 0x6c, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8b, 0x01, 0x0a, 0x08, 0x54, 0x63, - 0x70, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x72, 0x65, 0x61, - 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x79, 0x74, - 0x65, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x53, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x66, 0x66, - 0x69, 0x63, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, - 0x61, 0x70, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x70, 0x65, 0x78, - 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x65, 0x61, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6c, 0x65, 0x61, 0x66, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xe6, 0x05, 0x0a, - 0x09, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x70, 0x6f, - 0x64, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x50, 0x6f, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, - 0x00, 0x52, 0x08, 0x70, 0x6f, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x8e, 0x05, 0x0a, 0x08, - 0x50, 0x6f, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x38, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, - 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, - 0x50, 0x6f, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, - 0x77, 0x73, 0x1a, 0xc7, 0x04, 0x0a, 0x03, 0x52, 0x6f, 0x77, 0x12, 0x32, 0x0a, 0x08, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, + 0x48, 0x00, 0x52, 0x0c, 0x66, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x6b, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, + 0x1b, 0x0a, 0x09, 0x74, 0x63, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x08, 0x74, 0x63, 0x70, 0x53, 0x74, 0x61, 0x74, 0x73, 0x42, 0x0a, 0x0a, 0x08, + 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0xce, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x61, + 0x74, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x36, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x4f, 0x6b, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x6b, 0x12, 0x33, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, + 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x3e, 0x0a, + 0x02, 0x4f, 0x6b, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, + 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x42, 0x0a, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xac, 0x02, 0x0a, 0x0a, 0x42, 0x61, + 0x73, 0x69, 0x63, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0c, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, + 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, + 0x5f, 0x70, 0x35, 0x30, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6c, 0x61, 0x74, 0x65, + 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x50, 0x35, 0x30, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x74, 0x65, + 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x5f, 0x70, 0x39, 0x35, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0c, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x50, 0x39, 0x35, 0x12, 0x24, + 0x0a, 0x0e, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x5f, 0x70, 0x39, 0x39, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, + 0x73, 0x50, 0x39, 0x39, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x12, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, + 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x46, 0x61, 0x69, 0x6c, + 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8b, 0x01, 0x0a, 0x08, 0x54, 0x63, 0x70, + 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0f, 0x6f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x28, 0x0a, 0x10, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x72, 0x65, 0x61, 0x64, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x53, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, + 0x63, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, + 0x70, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x70, 0x65, 0x78, 0x12, + 0x12, 0x0a, 0x04, 0x6c, 0x65, 0x61, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, + 0x65, 0x61, 0x66, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xe6, 0x05, 0x0a, 0x09, + 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x70, 0x6f, 0x64, + 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x50, 0x6f, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, + 0x52, 0x08, 0x70, 0x6f, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x8e, 0x05, 0x0a, 0x08, 0x50, + 0x6f, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x38, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, + 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x50, + 0x6f, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, + 0x73, 0x1a, 0xc7, 0x04, 0x0a, 0x03, 0x52, 0x6f, 0x77, 0x12, 0x32, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, + 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0e, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x64, 0x50, 0x6f, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x64, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x72, 0x75, 0x6e, + 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, + 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x50, 0x6f, + 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, + 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x12, 0x33, 0x0a, 0x09, 0x74, 0x63, 0x70, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, + 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x63, 0x70, 0x53, 0x74, 0x61, 0x74, + 0x73, 0x52, 0x08, 0x74, 0x63, 0x70, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x08, 0x74, + 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x72, 0x61, + 0x66, 0x66, 0x69, 0x63, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x07, + 0x74, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x59, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x70, 0x6f, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, + 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x50, 0x6f, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x2e, 0x52, 0x6f, 0x77, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x42, 0x79, 0x50, 0x6f, 0x64, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x42, 0x79, 0x50, + 0x6f, 0x64, 0x1a, 0x57, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x42, 0x79, 0x50, 0x6f, + 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, + 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x50, 0x6f, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x22, 0x4b, 0x0a, 0x0c, 0x45, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, + 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x22, 0xb2, 0x01, 0x0a, 0x0d, 0x45, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x45, + 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4f, 0x6b, 0x48, + 0x00, 0x52, 0x02, 0x6f, 0x6b, 0x12, 0x33, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, + 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x2e, 0x0a, 0x02, 0x4f, 0x6b, + 0x12, 0x28, 0x0a, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x45, + 0x64, 0x67, 0x65, 0x52, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x04, 0x45, 0x64, 0x67, 0x65, 0x12, + 0x28, 0x0a, 0x03, 0x73, 0x72, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x03, 0x73, 0x72, 0x63, 0x12, 0x28, 0x0a, 0x03, 0x64, 0x73, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, + 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x03, + 0x64, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, + 0x0f, 0x6e, 0x6f, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6d, 0x73, 0x67, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x6f, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x4d, 0x73, 0x67, 0x22, 0xe2, 0x01, 0x0a, 0x10, 0x54, 0x6f, 0x70, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x08, 0x73, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x65, 0x73, 0x68, 0x65, - 0x64, 0x5f, 0x70, 0x6f, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0e, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x64, 0x50, 0x6f, 0x64, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x64, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x72, 0x75, - 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, - 0x10, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x50, - 0x6f, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, - 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x53, 0x74, 0x61, 0x74, 0x73, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x12, 0x33, 0x0a, 0x09, 0x74, 0x63, 0x70, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x6e, - 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x63, 0x70, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x52, 0x08, 0x74, 0x63, 0x70, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x08, - 0x74, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x72, - 0x61, 0x66, 0x66, 0x69, 0x63, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, - 0x07, 0x74, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x59, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x70, 0x6f, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x35, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x50, 0x6f, 0x64, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x2e, 0x52, 0x6f, 0x77, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x42, 0x79, 0x50, 0x6f, - 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x42, 0x79, - 0x50, 0x6f, 0x64, 0x1a, 0x57, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x42, 0x79, 0x50, - 0x6f, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, - 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x50, 0x6f, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x07, 0x0a, 0x05, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x4b, 0x0a, 0x0c, 0x45, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, - 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x22, 0xb2, 0x01, 0x0a, 0x0d, 0x45, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, - 0x45, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4f, 0x6b, - 0x48, 0x00, 0x52, 0x02, 0x6f, 0x6b, 0x12, 0x33, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, - 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x2e, 0x0a, 0x02, 0x4f, - 0x6b, 0x12, 0x28, 0x0a, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, - 0x45, 0x64, 0x67, 0x65, 0x52, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x04, 0x45, 0x64, 0x67, 0x65, - 0x12, 0x28, 0x0a, 0x03, 0x73, 0x72, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x03, 0x73, 0x72, 0x63, 0x12, 0x28, 0x0a, 0x03, 0x64, 0x73, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, - 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x03, 0x64, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, - 0x0a, 0x0f, 0x6e, 0x6f, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6d, 0x73, - 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x6f, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x4d, 0x73, 0x67, 0x22, 0xe2, 0x01, 0x0a, 0x10, 0x54, 0x6f, 0x70, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x08, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, - 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, - 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x29, 0x0a, 0x04, 0x6e, 0x6f, 0x6e, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, - 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x04, - 0x6e, 0x6f, 0x6e, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, + 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x69, + 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x29, 0x0a, 0x04, 0x6e, 0x6f, 0x6e, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, + 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x04, 0x6e, + 0x6f, 0x6e, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, + 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x48, 0x00, 0x52, 0x0a, 0x74, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0a, + 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x11, 0x54, + 0x6f, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x33, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x34, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, + 0x2e, 0x54, 0x6f, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x4f, 0x6b, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x6b, 0x1a, 0x36, 0x0a, 0x02, 0x4f, + 0x6b, 0x12, 0x30, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, + 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x75, + 0x74, 0x65, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0xe7, 0x01, 0x0a, 0x0a, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x30, + 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, + 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0x8a, 0x01, 0x0a, + 0x03, 0x52, 0x6f, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x1c, 0x0a, 0x09, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, + 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, 0xd2, 0x02, 0x0a, 0x0d, 0x47, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x72, + 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, + 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x73, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, + 0x1a, 0x8b, 0x02, 0x0a, 0x03, 0x52, 0x6f, 0x77, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, + 0x0f, 0x70, 0x61, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x70, 0x61, 0x69, 0x72, 0x65, 0x64, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x12, 0x24, 0x0a, 0x0e, + 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x5f, 0x70, 0x35, 0x30, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x50, + 0x35, 0x30, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, + 0x5f, 0x70, 0x39, 0x35, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6c, 0x61, 0x74, 0x65, + 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x50, 0x39, 0x35, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x74, 0x65, + 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0c, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x50, 0x39, 0x39, 0x22, 0x8f, + 0x01, 0x0a, 0x0f, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x1f, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x22, 0xd2, 0x01, 0x0a, 0x10, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, + 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x4f, 0x6b, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x6b, 0x12, 0x33, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, - 0x0a, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x11, - 0x54, 0x6f, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x33, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x34, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, - 0x7a, 0x2e, 0x54, 0x6f, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x4f, 0x6b, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x6b, 0x1a, 0x36, 0x0a, 0x02, - 0x4f, 0x6b, 0x12, 0x30, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, - 0x7a, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x06, 0x72, 0x6f, - 0x75, 0x74, 0x65, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0xe7, 0x01, 0x0a, 0x0a, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, - 0x30, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, - 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0x8a, 0x01, - 0x0a, 0x03, 0x52, 0x6f, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x1c, 0x0a, 0x09, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, - 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x53, 0x74, - 0x61, 0x74, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, 0xd2, 0x02, 0x0a, 0x0d, 0x47, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x04, - 0x72, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x6e, - 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x73, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, - 0x73, 0x1a, 0x8b, 0x02, 0x0a, 0x03, 0x52, 0x6f, 0x77, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, - 0x0a, 0x0f, 0x70, 0x61, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x70, 0x61, 0x69, 0x72, 0x65, 0x64, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x76, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x12, 0x24, 0x0a, - 0x0e, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x5f, 0x70, 0x35, 0x30, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, - 0x50, 0x35, 0x30, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, - 0x73, 0x5f, 0x70, 0x39, 0x35, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6c, 0x61, 0x74, - 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x50, 0x39, 0x35, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x74, - 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0c, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x50, 0x39, 0x39, 0x22, - 0x8f, 0x01, 0x0a, 0x0f, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, - 0x77, 0x22, 0xd2, 0x01, 0x0a, 0x10, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, - 0x7a, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x4f, 0x6b, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x6b, 0x12, 0x33, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x6e, - 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x1a, 0x48, 0x0a, 0x02, 0x4f, 0x6b, 0x12, 0x42, 0x0a, 0x0e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x73, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, + 0x48, 0x0a, 0x02, 0x4f, 0x6b, 0x12, 0x42, 0x0a, 0x0e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x73, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x47, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x73, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x0d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x73, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x2a, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x46, 0x41, 0x49, 0x4c, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, + 0x02, 0x32, 0xb2, 0x04, 0x0a, 0x03, 0x41, 0x70, 0x69, 0x12, 0x54, 0x0a, 0x0b, 0x53, 0x74, 0x61, + 0x74, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, + 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x53, 0x75, 0x6d, 0x6d, + 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x69, 0x6e, + 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x53, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x42, 0x0a, 0x05, 0x45, 0x64, 0x67, 0x65, 0x73, 0x12, 0x1a, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, + 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, + 0x76, 0x69, 0x7a, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x08, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, + 0x1d, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x47, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x47, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x0d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x73, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xd0, 0x04, 0x0a, 0x03, 0x41, 0x70, 0x69, 0x12, 0x54, - 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x2e, - 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x21, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x05, 0x45, 0x64, 0x67, 0x65, 0x73, 0x12, 0x1a, 0x2e, - 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x45, 0x64, 0x67, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, - 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x08, 0x47, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, - 0x76, 0x69, 0x7a, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, - 0x69, 0x7a, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x09, 0x54, 0x6f, 0x70, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, - 0x7a, 0x2e, 0x54, 0x6f, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, - 0x7a, 0x2e, 0x54, 0x6f, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x64, - 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x12, 0x21, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, - 0x7a, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, - 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x09, 0x53, - 0x65, 0x6c, 0x66, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x2d, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, - 0x72, 0x64, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, - 0x64, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x99, 0x01, 0x0a, 0x03, 0x54, 0x61, - 0x70, 0x12, 0x3e, 0x0a, 0x03, 0x54, 0x61, 0x70, 0x12, 0x18, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, - 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, - 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x03, 0x88, 0x02, 0x01, 0x30, - 0x01, 0x12, 0x52, 0x0a, 0x0d, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x22, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, - 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, - 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x03, - 0x88, 0x02, 0x01, 0x30, 0x01, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, - 0x65, 0x72, 0x64, 0x32, 0x2f, 0x76, 0x69, 0x7a, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x76, 0x69, 0x7a, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x4e, 0x0a, 0x09, 0x54, 0x6f, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x1e, 0x2e, + 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x6f, 0x70, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, + 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x6f, 0x70, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x4b, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x64, 0x73, 0x12, 0x1d, 0x2e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x50, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x69, + 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x6f, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, + 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x21, 0x2e, + 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x22, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x09, 0x53, 0x65, 0x6c, 0x66, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x12, 0x1e, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, + 0x69, 0x7a, 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, + 0x69, 0x7a, 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x99, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x70, 0x12, 0x3e, + 0x0a, 0x03, 0x54, 0x61, 0x70, 0x12, 0x18, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, + 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, + 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x03, 0x88, 0x02, 0x01, 0x30, 0x01, 0x12, 0x52, + 0x0a, 0x0d, 0x54, 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x22, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, 0x69, 0x7a, 0x2e, 0x54, + 0x61, 0x70, 0x42, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2e, 0x76, + 0x69, 0x7a, 0x2e, 0x54, 0x61, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x03, 0x88, 0x02, 0x01, + 0x30, 0x01, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, + 0x32, 0x2f, 0x76, 0x69, 0x7a, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x61, 0x70, + 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x76, 0x69, 0x7a, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -5108,182 +5330,186 @@ func file_viz_proto_rawDescGZIP() []byte { return file_viz_proto_rawDescData } -var file_viz_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_viz_proto_msgTypes = make([]protoimpl.MessageInfo, 61) +var file_viz_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_viz_proto_msgTypes = make([]protoimpl.MessageInfo, 64) var file_viz_proto_goTypes = []interface{}{ - (HttpMethod_Registered)(0), // 0: linkerd2.viz.HttpMethod.Registered - (Scheme_Registered)(0), // 1: linkerd2.viz.Scheme.Registered - (TapEvent_ProxyDirection)(0), // 2: linkerd2.viz.TapEvent.ProxyDirection - (*Empty)(nil), // 3: linkerd2.viz.Empty - (*ListServicesRequest)(nil), // 4: linkerd2.viz.ListServicesRequest - (*ListServicesResponse)(nil), // 5: linkerd2.viz.ListServicesResponse - (*Service)(nil), // 6: linkerd2.viz.Service - (*ListPodsRequest)(nil), // 7: linkerd2.viz.ListPodsRequest - (*ListPodsResponse)(nil), // 8: linkerd2.viz.ListPodsResponse - (*Pod)(nil), // 9: linkerd2.viz.Pod - (*TapRequest)(nil), // 10: linkerd2.viz.TapRequest - (*TapByResourceRequest)(nil), // 11: linkerd2.viz.TapByResourceRequest - (*HttpMethod)(nil), // 12: linkerd2.viz.HttpMethod - (*Scheme)(nil), // 13: linkerd2.viz.Scheme - (*Headers)(nil), // 14: linkerd2.viz.Headers - (*Eos)(nil), // 15: linkerd2.viz.Eos - (*TapEvent)(nil), // 16: linkerd2.viz.TapEvent - (*ApiError)(nil), // 17: linkerd2.viz.ApiError - (*PodErrors)(nil), // 18: linkerd2.viz.PodErrors - (*Resource)(nil), // 19: linkerd2.viz.Resource - (*ResourceSelection)(nil), // 20: linkerd2.viz.ResourceSelection - (*ResourceError)(nil), // 21: linkerd2.viz.ResourceError - (*StatSummaryRequest)(nil), // 22: linkerd2.viz.StatSummaryRequest - (*StatSummaryResponse)(nil), // 23: linkerd2.viz.StatSummaryResponse - (*BasicStats)(nil), // 24: linkerd2.viz.BasicStats - (*TcpStats)(nil), // 25: linkerd2.viz.TcpStats - (*TrafficSplitStats)(nil), // 26: linkerd2.viz.TrafficSplitStats - (*StatTable)(nil), // 27: linkerd2.viz.StatTable - (*EdgesRequest)(nil), // 28: linkerd2.viz.EdgesRequest - (*EdgesResponse)(nil), // 29: linkerd2.viz.EdgesResponse - (*Edge)(nil), // 30: linkerd2.viz.Edge - (*TopRoutesRequest)(nil), // 31: linkerd2.viz.TopRoutesRequest - (*TopRoutesResponse)(nil), // 32: linkerd2.viz.TopRoutesResponse - (*RouteTable)(nil), // 33: linkerd2.viz.RouteTable - (*GatewaysTable)(nil), // 34: linkerd2.viz.GatewaysTable - (*GatewaysRequest)(nil), // 35: linkerd2.viz.GatewaysRequest - (*GatewaysResponse)(nil), // 36: linkerd2.viz.GatewaysResponse - (*TapByResourceRequest_Match)(nil), // 37: linkerd2.viz.TapByResourceRequest.Match - (*TapByResourceRequest_Extract)(nil), // 38: linkerd2.viz.TapByResourceRequest.Extract - (*TapByResourceRequest_Match_Seq)(nil), // 39: linkerd2.viz.TapByResourceRequest.Match.Seq - (*TapByResourceRequest_Match_Http)(nil), // 40: linkerd2.viz.TapByResourceRequest.Match.Http - (*TapByResourceRequest_Extract_Http)(nil), // 41: linkerd2.viz.TapByResourceRequest.Extract.Http - (*TapByResourceRequest_Extract_Http_Headers)(nil), // 42: linkerd2.viz.TapByResourceRequest.Extract.Http.Headers - (*Headers_Header)(nil), // 43: linkerd2.viz.Headers.Header - (*TapEvent_EndpointMeta)(nil), // 44: linkerd2.viz.TapEvent.EndpointMeta - (*TapEvent_RouteMeta)(nil), // 45: linkerd2.viz.TapEvent.RouteMeta - (*TapEvent_Http)(nil), // 46: linkerd2.viz.TapEvent.Http - nil, // 47: linkerd2.viz.TapEvent.EndpointMeta.LabelsEntry - nil, // 48: linkerd2.viz.TapEvent.RouteMeta.LabelsEntry - (*TapEvent_Http_StreamId)(nil), // 49: linkerd2.viz.TapEvent.Http.StreamId - (*TapEvent_Http_RequestInit)(nil), // 50: linkerd2.viz.TapEvent.Http.RequestInit - (*TapEvent_Http_ResponseInit)(nil), // 51: linkerd2.viz.TapEvent.Http.ResponseInit - (*TapEvent_Http_ResponseEnd)(nil), // 52: linkerd2.viz.TapEvent.Http.ResponseEnd - (*PodErrors_PodError)(nil), // 53: linkerd2.viz.PodErrors.PodError - (*PodErrors_PodError_ContainerError)(nil), // 54: linkerd2.viz.PodErrors.PodError.ContainerError - (*StatSummaryResponse_Ok)(nil), // 55: linkerd2.viz.StatSummaryResponse.Ok - (*StatTable_PodGroup)(nil), // 56: linkerd2.viz.StatTable.PodGroup - (*StatTable_PodGroup_Row)(nil), // 57: linkerd2.viz.StatTable.PodGroup.Row - nil, // 58: linkerd2.viz.StatTable.PodGroup.Row.ErrorsByPodEntry - (*EdgesResponse_Ok)(nil), // 59: linkerd2.viz.EdgesResponse.Ok - (*TopRoutesResponse_Ok)(nil), // 60: linkerd2.viz.TopRoutesResponse.Ok - (*RouteTable_Row)(nil), // 61: linkerd2.viz.RouteTable.Row - (*GatewaysTable_Row)(nil), // 62: linkerd2.viz.GatewaysTable.Row - (*GatewaysResponse_Ok)(nil), // 63: linkerd2.viz.GatewaysResponse.Ok - (*duration.Duration)(nil), // 64: google.protobuf.Duration - (*net.TcpAddress)(nil), // 65: linkerd2.common.net.TcpAddress - (*healthcheck.SelfCheckRequest)(nil), // 66: linkerd2.common.healthcheck.SelfCheckRequest - (*healthcheck.SelfCheckResponse)(nil), // 67: linkerd2.common.healthcheck.SelfCheckResponse + (CheckStatus)(0), // 0: linkerd2.viz.CheckStatus + (HttpMethod_Registered)(0), // 1: linkerd2.viz.HttpMethod.Registered + (Scheme_Registered)(0), // 2: linkerd2.viz.Scheme.Registered + (TapEvent_ProxyDirection)(0), // 3: linkerd2.viz.TapEvent.ProxyDirection + (*Empty)(nil), // 4: linkerd2.viz.Empty + (*CheckResult)(nil), // 5: linkerd2.viz.CheckResult + (*SelfCheckRequest)(nil), // 6: linkerd2.viz.SelfCheckRequest + (*SelfCheckResponse)(nil), // 7: linkerd2.viz.SelfCheckResponse + (*ListServicesRequest)(nil), // 8: linkerd2.viz.ListServicesRequest + (*ListServicesResponse)(nil), // 9: linkerd2.viz.ListServicesResponse + (*Service)(nil), // 10: linkerd2.viz.Service + (*ListPodsRequest)(nil), // 11: linkerd2.viz.ListPodsRequest + (*ListPodsResponse)(nil), // 12: linkerd2.viz.ListPodsResponse + (*Pod)(nil), // 13: linkerd2.viz.Pod + (*TapRequest)(nil), // 14: linkerd2.viz.TapRequest + (*TapByResourceRequest)(nil), // 15: linkerd2.viz.TapByResourceRequest + (*HttpMethod)(nil), // 16: linkerd2.viz.HttpMethod + (*Scheme)(nil), // 17: linkerd2.viz.Scheme + (*Headers)(nil), // 18: linkerd2.viz.Headers + (*Eos)(nil), // 19: linkerd2.viz.Eos + (*TapEvent)(nil), // 20: linkerd2.viz.TapEvent + (*ApiError)(nil), // 21: linkerd2.viz.ApiError + (*PodErrors)(nil), // 22: linkerd2.viz.PodErrors + (*Resource)(nil), // 23: linkerd2.viz.Resource + (*ResourceSelection)(nil), // 24: linkerd2.viz.ResourceSelection + (*ResourceError)(nil), // 25: linkerd2.viz.ResourceError + (*StatSummaryRequest)(nil), // 26: linkerd2.viz.StatSummaryRequest + (*StatSummaryResponse)(nil), // 27: linkerd2.viz.StatSummaryResponse + (*BasicStats)(nil), // 28: linkerd2.viz.BasicStats + (*TcpStats)(nil), // 29: linkerd2.viz.TcpStats + (*TrafficSplitStats)(nil), // 30: linkerd2.viz.TrafficSplitStats + (*StatTable)(nil), // 31: linkerd2.viz.StatTable + (*EdgesRequest)(nil), // 32: linkerd2.viz.EdgesRequest + (*EdgesResponse)(nil), // 33: linkerd2.viz.EdgesResponse + (*Edge)(nil), // 34: linkerd2.viz.Edge + (*TopRoutesRequest)(nil), // 35: linkerd2.viz.TopRoutesRequest + (*TopRoutesResponse)(nil), // 36: linkerd2.viz.TopRoutesResponse + (*RouteTable)(nil), // 37: linkerd2.viz.RouteTable + (*GatewaysTable)(nil), // 38: linkerd2.viz.GatewaysTable + (*GatewaysRequest)(nil), // 39: linkerd2.viz.GatewaysRequest + (*GatewaysResponse)(nil), // 40: linkerd2.viz.GatewaysResponse + (*TapByResourceRequest_Match)(nil), // 41: linkerd2.viz.TapByResourceRequest.Match + (*TapByResourceRequest_Extract)(nil), // 42: linkerd2.viz.TapByResourceRequest.Extract + (*TapByResourceRequest_Match_Seq)(nil), // 43: linkerd2.viz.TapByResourceRequest.Match.Seq + (*TapByResourceRequest_Match_Http)(nil), // 44: linkerd2.viz.TapByResourceRequest.Match.Http + (*TapByResourceRequest_Extract_Http)(nil), // 45: linkerd2.viz.TapByResourceRequest.Extract.Http + (*TapByResourceRequest_Extract_Http_Headers)(nil), // 46: linkerd2.viz.TapByResourceRequest.Extract.Http.Headers + (*Headers_Header)(nil), // 47: linkerd2.viz.Headers.Header + (*TapEvent_EndpointMeta)(nil), // 48: linkerd2.viz.TapEvent.EndpointMeta + (*TapEvent_RouteMeta)(nil), // 49: linkerd2.viz.TapEvent.RouteMeta + (*TapEvent_Http)(nil), // 50: linkerd2.viz.TapEvent.Http + nil, // 51: linkerd2.viz.TapEvent.EndpointMeta.LabelsEntry + nil, // 52: linkerd2.viz.TapEvent.RouteMeta.LabelsEntry + (*TapEvent_Http_StreamId)(nil), // 53: linkerd2.viz.TapEvent.Http.StreamId + (*TapEvent_Http_RequestInit)(nil), // 54: linkerd2.viz.TapEvent.Http.RequestInit + (*TapEvent_Http_ResponseInit)(nil), // 55: linkerd2.viz.TapEvent.Http.ResponseInit + (*TapEvent_Http_ResponseEnd)(nil), // 56: linkerd2.viz.TapEvent.Http.ResponseEnd + (*PodErrors_PodError)(nil), // 57: linkerd2.viz.PodErrors.PodError + (*PodErrors_PodError_ContainerError)(nil), // 58: linkerd2.viz.PodErrors.PodError.ContainerError + (*StatSummaryResponse_Ok)(nil), // 59: linkerd2.viz.StatSummaryResponse.Ok + (*StatTable_PodGroup)(nil), // 60: linkerd2.viz.StatTable.PodGroup + (*StatTable_PodGroup_Row)(nil), // 61: linkerd2.viz.StatTable.PodGroup.Row + nil, // 62: linkerd2.viz.StatTable.PodGroup.Row.ErrorsByPodEntry + (*EdgesResponse_Ok)(nil), // 63: linkerd2.viz.EdgesResponse.Ok + (*TopRoutesResponse_Ok)(nil), // 64: linkerd2.viz.TopRoutesResponse.Ok + (*RouteTable_Row)(nil), // 65: linkerd2.viz.RouteTable.Row + (*GatewaysTable_Row)(nil), // 66: linkerd2.viz.GatewaysTable.Row + (*GatewaysResponse_Ok)(nil), // 67: linkerd2.viz.GatewaysResponse.Ok + (*duration.Duration)(nil), // 68: google.protobuf.Duration + (*net.TcpAddress)(nil), // 69: linkerd2.common.net.TcpAddress } var file_viz_proto_depIdxs = []int32{ - 6, // 0: linkerd2.viz.ListServicesResponse.services:type_name -> linkerd2.viz.Service - 20, // 1: linkerd2.viz.ListPodsRequest.selector:type_name -> linkerd2.viz.ResourceSelection - 9, // 2: linkerd2.viz.ListPodsResponse.pods:type_name -> linkerd2.viz.Pod - 64, // 3: linkerd2.viz.Pod.sinceLastReport:type_name -> google.protobuf.Duration - 64, // 4: linkerd2.viz.Pod.uptime:type_name -> google.protobuf.Duration - 20, // 5: linkerd2.viz.TapByResourceRequest.target:type_name -> linkerd2.viz.ResourceSelection - 37, // 6: linkerd2.viz.TapByResourceRequest.match:type_name -> linkerd2.viz.TapByResourceRequest.Match - 38, // 7: linkerd2.viz.TapByResourceRequest.extract:type_name -> linkerd2.viz.TapByResourceRequest.Extract - 0, // 8: linkerd2.viz.HttpMethod.registered:type_name -> linkerd2.viz.HttpMethod.Registered - 1, // 9: linkerd2.viz.Scheme.registered:type_name -> linkerd2.viz.Scheme.Registered - 43, // 10: linkerd2.viz.Headers.headers:type_name -> linkerd2.viz.Headers.Header - 65, // 11: linkerd2.viz.TapEvent.source:type_name -> linkerd2.common.net.TcpAddress - 44, // 12: linkerd2.viz.TapEvent.source_meta:type_name -> linkerd2.viz.TapEvent.EndpointMeta - 65, // 13: linkerd2.viz.TapEvent.destination:type_name -> linkerd2.common.net.TcpAddress - 44, // 14: linkerd2.viz.TapEvent.destination_meta:type_name -> linkerd2.viz.TapEvent.EndpointMeta - 45, // 15: linkerd2.viz.TapEvent.route_meta:type_name -> linkerd2.viz.TapEvent.RouteMeta - 2, // 16: linkerd2.viz.TapEvent.proxy_direction:type_name -> linkerd2.viz.TapEvent.ProxyDirection - 46, // 17: linkerd2.viz.TapEvent.http:type_name -> linkerd2.viz.TapEvent.Http - 53, // 18: linkerd2.viz.PodErrors.errors:type_name -> linkerd2.viz.PodErrors.PodError - 19, // 19: linkerd2.viz.ResourceSelection.resource:type_name -> linkerd2.viz.Resource - 19, // 20: linkerd2.viz.ResourceError.resource:type_name -> linkerd2.viz.Resource - 20, // 21: linkerd2.viz.StatSummaryRequest.selector:type_name -> linkerd2.viz.ResourceSelection - 3, // 22: linkerd2.viz.StatSummaryRequest.none:type_name -> linkerd2.viz.Empty - 19, // 23: linkerd2.viz.StatSummaryRequest.to_resource:type_name -> linkerd2.viz.Resource - 19, // 24: linkerd2.viz.StatSummaryRequest.from_resource:type_name -> linkerd2.viz.Resource - 55, // 25: linkerd2.viz.StatSummaryResponse.ok:type_name -> linkerd2.viz.StatSummaryResponse.Ok - 21, // 26: linkerd2.viz.StatSummaryResponse.error:type_name -> linkerd2.viz.ResourceError - 56, // 27: linkerd2.viz.StatTable.pod_group:type_name -> linkerd2.viz.StatTable.PodGroup - 20, // 28: linkerd2.viz.EdgesRequest.selector:type_name -> linkerd2.viz.ResourceSelection - 59, // 29: linkerd2.viz.EdgesResponse.ok:type_name -> linkerd2.viz.EdgesResponse.Ok - 21, // 30: linkerd2.viz.EdgesResponse.error:type_name -> linkerd2.viz.ResourceError - 19, // 31: linkerd2.viz.Edge.src:type_name -> linkerd2.viz.Resource - 19, // 32: linkerd2.viz.Edge.dst:type_name -> linkerd2.viz.Resource - 20, // 33: linkerd2.viz.TopRoutesRequest.selector:type_name -> linkerd2.viz.ResourceSelection - 3, // 34: linkerd2.viz.TopRoutesRequest.none:type_name -> linkerd2.viz.Empty - 19, // 35: linkerd2.viz.TopRoutesRequest.to_resource:type_name -> linkerd2.viz.Resource - 21, // 36: linkerd2.viz.TopRoutesResponse.error:type_name -> linkerd2.viz.ResourceError - 60, // 37: linkerd2.viz.TopRoutesResponse.ok:type_name -> linkerd2.viz.TopRoutesResponse.Ok - 61, // 38: linkerd2.viz.RouteTable.rows:type_name -> linkerd2.viz.RouteTable.Row - 62, // 39: linkerd2.viz.GatewaysTable.rows:type_name -> linkerd2.viz.GatewaysTable.Row - 63, // 40: linkerd2.viz.GatewaysResponse.ok:type_name -> linkerd2.viz.GatewaysResponse.Ok - 21, // 41: linkerd2.viz.GatewaysResponse.error:type_name -> linkerd2.viz.ResourceError - 39, // 42: linkerd2.viz.TapByResourceRequest.Match.all:type_name -> linkerd2.viz.TapByResourceRequest.Match.Seq - 39, // 43: linkerd2.viz.TapByResourceRequest.Match.any:type_name -> linkerd2.viz.TapByResourceRequest.Match.Seq - 37, // 44: linkerd2.viz.TapByResourceRequest.Match.not:type_name -> linkerd2.viz.TapByResourceRequest.Match - 20, // 45: linkerd2.viz.TapByResourceRequest.Match.destinations:type_name -> linkerd2.viz.ResourceSelection - 40, // 46: linkerd2.viz.TapByResourceRequest.Match.http:type_name -> linkerd2.viz.TapByResourceRequest.Match.Http - 41, // 47: linkerd2.viz.TapByResourceRequest.Extract.http:type_name -> linkerd2.viz.TapByResourceRequest.Extract.Http - 37, // 48: linkerd2.viz.TapByResourceRequest.Match.Seq.matches:type_name -> linkerd2.viz.TapByResourceRequest.Match - 42, // 49: linkerd2.viz.TapByResourceRequest.Extract.Http.headers:type_name -> linkerd2.viz.TapByResourceRequest.Extract.Http.Headers - 47, // 50: linkerd2.viz.TapEvent.EndpointMeta.labels:type_name -> linkerd2.viz.TapEvent.EndpointMeta.LabelsEntry - 48, // 51: linkerd2.viz.TapEvent.RouteMeta.labels:type_name -> linkerd2.viz.TapEvent.RouteMeta.LabelsEntry - 50, // 52: linkerd2.viz.TapEvent.Http.request_init:type_name -> linkerd2.viz.TapEvent.Http.RequestInit - 51, // 53: linkerd2.viz.TapEvent.Http.response_init:type_name -> linkerd2.viz.TapEvent.Http.ResponseInit - 52, // 54: linkerd2.viz.TapEvent.Http.response_end:type_name -> linkerd2.viz.TapEvent.Http.ResponseEnd - 49, // 55: linkerd2.viz.TapEvent.Http.RequestInit.id:type_name -> linkerd2.viz.TapEvent.Http.StreamId - 12, // 56: linkerd2.viz.TapEvent.Http.RequestInit.method:type_name -> linkerd2.viz.HttpMethod - 13, // 57: linkerd2.viz.TapEvent.Http.RequestInit.scheme:type_name -> linkerd2.viz.Scheme - 14, // 58: linkerd2.viz.TapEvent.Http.RequestInit.headers:type_name -> linkerd2.viz.Headers - 49, // 59: linkerd2.viz.TapEvent.Http.ResponseInit.id:type_name -> linkerd2.viz.TapEvent.Http.StreamId - 64, // 60: linkerd2.viz.TapEvent.Http.ResponseInit.since_request_init:type_name -> google.protobuf.Duration - 14, // 61: linkerd2.viz.TapEvent.Http.ResponseInit.headers:type_name -> linkerd2.viz.Headers - 49, // 62: linkerd2.viz.TapEvent.Http.ResponseEnd.id:type_name -> linkerd2.viz.TapEvent.Http.StreamId - 64, // 63: linkerd2.viz.TapEvent.Http.ResponseEnd.since_request_init:type_name -> google.protobuf.Duration - 64, // 64: linkerd2.viz.TapEvent.Http.ResponseEnd.since_response_init:type_name -> google.protobuf.Duration - 15, // 65: linkerd2.viz.TapEvent.Http.ResponseEnd.eos:type_name -> linkerd2.viz.Eos - 14, // 66: linkerd2.viz.TapEvent.Http.ResponseEnd.trailers:type_name -> linkerd2.viz.Headers - 54, // 67: linkerd2.viz.PodErrors.PodError.container:type_name -> linkerd2.viz.PodErrors.PodError.ContainerError - 27, // 68: linkerd2.viz.StatSummaryResponse.Ok.stat_tables:type_name -> linkerd2.viz.StatTable - 57, // 69: linkerd2.viz.StatTable.PodGroup.rows:type_name -> linkerd2.viz.StatTable.PodGroup.Row - 19, // 70: linkerd2.viz.StatTable.PodGroup.Row.resource:type_name -> linkerd2.viz.Resource - 24, // 71: linkerd2.viz.StatTable.PodGroup.Row.stats:type_name -> linkerd2.viz.BasicStats - 25, // 72: linkerd2.viz.StatTable.PodGroup.Row.tcp_stats:type_name -> linkerd2.viz.TcpStats - 26, // 73: linkerd2.viz.StatTable.PodGroup.Row.ts_stats:type_name -> linkerd2.viz.TrafficSplitStats - 58, // 74: linkerd2.viz.StatTable.PodGroup.Row.errors_by_pod:type_name -> linkerd2.viz.StatTable.PodGroup.Row.ErrorsByPodEntry - 18, // 75: linkerd2.viz.StatTable.PodGroup.Row.ErrorsByPodEntry.value:type_name -> linkerd2.viz.PodErrors - 30, // 76: linkerd2.viz.EdgesResponse.Ok.edges:type_name -> linkerd2.viz.Edge - 33, // 77: linkerd2.viz.TopRoutesResponse.Ok.routes:type_name -> linkerd2.viz.RouteTable - 24, // 78: linkerd2.viz.RouteTable.Row.stats:type_name -> linkerd2.viz.BasicStats - 34, // 79: linkerd2.viz.GatewaysResponse.Ok.gateways_table:type_name -> linkerd2.viz.GatewaysTable - 22, // 80: linkerd2.viz.Api.StatSummary:input_type -> linkerd2.viz.StatSummaryRequest - 28, // 81: linkerd2.viz.Api.Edges:input_type -> linkerd2.viz.EdgesRequest - 35, // 82: linkerd2.viz.Api.Gateways:input_type -> linkerd2.viz.GatewaysRequest - 31, // 83: linkerd2.viz.Api.TopRoutes:input_type -> linkerd2.viz.TopRoutesRequest - 7, // 84: linkerd2.viz.Api.ListPods:input_type -> linkerd2.viz.ListPodsRequest - 4, // 85: linkerd2.viz.Api.ListServices:input_type -> linkerd2.viz.ListServicesRequest - 66, // 86: linkerd2.viz.Api.SelfCheck:input_type -> linkerd2.common.healthcheck.SelfCheckRequest - 10, // 87: linkerd2.viz.Tap.Tap:input_type -> linkerd2.viz.TapRequest - 11, // 88: linkerd2.viz.Tap.TapByResource:input_type -> linkerd2.viz.TapByResourceRequest - 23, // 89: linkerd2.viz.Api.StatSummary:output_type -> linkerd2.viz.StatSummaryResponse - 29, // 90: linkerd2.viz.Api.Edges:output_type -> linkerd2.viz.EdgesResponse - 36, // 91: linkerd2.viz.Api.Gateways:output_type -> linkerd2.viz.GatewaysResponse - 32, // 92: linkerd2.viz.Api.TopRoutes:output_type -> linkerd2.viz.TopRoutesResponse - 8, // 93: linkerd2.viz.Api.ListPods:output_type -> linkerd2.viz.ListPodsResponse - 5, // 94: linkerd2.viz.Api.ListServices:output_type -> linkerd2.viz.ListServicesResponse - 67, // 95: linkerd2.viz.Api.SelfCheck:output_type -> linkerd2.common.healthcheck.SelfCheckResponse - 16, // 96: linkerd2.viz.Tap.Tap:output_type -> linkerd2.viz.TapEvent - 16, // 97: linkerd2.viz.Tap.TapByResource:output_type -> linkerd2.viz.TapEvent - 89, // [89:98] is the sub-list for method output_type - 80, // [80:89] is the sub-list for method input_type - 80, // [80:80] is the sub-list for extension type_name - 80, // [80:80] is the sub-list for extension extendee - 0, // [0:80] is the sub-list for field type_name + 0, // 0: linkerd2.viz.CheckResult.Status:type_name -> linkerd2.viz.CheckStatus + 5, // 1: linkerd2.viz.SelfCheckResponse.results:type_name -> linkerd2.viz.CheckResult + 10, // 2: linkerd2.viz.ListServicesResponse.services:type_name -> linkerd2.viz.Service + 24, // 3: linkerd2.viz.ListPodsRequest.selector:type_name -> linkerd2.viz.ResourceSelection + 13, // 4: linkerd2.viz.ListPodsResponse.pods:type_name -> linkerd2.viz.Pod + 68, // 5: linkerd2.viz.Pod.sinceLastReport:type_name -> google.protobuf.Duration + 68, // 6: linkerd2.viz.Pod.uptime:type_name -> google.protobuf.Duration + 24, // 7: linkerd2.viz.TapByResourceRequest.target:type_name -> linkerd2.viz.ResourceSelection + 41, // 8: linkerd2.viz.TapByResourceRequest.match:type_name -> linkerd2.viz.TapByResourceRequest.Match + 42, // 9: linkerd2.viz.TapByResourceRequest.extract:type_name -> linkerd2.viz.TapByResourceRequest.Extract + 1, // 10: linkerd2.viz.HttpMethod.registered:type_name -> linkerd2.viz.HttpMethod.Registered + 2, // 11: linkerd2.viz.Scheme.registered:type_name -> linkerd2.viz.Scheme.Registered + 47, // 12: linkerd2.viz.Headers.headers:type_name -> linkerd2.viz.Headers.Header + 69, // 13: linkerd2.viz.TapEvent.source:type_name -> linkerd2.common.net.TcpAddress + 48, // 14: linkerd2.viz.TapEvent.source_meta:type_name -> linkerd2.viz.TapEvent.EndpointMeta + 69, // 15: linkerd2.viz.TapEvent.destination:type_name -> linkerd2.common.net.TcpAddress + 48, // 16: linkerd2.viz.TapEvent.destination_meta:type_name -> linkerd2.viz.TapEvent.EndpointMeta + 49, // 17: linkerd2.viz.TapEvent.route_meta:type_name -> linkerd2.viz.TapEvent.RouteMeta + 3, // 18: linkerd2.viz.TapEvent.proxy_direction:type_name -> linkerd2.viz.TapEvent.ProxyDirection + 50, // 19: linkerd2.viz.TapEvent.http:type_name -> linkerd2.viz.TapEvent.Http + 57, // 20: linkerd2.viz.PodErrors.errors:type_name -> linkerd2.viz.PodErrors.PodError + 23, // 21: linkerd2.viz.ResourceSelection.resource:type_name -> linkerd2.viz.Resource + 23, // 22: linkerd2.viz.ResourceError.resource:type_name -> linkerd2.viz.Resource + 24, // 23: linkerd2.viz.StatSummaryRequest.selector:type_name -> linkerd2.viz.ResourceSelection + 4, // 24: linkerd2.viz.StatSummaryRequest.none:type_name -> linkerd2.viz.Empty + 23, // 25: linkerd2.viz.StatSummaryRequest.to_resource:type_name -> linkerd2.viz.Resource + 23, // 26: linkerd2.viz.StatSummaryRequest.from_resource:type_name -> linkerd2.viz.Resource + 59, // 27: linkerd2.viz.StatSummaryResponse.ok:type_name -> linkerd2.viz.StatSummaryResponse.Ok + 25, // 28: linkerd2.viz.StatSummaryResponse.error:type_name -> linkerd2.viz.ResourceError + 60, // 29: linkerd2.viz.StatTable.pod_group:type_name -> linkerd2.viz.StatTable.PodGroup + 24, // 30: linkerd2.viz.EdgesRequest.selector:type_name -> linkerd2.viz.ResourceSelection + 63, // 31: linkerd2.viz.EdgesResponse.ok:type_name -> linkerd2.viz.EdgesResponse.Ok + 25, // 32: linkerd2.viz.EdgesResponse.error:type_name -> linkerd2.viz.ResourceError + 23, // 33: linkerd2.viz.Edge.src:type_name -> linkerd2.viz.Resource + 23, // 34: linkerd2.viz.Edge.dst:type_name -> linkerd2.viz.Resource + 24, // 35: linkerd2.viz.TopRoutesRequest.selector:type_name -> linkerd2.viz.ResourceSelection + 4, // 36: linkerd2.viz.TopRoutesRequest.none:type_name -> linkerd2.viz.Empty + 23, // 37: linkerd2.viz.TopRoutesRequest.to_resource:type_name -> linkerd2.viz.Resource + 25, // 38: linkerd2.viz.TopRoutesResponse.error:type_name -> linkerd2.viz.ResourceError + 64, // 39: linkerd2.viz.TopRoutesResponse.ok:type_name -> linkerd2.viz.TopRoutesResponse.Ok + 65, // 40: linkerd2.viz.RouteTable.rows:type_name -> linkerd2.viz.RouteTable.Row + 66, // 41: linkerd2.viz.GatewaysTable.rows:type_name -> linkerd2.viz.GatewaysTable.Row + 67, // 42: linkerd2.viz.GatewaysResponse.ok:type_name -> linkerd2.viz.GatewaysResponse.Ok + 25, // 43: linkerd2.viz.GatewaysResponse.error:type_name -> linkerd2.viz.ResourceError + 43, // 44: linkerd2.viz.TapByResourceRequest.Match.all:type_name -> linkerd2.viz.TapByResourceRequest.Match.Seq + 43, // 45: linkerd2.viz.TapByResourceRequest.Match.any:type_name -> linkerd2.viz.TapByResourceRequest.Match.Seq + 41, // 46: linkerd2.viz.TapByResourceRequest.Match.not:type_name -> linkerd2.viz.TapByResourceRequest.Match + 24, // 47: linkerd2.viz.TapByResourceRequest.Match.destinations:type_name -> linkerd2.viz.ResourceSelection + 44, // 48: linkerd2.viz.TapByResourceRequest.Match.http:type_name -> linkerd2.viz.TapByResourceRequest.Match.Http + 45, // 49: linkerd2.viz.TapByResourceRequest.Extract.http:type_name -> linkerd2.viz.TapByResourceRequest.Extract.Http + 41, // 50: linkerd2.viz.TapByResourceRequest.Match.Seq.matches:type_name -> linkerd2.viz.TapByResourceRequest.Match + 46, // 51: linkerd2.viz.TapByResourceRequest.Extract.Http.headers:type_name -> linkerd2.viz.TapByResourceRequest.Extract.Http.Headers + 51, // 52: linkerd2.viz.TapEvent.EndpointMeta.labels:type_name -> linkerd2.viz.TapEvent.EndpointMeta.LabelsEntry + 52, // 53: linkerd2.viz.TapEvent.RouteMeta.labels:type_name -> linkerd2.viz.TapEvent.RouteMeta.LabelsEntry + 54, // 54: linkerd2.viz.TapEvent.Http.request_init:type_name -> linkerd2.viz.TapEvent.Http.RequestInit + 55, // 55: linkerd2.viz.TapEvent.Http.response_init:type_name -> linkerd2.viz.TapEvent.Http.ResponseInit + 56, // 56: linkerd2.viz.TapEvent.Http.response_end:type_name -> linkerd2.viz.TapEvent.Http.ResponseEnd + 53, // 57: linkerd2.viz.TapEvent.Http.RequestInit.id:type_name -> linkerd2.viz.TapEvent.Http.StreamId + 16, // 58: linkerd2.viz.TapEvent.Http.RequestInit.method:type_name -> linkerd2.viz.HttpMethod + 17, // 59: linkerd2.viz.TapEvent.Http.RequestInit.scheme:type_name -> linkerd2.viz.Scheme + 18, // 60: linkerd2.viz.TapEvent.Http.RequestInit.headers:type_name -> linkerd2.viz.Headers + 53, // 61: linkerd2.viz.TapEvent.Http.ResponseInit.id:type_name -> linkerd2.viz.TapEvent.Http.StreamId + 68, // 62: linkerd2.viz.TapEvent.Http.ResponseInit.since_request_init:type_name -> google.protobuf.Duration + 18, // 63: linkerd2.viz.TapEvent.Http.ResponseInit.headers:type_name -> linkerd2.viz.Headers + 53, // 64: linkerd2.viz.TapEvent.Http.ResponseEnd.id:type_name -> linkerd2.viz.TapEvent.Http.StreamId + 68, // 65: linkerd2.viz.TapEvent.Http.ResponseEnd.since_request_init:type_name -> google.protobuf.Duration + 68, // 66: linkerd2.viz.TapEvent.Http.ResponseEnd.since_response_init:type_name -> google.protobuf.Duration + 19, // 67: linkerd2.viz.TapEvent.Http.ResponseEnd.eos:type_name -> linkerd2.viz.Eos + 18, // 68: linkerd2.viz.TapEvent.Http.ResponseEnd.trailers:type_name -> linkerd2.viz.Headers + 58, // 69: linkerd2.viz.PodErrors.PodError.container:type_name -> linkerd2.viz.PodErrors.PodError.ContainerError + 31, // 70: linkerd2.viz.StatSummaryResponse.Ok.stat_tables:type_name -> linkerd2.viz.StatTable + 61, // 71: linkerd2.viz.StatTable.PodGroup.rows:type_name -> linkerd2.viz.StatTable.PodGroup.Row + 23, // 72: linkerd2.viz.StatTable.PodGroup.Row.resource:type_name -> linkerd2.viz.Resource + 28, // 73: linkerd2.viz.StatTable.PodGroup.Row.stats:type_name -> linkerd2.viz.BasicStats + 29, // 74: linkerd2.viz.StatTable.PodGroup.Row.tcp_stats:type_name -> linkerd2.viz.TcpStats + 30, // 75: linkerd2.viz.StatTable.PodGroup.Row.ts_stats:type_name -> linkerd2.viz.TrafficSplitStats + 62, // 76: linkerd2.viz.StatTable.PodGroup.Row.errors_by_pod:type_name -> linkerd2.viz.StatTable.PodGroup.Row.ErrorsByPodEntry + 22, // 77: linkerd2.viz.StatTable.PodGroup.Row.ErrorsByPodEntry.value:type_name -> linkerd2.viz.PodErrors + 34, // 78: linkerd2.viz.EdgesResponse.Ok.edges:type_name -> linkerd2.viz.Edge + 37, // 79: linkerd2.viz.TopRoutesResponse.Ok.routes:type_name -> linkerd2.viz.RouteTable + 28, // 80: linkerd2.viz.RouteTable.Row.stats:type_name -> linkerd2.viz.BasicStats + 38, // 81: linkerd2.viz.GatewaysResponse.Ok.gateways_table:type_name -> linkerd2.viz.GatewaysTable + 26, // 82: linkerd2.viz.Api.StatSummary:input_type -> linkerd2.viz.StatSummaryRequest + 32, // 83: linkerd2.viz.Api.Edges:input_type -> linkerd2.viz.EdgesRequest + 39, // 84: linkerd2.viz.Api.Gateways:input_type -> linkerd2.viz.GatewaysRequest + 35, // 85: linkerd2.viz.Api.TopRoutes:input_type -> linkerd2.viz.TopRoutesRequest + 11, // 86: linkerd2.viz.Api.ListPods:input_type -> linkerd2.viz.ListPodsRequest + 8, // 87: linkerd2.viz.Api.ListServices:input_type -> linkerd2.viz.ListServicesRequest + 6, // 88: linkerd2.viz.Api.SelfCheck:input_type -> linkerd2.viz.SelfCheckRequest + 14, // 89: linkerd2.viz.Tap.Tap:input_type -> linkerd2.viz.TapRequest + 15, // 90: linkerd2.viz.Tap.TapByResource:input_type -> linkerd2.viz.TapByResourceRequest + 27, // 91: linkerd2.viz.Api.StatSummary:output_type -> linkerd2.viz.StatSummaryResponse + 33, // 92: linkerd2.viz.Api.Edges:output_type -> linkerd2.viz.EdgesResponse + 40, // 93: linkerd2.viz.Api.Gateways:output_type -> linkerd2.viz.GatewaysResponse + 36, // 94: linkerd2.viz.Api.TopRoutes:output_type -> linkerd2.viz.TopRoutesResponse + 12, // 95: linkerd2.viz.Api.ListPods:output_type -> linkerd2.viz.ListPodsResponse + 9, // 96: linkerd2.viz.Api.ListServices:output_type -> linkerd2.viz.ListServicesResponse + 7, // 97: linkerd2.viz.Api.SelfCheck:output_type -> linkerd2.viz.SelfCheckResponse + 20, // 98: linkerd2.viz.Tap.Tap:output_type -> linkerd2.viz.TapEvent + 20, // 99: linkerd2.viz.Tap.TapByResource:output_type -> linkerd2.viz.TapEvent + 91, // [91:100] is the sub-list for method output_type + 82, // [82:91] is the sub-list for method input_type + 82, // [82:82] is the sub-list for extension type_name + 82, // [82:82] is the sub-list for extension extendee + 0, // [0:82] is the sub-list for field type_name } func init() { file_viz_proto_init() } @@ -5305,7 +5531,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListServicesRequest); i { + switch v := v.(*CheckResult); i { case 0: return &v.state case 1: @@ -5317,7 +5543,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListServicesResponse); i { + switch v := v.(*SelfCheckRequest); i { case 0: return &v.state case 1: @@ -5329,7 +5555,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Service); i { + switch v := v.(*SelfCheckResponse); i { case 0: return &v.state case 1: @@ -5341,7 +5567,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListPodsRequest); i { + switch v := v.(*ListServicesRequest); i { case 0: return &v.state case 1: @@ -5353,7 +5579,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListPodsResponse); i { + switch v := v.(*ListServicesResponse); i { case 0: return &v.state case 1: @@ -5365,7 +5591,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Pod); i { + switch v := v.(*Service); i { case 0: return &v.state case 1: @@ -5377,7 +5603,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TapRequest); i { + switch v := v.(*ListPodsRequest); i { case 0: return &v.state case 1: @@ -5389,7 +5615,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TapByResourceRequest); i { + switch v := v.(*ListPodsResponse); i { case 0: return &v.state case 1: @@ -5401,7 +5627,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HttpMethod); i { + switch v := v.(*Pod); i { case 0: return &v.state case 1: @@ -5413,7 +5639,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Scheme); i { + switch v := v.(*TapRequest); i { case 0: return &v.state case 1: @@ -5425,7 +5651,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Headers); i { + switch v := v.(*TapByResourceRequest); i { case 0: return &v.state case 1: @@ -5437,7 +5663,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Eos); i { + switch v := v.(*HttpMethod); i { case 0: return &v.state case 1: @@ -5449,7 +5675,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TapEvent); i { + switch v := v.(*Scheme); i { case 0: return &v.state case 1: @@ -5461,7 +5687,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApiError); i { + switch v := v.(*Headers); i { case 0: return &v.state case 1: @@ -5473,7 +5699,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PodErrors); i { + switch v := v.(*Eos); i { case 0: return &v.state case 1: @@ -5485,7 +5711,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Resource); i { + switch v := v.(*TapEvent); i { case 0: return &v.state case 1: @@ -5497,7 +5723,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResourceSelection); i { + switch v := v.(*ApiError); i { case 0: return &v.state case 1: @@ -5509,7 +5735,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResourceError); i { + switch v := v.(*PodErrors); i { case 0: return &v.state case 1: @@ -5521,7 +5747,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatSummaryRequest); i { + switch v := v.(*Resource); i { case 0: return &v.state case 1: @@ -5533,7 +5759,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatSummaryResponse); i { + switch v := v.(*ResourceSelection); i { case 0: return &v.state case 1: @@ -5545,7 +5771,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BasicStats); i { + switch v := v.(*ResourceError); i { case 0: return &v.state case 1: @@ -5557,7 +5783,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TcpStats); i { + switch v := v.(*StatSummaryRequest); i { case 0: return &v.state case 1: @@ -5569,7 +5795,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TrafficSplitStats); i { + switch v := v.(*StatSummaryResponse); i { case 0: return &v.state case 1: @@ -5581,7 +5807,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatTable); i { + switch v := v.(*BasicStats); i { case 0: return &v.state case 1: @@ -5593,7 +5819,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EdgesRequest); i { + switch v := v.(*TcpStats); i { case 0: return &v.state case 1: @@ -5605,7 +5831,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EdgesResponse); i { + switch v := v.(*TrafficSplitStats); i { case 0: return &v.state case 1: @@ -5617,7 +5843,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Edge); i { + switch v := v.(*StatTable); i { case 0: return &v.state case 1: @@ -5629,7 +5855,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TopRoutesRequest); i { + switch v := v.(*EdgesRequest); i { case 0: return &v.state case 1: @@ -5641,7 +5867,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TopRoutesResponse); i { + switch v := v.(*EdgesResponse); i { case 0: return &v.state case 1: @@ -5653,7 +5879,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RouteTable); i { + switch v := v.(*Edge); i { case 0: return &v.state case 1: @@ -5665,7 +5891,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GatewaysTable); i { + switch v := v.(*TopRoutesRequest); i { case 0: return &v.state case 1: @@ -5677,7 +5903,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GatewaysRequest); i { + switch v := v.(*TopRoutesResponse); i { case 0: return &v.state case 1: @@ -5689,7 +5915,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GatewaysResponse); i { + switch v := v.(*RouteTable); i { case 0: return &v.state case 1: @@ -5701,7 +5927,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TapByResourceRequest_Match); i { + switch v := v.(*GatewaysTable); i { case 0: return &v.state case 1: @@ -5713,7 +5939,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TapByResourceRequest_Extract); i { + switch v := v.(*GatewaysRequest); i { case 0: return &v.state case 1: @@ -5725,7 +5951,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TapByResourceRequest_Match_Seq); i { + switch v := v.(*GatewaysResponse); i { case 0: return &v.state case 1: @@ -5737,7 +5963,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TapByResourceRequest_Match_Http); i { + switch v := v.(*TapByResourceRequest_Match); i { case 0: return &v.state case 1: @@ -5749,7 +5975,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TapByResourceRequest_Extract_Http); i { + switch v := v.(*TapByResourceRequest_Extract); i { case 0: return &v.state case 1: @@ -5761,7 +5987,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TapByResourceRequest_Extract_Http_Headers); i { + switch v := v.(*TapByResourceRequest_Match_Seq); i { case 0: return &v.state case 1: @@ -5773,7 +5999,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Headers_Header); i { + switch v := v.(*TapByResourceRequest_Match_Http); i { case 0: return &v.state case 1: @@ -5785,7 +6011,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TapEvent_EndpointMeta); i { + switch v := v.(*TapByResourceRequest_Extract_Http); i { case 0: return &v.state case 1: @@ -5797,7 +6023,7 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TapEvent_RouteMeta); i { + switch v := v.(*TapByResourceRequest_Extract_Http_Headers); i { case 0: return &v.state case 1: @@ -5809,7 +6035,31 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TapEvent_Http); i { + switch v := v.(*Headers_Header); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_viz_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TapEvent_EndpointMeta); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_viz_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TapEvent_RouteMeta); i { case 0: return &v.state case 1: @@ -5821,6 +6071,18 @@ func file_viz_proto_init() { } } file_viz_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TapEvent_Http); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_viz_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TapEvent_Http_StreamId); i { case 0: return &v.state @@ -5832,7 +6094,7 @@ func file_viz_proto_init() { return nil } } - file_viz_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_viz_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TapEvent_Http_RequestInit); i { case 0: return &v.state @@ -5844,7 +6106,7 @@ func file_viz_proto_init() { return nil } } - file_viz_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_viz_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TapEvent_Http_ResponseInit); i { case 0: return &v.state @@ -5856,7 +6118,7 @@ func file_viz_proto_init() { return nil } } - file_viz_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_viz_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TapEvent_Http_ResponseEnd); i { case 0: return &v.state @@ -5868,7 +6130,7 @@ func file_viz_proto_init() { return nil } } - file_viz_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_viz_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PodErrors_PodError); i { case 0: return &v.state @@ -5880,7 +6142,7 @@ func file_viz_proto_init() { return nil } } - file_viz_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_viz_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PodErrors_PodError_ContainerError); i { case 0: return &v.state @@ -5892,7 +6154,7 @@ func file_viz_proto_init() { return nil } } - file_viz_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_viz_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatSummaryResponse_Ok); i { case 0: return &v.state @@ -5904,7 +6166,7 @@ func file_viz_proto_init() { return nil } } - file_viz_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_viz_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatTable_PodGroup); i { case 0: return &v.state @@ -5916,7 +6178,7 @@ func file_viz_proto_init() { return nil } } - file_viz_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_viz_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatTable_PodGroup_Row); i { case 0: return &v.state @@ -5928,7 +6190,7 @@ func file_viz_proto_init() { return nil } } - file_viz_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_viz_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EdgesResponse_Ok); i { case 0: return &v.state @@ -5940,7 +6202,7 @@ func file_viz_proto_init() { return nil } } - file_viz_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + file_viz_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TopRoutesResponse_Ok); i { case 0: return &v.state @@ -5952,7 +6214,7 @@ func file_viz_proto_init() { return nil } } - file_viz_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + file_viz_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RouteTable_Row); i { case 0: return &v.state @@ -5964,7 +6226,7 @@ func file_viz_proto_init() { return nil } } - file_viz_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + file_viz_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GatewaysTable_Row); i { case 0: return &v.state @@ -5976,7 +6238,7 @@ func file_viz_proto_init() { return nil } } - file_viz_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + file_viz_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GatewaysResponse_Ok); i { case 0: return &v.state @@ -5989,7 +6251,7 @@ func file_viz_proto_init() { } } } - file_viz_proto_msgTypes[6].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[9].OneofWrappers = []interface{}{ (*Pod_Deployment)(nil), (*Pod_ReplicaSet)(nil), (*Pod_ReplicationController)(nil), @@ -5997,82 +6259,82 @@ func file_viz_proto_init() { (*Pod_DaemonSet)(nil), (*Pod_Job)(nil), } - file_viz_proto_msgTypes[7].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[10].OneofWrappers = []interface{}{ (*TapRequest_Pod)(nil), (*TapRequest_Deployment)(nil), } - file_viz_proto_msgTypes[9].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[12].OneofWrappers = []interface{}{ (*HttpMethod_Registered_)(nil), (*HttpMethod_Unregistered)(nil), } - file_viz_proto_msgTypes[10].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[13].OneofWrappers = []interface{}{ (*Scheme_Registered_)(nil), (*Scheme_Unregistered)(nil), } - file_viz_proto_msgTypes[12].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[15].OneofWrappers = []interface{}{ (*Eos_GrpcStatusCode)(nil), (*Eos_ResetErrorCode)(nil), } - file_viz_proto_msgTypes[13].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[16].OneofWrappers = []interface{}{ (*TapEvent_Http_)(nil), } - file_viz_proto_msgTypes[19].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[22].OneofWrappers = []interface{}{ (*StatSummaryRequest_None)(nil), (*StatSummaryRequest_ToResource)(nil), (*StatSummaryRequest_FromResource)(nil), } - file_viz_proto_msgTypes[20].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[23].OneofWrappers = []interface{}{ (*StatSummaryResponse_Ok_)(nil), (*StatSummaryResponse_Error)(nil), } - file_viz_proto_msgTypes[24].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[27].OneofWrappers = []interface{}{ (*StatTable_PodGroup_)(nil), } - file_viz_proto_msgTypes[26].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[29].OneofWrappers = []interface{}{ (*EdgesResponse_Ok_)(nil), (*EdgesResponse_Error)(nil), } - file_viz_proto_msgTypes[28].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[31].OneofWrappers = []interface{}{ (*TopRoutesRequest_None)(nil), (*TopRoutesRequest_ToResource)(nil), } - file_viz_proto_msgTypes[29].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[32].OneofWrappers = []interface{}{ (*TopRoutesResponse_Error)(nil), (*TopRoutesResponse_Ok_)(nil), } - file_viz_proto_msgTypes[33].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[36].OneofWrappers = []interface{}{ (*GatewaysResponse_Ok_)(nil), (*GatewaysResponse_Error)(nil), } - file_viz_proto_msgTypes[34].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[37].OneofWrappers = []interface{}{ (*TapByResourceRequest_Match_All)(nil), (*TapByResourceRequest_Match_Any)(nil), (*TapByResourceRequest_Match_Not)(nil), (*TapByResourceRequest_Match_Destinations)(nil), (*TapByResourceRequest_Match_Http_)(nil), } - file_viz_proto_msgTypes[35].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[38].OneofWrappers = []interface{}{ (*TapByResourceRequest_Extract_Http_)(nil), } - file_viz_proto_msgTypes[37].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[40].OneofWrappers = []interface{}{ (*TapByResourceRequest_Match_Http_Scheme)(nil), (*TapByResourceRequest_Match_Http_Method)(nil), (*TapByResourceRequest_Match_Http_Authority)(nil), (*TapByResourceRequest_Match_Http_Path)(nil), } - file_viz_proto_msgTypes[38].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[41].OneofWrappers = []interface{}{ (*TapByResourceRequest_Extract_Http_Headers_)(nil), } - file_viz_proto_msgTypes[40].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[43].OneofWrappers = []interface{}{ (*Headers_Header_ValueStr)(nil), (*Headers_Header_ValueBin)(nil), } - file_viz_proto_msgTypes[43].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[46].OneofWrappers = []interface{}{ (*TapEvent_Http_RequestInit_)(nil), (*TapEvent_Http_ResponseInit_)(nil), (*TapEvent_Http_ResponseEnd_)(nil), } - file_viz_proto_msgTypes[50].OneofWrappers = []interface{}{ + file_viz_proto_msgTypes[53].OneofWrappers = []interface{}{ (*PodErrors_PodError_Container)(nil), } type x struct{} @@ -6080,8 +6342,8 @@ func file_viz_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_viz_proto_rawDesc, - NumEnums: 3, - NumMessages: 61, + NumEnums: 4, + NumMessages: 64, NumExtensions: 0, NumServices: 2, }, @@ -6114,7 +6376,7 @@ type ApiClient interface { TopRoutes(ctx context.Context, in *TopRoutesRequest, opts ...grpc.CallOption) (*TopRoutesResponse, error) ListPods(ctx context.Context, in *ListPodsRequest, opts ...grpc.CallOption) (*ListPodsResponse, error) ListServices(ctx context.Context, in *ListServicesRequest, opts ...grpc.CallOption) (*ListServicesResponse, error) - SelfCheck(ctx context.Context, in *healthcheck.SelfCheckRequest, opts ...grpc.CallOption) (*healthcheck.SelfCheckResponse, error) + SelfCheck(ctx context.Context, in *SelfCheckRequest, opts ...grpc.CallOption) (*SelfCheckResponse, error) } type apiClient struct { @@ -6179,8 +6441,8 @@ func (c *apiClient) ListServices(ctx context.Context, in *ListServicesRequest, o return out, nil } -func (c *apiClient) SelfCheck(ctx context.Context, in *healthcheck.SelfCheckRequest, opts ...grpc.CallOption) (*healthcheck.SelfCheckResponse, error) { - out := new(healthcheck.SelfCheckResponse) +func (c *apiClient) SelfCheck(ctx context.Context, in *SelfCheckRequest, opts ...grpc.CallOption) (*SelfCheckResponse, error) { + out := new(SelfCheckResponse) err := c.cc.Invoke(ctx, "/linkerd2.viz.Api/SelfCheck", in, out, opts...) if err != nil { return nil, err @@ -6196,7 +6458,7 @@ type ApiServer interface { TopRoutes(context.Context, *TopRoutesRequest) (*TopRoutesResponse, error) ListPods(context.Context, *ListPodsRequest) (*ListPodsResponse, error) ListServices(context.Context, *ListServicesRequest) (*ListServicesResponse, error) - SelfCheck(context.Context, *healthcheck.SelfCheckRequest) (*healthcheck.SelfCheckResponse, error) + SelfCheck(context.Context, *SelfCheckRequest) (*SelfCheckResponse, error) } // UnimplementedApiServer can be embedded to have forward compatible implementations. @@ -6221,7 +6483,7 @@ func (*UnimplementedApiServer) ListPods(context.Context, *ListPodsRequest) (*Lis func (*UnimplementedApiServer) ListServices(context.Context, *ListServicesRequest) (*ListServicesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListServices not implemented") } -func (*UnimplementedApiServer) SelfCheck(context.Context, *healthcheck.SelfCheckRequest) (*healthcheck.SelfCheckResponse, error) { +func (*UnimplementedApiServer) SelfCheck(context.Context, *SelfCheckRequest) (*SelfCheckResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SelfCheck not implemented") } @@ -6338,7 +6600,7 @@ func _Api_ListServices_Handler(srv interface{}, ctx context.Context, dec func(in } func _Api_SelfCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(healthcheck.SelfCheckRequest) + in := new(SelfCheckRequest) if err := dec(in); err != nil { return nil, err } @@ -6350,7 +6612,7 @@ func _Api_SelfCheck_Handler(srv interface{}, ctx context.Context, dec func(inter FullMethod: "/linkerd2.viz.Api/SelfCheck", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ApiServer).SelfCheck(ctx, req.(*healthcheck.SelfCheckRequest)) + return srv.(ApiServer).SelfCheck(ctx, req.(*SelfCheckRequest)) } return interceptor(ctx, in, info, handler) } diff --git a/viz/metrics-api/grpc_server.go b/viz/metrics-api/grpc_server.go index 82d597e3f511d..62985a8d21ec6 100644 --- a/viz/metrics-api/grpc_server.go +++ b/viz/metrics-api/grpc_server.go @@ -7,7 +7,6 @@ import ( "time" "github.com/golang/protobuf/ptypes/duration" - healthcheckPb "github.com/linkerd/linkerd2/controller/gen/common/healthcheck" "github.com/linkerd/linkerd2/controller/k8s" pkgK8s "github.com/linkerd/linkerd2/pkg/k8s" "github.com/linkerd/linkerd2/pkg/prometheus" @@ -175,33 +174,33 @@ func (s *grpcServer) ListPods(ctx context.Context, req *pb.ListPodsRequest) (*pb return &rsp, nil } -func (s *grpcServer) SelfCheck(ctx context.Context, in *healthcheckPb.SelfCheckRequest) (*healthcheckPb.SelfCheckResponse, error) { - k8sClientCheck := &healthcheckPb.CheckResult{ +func (s *grpcServer) SelfCheck(ctx context.Context, in *pb.SelfCheckRequest) (*pb.SelfCheckResponse, error) { + k8sClientCheck := &pb.CheckResult{ SubsystemName: k8sClientSubsystemName, CheckDescription: k8sClientCheckDescription, - Status: healthcheckPb.CheckStatus_OK, + Status: pb.CheckStatus_OK, } _, err := s.k8sAPI.Pod().Lister().List(labels.Everything()) if err != nil { - k8sClientCheck.Status = healthcheckPb.CheckStatus_ERROR + k8sClientCheck.Status = pb.CheckStatus_ERROR k8sClientCheck.FriendlyMessageToUser = fmt.Sprintf("Error calling the Kubernetes API: %s", err) } - response := &healthcheckPb.SelfCheckResponse{ - Results: []*healthcheckPb.CheckResult{ + response := &pb.SelfCheckResponse{ + Results: []*pb.CheckResult{ k8sClientCheck, }, } if s.prometheusAPI != nil { - promClientCheck := &healthcheckPb.CheckResult{ + promClientCheck := &pb.CheckResult{ SubsystemName: promClientSubsystemName, CheckDescription: promClientCheckDescription, - Status: healthcheckPb.CheckStatus_OK, + Status: pb.CheckStatus_OK, } _, err = s.queryProm(ctx, fmt.Sprintf(podQuery, "")) if err != nil { - promClientCheck.Status = healthcheckPb.CheckStatus_ERROR + promClientCheck.Status = pb.CheckStatus_ERROR promClientCheck.FriendlyMessageToUser = fmt.Sprintf("Error calling Prometheus from the control plane: %s", err) } diff --git a/viz/metrics-api/http_server.go b/viz/metrics-api/http_server.go index 93bf4394d2a5e..d098c5e8132fb 100644 --- a/viz/metrics-api/http_server.go +++ b/viz/metrics-api/http_server.go @@ -4,7 +4,6 @@ import ( "fmt" "net/http" - healthcheckPb "github.com/linkerd/linkerd2/controller/gen/common/healthcheck" "github.com/linkerd/linkerd2/controller/k8s" "github.com/linkerd/linkerd2/pkg/prometheus" "github.com/linkerd/linkerd2/pkg/protohttp" @@ -146,7 +145,7 @@ func (h *handler) handleTopRoutes(w http.ResponseWriter, req *http.Request) { } func (h *handler) handleSelfCheck(w http.ResponseWriter, req *http.Request) { - var protoRequest healthcheckPb.SelfCheckRequest + var protoRequest pb.SelfCheckRequest err := protohttp.HTTPRequestToProto(req, &protoRequest) if err != nil { protohttp.WriteErrorToHTTPResponse(w, err) diff --git a/viz/metrics-api/http_server_test.go b/viz/metrics-api/http_server_test.go index b7460f070996c..d05bf279b3087 100644 --- a/viz/metrics-api/http_server_test.go +++ b/viz/metrics-api/http_server_test.go @@ -8,7 +8,6 @@ import ( "testing" "github.com/golang/protobuf/proto" - healthcheckPb "github.com/linkerd/linkerd2/controller/gen/common/healthcheck" vizClient "github.com/linkerd/linkerd2/viz/metrics-api/client" pb "github.com/linkerd/linkerd2/viz/metrics-api/gen/viz" ) @@ -53,9 +52,9 @@ func (m *mockGrpcServer) ListServices(ctx context.Context, req *pb.ListServicesR return m.ResponseToReturn.(*pb.ListServicesResponse), m.ErrorToReturn } -func (m *mockGrpcServer) SelfCheck(ctx context.Context, req *healthcheckPb.SelfCheckRequest) (*healthcheckPb.SelfCheckResponse, error) { +func (m *mockGrpcServer) SelfCheck(ctx context.Context, req *pb.SelfCheckRequest) (*pb.SelfCheckResponse, error) { m.LastRequestReceived = req - return m.ResponseToReturn.(*healthcheckPb.SelfCheckResponse), m.ErrorToReturn + return m.ResponseToReturn.(*pb.SelfCheckResponse), m.ErrorToReturn } type grpcCallTestCase struct { diff --git a/viz/metrics-api/proto/viz.proto b/viz/metrics-api/proto/viz.proto index b44d1e04ad0a1..83baa6b765926 100644 --- a/viz/metrics-api/proto/viz.proto +++ b/viz/metrics-api/proto/viz.proto @@ -3,13 +3,31 @@ syntax = "proto3"; package linkerd2.viz; import "google/protobuf/duration.proto"; -import "common/healthcheck.proto"; import "common/net.proto"; option go_package = "github.com/linkerd/linkerd2/viz/metrics-api/gen/viz"; message Empty {} +enum CheckStatus { + OK = 0; + FAIL = 1; + ERROR = 2; +} + +message CheckResult { + string SubsystemName = 1; + string CheckDescription = 2; + CheckStatus Status = 3; + string FriendlyMessageToUser = 4; +} + +message SelfCheckRequest {} + +message SelfCheckResponse { + repeated CheckResult results = 1; +} + message ListServicesRequest { string namespace = 1; } @@ -504,7 +522,7 @@ service Api { rpc ListServices(ListServicesRequest) returns (ListServicesResponse) {} - rpc SelfCheck(linkerd2.common.healthcheck.SelfCheckRequest) returns (linkerd2.common.healthcheck.SelfCheckResponse) {} + rpc SelfCheck(SelfCheckRequest) returns (SelfCheckResponse) {} } diff --git a/viz/metrics-api/test_helper.go b/viz/metrics-api/test_helper.go index 5eaee8dad460a..ff26521bce1ad 100644 --- a/viz/metrics-api/test_helper.go +++ b/viz/metrics-api/test_helper.go @@ -8,7 +8,6 @@ import ( "sync" "time" - healthcheckPb "github.com/linkerd/linkerd2/controller/gen/common/healthcheck" "github.com/linkerd/linkerd2/controller/k8s" pb "github.com/linkerd/linkerd2/viz/metrics-api/gen/viz" promv1 "github.com/prometheus/client_golang/api/prometheus/v1" @@ -25,7 +24,7 @@ type MockAPIClient struct { GatewaysResponseToReturn *pb.GatewaysResponse TopRoutesResponseToReturn *pb.TopRoutesResponse EdgesResponseToReturn *pb.EdgesResponse - SelfCheckResponseToReturn *healthcheckPb.SelfCheckResponse + SelfCheckResponseToReturn *pb.SelfCheckResponse } // StatSummary provides a mock of a Public API method. @@ -59,7 +58,7 @@ func (c *MockAPIClient) ListServices(ctx context.Context, in *pb.ListServicesReq } // SelfCheck provides a mock of a Public API method. -func (c *MockAPIClient) SelfCheck(ctx context.Context, in *healthcheckPb.SelfCheckRequest, _ ...grpc.CallOption) (*healthcheckPb.SelfCheckResponse, error) { +func (c *MockAPIClient) SelfCheck(ctx context.Context, in *pb.SelfCheckRequest, _ ...grpc.CallOption) (*pb.SelfCheckResponse, error) { return c.SelfCheckResponseToReturn, c.ErrorToReturn } diff --git a/viz/pkg/healthcheck/healthcheck.go b/viz/pkg/healthcheck/healthcheck.go index 1ad001a562510..e2020a80c5a06 100644 --- a/viz/pkg/healthcheck/healthcheck.go +++ b/viz/pkg/healthcheck/healthcheck.go @@ -3,10 +3,10 @@ package healthcheck import ( "context" "crypto/x509" + "errors" "fmt" "strings" - healthcheckPb "github.com/linkerd/linkerd2/controller/gen/common/healthcheck" "github.com/linkerd/linkerd2/pkg/healthcheck" "github.com/linkerd/linkerd2/pkg/k8s" "github.com/linkerd/linkerd2/pkg/tls" @@ -233,8 +233,28 @@ func (hc *HealthChecker) VizCategory() healthcheck.Category { // "waiting for check to complete" while things converge. If after the timeout // it still hasn't converged, we show the real error (a 503 usually). WithRetryDeadline(hc.RetryDeadline). - WithCheckRPC(func(ctx context.Context) (*healthcheckPb.SelfCheckResponse, error) { - return hc.vizAPIClient.SelfCheck(ctx, &healthcheckPb.SelfCheckRequest{}) + WithCheck(func(ctx context.Context) error { + results, err := hc.vizAPIClient.SelfCheck(ctx, &pb.SelfCheckRequest{}) + if err != nil { + return err + } + + if len(results.GetResults()) == 0 { + return errors.New("No results returned") + } + + errs := []string{} + for _, res := range results.GetResults() { + if res.GetStatus() != pb.CheckStatus_OK { + errs = append(errs, res.GetFriendlyMessageToUser()) + } + } + if len(errs) == 0 { + return nil + } + + errsStr := strings.Join(errs, "\n ") + return errors.New(errsStr) }), }, true) }