|  | // Code generated by protoc-gen-go. DO NOT EDIT. | 
|  | // versions: | 
|  | // 	protoc-gen-go v1.28.0 | 
|  | // 	protoc        v3.3.0 | 
|  | // source: rpc.proto | 
|  |  | 
|  | package rpc | 
|  |  | 
|  | import ( | 
|  | reflect "reflect" | 
|  | sync "sync" | 
|  |  | 
|  | timestamp "github.com/golang/protobuf/ptypes/timestamp" | 
|  | protoreflect "google.golang.org/protobuf/reflect/protoreflect" | 
|  | protoimpl "google.golang.org/protobuf/runtime/protoimpl" | 
|  | ) | 
|  |  | 
|  | 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) | 
|  | ) | 
|  |  | 
|  | // TaskStatus indicates the status of a given task. Must be kept in sync with | 
|  | // types.TaskStatus. | 
|  | type TaskStatus int32 | 
|  |  | 
|  | const ( | 
|  | // TASK_STATUS_PENDING indicates the task has not started. It is the empty | 
|  | // string so that it is the zero value of TaskStatus. | 
|  | TaskStatus_TASK_STATUS_PENDING TaskStatus = 0 | 
|  | // TASK_STATUS_RUNNING indicates the task is in progress. | 
|  | TaskStatus_TASK_STATUS_RUNNING TaskStatus = 1 | 
|  | // TASK_STATUS_SUCCESS indicates the task completed successfully. | 
|  | TaskStatus_TASK_STATUS_SUCCESS TaskStatus = 2 | 
|  | // TASK_STATUS_FAILURE indicates the task completed with failures. | 
|  | TaskStatus_TASK_STATUS_FAILURE TaskStatus = 3 | 
|  | // TASK_STATUS_MISHAP indicates the task exited early with an error, died | 
|  | // while in progress, was manually canceled, expired while waiting on the | 
|  | // queue, or timed out before completing. | 
|  | TaskStatus_TASK_STATUS_MISHAP TaskStatus = 4 | 
|  | ) | 
|  |  | 
|  | // Enum value maps for TaskStatus. | 
|  | var ( | 
|  | TaskStatus_name = map[int32]string{ | 
|  | 0: "TASK_STATUS_PENDING", | 
|  | 1: "TASK_STATUS_RUNNING", | 
|  | 2: "TASK_STATUS_SUCCESS", | 
|  | 3: "TASK_STATUS_FAILURE", | 
|  | 4: "TASK_STATUS_MISHAP", | 
|  | } | 
|  | TaskStatus_value = map[string]int32{ | 
|  | "TASK_STATUS_PENDING": 0, | 
|  | "TASK_STATUS_RUNNING": 1, | 
|  | "TASK_STATUS_SUCCESS": 2, | 
|  | "TASK_STATUS_FAILURE": 3, | 
|  | "TASK_STATUS_MISHAP":  4, | 
|  | } | 
|  | ) | 
|  |  | 
|  | func (x TaskStatus) Enum() *TaskStatus { | 
|  | p := new(TaskStatus) | 
|  | *p = x | 
|  | return p | 
|  | } | 
|  |  | 
|  | func (x TaskStatus) String() string { | 
|  | return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) | 
|  | } | 
|  |  | 
|  | func (TaskStatus) Descriptor() protoreflect.EnumDescriptor { | 
|  | return file_rpc_proto_enumTypes[0].Descriptor() | 
|  | } | 
|  |  | 
|  | func (TaskStatus) Type() protoreflect.EnumType { | 
|  | return &file_rpc_proto_enumTypes[0] | 
|  | } | 
|  |  | 
|  | func (x TaskStatus) Number() protoreflect.EnumNumber { | 
|  | return protoreflect.EnumNumber(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use TaskStatus.Descriptor instead. | 
|  | func (TaskStatus) EnumDescriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{0} | 
|  | } | 
|  |  | 
|  | type JobStatus int32 | 
|  |  | 
|  | const ( | 
|  | JobStatus_JOB_STATUS_IN_PROGRESS JobStatus = 0 | 
|  | JobStatus_JOB_STATUS_SUCCESS     JobStatus = 1 | 
|  | JobStatus_JOB_STATUS_FAILURE     JobStatus = 2 | 
|  | JobStatus_JOB_STATUS_MISHAP      JobStatus = 3 | 
|  | JobStatus_JOB_STATUS_CANCELED    JobStatus = 4 | 
|  | ) | 
|  |  | 
|  | // Enum value maps for JobStatus. | 
|  | var ( | 
|  | JobStatus_name = map[int32]string{ | 
|  | 0: "JOB_STATUS_IN_PROGRESS", | 
|  | 1: "JOB_STATUS_SUCCESS", | 
|  | 2: "JOB_STATUS_FAILURE", | 
|  | 3: "JOB_STATUS_MISHAP", | 
|  | 4: "JOB_STATUS_CANCELED", | 
|  | } | 
|  | JobStatus_value = map[string]int32{ | 
|  | "JOB_STATUS_IN_PROGRESS": 0, | 
|  | "JOB_STATUS_SUCCESS":     1, | 
|  | "JOB_STATUS_FAILURE":     2, | 
|  | "JOB_STATUS_MISHAP":      3, | 
|  | "JOB_STATUS_CANCELED":    4, | 
|  | } | 
|  | ) | 
|  |  | 
|  | func (x JobStatus) Enum() *JobStatus { | 
|  | p := new(JobStatus) | 
|  | *p = x | 
|  | return p | 
|  | } | 
|  |  | 
|  | func (x JobStatus) String() string { | 
|  | return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) | 
|  | } | 
|  |  | 
|  | func (JobStatus) Descriptor() protoreflect.EnumDescriptor { | 
|  | return file_rpc_proto_enumTypes[1].Descriptor() | 
|  | } | 
|  |  | 
|  | func (JobStatus) Type() protoreflect.EnumType { | 
|  | return &file_rpc_proto_enumTypes[1] | 
|  | } | 
|  |  | 
|  | func (x JobStatus) Number() protoreflect.EnumNumber { | 
|  | return protoreflect.EnumNumber(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use JobStatus.Descriptor instead. | 
|  | func (JobStatus) EnumDescriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{1} | 
|  | } | 
|  |  | 
|  | // TriggerJob represents a single job to trigger. | 
|  | type TriggerJob struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // job_name is the name of the job to trigger. | 
|  | JobName string `protobuf:"bytes,1,opt,name=job_name,json=jobName,proto3" json:"job_name,omitempty"` | 
|  | // commit_hash is the hash of the commit at which the job should run. | 
|  | CommitHash string `protobuf:"bytes,2,opt,name=commit_hash,json=commitHash,proto3" json:"commit_hash,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *TriggerJob) Reset() { | 
|  | *x = TriggerJob{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[0] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *TriggerJob) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*TriggerJob) ProtoMessage() {} | 
|  |  | 
|  | func (x *TriggerJob) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_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 TriggerJob.ProtoReflect.Descriptor instead. | 
|  | func (*TriggerJob) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{0} | 
|  | } | 
|  |  | 
|  | func (x *TriggerJob) GetJobName() string { | 
|  | if x != nil { | 
|  | return x.JobName | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *TriggerJob) GetCommitHash() string { | 
|  | if x != nil { | 
|  | return x.CommitHash | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | // TriggerJobsRequest is a request to TriggerJobs. | 
|  | type TriggerJobsRequest struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // jobs specifies which jobs to trigger. | 
|  | Jobs []*TriggerJob `protobuf:"bytes,1,rep,name=jobs,proto3" json:"jobs,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *TriggerJobsRequest) Reset() { | 
|  | *x = TriggerJobsRequest{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[1] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *TriggerJobsRequest) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*TriggerJobsRequest) ProtoMessage() {} | 
|  |  | 
|  | func (x *TriggerJobsRequest) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_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 TriggerJobsRequest.ProtoReflect.Descriptor instead. | 
|  | func (*TriggerJobsRequest) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{1} | 
|  | } | 
|  |  | 
|  | func (x *TriggerJobsRequest) GetJobs() []*TriggerJob { | 
|  | if x != nil { | 
|  | return x.Jobs | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // TriggerJobsResponse is a response returned by TriggerJobs. | 
|  | type TriggerJobsResponse struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // job_ids are the IDs of the jobs which were triggered, in the same order | 
|  | // as they were requested. | 
|  | JobIds []string `protobuf:"bytes,1,rep,name=job_ids,json=jobIds,proto3" json:"job_ids,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *TriggerJobsResponse) Reset() { | 
|  | *x = TriggerJobsResponse{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[2] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *TriggerJobsResponse) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*TriggerJobsResponse) ProtoMessage() {} | 
|  |  | 
|  | func (x *TriggerJobsResponse) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_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 TriggerJobsResponse.ProtoReflect.Descriptor instead. | 
|  | func (*TriggerJobsResponse) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{2} | 
|  | } | 
|  |  | 
|  | func (x *TriggerJobsResponse) GetJobIds() []string { | 
|  | if x != nil { | 
|  | return x.JobIds | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // GetJobRequest is a request to GetJob. | 
|  | type GetJobRequest struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // ID of the job to retrieve. | 
|  | Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *GetJobRequest) Reset() { | 
|  | *x = GetJobRequest{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[3] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *GetJobRequest) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*GetJobRequest) ProtoMessage() {} | 
|  |  | 
|  | func (x *GetJobRequest) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_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 GetJobRequest.ProtoReflect.Descriptor instead. | 
|  | func (*GetJobRequest) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{3} | 
|  | } | 
|  |  | 
|  | func (x *GetJobRequest) GetId() string { | 
|  | if x != nil { | 
|  | return x.Id | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | // GetJobResponse is a response returned from GetJob. | 
|  | type GetJobResponse struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // job contains the core information about the job. | 
|  | Job *Job `protobuf:"bytes,1,opt,name=job,proto3" json:"job,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *GetJobResponse) Reset() { | 
|  | *x = GetJobResponse{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[4] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *GetJobResponse) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*GetJobResponse) ProtoMessage() {} | 
|  |  | 
|  | func (x *GetJobResponse) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[4] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use GetJobResponse.ProtoReflect.Descriptor instead. | 
|  | func (*GetJobResponse) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{4} | 
|  | } | 
|  |  | 
|  | func (x *GetJobResponse) GetJob() *Job { | 
|  | if x != nil { | 
|  | return x.Job | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // CancelJobRequest is a request to CancelJob. | 
|  | type CancelJobRequest struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // ID of the job to cancel. | 
|  | Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *CancelJobRequest) Reset() { | 
|  | *x = CancelJobRequest{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[5] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *CancelJobRequest) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*CancelJobRequest) ProtoMessage() {} | 
|  |  | 
|  | func (x *CancelJobRequest) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[5] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use CancelJobRequest.ProtoReflect.Descriptor instead. | 
|  | func (*CancelJobRequest) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{5} | 
|  | } | 
|  |  | 
|  | func (x *CancelJobRequest) GetId() string { | 
|  | if x != nil { | 
|  | return x.Id | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | // CancelJobResponse is a response returned by CancelJob. | 
|  | type CancelJobResponse struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // job is the updated job after cancellation. | 
|  | Job *Job `protobuf:"bytes,1,opt,name=job,proto3" json:"job,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *CancelJobResponse) Reset() { | 
|  | *x = CancelJobResponse{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[6] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *CancelJobResponse) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*CancelJobResponse) ProtoMessage() {} | 
|  |  | 
|  | func (x *CancelJobResponse) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[6] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use CancelJobResponse.ProtoReflect.Descriptor instead. | 
|  | func (*CancelJobResponse) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{6} | 
|  | } | 
|  |  | 
|  | func (x *CancelJobResponse) GetJob() *Job { | 
|  | if x != nil { | 
|  | return x.Job | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // SearchJobsRequest is a request to SearchJobs. | 
|  | type SearchJobsRequest struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | BuildbucketBuildId    string               `protobuf:"bytes,1,opt,name=buildbucket_build_id,json=buildbucketBuildId,proto3" json:"buildbucket_build_id,omitempty"` | 
|  | HasBuildbucketBuildId bool                 `protobuf:"varint,2,opt,name=has_buildbucket_build_id,json=hasBuildbucketBuildId,proto3" json:"has_buildbucket_build_id,omitempty"` | 
|  | IsForce               bool                 `protobuf:"varint,3,opt,name=is_force,json=isForce,proto3" json:"is_force,omitempty"` | 
|  | HasIsForce            bool                 `protobuf:"varint,4,opt,name=has_is_force,json=hasIsForce,proto3" json:"has_is_force,omitempty"` | 
|  | Issue                 string               `protobuf:"bytes,5,opt,name=issue,proto3" json:"issue,omitempty"` | 
|  | HasIssue              bool                 `protobuf:"varint,6,opt,name=has_issue,json=hasIssue,proto3" json:"has_issue,omitempty"` | 
|  | Name                  string               `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"` | 
|  | HasName               bool                 `protobuf:"varint,8,opt,name=has_name,json=hasName,proto3" json:"has_name,omitempty"` | 
|  | Patchset              string               `protobuf:"bytes,9,opt,name=patchset,proto3" json:"patchset,omitempty"` | 
|  | HasPatchset           bool                 `protobuf:"varint,10,opt,name=has_patchset,json=hasPatchset,proto3" json:"has_patchset,omitempty"` | 
|  | Repo                  string               `protobuf:"bytes,11,opt,name=repo,proto3" json:"repo,omitempty"` | 
|  | HasRepo               bool                 `protobuf:"varint,12,opt,name=has_repo,json=hasRepo,proto3" json:"has_repo,omitempty"` | 
|  | Revision              string               `protobuf:"bytes,13,opt,name=revision,proto3" json:"revision,omitempty"` | 
|  | HasRevision           bool                 `protobuf:"varint,14,opt,name=has_revision,json=hasRevision,proto3" json:"has_revision,omitempty"` | 
|  | Status                JobStatus            `protobuf:"varint,15,opt,name=status,proto3,enum=task_scheduler.rpc.JobStatus" json:"status,omitempty"` | 
|  | HasStatus             bool                 `protobuf:"varint,16,opt,name=has_status,json=hasStatus,proto3" json:"has_status,omitempty"` | 
|  | TimeStart             *timestamp.Timestamp `protobuf:"bytes,17,opt,name=time_start,json=timeStart,proto3" json:"time_start,omitempty"` | 
|  | HasTimeStart          bool                 `protobuf:"varint,18,opt,name=has_time_start,json=hasTimeStart,proto3" json:"has_time_start,omitempty"` | 
|  | TimeEnd               *timestamp.Timestamp `protobuf:"bytes,19,opt,name=time_end,json=timeEnd,proto3" json:"time_end,omitempty"` | 
|  | HasTimeEnd            bool                 `protobuf:"varint,20,opt,name=has_time_end,json=hasTimeEnd,proto3" json:"has_time_end,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) Reset() { | 
|  | *x = SearchJobsRequest{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[7] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*SearchJobsRequest) ProtoMessage() {} | 
|  |  | 
|  | func (x *SearchJobsRequest) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[7] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use SearchJobsRequest.ProtoReflect.Descriptor instead. | 
|  | func (*SearchJobsRequest) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{7} | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetBuildbucketBuildId() string { | 
|  | if x != nil { | 
|  | return x.BuildbucketBuildId | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetHasBuildbucketBuildId() bool { | 
|  | if x != nil { | 
|  | return x.HasBuildbucketBuildId | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetIsForce() bool { | 
|  | if x != nil { | 
|  | return x.IsForce | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetHasIsForce() bool { | 
|  | if x != nil { | 
|  | return x.HasIsForce | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetIssue() string { | 
|  | if x != nil { | 
|  | return x.Issue | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetHasIssue() bool { | 
|  | if x != nil { | 
|  | return x.HasIssue | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetName() string { | 
|  | if x != nil { | 
|  | return x.Name | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetHasName() bool { | 
|  | if x != nil { | 
|  | return x.HasName | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetPatchset() string { | 
|  | if x != nil { | 
|  | return x.Patchset | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetHasPatchset() bool { | 
|  | if x != nil { | 
|  | return x.HasPatchset | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetRepo() string { | 
|  | if x != nil { | 
|  | return x.Repo | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetHasRepo() bool { | 
|  | if x != nil { | 
|  | return x.HasRepo | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetRevision() string { | 
|  | if x != nil { | 
|  | return x.Revision | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetHasRevision() bool { | 
|  | if x != nil { | 
|  | return x.HasRevision | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetStatus() JobStatus { | 
|  | if x != nil { | 
|  | return x.Status | 
|  | } | 
|  | return JobStatus_JOB_STATUS_IN_PROGRESS | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetHasStatus() bool { | 
|  | if x != nil { | 
|  | return x.HasStatus | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetTimeStart() *timestamp.Timestamp { | 
|  | if x != nil { | 
|  | return x.TimeStart | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetHasTimeStart() bool { | 
|  | if x != nil { | 
|  | return x.HasTimeStart | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetTimeEnd() *timestamp.Timestamp { | 
|  | if x != nil { | 
|  | return x.TimeEnd | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsRequest) GetHasTimeEnd() bool { | 
|  | if x != nil { | 
|  | return x.HasTimeEnd | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | // SearchJobsRequest is a response returned by SearchJobs. | 
|  | type SearchJobsResponse struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | Jobs []*Job `protobuf:"bytes,1,rep,name=jobs,proto3" json:"jobs,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsResponse) Reset() { | 
|  | *x = SearchJobsResponse{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[8] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsResponse) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*SearchJobsResponse) ProtoMessage() {} | 
|  |  | 
|  | func (x *SearchJobsResponse) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[8] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use SearchJobsResponse.ProtoReflect.Descriptor instead. | 
|  | func (*SearchJobsResponse) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{8} | 
|  | } | 
|  |  | 
|  | func (x *SearchJobsResponse) GetJobs() []*Job { | 
|  | if x != nil { | 
|  | return x.Jobs | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // GetTaskRequest is a request to GetTask. | 
|  | type GetTaskRequest struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // ID of the task to retrieve. | 
|  | Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` | 
|  | // Whether or not to include statistics. This is expensive and should only | 
|  | // be set when needed. | 
|  | IncludeStats bool `protobuf:"varint,2,opt,name=include_stats,json=includeStats,proto3" json:"include_stats,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *GetTaskRequest) Reset() { | 
|  | *x = GetTaskRequest{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[9] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *GetTaskRequest) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*GetTaskRequest) ProtoMessage() {} | 
|  |  | 
|  | func (x *GetTaskRequest) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[9] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use GetTaskRequest.ProtoReflect.Descriptor instead. | 
|  | func (*GetTaskRequest) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{9} | 
|  | } | 
|  |  | 
|  | func (x *GetTaskRequest) GetId() string { | 
|  | if x != nil { | 
|  | return x.Id | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *GetTaskRequest) GetIncludeStats() bool { | 
|  | if x != nil { | 
|  | return x.IncludeStats | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | // GetTaskResponse is a response returned from GetTask. | 
|  | type GetTaskResponse struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // task is the requested task. | 
|  | Task *Task `protobuf:"bytes,1,opt,name=task,proto3" json:"task,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *GetTaskResponse) Reset() { | 
|  | *x = GetTaskResponse{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[10] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *GetTaskResponse) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*GetTaskResponse) ProtoMessage() {} | 
|  |  | 
|  | func (x *GetTaskResponse) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[10] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use GetTaskResponse.ProtoReflect.Descriptor instead. | 
|  | func (*GetTaskResponse) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{10} | 
|  | } | 
|  |  | 
|  | func (x *GetTaskResponse) GetTask() *Task { | 
|  | if x != nil { | 
|  | return x.Task | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // SearchTasksRequest is a request to SearchTasks. | 
|  | type SearchTasksRequest struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | Attempt      int32                `protobuf:"varint,1,opt,name=attempt,proto3" json:"attempt,omitempty"` | 
|  | HasAttempt   bool                 `protobuf:"varint,2,opt,name=has_attempt,json=hasAttempt,proto3" json:"has_attempt,omitempty"` | 
|  | Issue        string               `protobuf:"bytes,3,opt,name=issue,proto3" json:"issue,omitempty"` | 
|  | HasIssue     bool                 `protobuf:"varint,4,opt,name=has_issue,json=hasIssue,proto3" json:"has_issue,omitempty"` | 
|  | Name         string               `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` | 
|  | HasName      bool                 `protobuf:"varint,6,opt,name=has_name,json=hasName,proto3" json:"has_name,omitempty"` | 
|  | Patchset     string               `protobuf:"bytes,7,opt,name=patchset,proto3" json:"patchset,omitempty"` | 
|  | HasPatchset  bool                 `protobuf:"varint,8,opt,name=has_patchset,json=hasPatchset,proto3" json:"has_patchset,omitempty"` | 
|  | Repo         string               `protobuf:"bytes,9,opt,name=repo,proto3" json:"repo,omitempty"` | 
|  | HasRepo      bool                 `protobuf:"varint,10,opt,name=has_repo,json=hasRepo,proto3" json:"has_repo,omitempty"` | 
|  | Revision     string               `protobuf:"bytes,11,opt,name=revision,proto3" json:"revision,omitempty"` | 
|  | HasRevision  bool                 `protobuf:"varint,12,opt,name=has_revision,json=hasRevision,proto3" json:"has_revision,omitempty"` | 
|  | Status       TaskStatus           `protobuf:"varint,13,opt,name=status,proto3,enum=task_scheduler.rpc.TaskStatus" json:"status,omitempty"` | 
|  | HasStatus    bool                 `protobuf:"varint,14,opt,name=has_status,json=hasStatus,proto3" json:"has_status,omitempty"` | 
|  | TimeStart    *timestamp.Timestamp `protobuf:"bytes,15,opt,name=time_start,json=timeStart,proto3" json:"time_start,omitempty"` | 
|  | HasTimeStart bool                 `protobuf:"varint,16,opt,name=has_time_start,json=hasTimeStart,proto3" json:"has_time_start,omitempty"` | 
|  | TimeEnd      *timestamp.Timestamp `protobuf:"bytes,17,opt,name=time_end,json=timeEnd,proto3" json:"time_end,omitempty"` | 
|  | HasTimeEnd   bool                 `protobuf:"varint,18,opt,name=has_time_end,json=hasTimeEnd,proto3" json:"has_time_end,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) Reset() { | 
|  | *x = SearchTasksRequest{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[11] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*SearchTasksRequest) ProtoMessage() {} | 
|  |  | 
|  | func (x *SearchTasksRequest) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[11] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use SearchTasksRequest.ProtoReflect.Descriptor instead. | 
|  | func (*SearchTasksRequest) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{11} | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetAttempt() int32 { | 
|  | if x != nil { | 
|  | return x.Attempt | 
|  | } | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetHasAttempt() bool { | 
|  | if x != nil { | 
|  | return x.HasAttempt | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetIssue() string { | 
|  | if x != nil { | 
|  | return x.Issue | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetHasIssue() bool { | 
|  | if x != nil { | 
|  | return x.HasIssue | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetName() string { | 
|  | if x != nil { | 
|  | return x.Name | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetHasName() bool { | 
|  | if x != nil { | 
|  | return x.HasName | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetPatchset() string { | 
|  | if x != nil { | 
|  | return x.Patchset | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetHasPatchset() bool { | 
|  | if x != nil { | 
|  | return x.HasPatchset | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetRepo() string { | 
|  | if x != nil { | 
|  | return x.Repo | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetHasRepo() bool { | 
|  | if x != nil { | 
|  | return x.HasRepo | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetRevision() string { | 
|  | if x != nil { | 
|  | return x.Revision | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetHasRevision() bool { | 
|  | if x != nil { | 
|  | return x.HasRevision | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetStatus() TaskStatus { | 
|  | if x != nil { | 
|  | return x.Status | 
|  | } | 
|  | return TaskStatus_TASK_STATUS_PENDING | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetHasStatus() bool { | 
|  | if x != nil { | 
|  | return x.HasStatus | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetTimeStart() *timestamp.Timestamp { | 
|  | if x != nil { | 
|  | return x.TimeStart | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetHasTimeStart() bool { | 
|  | if x != nil { | 
|  | return x.HasTimeStart | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetTimeEnd() *timestamp.Timestamp { | 
|  | if x != nil { | 
|  | return x.TimeEnd | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksRequest) GetHasTimeEnd() bool { | 
|  | if x != nil { | 
|  | return x.HasTimeEnd | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | // SearchTasksResponse is a response returned from SearchTasks. | 
|  | type SearchTasksResponse struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | Tasks []*Task `protobuf:"bytes,1,rep,name=tasks,proto3" json:"tasks,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksResponse) Reset() { | 
|  | *x = SearchTasksResponse{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[12] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksResponse) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*SearchTasksResponse) ProtoMessage() {} | 
|  |  | 
|  | func (x *SearchTasksResponse) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[12] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use SearchTasksResponse.ProtoReflect.Descriptor instead. | 
|  | func (*SearchTasksResponse) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{12} | 
|  | } | 
|  |  | 
|  | func (x *SearchTasksResponse) GetTasks() []*Task { | 
|  | if x != nil { | 
|  | return x.Tasks | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // GetSkipTaskRulesRequest is a request to GetSkipTaskRules. | 
|  | type GetSkipTaskRulesRequest struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  | } | 
|  |  | 
|  | func (x *GetSkipTaskRulesRequest) Reset() { | 
|  | *x = GetSkipTaskRulesRequest{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[13] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *GetSkipTaskRulesRequest) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*GetSkipTaskRulesRequest) ProtoMessage() {} | 
|  |  | 
|  | func (x *GetSkipTaskRulesRequest) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[13] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use GetSkipTaskRulesRequest.ProtoReflect.Descriptor instead. | 
|  | func (*GetSkipTaskRulesRequest) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{13} | 
|  | } | 
|  |  | 
|  | // SkipTaskRule is a rule which dictates when to skip scheduling a task. | 
|  | type SkipTaskRule struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // added_by is the email address of the user who added this rule. | 
|  | AddedBy string `protobuf:"bytes,1,opt,name=added_by,json=addedBy,proto3" json:"added_by,omitempty"` | 
|  | // task_spec_patterns determines which tasks the rule applies to. | 
|  | TaskSpecPatterns []string `protobuf:"bytes,2,rep,name=task_spec_patterns,json=taskSpecPatterns,proto3" json:"task_spec_patterns,omitempty"` | 
|  | // commits determines which commits the rule applies to. | 
|  | Commits []string `protobuf:"bytes,3,rep,name=commits,proto3" json:"commits,omitempty"` | 
|  | // description provides a human-readable description of the rule, eg. to | 
|  | // provide a reason for skipping the task(s) and to indicate when the rule | 
|  | // may be removed. | 
|  | Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` | 
|  | // name is a brief descriptive name for the rule. | 
|  | Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *SkipTaskRule) Reset() { | 
|  | *x = SkipTaskRule{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[14] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *SkipTaskRule) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*SkipTaskRule) ProtoMessage() {} | 
|  |  | 
|  | func (x *SkipTaskRule) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[14] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use SkipTaskRule.ProtoReflect.Descriptor instead. | 
|  | func (*SkipTaskRule) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{14} | 
|  | } | 
|  |  | 
|  | func (x *SkipTaskRule) GetAddedBy() string { | 
|  | if x != nil { | 
|  | return x.AddedBy | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *SkipTaskRule) GetTaskSpecPatterns() []string { | 
|  | if x != nil { | 
|  | return x.TaskSpecPatterns | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *SkipTaskRule) GetCommits() []string { | 
|  | if x != nil { | 
|  | return x.Commits | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *SkipTaskRule) GetDescription() string { | 
|  | if x != nil { | 
|  | return x.Description | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *SkipTaskRule) GetName() string { | 
|  | if x != nil { | 
|  | return x.Name | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | // GetSkipTaskRulesResponse is a response returned from GetSkipTaskRules. | 
|  | type GetSkipTaskRulesResponse struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | Rules []*SkipTaskRule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *GetSkipTaskRulesResponse) Reset() { | 
|  | *x = GetSkipTaskRulesResponse{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[15] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *GetSkipTaskRulesResponse) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*GetSkipTaskRulesResponse) ProtoMessage() {} | 
|  |  | 
|  | func (x *GetSkipTaskRulesResponse) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[15] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use GetSkipTaskRulesResponse.ProtoReflect.Descriptor instead. | 
|  | func (*GetSkipTaskRulesResponse) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{15} | 
|  | } | 
|  |  | 
|  | func (x *GetSkipTaskRulesResponse) GetRules() []*SkipTaskRule { | 
|  | if x != nil { | 
|  | return x.Rules | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // AddSkipTaskRuleRequest is a request to AddSkipTaskRule. | 
|  | type AddSkipTaskRuleRequest struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // task_spec_patterns determines which tasks the rule applies to. | 
|  | TaskSpecPatterns []string `protobuf:"bytes,2,rep,name=task_spec_patterns,json=taskSpecPatterns,proto3" json:"task_spec_patterns,omitempty"` | 
|  | // commits determines which commits the rule applies to. | 
|  | Commits []string `protobuf:"bytes,3,rep,name=commits,proto3" json:"commits,omitempty"` | 
|  | // description provides a human-readable description of the rule, eg. to | 
|  | // provide a reason for skipping the task(s) and to indicate when the rule | 
|  | // may be removed. | 
|  | Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` | 
|  | // name is a brief descriptive name for the rule. | 
|  | Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *AddSkipTaskRuleRequest) Reset() { | 
|  | *x = AddSkipTaskRuleRequest{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[16] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *AddSkipTaskRuleRequest) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*AddSkipTaskRuleRequest) ProtoMessage() {} | 
|  |  | 
|  | func (x *AddSkipTaskRuleRequest) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[16] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use AddSkipTaskRuleRequest.ProtoReflect.Descriptor instead. | 
|  | func (*AddSkipTaskRuleRequest) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{16} | 
|  | } | 
|  |  | 
|  | func (x *AddSkipTaskRuleRequest) GetTaskSpecPatterns() []string { | 
|  | if x != nil { | 
|  | return x.TaskSpecPatterns | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *AddSkipTaskRuleRequest) GetCommits() []string { | 
|  | if x != nil { | 
|  | return x.Commits | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *AddSkipTaskRuleRequest) GetDescription() string { | 
|  | if x != nil { | 
|  | return x.Description | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *AddSkipTaskRuleRequest) GetName() string { | 
|  | if x != nil { | 
|  | return x.Name | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | // AddSkipTaskRuleResponse is a response returned from AddSkipTaskRule. | 
|  | type AddSkipTaskRuleResponse struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | Rules []*SkipTaskRule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *AddSkipTaskRuleResponse) Reset() { | 
|  | *x = AddSkipTaskRuleResponse{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[17] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *AddSkipTaskRuleResponse) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*AddSkipTaskRuleResponse) ProtoMessage() {} | 
|  |  | 
|  | func (x *AddSkipTaskRuleResponse) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[17] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use AddSkipTaskRuleResponse.ProtoReflect.Descriptor instead. | 
|  | func (*AddSkipTaskRuleResponse) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{17} | 
|  | } | 
|  |  | 
|  | func (x *AddSkipTaskRuleResponse) GetRules() []*SkipTaskRule { | 
|  | if x != nil { | 
|  | return x.Rules | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // DeleteSkipTaskRuleRequest is a request to DeleteSkipTaskRule. | 
|  | type DeleteSkipTaskRuleRequest struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // ID of the rule to delete. | 
|  | Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // TODO(borenet): Where does this come from? | 
|  | } | 
|  |  | 
|  | func (x *DeleteSkipTaskRuleRequest) Reset() { | 
|  | *x = DeleteSkipTaskRuleRequest{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[18] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *DeleteSkipTaskRuleRequest) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*DeleteSkipTaskRuleRequest) ProtoMessage() {} | 
|  |  | 
|  | func (x *DeleteSkipTaskRuleRequest) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[18] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use DeleteSkipTaskRuleRequest.ProtoReflect.Descriptor instead. | 
|  | func (*DeleteSkipTaskRuleRequest) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{18} | 
|  | } | 
|  |  | 
|  | func (x *DeleteSkipTaskRuleRequest) GetId() string { | 
|  | if x != nil { | 
|  | return x.Id | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | // DeleteSkipTaskRuleResponse is a response returned from | 
|  | // DeleteSkipTaskRule. | 
|  | type DeleteSkipTaskRuleResponse struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | Rules []*SkipTaskRule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *DeleteSkipTaskRuleResponse) Reset() { | 
|  | *x = DeleteSkipTaskRuleResponse{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[19] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *DeleteSkipTaskRuleResponse) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*DeleteSkipTaskRuleResponse) ProtoMessage() {} | 
|  |  | 
|  | func (x *DeleteSkipTaskRuleResponse) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[19] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use DeleteSkipTaskRuleResponse.ProtoReflect.Descriptor instead. | 
|  | func (*DeleteSkipTaskRuleResponse) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{19} | 
|  | } | 
|  |  | 
|  | func (x *DeleteSkipTaskRuleResponse) GetRules() []*SkipTaskRule { | 
|  | if x != nil { | 
|  | return x.Rules | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | //  encapsulates all of the parameters which define the state of a | 
|  | // repo. | 
|  | type RepoState struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // Patch information, optional. | 
|  | Patch *RepoState_Patch `protobuf:"bytes,1,opt,name=patch,proto3" json:"patch,omitempty"` | 
|  | // Repository URL. | 
|  | Repo string `protobuf:"bytes,2,opt,name=repo,proto3" json:"repo,omitempty"` | 
|  | // Revision ID, ie. commit hash. | 
|  | Revision string `protobuf:"bytes,3,opt,name=revision,proto3" json:"revision,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *RepoState) Reset() { | 
|  | *x = RepoState{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[20] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *RepoState) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*RepoState) ProtoMessage() {} | 
|  |  | 
|  | func (x *RepoState) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[20] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use RepoState.ProtoReflect.Descriptor instead. | 
|  | func (*RepoState) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{20} | 
|  | } | 
|  |  | 
|  | func (x *RepoState) GetPatch() *RepoState_Patch { | 
|  | if x != nil { | 
|  | return x.Patch | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *RepoState) GetRepo() string { | 
|  | if x != nil { | 
|  | return x.Repo | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *RepoState) GetRevision() string { | 
|  | if x != nil { | 
|  | return x.Revision | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | // TaskKey is a struct used for identifying a Task instance. Note that more | 
|  | // than one Task may have the same TaskKey, eg. in the case of retries. | 
|  | type TaskKey struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // State of the repository for this task. | 
|  | RepoState *RepoState `protobuf:"bytes,1,opt,name=repo_state,json=repoState,proto3" json:"repo_state,omitempty"` | 
|  | // Name of the task. | 
|  | Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` | 
|  | // If this task is part of a force-triggered job, ID of the job. | 
|  | ForcedJobId string `protobuf:"bytes,3,opt,name=forced_job_id,json=forcedJobId,proto3" json:"forced_job_id,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *TaskKey) Reset() { | 
|  | *x = TaskKey{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[21] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *TaskKey) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*TaskKey) ProtoMessage() {} | 
|  |  | 
|  | func (x *TaskKey) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[21] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use TaskKey.ProtoReflect.Descriptor instead. | 
|  | func (*TaskKey) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{21} | 
|  | } | 
|  |  | 
|  | func (x *TaskKey) GetRepoState() *RepoState { | 
|  | if x != nil { | 
|  | return x.RepoState | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *TaskKey) GetName() string { | 
|  | if x != nil { | 
|  | return x.Name | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *TaskKey) GetForcedJobId() string { | 
|  | if x != nil { | 
|  | return x.ForcedJobId | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | // Task describes a single task. This must be kept in sync with types.Task. | 
|  | type Task struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // attempt is the attempt number of this task, starting with zero. | 
|  | Attempt int32 `protobuf:"varint,1,opt,name=attempt,proto3" json:"attempt,omitempty"` | 
|  | // commits are the commits which were tested in this Task. The list may | 
|  | // change due to backfilling/bisecting. | 
|  | Commits []string `protobuf:"bytes,2,rep,name=commits,proto3" json:"commits,omitempty"` | 
|  | // created is the creation timestamp. | 
|  | CreatedAt *timestamp.Timestamp `protobuf:"bytes,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` | 
|  | // db_modified is the time of the last successful call to TaskDB.PutTask/s | 
|  | // for this Task, or zero if the task is new. It is not related to the | 
|  | // ModifiedTs time of the associated Swarming task. | 
|  | DbModifiedAt *timestamp.Timestamp `protobuf:"bytes,4,opt,name=db_modified_at,json=dbModifiedAt,proto3" json:"db_modified_at,omitempty"` | 
|  | // finished is the time the task stopped running or expired from the queue, or | 
|  | // zero if the task is pending or running. | 
|  | FinishedAt *timestamp.Timestamp `protobuf:"bytes,5,opt,name=finished_at,json=finishedAt,proto3" json:"finished_at,omitempty"` | 
|  | // id is a generated unique identifier for this Task instance. Must be | 
|  | // URL-safe. | 
|  | Id string `protobuf:"bytes,6,opt,name=id,proto3" json:"id,omitempty"` | 
|  | // isolated_output is the isolated hash of any outputs produced by this Task. | 
|  | // Filled in when the task is completed. This field will not be set if the | 
|  | // Task does not correspond to a Swarming task. | 
|  | IsolatedOutput string `protobuf:"bytes,7,opt,name=isolated_output,json=isolatedOutput,proto3" json:"isolated_output,omitempty"` | 
|  | // jobs are the IDs of all Jobs which utilized this Task. | 
|  | Jobs []string `protobuf:"bytes,8,rep,name=jobs,proto3" json:"jobs,omitempty"` | 
|  | // max_attempts is the maximum number of attempts for this TaskSpec. | 
|  | MaxAttempts int32 `protobuf:"varint,9,opt,name=max_attempts,json=maxAttempts,proto3" json:"max_attempts,omitempty"` | 
|  | // parent_task_ids are IDs of tasks which satisfied this task's dependencies. | 
|  | ParentTaskIds []string `protobuf:"bytes,10,rep,name=parent_task_ids,json=parentTaskIds,proto3" json:"parent_task_ids,omitempty"` | 
|  | // properties contains key-value pairs from external sources. Both key and | 
|  | // value must be UTF-8 strings. Prefer a JavaScript identifier for key. Use | 
|  | // base64 encoding for binary data. | 
|  | Properties map[string]string `protobuf:"bytes,11,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` | 
|  | // retry_of is the ID of the task which this task is a retry of, if any. | 
|  | RetryOf string `protobuf:"bytes,12,opt,name=retry_of,json=retryOf,proto3" json:"retry_of,omitempty"` | 
|  | // started is the time the task started running, or zero if the task is | 
|  | // pending, or the same as Finished if the task never ran. | 
|  | StartedAt *timestamp.Timestamp `protobuf:"bytes,13,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` | 
|  | // status is the current task status, default TASK_STATUS_PENDING. | 
|  | Status TaskStatus `protobuf:"varint,14,opt,name=status,proto3,enum=task_scheduler.rpc.TaskStatus" json:"status,omitempty"` | 
|  | // swarming_bot_id is the ID of the Swarming bot that ran this task. This | 
|  | // field will not be set if the Task does not correspond to a Swarming task or | 
|  | // if the task is still pending. | 
|  | SwarmingBotId string `protobuf:"bytes,15,opt,name=swarming_bot_id,json=swarmingBotId,proto3" json:"swarming_bot_id,omitempty"` | 
|  | // swarming_task_id is the Swarming task ID. This field will not be set if the | 
|  | // Task does not correspond to a Swarming task. | 
|  | SwarmingTaskId string `protobuf:"bytes,16,opt,name=swarming_task_id,json=swarmingTaskId,proto3" json:"swarming_task_id,omitempty"` | 
|  | // task_key is a struct which describes aspects of the Task related | 
|  | // to the current state of the repo when it ran, and about the Task | 
|  | // itself. | 
|  | TaskKey *TaskKey `protobuf:"bytes,17,opt,name=task_key,json=taskKey,proto3" json:"task_key,omitempty"` | 
|  | // stats provides statistics about the task. | 
|  | Stats *TaskStats `protobuf:"bytes,18,opt,name=stats,proto3" json:"stats,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *Task) Reset() { | 
|  | *x = Task{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[22] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *Task) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*Task) ProtoMessage() {} | 
|  |  | 
|  | func (x *Task) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[22] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use Task.ProtoReflect.Descriptor instead. | 
|  | func (*Task) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{22} | 
|  | } | 
|  |  | 
|  | func (x *Task) GetAttempt() int32 { | 
|  | if x != nil { | 
|  | return x.Attempt | 
|  | } | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | func (x *Task) GetCommits() []string { | 
|  | if x != nil { | 
|  | return x.Commits | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *Task) GetCreatedAt() *timestamp.Timestamp { | 
|  | if x != nil { | 
|  | return x.CreatedAt | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *Task) GetDbModifiedAt() *timestamp.Timestamp { | 
|  | if x != nil { | 
|  | return x.DbModifiedAt | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *Task) GetFinishedAt() *timestamp.Timestamp { | 
|  | if x != nil { | 
|  | return x.FinishedAt | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *Task) GetId() string { | 
|  | if x != nil { | 
|  | return x.Id | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *Task) GetIsolatedOutput() string { | 
|  | if x != nil { | 
|  | return x.IsolatedOutput | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *Task) GetJobs() []string { | 
|  | if x != nil { | 
|  | return x.Jobs | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *Task) GetMaxAttempts() int32 { | 
|  | if x != nil { | 
|  | return x.MaxAttempts | 
|  | } | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | func (x *Task) GetParentTaskIds() []string { | 
|  | if x != nil { | 
|  | return x.ParentTaskIds | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *Task) GetProperties() map[string]string { | 
|  | if x != nil { | 
|  | return x.Properties | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *Task) GetRetryOf() string { | 
|  | if x != nil { | 
|  | return x.RetryOf | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *Task) GetStartedAt() *timestamp.Timestamp { | 
|  | if x != nil { | 
|  | return x.StartedAt | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *Task) GetStatus() TaskStatus { | 
|  | if x != nil { | 
|  | return x.Status | 
|  | } | 
|  | return TaskStatus_TASK_STATUS_PENDING | 
|  | } | 
|  |  | 
|  | func (x *Task) GetSwarmingBotId() string { | 
|  | if x != nil { | 
|  | return x.SwarmingBotId | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *Task) GetSwarmingTaskId() string { | 
|  | if x != nil { | 
|  | return x.SwarmingTaskId | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *Task) GetTaskKey() *TaskKey { | 
|  | if x != nil { | 
|  | return x.TaskKey | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *Task) GetStats() *TaskStats { | 
|  | if x != nil { | 
|  | return x.Stats | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // TaskDependencies represents dependencies of a task. | 
|  | type TaskDependencies struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // Name of the task. | 
|  | Task string `protobuf:"bytes,1,opt,name=task,proto3" json:"task,omitempty"` | 
|  | // Names of the tasks which this task depends on. | 
|  | Dependencies []string `protobuf:"bytes,2,rep,name=dependencies,proto3" json:"dependencies,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *TaskDependencies) Reset() { | 
|  | *x = TaskDependencies{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[23] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *TaskDependencies) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*TaskDependencies) ProtoMessage() {} | 
|  |  | 
|  | func (x *TaskDependencies) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[23] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use TaskDependencies.ProtoReflect.Descriptor instead. | 
|  | func (*TaskDependencies) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{23} | 
|  | } | 
|  |  | 
|  | func (x *TaskDependencies) GetTask() string { | 
|  | if x != nil { | 
|  | return x.Task | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *TaskDependencies) GetDependencies() []string { | 
|  | if x != nil { | 
|  | return x.Dependencies | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // TaskSummary provides a subset of the information of a Task. | 
|  | type TaskSummary struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | Id             string     `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` | 
|  | Attempt        int32      `protobuf:"varint,2,opt,name=attempt,proto3" json:"attempt,omitempty"` | 
|  | MaxAttempts    int32      `protobuf:"varint,3,opt,name=max_attempts,json=maxAttempts,proto3" json:"max_attempts,omitempty"` | 
|  | Status         TaskStatus `protobuf:"varint,4,opt,name=status,proto3,enum=task_scheduler.rpc.TaskStatus" json:"status,omitempty"` | 
|  | SwarmingTaskId string     `protobuf:"bytes,5,opt,name=swarming_task_id,json=swarmingTaskId,proto3" json:"swarming_task_id,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *TaskSummary) Reset() { | 
|  | *x = TaskSummary{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[24] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *TaskSummary) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*TaskSummary) ProtoMessage() {} | 
|  |  | 
|  | func (x *TaskSummary) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[24] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use TaskSummary.ProtoReflect.Descriptor instead. | 
|  | func (*TaskSummary) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{24} | 
|  | } | 
|  |  | 
|  | func (x *TaskSummary) GetId() string { | 
|  | if x != nil { | 
|  | return x.Id | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *TaskSummary) GetAttempt() int32 { | 
|  | if x != nil { | 
|  | return x.Attempt | 
|  | } | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | func (x *TaskSummary) GetMaxAttempts() int32 { | 
|  | if x != nil { | 
|  | return x.MaxAttempts | 
|  | } | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | func (x *TaskSummary) GetStatus() TaskStatus { | 
|  | if x != nil { | 
|  | return x.Status | 
|  | } | 
|  | return TaskStatus_TASK_STATUS_PENDING | 
|  | } | 
|  |  | 
|  | func (x *TaskSummary) GetSwarmingTaskId() string { | 
|  | if x != nil { | 
|  | return x.SwarmingTaskId | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | // TODO: Make optional. | 
|  | // TODO: Make optional. | 
|  | // TaskSummaries groups TaskSummaries which have the same TaskSpec name. | 
|  | type TaskSummaries struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | Name  string         `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` | 
|  | Tasks []*TaskSummary `protobuf:"bytes,2,rep,name=tasks,proto3" json:"tasks,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *TaskSummaries) Reset() { | 
|  | *x = TaskSummaries{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[25] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *TaskSummaries) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*TaskSummaries) ProtoMessage() {} | 
|  |  | 
|  | func (x *TaskSummaries) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[25] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use TaskSummaries.ProtoReflect.Descriptor instead. | 
|  | func (*TaskSummaries) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{25} | 
|  | } | 
|  |  | 
|  | func (x *TaskSummaries) GetName() string { | 
|  | if x != nil { | 
|  | return x.Name | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *TaskSummaries) GetTasks() []*TaskSummary { | 
|  | if x != nil { | 
|  | return x.Tasks | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // TaskDimensions contains the dimensions required for a given task. | 
|  | type TaskDimensions struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // task_name is the name of the task. | 
|  | TaskName string `protobuf:"bytes,1,opt,name=task_name,json=taskName,proto3" json:"task_name,omitempty"` | 
|  | // dimensions are the Swarming bot dimensions requested by the task. | 
|  | Dimensions []string `protobuf:"bytes,2,rep,name=dimensions,proto3" json:"dimensions,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *TaskDimensions) Reset() { | 
|  | *x = TaskDimensions{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[26] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *TaskDimensions) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*TaskDimensions) ProtoMessage() {} | 
|  |  | 
|  | func (x *TaskDimensions) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[26] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use TaskDimensions.ProtoReflect.Descriptor instead. | 
|  | func (*TaskDimensions) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{26} | 
|  | } | 
|  |  | 
|  | func (x *TaskDimensions) GetTaskName() string { | 
|  | if x != nil { | 
|  | return x.TaskName | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *TaskDimensions) GetDimensions() []string { | 
|  | if x != nil { | 
|  | return x.Dimensions | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // TaskStats provides statistics about a task. | 
|  | type TaskStats struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // total_overhead_s is the total amount of overhead for the task. | 
|  | TotalOverheadS float32 `protobuf:"fixed32,1,opt,name=total_overhead_s,json=totalOverheadS,proto3" json:"total_overhead_s,omitempty"` | 
|  | // download_overhead_s is the number of seconds spent downloading assets | 
|  | // before running the task. | 
|  | DownloadOverheadS float32 `protobuf:"fixed32,2,opt,name=download_overhead_s,json=downloadOverheadS,proto3" json:"download_overhead_s,omitempty"` | 
|  | // upload_overhead_s is the number of seconds spent uploading assets | 
|  | // before running the task. | 
|  | UploadOverheadS float32 `protobuf:"fixed32,3,opt,name=upload_overhead_s,json=uploadOverheadS,proto3" json:"upload_overhead_s,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *TaskStats) Reset() { | 
|  | *x = TaskStats{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[27] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *TaskStats) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*TaskStats) ProtoMessage() {} | 
|  |  | 
|  | func (x *TaskStats) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[27] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use TaskStats.ProtoReflect.Descriptor instead. | 
|  | func (*TaskStats) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{27} | 
|  | } | 
|  |  | 
|  | func (x *TaskStats) GetTotalOverheadS() float32 { | 
|  | if x != nil { | 
|  | return x.TotalOverheadS | 
|  | } | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | func (x *TaskStats) GetDownloadOverheadS() float32 { | 
|  | if x != nil { | 
|  | return x.DownloadOverheadS | 
|  | } | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | func (x *TaskStats) GetUploadOverheadS() float32 { | 
|  | if x != nil { | 
|  | return x.UploadOverheadS | 
|  | } | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | // Job represents a set of Tasks which are executed as part of a larger effort. | 
|  | // This must be kept in sync with types.Job. | 
|  | type Job struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // buildbucket_build_id is the ID of the Buildbucket build with which this | 
|  | // Job is associated, if one exists. | 
|  | BuildbucketBuildId string `protobuf:"bytes,1,opt,name=buildbucket_build_id,json=buildbucketBuildId,proto3" json:"buildbucket_build_id,omitempty"` | 
|  | // buildbucket_lease_key is the lease key for running a Buildbucket build. | 
|  | // TODO(borenet): Maybe this doesn't belong in the DB. | 
|  | BuildbucketLeaseKey string `protobuf:"bytes,2,opt,name=buildbucket_lease_key,json=buildbucketLeaseKey,proto3" json:"buildbucket_lease_key,omitempty"` | 
|  | // created_at is the creation timestamp. This property should never change | 
|  | // for a given Job instance. | 
|  | CreatedAt *timestamp.Timestamp `protobuf:"bytes,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` | 
|  | // db_modified_at is the time of the last successful call to JobDB.PutJob/s | 
|  | // for this Job, or zero if the job is new. | 
|  | DbModifiedAt *timestamp.Timestamp `protobuf:"bytes,4,opt,name=db_modified_at,json=dbModifiedAt,proto3" json:"db_modified_at,omitempty"` | 
|  | // dependencies maps out the DAG of TaskSpec names upon which this Job | 
|  | // depends. Keys are TaskSpec names and values are slices of TaskSpec | 
|  | // names indicating which TaskSpecs that TaskSpec depends on. This | 
|  | // property should never change for a given Job instance. | 
|  | Dependencies []*TaskDependencies `protobuf:"bytes,5,rep,name=dependencies,proto3" json:"dependencies,omitempty"` | 
|  | // finished_at is the time at which all of the Job's dependencies finished, | 
|  | // successfully or not. | 
|  | FinishedAt *timestamp.Timestamp `protobuf:"bytes,6,opt,name=finished_at,json=finishedAt,proto3" json:"finished_at,omitempty"` | 
|  | // id is a unique identifier for the Job. This property should never | 
|  | // change for a given Job instance, after its initial insertion into the | 
|  | // DB. | 
|  | Id string `protobuf:"bytes,7,opt,name=id,proto3" json:"id,omitempty"` | 
|  | // is_force indicates whether this is a manually-triggered Job, as | 
|  | // opposed to a normally scheduled one, or a try job. | 
|  | IsForce bool `protobuf:"varint,8,opt,name=is_force,json=isForce,proto3" json:"is_force,omitempty"` | 
|  | // name is a human-friendly descriptive name for the Job. All Jobs | 
|  | // generated from the same JobSpec have the same name. This property | 
|  | // should never change for a given Job instance. | 
|  | Name string `protobuf:"bytes,9,opt,name=name,proto3" json:"name,omitempty"` | 
|  | // priority is an indicator of the relative priority of this Job. | 
|  | Priority float32 `protobuf:"fixed32,10,opt,name=priority,proto3" json:"priority,omitempty"` | 
|  | //  is the current state of the repository for this Job. | 
|  | RepoState *RepoState `protobuf:"bytes,11,opt,name=repo_state,json=repoState,proto3" json:"repo_state,omitempty"` | 
|  | // requested is the time at which this Job was requested. This is a | 
|  | // commit timestamp, tryjob request creation timestamp, time at which | 
|  | // the server received a force trigger job request, etc. | 
|  | RequestedAt *timestamp.Timestamp `protobuf:"bytes,12,opt,name=requested_at,json=requestedAt,proto3" json:"requested_at,omitempty"` | 
|  | // status is the current Job status, default JOB_STATUS_IN_PROGRESS. | 
|  | Status JobStatus `protobuf:"varint,13,opt,name=status,proto3,enum=task_scheduler.rpc.JobStatus" json:"status,omitempty"` | 
|  | // tasks are the Task instances which satisfied the dependencies of | 
|  | // the Job. Keys are TaskSpec names and values are slices of TaskSummary | 
|  | // instances describing the Tasks. | 
|  | Tasks []*TaskSummaries `protobuf:"bytes,14,rep,name=tasks,proto3" json:"tasks,omitempty"` | 
|  | // taskDimensions are the dimensions of the tasks needed by this job. | 
|  | TaskDimensions []*TaskDimensions `protobuf:"bytes,15,rep,name=task_dimensions,json=taskDimensions,proto3" json:"task_dimensions,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *Job) Reset() { | 
|  | *x = Job{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[28] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *Job) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*Job) ProtoMessage() {} | 
|  |  | 
|  | func (x *Job) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[28] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use Job.ProtoReflect.Descriptor instead. | 
|  | func (*Job) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{28} | 
|  | } | 
|  |  | 
|  | func (x *Job) GetBuildbucketBuildId() string { | 
|  | if x != nil { | 
|  | return x.BuildbucketBuildId | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *Job) GetBuildbucketLeaseKey() string { | 
|  | if x != nil { | 
|  | return x.BuildbucketLeaseKey | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *Job) GetCreatedAt() *timestamp.Timestamp { | 
|  | if x != nil { | 
|  | return x.CreatedAt | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *Job) GetDbModifiedAt() *timestamp.Timestamp { | 
|  | if x != nil { | 
|  | return x.DbModifiedAt | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *Job) GetDependencies() []*TaskDependencies { | 
|  | if x != nil { | 
|  | return x.Dependencies | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *Job) GetFinishedAt() *timestamp.Timestamp { | 
|  | if x != nil { | 
|  | return x.FinishedAt | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *Job) GetId() string { | 
|  | if x != nil { | 
|  | return x.Id | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *Job) GetIsForce() bool { | 
|  | if x != nil { | 
|  | return x.IsForce | 
|  | } | 
|  | return false | 
|  | } | 
|  |  | 
|  | func (x *Job) GetName() string { | 
|  | if x != nil { | 
|  | return x.Name | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *Job) GetPriority() float32 { | 
|  | if x != nil { | 
|  | return x.Priority | 
|  | } | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | func (x *Job) GetRepoState() *RepoState { | 
|  | if x != nil { | 
|  | return x.RepoState | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *Job) GetRequestedAt() *timestamp.Timestamp { | 
|  | if x != nil { | 
|  | return x.RequestedAt | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *Job) GetStatus() JobStatus { | 
|  | if x != nil { | 
|  | return x.Status | 
|  | } | 
|  | return JobStatus_JOB_STATUS_IN_PROGRESS | 
|  | } | 
|  |  | 
|  | func (x *Job) GetTasks() []*TaskSummaries { | 
|  | if x != nil { | 
|  | return x.Tasks | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | func (x *Job) GetTaskDimensions() []*TaskDimensions { | 
|  | if x != nil { | 
|  | return x.TaskDimensions | 
|  | } | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // Patch describes a patch which may be applied to a code checkout. | 
|  | type RepoState_Patch struct { | 
|  | state         protoimpl.MessageState | 
|  | sizeCache     protoimpl.SizeCache | 
|  | unknownFields protoimpl.UnknownFields | 
|  |  | 
|  | // Issue ID of the Patch. | 
|  | Issue string `protobuf:"bytes,1,opt,name=issue,proto3" json:"issue,omitempty"` | 
|  | // URL of the repository where this patch may be applied. | 
|  | PatchRepo string `protobuf:"bytes,2,opt,name=patch_repo,json=patchRepo,proto3" json:"patch_repo,omitempty"` | 
|  | // Patch set ID. | 
|  | Patchset string `protobuf:"bytes,3,opt,name=patchset,proto3" json:"patchset,omitempty"` | 
|  | // URL of the code review server. | 
|  | Server string `protobuf:"bytes,4,opt,name=server,proto3" json:"server,omitempty"` | 
|  | } | 
|  |  | 
|  | func (x *RepoState_Patch) Reset() { | 
|  | *x = RepoState_Patch{} | 
|  | if protoimpl.UnsafeEnabled { | 
|  | mi := &file_rpc_proto_msgTypes[29] | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | } | 
|  |  | 
|  | func (x *RepoState_Patch) String() string { | 
|  | return protoimpl.X.MessageStringOf(x) | 
|  | } | 
|  |  | 
|  | func (*RepoState_Patch) ProtoMessage() {} | 
|  |  | 
|  | func (x *RepoState_Patch) ProtoReflect() protoreflect.Message { | 
|  | mi := &file_rpc_proto_msgTypes[29] | 
|  | if protoimpl.UnsafeEnabled && x != nil { | 
|  | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 
|  | if ms.LoadMessageInfo() == nil { | 
|  | ms.StoreMessageInfo(mi) | 
|  | } | 
|  | return ms | 
|  | } | 
|  | return mi.MessageOf(x) | 
|  | } | 
|  |  | 
|  | // Deprecated: Use RepoState_Patch.ProtoReflect.Descriptor instead. | 
|  | func (*RepoState_Patch) Descriptor() ([]byte, []int) { | 
|  | return file_rpc_proto_rawDescGZIP(), []int{20, 0} | 
|  | } | 
|  |  | 
|  | func (x *RepoState_Patch) GetIssue() string { | 
|  | if x != nil { | 
|  | return x.Issue | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *RepoState_Patch) GetPatchRepo() string { | 
|  | if x != nil { | 
|  | return x.PatchRepo | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *RepoState_Patch) GetPatchset() string { | 
|  | if x != nil { | 
|  | return x.Patchset | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | func (x *RepoState_Patch) GetServer() string { | 
|  | if x != nil { | 
|  | return x.Server | 
|  | } | 
|  | return "" | 
|  | } | 
|  |  | 
|  | var File_rpc_proto protoreflect.FileDescriptor | 
|  |  | 
|  | var file_rpc_proto_rawDesc = []byte{ | 
|  | 0x0a, 0x09, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x74, 0x61, 0x73, | 
|  | 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x1a, | 
|  | 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, | 
|  | 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, | 
|  | 0x22, 0x48, 0x0a, 0x0a, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x12, 0x19, | 
|  | 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, | 
|  | 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, | 
|  | 0x6d, 0x69, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, | 
|  | 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x48, 0x61, 0x73, 0x68, 0x22, 0x48, 0x0a, 0x12, 0x54, 0x72, | 
|  | 0x69, 0x67, 0x67, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, | 
|  | 0x12, 0x32, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, | 
|  | 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, | 
|  | 0x72, 0x70, 0x63, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x52, 0x04, | 
|  | 0x6a, 0x6f, 0x62, 0x73, 0x22, 0x2e, 0x0a, 0x13, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4a, | 
|  | 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6a, | 
|  | 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6a, 0x6f, | 
|  | 0x62, 0x49, 0x64, 0x73, 0x22, 0x1f, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, | 
|  | 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, | 
|  | 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3b, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, | 
|  | 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x01, | 
|  | 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, | 
|  | 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x03, 0x6a, | 
|  | 0x6f, 0x62, 0x22, 0x22, 0x0a, 0x10, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x52, | 
|  | 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, | 
|  | 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x11, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, | 
|  | 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x03, 0x6a, | 
|  | 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, | 
|  | 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4a, 0x6f, | 
|  | 0x62, 0x52, 0x03, 0x6a, 0x6f, 0x62, 0x22, 0xda, 0x05, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, 0x63, | 
|  | 0x68, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x14, | 
|  | 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, | 
|  | 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x75, 0x69, 0x6c, | 
|  | 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x37, | 
|  | 0x0a, 0x18, 0x68, 0x61, 0x73, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, | 
|  | 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, | 
|  | 0x52, 0x15, 0x68, 0x61, 0x73, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, | 
|  | 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x66, 0x6f, | 
|  | 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x46, 0x6f, 0x72, | 
|  | 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x68, 0x61, 0x73, 0x5f, 0x69, 0x73, 0x5f, 0x66, 0x6f, 0x72, | 
|  | 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x49, 0x73, 0x46, | 
|  | 0x6f, 0x72, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x73, 0x75, 0x65, 0x18, 0x05, 0x20, | 
|  | 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x73, 0x73, 0x75, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, | 
|  | 0x73, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, | 
|  | 0x61, 0x73, 0x49, 0x73, 0x73, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, | 
|  | 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x68, | 
|  | 0x61, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, | 
|  | 0x61, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x74, 0x63, 0x68, 0x73, | 
|  | 0x65, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x74, 0x63, 0x68, 0x73, | 
|  | 0x65, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x68, 0x61, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x63, 0x68, 0x73, | 
|  | 0x65, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x68, 0x61, 0x73, 0x50, 0x61, 0x74, | 
|  | 0x63, 0x68, 0x73, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x0b, 0x20, | 
|  | 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x68, 0x61, 0x73, | 
|  | 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, | 
|  | 0x52, 0x65, 0x70, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, | 
|  | 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, | 
|  | 0x12, 0x21, 0x0a, 0x0c, 0x68, 0x61, 0x73, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, | 
|  | 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x68, 0x61, 0x73, 0x52, 0x65, 0x76, 0x69, 0x73, | 
|  | 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, | 
|  | 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, | 
|  | 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, | 
|  | 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, | 
|  | 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, | 
|  | 0x68, 0x61, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x74, 0x69, 0x6d, | 
|  | 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, | 
|  | 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, | 
|  | 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x53, | 
|  | 0x74, 0x61, 0x72, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x68, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, | 
|  | 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, | 
|  | 0x73, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x35, 0x0a, 0x08, 0x74, 0x69, | 
|  | 0x6d, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, | 
|  | 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, | 
|  | 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x6e, | 
|  | 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x68, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x6e, | 
|  | 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x54, 0x69, 0x6d, 0x65, | 
|  | 0x45, 0x6e, 0x64, 0x22, 0x41, 0x0a, 0x12, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4a, 0x6f, 0x62, | 
|  | 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x6a, 0x6f, 0x62, | 
|  | 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, | 
|  | 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4a, 0x6f, 0x62, | 
|  | 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0x45, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, | 
|  | 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, | 
|  | 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, | 
|  | 0x75, 0x64, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, | 
|  | 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x22, 0x3f, 0x0a, | 
|  | 0x0f, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, | 
|  | 0x12, 0x2c, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, | 
|  | 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, | 
|  | 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x22, 0xef, | 
|  | 0x04, 0x0a, 0x12, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, | 
|  | 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, | 
|  | 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x12, | 
|  | 0x1f, 0x0a, 0x0b, 0x68, 0x61, 0x73, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x18, 0x02, | 
|  | 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, | 
|  | 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x73, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, | 
|  | 0x05, 0x69, 0x73, 0x73, 0x75, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x69, 0x73, | 
|  | 0x73, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x49, 0x73, | 
|  | 0x73, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, | 
|  | 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x68, 0x61, 0x73, 0x5f, 0x6e, | 
|  | 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, 0x4e, 0x61, | 
|  | 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x74, 0x63, 0x68, 0x73, 0x65, 0x74, 0x18, 0x07, | 
|  | 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x74, 0x63, 0x68, 0x73, 0x65, 0x74, 0x12, 0x21, | 
|  | 0x0a, 0x0c, 0x68, 0x61, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x63, 0x68, 0x73, 0x65, 0x74, 0x18, 0x08, | 
|  | 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x68, 0x61, 0x73, 0x50, 0x61, 0x74, 0x63, 0x68, 0x73, 0x65, | 
|  | 0x74, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, | 
|  | 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x68, 0x61, 0x73, 0x5f, 0x72, 0x65, 0x70, | 
|  | 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, 0x52, 0x65, 0x70, 0x6f, | 
|  | 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, | 
|  | 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, | 
|  | 0x68, 0x61, 0x73, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, | 
|  | 0x28, 0x08, 0x52, 0x0b, 0x68, 0x61, 0x73, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, | 
|  | 0x36, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, | 
|  | 0x1e, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, | 
|  | 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, | 
|  | 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f, 0x73, | 
|  | 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x73, | 
|  | 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, | 
|  | 0x74, 0x61, 0x72, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, | 
|  | 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, | 
|  | 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, | 
|  | 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x68, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, | 
|  | 0x61, 0x72, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x54, 0x69, | 
|  | 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x35, 0x0a, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x5f, | 
|  | 0x65, 0x6e, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, | 
|  | 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, | 
|  | 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x6e, 0x64, 0x12, 0x20, | 
|  | 0x0a, 0x0c, 0x68, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x12, | 
|  | 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x45, 0x6e, 0x64, | 
|  | 0x22, 0x45, 0x0a, 0x13, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, | 
|  | 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, | 
|  | 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, | 
|  | 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x73, 0x6b, | 
|  | 0x52, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x6b, | 
|  | 0x69, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, | 
|  | 0x73, 0x74, 0x22, 0xa7, 0x01, 0x0a, 0x0c, 0x53, 0x6b, 0x69, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x52, | 
|  | 0x75, 0x6c, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, | 
|  | 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x65, 0x64, 0x42, 0x79, 0x12, 0x2c, | 
|  | 0x0a, 0x12, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x70, 0x61, 0x74, 0x74, | 
|  | 0x65, 0x72, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x74, 0x61, 0x73, 0x6b, | 
|  | 0x53, 0x70, 0x65, 0x63, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, | 
|  | 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, | 
|  | 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, | 
|  | 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, | 
|  | 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, | 
|  | 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x52, 0x0a, 0x18, | 
|  | 0x47, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x73, | 
|  | 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, | 
|  | 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, | 
|  | 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6b, 0x69, | 
|  | 0x70, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, | 
|  | 0x22, 0x96, 0x01, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x53, 0x6b, 0x69, 0x70, 0x54, 0x61, 0x73, 0x6b, | 
|  | 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x74, | 
|  | 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, | 
|  | 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x74, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, | 
|  | 0x63, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, | 
|  | 0x6d, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, | 
|  | 0x69, 0x74, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, | 
|  | 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, | 
|  | 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, | 
|  | 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x51, 0x0a, 0x17, 0x41, 0x64, 0x64, | 
|  | 0x53, 0x6b, 0x69, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, | 
|  | 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, | 
|  | 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, | 
|  | 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6b, 0x69, 0x70, 0x54, 0x61, 0x73, | 
|  | 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x2b, 0x0a, 0x19, | 
|  | 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x75, | 
|  | 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, | 
|  | 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x54, 0x0a, 0x1a, 0x44, 0x65, 0x6c, | 
|  | 0x65, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x52, | 
|  | 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, | 
|  | 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, | 
|  | 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6b, 0x69, 0x70, | 
|  | 0x54, 0x61, 0x73, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, | 
|  | 0xe8, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x70, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x39, 0x0a, | 
|  | 0x05, 0x70, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, | 
|  | 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, | 
|  | 0x63, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x61, 0x74, 0x63, | 
|  | 0x68, 0x52, 0x05, 0x70, 0x61, 0x74, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, | 
|  | 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x1a, 0x0a, 0x08, | 
|  | 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, | 
|  | 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x70, 0x0a, 0x05, 0x50, 0x61, 0x74, 0x63, | 
|  | 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x73, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, | 
|  | 0x52, 0x05, 0x69, 0x73, 0x73, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x74, 0x63, 0x68, | 
|  | 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x74, | 
|  | 0x63, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x74, 0x63, 0x68, 0x73, | 
|  | 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x74, 0x63, 0x68, 0x73, | 
|  | 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, | 
|  | 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x7f, 0x0a, 0x07, 0x54, 0x61, | 
|  | 0x73, 0x6b, 0x4b, 0x65, 0x79, 0x12, 0x3c, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x73, 0x74, | 
|  | 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x61, 0x73, 0x6b, | 
|  | 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, | 
|  | 0x65, 0x70, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x53, 0x74, | 
|  | 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, | 
|  | 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x66, 0x6f, 0x72, 0x63, 0x65, | 
|  | 0x64, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, | 
|  | 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x49, 0x64, 0x22, 0xe2, 0x06, 0x0a, 0x04, | 
|  | 0x54, 0x61, 0x73, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x18, | 
|  | 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x12, 0x18, | 
|  | 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, | 
|  | 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, | 
|  | 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, | 
|  | 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, | 
|  | 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, | 
|  | 0x64, 0x41, 0x74, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x62, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, | 
|  | 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, | 
|  | 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, | 
|  | 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x64, 0x62, 0x4d, 0x6f, 0x64, 0x69, 0x66, | 
|  | 0x69, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, | 
|  | 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, | 
|  | 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, | 
|  | 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, | 
|  | 0x41, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, | 
|  | 0x69, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6f, | 
|  | 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x73, 0x6f, | 
|  | 0x6c, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6a, | 
|  | 0x6f, 0x62, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x12, | 
|  | 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, | 
|  | 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, | 
|  | 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x61, 0x73, | 
|  | 0x6b, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x72, | 
|  | 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x12, 0x48, 0x0a, 0x0a, 0x70, 0x72, | 
|  | 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, | 
|  | 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, | 
|  | 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, | 
|  | 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, | 
|  | 0x74, 0x69, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x6f, 0x66, | 
|  | 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x74, 0x72, 0x79, 0x4f, 0x66, 0x12, | 
|  | 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0d, 0x20, | 
|  | 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, | 
|  | 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, | 
|  | 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x73, 0x74, | 
|  | 0x61, 0x74, 0x75, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x74, 0x61, 0x73, | 
|  | 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, | 
|  | 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, | 
|  | 0x75, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x62, | 
|  | 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x77, 0x61, | 
|  | 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x77, | 
|  | 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x10, | 
|  | 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x54, 0x61, | 
|  | 0x73, 0x6b, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x6b, 0x65, 0x79, | 
|  | 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, | 
|  | 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x73, 0x6b, | 
|  | 0x4b, 0x65, 0x79, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x4b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, | 
|  | 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x61, | 
|  | 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, | 
|  | 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, | 
|  | 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, | 
|  | 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, | 
|  | 0x22, 0x4a, 0x0a, 0x10, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, | 
|  | 0x63, 0x69, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, | 
|  | 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x65, 0x70, 0x65, | 
|  | 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, | 
|  | 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0xbc, 0x01, 0x0a, | 
|  | 0x0b, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, | 
|  | 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, | 
|  | 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x61, | 
|  | 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x74, | 
|  | 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, | 
|  | 0x78, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x06, 0x73, 0x74, 0x61, | 
|  | 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x74, 0x61, 0x73, 0x6b, | 
|  | 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, | 
|  | 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, | 
|  | 0x73, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, | 
|  | 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x77, 0x61, | 
|  | 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x5a, 0x0a, 0x0d, 0x54, | 
|  | 0x61, 0x73, 0x6b, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, | 
|  | 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, | 
|  | 0x12, 0x35, 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, | 
|  | 0x1f, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, | 
|  | 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, | 
|  | 0x52, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x22, 0x4d, 0x0a, 0x0e, 0x54, 0x61, 0x73, 0x6b, 0x44, | 
|  | 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x73, | 
|  | 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, | 
|  | 0x73, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, | 
|  | 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x69, 0x6d, 0x65, | 
|  | 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x91, 0x01, 0x0a, 0x09, 0x54, 0x61, 0x73, 0x6b, 0x53, | 
|  | 0x74, 0x61, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6f, 0x76, | 
|  | 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, | 
|  | 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x53, 0x12, 0x2e, | 
|  | 0x0a, 0x13, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x68, | 
|  | 0x65, 0x61, 0x64, 0x5f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x64, 0x6f, 0x77, | 
|  | 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x53, 0x12, 0x2a, | 
|  | 0x0a, 0x11, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, | 
|  | 0x64, 0x5f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x75, 0x70, 0x6c, 0x6f, 0x61, | 
|  | 0x64, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x53, 0x22, 0x84, 0x06, 0x0a, 0x03, 0x4a, | 
|  | 0x6f, 0x62, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, | 
|  | 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, | 
|  | 0x52, 0x12, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x75, 0x69, | 
|  | 0x6c, 0x64, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, | 
|  | 0x6b, 0x65, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, | 
|  | 0x01, 0x28, 0x09, 0x52, 0x13, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, | 
|  | 0x4c, 0x65, 0x61, 0x73, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, | 
|  | 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, | 
|  | 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, | 
|  | 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, | 
|  | 0x64, 0x41, 0x74, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x62, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, | 
|  | 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, | 
|  | 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, | 
|  | 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x64, 0x62, 0x4d, 0x6f, 0x64, 0x69, 0x66, | 
|  | 0x69, 0x65, 0x64, 0x41, 0x74, 0x12, 0x48, 0x0a, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, | 
|  | 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x61, | 
|  | 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, | 
|  | 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, | 
|  | 0x73, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, | 
|  | 0x3b, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, | 
|  | 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, | 
|  | 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, | 
|  | 0x52, 0x0a, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x41, 0x74, 0x12, 0x0e, 0x0a, 0x02, | 
|  | 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, | 
|  | 0x69, 0x73, 0x5f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, | 
|  | 0x69, 0x73, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, | 
|  | 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, | 
|  | 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x70, | 
|  | 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x5f, | 
|  | 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x61, | 
|  | 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, | 
|  | 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x72, 0x65, 0x70, 0x6f, | 
|  | 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, | 
|  | 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, | 
|  | 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, | 
|  | 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, | 
|  | 0x65, 0x64, 0x41, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0d, | 
|  | 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, | 
|  | 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, | 
|  | 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x05, 0x74, | 
|  | 0x61, 0x73, 0x6b, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x74, 0x61, 0x73, | 
|  | 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, | 
|  | 0x54, 0x61, 0x73, 0x6b, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x52, 0x05, 0x74, | 
|  | 0x61, 0x73, 0x6b, 0x73, 0x12, 0x4b, 0x0a, 0x0f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x64, 0x69, 0x6d, | 
|  | 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, | 
|  | 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, | 
|  | 0x70, 0x63, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, | 
|  | 0x73, 0x52, 0x0e, 0x74, 0x61, 0x73, 0x6b, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, | 
|  | 0x73, 0x2a, 0x88, 0x01, 0x0a, 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, | 
|  | 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x53, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, | 
|  | 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x53, | 
|  | 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, | 
|  | 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x53, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, | 
|  | 0x53, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x54, | 
|  | 0x41, 0x53, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, | 
|  | 0x52, 0x45, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x41, 0x53, 0x4b, 0x5f, 0x53, 0x54, 0x41, | 
|  | 0x54, 0x55, 0x53, 0x5f, 0x4d, 0x49, 0x53, 0x48, 0x41, 0x50, 0x10, 0x04, 0x2a, 0x87, 0x01, 0x0a, | 
|  | 0x09, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x16, 0x4a, 0x4f, | 
|  | 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, | 
|  | 0x52, 0x45, 0x53, 0x53, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, | 
|  | 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x16, | 
|  | 0x0a, 0x12, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, | 
|  | 0x4c, 0x55, 0x52, 0x45, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, | 
|  | 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4d, 0x49, 0x53, 0x48, 0x41, 0x50, 0x10, 0x03, 0x12, 0x17, 0x0a, | 
|  | 0x13, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, | 
|  | 0x45, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x32, 0x82, 0x07, 0x0a, 0x14, 0x54, 0x61, 0x73, 0x6b, 0x53, | 
|  | 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, | 
|  | 0x5e, 0x0a, 0x0b, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x26, | 
|  | 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, | 
|  | 0x72, 0x70, 0x63, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x73, 0x52, | 
|  | 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, | 
|  | 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x72, 0x69, 0x67, | 
|  | 0x67, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, | 
|  | 0x4f, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x21, 0x2e, 0x74, 0x61, 0x73, 0x6b, | 
|  | 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x47, | 
|  | 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x74, | 
|  | 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, | 
|  | 0x63, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, | 
|  | 0x12, 0x58, 0x0a, 0x09, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x12, 0x24, 0x2e, | 
|  | 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, | 
|  | 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, | 
|  | 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, | 
|  | 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, | 
|  | 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0a, 0x53, 0x65, | 
|  | 0x61, 0x72, 0x63, 0x68, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x25, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, | 
|  | 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, | 
|  | 0x61, 0x72, 0x63, 0x68, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, | 
|  | 0x26, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, | 
|  | 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4a, 0x6f, 0x62, 0x73, 0x52, | 
|  | 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x54, 0x61, | 
|  | 0x73, 0x6b, 0x12, 0x22, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, | 
|  | 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, | 
|  | 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, | 
|  | 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x54, | 
|  | 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x0b, 0x53, | 
|  | 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x26, 0x2e, 0x74, 0x61, 0x73, | 
|  | 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, | 
|  | 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, | 
|  | 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, | 
|  | 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x61, | 
|  | 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x10, 0x47, | 
|  | 0x65, 0x74, 0x53, 0x6b, 0x69, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, | 
|  | 0x2b, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, | 
|  | 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x70, 0x54, 0x61, 0x73, 0x6b, | 
|  | 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, | 
|  | 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, | 
|  | 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x75, 0x6c, | 
|  | 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x0f, 0x41, 0x64, | 
|  | 0x64, 0x53, 0x6b, 0x69, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x2a, 0x2e, | 
|  | 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, | 
|  | 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x6b, 0x69, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x75, | 
|  | 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x74, 0x61, 0x73, 0x6b, | 
|  | 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, | 
|  | 0x64, 0x64, 0x53, 0x6b, 0x69, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, | 
|  | 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, | 
|  | 0x53, 0x6b, 0x69, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x2d, 0x2e, 0x74, | 
|  | 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, | 
|  | 0x63, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x54, 0x61, 0x73, 0x6b, | 
|  | 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x61, | 
|  | 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x70, 0x63, | 
|  | 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x52, | 
|  | 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x29, 0x5a, 0x27, 0x67, | 
|  | 0x6f, 0x2e, 0x73, 0x6b, 0x69, 0x61, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, | 
|  | 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, | 
|  | 0x67, 0x6f, 0x2f, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | 
|  | } | 
|  |  | 
|  | var ( | 
|  | file_rpc_proto_rawDescOnce sync.Once | 
|  | file_rpc_proto_rawDescData = file_rpc_proto_rawDesc | 
|  | ) | 
|  |  | 
|  | func file_rpc_proto_rawDescGZIP() []byte { | 
|  | file_rpc_proto_rawDescOnce.Do(func() { | 
|  | file_rpc_proto_rawDescData = protoimpl.X.CompressGZIP(file_rpc_proto_rawDescData) | 
|  | }) | 
|  | return file_rpc_proto_rawDescData | 
|  | } | 
|  |  | 
|  | var file_rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 2) | 
|  | var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 31) | 
|  | var file_rpc_proto_goTypes = []interface{}{ | 
|  | (TaskStatus)(0),                    // 0: task_scheduler.rpc.TaskStatus | 
|  | (JobStatus)(0),                     // 1: task_scheduler.rpc.JobStatus | 
|  | (*TriggerJob)(nil),                 // 2: task_scheduler.rpc.TriggerJob | 
|  | (*TriggerJobsRequest)(nil),         // 3: task_scheduler.rpc.TriggerJobsRequest | 
|  | (*TriggerJobsResponse)(nil),        // 4: task_scheduler.rpc.TriggerJobsResponse | 
|  | (*GetJobRequest)(nil),              // 5: task_scheduler.rpc.GetJobRequest | 
|  | (*GetJobResponse)(nil),             // 6: task_scheduler.rpc.GetJobResponse | 
|  | (*CancelJobRequest)(nil),           // 7: task_scheduler.rpc.CancelJobRequest | 
|  | (*CancelJobResponse)(nil),          // 8: task_scheduler.rpc.CancelJobResponse | 
|  | (*SearchJobsRequest)(nil),          // 9: task_scheduler.rpc.SearchJobsRequest | 
|  | (*SearchJobsResponse)(nil),         // 10: task_scheduler.rpc.SearchJobsResponse | 
|  | (*GetTaskRequest)(nil),             // 11: task_scheduler.rpc.GetTaskRequest | 
|  | (*GetTaskResponse)(nil),            // 12: task_scheduler.rpc.GetTaskResponse | 
|  | (*SearchTasksRequest)(nil),         // 13: task_scheduler.rpc.SearchTasksRequest | 
|  | (*SearchTasksResponse)(nil),        // 14: task_scheduler.rpc.SearchTasksResponse | 
|  | (*GetSkipTaskRulesRequest)(nil),    // 15: task_scheduler.rpc.GetSkipTaskRulesRequest | 
|  | (*SkipTaskRule)(nil),               // 16: task_scheduler.rpc.SkipTaskRule | 
|  | (*GetSkipTaskRulesResponse)(nil),   // 17: task_scheduler.rpc.GetSkipTaskRulesResponse | 
|  | (*AddSkipTaskRuleRequest)(nil),     // 18: task_scheduler.rpc.AddSkipTaskRuleRequest | 
|  | (*AddSkipTaskRuleResponse)(nil),    // 19: task_scheduler.rpc.AddSkipTaskRuleResponse | 
|  | (*DeleteSkipTaskRuleRequest)(nil),  // 20: task_scheduler.rpc.DeleteSkipTaskRuleRequest | 
|  | (*DeleteSkipTaskRuleResponse)(nil), // 21: task_scheduler.rpc.DeleteSkipTaskRuleResponse | 
|  | (*RepoState)(nil),                  // 22: task_scheduler.rpc.RepoState | 
|  | (*TaskKey)(nil),                    // 23: task_scheduler.rpc.TaskKey | 
|  | (*Task)(nil),                       // 24: task_scheduler.rpc.Task | 
|  | (*TaskDependencies)(nil),           // 25: task_scheduler.rpc.TaskDependencies | 
|  | (*TaskSummary)(nil),                // 26: task_scheduler.rpc.TaskSummary | 
|  | (*TaskSummaries)(nil),              // 27: task_scheduler.rpc.TaskSummaries | 
|  | (*TaskDimensions)(nil),             // 28: task_scheduler.rpc.TaskDimensions | 
|  | (*TaskStats)(nil),                  // 29: task_scheduler.rpc.TaskStats | 
|  | (*Job)(nil),                        // 30: task_scheduler.rpc.Job | 
|  | (*RepoState_Patch)(nil),            // 31: task_scheduler.rpc.RepoState.Patch | 
|  | nil,                                // 32: task_scheduler.rpc.Task.PropertiesEntry | 
|  | (*timestamp.Timestamp)(nil),        // 33: google.protobuf.Timestamp | 
|  | } | 
|  | var file_rpc_proto_depIdxs = []int32{ | 
|  | 2,  // 0: task_scheduler.rpc.TriggerJobsRequest.jobs:type_name -> task_scheduler.rpc.TriggerJob | 
|  | 30, // 1: task_scheduler.rpc.GetJobResponse.job:type_name -> task_scheduler.rpc.Job | 
|  | 30, // 2: task_scheduler.rpc.CancelJobResponse.job:type_name -> task_scheduler.rpc.Job | 
|  | 1,  // 3: task_scheduler.rpc.SearchJobsRequest.status:type_name -> task_scheduler.rpc.JobStatus | 
|  | 33, // 4: task_scheduler.rpc.SearchJobsRequest.time_start:type_name -> google.protobuf.Timestamp | 
|  | 33, // 5: task_scheduler.rpc.SearchJobsRequest.time_end:type_name -> google.protobuf.Timestamp | 
|  | 30, // 6: task_scheduler.rpc.SearchJobsResponse.jobs:type_name -> task_scheduler.rpc.Job | 
|  | 24, // 7: task_scheduler.rpc.GetTaskResponse.task:type_name -> task_scheduler.rpc.Task | 
|  | 0,  // 8: task_scheduler.rpc.SearchTasksRequest.status:type_name -> task_scheduler.rpc.TaskStatus | 
|  | 33, // 9: task_scheduler.rpc.SearchTasksRequest.time_start:type_name -> google.protobuf.Timestamp | 
|  | 33, // 10: task_scheduler.rpc.SearchTasksRequest.time_end:type_name -> google.protobuf.Timestamp | 
|  | 24, // 11: task_scheduler.rpc.SearchTasksResponse.tasks:type_name -> task_scheduler.rpc.Task | 
|  | 16, // 12: task_scheduler.rpc.GetSkipTaskRulesResponse.rules:type_name -> task_scheduler.rpc.SkipTaskRule | 
|  | 16, // 13: task_scheduler.rpc.AddSkipTaskRuleResponse.rules:type_name -> task_scheduler.rpc.SkipTaskRule | 
|  | 16, // 14: task_scheduler.rpc.DeleteSkipTaskRuleResponse.rules:type_name -> task_scheduler.rpc.SkipTaskRule | 
|  | 31, // 15: task_scheduler.rpc.RepoState.patch:type_name -> task_scheduler.rpc.RepoState.Patch | 
|  | 22, // 16: task_scheduler.rpc.TaskKey.repo_state:type_name -> task_scheduler.rpc.RepoState | 
|  | 33, // 17: task_scheduler.rpc.Task.created_at:type_name -> google.protobuf.Timestamp | 
|  | 33, // 18: task_scheduler.rpc.Task.db_modified_at:type_name -> google.protobuf.Timestamp | 
|  | 33, // 19: task_scheduler.rpc.Task.finished_at:type_name -> google.protobuf.Timestamp | 
|  | 32, // 20: task_scheduler.rpc.Task.properties:type_name -> task_scheduler.rpc.Task.PropertiesEntry | 
|  | 33, // 21: task_scheduler.rpc.Task.started_at:type_name -> google.protobuf.Timestamp | 
|  | 0,  // 22: task_scheduler.rpc.Task.status:type_name -> task_scheduler.rpc.TaskStatus | 
|  | 23, // 23: task_scheduler.rpc.Task.task_key:type_name -> task_scheduler.rpc.TaskKey | 
|  | 29, // 24: task_scheduler.rpc.Task.stats:type_name -> task_scheduler.rpc.TaskStats | 
|  | 0,  // 25: task_scheduler.rpc.TaskSummary.status:type_name -> task_scheduler.rpc.TaskStatus | 
|  | 26, // 26: task_scheduler.rpc.TaskSummaries.tasks:type_name -> task_scheduler.rpc.TaskSummary | 
|  | 33, // 27: task_scheduler.rpc.Job.created_at:type_name -> google.protobuf.Timestamp | 
|  | 33, // 28: task_scheduler.rpc.Job.db_modified_at:type_name -> google.protobuf.Timestamp | 
|  | 25, // 29: task_scheduler.rpc.Job.dependencies:type_name -> task_scheduler.rpc.TaskDependencies | 
|  | 33, // 30: task_scheduler.rpc.Job.finished_at:type_name -> google.protobuf.Timestamp | 
|  | 22, // 31: task_scheduler.rpc.Job.repo_state:type_name -> task_scheduler.rpc.RepoState | 
|  | 33, // 32: task_scheduler.rpc.Job.requested_at:type_name -> google.protobuf.Timestamp | 
|  | 1,  // 33: task_scheduler.rpc.Job.status:type_name -> task_scheduler.rpc.JobStatus | 
|  | 27, // 34: task_scheduler.rpc.Job.tasks:type_name -> task_scheduler.rpc.TaskSummaries | 
|  | 28, // 35: task_scheduler.rpc.Job.task_dimensions:type_name -> task_scheduler.rpc.TaskDimensions | 
|  | 3,  // 36: task_scheduler.rpc.TaskSchedulerService.TriggerJobs:input_type -> task_scheduler.rpc.TriggerJobsRequest | 
|  | 5,  // 37: task_scheduler.rpc.TaskSchedulerService.GetJob:input_type -> task_scheduler.rpc.GetJobRequest | 
|  | 7,  // 38: task_scheduler.rpc.TaskSchedulerService.CancelJob:input_type -> task_scheduler.rpc.CancelJobRequest | 
|  | 9,  // 39: task_scheduler.rpc.TaskSchedulerService.SearchJobs:input_type -> task_scheduler.rpc.SearchJobsRequest | 
|  | 11, // 40: task_scheduler.rpc.TaskSchedulerService.GetTask:input_type -> task_scheduler.rpc.GetTaskRequest | 
|  | 13, // 41: task_scheduler.rpc.TaskSchedulerService.SearchTasks:input_type -> task_scheduler.rpc.SearchTasksRequest | 
|  | 15, // 42: task_scheduler.rpc.TaskSchedulerService.GetSkipTaskRules:input_type -> task_scheduler.rpc.GetSkipTaskRulesRequest | 
|  | 18, // 43: task_scheduler.rpc.TaskSchedulerService.AddSkipTaskRule:input_type -> task_scheduler.rpc.AddSkipTaskRuleRequest | 
|  | 20, // 44: task_scheduler.rpc.TaskSchedulerService.DeleteSkipTaskRule:input_type -> task_scheduler.rpc.DeleteSkipTaskRuleRequest | 
|  | 4,  // 45: task_scheduler.rpc.TaskSchedulerService.TriggerJobs:output_type -> task_scheduler.rpc.TriggerJobsResponse | 
|  | 6,  // 46: task_scheduler.rpc.TaskSchedulerService.GetJob:output_type -> task_scheduler.rpc.GetJobResponse | 
|  | 8,  // 47: task_scheduler.rpc.TaskSchedulerService.CancelJob:output_type -> task_scheduler.rpc.CancelJobResponse | 
|  | 10, // 48: task_scheduler.rpc.TaskSchedulerService.SearchJobs:output_type -> task_scheduler.rpc.SearchJobsResponse | 
|  | 12, // 49: task_scheduler.rpc.TaskSchedulerService.GetTask:output_type -> task_scheduler.rpc.GetTaskResponse | 
|  | 14, // 50: task_scheduler.rpc.TaskSchedulerService.SearchTasks:output_type -> task_scheduler.rpc.SearchTasksResponse | 
|  | 17, // 51: task_scheduler.rpc.TaskSchedulerService.GetSkipTaskRules:output_type -> task_scheduler.rpc.GetSkipTaskRulesResponse | 
|  | 19, // 52: task_scheduler.rpc.TaskSchedulerService.AddSkipTaskRule:output_type -> task_scheduler.rpc.AddSkipTaskRuleResponse | 
|  | 21, // 53: task_scheduler.rpc.TaskSchedulerService.DeleteSkipTaskRule:output_type -> task_scheduler.rpc.DeleteSkipTaskRuleResponse | 
|  | 45, // [45:54] is the sub-list for method output_type | 
|  | 36, // [36:45] is the sub-list for method input_type | 
|  | 36, // [36:36] is the sub-list for extension type_name | 
|  | 36, // [36:36] is the sub-list for extension extendee | 
|  | 0,  // [0:36] is the sub-list for field type_name | 
|  | } | 
|  |  | 
|  | func init() { file_rpc_proto_init() } | 
|  | func file_rpc_proto_init() { | 
|  | if File_rpc_proto != nil { | 
|  | return | 
|  | } | 
|  | if !protoimpl.UnsafeEnabled { | 
|  | file_rpc_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*TriggerJob); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*TriggerJobsRequest); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*TriggerJobsResponse); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*GetJobRequest); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*GetJobResponse); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*CancelJobRequest); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*CancelJobResponse); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*SearchJobsRequest); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*SearchJobsResponse); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*GetTaskRequest); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*GetTaskResponse); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*SearchTasksRequest); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*SearchTasksResponse); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*GetSkipTaskRulesRequest); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*SkipTaskRule); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*GetSkipTaskRulesResponse); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*AddSkipTaskRuleRequest); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*AddSkipTaskRuleResponse); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*DeleteSkipTaskRuleRequest); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*DeleteSkipTaskRuleResponse); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*RepoState); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*TaskKey); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*Task); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*TaskDependencies); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*TaskSummary); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*TaskSummaries); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*TaskDimensions); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*TaskStats); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*Job); i { | 
|  | case 0: | 
|  | return &v.state | 
|  | case 1: | 
|  | return &v.sizeCache | 
|  | case 2: | 
|  | return &v.unknownFields | 
|  | default: | 
|  | return nil | 
|  | } | 
|  | } | 
|  | file_rpc_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { | 
|  | switch v := v.(*RepoState_Patch); 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_rpc_proto_rawDesc, | 
|  | NumEnums:      2, | 
|  | NumMessages:   31, | 
|  | NumExtensions: 0, | 
|  | NumServices:   1, | 
|  | }, | 
|  | GoTypes:           file_rpc_proto_goTypes, | 
|  | DependencyIndexes: file_rpc_proto_depIdxs, | 
|  | EnumInfos:         file_rpc_proto_enumTypes, | 
|  | MessageInfos:      file_rpc_proto_msgTypes, | 
|  | }.Build() | 
|  | File_rpc_proto = out.File | 
|  | file_rpc_proto_rawDesc = nil | 
|  | file_rpc_proto_goTypes = nil | 
|  | file_rpc_proto_depIdxs = nil | 
|  | } |