diff --git a/plugin/gcp/metrics.go b/plugin/gcp/metrics.go index 911c203..ac07ddc 100644 --- a/plugin/gcp/metrics.go +++ b/plugin/gcp/metrics.go @@ -3,8 +3,9 @@ package gcp import ( "context" "fmt" - "github.com/kaytu-io/plugin-gcp/plugin/kaytu" + golang2 "github.com/kaytu-io/plugin-gcp/plugin/proto/src/golang" "google.golang.org/api/iterator" + "google.golang.org/protobuf/types/known/wrapperspb" monitoring "cloud.google.com/go/monitoring/apiv3/v2" "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb" @@ -59,8 +60,8 @@ func (c *CloudMonitoring) NewTimeSeriesRequest( } -func (c *CloudMonitoring) GetMetric(request *monitoringpb.ListTimeSeriesRequest) ([]kaytu.Datapoint, error) { - var dps []kaytu.Datapoint +func (c *CloudMonitoring) GetMetric(request *monitoringpb.ListTimeSeriesRequest) ([]*golang2.DataPoint, error) { + var dps []*golang2.DataPoint it := c.client.ListTimeSeries(context.Background(), request) for { @@ -80,13 +81,13 @@ func (c *CloudMonitoring) GetMetric(request *monitoringpb.ListTimeSeriesRequest) } -func convertDatapoints(resp *monitoringpb.TimeSeries) []kaytu.Datapoint { - var dps []kaytu.Datapoint +func convertDatapoints(resp *monitoringpb.TimeSeries) []*golang2.DataPoint { + var dps []*golang2.DataPoint for _, dp := range resp.GetPoints() { - dps = append(dps, kaytu.Datapoint{ + dps = append(dps, &golang2.DataPoint{ Value: dp.GetValue().GetDoubleValue(), - StartTime: dp.GetInterval().GetStartTime().AsTime(), - EndTime: dp.GetInterval().GetEndTime().AsTime(), + StartTime: wrapperspb.Int64(dp.GetInterval().GetStartTime().GetSeconds()), + EndTime: wrapperspb.Int64(dp.GetInterval().GetEndTime().GetSeconds()), }) } return dps diff --git a/plugin/processor/compute_instance/compute_instance.go b/plugin/processor/compute_instance/compute_instance.go index 1b3740f..0453923 100644 --- a/plugin/processor/compute_instance/compute_instance.go +++ b/plugin/processor/compute_instance/compute_instance.go @@ -2,16 +2,16 @@ package compute_instance import ( "fmt" + "github.com/kaytu-io/kaytu/pkg/plugin/proto/src/golang" + "github.com/kaytu-io/kaytu/pkg/plugin/sdk" "github.com/kaytu-io/kaytu/pkg/style" "github.com/kaytu-io/kaytu/pkg/utils" + "github.com/kaytu-io/plugin-gcp/plugin/gcp" + golang2 "github.com/kaytu-io/plugin-gcp/plugin/proto/src/golang" + util "github.com/kaytu-io/plugin-gcp/utils" "strconv" "strings" "sync/atomic" - - "github.com/kaytu-io/kaytu/pkg/plugin/proto/src/golang" - "github.com/kaytu-io/kaytu/pkg/plugin/sdk" - "github.com/kaytu-io/plugin-gcp/plugin/gcp" - util "github.com/kaytu-io/plugin-gcp/utils" ) type ComputeInstanceProcessor struct { @@ -23,6 +23,7 @@ type ComputeInstanceProcessor struct { kaytuAcccessToken string jobQueue *sdk.JobQueue lazyloadCounter atomic.Uint32 + client golang2.OptimizationClient summary util.ConcurrentMap[string, ComputeInstanceSummary] } @@ -34,6 +35,7 @@ func NewComputeInstanceProcessor( publishResultSummary func(summary *golang.ResultSummary), kaytuAcccessToken string, jobQueue *sdk.JobQueue, + client golang2.OptimizationClient, ) *ComputeInstanceProcessor { r := &ComputeInstanceProcessor{ provider: prv, @@ -44,6 +46,7 @@ func NewComputeInstanceProcessor( kaytuAcccessToken: kaytuAcccessToken, jobQueue: jobQueue, lazyloadCounter: atomic.Uint32{}, + client: client, } jobQueue.Push(NewListComputeInstancesJob(r)) diff --git a/plugin/processor/compute_instance/compute_instance_item.go b/plugin/processor/compute_instance/compute_instance_item.go index 6b13b44..537cbc9 100644 --- a/plugin/processor/compute_instance/compute_instance_item.go +++ b/plugin/processor/compute_instance/compute_instance_item.go @@ -5,7 +5,7 @@ import ( "fmt" "github.com/kaytu-io/kaytu/pkg/plugin/proto/src/golang" "github.com/kaytu-io/kaytu/pkg/utils" - "github.com/kaytu-io/plugin-gcp/plugin/kaytu" + golang2 "github.com/kaytu-io/plugin-gcp/plugin/proto/src/golang" "google.golang.org/api/compute/v1" "google.golang.org/protobuf/types/known/wrapperspb" "maps" @@ -26,9 +26,9 @@ type ComputeInstanceItem struct { SkipReason string Instance *computepb.Instance Disks []compute.Disk - Metrics map[string][]kaytu.Datapoint - DisksMetrics map[string]map[string][]kaytu.Datapoint - Wastage kaytu.GcpComputeInstanceWastageResponse + Metrics map[string][]*golang2.DataPoint + DisksMetrics map[string]map[string][]*golang2.DataPoint + Wastage golang2.GCPComputeOptimizationResponse } func (i ComputeInstanceItem) ComputeInstanceDevice() (*golang.ChartRow, map[string]*golang.Properties) { @@ -49,34 +49,34 @@ func (i ComputeInstanceItem) ComputeInstanceDevice() (*golang.ChartRow, map[stri } row.Values["current_cost"] = &golang.ChartRowItem{ - Value: utils.FormatPriceFloat(i.Wastage.RightSizing.Current.Cost), + Value: utils.FormatPriceFloat(i.Wastage.Rightsizing.Current.Cost), } RegionProperty := &golang.Property{ Key: "Region", - Current: i.Wastage.RightSizing.Current.Region, + Current: i.Wastage.Rightsizing.Current.Region, } MachineTypeProperty := &golang.Property{ Key: "Machine Type", - Current: i.Wastage.RightSizing.Current.MachineType, + Current: i.Wastage.Rightsizing.Current.MachineType, } MachineFamilyProperty := &golang.Property{ Key: "Machine Family", - Current: i.Wastage.RightSizing.Current.MachineFamily, + Current: i.Wastage.Rightsizing.Current.MachineFamily, } CPUProperty := &golang.Property{ Key: " CPU", - Current: fmt.Sprintf("%d", i.Wastage.RightSizing.Current.CPU), - Average: utils.Percentage(i.Wastage.RightSizing.CPU.Avg), - Max: utils.Percentage(i.Wastage.RightSizing.CPU.Max), + Current: fmt.Sprintf("%d", i.Wastage.Rightsizing.Current.Cpu), + Average: utils.Percentage(PWrapperDouble(i.Wastage.Rightsizing.Cpu.Avg)), + Max: utils.Percentage(PWrapperDouble(i.Wastage.Rightsizing.Cpu.Max)), } memoryProperty := &golang.Property{ Key: " MemoryMB", - Current: fmt.Sprintf("%d MB", i.Wastage.RightSizing.Current.MemoryMb), - Average: utils.Percentage(i.Wastage.RightSizing.Memory.Avg), - Max: utils.Percentage(i.Wastage.RightSizing.Memory.Max), + Current: fmt.Sprintf("%d MB", i.Wastage.Rightsizing.Current.MemoryMb), + Average: utils.Percentage(PWrapperDouble(i.Wastage.Rightsizing.Memory.Avg)), + Max: utils.Percentage(PWrapperDouble(i.Wastage.Rightsizing.Memory.Max)), } row.Values["project_id"] = &golang.ChartRowItem{ @@ -84,20 +84,20 @@ func (i ComputeInstanceItem) ComputeInstanceDevice() (*golang.ChartRow, map[stri } row.Values["current_cost"] = &golang.ChartRowItem{ - Value: utils.FormatPriceFloat(i.Wastage.RightSizing.Current.Cost), + Value: utils.FormatPriceFloat(i.Wastage.Rightsizing.Current.Cost), } - if i.Wastage.RightSizing.Recommended != nil { + if i.Wastage.Rightsizing.Recommended != nil { row.Values["right_sized_cost"] = &golang.ChartRowItem{ - Value: utils.FormatPriceFloat(i.Wastage.RightSizing.Recommended.Cost), + Value: utils.FormatPriceFloat(i.Wastage.Rightsizing.Recommended.Cost), } row.Values["savings"] = &golang.ChartRowItem{ - Value: utils.FormatPriceFloat(i.Wastage.RightSizing.Current.Cost - i.Wastage.RightSizing.Recommended.Cost), + Value: utils.FormatPriceFloat(i.Wastage.Rightsizing.Current.Cost - i.Wastage.Rightsizing.Recommended.Cost), } - RegionProperty.Recommended = i.Wastage.RightSizing.Recommended.Region - MachineTypeProperty.Recommended = i.Wastage.RightSizing.Recommended.MachineType - CPUProperty.Recommended = fmt.Sprintf("%d", i.Wastage.RightSizing.Recommended.CPU) - memoryProperty.Recommended = fmt.Sprintf("%d MB", i.Wastage.RightSizing.Recommended.MemoryMb) + RegionProperty.Recommended = i.Wastage.Rightsizing.Recommended.Region + MachineTypeProperty.Recommended = i.Wastage.Rightsizing.Recommended.MachineType + CPUProperty.Recommended = fmt.Sprintf("%d", i.Wastage.Rightsizing.Recommended.Cpu) + memoryProperty.Recommended = fmt.Sprintf("%d MB", i.Wastage.Rightsizing.Recommended.MemoryMb) } props := make(map[string]*golang.Properties) @@ -123,7 +123,7 @@ func (i ComputeInstanceItem) ComputeDiskDevice() ([]*golang.ChartRow, map[string for _, d := range i.Disks { key := strconv.FormatUint(d.Id, 10) - disk := i.Wastage.VolumeRightSizing[key] + disk := i.Wastage.VolumesRightsizing[key] row := golang.ChartRow{ RowId: key, @@ -164,26 +164,26 @@ func (i ComputeInstanceItem) ComputeDiskDevice() ([]*golang.ChartRow, map[string DiskReadIopsProperty := &golang.Property{ Key: " Read IOPS Expectation", Current: fmt.Sprintf("%d", disk.Current.ReadIopsLimit), - Average: utils.PFloat64ToString(disk.ReadIops.Avg), - Max: utils.PFloat64ToString(disk.ReadIops.Max), + Average: utils.PFloat64ToString(PWrapperDouble(disk.ReadIops.Avg)), + Max: utils.PFloat64ToString(PWrapperDouble(disk.ReadIops.Max)), } DiskWriteIopsProperty := &golang.Property{ Key: " Write IOPS Expectation", Current: fmt.Sprintf("%d", disk.Current.WriteIopsLimit), - Average: utils.PFloat64ToString(disk.WriteIops.Avg), - Max: utils.PFloat64ToString(disk.WriteIops.Max), + Average: utils.PFloat64ToString(PWrapperDouble(disk.WriteIops.Avg)), + Max: utils.PFloat64ToString(PWrapperDouble(disk.WriteIops.Max)), } DiskReadThroughputProperty := &golang.Property{ Key: " Read Throughput Expectation", Current: fmt.Sprintf("%.2f Mb", disk.Current.ReadThroughputLimit), - Average: fmt.Sprintf("%s Mb", utils.PFloat64ToString(disk.ReadThroughput.Avg)), - Max: fmt.Sprintf("%s Mb", utils.PFloat64ToString(disk.ReadThroughput.Max)), + Average: fmt.Sprintf("%s Mb", utils.PFloat64ToString(PWrapperDouble(disk.ReadThroughput.Avg))), + Max: fmt.Sprintf("%s Mb", utils.PFloat64ToString(PWrapperDouble(disk.ReadThroughput.Max))), } DiskWriteThroughputProperty := &golang.Property{ Key: " Write Throughput Expectation", Current: fmt.Sprintf("%.2f Mb", disk.Current.WriteThroughputLimit), - Average: fmt.Sprintf("%s Mb", utils.PFloat64ToString(disk.WriteThroughput.Avg)), - Max: fmt.Sprintf("%s Mb", utils.PFloat64ToString(disk.WriteThroughput.Max)), + Average: fmt.Sprintf("%s Mb", utils.PFloat64ToString(PWrapperDouble(disk.WriteThroughput.Avg))), + Max: fmt.Sprintf("%s Mb", utils.PFloat64ToString(PWrapperDouble(disk.WriteThroughput.Max))), } if disk.Recommended != nil { @@ -252,12 +252,12 @@ func (i ComputeInstanceItem) ToOptimizationItem() *golang.ChartOptimizationItem status = "press enter to load" } else if i.OptimizationLoading { status = "loading" - } else if i.Wastage.RightSizing.Recommended != nil { + } else if i.Wastage.Rightsizing.Recommended != nil { totalSaving := 0.0 totalCurrentCost := 0.0 - totalSaving += i.Wastage.RightSizing.Current.Cost - i.Wastage.RightSizing.Recommended.Cost - totalCurrentCost += i.Wastage.RightSizing.Current.Cost - for _, d := range i.Wastage.VolumeRightSizing { + totalSaving += i.Wastage.Rightsizing.Current.Cost - i.Wastage.Rightsizing.Recommended.Cost + totalCurrentCost += i.Wastage.Rightsizing.Current.Cost + for _, d := range i.Wastage.VolumesRightsizing { totalSaving += d.Current.Cost - d.Recommended.Cost totalCurrentCost += d.Current.Cost } @@ -296,7 +296,7 @@ func (i ComputeInstanceItem) ToOptimizationItem() *golang.ChartOptimizationItem DevicesChartRows: deviceRows, DevicesProperties: deviceProps, Preferences: i.Preferences, - Description: i.Wastage.RightSizing.Description, + Description: i.Wastage.Rightsizing.Description, Loading: i.OptimizationLoading, Skipped: i.Skipped, SkipReason: wrapperspb.String(i.SkipReason), @@ -305,3 +305,11 @@ func (i ComputeInstanceItem) ToOptimizationItem() *golang.ChartOptimizationItem return coi } + +func PWrapperDouble(v *wrapperspb.DoubleValue) *float64 { + if v == nil { + return nil + } + value := v.GetValue() + return &value +} diff --git a/plugin/processor/compute_instance/job_get_compute_instance_metrics.go b/plugin/processor/compute_instance/job_get_compute_instance_metrics.go index 89aed6a..e764fa5 100644 --- a/plugin/processor/compute_instance/job_get_compute_instance_metrics.go +++ b/plugin/processor/compute_instance/job_get_compute_instance_metrics.go @@ -3,13 +3,12 @@ package compute_instance import ( "context" "fmt" + golang2 "github.com/kaytu-io/plugin-gcp/plugin/proto/src/golang" "google.golang.org/api/compute/v1" "log" "strconv" "time" - "github.com/kaytu-io/plugin-gcp/plugin/kaytu" - "cloud.google.com/go/compute/apiv1/computepb" "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb" "github.com/kaytu-io/plugin-gcp/plugin/preferences" @@ -92,10 +91,10 @@ func (job *GetComputeInstanceMetricsJob) Run(ctx context.Context) error { return err } - disksMetrics := make(map[string]map[string][]kaytu.Datapoint) + disksMetrics := make(map[string]map[string][]*golang2.DataPoint) for _, disk := range job.disks { id := strconv.FormatUint(disk.Id, 10) - disksMetrics[id] = make(map[string][]kaytu.Datapoint) + disksMetrics[id] = make(map[string][]*golang2.DataPoint) diskReadIopsRequest := job.processor.metricProvider.NewTimeSeriesRequest( fmt.Sprintf( @@ -194,7 +193,7 @@ func (job *GetComputeInstanceMetricsJob) Run(ctx context.Context) error { disksMetrics[id]["DiskWriteThroughput"] = diskWriteThroughputMetrics } - instanceMetrics := make(map[string][]kaytu.Datapoint) + instanceMetrics := make(map[string][]*golang2.DataPoint) instanceMetrics["cpuUtilization"] = cpumetric instanceMetrics["memoryUtilization"] = memoryMetric diff --git a/plugin/processor/compute_instance/job_optimize_compute_instance.go b/plugin/processor/compute_instance/job_optimize_compute_instance.go index 8784747..54701fe 100644 --- a/plugin/processor/compute_instance/job_optimize_compute_instance.go +++ b/plugin/processor/compute_instance/job_optimize_compute_instance.go @@ -3,13 +3,16 @@ package compute_instance import ( "context" "fmt" + "github.com/kaytu-io/plugin-gcp/plugin/processor/shared" + golang2 "github.com/kaytu-io/plugin-gcp/plugin/proto/src/golang" + "google.golang.org/grpc/metadata" + "google.golang.org/protobuf/types/known/wrapperspb" "strconv" "strings" "github.com/google/uuid" "github.com/kaytu-io/kaytu/pkg/utils" "github.com/kaytu-io/kaytu/preferences" - "github.com/kaytu-io/plugin-gcp/plugin/kaytu" "github.com/kaytu-io/plugin-gcp/plugin/version" ) @@ -42,7 +45,7 @@ func (job *OptimizeComputeInstancesJob) Run(ctx context.Context) error { requestId := uuid.NewString() - var disks []kaytu.GcpComputeDisk + var disks []*golang2.GcpComputeDisk diskFilled := make(map[string]float64) for _, disk := range job.item.Disks { id := strconv.FormatUint(disk.Id, 10) @@ -53,35 +56,65 @@ func (job *OptimizeComputeInstancesJob) Run(ctx context.Context) error { diskZone := zoneURLParts[len(zoneURLParts)-1] region := strings.Join([]string{strings.Split(diskZone, "-")[0], strings.Split(diskZone, "-")[1]}, "-") - disks = append(disks, kaytu.GcpComputeDisk{ - HashedDiskId: id, - DiskSize: &disk.SizeGb, + disks = append(disks, &golang2.GcpComputeDisk{ + Id: id, + DiskSize: wrapperspb.Int64(disk.SizeGb), DiskType: diskType, Region: region, - ProvisionedIops: &disk.ProvisionedIops, + ProvisionedIops: wrapperspb.Int64(disk.ProvisionedIops), Zone: diskZone, }) diskFilled[id] = 0 } - request := kaytu.GcpComputeInstanceWastageRequest{ - RequestId: &requestId, - CliVersion: &version.VERSION, + preferencesMap := map[string]*wrapperspb.StringValue{} + for k, v := range preferences.Export(job.item.Preferences) { + preferencesMap[k] = nil + if v != nil { + preferencesMap[k] = wrapperspb.String(*v) + } + } + + grpcCtx := metadata.NewOutgoingContext(ctx, metadata.Pairs("workspace-name", "kaytu")) + grpcCtx, cancel := context.WithTimeout(grpcCtx, shared.GrpcOptimizeRequestTimeout) + defer cancel() + + metrics := make(map[string]*golang2.Metric) + for k, v := range job.item.Metrics { + metrics[k] = &golang2.Metric{ + Data: v, + } + } + + diskMetrics := make(map[string]*golang2.DiskMetrics) + for disk, m := range job.item.DisksMetrics { + diskM := make(map[string]*golang2.Metric) + for k, v := range m { + diskM[k] = &golang2.Metric{ + Data: v, + } + } + diskMetrics[disk] = &golang2.DiskMetrics{ + Metrics: diskM, + } + } + + response, err := job.processor.client.GCPComputeOptimization(ctx, &golang2.GCPComputeOptimizationRequest{ + RequestId: wrapperspb.String(requestId), + CliVersion: wrapperspb.String(version.VERSION), Identification: job.processor.provider.Identify(), - Instance: kaytu.GcpComputeInstance{ - HashedInstanceId: utils.HashString(job.item.Id), - Zone: job.item.Region, - MachineType: job.item.MachineType, + Instance: &golang2.GcpComputeInstance{ + Id: utils.HashString(job.item.Id), + Zone: job.item.Region, + MachineType: job.item.MachineType, }, Disks: disks, - Metrics: job.item.Metrics, - DisksMetrics: job.item.DisksMetrics, - Region: job.item.Region, - Preferences: preferences.Export(job.item.Preferences), + Preferences: preferencesMap, + Metrics: metrics, + DisksMetrics: diskMetrics, Loading: false, - } - - response, err := kaytu.Ec2InstanceWastageRequest(request, job.processor.kaytuAcccessToken) + Region: job.item.Region, + }) if err != nil { return err } diff --git a/plugin/processor/shared/consts.go b/plugin/processor/shared/consts.go new file mode 100644 index 0000000..2adacc8 --- /dev/null +++ b/plugin/processor/shared/consts.go @@ -0,0 +1,7 @@ +package shared + +import "time" + +const ( + GrpcOptimizeRequestTimeout = time.Minute * 10 +) diff --git a/plugin/proto/server.proto b/plugin/proto/server.proto index 9286212..42af0aa 100644 --- a/plugin/proto/server.proto +++ b/plugin/proto/server.proto @@ -1,7 +1,7 @@ syntax = "proto3"; -package pluginkubernetes.optimization.v1; -option go_package="github.com/kaytu-io/plugin-kubernetes-internal/plugin/proto/src/golang"; +package plugingcp.optimization.v1; +option go_package="github.com/kaytu-io/plugin-gcp/plugin/proto/src/golang"; import "google/protobuf/wrappers.proto"; // Requests diff --git a/plugin/proto/src/golang/server.pb.go b/plugin/proto/src/golang/server.pb.go index 42b6ccd..e7bd887 100644 --- a/plugin/proto/src/golang/server.pb.go +++ b/plugin/proto/src/golang/server.pb.go @@ -950,281 +950,268 @@ var File_plugin_proto_server_proto protoreflect.FileDescriptor var file_plugin_proto_server_proto_rawDesc = []byte{ 0x0a, 0x19, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x20, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x6f, 0x70, - 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x1e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5b, 0x0a, - 0x12, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xeb, 0x01, 0x0a, 0x0e, 0x47, - 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x73, - 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x69, - 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, - 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x64, 0x69, 0x73, 0x6b, 0x53, 0x69, 0x7a, 0x65, - 0x12, 0x46, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x5f, - 0x69, 0x6f, 0x70, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, - 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x65, 0x64, 0x49, 0x6f, 0x70, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x09, 0x44, 0x61, 0x74, - 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, - 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x49, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x3f, 0x0a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xc9, 0x01, 0x0a, 0x0b, - 0x44, 0x69, 0x73, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x54, 0x0a, 0x07, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x69, 0x73, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x1a, 0x64, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 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, 0x3e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, - 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xaf, 0x09, 0x0a, 0x1d, 0x47, 0x43, 0x50, 0x43, - 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x0a, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5b, 0x0a, 0x12, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, + 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x22, 0xeb, 0x01, 0x0a, 0x0e, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, + 0x74, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, + 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, + 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x69, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x38, 0x0a, 0x09, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x08, 0x64, 0x69, 0x73, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x46, 0x0a, 0x10, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x69, 0x6f, 0x70, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x49, 0x6f, 0x70, + 0x73, 0x22, 0x95, 0x01, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, + 0x3a, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x65, + 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x5f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x7b, 0x0a, 0x0e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x53, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x43, 0x50, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, - 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, - 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, - 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, - 0x65, 0x44, 0x69, 0x73, 0x6b, 0x52, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x12, 0x72, 0x0a, 0x0b, - 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x50, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, - 0x65, 0x74, 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x43, 0x50, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x4f, - 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0b, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x12, 0x66, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x4c, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, - 0x65, 0x74, 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x43, 0x50, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x4f, - 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x76, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x6b, - 0x73, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x51, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, - 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x43, 0x50, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, - 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x1a, 0x41, 0x0a, 0x13, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 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, 0x5c, 0x0a, 0x10, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 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, 0x32, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, + 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x42, 0x0a, 0x06, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x12, 0x38, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, + 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xbb, 0x01, + 0x0a, 0x0b, 0x44, 0x69, 0x73, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x4d, 0x0a, + 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, + 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x1a, 0x5d, 0x0a, 0x0c, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 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, 0x37, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf7, 0x08, 0x0a, 0x1d, + 0x47, 0x43, 0x50, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, + 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0b, 0x63, 0x6c, + 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x63, + 0x6c, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x74, 0x0a, 0x0e, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x4c, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x43, + 0x50, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x49, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x63, + 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x3f, 0x0a, 0x05, 0x64, 0x69, + 0x73, 0x6b, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, + 0x44, 0x69, 0x73, 0x6b, 0x52, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x12, 0x6b, 0x0a, 0x0b, 0x70, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x49, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, + 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x43, 0x50, + 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x70, 0x72, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x5f, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x43, 0x50, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, + 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x6f, 0x0a, 0x0d, 0x64, 0x69, 0x73, + 0x6b, 0x73, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x4a, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, + 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x43, 0x50, + 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x73, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x64, 0x69, + 0x73, 0x6b, 0x73, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x6f, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6c, 0x6f, 0x61, + 0x64, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x1a, 0x41, 0x0a, 0x13, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, - 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6e, 0x0a, 0x11, 0x44, 0x69, 0x73, - 0x6b, 0x73, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 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, 0x43, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2d, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, - 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x97, 0x01, 0x0a, 0x05, 0x55, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x03, 0x61, 0x76, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, - 0x61, 0x76, 0x67, 0x12, 0x2e, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, - 0x6d, 0x61, 0x78, 0x12, 0x2e, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, - 0x6d, 0x69, 0x6e, 0x22, 0xd1, 0x02, 0x0a, 0x19, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, - 0x69, 0x6e, 0x67, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, - 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, - 0x09, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x64, 0x69, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, - 0x73, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, - 0x69, 0x73, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x65, 0x61, 0x64, 0x5f, - 0x69, 0x6f, 0x70, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0d, 0x72, 0x65, 0x61, 0x64, 0x49, 0x6f, 0x70, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x28, 0x0a, 0x10, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x6f, 0x70, 0x73, 0x5f, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x49, 0x6f, 0x70, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x61, - 0x64, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x5f, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x13, 0x72, 0x65, 0x61, 0x64, 0x54, 0x68, - 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x34, 0x0a, - 0x16, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, - 0x74, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x14, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x22, 0xd8, 0x01, 0x0a, 0x1d, 0x52, 0x69, 0x67, 0x68, + 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, + 0x5c, 0x0a, 0x10, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 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, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, + 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 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, + 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x11, + 0x44, 0x69, 0x73, 0x6b, 0x73, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 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, 0x3c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x69, 0x73, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x97, 0x01, 0x0a, 0x05, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x2e, 0x0a, 0x03, 0x61, 0x76, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, + 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x61, 0x76, 0x67, 0x12, + 0x2e, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, + 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, + 0x2e, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, + 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x22, + 0xd1, 0x02, 0x0a, 0x19, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x47, + 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x12, 0x12, 0x0a, + 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x73, + 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x69, + 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x69, 0x73, 0x6b, 0x53, + 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x69, 0x6f, 0x70, 0x73, + 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x65, + 0x61, 0x64, 0x49, 0x6f, 0x70, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x6f, 0x70, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x49, 0x6f, 0x70, 0x73, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x68, + 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x13, 0x72, 0x65, 0x61, 0x64, 0x54, 0x68, 0x72, 0x6f, 0x75, 0x67, + 0x68, 0x70, 0x75, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x5f, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x14, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x54, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x63, + 0x6f, 0x73, 0x74, 0x22, 0xd8, 0x01, 0x0a, 0x1d, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, + 0x69, 0x6e, 0x67, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, + 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, + 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x63, + 0x70, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x1b, 0x0a, + 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x6d, 0x62, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x62, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x22, 0xed, + 0x02, 0x0a, 0x2b, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x52, + 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x38, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, - 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x63, 0x70, - 0x75, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x6d, 0x62, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x62, 0x12, 0x12, - 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x63, 0x6f, - 0x73, 0x74, 0x22, 0x89, 0x03, 0x0a, 0x2b, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, - 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, - 0x7a, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, - 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, - 0x6e, 0x67, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x61, 0x0a, - 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, - 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, 0x6e, - 0x67, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x64, - 0x12, 0x39, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x3f, 0x0a, 0x06, 0x6d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x6f, + 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x12, 0x5a, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x47, + 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x32, + 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x03, 0x63, + 0x70, 0x75, 0x12, 0x38, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xaa, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x80, 0x04, 0x0a, 0x1c, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x55, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3b, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, - 0x74, 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x47, - 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x52, 0x07, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x5d, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x64, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x6f, - 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, - 0x70, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x69, 0x6f, - 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x49, 0x6f, 0x70, 0x73, 0x12, 0x46, 0x0a, 0x0a, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x6f, 0x70, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x27, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, - 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x09, 0x77, 0x72, 0x69, 0x74, 0x65, 0x49, - 0x6f, 0x70, 0x73, 0x12, 0x50, 0x0a, 0x0f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x68, 0x72, 0x6f, - 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x54, 0x68, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x70, 0x75, 0x74, 0x12, 0x52, 0x0a, 0x10, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, - 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x27, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, - 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, - 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa5, 0x03, 0x0a, 0x1e, - 0x47, 0x43, 0x50, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, - 0x0a, 0x0b, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, - 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, - 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, - 0x7a, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0b, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x12, - 0x89, 0x01, 0x0a, 0x13, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x5f, 0x72, 0x69, 0x67, 0x68, - 0x74, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x58, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, + 0x4e, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x34, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, + 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x69, 0x67, + 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, + 0x74, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, + 0x56, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x43, 0x50, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, - 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, - 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x1a, 0x85, 0x01, 0x0a, 0x17, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, - 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x54, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x2e, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x47, 0x63, 0x70, 0x43, + 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x3d, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, + 0x69, 0x6f, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x72, 0x65, + 0x61, 0x64, 0x49, 0x6f, 0x70, 0x73, 0x12, 0x3f, 0x0a, 0x0a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, + 0x69, 0x6f, 0x70, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x09, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x49, 0x6f, 0x70, 0x73, 0x12, 0x49, 0x0a, 0x0f, 0x72, 0x65, 0x61, 0x64, 0x5f, + 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, + 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x54, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, + 0x75, 0x74, 0x12, 0x4b, 0x0a, 0x10, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x6f, + 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0f, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x70, 0x75, 0x74, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x8f, 0x03, 0x0a, 0x1e, 0x47, 0x43, 0x50, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, + 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0b, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, + 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0b, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x12, 0x82, + 0x01, 0x0a, 0x13, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x43, 0x50, 0x43, 0x6f, 0x6d, 0x70, + 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x52, + 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x12, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, + 0x69, 0x6e, 0x67, 0x1a, 0x7e, 0x0a, 0x17, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x52, 0x69, + 0x67, 0x68, 0x74, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x37, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x63, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x32, 0xac, 0x01, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x9b, 0x01, 0x0a, 0x16, 0x47, 0x43, 0x50, 0x43, 0x6f, 0x6d, 0x70, + 0x02, 0x38, 0x01, 0x32, 0x9e, 0x01, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x8d, 0x01, 0x0a, 0x16, 0x47, 0x43, 0x50, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x3f, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, - 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x43, 0x50, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, - 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x40, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, - 0x74, 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x43, 0x50, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x4f, 0x70, - 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x6b, 0x61, 0x79, 0x74, 0x75, 0x2d, 0x69, 0x6f, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2d, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x73, 0x72, 0x63, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x38, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x43, 0x50, 0x43, + 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x67, 0x63, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x43, 0x50, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, + 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x79, 0x74, 0x75, 0x2d, 0x69, 0x6f, 0x2f, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x2d, 0x67, 0x63, 0x70, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x72, 0x63, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1241,65 +1228,65 @@ func file_plugin_proto_server_proto_rawDescGZIP() []byte { var file_plugin_proto_server_proto_msgTypes = make([]protoimpl.MessageInfo, 18) var file_plugin_proto_server_proto_goTypes = []interface{}{ - (*GcpComputeInstance)(nil), // 0: pluginkubernetes.optimization.v1.GcpComputeInstance - (*GcpComputeDisk)(nil), // 1: pluginkubernetes.optimization.v1.GcpComputeDisk - (*DataPoint)(nil), // 2: pluginkubernetes.optimization.v1.DataPoint - (*Metric)(nil), // 3: pluginkubernetes.optimization.v1.Metric - (*DiskMetrics)(nil), // 4: pluginkubernetes.optimization.v1.DiskMetrics - (*GCPComputeOptimizationRequest)(nil), // 5: pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest - (*Usage)(nil), // 6: pluginkubernetes.optimization.v1.Usage - (*RightsizingGcpComputeDisk)(nil), // 7: pluginkubernetes.optimization.v1.RightsizingGcpComputeDisk - (*RightsizingGcpComputeInstance)(nil), // 8: pluginkubernetes.optimization.v1.RightsizingGcpComputeInstance - (*GcpComputeInstanceRightsizingRecommendation)(nil), // 9: pluginkubernetes.optimization.v1.GcpComputeInstanceRightsizingRecommendation - (*GcpComputeDiskRecommendation)(nil), // 10: pluginkubernetes.optimization.v1.GcpComputeDiskRecommendation - (*GCPComputeOptimizationResponse)(nil), // 11: pluginkubernetes.optimization.v1.GCPComputeOptimizationResponse - nil, // 12: pluginkubernetes.optimization.v1.DiskMetrics.MetricsEntry - nil, // 13: pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.IdentificationEntry - nil, // 14: pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.PreferencesEntry - nil, // 15: pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.MetricsEntry - nil, // 16: pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.DisksMetricsEntry - nil, // 17: pluginkubernetes.optimization.v1.GCPComputeOptimizationResponse.VolumesRightsizingEntry + (*GcpComputeInstance)(nil), // 0: plugingcp.optimization.v1.GcpComputeInstance + (*GcpComputeDisk)(nil), // 1: plugingcp.optimization.v1.GcpComputeDisk + (*DataPoint)(nil), // 2: plugingcp.optimization.v1.DataPoint + (*Metric)(nil), // 3: plugingcp.optimization.v1.Metric + (*DiskMetrics)(nil), // 4: plugingcp.optimization.v1.DiskMetrics + (*GCPComputeOptimizationRequest)(nil), // 5: plugingcp.optimization.v1.GCPComputeOptimizationRequest + (*Usage)(nil), // 6: plugingcp.optimization.v1.Usage + (*RightsizingGcpComputeDisk)(nil), // 7: plugingcp.optimization.v1.RightsizingGcpComputeDisk + (*RightsizingGcpComputeInstance)(nil), // 8: plugingcp.optimization.v1.RightsizingGcpComputeInstance + (*GcpComputeInstanceRightsizingRecommendation)(nil), // 9: plugingcp.optimization.v1.GcpComputeInstanceRightsizingRecommendation + (*GcpComputeDiskRecommendation)(nil), // 10: plugingcp.optimization.v1.GcpComputeDiskRecommendation + (*GCPComputeOptimizationResponse)(nil), // 11: plugingcp.optimization.v1.GCPComputeOptimizationResponse + nil, // 12: plugingcp.optimization.v1.DiskMetrics.MetricsEntry + nil, // 13: plugingcp.optimization.v1.GCPComputeOptimizationRequest.IdentificationEntry + nil, // 14: plugingcp.optimization.v1.GCPComputeOptimizationRequest.PreferencesEntry + nil, // 15: plugingcp.optimization.v1.GCPComputeOptimizationRequest.MetricsEntry + nil, // 16: plugingcp.optimization.v1.GCPComputeOptimizationRequest.DisksMetricsEntry + nil, // 17: plugingcp.optimization.v1.GCPComputeOptimizationResponse.VolumesRightsizingEntry (*wrappers.Int64Value)(nil), // 18: google.protobuf.Int64Value (*wrappers.StringValue)(nil), // 19: google.protobuf.StringValue (*wrappers.DoubleValue)(nil), // 20: google.protobuf.DoubleValue } var file_plugin_proto_server_proto_depIdxs = []int32{ - 18, // 0: pluginkubernetes.optimization.v1.GcpComputeDisk.disk_size:type_name -> google.protobuf.Int64Value - 18, // 1: pluginkubernetes.optimization.v1.GcpComputeDisk.provisioned_iops:type_name -> google.protobuf.Int64Value - 18, // 2: pluginkubernetes.optimization.v1.DataPoint.start_time:type_name -> google.protobuf.Int64Value - 18, // 3: pluginkubernetes.optimization.v1.DataPoint.end_time:type_name -> google.protobuf.Int64Value - 2, // 4: pluginkubernetes.optimization.v1.Metric.data:type_name -> pluginkubernetes.optimization.v1.DataPoint - 12, // 5: pluginkubernetes.optimization.v1.DiskMetrics.metrics:type_name -> pluginkubernetes.optimization.v1.DiskMetrics.MetricsEntry - 19, // 6: pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.request_id:type_name -> google.protobuf.StringValue - 19, // 7: pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.cli_version:type_name -> google.protobuf.StringValue - 13, // 8: pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.identification:type_name -> pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.IdentificationEntry - 0, // 9: pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.instance:type_name -> pluginkubernetes.optimization.v1.GcpComputeInstance - 1, // 10: pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.disks:type_name -> pluginkubernetes.optimization.v1.GcpComputeDisk - 14, // 11: pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.preferences:type_name -> pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.PreferencesEntry - 15, // 12: pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.metrics:type_name -> pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.MetricsEntry - 16, // 13: pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.disks_metrics:type_name -> pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.DisksMetricsEntry - 20, // 14: pluginkubernetes.optimization.v1.Usage.avg:type_name -> google.protobuf.DoubleValue - 20, // 15: pluginkubernetes.optimization.v1.Usage.max:type_name -> google.protobuf.DoubleValue - 20, // 16: pluginkubernetes.optimization.v1.Usage.min:type_name -> google.protobuf.DoubleValue - 8, // 17: pluginkubernetes.optimization.v1.GcpComputeInstanceRightsizingRecommendation.current:type_name -> pluginkubernetes.optimization.v1.RightsizingGcpComputeInstance - 8, // 18: pluginkubernetes.optimization.v1.GcpComputeInstanceRightsizingRecommendation.recommended:type_name -> pluginkubernetes.optimization.v1.RightsizingGcpComputeInstance - 6, // 19: pluginkubernetes.optimization.v1.GcpComputeInstanceRightsizingRecommendation.cpu:type_name -> pluginkubernetes.optimization.v1.Usage - 6, // 20: pluginkubernetes.optimization.v1.GcpComputeInstanceRightsizingRecommendation.memory:type_name -> pluginkubernetes.optimization.v1.Usage - 7, // 21: pluginkubernetes.optimization.v1.GcpComputeDiskRecommendation.current:type_name -> pluginkubernetes.optimization.v1.RightsizingGcpComputeDisk - 7, // 22: pluginkubernetes.optimization.v1.GcpComputeDiskRecommendation.recommended:type_name -> pluginkubernetes.optimization.v1.RightsizingGcpComputeDisk - 6, // 23: pluginkubernetes.optimization.v1.GcpComputeDiskRecommendation.read_iops:type_name -> pluginkubernetes.optimization.v1.Usage - 6, // 24: pluginkubernetes.optimization.v1.GcpComputeDiskRecommendation.write_iops:type_name -> pluginkubernetes.optimization.v1.Usage - 6, // 25: pluginkubernetes.optimization.v1.GcpComputeDiskRecommendation.read_throughput:type_name -> pluginkubernetes.optimization.v1.Usage - 6, // 26: pluginkubernetes.optimization.v1.GcpComputeDiskRecommendation.write_throughput:type_name -> pluginkubernetes.optimization.v1.Usage - 9, // 27: pluginkubernetes.optimization.v1.GCPComputeOptimizationResponse.rightsizing:type_name -> pluginkubernetes.optimization.v1.GcpComputeInstanceRightsizingRecommendation - 17, // 28: pluginkubernetes.optimization.v1.GCPComputeOptimizationResponse.volumes_rightsizing:type_name -> pluginkubernetes.optimization.v1.GCPComputeOptimizationResponse.VolumesRightsizingEntry - 3, // 29: pluginkubernetes.optimization.v1.DiskMetrics.MetricsEntry.value:type_name -> pluginkubernetes.optimization.v1.Metric - 19, // 30: pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.PreferencesEntry.value:type_name -> google.protobuf.StringValue - 3, // 31: pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.MetricsEntry.value:type_name -> pluginkubernetes.optimization.v1.Metric - 4, // 32: pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest.DisksMetricsEntry.value:type_name -> pluginkubernetes.optimization.v1.DiskMetrics - 10, // 33: pluginkubernetes.optimization.v1.GCPComputeOptimizationResponse.VolumesRightsizingEntry.value:type_name -> pluginkubernetes.optimization.v1.GcpComputeDiskRecommendation - 5, // 34: pluginkubernetes.optimization.v1.Optimization.GCPComputeOptimization:input_type -> pluginkubernetes.optimization.v1.GCPComputeOptimizationRequest - 11, // 35: pluginkubernetes.optimization.v1.Optimization.GCPComputeOptimization:output_type -> pluginkubernetes.optimization.v1.GCPComputeOptimizationResponse + 18, // 0: plugingcp.optimization.v1.GcpComputeDisk.disk_size:type_name -> google.protobuf.Int64Value + 18, // 1: plugingcp.optimization.v1.GcpComputeDisk.provisioned_iops:type_name -> google.protobuf.Int64Value + 18, // 2: plugingcp.optimization.v1.DataPoint.start_time:type_name -> google.protobuf.Int64Value + 18, // 3: plugingcp.optimization.v1.DataPoint.end_time:type_name -> google.protobuf.Int64Value + 2, // 4: plugingcp.optimization.v1.Metric.data:type_name -> plugingcp.optimization.v1.DataPoint + 12, // 5: plugingcp.optimization.v1.DiskMetrics.metrics:type_name -> plugingcp.optimization.v1.DiskMetrics.MetricsEntry + 19, // 6: plugingcp.optimization.v1.GCPComputeOptimizationRequest.request_id:type_name -> google.protobuf.StringValue + 19, // 7: plugingcp.optimization.v1.GCPComputeOptimizationRequest.cli_version:type_name -> google.protobuf.StringValue + 13, // 8: plugingcp.optimization.v1.GCPComputeOptimizationRequest.identification:type_name -> plugingcp.optimization.v1.GCPComputeOptimizationRequest.IdentificationEntry + 0, // 9: plugingcp.optimization.v1.GCPComputeOptimizationRequest.instance:type_name -> plugingcp.optimization.v1.GcpComputeInstance + 1, // 10: plugingcp.optimization.v1.GCPComputeOptimizationRequest.disks:type_name -> plugingcp.optimization.v1.GcpComputeDisk + 14, // 11: plugingcp.optimization.v1.GCPComputeOptimizationRequest.preferences:type_name -> plugingcp.optimization.v1.GCPComputeOptimizationRequest.PreferencesEntry + 15, // 12: plugingcp.optimization.v1.GCPComputeOptimizationRequest.metrics:type_name -> plugingcp.optimization.v1.GCPComputeOptimizationRequest.MetricsEntry + 16, // 13: plugingcp.optimization.v1.GCPComputeOptimizationRequest.disks_metrics:type_name -> plugingcp.optimization.v1.GCPComputeOptimizationRequest.DisksMetricsEntry + 20, // 14: plugingcp.optimization.v1.Usage.avg:type_name -> google.protobuf.DoubleValue + 20, // 15: plugingcp.optimization.v1.Usage.max:type_name -> google.protobuf.DoubleValue + 20, // 16: plugingcp.optimization.v1.Usage.min:type_name -> google.protobuf.DoubleValue + 8, // 17: plugingcp.optimization.v1.GcpComputeInstanceRightsizingRecommendation.current:type_name -> plugingcp.optimization.v1.RightsizingGcpComputeInstance + 8, // 18: plugingcp.optimization.v1.GcpComputeInstanceRightsizingRecommendation.recommended:type_name -> plugingcp.optimization.v1.RightsizingGcpComputeInstance + 6, // 19: plugingcp.optimization.v1.GcpComputeInstanceRightsizingRecommendation.cpu:type_name -> plugingcp.optimization.v1.Usage + 6, // 20: plugingcp.optimization.v1.GcpComputeInstanceRightsizingRecommendation.memory:type_name -> plugingcp.optimization.v1.Usage + 7, // 21: plugingcp.optimization.v1.GcpComputeDiskRecommendation.current:type_name -> plugingcp.optimization.v1.RightsizingGcpComputeDisk + 7, // 22: plugingcp.optimization.v1.GcpComputeDiskRecommendation.recommended:type_name -> plugingcp.optimization.v1.RightsizingGcpComputeDisk + 6, // 23: plugingcp.optimization.v1.GcpComputeDiskRecommendation.read_iops:type_name -> plugingcp.optimization.v1.Usage + 6, // 24: plugingcp.optimization.v1.GcpComputeDiskRecommendation.write_iops:type_name -> plugingcp.optimization.v1.Usage + 6, // 25: plugingcp.optimization.v1.GcpComputeDiskRecommendation.read_throughput:type_name -> plugingcp.optimization.v1.Usage + 6, // 26: plugingcp.optimization.v1.GcpComputeDiskRecommendation.write_throughput:type_name -> plugingcp.optimization.v1.Usage + 9, // 27: plugingcp.optimization.v1.GCPComputeOptimizationResponse.rightsizing:type_name -> plugingcp.optimization.v1.GcpComputeInstanceRightsizingRecommendation + 17, // 28: plugingcp.optimization.v1.GCPComputeOptimizationResponse.volumes_rightsizing:type_name -> plugingcp.optimization.v1.GCPComputeOptimizationResponse.VolumesRightsizingEntry + 3, // 29: plugingcp.optimization.v1.DiskMetrics.MetricsEntry.value:type_name -> plugingcp.optimization.v1.Metric + 19, // 30: plugingcp.optimization.v1.GCPComputeOptimizationRequest.PreferencesEntry.value:type_name -> google.protobuf.StringValue + 3, // 31: plugingcp.optimization.v1.GCPComputeOptimizationRequest.MetricsEntry.value:type_name -> plugingcp.optimization.v1.Metric + 4, // 32: plugingcp.optimization.v1.GCPComputeOptimizationRequest.DisksMetricsEntry.value:type_name -> plugingcp.optimization.v1.DiskMetrics + 10, // 33: plugingcp.optimization.v1.GCPComputeOptimizationResponse.VolumesRightsizingEntry.value:type_name -> plugingcp.optimization.v1.GcpComputeDiskRecommendation + 5, // 34: plugingcp.optimization.v1.Optimization.GCPComputeOptimization:input_type -> plugingcp.optimization.v1.GCPComputeOptimizationRequest + 11, // 35: plugingcp.optimization.v1.Optimization.GCPComputeOptimization:output_type -> plugingcp.optimization.v1.GCPComputeOptimizationResponse 35, // [35:36] is the sub-list for method output_type 34, // [34:35] is the sub-list for method input_type 34, // [34:34] is the sub-list for extension type_name diff --git a/plugin/proto/src/golang/server_grpc.pb.go b/plugin/proto/src/golang/server_grpc.pb.go index ba5d956..8248145 100644 --- a/plugin/proto/src/golang/server_grpc.pb.go +++ b/plugin/proto/src/golang/server_grpc.pb.go @@ -19,7 +19,7 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - Optimization_GCPComputeOptimization_FullMethodName = "/pluginkubernetes.optimization.v1.Optimization/GCPComputeOptimization" + Optimization_GCPComputeOptimization_FullMethodName = "/plugingcp.optimization.v1.Optimization/GCPComputeOptimization" ) // OptimizationClient is the client API for Optimization service. @@ -96,7 +96,7 @@ func _Optimization_GCPComputeOptimization_Handler(srv interface{}, ctx context.C // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) var Optimization_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "pluginkubernetes.optimization.v1.Optimization", + ServiceName: "plugingcp.optimization.v1.Optimization", HandlerType: (*OptimizationServer)(nil), Methods: []grpc.MethodDesc{ { diff --git a/plugin/service.go b/plugin/service.go index ed45db9..ee53225 100644 --- a/plugin/service.go +++ b/plugin/service.go @@ -3,6 +3,11 @@ package plugin import ( "context" "fmt" + golang2 "github.com/kaytu-io/plugin-gcp/plugin/proto/src/golang" + "golang.org/x/oauth2" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/credentials/oauth" "log" "github.com/kaytu-io/kaytu/pkg/plugin/proto/src/golang" @@ -192,6 +197,18 @@ func (p *GCPPlugin) StartProcess(cmd string, flags map[string]string, kaytuAcces publishResultsReady(false) + conn, err := grpc.NewClient("gapi.kaytu.io:443", + grpc.WithTransportCredentials(credentials.NewTLS(nil)), + grpc.WithPerRPCCredentials(oauth.TokenSource{ + TokenSource: oauth2.StaticTokenSource(&oauth2.Token{ + AccessToken: kaytuAccessToken, + }), + })) + if err != nil { + return err + } + client := golang2.NewOptimizationClient(conn) + if cmd == "compute-instance" { p.processor = compute_instance.NewComputeInstanceProcessor( gcpProvider, @@ -200,6 +217,7 @@ func (p *GCPPlugin) StartProcess(cmd string, flags map[string]string, kaytuAcces publishResultSummary, kaytuAccessToken, jobQueue, + client, ) } else { return fmt.Errorf("invalid command: %s", cmd)