From 1955ba9828fde7b18786ea19a18f4e015f6ac946 Mon Sep 17 00:00:00 2001 From: Gaius Date: Wed, 1 Apr 2026 15:12:43 +0800 Subject: [PATCH] feat: add ListLocalTasks/ListLocalPersistentTasks/ListLocalPersistentCacheTasks api Signed-off-by: Gaius --- Cargo.lock | 2 +- Cargo.toml | 2 +- pkg/apis/dfdaemon/v2/dfdaemon.pb.go | 4002 +++++++++++------- pkg/apis/dfdaemon/v2/dfdaemon.pb.validate.go | 3000 ++++++++++--- pkg/apis/dfdaemon/v2/dfdaemon.proto | 143 + pkg/apis/dfdaemon/v2/dfdaemon_grpc.pb.go | 266 ++ pkg/apis/dfdaemon/v2/mocks/dfdaemon_mock.go | 245 ++ proto/dfdaemon.proto | 128 + src/descriptor.bin | Bin 202053 -> 210339 bytes src/dfdaemon.v2.rs | 823 +++- 10 files changed, 6432 insertions(+), 2179 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d885c49..518e054 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -119,7 +119,7 @@ dependencies = [ [[package]] name = "dragonfly-api" -version = "2.2.26" +version = "2.2.27" dependencies = [ "prost", "prost-types", diff --git a/Cargo.toml b/Cargo.toml index 4cba11e..f1e7226 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dragonfly-api" -version = "2.2.26" +version = "2.2.27" authors = ["Gaius "] edition = "2021" license = "Apache-2.0" diff --git a/pkg/apis/dfdaemon/v2/dfdaemon.pb.go b/pkg/apis/dfdaemon/v2/dfdaemon.pb.go index ab01628..42c0305 100644 --- a/pkg/apis/dfdaemon/v2/dfdaemon.pb.go +++ b/pkg/apis/dfdaemon/v2/dfdaemon.pb.go @@ -751,6 +751,94 @@ func (x *StatLocalTaskResponse) GetFinishedAt() *timestamppb.Timestamp { return nil } +// ListLocalTasksRequest represents request of ListLocalTasks. +type ListLocalTasksRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ListLocalTasksRequest) Reset() { + *x = ListLocalTasksRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListLocalTasksRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListLocalTasksRequest) ProtoMessage() {} + +func (x *ListLocalTasksRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_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 ListLocalTasksRequest.ProtoReflect.Descriptor instead. +func (*ListLocalTasksRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{9} +} + +// ListLocalTasksResponse represents response of ListLocalTasks. +type ListLocalTasksResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Task ids of the local tasks. + Tasks []*StatLocalTaskResponse `protobuf:"bytes,1,rep,name=tasks,proto3" json:"tasks,omitempty"` +} + +func (x *ListLocalTasksResponse) Reset() { + *x = ListLocalTasksResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListLocalTasksResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListLocalTasksResponse) ProtoMessage() {} + +func (x *ListLocalTasksResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_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 ListLocalTasksResponse.ProtoReflect.Descriptor instead. +func (*ListLocalTasksResponse) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{10} +} + +func (x *ListLocalTasksResponse) GetTasks() []*StatLocalTaskResponse { + if x != nil { + return x.Tasks + } + return nil +} + // ListTaskEntriesRequest represents request of ListTaskEntries. type ListTaskEntriesRequest struct { state protoimpl.MessageState @@ -782,7 +870,7 @@ type ListTaskEntriesRequest struct { func (x *ListTaskEntriesRequest) Reset() { *x = ListTaskEntriesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[9] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -795,7 +883,7 @@ func (x *ListTaskEntriesRequest) String() string { func (*ListTaskEntriesRequest) ProtoMessage() {} func (x *ListTaskEntriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[9] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -808,7 +896,7 @@ func (x *ListTaskEntriesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTaskEntriesRequest.ProtoReflect.Descriptor instead. func (*ListTaskEntriesRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{9} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{11} } func (x *ListTaskEntriesRequest) GetTaskId() string { @@ -900,7 +988,7 @@ type ListTaskEntriesResponse struct { func (x *ListTaskEntriesResponse) Reset() { *x = ListTaskEntriesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[10] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -913,7 +1001,7 @@ func (x *ListTaskEntriesResponse) String() string { func (*ListTaskEntriesResponse) ProtoMessage() {} func (x *ListTaskEntriesResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[10] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -926,7 +1014,7 @@ func (x *ListTaskEntriesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTaskEntriesResponse.ProtoReflect.Descriptor instead. func (*ListTaskEntriesResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{10} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{12} } func (x *ListTaskEntriesResponse) GetContentLength() uint64 { @@ -974,7 +1062,7 @@ type Entry struct { func (x *Entry) Reset() { *x = Entry{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -987,7 +1075,7 @@ func (x *Entry) String() string { func (*Entry) ProtoMessage() {} func (x *Entry) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1000,7 +1088,7 @@ func (x *Entry) ProtoReflect() protoreflect.Message { // Deprecated: Use Entry.ProtoReflect.Descriptor instead. func (*Entry) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{11} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{13} } func (x *Entry) GetUrl() string { @@ -1039,7 +1127,7 @@ type DeleteTaskRequest struct { func (x *DeleteTaskRequest) Reset() { *x = DeleteTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1052,7 +1140,7 @@ func (x *DeleteTaskRequest) String() string { func (*DeleteTaskRequest) ProtoMessage() {} func (x *DeleteTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1065,7 +1153,7 @@ func (x *DeleteTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTaskRequest.ProtoReflect.Descriptor instead. func (*DeleteTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{12} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{14} } func (x *DeleteTaskRequest) GetTaskId() string { @@ -1082,6 +1170,64 @@ func (x *DeleteTaskRequest) GetRemoteIp() string { return "" } +// DeleteLocalTaskRequest represents request of DeleteLocalTask. +type DeleteLocalTaskRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Task id. + TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + // Remote IP represents the IP address of the client initiating the delete request. + RemoteIp *string `protobuf:"bytes,2,opt,name=remote_ip,json=remoteIp,proto3,oneof" json:"remote_ip,omitempty"` +} + +func (x *DeleteLocalTaskRequest) Reset() { + *x = DeleteLocalTaskRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteLocalTaskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteLocalTaskRequest) ProtoMessage() {} + +func (x *DeleteLocalTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_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 DeleteLocalTaskRequest.ProtoReflect.Descriptor instead. +func (*DeleteLocalTaskRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{15} +} + +func (x *DeleteLocalTaskRequest) GetTaskId() string { + if x != nil { + return x.TaskId + } + return "" +} + +func (x *DeleteLocalTaskRequest) GetRemoteIp() string { + if x != nil && x.RemoteIp != nil { + return *x.RemoteIp + } + return "" +} + // DownloadCacheTaskRequest represents request of DownloadCacheTask. type DownloadCacheTaskRequest struct { state protoimpl.MessageState @@ -1152,7 +1298,7 @@ type DownloadCacheTaskRequest struct { func (x *DownloadCacheTaskRequest) Reset() { *x = DownloadCacheTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1165,7 +1311,7 @@ func (x *DownloadCacheTaskRequest) String() string { func (*DownloadCacheTaskRequest) ProtoMessage() {} func (x *DownloadCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1178,7 +1324,7 @@ func (x *DownloadCacheTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DownloadCacheTaskRequest.ProtoReflect.Descriptor instead. func (*DownloadCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{13} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{16} } func (x *DownloadCacheTaskRequest) GetUrl() string { @@ -1365,7 +1511,7 @@ type DownloadCacheTaskStartedResponse struct { func (x *DownloadCacheTaskStartedResponse) Reset() { *x = DownloadCacheTaskStartedResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1378,7 +1524,7 @@ func (x *DownloadCacheTaskStartedResponse) String() string { func (*DownloadCacheTaskStartedResponse) ProtoMessage() {} func (x *DownloadCacheTaskStartedResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1391,7 +1537,7 @@ func (x *DownloadCacheTaskStartedResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DownloadCacheTaskStartedResponse.ProtoReflect.Descriptor instead. func (*DownloadCacheTaskStartedResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{14} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{17} } func (x *DownloadCacheTaskStartedResponse) GetContentLength() uint64 { @@ -1451,7 +1597,7 @@ type DownloadCacheTaskResponse struct { func (x *DownloadCacheTaskResponse) Reset() { *x = DownloadCacheTaskResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1464,7 +1610,7 @@ func (x *DownloadCacheTaskResponse) String() string { func (*DownloadCacheTaskResponse) ProtoMessage() {} func (x *DownloadCacheTaskResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1477,7 +1623,7 @@ func (x *DownloadCacheTaskResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DownloadCacheTaskResponse.ProtoReflect.Descriptor instead. func (*DownloadCacheTaskResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{15} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{18} } func (x *DownloadCacheTaskResponse) GetHostId() string { @@ -1557,7 +1703,7 @@ type SyncCachePiecesRequest struct { func (x *SyncCachePiecesRequest) Reset() { *x = SyncCachePiecesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1570,7 +1716,7 @@ func (x *SyncCachePiecesRequest) String() string { func (*SyncCachePiecesRequest) ProtoMessage() {} func (x *SyncCachePiecesRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1583,7 +1729,7 @@ func (x *SyncCachePiecesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncCachePiecesRequest.ProtoReflect.Descriptor instead. func (*SyncCachePiecesRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{16} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{19} } func (x *SyncCachePiecesRequest) GetHostId() string { @@ -1624,7 +1770,7 @@ type SyncCachePiecesResponse struct { func (x *SyncCachePiecesResponse) Reset() { *x = SyncCachePiecesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1637,7 +1783,7 @@ func (x *SyncCachePiecesResponse) String() string { func (*SyncCachePiecesResponse) ProtoMessage() {} func (x *SyncCachePiecesResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1650,7 +1796,7 @@ func (x *SyncCachePiecesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncCachePiecesResponse.ProtoReflect.Descriptor instead. func (*SyncCachePiecesResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{17} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{20} } func (x *SyncCachePiecesResponse) GetNumber() uint32 { @@ -1691,7 +1837,7 @@ type DownloadCachePieceRequest struct { func (x *DownloadCachePieceRequest) Reset() { *x = DownloadCachePieceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[18] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1704,7 +1850,7 @@ func (x *DownloadCachePieceRequest) String() string { func (*DownloadCachePieceRequest) ProtoMessage() {} func (x *DownloadCachePieceRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[18] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1717,7 +1863,7 @@ func (x *DownloadCachePieceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DownloadCachePieceRequest.ProtoReflect.Descriptor instead. func (*DownloadCachePieceRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{18} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{21} } func (x *DownloadCachePieceRequest) GetHostId() string { @@ -1756,7 +1902,7 @@ type DownloadCachePieceResponse struct { func (x *DownloadCachePieceResponse) Reset() { *x = DownloadCachePieceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[19] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1769,7 +1915,7 @@ func (x *DownloadCachePieceResponse) String() string { func (*DownloadCachePieceResponse) ProtoMessage() {} func (x *DownloadCachePieceResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[19] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1782,7 +1928,7 @@ func (x *DownloadCachePieceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DownloadCachePieceResponse.ProtoReflect.Descriptor instead. func (*DownloadCachePieceResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{19} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{22} } func (x *DownloadCachePieceResponse) GetPiece() *v2.Piece { @@ -1814,7 +1960,7 @@ type StatCacheTaskRequest struct { func (x *StatCacheTaskRequest) Reset() { *x = StatCacheTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[20] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1827,7 +1973,7 @@ func (x *StatCacheTaskRequest) String() string { func (*StatCacheTaskRequest) ProtoMessage() {} func (x *StatCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[20] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1840,7 +1986,7 @@ func (x *StatCacheTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatCacheTaskRequest.ProtoReflect.Descriptor instead. func (*StatCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{20} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{23} } func (x *StatCacheTaskRequest) GetTaskId() string { @@ -1872,7 +2018,7 @@ type DeleteCacheTaskRequest struct { func (x *DeleteCacheTaskRequest) Reset() { *x = DeleteCacheTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[21] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1885,7 +2031,7 @@ func (x *DeleteCacheTaskRequest) String() string { func (*DeleteCacheTaskRequest) ProtoMessage() {} func (x *DeleteCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[21] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1898,7 +2044,7 @@ func (x *DeleteCacheTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteCacheTaskRequest.ProtoReflect.Descriptor instead. func (*DeleteCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{21} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{24} } func (x *DeleteCacheTaskRequest) GetTaskId() string { @@ -1960,7 +2106,7 @@ type DownloadPersistentTaskRequest struct { func (x *DownloadPersistentTaskRequest) Reset() { *x = DownloadPersistentTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[22] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1973,7 +2119,7 @@ func (x *DownloadPersistentTaskRequest) String() string { func (*DownloadPersistentTaskRequest) ProtoMessage() {} func (x *DownloadPersistentTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[22] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1986,7 +2132,7 @@ func (x *DownloadPersistentTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DownloadPersistentTaskRequest.ProtoReflect.Descriptor instead. func (*DownloadPersistentTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{22} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{25} } func (x *DownloadPersistentTaskRequest) GetUrl() string { @@ -2072,7 +2218,7 @@ type DownloadPersistentTaskStartedResponse struct { func (x *DownloadPersistentTaskStartedResponse) Reset() { *x = DownloadPersistentTaskStartedResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[23] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2085,7 +2231,7 @@ func (x *DownloadPersistentTaskStartedResponse) String() string { func (*DownloadPersistentTaskStartedResponse) ProtoMessage() {} func (x *DownloadPersistentTaskStartedResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[23] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2098,7 +2244,7 @@ func (x *DownloadPersistentTaskStartedResponse) ProtoReflect() protoreflect.Mess // Deprecated: Use DownloadPersistentTaskStartedResponse.ProtoReflect.Descriptor instead. func (*DownloadPersistentTaskStartedResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{23} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{26} } func (x *DownloadPersistentTaskStartedResponse) GetContentLength() uint64 { @@ -2130,7 +2276,7 @@ type DownloadPersistentTaskResponse struct { func (x *DownloadPersistentTaskResponse) Reset() { *x = DownloadPersistentTaskResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[24] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2143,7 +2289,7 @@ func (x *DownloadPersistentTaskResponse) String() string { func (*DownloadPersistentTaskResponse) ProtoMessage() {} func (x *DownloadPersistentTaskResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[24] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2156,7 +2302,7 @@ func (x *DownloadPersistentTaskResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DownloadPersistentTaskResponse.ProtoReflect.Descriptor instead. func (*DownloadPersistentTaskResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{24} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{27} } func (x *DownloadPersistentTaskResponse) GetHostId() string { @@ -2247,7 +2393,7 @@ type UploadPersistentTaskRequest struct { func (x *UploadPersistentTaskRequest) Reset() { *x = UploadPersistentTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[25] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2260,7 +2406,7 @@ func (x *UploadPersistentTaskRequest) String() string { func (*UploadPersistentTaskRequest) ProtoMessage() {} func (x *UploadPersistentTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[25] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2273,7 +2419,7 @@ func (x *UploadPersistentTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UploadPersistentTaskRequest.ProtoReflect.Descriptor instead. func (*UploadPersistentTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{25} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{28} } func (x *UploadPersistentTaskRequest) GetUrl() string { @@ -2345,7 +2491,7 @@ type UpdatePersistentTaskRequest struct { func (x *UpdatePersistentTaskRequest) Reset() { *x = UpdatePersistentTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[26] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2358,7 +2504,7 @@ func (x *UpdatePersistentTaskRequest) String() string { func (*UpdatePersistentTaskRequest) ProtoMessage() {} func (x *UpdatePersistentTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[26] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2371,7 +2517,7 @@ func (x *UpdatePersistentTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdatePersistentTaskRequest.ProtoReflect.Descriptor instead. func (*UpdatePersistentTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{26} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{29} } func (x *UpdatePersistentTaskRequest) GetTaskId() string { @@ -2410,7 +2556,7 @@ type StatPersistentTaskRequest struct { func (x *StatPersistentTaskRequest) Reset() { *x = StatPersistentTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[27] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2423,7 +2569,7 @@ func (x *StatPersistentTaskRequest) String() string { func (*StatPersistentTaskRequest) ProtoMessage() {} func (x *StatPersistentTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[27] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2436,7 +2582,7 @@ func (x *StatPersistentTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatPersistentTaskRequest.ProtoReflect.Descriptor instead. func (*StatPersistentTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{27} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{30} } func (x *StatPersistentTaskRequest) GetTaskId() string { @@ -2453,35 +2599,35 @@ func (x *StatPersistentTaskRequest) GetRemoteIp() string { return "" } -// DeletePersistentTaskRequest represents request of DeletePersistentTask. -type DeletePersistentTaskRequest struct { +// StatLocalPersistentTaskRequest represents request of StatLocalPersistentTask. +type StatLocalPersistentTaskRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Task id. TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - // Remote IP represents the IP address of the client initiating the delete request. + // Remote IP represents the IP address of the client initiating the stat request. RemoteIp *string `protobuf:"bytes,2,opt,name=remote_ip,json=remoteIp,proto3,oneof" json:"remote_ip,omitempty"` } -func (x *DeletePersistentTaskRequest) Reset() { - *x = DeletePersistentTaskRequest{} +func (x *StatLocalPersistentTaskRequest) Reset() { + *x = StatLocalPersistentTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[28] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *DeletePersistentTaskRequest) String() string { +func (x *StatLocalPersistentTaskRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeletePersistentTaskRequest) ProtoMessage() {} +func (*StatLocalPersistentTaskRequest) ProtoMessage() {} -func (x *DeletePersistentTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[28] +func (x *StatLocalPersistentTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2492,56 +2638,74 @@ func (x *DeletePersistentTaskRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeletePersistentTaskRequest.ProtoReflect.Descriptor instead. -func (*DeletePersistentTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{28} +// Deprecated: Use StatLocalPersistentTaskRequest.ProtoReflect.Descriptor instead. +func (*StatLocalPersistentTaskRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{31} } -func (x *DeletePersistentTaskRequest) GetTaskId() string { +func (x *StatLocalPersistentTaskRequest) GetTaskId() string { if x != nil { return x.TaskId } return "" } -func (x *DeletePersistentTaskRequest) GetRemoteIp() string { +func (x *StatLocalPersistentTaskRequest) GetRemoteIp() string { if x != nil && x.RemoteIp != nil { return *x.RemoteIp } return "" } -// SyncPersistentPiecesRequest represents request of SyncPersistentPieces. -type SyncPersistentPiecesRequest struct { +// StatLocalPersistentTaskResponse represents response of StatLocalPersistentTask. +type StatLocalPersistentTaskResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Host id. - HostId string `protobuf:"bytes,1,opt,name=host_id,json=hostId,proto3" json:"host_id,omitempty"` // Task id. - TaskId string `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - // Interested piece numbers. - InterestedPieceNumbers []uint32 `protobuf:"varint,3,rep,packed,name=interested_piece_numbers,json=interestedPieceNumbers,proto3" json:"interested_piece_numbers,omitempty"` -} - -func (x *SyncPersistentPiecesRequest) Reset() { - *x = SyncPersistentPiecesRequest{} + TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + // Persistent represents whether the persistent task is persistent. + // If the persistent task is persistent, the persistent peer will + // not be deleted when dfdamon runs garbage collection. + Persistent bool `protobuf:"varint,2,opt,name=persistent,proto3" json:"persistent,omitempty"` + // TTL of the persistent task. + Ttl *durationpb.Duration `protobuf:"bytes,3,opt,name=ttl,proto3" json:"ttl,omitempty"` + // Task piece length. + PieceLength *uint64 `protobuf:"varint,4,opt,name=piece_length,json=pieceLength,proto3,oneof" json:"piece_length,omitempty"` + // Task content length. + ContentLength *uint64 `protobuf:"varint,5,opt,name=content_length,json=contentLength,proto3,oneof" json:"content_length,omitempty"` + // Uploading count is the count of the task being uploaded by other peers. + UploadingCount uint64 `protobuf:"varint,6,opt,name=uploading_count,json=uploadingCount,proto3" json:"uploading_count,omitempty"` + // Uploaded count is the count of the task has been uploaded by other peers. + UploadedCount uint64 `protobuf:"varint,7,opt,name=uploaded_count,json=uploadedCount,proto3" json:"uploaded_count,omitempty"` + // Task create time. + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + // Task update time. + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + // Task fail time. + FailedAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=failed_at,json=failedAt,proto3,oneof" json:"failed_at,omitempty"` + // Task finish time. + FinishedAt *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=finished_at,json=finishedAt,proto3,oneof" json:"finished_at,omitempty"` +} + +func (x *StatLocalPersistentTaskResponse) Reset() { + *x = StatLocalPersistentTaskResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[29] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SyncPersistentPiecesRequest) String() string { +func (x *StatLocalPersistentTaskResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SyncPersistentPiecesRequest) ProtoMessage() {} +func (*StatLocalPersistentTaskResponse) ProtoMessage() {} -func (x *SyncPersistentPiecesRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[29] +func (x *StatLocalPersistentTaskResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2552,70 +2716,112 @@ func (x *SyncPersistentPiecesRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SyncPersistentPiecesRequest.ProtoReflect.Descriptor instead. -func (*SyncPersistentPiecesRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{29} +// Deprecated: Use StatLocalPersistentTaskResponse.ProtoReflect.Descriptor instead. +func (*StatLocalPersistentTaskResponse) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{32} } -func (x *SyncPersistentPiecesRequest) GetHostId() string { +func (x *StatLocalPersistentTaskResponse) GetTaskId() string { if x != nil { - return x.HostId + return x.TaskId } return "" } -func (x *SyncPersistentPiecesRequest) GetTaskId() string { +func (x *StatLocalPersistentTaskResponse) GetPersistent() bool { if x != nil { - return x.TaskId + return x.Persistent } - return "" + return false } -func (x *SyncPersistentPiecesRequest) GetInterestedPieceNumbers() []uint32 { +func (x *StatLocalPersistentTaskResponse) GetTtl() *durationpb.Duration { if x != nil { - return x.InterestedPieceNumbers + return x.Ttl } return nil } -// SyncPersistentPiecesResponse represents response of SyncPersistentPieces. -type SyncPersistentPiecesResponse struct { +func (x *StatLocalPersistentTaskResponse) GetPieceLength() uint64 { + if x != nil && x.PieceLength != nil { + return *x.PieceLength + } + return 0 +} + +func (x *StatLocalPersistentTaskResponse) GetContentLength() uint64 { + if x != nil && x.ContentLength != nil { + return *x.ContentLength + } + return 0 +} + +func (x *StatLocalPersistentTaskResponse) GetUploadingCount() uint64 { + if x != nil { + return x.UploadingCount + } + return 0 +} + +func (x *StatLocalPersistentTaskResponse) GetUploadedCount() uint64 { + if x != nil { + return x.UploadedCount + } + return 0 +} + +func (x *StatLocalPersistentTaskResponse) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *StatLocalPersistentTaskResponse) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + +func (x *StatLocalPersistentTaskResponse) GetFailedAt() *timestamppb.Timestamp { + if x != nil { + return x.FailedAt + } + return nil +} + +func (x *StatLocalPersistentTaskResponse) GetFinishedAt() *timestamppb.Timestamp { + if x != nil { + return x.FinishedAt + } + return nil +} + +// ListLocalPersistentTasksRequest represents request of ListLocalPersistentTasks. +type ListLocalPersistentTasksRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - // Exist piece number. - Number uint32 `protobuf:"varint,1,opt,name=number,proto3" json:"number,omitempty"` - // Piece offset. - Offset uint64 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"` - // Piece length. - Length uint64 `protobuf:"varint,3,opt,name=length,proto3" json:"length,omitempty"` - // IP is used to indicate the IP address of the peer. If protocol is rdma, - // the IP is used to exchange the queue pair endpoint of IBVerbs. - Ip string `protobuf:"bytes,4,opt,name=ip,proto3" json:"ip,omitempty"` - // TCP port is used to indicate the tcp server port of the peer. - TcpPort *int32 `protobuf:"varint,5,opt,name=tcp_port,json=tcpPort,proto3,oneof" json:"tcp_port,omitempty"` - // QUIC port is used to indicate the quic server port of the peer. - QuicPort *int32 `protobuf:"varint,6,opt,name=quic_port,json=quicPort,proto3,oneof" json:"quic_port,omitempty"` } -func (x *SyncPersistentPiecesResponse) Reset() { - *x = SyncPersistentPiecesResponse{} +func (x *ListLocalPersistentTasksRequest) Reset() { + *x = ListLocalPersistentTasksRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[30] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SyncPersistentPiecesResponse) String() string { +func (x *ListLocalPersistentTasksRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SyncPersistentPiecesResponse) ProtoMessage() {} +func (*ListLocalPersistentTasksRequest) ProtoMessage() {} -func (x *SyncPersistentPiecesResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[30] +func (x *ListLocalPersistentTasksRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2626,111 +2832,89 @@ func (x *SyncPersistentPiecesResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SyncPersistentPiecesResponse.ProtoReflect.Descriptor instead. -func (*SyncPersistentPiecesResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{30} +// Deprecated: Use ListLocalPersistentTasksRequest.ProtoReflect.Descriptor instead. +func (*ListLocalPersistentTasksRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{33} } -func (x *SyncPersistentPiecesResponse) GetNumber() uint32 { - if x != nil { - return x.Number - } - return 0 +// ListLocalPersistentTasksResponse represents response of ListLocalPersistentTasks. +type ListLocalPersistentTasksResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Task ids of the local tasks. + Tasks []*StatLocalPersistentTaskResponse `protobuf:"bytes,1,rep,name=tasks,proto3" json:"tasks,omitempty"` } -func (x *SyncPersistentPiecesResponse) GetOffset() uint64 { - if x != nil { - return x.Offset +func (x *ListLocalPersistentTasksResponse) Reset() { + *x = ListLocalPersistentTasksResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return 0 } -func (x *SyncPersistentPiecesResponse) GetLength() uint64 { - if x != nil { - return x.Length - } - return 0 +func (x *ListLocalPersistentTasksResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *SyncPersistentPiecesResponse) GetIp() string { - if x != nil { - return x.Ip +func (*ListLocalPersistentTasksResponse) ProtoMessage() {} + +func (x *ListLocalPersistentTasksResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *SyncPersistentPiecesResponse) GetTcpPort() int32 { - if x != nil && x.TcpPort != nil { - return *x.TcpPort - } - return 0 +// Deprecated: Use ListLocalPersistentTasksResponse.ProtoReflect.Descriptor instead. +func (*ListLocalPersistentTasksResponse) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{34} } -func (x *SyncPersistentPiecesResponse) GetQuicPort() int32 { - if x != nil && x.QuicPort != nil { - return *x.QuicPort +func (x *ListLocalPersistentTasksResponse) GetTasks() []*StatLocalPersistentTaskResponse { + if x != nil { + return x.Tasks } - return 0 + return nil } -// DownloadPersistentCacheTaskRequest represents request of DownloadPersistentCacheTask. -type DownloadPersistentCacheTaskRequest struct { +// DeletePersistentTaskRequest represents request of DeletePersistentTask. +type DeletePersistentTaskRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Task id. TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - // Persistent represents whether the persistent cache task is persistent. - // If the persistent cache task is persistent, the persistent cache peer will - // not be deleted when dfdaemon runs garbage collection. - Persistent bool `protobuf:"varint,2,opt,name=persistent,proto3" json:"persistent,omitempty"` - // Tag is used to distinguish different persistent cache tasks. - Tag *string `protobuf:"bytes,3,opt,name=tag,proto3,oneof" json:"tag,omitempty"` - // Application of task. - Application *string `protobuf:"bytes,4,opt,name=application,proto3,oneof" json:"application,omitempty"` - // File path to be exported. If output_path is set, the exported file will be saved to the specified path. - // Dfdaemon will try to create hard link to the output path before starting the export. If hard link creation fails, - // it will copy the file to the output path after the export is completed. - // For more details refer to https://github.com/dragonflyoss/design/blob/main/systems-analysis/file-download-workflow-with-hard-link/README.md. - OutputPath *string `protobuf:"bytes,5,opt,name=output_path,json=outputPath,proto3,oneof" json:"output_path,omitempty"` - // Download timeout. - Timeout *durationpb.Duration `protobuf:"bytes,6,opt,name=timeout,proto3,oneof" json:"timeout,omitempty"` - // need_piece_content is the flag to indicate whether the response needs to return piece content. - NeedPieceContent bool `protobuf:"varint,7,opt,name=need_piece_content,json=needPieceContent,proto3" json:"need_piece_content,omitempty"` - // force_hard_link is the flag to indicate whether the exported file must be hard linked to the output path. - // For more details refer to https://github.com/dragonflyoss/design/blob/main/systems-analysis/file-download-workflow-with-hard-link/README.md. - ForceHardLink bool `protobuf:"varint,8,opt,name=force_hard_link,json=forceHardLink,proto3" json:"force_hard_link,omitempty"` - // Verifies task data integrity after download using a digest. Supports CRC32, SHA256, and SHA512 algorithms. - // Format: `:`, e.g., `crc32:xxx`, `sha256:yyy`, `sha512:zzz`. - // Returns an error if the computed digest mismatches the expected value. - // - // Performance - // Digest calculation increases processing time. Enable only when data integrity verification is critical. - Digest *string `protobuf:"bytes,9,opt,name=digest,proto3,oneof" json:"digest,omitempty"` - // Remote IP represents the IP address of the client initiating the download request. - RemoteIp *string `protobuf:"bytes,10,opt,name=remote_ip,json=remoteIp,proto3,oneof" json:"remote_ip,omitempty"` - // Overwrite indicates whether to overwrite the existing file at output path. - Overwrite bool `protobuf:"varint,11,opt,name=overwrite,proto3" json:"overwrite,omitempty"` + // Remote IP represents the IP address of the client initiating the delete request. + RemoteIp *string `protobuf:"bytes,2,opt,name=remote_ip,json=remoteIp,proto3,oneof" json:"remote_ip,omitempty"` } -func (x *DownloadPersistentCacheTaskRequest) Reset() { - *x = DownloadPersistentCacheTaskRequest{} +func (x *DeletePersistentTaskRequest) Reset() { + *x = DeletePersistentTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[31] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *DownloadPersistentCacheTaskRequest) String() string { +func (x *DeletePersistentTaskRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DownloadPersistentCacheTaskRequest) ProtoMessage() {} +func (*DeletePersistentTaskRequest) ProtoMessage() {} -func (x *DownloadPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[31] +func (x *DeletePersistentTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2741,41 +2925,290 @@ func (x *DownloadPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use DownloadPersistentCacheTaskRequest.ProtoReflect.Descriptor instead. -func (*DownloadPersistentCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{31} +// Deprecated: Use DeletePersistentTaskRequest.ProtoReflect.Descriptor instead. +func (*DeletePersistentTaskRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{35} } -func (x *DownloadPersistentCacheTaskRequest) GetTaskId() string { +func (x *DeletePersistentTaskRequest) GetTaskId() string { if x != nil { return x.TaskId } return "" } -func (x *DownloadPersistentCacheTaskRequest) GetPersistent() bool { - if x != nil { - return x.Persistent - } - return false -} - -func (x *DownloadPersistentCacheTaskRequest) GetTag() string { - if x != nil && x.Tag != nil { - return *x.Tag +func (x *DeletePersistentTaskRequest) GetRemoteIp() string { + if x != nil && x.RemoteIp != nil { + return *x.RemoteIp } return "" } -func (x *DownloadPersistentCacheTaskRequest) GetApplication() string { - if x != nil && x.Application != nil { - return *x.Application - } - return "" +// SyncPersistentPiecesRequest represents request of SyncPersistentPieces. +type SyncPersistentPiecesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Host id. + HostId string `protobuf:"bytes,1,opt,name=host_id,json=hostId,proto3" json:"host_id,omitempty"` + // Task id. + TaskId string `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + // Interested piece numbers. + InterestedPieceNumbers []uint32 `protobuf:"varint,3,rep,packed,name=interested_piece_numbers,json=interestedPieceNumbers,proto3" json:"interested_piece_numbers,omitempty"` } -func (x *DownloadPersistentCacheTaskRequest) GetOutputPath() string { - if x != nil && x.OutputPath != nil { +func (x *SyncPersistentPiecesRequest) Reset() { + *x = SyncPersistentPiecesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncPersistentPiecesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncPersistentPiecesRequest) ProtoMessage() {} + +func (x *SyncPersistentPiecesRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[36] + 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 SyncPersistentPiecesRequest.ProtoReflect.Descriptor instead. +func (*SyncPersistentPiecesRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{36} +} + +func (x *SyncPersistentPiecesRequest) GetHostId() string { + if x != nil { + return x.HostId + } + return "" +} + +func (x *SyncPersistentPiecesRequest) GetTaskId() string { + if x != nil { + return x.TaskId + } + return "" +} + +func (x *SyncPersistentPiecesRequest) GetInterestedPieceNumbers() []uint32 { + if x != nil { + return x.InterestedPieceNumbers + } + return nil +} + +// SyncPersistentPiecesResponse represents response of SyncPersistentPieces. +type SyncPersistentPiecesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Exist piece number. + Number uint32 `protobuf:"varint,1,opt,name=number,proto3" json:"number,omitempty"` + // Piece offset. + Offset uint64 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"` + // Piece length. + Length uint64 `protobuf:"varint,3,opt,name=length,proto3" json:"length,omitempty"` + // IP is used to indicate the IP address of the peer. If protocol is rdma, + // the IP is used to exchange the queue pair endpoint of IBVerbs. + Ip string `protobuf:"bytes,4,opt,name=ip,proto3" json:"ip,omitempty"` + // TCP port is used to indicate the tcp server port of the peer. + TcpPort *int32 `protobuf:"varint,5,opt,name=tcp_port,json=tcpPort,proto3,oneof" json:"tcp_port,omitempty"` + // QUIC port is used to indicate the quic server port of the peer. + QuicPort *int32 `protobuf:"varint,6,opt,name=quic_port,json=quicPort,proto3,oneof" json:"quic_port,omitempty"` +} + +func (x *SyncPersistentPiecesResponse) Reset() { + *x = SyncPersistentPiecesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncPersistentPiecesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncPersistentPiecesResponse) ProtoMessage() {} + +func (x *SyncPersistentPiecesResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[37] + 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 SyncPersistentPiecesResponse.ProtoReflect.Descriptor instead. +func (*SyncPersistentPiecesResponse) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{37} +} + +func (x *SyncPersistentPiecesResponse) GetNumber() uint32 { + if x != nil { + return x.Number + } + return 0 +} + +func (x *SyncPersistentPiecesResponse) GetOffset() uint64 { + if x != nil { + return x.Offset + } + return 0 +} + +func (x *SyncPersistentPiecesResponse) GetLength() uint64 { + if x != nil { + return x.Length + } + return 0 +} + +func (x *SyncPersistentPiecesResponse) GetIp() string { + if x != nil { + return x.Ip + } + return "" +} + +func (x *SyncPersistentPiecesResponse) GetTcpPort() int32 { + if x != nil && x.TcpPort != nil { + return *x.TcpPort + } + return 0 +} + +func (x *SyncPersistentPiecesResponse) GetQuicPort() int32 { + if x != nil && x.QuicPort != nil { + return *x.QuicPort + } + return 0 +} + +// DownloadPersistentCacheTaskRequest represents request of DownloadPersistentCacheTask. +type DownloadPersistentCacheTaskRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Task id. + TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + // Persistent represents whether the persistent cache task is persistent. + // If the persistent cache task is persistent, the persistent cache peer will + // not be deleted when dfdaemon runs garbage collection. + Persistent bool `protobuf:"varint,2,opt,name=persistent,proto3" json:"persistent,omitempty"` + // Tag is used to distinguish different persistent cache tasks. + Tag *string `protobuf:"bytes,3,opt,name=tag,proto3,oneof" json:"tag,omitempty"` + // Application of task. + Application *string `protobuf:"bytes,4,opt,name=application,proto3,oneof" json:"application,omitempty"` + // File path to be exported. If output_path is set, the exported file will be saved to the specified path. + // Dfdaemon will try to create hard link to the output path before starting the export. If hard link creation fails, + // it will copy the file to the output path after the export is completed. + // For more details refer to https://github.com/dragonflyoss/design/blob/main/systems-analysis/file-download-workflow-with-hard-link/README.md. + OutputPath *string `protobuf:"bytes,5,opt,name=output_path,json=outputPath,proto3,oneof" json:"output_path,omitempty"` + // Download timeout. + Timeout *durationpb.Duration `protobuf:"bytes,6,opt,name=timeout,proto3,oneof" json:"timeout,omitempty"` + // need_piece_content is the flag to indicate whether the response needs to return piece content. + NeedPieceContent bool `protobuf:"varint,7,opt,name=need_piece_content,json=needPieceContent,proto3" json:"need_piece_content,omitempty"` + // force_hard_link is the flag to indicate whether the exported file must be hard linked to the output path. + // For more details refer to https://github.com/dragonflyoss/design/blob/main/systems-analysis/file-download-workflow-with-hard-link/README.md. + ForceHardLink bool `protobuf:"varint,8,opt,name=force_hard_link,json=forceHardLink,proto3" json:"force_hard_link,omitempty"` + // Verifies task data integrity after download using a digest. Supports CRC32, SHA256, and SHA512 algorithms. + // Format: `:`, e.g., `crc32:xxx`, `sha256:yyy`, `sha512:zzz`. + // Returns an error if the computed digest mismatches the expected value. + // + // Performance + // Digest calculation increases processing time. Enable only when data integrity verification is critical. + Digest *string `protobuf:"bytes,9,opt,name=digest,proto3,oneof" json:"digest,omitempty"` + // Remote IP represents the IP address of the client initiating the download request. + RemoteIp *string `protobuf:"bytes,10,opt,name=remote_ip,json=remoteIp,proto3,oneof" json:"remote_ip,omitempty"` + // Overwrite indicates whether to overwrite the existing file at output path. + Overwrite bool `protobuf:"varint,11,opt,name=overwrite,proto3" json:"overwrite,omitempty"` +} + +func (x *DownloadPersistentCacheTaskRequest) Reset() { + *x = DownloadPersistentCacheTaskRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DownloadPersistentCacheTaskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DownloadPersistentCacheTaskRequest) ProtoMessage() {} + +func (x *DownloadPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[38] + 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 DownloadPersistentCacheTaskRequest.ProtoReflect.Descriptor instead. +func (*DownloadPersistentCacheTaskRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{38} +} + +func (x *DownloadPersistentCacheTaskRequest) GetTaskId() string { + if x != nil { + return x.TaskId + } + return "" +} + +func (x *DownloadPersistentCacheTaskRequest) GetPersistent() bool { + if x != nil { + return x.Persistent + } + return false +} + +func (x *DownloadPersistentCacheTaskRequest) GetTag() string { + if x != nil && x.Tag != nil { + return *x.Tag + } + return "" +} + +func (x *DownloadPersistentCacheTaskRequest) GetApplication() string { + if x != nil && x.Application != nil { + return *x.Application + } + return "" +} + +func (x *DownloadPersistentCacheTaskRequest) GetOutputPath() string { + if x != nil && x.OutputPath != nil { return *x.OutputPath } return "" @@ -2806,50 +3239,340 @@ func (x *DownloadPersistentCacheTaskRequest) GetDigest() string { if x != nil && x.Digest != nil { return *x.Digest } - return "" + return "" +} + +func (x *DownloadPersistentCacheTaskRequest) GetRemoteIp() string { + if x != nil && x.RemoteIp != nil { + return *x.RemoteIp + } + return "" +} + +func (x *DownloadPersistentCacheTaskRequest) GetOverwrite() bool { + if x != nil { + return x.Overwrite + } + return false +} + +// DownloadPersistentCacheTaskStartedResponse represents task download started response of DownloadPersistentCacheTaskResponse. +type DownloadPersistentCacheTaskStartedResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Task content length. + ContentLength uint64 `protobuf:"varint,1,opt,name=content_length,json=contentLength,proto3" json:"content_length,omitempty"` +} + +func (x *DownloadPersistentCacheTaskStartedResponse) Reset() { + *x = DownloadPersistentCacheTaskStartedResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DownloadPersistentCacheTaskStartedResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DownloadPersistentCacheTaskStartedResponse) ProtoMessage() {} + +func (x *DownloadPersistentCacheTaskStartedResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[39] + 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 DownloadPersistentCacheTaskStartedResponse.ProtoReflect.Descriptor instead. +func (*DownloadPersistentCacheTaskStartedResponse) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{39} +} + +func (x *DownloadPersistentCacheTaskStartedResponse) GetContentLength() uint64 { + if x != nil { + return x.ContentLength + } + return 0 +} + +// DownloadPersistentCacheTaskResponse represents response of DownloadPersistentCacheTask. +type DownloadPersistentCacheTaskResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Host id. + HostId string `protobuf:"bytes,1,opt,name=host_id,json=hostId,proto3" json:"host_id,omitempty"` + // Task id. + TaskId string `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + // Peer id. + PeerId string `protobuf:"bytes,3,opt,name=peer_id,json=peerId,proto3" json:"peer_id,omitempty"` + // Types that are assignable to Response: + // + // *DownloadPersistentCacheTaskResponse_DownloadPersistentCacheTaskStartedResponse + // *DownloadPersistentCacheTaskResponse_DownloadPieceFinishedResponse + Response isDownloadPersistentCacheTaskResponse_Response `protobuf_oneof:"response"` +} + +func (x *DownloadPersistentCacheTaskResponse) Reset() { + *x = DownloadPersistentCacheTaskResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DownloadPersistentCacheTaskResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DownloadPersistentCacheTaskResponse) ProtoMessage() {} + +func (x *DownloadPersistentCacheTaskResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[40] + 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 DownloadPersistentCacheTaskResponse.ProtoReflect.Descriptor instead. +func (*DownloadPersistentCacheTaskResponse) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{40} +} + +func (x *DownloadPersistentCacheTaskResponse) GetHostId() string { + if x != nil { + return x.HostId + } + return "" +} + +func (x *DownloadPersistentCacheTaskResponse) GetTaskId() string { + if x != nil { + return x.TaskId + } + return "" +} + +func (x *DownloadPersistentCacheTaskResponse) GetPeerId() string { + if x != nil { + return x.PeerId + } + return "" +} + +func (m *DownloadPersistentCacheTaskResponse) GetResponse() isDownloadPersistentCacheTaskResponse_Response { + if m != nil { + return m.Response + } + return nil +} + +func (x *DownloadPersistentCacheTaskResponse) GetDownloadPersistentCacheTaskStartedResponse() *DownloadPersistentCacheTaskStartedResponse { + if x, ok := x.GetResponse().(*DownloadPersistentCacheTaskResponse_DownloadPersistentCacheTaskStartedResponse); ok { + return x.DownloadPersistentCacheTaskStartedResponse + } + return nil +} + +func (x *DownloadPersistentCacheTaskResponse) GetDownloadPieceFinishedResponse() *DownloadPieceFinishedResponse { + if x, ok := x.GetResponse().(*DownloadPersistentCacheTaskResponse_DownloadPieceFinishedResponse); ok { + return x.DownloadPieceFinishedResponse + } + return nil +} + +type isDownloadPersistentCacheTaskResponse_Response interface { + isDownloadPersistentCacheTaskResponse_Response() +} + +type DownloadPersistentCacheTaskResponse_DownloadPersistentCacheTaskStartedResponse struct { + DownloadPersistentCacheTaskStartedResponse *DownloadPersistentCacheTaskStartedResponse `protobuf:"bytes,4,opt,name=download_persistent_cache_task_started_response,json=downloadPersistentCacheTaskStartedResponse,proto3,oneof"` +} + +type DownloadPersistentCacheTaskResponse_DownloadPieceFinishedResponse struct { + DownloadPieceFinishedResponse *DownloadPieceFinishedResponse `protobuf:"bytes,5,opt,name=download_piece_finished_response,json=downloadPieceFinishedResponse,proto3,oneof"` +} + +func (*DownloadPersistentCacheTaskResponse_DownloadPersistentCacheTaskStartedResponse) isDownloadPersistentCacheTaskResponse_Response() { +} + +func (*DownloadPersistentCacheTaskResponse_DownloadPieceFinishedResponse) isDownloadPersistentCacheTaskResponse_Response() { +} + +// UploadPersistentCacheTaskRequest represents request of UploadPersistentCacheTask. +type UploadPersistentCacheTaskRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // content_for_calculating_task_id is the content used to calculate the task id. + // If content_for_calculating_task_id is set, use its value to calculate the task ID. + // Otherwise, calculate the task ID based on the file content, tag and application by blake3 algorithm`. + ContentForCalculatingTaskId *string `protobuf:"bytes,1,opt,name=content_for_calculating_task_id,json=contentForCalculatingTaskId,proto3,oneof" json:"content_for_calculating_task_id,omitempty"` + // Upload file path of persistent cache task. + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + // Replica count of the persistent persistent cache task. + PersistentReplicaCount uint64 `protobuf:"varint,3,opt,name=persistent_replica_count,json=persistentReplicaCount,proto3" json:"persistent_replica_count,omitempty"` + // Tag is used to distinguish different persistent cache tasks. + Tag *string `protobuf:"bytes,4,opt,name=tag,proto3,oneof" json:"tag,omitempty"` + // Application of the persistent cache task. + Application *string `protobuf:"bytes,5,opt,name=application,proto3,oneof" json:"application,omitempty"` + // Piece length of the persistent cache task, the value needs to be greater than or equal to 4194304(4MiB). + PieceLength *uint64 `protobuf:"varint,6,opt,name=piece_length,json=pieceLength,proto3,oneof" json:"piece_length,omitempty"` + // TTL of the persistent cache task. + Ttl *durationpb.Duration `protobuf:"bytes,7,opt,name=ttl,proto3" json:"ttl,omitempty"` + // Download timeout. + Timeout *durationpb.Duration `protobuf:"bytes,8,opt,name=timeout,proto3,oneof" json:"timeout,omitempty"` + // Remote IP represents the IP address of the client initiating the upload request. + RemoteIp *string `protobuf:"bytes,9,opt,name=remote_ip,json=remoteIp,proto3,oneof" json:"remote_ip,omitempty"` +} + +func (x *UploadPersistentCacheTaskRequest) Reset() { + *x = UploadPersistentCacheTaskRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UploadPersistentCacheTaskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UploadPersistentCacheTaskRequest) ProtoMessage() {} + +func (x *UploadPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[41] + 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 UploadPersistentCacheTaskRequest.ProtoReflect.Descriptor instead. +func (*UploadPersistentCacheTaskRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{41} +} + +func (x *UploadPersistentCacheTaskRequest) GetContentForCalculatingTaskId() string { + if x != nil && x.ContentForCalculatingTaskId != nil { + return *x.ContentForCalculatingTaskId + } + return "" +} + +func (x *UploadPersistentCacheTaskRequest) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *UploadPersistentCacheTaskRequest) GetPersistentReplicaCount() uint64 { + if x != nil { + return x.PersistentReplicaCount + } + return 0 +} + +func (x *UploadPersistentCacheTaskRequest) GetTag() string { + if x != nil && x.Tag != nil { + return *x.Tag + } + return "" +} + +func (x *UploadPersistentCacheTaskRequest) GetApplication() string { + if x != nil && x.Application != nil { + return *x.Application + } + return "" +} + +func (x *UploadPersistentCacheTaskRequest) GetPieceLength() uint64 { + if x != nil && x.PieceLength != nil { + return *x.PieceLength + } + return 0 +} + +func (x *UploadPersistentCacheTaskRequest) GetTtl() *durationpb.Duration { + if x != nil { + return x.Ttl + } + return nil +} + +func (x *UploadPersistentCacheTaskRequest) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + return nil } -func (x *DownloadPersistentCacheTaskRequest) GetRemoteIp() string { +func (x *UploadPersistentCacheTaskRequest) GetRemoteIp() string { if x != nil && x.RemoteIp != nil { return *x.RemoteIp } return "" } -func (x *DownloadPersistentCacheTaskRequest) GetOverwrite() bool { - if x != nil { - return x.Overwrite - } - return false -} - -// DownloadPersistentCacheTaskStartedResponse represents task download started response of DownloadPersistentCacheTaskResponse. -type DownloadPersistentCacheTaskStartedResponse struct { +// UpdatePersistentCacheTaskRequest represents request of UpdatePersistentCacheTask. +type UpdatePersistentCacheTaskRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Task content length. - ContentLength uint64 `protobuf:"varint,1,opt,name=content_length,json=contentLength,proto3" json:"content_length,omitempty"` + // Task id. + TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + // Persistent represents whether the persistent cache peer is persistent. + // If the persistent cache peer is persistent, the persistent cache peer will + // not be deleted when dfdaemon runs garbage collection. It only be deleted + // when the task is deleted by the user. + Persistent bool `protobuf:"varint,2,opt,name=persistent,proto3" json:"persistent,omitempty"` + // Remote IP represents the IP address of the client initiating the update request. + RemoteIp *string `protobuf:"bytes,3,opt,name=remote_ip,json=remoteIp,proto3,oneof" json:"remote_ip,omitempty"` } -func (x *DownloadPersistentCacheTaskStartedResponse) Reset() { - *x = DownloadPersistentCacheTaskStartedResponse{} +func (x *UpdatePersistentCacheTaskRequest) Reset() { + *x = UpdatePersistentCacheTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[32] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *DownloadPersistentCacheTaskStartedResponse) String() string { +func (x *UpdatePersistentCacheTaskRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DownloadPersistentCacheTaskStartedResponse) ProtoMessage() {} +func (*UpdatePersistentCacheTaskRequest) ProtoMessage() {} -func (x *DownloadPersistentCacheTaskStartedResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[32] +func (x *UpdatePersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2860,54 +3583,61 @@ func (x *DownloadPersistentCacheTaskStartedResponse) ProtoReflect() protoreflect return mi.MessageOf(x) } -// Deprecated: Use DownloadPersistentCacheTaskStartedResponse.ProtoReflect.Descriptor instead. -func (*DownloadPersistentCacheTaskStartedResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{32} +// Deprecated: Use UpdatePersistentCacheTaskRequest.ProtoReflect.Descriptor instead. +func (*UpdatePersistentCacheTaskRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{42} } -func (x *DownloadPersistentCacheTaskStartedResponse) GetContentLength() uint64 { +func (x *UpdatePersistentCacheTaskRequest) GetTaskId() string { if x != nil { - return x.ContentLength + return x.TaskId } - return 0 + return "" } -// DownloadPersistentCacheTaskResponse represents response of DownloadPersistentCacheTask. -type DownloadPersistentCacheTaskResponse struct { +func (x *UpdatePersistentCacheTaskRequest) GetPersistent() bool { + if x != nil { + return x.Persistent + } + return false +} + +func (x *UpdatePersistentCacheTaskRequest) GetRemoteIp() string { + if x != nil && x.RemoteIp != nil { + return *x.RemoteIp + } + return "" +} + +// StatPersistentCacheTaskRequest represents request of StatPersistentCacheTask. +type StatPersistentCacheTaskRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Host id. - HostId string `protobuf:"bytes,1,opt,name=host_id,json=hostId,proto3" json:"host_id,omitempty"` // Task id. - TaskId string `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - // Peer id. - PeerId string `protobuf:"bytes,3,opt,name=peer_id,json=peerId,proto3" json:"peer_id,omitempty"` - // Types that are assignable to Response: - // - // *DownloadPersistentCacheTaskResponse_DownloadPersistentCacheTaskStartedResponse - // *DownloadPersistentCacheTaskResponse_DownloadPieceFinishedResponse - Response isDownloadPersistentCacheTaskResponse_Response `protobuf_oneof:"response"` + TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + // Remote IP represents the IP address of the client initiating the stat request. + RemoteIp *string `protobuf:"bytes,2,opt,name=remote_ip,json=remoteIp,proto3,oneof" json:"remote_ip,omitempty"` } -func (x *DownloadPersistentCacheTaskResponse) Reset() { - *x = DownloadPersistentCacheTaskResponse{} +func (x *StatPersistentCacheTaskRequest) Reset() { + *x = StatPersistentCacheTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[33] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *DownloadPersistentCacheTaskResponse) String() string { +func (x *StatPersistentCacheTaskRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DownloadPersistentCacheTaskResponse) ProtoMessage() {} +func (*StatPersistentCacheTaskRequest) ProtoMessage() {} -func (x *DownloadPersistentCacheTaskResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[33] +func (x *StatPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2918,116 +3648,132 @@ func (x *DownloadPersistentCacheTaskResponse) ProtoReflect() protoreflect.Messag return mi.MessageOf(x) } -// Deprecated: Use DownloadPersistentCacheTaskResponse.ProtoReflect.Descriptor instead. -func (*DownloadPersistentCacheTaskResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{33} -} - -func (x *DownloadPersistentCacheTaskResponse) GetHostId() string { - if x != nil { - return x.HostId - } - return "" +// Deprecated: Use StatPersistentCacheTaskRequest.ProtoReflect.Descriptor instead. +func (*StatPersistentCacheTaskRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{43} } -func (x *DownloadPersistentCacheTaskResponse) GetTaskId() string { +func (x *StatPersistentCacheTaskRequest) GetTaskId() string { if x != nil { return x.TaskId } return "" } -func (x *DownloadPersistentCacheTaskResponse) GetPeerId() string { - if x != nil { - return x.PeerId +func (x *StatPersistentCacheTaskRequest) GetRemoteIp() string { + if x != nil && x.RemoteIp != nil { + return *x.RemoteIp } return "" } -func (m *DownloadPersistentCacheTaskResponse) GetResponse() isDownloadPersistentCacheTaskResponse_Response { - if m != nil { - return m.Response - } - return nil -} +// StatLocalPersistentCacheTaskRequest represents request of StatLocalPersistentCacheTask. +type StatLocalPersistentCacheTaskRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (x *DownloadPersistentCacheTaskResponse) GetDownloadPersistentCacheTaskStartedResponse() *DownloadPersistentCacheTaskStartedResponse { - if x, ok := x.GetResponse().(*DownloadPersistentCacheTaskResponse_DownloadPersistentCacheTaskStartedResponse); ok { - return x.DownloadPersistentCacheTaskStartedResponse - } - return nil + // Task id. + TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + // Remote IP represents the IP address of the client initiating the stat request. + RemoteIp *string `protobuf:"bytes,2,opt,name=remote_ip,json=remoteIp,proto3,oneof" json:"remote_ip,omitempty"` } -func (x *DownloadPersistentCacheTaskResponse) GetDownloadPieceFinishedResponse() *DownloadPieceFinishedResponse { - if x, ok := x.GetResponse().(*DownloadPersistentCacheTaskResponse_DownloadPieceFinishedResponse); ok { - return x.DownloadPieceFinishedResponse +func (x *StatLocalPersistentCacheTaskRequest) Reset() { + *x = StatLocalPersistentCacheTaskRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -type isDownloadPersistentCacheTaskResponse_Response interface { - isDownloadPersistentCacheTaskResponse_Response() +func (x *StatLocalPersistentCacheTaskRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -type DownloadPersistentCacheTaskResponse_DownloadPersistentCacheTaskStartedResponse struct { - DownloadPersistentCacheTaskStartedResponse *DownloadPersistentCacheTaskStartedResponse `protobuf:"bytes,4,opt,name=download_persistent_cache_task_started_response,json=downloadPersistentCacheTaskStartedResponse,proto3,oneof"` +func (*StatLocalPersistentCacheTaskRequest) ProtoMessage() {} + +func (x *StatLocalPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[44] + 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) } -type DownloadPersistentCacheTaskResponse_DownloadPieceFinishedResponse struct { - DownloadPieceFinishedResponse *DownloadPieceFinishedResponse `protobuf:"bytes,5,opt,name=download_piece_finished_response,json=downloadPieceFinishedResponse,proto3,oneof"` +// Deprecated: Use StatLocalPersistentCacheTaskRequest.ProtoReflect.Descriptor instead. +func (*StatLocalPersistentCacheTaskRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{44} } -func (*DownloadPersistentCacheTaskResponse_DownloadPersistentCacheTaskStartedResponse) isDownloadPersistentCacheTaskResponse_Response() { +func (x *StatLocalPersistentCacheTaskRequest) GetTaskId() string { + if x != nil { + return x.TaskId + } + return "" } -func (*DownloadPersistentCacheTaskResponse_DownloadPieceFinishedResponse) isDownloadPersistentCacheTaskResponse_Response() { +func (x *StatLocalPersistentCacheTaskRequest) GetRemoteIp() string { + if x != nil && x.RemoteIp != nil { + return *x.RemoteIp + } + return "" } -// UploadPersistentCacheTaskRequest represents request of UploadPersistentCacheTask. -type UploadPersistentCacheTaskRequest struct { +// StatLocalPersistentTaskResponse represents response of StatLocalPersistentTask. +type StatLocalPersistentCacheTaskResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // content_for_calculating_task_id is the content used to calculate the task id. - // If content_for_calculating_task_id is set, use its value to calculate the task ID. - // Otherwise, calculate the task ID based on the file content, tag and application by blake3 algorithm`. - ContentForCalculatingTaskId *string `protobuf:"bytes,1,opt,name=content_for_calculating_task_id,json=contentForCalculatingTaskId,proto3,oneof" json:"content_for_calculating_task_id,omitempty"` - // Upload file path of persistent cache task. - Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` - // Replica count of the persistent persistent cache task. - PersistentReplicaCount uint64 `protobuf:"varint,3,opt,name=persistent_replica_count,json=persistentReplicaCount,proto3" json:"persistent_replica_count,omitempty"` - // Tag is used to distinguish different persistent cache tasks. - Tag *string `protobuf:"bytes,4,opt,name=tag,proto3,oneof" json:"tag,omitempty"` - // Application of the persistent cache task. - Application *string `protobuf:"bytes,5,opt,name=application,proto3,oneof" json:"application,omitempty"` - // Piece length of the persistent cache task, the value needs to be greater than or equal to 4194304(4MiB). - PieceLength *uint64 `protobuf:"varint,6,opt,name=piece_length,json=pieceLength,proto3,oneof" json:"piece_length,omitempty"` + // Task id. + TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + // Persistent represents whether the persistent cache task is persistent. + // If the persistent cache task is persistent, the persistent cache peer will + // not be deleted when dfdamon runs garbage collection. + Persistent bool `protobuf:"varint,2,opt,name=persistent,proto3" json:"persistent,omitempty"` // TTL of the persistent cache task. - Ttl *durationpb.Duration `protobuf:"bytes,7,opt,name=ttl,proto3" json:"ttl,omitempty"` - // Download timeout. - Timeout *durationpb.Duration `protobuf:"bytes,8,opt,name=timeout,proto3,oneof" json:"timeout,omitempty"` - // Remote IP represents the IP address of the client initiating the upload request. - RemoteIp *string `protobuf:"bytes,9,opt,name=remote_ip,json=remoteIp,proto3,oneof" json:"remote_ip,omitempty"` + Ttl *durationpb.Duration `protobuf:"bytes,3,opt,name=ttl,proto3" json:"ttl,omitempty"` + // Task piece length. + PieceLength *uint64 `protobuf:"varint,4,opt,name=piece_length,json=pieceLength,proto3,oneof" json:"piece_length,omitempty"` + // Task content length. + ContentLength *uint64 `protobuf:"varint,5,opt,name=content_length,json=contentLength,proto3,oneof" json:"content_length,omitempty"` + // Uploading count is the count of the task being uploaded by other peers. + UploadingCount uint64 `protobuf:"varint,6,opt,name=uploading_count,json=uploadingCount,proto3" json:"uploading_count,omitempty"` + // Uploaded count is the count of the task has been uploaded by other peers. + UploadedCount uint64 `protobuf:"varint,7,opt,name=uploaded_count,json=uploadedCount,proto3" json:"uploaded_count,omitempty"` + // Task create time. + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + // Task update time. + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + // Task fail time. + FailedAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=failed_at,json=failedAt,proto3,oneof" json:"failed_at,omitempty"` + // Task finish time. + FinishedAt *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=finished_at,json=finishedAt,proto3,oneof" json:"finished_at,omitempty"` } -func (x *UploadPersistentCacheTaskRequest) Reset() { - *x = UploadPersistentCacheTaskRequest{} +func (x *StatLocalPersistentCacheTaskResponse) Reset() { + *x = StatLocalPersistentCacheTaskResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[34] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UploadPersistentCacheTaskRequest) String() string { +func (x *StatLocalPersistentCacheTaskResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UploadPersistentCacheTaskRequest) ProtoMessage() {} +func (*StatLocalPersistentCacheTaskResponse) ProtoMessage() {} -func (x *UploadPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[34] +func (x *StatLocalPersistentCacheTaskResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3038,108 +3784,112 @@ func (x *UploadPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UploadPersistentCacheTaskRequest.ProtoReflect.Descriptor instead. -func (*UploadPersistentCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{34} +// Deprecated: Use StatLocalPersistentCacheTaskResponse.ProtoReflect.Descriptor instead. +func (*StatLocalPersistentCacheTaskResponse) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{45} } -func (x *UploadPersistentCacheTaskRequest) GetContentForCalculatingTaskId() string { - if x != nil && x.ContentForCalculatingTaskId != nil { - return *x.ContentForCalculatingTaskId +func (x *StatLocalPersistentCacheTaskResponse) GetTaskId() string { + if x != nil { + return x.TaskId } return "" } -func (x *UploadPersistentCacheTaskRequest) GetPath() string { +func (x *StatLocalPersistentCacheTaskResponse) GetPersistent() bool { if x != nil { - return x.Path + return x.Persistent } - return "" + return false } -func (x *UploadPersistentCacheTaskRequest) GetPersistentReplicaCount() uint64 { +func (x *StatLocalPersistentCacheTaskResponse) GetTtl() *durationpb.Duration { if x != nil { - return x.PersistentReplicaCount + return x.Ttl + } + return nil +} + +func (x *StatLocalPersistentCacheTaskResponse) GetPieceLength() uint64 { + if x != nil && x.PieceLength != nil { + return *x.PieceLength } return 0 } -func (x *UploadPersistentCacheTaskRequest) GetTag() string { - if x != nil && x.Tag != nil { - return *x.Tag +func (x *StatLocalPersistentCacheTaskResponse) GetContentLength() uint64 { + if x != nil && x.ContentLength != nil { + return *x.ContentLength } - return "" + return 0 } -func (x *UploadPersistentCacheTaskRequest) GetApplication() string { - if x != nil && x.Application != nil { - return *x.Application +func (x *StatLocalPersistentCacheTaskResponse) GetUploadingCount() uint64 { + if x != nil { + return x.UploadingCount } - return "" + return 0 } -func (x *UploadPersistentCacheTaskRequest) GetPieceLength() uint64 { - if x != nil && x.PieceLength != nil { - return *x.PieceLength +func (x *StatLocalPersistentCacheTaskResponse) GetUploadedCount() uint64 { + if x != nil { + return x.UploadedCount + } + return 0 +} + +func (x *StatLocalPersistentCacheTaskResponse) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt } - return 0 + return nil } -func (x *UploadPersistentCacheTaskRequest) GetTtl() *durationpb.Duration { +func (x *StatLocalPersistentCacheTaskResponse) GetUpdatedAt() *timestamppb.Timestamp { if x != nil { - return x.Ttl + return x.UpdatedAt } return nil } -func (x *UploadPersistentCacheTaskRequest) GetTimeout() *durationpb.Duration { +func (x *StatLocalPersistentCacheTaskResponse) GetFailedAt() *timestamppb.Timestamp { if x != nil { - return x.Timeout + return x.FailedAt } return nil } -func (x *UploadPersistentCacheTaskRequest) GetRemoteIp() string { - if x != nil && x.RemoteIp != nil { - return *x.RemoteIp +func (x *StatLocalPersistentCacheTaskResponse) GetFinishedAt() *timestamppb.Timestamp { + if x != nil { + return x.FinishedAt } - return "" + return nil } -// UpdatePersistentCacheTaskRequest represents request of UpdatePersistentCacheTask. -type UpdatePersistentCacheTaskRequest struct { +// ListLocalPersistentCacheTasksRequest represents request of ListLocalPersistentCacheTasks. +type ListLocalPersistentCacheTasksRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - // Task id. - TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - // Persistent represents whether the persistent cache peer is persistent. - // If the persistent cache peer is persistent, the persistent cache peer will - // not be deleted when dfdaemon runs garbage collection. It only be deleted - // when the task is deleted by the user. - Persistent bool `protobuf:"varint,2,opt,name=persistent,proto3" json:"persistent,omitempty"` - // Remote IP represents the IP address of the client initiating the update request. - RemoteIp *string `protobuf:"bytes,3,opt,name=remote_ip,json=remoteIp,proto3,oneof" json:"remote_ip,omitempty"` } -func (x *UpdatePersistentCacheTaskRequest) Reset() { - *x = UpdatePersistentCacheTaskRequest{} +func (x *ListLocalPersistentCacheTasksRequest) Reset() { + *x = ListLocalPersistentCacheTasksRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[35] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UpdatePersistentCacheTaskRequest) String() string { +func (x *ListLocalPersistentCacheTasksRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdatePersistentCacheTaskRequest) ProtoMessage() {} +func (*ListLocalPersistentCacheTasksRequest) ProtoMessage() {} -func (x *UpdatePersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[35] +func (x *ListLocalPersistentCacheTasksRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3150,61 +3900,38 @@ func (x *UpdatePersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdatePersistentCacheTaskRequest.ProtoReflect.Descriptor instead. -func (*UpdatePersistentCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{35} -} - -func (x *UpdatePersistentCacheTaskRequest) GetTaskId() string { - if x != nil { - return x.TaskId - } - return "" -} - -func (x *UpdatePersistentCacheTaskRequest) GetPersistent() bool { - if x != nil { - return x.Persistent - } - return false -} - -func (x *UpdatePersistentCacheTaskRequest) GetRemoteIp() string { - if x != nil && x.RemoteIp != nil { - return *x.RemoteIp - } - return "" +// Deprecated: Use ListLocalPersistentCacheTasksRequest.ProtoReflect.Descriptor instead. +func (*ListLocalPersistentCacheTasksRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{46} } -// StatPersistentCacheTaskRequest represents request of StatPersistentCacheTask. -type StatPersistentCacheTaskRequest struct { +// ListLocalPersistentTasksResponse represents response of ListLocalPersistentTasks. +type ListLocalPersistentCacheTasksResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Task id. - TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - // Remote IP represents the IP address of the client initiating the stat request. - RemoteIp *string `protobuf:"bytes,2,opt,name=remote_ip,json=remoteIp,proto3,oneof" json:"remote_ip,omitempty"` + // Task ids of the local tasks. + Tasks []*StatLocalPersistentCacheTaskResponse `protobuf:"bytes,1,rep,name=tasks,proto3" json:"tasks,omitempty"` } -func (x *StatPersistentCacheTaskRequest) Reset() { - *x = StatPersistentCacheTaskRequest{} +func (x *ListLocalPersistentCacheTasksResponse) Reset() { + *x = ListLocalPersistentCacheTasksResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[36] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *StatPersistentCacheTaskRequest) String() string { +func (x *ListLocalPersistentCacheTasksResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StatPersistentCacheTaskRequest) ProtoMessage() {} +func (*ListLocalPersistentCacheTasksResponse) ProtoMessage() {} -func (x *StatPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[36] +func (x *ListLocalPersistentCacheTasksResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3215,23 +3942,16 @@ func (x *StatPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StatPersistentCacheTaskRequest.ProtoReflect.Descriptor instead. -func (*StatPersistentCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{36} +// Deprecated: Use ListLocalPersistentCacheTasksResponse.ProtoReflect.Descriptor instead. +func (*ListLocalPersistentCacheTasksResponse) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{47} } -func (x *StatPersistentCacheTaskRequest) GetTaskId() string { +func (x *ListLocalPersistentCacheTasksResponse) GetTasks() []*StatLocalPersistentCacheTaskResponse { if x != nil { - return x.TaskId - } - return "" -} - -func (x *StatPersistentCacheTaskRequest) GetRemoteIp() string { - if x != nil && x.RemoteIp != nil { - return *x.RemoteIp + return x.Tasks } - return "" + return nil } // DeletePersistentCacheTaskRequest represents request of DeletePersistentCacheTask. @@ -3249,7 +3969,7 @@ type DeletePersistentCacheTaskRequest struct { func (x *DeletePersistentCacheTaskRequest) Reset() { *x = DeletePersistentCacheTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[37] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3262,7 +3982,7 @@ func (x *DeletePersistentCacheTaskRequest) String() string { func (*DeletePersistentCacheTaskRequest) ProtoMessage() {} func (x *DeletePersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[37] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3275,7 +3995,7 @@ func (x *DeletePersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeletePersistentCacheTaskRequest.ProtoReflect.Descriptor instead. func (*DeletePersistentCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{37} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{48} } func (x *DeletePersistentCacheTaskRequest) GetTaskId() string { @@ -3309,7 +4029,7 @@ type SyncPersistentCachePiecesRequest struct { func (x *SyncPersistentCachePiecesRequest) Reset() { *x = SyncPersistentCachePiecesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[38] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3322,7 +4042,7 @@ func (x *SyncPersistentCachePiecesRequest) String() string { func (*SyncPersistentCachePiecesRequest) ProtoMessage() {} func (x *SyncPersistentCachePiecesRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[38] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3335,7 +4055,7 @@ func (x *SyncPersistentCachePiecesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncPersistentCachePiecesRequest.ProtoReflect.Descriptor instead. func (*SyncPersistentCachePiecesRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{38} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{49} } func (x *SyncPersistentCachePiecesRequest) GetHostId() string { @@ -3383,7 +4103,7 @@ type SyncPersistentCachePiecesResponse struct { func (x *SyncPersistentCachePiecesResponse) Reset() { *x = SyncPersistentCachePiecesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[39] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3396,7 +4116,7 @@ func (x *SyncPersistentCachePiecesResponse) String() string { func (*SyncPersistentCachePiecesResponse) ProtoMessage() {} func (x *SyncPersistentCachePiecesResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[39] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3409,7 +4129,7 @@ func (x *SyncPersistentCachePiecesResponse) ProtoReflect() protoreflect.Message // Deprecated: Use SyncPersistentCachePiecesResponse.ProtoReflect.Descriptor instead. func (*SyncPersistentCachePiecesResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{39} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{50} } func (x *SyncPersistentCachePiecesResponse) GetNumber() uint32 { @@ -3469,7 +4189,7 @@ type SyncHostRequest struct { func (x *SyncHostRequest) Reset() { *x = SyncHostRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[40] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3482,7 +4202,7 @@ func (x *SyncHostRequest) String() string { func (*SyncHostRequest) ProtoMessage() {} func (x *SyncHostRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[40] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3495,7 +4215,7 @@ func (x *SyncHostRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncHostRequest.ProtoReflect.Descriptor instead. func (*SyncHostRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{40} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{51} } func (x *SyncHostRequest) GetHostId() string { @@ -3529,7 +4249,7 @@ type IBVerbsQueuePairEndpoint struct { func (x *IBVerbsQueuePairEndpoint) Reset() { *x = IBVerbsQueuePairEndpoint{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[41] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3542,7 +4262,7 @@ func (x *IBVerbsQueuePairEndpoint) String() string { func (*IBVerbsQueuePairEndpoint) ProtoMessage() {} func (x *IBVerbsQueuePairEndpoint) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[41] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3555,7 +4275,7 @@ func (x *IBVerbsQueuePairEndpoint) ProtoReflect() protoreflect.Message { // Deprecated: Use IBVerbsQueuePairEndpoint.ProtoReflect.Descriptor instead. func (*IBVerbsQueuePairEndpoint) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{41} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{52} } func (x *IBVerbsQueuePairEndpoint) GetNum() uint32 { @@ -3592,7 +4312,7 @@ type ExchangeIBVerbsQueuePairEndpointRequest struct { func (x *ExchangeIBVerbsQueuePairEndpointRequest) Reset() { *x = ExchangeIBVerbsQueuePairEndpointRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[42] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3605,7 +4325,7 @@ func (x *ExchangeIBVerbsQueuePairEndpointRequest) String() string { func (*ExchangeIBVerbsQueuePairEndpointRequest) ProtoMessage() {} func (x *ExchangeIBVerbsQueuePairEndpointRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[42] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3618,7 +4338,7 @@ func (x *ExchangeIBVerbsQueuePairEndpointRequest) ProtoReflect() protoreflect.Me // Deprecated: Use ExchangeIBVerbsQueuePairEndpointRequest.ProtoReflect.Descriptor instead. func (*ExchangeIBVerbsQueuePairEndpointRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{42} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{53} } func (x *ExchangeIBVerbsQueuePairEndpointRequest) GetEndpoint() *IBVerbsQueuePairEndpoint { @@ -3641,7 +4361,7 @@ type ExchangeIBVerbsQueuePairEndpointResponse struct { func (x *ExchangeIBVerbsQueuePairEndpointResponse) Reset() { *x = ExchangeIBVerbsQueuePairEndpointResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[43] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3654,7 +4374,7 @@ func (x *ExchangeIBVerbsQueuePairEndpointResponse) String() string { func (*ExchangeIBVerbsQueuePairEndpointResponse) ProtoMessage() {} func (x *ExchangeIBVerbsQueuePairEndpointResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[43] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3667,7 +4387,7 @@ func (x *ExchangeIBVerbsQueuePairEndpointResponse) ProtoReflect() protoreflect.M // Deprecated: Use ExchangeIBVerbsQueuePairEndpointResponse.ProtoReflect.Descriptor instead. func (*ExchangeIBVerbsQueuePairEndpointResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{43} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{54} } func (x *ExchangeIBVerbsQueuePairEndpointResponse) GetEndpoint() *IBVerbsQueuePairEndpoint { @@ -3841,559 +4561,474 @@ var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x42, 0x0e, 0x0a, - 0x0c, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x22, 0xc6, 0x05, - 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, - 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x5d, 0x0a, 0x0e, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x07, 0x74, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0c, - 0x52, 0x10, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x12, 0x44, 0x0a, 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x0d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x04, 0x68, 0x64, 0x66, 0x73, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x48, 0x44, 0x46, 0x53, 0x48, 0x02, 0x52, 0x04, 0x68, 0x64, 0x66, 0x73, 0x88, - 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, - 0x01, 0x48, 0x03, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, - 0x12, 0x3e, 0x0a, 0x0c, 0x68, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x63, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x48, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x63, 0x65, 0x48, 0x04, - 0x52, 0x0b, 0x68, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x63, 0x65, 0x88, 0x01, 0x01, - 0x12, 0x3b, 0x0a, 0x0b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x48, 0x05, 0x52, 0x0a, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x1a, 0x40, 0x0a, - 0x12, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 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, 0x42, - 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x5f, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x07, - 0x0a, 0x05, 0x5f, 0x68, 0x64, 0x66, 0x73, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x5f, 0x69, 0x70, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x68, 0x75, 0x67, 0x67, 0x69, 0x6e, - 0x67, 0x5f, 0x66, 0x61, 0x63, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x22, 0xd8, 0x02, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x61, 0x73, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x61, 0x0a, 0x0f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x0b, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x1a, 0x07, 0x10, 0xd7, 0x04, 0x28, 0x64, 0x40, 0x01, 0x48, - 0x00, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, - 0x12, 0x2c, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x41, - 0x0a, 0x13, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 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, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x22, 0x57, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, - 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x25, 0x0a, 0x0e, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x12, 0x15, 0x0a, 0x06, 0x69, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x44, 0x69, 0x72, 0x22, 0x71, 0x0a, 0x11, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, - 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, - 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x42, - 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0xe6, 0x0b, - 0x0a, 0x18, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, - 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x03, 0x75, 0x72, - 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x88, 0x01, - 0x01, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x92, 0x01, 0xfa, 0x42, 0x8e, 0x01, 0x72, 0x8b, - 0x01, 0x32, 0x85, 0x01, 0x5e, 0x28, 0x6d, 0x64, 0x35, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, - 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, 0x32, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x31, 0x3a, 0x5b, - 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x30, 0x7d, 0x7c, 0x73, - 0x68, 0x61, 0x32, 0x35, 0x36, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, - 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x3a, 0x5b, 0x61, 0x2d, - 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x32, 0x38, 0x7d, 0x7c, 0x62, 0x6c, - 0x61, 0x6b, 0x65, 0x33, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, - 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x63, 0x72, 0x63, 0x33, 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, - 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x24, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x06, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x05, 0x72, 0x61, 0x6e, - 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x01, 0x52, 0x05, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x03, 0x74, 0x61, 0x67, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x03, 0x74, 0x61, 0x67, 0x88, 0x01, 0x01, - 0x12, 0x25, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x42, 0x08, - 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x12, 0x32, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x13, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x5f, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, - 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x0c, 0x70, 0x69, 0x65, 0x63, 0x65, - 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x42, 0x0c, 0xfa, - 0x42, 0x09, 0x32, 0x07, 0x28, 0x80, 0x80, 0x80, 0x02, 0x40, 0x01, 0x48, 0x04, 0x52, 0x0b, 0x70, - 0x69, 0x65, 0x63, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, - 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x05, - 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, - 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x06, 0x52, 0x07, 0x74, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x16, 0x64, 0x69, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2d, - 0x0a, 0x13, 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x5f, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6e, 0x65, 0x65, - 0x64, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2b, 0x0a, - 0x11, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, - 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x70, 0x72, - 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x12, 0x44, 0x0a, 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x48, 0x07, 0x52, 0x0d, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x04, - 0x68, 0x64, 0x66, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x44, 0x46, 0x53, 0x48, 0x08, 0x52, 0x04, 0x68, - 0x64, 0x66, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x65, - 0x66, 0x65, 0x74, 0x63, 0x68, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x50, - 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x65, 0x64, 0x5f, - 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x14, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x10, 0x6e, 0x65, 0x65, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x49, 0x0a, 0x1f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x48, 0x09, - 0x52, 0x1b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x46, 0x6f, 0x72, 0x43, 0x61, 0x6c, 0x63, - 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x88, 0x01, 0x01, - 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x16, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, - 0x0a, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x12, 0x1c, - 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x1a, 0x40, 0x0a, 0x12, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 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, 0x42, 0x09, - 0x0a, 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x74, 0x61, 0x67, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, - 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x0e, 0x0a, 0x0c, - 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x42, 0x0a, 0x0a, 0x08, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x5f, - 0x68, 0x64, 0x66, 0x73, 0x42, 0x22, 0x0a, 0x20, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0xfa, 0x02, 0x0a, 0x20, 0x44, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x12, 0x2b, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, - 0x6a, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x06, 0x70, - 0x69, 0x65, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x06, 0x70, - 0x69, 0x65, 0x63, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x46, 0x69, - 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x1a, 0x41, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 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, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x22, 0x8a, 0x03, 0x0a, 0x19, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, - 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, - 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x12, 0x7f, 0x0a, 0x24, 0x64, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x20, 0x64, 0x6f, 0x77, 0x6e, - 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, - 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, - 0x52, 0x1d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, - 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, - 0x0f, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x03, 0xf8, 0x42, 0x01, - 0x22, 0xab, 0x01, 0x0a, 0x16, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, - 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x68, - 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, - 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, - 0x4d, 0x0a, 0x1e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x61, - 0x63, 0x68, 0x65, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, - 0x01, 0x52, 0x1b, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x61, 0x63, - 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x61, - 0x0a, 0x17, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x22, 0x82, 0x01, 0x0a, 0x19, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, - 0x64, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, - 0x6b, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x8c, 0x02, 0x0a, 0x1a, 0x44, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x70, 0x69, 0x65, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x05, 0x70, 0x69, 0x65, 0x63, 0x65, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x92, 0x01, 0xfa, 0x42, 0x8e, 0x01, 0x72, - 0x8b, 0x01, 0x32, 0x85, 0x01, 0x5e, 0x28, 0x6d, 0x64, 0x35, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, - 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, 0x32, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x31, 0x3a, - 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x30, 0x7d, 0x7c, - 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, - 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x3a, 0x5b, 0x61, - 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x32, 0x38, 0x7d, 0x7c, 0x62, - 0x6c, 0x61, 0x6b, 0x65, 0x33, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, - 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x63, 0x72, 0x63, 0x33, 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, - 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x24, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, - 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x74, 0x0a, 0x14, 0x53, 0x74, 0x61, 0x74, 0x43, 0x61, 0x63, - 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, - 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, - 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, - 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, - 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0x76, 0x0a, 0x16, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, + 0x0c, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x22, 0x17, 0x0a, + 0x15, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x52, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x38, 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x52, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x22, 0xc6, 0x05, 0x0a, 0x16, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x5f, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, - 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x49, 0x70, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x5f, 0x69, 0x70, 0x22, 0xff, 0x03, 0x0a, 0x1d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0b, 0xfa, 0x42, 0x08, 0x72, 0x06, 0x88, 0x01, 0x01, 0xd0, 0x01, 0x01, 0x52, - 0x03, 0x75, 0x72, 0x6c, 0x12, 0x3f, 0x0a, 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x0d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, - 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x50, 0x61, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, - 0x01, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6e, - 0x65, 0x65, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x26, 0x0a, 0x0f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x6c, 0x69, - 0x6e, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x48, - 0x61, 0x72, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x1b, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, - 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, - 0xd0, 0x01, 0x01, 0x48, 0x03, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, - 0x01, 0x01, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x09, 0x0a, 0x07, - 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0x4e, 0x0a, 0x25, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, - 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x9a, 0x03, 0x0a, 0x1e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, - 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, - 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, - 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, - 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, - 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, - 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x12, 0x8e, - 0x01, 0x0a, 0x29, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x25, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, - 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x75, 0x0a, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, - 0x65, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x64, 0x66, 0x64, 0x61, - 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x9c, 0x03, 0x0a, 0x1b, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x88, 0x01, 0x01, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x49, - 0x0a, 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x38, 0x0a, 0x18, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x3d, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x10, 0xfa, 0x42, 0x0d, 0xaa, 0x01, 0x0a, - 0x22, 0x04, 0x08, 0x80, 0xf5, 0x24, 0x32, 0x02, 0x08, 0x3c, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x12, - 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x07, 0x74, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, - 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x01, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, - 0x70, 0x22, 0x9b, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, - 0x6b, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, - 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, - 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, - 0x79, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, + 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x5d, 0x0a, 0x0e, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x36, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, + 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x63, + 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, + 0x44, 0x0a, 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x48, 0x01, 0x52, 0x0d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x04, 0x68, 0x64, 0x66, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x48, 0x44, 0x46, 0x53, 0x48, 0x02, 0x52, 0x04, 0x68, 0x64, 0x66, 0x73, 0x88, 0x01, 0x01, 0x12, + 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x03, + 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, + 0x0c, 0x68, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x48, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x63, 0x65, 0x48, 0x04, 0x52, 0x0b, 0x68, + 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x63, 0x65, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, + 0x0b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4d, + 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x48, 0x05, 0x52, 0x0a, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 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, 0x42, 0x0a, 0x0a, 0x08, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x5f, + 0x68, 0x64, 0x66, 0x73, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, + 0x69, 0x70, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x68, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x5f, 0x66, + 0x61, 0x63, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x73, 0x63, + 0x6f, 0x70, 0x65, 0x22, 0xd8, 0x02, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, + 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x61, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x38, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x0b, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x42, 0x0c, + 0xfa, 0x42, 0x09, 0x1a, 0x07, 0x10, 0xd7, 0x04, 0x28, 0x64, 0x40, 0x01, 0x48, 0x00, 0x52, 0x0a, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, + 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x41, 0x0a, 0x13, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 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, 0x42, 0x0e, + 0x0a, 0x0c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x57, + 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x12, 0x15, 0x0a, 0x06, 0x69, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x05, 0x69, 0x73, 0x44, 0x69, 0x72, 0x22, 0x71, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, - 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0x7b, 0x0a, 0x1b, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, - 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, - 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, - 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, - 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0xa5, 0x01, 0x0a, 0x1b, 0x53, 0x79, 0x6e, 0x63, - 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, - 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, - 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x18, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, - 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x16, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, - 0xfc, 0x01, 0x0a, 0x1c, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x70, 0x01, 0x52, 0x02, 0x69, - 0x70, 0x12, 0x2e, 0x0a, 0x08, 0x74, 0x63, 0x70, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x1a, 0x09, 0x10, 0xff, 0xff, 0x03, 0x28, 0x80, - 0x08, 0x40, 0x01, 0x48, 0x00, 0x52, 0x07, 0x74, 0x63, 0x70, 0x50, 0x6f, 0x72, 0x74, 0x88, 0x01, - 0x01, 0x12, 0x30, 0x0a, 0x09, 0x71, 0x75, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x1a, 0x09, 0x10, 0xff, 0xff, 0x03, 0x28, - 0x80, 0x08, 0x40, 0x01, 0x48, 0x01, 0x52, 0x08, 0x71, 0x75, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, - 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x70, 0x6f, 0x72, 0x74, - 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x71, 0x75, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x9c, - 0x04, 0x0a, 0x22, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, 0x72, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x74, 0x61, 0x67, 0x88, 0x01, 0x01, 0x12, 0x25, - 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, - 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x02, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x50, 0x61, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x03, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, - 0x01, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6e, - 0x65, 0x65, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x26, 0x0a, 0x0f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x6c, 0x69, - 0x6e, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x48, - 0x61, 0x72, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x1b, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x04, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, - 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, - 0xd0, 0x01, 0x01, 0x48, 0x05, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, - 0x01, 0x01, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x74, 0x61, 0x67, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, - 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0x53, 0x0a, - 0x2a, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x22, 0xb4, 0x03, 0x0a, 0x23, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, - 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, - 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, - 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, - 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, - 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, - 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x20, - 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x9e, 0x01, 0x0a, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x74, + 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0x76, 0x0a, 0x16, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, + 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x5f, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, + 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, + 0x70, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, + 0x69, 0x70, 0x22, 0xe6, 0x0b, 0x0a, 0x18, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1a, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x72, 0x03, 0x88, 0x01, 0x01, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0xb0, 0x01, 0x0a, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x92, 0x01, 0xfa, + 0x42, 0x8e, 0x01, 0x72, 0x8b, 0x01, 0x32, 0x85, 0x01, 0x5e, 0x28, 0x6d, 0x64, 0x35, 0x3a, 0x5b, + 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, 0x32, 0x7d, 0x7c, 0x73, + 0x68, 0x61, 0x31, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, + 0x34, 0x30, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, + 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x35, 0x31, + 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x32, + 0x38, 0x7d, 0x7c, 0x62, 0x6c, 0x61, 0x6b, 0x65, 0x33, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, + 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x63, 0x72, 0x63, 0x33, 0x32, 0x3a, + 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x24, 0xd0, 0x01, + 0x01, 0x48, 0x00, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2b, + 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x48, + 0x01, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x15, + 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x03, 0x74, + 0x61, 0x67, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x0b, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x08, + 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x70, + 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x32, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x65, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x5f, 0x0a, 0x0e, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x09, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, + 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x0c, + 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x04, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x32, 0x07, 0x28, 0x80, 0x80, 0x80, 0x02, 0x40, 0x01, + 0x48, 0x04, 0x52, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, + 0x01, 0x01, 0x12, 0x30, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, + 0xd0, 0x01, 0x01, 0x48, 0x05, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, + 0x68, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x06, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x33, + 0x0a, 0x16, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, + 0x6f, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, + 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x2d, 0x0a, 0x13, 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, + 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x10, 0x6e, 0x65, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x63, + 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, + 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x12, 0x44, 0x0a, 0x0e, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x11, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x48, 0x07, 0x52, + 0x0d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x88, 0x01, + 0x01, 0x12, 0x28, 0x0a, 0x04, 0x68, 0x64, 0x66, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x44, 0x46, 0x53, + 0x48, 0x08, 0x52, 0x04, 0x68, 0x64, 0x66, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x0b, 0x69, + 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x69, 0x73, 0x50, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x12, 0x2c, 0x0a, 0x12, + 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6e, 0x65, 0x65, 0x64, 0x50, 0x69, + 0x65, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x49, 0x0a, 0x1f, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, + 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x09, 0x52, 0x1b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x46, 0x6f, + 0x72, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, + 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, + 0x69, 0x70, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, + 0x01, 0xd0, 0x01, 0x01, 0x48, 0x0a, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, + 0x88, 0x01, 0x01, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x1a, 0x40, 0x0a, 0x12, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 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, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x08, + 0x0a, 0x06, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x74, 0x61, 0x67, + 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x11, 0x0a, + 0x0f, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x68, 0x64, 0x66, 0x73, 0x42, 0x22, 0x0a, 0x20, 0x5f, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, + 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x42, 0x0c, 0x0a, + 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0xfa, 0x02, 0x0a, 0x20, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, + 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x2b, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, + 0x65, 0x88, 0x01, 0x01, 0x12, 0x6a, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, + 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x12, 0x28, 0x0a, 0x06, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x69, 0x65, + 0x63, 0x65, 0x52, 0x06, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, + 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0a, 0x69, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x1a, 0x41, 0x0a, 0x13, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 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, 0x42, 0x08, + 0x0a, 0x06, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x8a, 0x03, 0x0a, 0x19, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, + 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x70, 0x65, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, + 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x12, 0x7f, 0x0a, 0x24, + 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x64, 0x66, 0x64, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, - 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x2a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, - 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, - 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x75, 0x0a, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x69, - 0x65, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x64, 0x66, - 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, - 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0f, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x22, 0xd1, 0x04, 0x0a, 0x20, 0x55, 0x70, - 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x49, - 0x0a, 0x1f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x61, - 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1b, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x46, 0x6f, 0x72, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x43, 0x0a, 0x18, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x32, 0x04, 0x18, - 0x05, 0x28, 0x01, 0x52, 0x16, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x03, 0x74, - 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x03, 0x74, 0x61, 0x67, 0x88, - 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x0c, 0x70, 0x69, 0x65, - 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x42, - 0x0c, 0xfa, 0x42, 0x09, 0x32, 0x07, 0x28, 0x80, 0x80, 0x80, 0x02, 0x40, 0x01, 0x48, 0x03, 0x52, - 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, - 0x3d, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x10, 0xfa, 0x42, 0x0d, 0xaa, 0x01, 0x0a, 0x22, - 0x04, 0x08, 0x80, 0xf5, 0x24, 0x32, 0x02, 0x08, 0x3c, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x12, 0x38, - 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x04, 0x52, 0x07, 0x74, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, - 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x05, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x42, 0x22, 0x0a, 0x20, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x74, - 0x61, 0x67, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, - 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0xa0, 0x01, - 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x20, 0x64, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, + 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, + 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, + 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, + 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0f, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x03, 0xf8, 0x42, 0x01, 0x22, 0xab, 0x01, 0x0a, 0x16, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, + 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, - 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, - 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, - 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, - 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, - 0x22, 0x7e, 0x0a, 0x1e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x6b, 0x49, 0x64, 0x12, 0x4d, 0x0a, 0x1e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x1b, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x22, 0x61, 0x0a, 0x17, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x82, 0x01, 0x0a, 0x19, 0x44, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, + 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, + 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x69, 0x65, 0x63, + 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, + 0x70, 0x69, 0x65, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x8c, 0x02, 0x0a, 0x1a, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x70, 0x69, + 0x65, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x70, 0x69, 0x65, 0x63, 0x65, 0x12, 0xb0, 0x01, 0x0a, + 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x92, 0x01, + 0xfa, 0x42, 0x8e, 0x01, 0x72, 0x8b, 0x01, 0x32, 0x85, 0x01, 0x5e, 0x28, 0x6d, 0x64, 0x35, 0x3a, + 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, 0x32, 0x7d, 0x7c, + 0x73, 0x68, 0x61, 0x31, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, + 0x7b, 0x34, 0x30, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x3a, 0x5b, 0x61, 0x2d, 0x66, + 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x35, + 0x31, 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, + 0x32, 0x38, 0x7d, 0x7c, 0x62, 0x6c, 0x61, 0x6b, 0x65, 0x33, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, + 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x63, 0x72, 0x63, 0x33, 0x32, + 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x24, 0xd0, + 0x01, 0x01, 0x48, 0x00, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x42, + 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x74, 0x0a, 0x14, 0x53, 0x74, + 0x61, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, - 0x22, 0x80, 0x01, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x5f, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, - 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x49, 0x70, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x5f, 0x69, 0x70, 0x22, 0xaa, 0x01, 0x0a, 0x20, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, + 0x22, 0x76, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, + 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, + 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, + 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0xff, 0x03, 0x0a, 0x1d, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, + 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x03, 0x75, 0x72, + 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xfa, 0x42, 0x08, 0x72, 0x06, 0x88, 0x01, + 0x01, 0xd0, 0x01, 0x01, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x3f, 0x0a, 0x0e, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x0d, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, + 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x0b, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x0a, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x07, + 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x70, + 0x69, 0x65, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x10, 0x6e, 0x65, 0x65, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x68, 0x61, + 0x72, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x66, + 0x6f, 0x72, 0x63, 0x65, 0x48, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x1b, 0x0a, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, + 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x03, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, + 0x74, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x0c, 0x0a, 0x0a, + 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0x4e, 0x0a, 0x25, 0x44, 0x6f, + 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, + 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x9a, 0x03, 0x0a, 0x1e, 0x44, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, + 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, + 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, + 0x64, 0x12, 0x20, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x70, 0x65, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x8e, 0x01, 0x0a, 0x29, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x61, 0x73, 0x6b, + 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, + 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x25, 0x64, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x74, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, + 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, + 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x6f, + 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, + 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9c, 0x03, 0x0a, 0x1b, 0x55, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x88, 0x01, 0x01, 0x52, 0x03, + 0x75, 0x72, 0x6c, 0x12, 0x49, 0x0a, 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x0d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x1b, + 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x38, 0x0a, 0x18, 0x70, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x70, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x10, 0xfa, + 0x42, 0x0d, 0xaa, 0x01, 0x0a, 0x22, 0x04, 0x08, 0x80, 0xf5, 0x24, 0x32, 0x02, 0x08, 0x3c, 0x52, + 0x03, 0x74, 0x74, 0x6c, 0x12, 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2c, + 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x01, 0x52, + 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0x9b, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, + 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, + 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, + 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x5f, 0x69, 0x70, 0x22, 0x79, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, + 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, + 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, + 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, + 0x7e, 0x0a, 0x1e, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, + 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, + 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, + 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, + 0x8e, 0x05, 0x0a, 0x1f, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, + 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x74, + 0x74, 0x6c, 0x12, 0x34, 0x0a, 0x0c, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x32, 0x07, 0x28, + 0x80, 0x80, 0x80, 0x02, 0x40, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, + 0x48, 0x01, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, + 0x67, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x75, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, + 0x0e, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x61, 0x74, 0x18, 0x08, 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, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 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, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, 0x01, + 0x02, 0x08, 0x01, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3c, + 0x0a, 0x09, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 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, 0x48, 0x02, 0x52, + 0x08, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x0b, + 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 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, 0x48, 0x03, 0x52, + 0x0a, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x41, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0f, + 0x0a, 0x0d, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, + 0x11, 0x0a, 0x0f, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x22, 0x21, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x66, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, + 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x22, 0x7b, 0x0a, 0x1b, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, + 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, + 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, + 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0xa5, 0x01, 0x0a, 0x1b, 0x53, 0x79, 0x6e, + 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, @@ -4403,64 +5038,425 @@ var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDesc = []byte{ 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x16, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x22, 0x81, 0x02, 0x0a, 0x21, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, - 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x17, - 0x0a, 0x02, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, - 0x02, 0x70, 0x01, 0x52, 0x02, 0x69, 0x70, 0x12, 0x2e, 0x0a, 0x08, 0x74, 0x63, 0x70, 0x5f, 0x70, - 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x1a, 0x09, - 0x10, 0xff, 0xff, 0x03, 0x28, 0x80, 0x08, 0x40, 0x01, 0x48, 0x00, 0x52, 0x07, 0x74, 0x63, 0x70, - 0x50, 0x6f, 0x72, 0x74, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x09, 0x71, 0x75, 0x69, 0x63, 0x5f, - 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x1a, - 0x09, 0x10, 0xff, 0xff, 0x03, 0x28, 0x80, 0x08, 0x40, 0x01, 0x48, 0x01, 0x52, 0x08, 0x71, 0x75, - 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x74, 0x63, - 0x70, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x71, 0x75, 0x69, 0x63, 0x5f, - 0x70, 0x6f, 0x72, 0x74, 0x22, 0x55, 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x6f, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x70, 0x65, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, - 0x02, 0x10, 0x01, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x22, 0x59, 0x0a, 0x18, 0x49, - 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6c, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x03, 0x67, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x7a, 0x02, 0x68, - 0x10, 0x52, 0x03, 0x67, 0x69, 0x64, 0x22, 0x76, 0x0a, 0x27, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, - 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x4b, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x22, 0xfc, 0x01, 0x0a, 0x1c, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x74, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x70, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x70, 0x01, 0x52, 0x02, + 0x69, 0x70, 0x12, 0x2e, 0x0a, 0x08, 0x74, 0x63, 0x70, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x05, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x1a, 0x09, 0x10, 0xff, 0xff, 0x03, 0x28, + 0x80, 0x08, 0x40, 0x01, 0x48, 0x00, 0x52, 0x07, 0x74, 0x63, 0x70, 0x50, 0x6f, 0x72, 0x74, 0x88, + 0x01, 0x01, 0x12, 0x30, 0x0a, 0x09, 0x71, 0x75, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x1a, 0x09, 0x10, 0xff, 0xff, 0x03, + 0x28, 0x80, 0x08, 0x40, 0x01, 0x48, 0x01, 0x52, 0x08, 0x71, 0x75, 0x69, 0x63, 0x50, 0x6f, 0x72, + 0x74, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x70, 0x6f, 0x72, + 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x71, 0x75, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x22, + 0x9c, 0x04, 0x0a, 0x22, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, + 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, + 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x74, 0x61, 0x67, 0x88, 0x01, 0x01, 0x12, + 0x25, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, + 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x02, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x50, 0x61, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x03, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, + 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, + 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, + 0x6e, 0x65, 0x65, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x26, 0x0a, 0x0f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x6c, + 0x69, 0x6e, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x66, 0x6f, 0x72, 0x63, 0x65, + 0x48, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x1b, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x04, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, + 0x69, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, + 0x01, 0xd0, 0x01, 0x01, 0x48, 0x05, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, + 0x88, 0x01, 0x01, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x74, 0x61, 0x67, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0x53, + 0x0a, 0x2a, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x22, 0xb4, 0x03, 0x0a, 0x23, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, + 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x07, 0x68, + 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, + 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, + 0x20, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x9e, 0x01, 0x0a, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, + 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x64, 0x66, + 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x2a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, + 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x75, 0x0a, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, + 0x69, 0x65, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x64, + 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0f, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x22, 0xd1, 0x04, 0x0a, 0x20, 0x55, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x49, 0x0a, 0x1f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, + 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1b, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x46, 0x6f, 0x72, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, + 0x67, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, + 0x01, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x43, 0x0a, 0x18, 0x70, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x32, 0x04, + 0x18, 0x05, 0x28, 0x01, 0x52, 0x16, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x03, + 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x03, 0x74, 0x61, 0x67, + 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x0c, 0x70, 0x69, + 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, + 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x32, 0x07, 0x28, 0x80, 0x80, 0x80, 0x02, 0x40, 0x01, 0x48, 0x03, + 0x52, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, + 0x12, 0x3d, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x10, 0xfa, 0x42, 0x0d, 0xaa, 0x01, 0x0a, + 0x22, 0x04, 0x08, 0x80, 0xf5, 0x24, 0x32, 0x02, 0x08, 0x3c, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x12, + 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x04, 0x52, 0x07, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, + 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x05, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x42, 0x22, 0x0a, 0x20, 0x5f, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, + 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x5f, + 0x74, 0x61, 0x67, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0xa0, + 0x01, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, + 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, + 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, + 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, + 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, + 0x70, 0x22, 0x7e, 0x0a, 0x1e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, + 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, + 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, + 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, + 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, + 0x70, 0x22, 0x83, 0x01, 0x0a, 0x23, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, + 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, + 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, + 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0x93, 0x05, 0x0a, 0x24, 0x53, 0x74, 0x61, 0x74, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, + 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x12, + 0x34, 0x0a, 0x0c, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x32, 0x07, 0x28, 0x80, 0x80, 0x80, + 0x02, 0x40, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x4c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x48, 0x01, 0x52, + 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, + 0x01, 0x12, 0x27, 0x0a, 0x0f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x75, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x75, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0d, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x08, 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, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 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, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, + 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3c, 0x0a, 0x09, 0x66, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 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, 0x48, 0x02, 0x52, 0x08, 0x66, 0x61, + 0x69, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x0b, 0x66, 0x69, 0x6e, + 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 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, 0x48, 0x03, 0x52, 0x0a, 0x66, 0x69, + 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x41, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, + 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x11, 0x0a, 0x0f, + 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, + 0x0c, 0x0a, 0x0a, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x42, 0x0e, 0x0a, + 0x0c, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x22, 0x26, 0x0a, + 0x24, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x70, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, 0x63, + 0x61, 0x6c, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, + 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, + 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x52, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, + 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, + 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x2c, + 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x70, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, + 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, + 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x22, 0xaa, 0x01, 0x0a, 0x20, 0x53, + 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, + 0x64, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, + 0x6b, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x18, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, + 0x16, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x81, 0x02, 0x0a, 0x21, 0x53, 0x79, 0x6e, 0x63, + 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, + 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x70, 0x01, 0x52, 0x02, 0x69, 0x70, 0x12, 0x2e, + 0x0a, 0x08, 0x74, 0x63, 0x70, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x1a, 0x09, 0x10, 0xff, 0xff, 0x03, 0x28, 0x80, 0x08, 0x40, 0x01, + 0x48, 0x00, 0x52, 0x07, 0x74, 0x63, 0x70, 0x50, 0x6f, 0x72, 0x74, 0x88, 0x01, 0x01, 0x12, 0x30, + 0x0a, 0x09, 0x71, 0x75, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x05, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x1a, 0x09, 0x10, 0xff, 0xff, 0x03, 0x28, 0x80, 0x08, 0x40, + 0x01, 0x48, 0x01, 0x52, 0x08, 0x71, 0x75, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x88, 0x01, 0x01, + 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x0c, 0x0a, + 0x0a, 0x5f, 0x71, 0x75, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x55, 0x0a, 0x0f, 0x53, + 0x79, 0x6e, 0x63, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, + 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, + 0x12, 0x20, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, + 0x49, 0x64, 0x22, 0x59, 0x0a, 0x18, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, + 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6e, 0x75, 0x6d, + 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6c, + 0x69, 0x64, 0x12, 0x19, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, + 0x07, 0xfa, 0x42, 0x04, 0x7a, 0x02, 0x68, 0x10, 0x52, 0x03, 0x67, 0x69, 0x64, 0x22, 0x76, 0x0a, + 0x27, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x64, 0x66, 0x64, + 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x64, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x77, 0x0a, 0x28, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, + 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x77, - 0x0a, 0x28, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, - 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x65, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x64, - 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x42, 0x56, 0x65, 0x72, - 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x32, 0xa9, 0x11, 0x0a, 0x0e, 0x44, 0x66, 0x64, 0x61, - 0x65, 0x6d, 0x6f, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x55, 0x0a, 0x0c, 0x44, 0x6f, - 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x20, 0x2e, 0x64, 0x66, 0x64, - 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x64, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x32, 0xa9, + 0x11, 0x0a, 0x0e, 0x44, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, + 0x64, 0x12, 0x55, 0x0a, 0x0c, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, + 0x6b, 0x12, 0x20, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x39, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x74, + 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1c, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, + 0x61, 0x73, 0x6b, 0x12, 0x56, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x54, 0x61, 0x73, 0x6b, 0x12, 0x21, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, + 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x0f, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x23, + 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1e, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x4f, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x2e, + 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, + 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, + 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, + 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, + 0x12, 0x64, 0x0a, 0x11, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x25, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, - 0x01, 0x12, 0x39, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1c, 0x2e, - 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x56, 0x0a, 0x0d, - 0x53, 0x74, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x21, 0x2e, - 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x22, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x48, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x21, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, + 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, + 0x12, 0x4e, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, + 0x61, 0x73, 0x6b, 0x12, 0x23, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x12, 0x5e, 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, + 0x63, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, + 0x12, 0x65, 0x0a, 0x12, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, + 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x16, 0x44, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, + 0x6b, 0x12, 0x2a, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, + 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x6d, 0x0a, 0x14, + 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x50, 0x69, + 0x65, 0x63, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x74, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, + 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x50, 0x69, 0x65, 0x63, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x58, 0x0a, 0x14, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, + 0x61, 0x73, 0x6b, 0x12, 0x28, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x57, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x26, 0x2e, 0x64, 0x66, + 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, + 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x58, + 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x28, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x82, 0x01, 0x0a, 0x1b, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2f, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x66, 0x64, 0x61, + 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, + 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x62, 0x0a, + 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, + 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x12, 0x66, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2b, 0x2e, 0x64, + 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x50, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, + 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x62, 0x0a, 0x19, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x7c, 0x0a, + 0x19, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, + 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x64, 0x66, 0x64, 0x61, + 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x08, 0x53, + 0x79, 0x6e, 0x63, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x1c, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x30, 0x01, 0x12, 0x8f, 0x01, 0x0a, 0x20, 0x45, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, + 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x34, 0x2e, + 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, + 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, + 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x8b, 0x10, 0x0a, 0x10, 0x44, + 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, + 0x55, 0x0a, 0x0c, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x12, + 0x20, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, + 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x21, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x39, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, + 0x73, 0x6b, 0x12, 0x1c, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x73, + 0x6b, 0x12, 0x56, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x61, + 0x73, 0x6b, 0x12, 0x21, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0e, 0x4c, 0x69, 0x73, + 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x22, 0x2e, 0x64, 0x66, + 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x23, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x6e, @@ -4471,204 +5467,107 @@ var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDesc = []byte{ 0x12, 0x1e, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4f, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, - 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x64, 0x0a, 0x11, 0x44, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x25, - 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, - 0x48, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, - 0x12, 0x21, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x4e, 0x0a, 0x0f, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x2e, 0x64, - 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x5e, 0x0a, 0x0f, 0x53, 0x79, 0x6e, - 0x63, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x64, - 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x53, 0x79, 0x6e, 0x63, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x65, 0x0a, 0x12, 0x44, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x12, - 0x26, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, - 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x73, 0x0a, 0x16, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2a, 0x2e, 0x64, 0x66, 0x64, - 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x12, 0x28, 0x2e, - 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, - 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x74, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x30, 0x01, 0x12, 0x58, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x28, 0x2e, 0x64, - 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x57, - 0x0a, 0x12, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, - 0x54, 0x61, 0x73, 0x6b, 0x12, 0x26, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x58, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, - 0x28, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, - 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x12, 0x82, 0x01, 0x0a, 0x1b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, - 0x6b, 0x12, 0x2f, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x62, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, - 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x66, 0x0a, 0x17, 0x53, 0x74, - 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2b, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, - 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, - 0x73, 0x6b, 0x12, 0x62, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, - 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x7c, 0x0a, 0x19, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, - 0x63, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x08, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x6f, 0x73, 0x74, - 0x12, 0x1c, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x79, 0x6e, 0x63, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x30, - 0x01, 0x12, 0x8f, 0x01, 0x0a, 0x20, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x42, - 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x34, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x42, 0x56, - 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x64, - 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, - 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x32, 0x89, 0x0a, 0x0a, 0x10, 0x44, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, - 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x55, 0x0a, 0x0c, 0x44, 0x6f, 0x77, 0x6e, - 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x20, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, - 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x64, 0x66, 0x64, - 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, - 0x39, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1c, 0x2e, 0x64, 0x66, - 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, - 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x56, 0x0a, 0x0d, 0x53, 0x74, - 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x21, 0x2e, 0x64, 0x66, - 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x6f, - 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, - 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x6e, - 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x6e, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x66, 0x64, - 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, - 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x44, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1e, - 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4e, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x2e, 0x64, 0x66, + 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x48, 0x6f, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x64, 0x0a, 0x11, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x25, 0x2e, 0x64, 0x66, 0x64, 0x61, - 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x64, 0x0a, 0x11, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x25, 0x2e, 0x64, 0x66, + 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x48, 0x0a, 0x0d, + 0x53, 0x74, 0x61, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x21, 0x2e, + 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x26, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x48, 0x0a, 0x0d, 0x53, 0x74, - 0x61, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x21, 0x2e, 0x64, 0x66, - 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, - 0x54, 0x61, 0x73, 0x6b, 0x12, 0x4e, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x73, 0x0a, 0x16, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2a, - 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, - 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x66, 0x64, - 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x14, 0x55, 0x70, 0x6c, + 0x1a, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x4e, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x2e, 0x64, 0x66, 0x64, 0x61, + 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x73, 0x0a, 0x16, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, + 0x12, 0x2a, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, + 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, - 0x6b, 0x12, 0x28, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, - 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x82, 0x01, 0x0a, 0x1b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, - 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2f, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x14, 0x55, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, + 0x61, 0x73, 0x6b, 0x12, 0x28, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x57, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x74, + 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x26, + 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, + 0x6b, 0x12, 0x74, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, + 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2b, 0x2e, 0x64, + 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x66, 0x64, 0x61, + 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, + 0x73, 0x6b, 0x73, 0x12, 0x2c, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x82, 0x01, 0x0a, 0x1b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, + 0x12, 0x2f, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x6a, 0x0a, 0x19, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x6a, 0x0a, 0x19, 0x55, - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x66, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x74, 0x50, + 0x6b, 0x12, 0x66, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2b, 0x2e, 0x64, + 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, - 0x73, 0x6b, 0x12, 0x2b, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x42, - 0x2d, 0x5a, 0x2b, 0x64, 0x37, 0x79, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, - 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, - 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, + 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x83, 0x01, 0x0a, 0x1c, 0x53, 0x74, + 0x61, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x30, 0x2e, 0x64, 0x66, 0x64, + 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x6f, 0x63, + 0x61, 0x6c, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x64, + 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x86, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, + 0x73, 0x12, 0x31, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x2d, 0x5a, 0x2b, 0x64, 0x37, 0x79, 0x2e, + 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, + 0x69, 0x73, 0x2f, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x64, + 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4683,7 +5582,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP() []byte { return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescData } -var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes = make([]protoimpl.MessageInfo, 50) +var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes = make([]protoimpl.MessageInfo, 61) var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_goTypes = []interface{}{ (*DownloadTaskRequest)(nil), // 0: dfdaemon.v2.DownloadTaskRequest (*DownloadTaskStartedResponse)(nil), // 1: dfdaemon.v2.DownloadTaskStartedResponse @@ -4694,193 +5593,231 @@ var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_goTypes = []interface{}{ (*StatTaskRequest)(nil), // 6: dfdaemon.v2.StatTaskRequest (*StatLocalTaskRequest)(nil), // 7: dfdaemon.v2.StatLocalTaskRequest (*StatLocalTaskResponse)(nil), // 8: dfdaemon.v2.StatLocalTaskResponse - (*ListTaskEntriesRequest)(nil), // 9: dfdaemon.v2.ListTaskEntriesRequest - (*ListTaskEntriesResponse)(nil), // 10: dfdaemon.v2.ListTaskEntriesResponse - (*Entry)(nil), // 11: dfdaemon.v2.Entry - (*DeleteTaskRequest)(nil), // 12: dfdaemon.v2.DeleteTaskRequest - (*DownloadCacheTaskRequest)(nil), // 13: dfdaemon.v2.DownloadCacheTaskRequest - (*DownloadCacheTaskStartedResponse)(nil), // 14: dfdaemon.v2.DownloadCacheTaskStartedResponse - (*DownloadCacheTaskResponse)(nil), // 15: dfdaemon.v2.DownloadCacheTaskResponse - (*SyncCachePiecesRequest)(nil), // 16: dfdaemon.v2.SyncCachePiecesRequest - (*SyncCachePiecesResponse)(nil), // 17: dfdaemon.v2.SyncCachePiecesResponse - (*DownloadCachePieceRequest)(nil), // 18: dfdaemon.v2.DownloadCachePieceRequest - (*DownloadCachePieceResponse)(nil), // 19: dfdaemon.v2.DownloadCachePieceResponse - (*StatCacheTaskRequest)(nil), // 20: dfdaemon.v2.StatCacheTaskRequest - (*DeleteCacheTaskRequest)(nil), // 21: dfdaemon.v2.DeleteCacheTaskRequest - (*DownloadPersistentTaskRequest)(nil), // 22: dfdaemon.v2.DownloadPersistentTaskRequest - (*DownloadPersistentTaskStartedResponse)(nil), // 23: dfdaemon.v2.DownloadPersistentTaskStartedResponse - (*DownloadPersistentTaskResponse)(nil), // 24: dfdaemon.v2.DownloadPersistentTaskResponse - (*UploadPersistentTaskRequest)(nil), // 25: dfdaemon.v2.UploadPersistentTaskRequest - (*UpdatePersistentTaskRequest)(nil), // 26: dfdaemon.v2.UpdatePersistentTaskRequest - (*StatPersistentTaskRequest)(nil), // 27: dfdaemon.v2.StatPersistentTaskRequest - (*DeletePersistentTaskRequest)(nil), // 28: dfdaemon.v2.DeletePersistentTaskRequest - (*SyncPersistentPiecesRequest)(nil), // 29: dfdaemon.v2.SyncPersistentPiecesRequest - (*SyncPersistentPiecesResponse)(nil), // 30: dfdaemon.v2.SyncPersistentPiecesResponse - (*DownloadPersistentCacheTaskRequest)(nil), // 31: dfdaemon.v2.DownloadPersistentCacheTaskRequest - (*DownloadPersistentCacheTaskStartedResponse)(nil), // 32: dfdaemon.v2.DownloadPersistentCacheTaskStartedResponse - (*DownloadPersistentCacheTaskResponse)(nil), // 33: dfdaemon.v2.DownloadPersistentCacheTaskResponse - (*UploadPersistentCacheTaskRequest)(nil), // 34: dfdaemon.v2.UploadPersistentCacheTaskRequest - (*UpdatePersistentCacheTaskRequest)(nil), // 35: dfdaemon.v2.UpdatePersistentCacheTaskRequest - (*StatPersistentCacheTaskRequest)(nil), // 36: dfdaemon.v2.StatPersistentCacheTaskRequest - (*DeletePersistentCacheTaskRequest)(nil), // 37: dfdaemon.v2.DeletePersistentCacheTaskRequest - (*SyncPersistentCachePiecesRequest)(nil), // 38: dfdaemon.v2.SyncPersistentCachePiecesRequest - (*SyncPersistentCachePiecesResponse)(nil), // 39: dfdaemon.v2.SyncPersistentCachePiecesResponse - (*SyncHostRequest)(nil), // 40: dfdaemon.v2.SyncHostRequest - (*IBVerbsQueuePairEndpoint)(nil), // 41: dfdaemon.v2.IBVerbsQueuePairEndpoint - (*ExchangeIBVerbsQueuePairEndpointRequest)(nil), // 42: dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointRequest - (*ExchangeIBVerbsQueuePairEndpointResponse)(nil), // 43: dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointResponse - nil, // 44: dfdaemon.v2.DownloadTaskStartedResponse.ResponseHeaderEntry - nil, // 45: dfdaemon.v2.StatLocalTaskResponse.ResponseHeaderEntry - nil, // 46: dfdaemon.v2.ListTaskEntriesRequest.RequestHeaderEntry - nil, // 47: dfdaemon.v2.ListTaskEntriesResponse.ResponseHeaderEntry - nil, // 48: dfdaemon.v2.DownloadCacheTaskRequest.RequestHeaderEntry - nil, // 49: dfdaemon.v2.DownloadCacheTaskStartedResponse.ResponseHeaderEntry - (*v2.Download)(nil), // 50: common.v2.Download - (*v2.Range)(nil), // 51: common.v2.Range - (*v2.Piece)(nil), // 52: common.v2.Piece - (*timestamppb.Timestamp)(nil), // 53: google.protobuf.Timestamp - (*durationpb.Duration)(nil), // 54: google.protobuf.Duration - (*v2.ObjectStorage)(nil), // 55: common.v2.ObjectStorage - (*v2.HDFS)(nil), // 56: common.v2.HDFS - (*v2.HuggingFace)(nil), // 57: common.v2.HuggingFace - (*v2.ModelScope)(nil), // 58: common.v2.ModelScope - (v2.TaskType)(0), // 59: common.v2.TaskType - (v2.Priority)(0), // 60: common.v2.Priority - (*emptypb.Empty)(nil), // 61: google.protobuf.Empty - (*v2.Task)(nil), // 62: common.v2.Task - (*v2.CacheTask)(nil), // 63: common.v2.CacheTask - (*v2.PersistentTask)(nil), // 64: common.v2.PersistentTask - (*v2.PersistentCacheTask)(nil), // 65: common.v2.PersistentCacheTask - (*v2.Host)(nil), // 66: common.v2.Host + (*ListLocalTasksRequest)(nil), // 9: dfdaemon.v2.ListLocalTasksRequest + (*ListLocalTasksResponse)(nil), // 10: dfdaemon.v2.ListLocalTasksResponse + (*ListTaskEntriesRequest)(nil), // 11: dfdaemon.v2.ListTaskEntriesRequest + (*ListTaskEntriesResponse)(nil), // 12: dfdaemon.v2.ListTaskEntriesResponse + (*Entry)(nil), // 13: dfdaemon.v2.Entry + (*DeleteTaskRequest)(nil), // 14: dfdaemon.v2.DeleteTaskRequest + (*DeleteLocalTaskRequest)(nil), // 15: dfdaemon.v2.DeleteLocalTaskRequest + (*DownloadCacheTaskRequest)(nil), // 16: dfdaemon.v2.DownloadCacheTaskRequest + (*DownloadCacheTaskStartedResponse)(nil), // 17: dfdaemon.v2.DownloadCacheTaskStartedResponse + (*DownloadCacheTaskResponse)(nil), // 18: dfdaemon.v2.DownloadCacheTaskResponse + (*SyncCachePiecesRequest)(nil), // 19: dfdaemon.v2.SyncCachePiecesRequest + (*SyncCachePiecesResponse)(nil), // 20: dfdaemon.v2.SyncCachePiecesResponse + (*DownloadCachePieceRequest)(nil), // 21: dfdaemon.v2.DownloadCachePieceRequest + (*DownloadCachePieceResponse)(nil), // 22: dfdaemon.v2.DownloadCachePieceResponse + (*StatCacheTaskRequest)(nil), // 23: dfdaemon.v2.StatCacheTaskRequest + (*DeleteCacheTaskRequest)(nil), // 24: dfdaemon.v2.DeleteCacheTaskRequest + (*DownloadPersistentTaskRequest)(nil), // 25: dfdaemon.v2.DownloadPersistentTaskRequest + (*DownloadPersistentTaskStartedResponse)(nil), // 26: dfdaemon.v2.DownloadPersistentTaskStartedResponse + (*DownloadPersistentTaskResponse)(nil), // 27: dfdaemon.v2.DownloadPersistentTaskResponse + (*UploadPersistentTaskRequest)(nil), // 28: dfdaemon.v2.UploadPersistentTaskRequest + (*UpdatePersistentTaskRequest)(nil), // 29: dfdaemon.v2.UpdatePersistentTaskRequest + (*StatPersistentTaskRequest)(nil), // 30: dfdaemon.v2.StatPersistentTaskRequest + (*StatLocalPersistentTaskRequest)(nil), // 31: dfdaemon.v2.StatLocalPersistentTaskRequest + (*StatLocalPersistentTaskResponse)(nil), // 32: dfdaemon.v2.StatLocalPersistentTaskResponse + (*ListLocalPersistentTasksRequest)(nil), // 33: dfdaemon.v2.ListLocalPersistentTasksRequest + (*ListLocalPersistentTasksResponse)(nil), // 34: dfdaemon.v2.ListLocalPersistentTasksResponse + (*DeletePersistentTaskRequest)(nil), // 35: dfdaemon.v2.DeletePersistentTaskRequest + (*SyncPersistentPiecesRequest)(nil), // 36: dfdaemon.v2.SyncPersistentPiecesRequest + (*SyncPersistentPiecesResponse)(nil), // 37: dfdaemon.v2.SyncPersistentPiecesResponse + (*DownloadPersistentCacheTaskRequest)(nil), // 38: dfdaemon.v2.DownloadPersistentCacheTaskRequest + (*DownloadPersistentCacheTaskStartedResponse)(nil), // 39: dfdaemon.v2.DownloadPersistentCacheTaskStartedResponse + (*DownloadPersistentCacheTaskResponse)(nil), // 40: dfdaemon.v2.DownloadPersistentCacheTaskResponse + (*UploadPersistentCacheTaskRequest)(nil), // 41: dfdaemon.v2.UploadPersistentCacheTaskRequest + (*UpdatePersistentCacheTaskRequest)(nil), // 42: dfdaemon.v2.UpdatePersistentCacheTaskRequest + (*StatPersistentCacheTaskRequest)(nil), // 43: dfdaemon.v2.StatPersistentCacheTaskRequest + (*StatLocalPersistentCacheTaskRequest)(nil), // 44: dfdaemon.v2.StatLocalPersistentCacheTaskRequest + (*StatLocalPersistentCacheTaskResponse)(nil), // 45: dfdaemon.v2.StatLocalPersistentCacheTaskResponse + (*ListLocalPersistentCacheTasksRequest)(nil), // 46: dfdaemon.v2.ListLocalPersistentCacheTasksRequest + (*ListLocalPersistentCacheTasksResponse)(nil), // 47: dfdaemon.v2.ListLocalPersistentCacheTasksResponse + (*DeletePersistentCacheTaskRequest)(nil), // 48: dfdaemon.v2.DeletePersistentCacheTaskRequest + (*SyncPersistentCachePiecesRequest)(nil), // 49: dfdaemon.v2.SyncPersistentCachePiecesRequest + (*SyncPersistentCachePiecesResponse)(nil), // 50: dfdaemon.v2.SyncPersistentCachePiecesResponse + (*SyncHostRequest)(nil), // 51: dfdaemon.v2.SyncHostRequest + (*IBVerbsQueuePairEndpoint)(nil), // 52: dfdaemon.v2.IBVerbsQueuePairEndpoint + (*ExchangeIBVerbsQueuePairEndpointRequest)(nil), // 53: dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointRequest + (*ExchangeIBVerbsQueuePairEndpointResponse)(nil), // 54: dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointResponse + nil, // 55: dfdaemon.v2.DownloadTaskStartedResponse.ResponseHeaderEntry + nil, // 56: dfdaemon.v2.StatLocalTaskResponse.ResponseHeaderEntry + nil, // 57: dfdaemon.v2.ListTaskEntriesRequest.RequestHeaderEntry + nil, // 58: dfdaemon.v2.ListTaskEntriesResponse.ResponseHeaderEntry + nil, // 59: dfdaemon.v2.DownloadCacheTaskRequest.RequestHeaderEntry + nil, // 60: dfdaemon.v2.DownloadCacheTaskStartedResponse.ResponseHeaderEntry + (*v2.Download)(nil), // 61: common.v2.Download + (*v2.Range)(nil), // 62: common.v2.Range + (*v2.Piece)(nil), // 63: common.v2.Piece + (*timestamppb.Timestamp)(nil), // 64: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 65: google.protobuf.Duration + (*v2.ObjectStorage)(nil), // 66: common.v2.ObjectStorage + (*v2.HDFS)(nil), // 67: common.v2.HDFS + (*v2.HuggingFace)(nil), // 68: common.v2.HuggingFace + (*v2.ModelScope)(nil), // 69: common.v2.ModelScope + (v2.TaskType)(0), // 70: common.v2.TaskType + (v2.Priority)(0), // 71: common.v2.Priority + (*emptypb.Empty)(nil), // 72: google.protobuf.Empty + (*v2.Task)(nil), // 73: common.v2.Task + (*v2.CacheTask)(nil), // 74: common.v2.CacheTask + (*v2.PersistentTask)(nil), // 75: common.v2.PersistentTask + (*v2.PersistentCacheTask)(nil), // 76: common.v2.PersistentCacheTask + (*v2.Host)(nil), // 77: common.v2.Host } var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_depIdxs = []int32{ - 50, // 0: dfdaemon.v2.DownloadTaskRequest.download:type_name -> common.v2.Download - 51, // 1: dfdaemon.v2.DownloadTaskStartedResponse.range:type_name -> common.v2.Range - 44, // 2: dfdaemon.v2.DownloadTaskStartedResponse.response_header:type_name -> dfdaemon.v2.DownloadTaskStartedResponse.ResponseHeaderEntry - 52, // 3: dfdaemon.v2.DownloadTaskStartedResponse.pieces:type_name -> common.v2.Piece - 52, // 4: dfdaemon.v2.DownloadPieceFinishedResponse.piece:type_name -> common.v2.Piece - 1, // 5: dfdaemon.v2.DownloadTaskResponse.download_task_started_response:type_name -> dfdaemon.v2.DownloadTaskStartedResponse - 2, // 6: dfdaemon.v2.DownloadTaskResponse.download_piece_finished_response:type_name -> dfdaemon.v2.DownloadPieceFinishedResponse - 45, // 7: dfdaemon.v2.StatLocalTaskResponse.response_header:type_name -> dfdaemon.v2.StatLocalTaskResponse.ResponseHeaderEntry - 53, // 8: dfdaemon.v2.StatLocalTaskResponse.created_at:type_name -> google.protobuf.Timestamp - 53, // 9: dfdaemon.v2.StatLocalTaskResponse.updated_at:type_name -> google.protobuf.Timestamp - 53, // 10: dfdaemon.v2.StatLocalTaskResponse.prefetched_at:type_name -> google.protobuf.Timestamp - 53, // 11: dfdaemon.v2.StatLocalTaskResponse.failed_at:type_name -> google.protobuf.Timestamp - 53, // 12: dfdaemon.v2.StatLocalTaskResponse.finished_at:type_name -> google.protobuf.Timestamp - 46, // 13: dfdaemon.v2.ListTaskEntriesRequest.request_header:type_name -> dfdaemon.v2.ListTaskEntriesRequest.RequestHeaderEntry - 54, // 14: dfdaemon.v2.ListTaskEntriesRequest.timeout:type_name -> google.protobuf.Duration - 55, // 15: dfdaemon.v2.ListTaskEntriesRequest.object_storage:type_name -> common.v2.ObjectStorage - 56, // 16: dfdaemon.v2.ListTaskEntriesRequest.hdfs:type_name -> common.v2.HDFS - 57, // 17: dfdaemon.v2.ListTaskEntriesRequest.hugging_face:type_name -> common.v2.HuggingFace - 58, // 18: dfdaemon.v2.ListTaskEntriesRequest.model_scope:type_name -> common.v2.ModelScope - 47, // 19: dfdaemon.v2.ListTaskEntriesResponse.response_header:type_name -> dfdaemon.v2.ListTaskEntriesResponse.ResponseHeaderEntry - 11, // 20: dfdaemon.v2.ListTaskEntriesResponse.entries:type_name -> dfdaemon.v2.Entry - 51, // 21: dfdaemon.v2.DownloadCacheTaskRequest.range:type_name -> common.v2.Range - 59, // 22: dfdaemon.v2.DownloadCacheTaskRequest.type:type_name -> common.v2.TaskType - 60, // 23: dfdaemon.v2.DownloadCacheTaskRequest.priority:type_name -> common.v2.Priority - 48, // 24: dfdaemon.v2.DownloadCacheTaskRequest.request_header:type_name -> dfdaemon.v2.DownloadCacheTaskRequest.RequestHeaderEntry - 54, // 25: dfdaemon.v2.DownloadCacheTaskRequest.timeout:type_name -> google.protobuf.Duration - 55, // 26: dfdaemon.v2.DownloadCacheTaskRequest.object_storage:type_name -> common.v2.ObjectStorage - 56, // 27: dfdaemon.v2.DownloadCacheTaskRequest.hdfs:type_name -> common.v2.HDFS - 51, // 28: dfdaemon.v2.DownloadCacheTaskStartedResponse.range:type_name -> common.v2.Range - 49, // 29: dfdaemon.v2.DownloadCacheTaskStartedResponse.response_header:type_name -> dfdaemon.v2.DownloadCacheTaskStartedResponse.ResponseHeaderEntry - 52, // 30: dfdaemon.v2.DownloadCacheTaskStartedResponse.pieces:type_name -> common.v2.Piece - 14, // 31: dfdaemon.v2.DownloadCacheTaskResponse.download_cache_task_started_response:type_name -> dfdaemon.v2.DownloadCacheTaskStartedResponse - 2, // 32: dfdaemon.v2.DownloadCacheTaskResponse.download_piece_finished_response:type_name -> dfdaemon.v2.DownloadPieceFinishedResponse - 52, // 33: dfdaemon.v2.DownloadCachePieceResponse.piece:type_name -> common.v2.Piece - 55, // 34: dfdaemon.v2.DownloadPersistentTaskRequest.object_storage:type_name -> common.v2.ObjectStorage - 54, // 35: dfdaemon.v2.DownloadPersistentTaskRequest.timeout:type_name -> google.protobuf.Duration - 23, // 36: dfdaemon.v2.DownloadPersistentTaskResponse.download_persistent_task_started_response:type_name -> dfdaemon.v2.DownloadPersistentTaskStartedResponse - 2, // 37: dfdaemon.v2.DownloadPersistentTaskResponse.download_piece_finished_response:type_name -> dfdaemon.v2.DownloadPieceFinishedResponse - 55, // 38: dfdaemon.v2.UploadPersistentTaskRequest.object_storage:type_name -> common.v2.ObjectStorage - 54, // 39: dfdaemon.v2.UploadPersistentTaskRequest.ttl:type_name -> google.protobuf.Duration - 54, // 40: dfdaemon.v2.UploadPersistentTaskRequest.timeout:type_name -> google.protobuf.Duration - 54, // 41: dfdaemon.v2.DownloadPersistentCacheTaskRequest.timeout:type_name -> google.protobuf.Duration - 32, // 42: dfdaemon.v2.DownloadPersistentCacheTaskResponse.download_persistent_cache_task_started_response:type_name -> dfdaemon.v2.DownloadPersistentCacheTaskStartedResponse - 2, // 43: dfdaemon.v2.DownloadPersistentCacheTaskResponse.download_piece_finished_response:type_name -> dfdaemon.v2.DownloadPieceFinishedResponse - 54, // 44: dfdaemon.v2.UploadPersistentCacheTaskRequest.ttl:type_name -> google.protobuf.Duration - 54, // 45: dfdaemon.v2.UploadPersistentCacheTaskRequest.timeout:type_name -> google.protobuf.Duration - 41, // 46: dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointRequest.endpoint:type_name -> dfdaemon.v2.IBVerbsQueuePairEndpoint - 41, // 47: dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointResponse.endpoint:type_name -> dfdaemon.v2.IBVerbsQueuePairEndpoint - 0, // 48: dfdaemon.v2.DfdaemonUpload.DownloadTask:input_type -> dfdaemon.v2.DownloadTaskRequest - 6, // 49: dfdaemon.v2.DfdaemonUpload.StatTask:input_type -> dfdaemon.v2.StatTaskRequest - 7, // 50: dfdaemon.v2.DfdaemonUpload.StatLocalTask:input_type -> dfdaemon.v2.StatLocalTaskRequest - 9, // 51: dfdaemon.v2.DfdaemonUpload.ListTaskEntries:input_type -> dfdaemon.v2.ListTaskEntriesRequest - 12, // 52: dfdaemon.v2.DfdaemonUpload.DeleteTask:input_type -> dfdaemon.v2.DeleteTaskRequest - 4, // 53: dfdaemon.v2.DfdaemonUpload.SyncPieces:input_type -> dfdaemon.v2.SyncPiecesRequest - 13, // 54: dfdaemon.v2.DfdaemonUpload.DownloadCacheTask:input_type -> dfdaemon.v2.DownloadCacheTaskRequest - 20, // 55: dfdaemon.v2.DfdaemonUpload.StatCacheTask:input_type -> dfdaemon.v2.StatCacheTaskRequest - 21, // 56: dfdaemon.v2.DfdaemonUpload.DeleteCacheTask:input_type -> dfdaemon.v2.DeleteCacheTaskRequest - 16, // 57: dfdaemon.v2.DfdaemonUpload.SyncCachePieces:input_type -> dfdaemon.v2.SyncCachePiecesRequest - 18, // 58: dfdaemon.v2.DfdaemonUpload.DownloadCachePiece:input_type -> dfdaemon.v2.DownloadCachePieceRequest - 22, // 59: dfdaemon.v2.DfdaemonUpload.DownloadPersistentTask:input_type -> dfdaemon.v2.DownloadPersistentTaskRequest - 29, // 60: dfdaemon.v2.DfdaemonUpload.SyncPersistentPieces:input_type -> dfdaemon.v2.SyncPersistentPiecesRequest - 26, // 61: dfdaemon.v2.DfdaemonUpload.UpdatePersistentTask:input_type -> dfdaemon.v2.UpdatePersistentTaskRequest - 27, // 62: dfdaemon.v2.DfdaemonUpload.StatPersistentTask:input_type -> dfdaemon.v2.StatPersistentTaskRequest - 28, // 63: dfdaemon.v2.DfdaemonUpload.DeletePersistentTask:input_type -> dfdaemon.v2.DeletePersistentTaskRequest - 31, // 64: dfdaemon.v2.DfdaemonUpload.DownloadPersistentCacheTask:input_type -> dfdaemon.v2.DownloadPersistentCacheTaskRequest - 35, // 65: dfdaemon.v2.DfdaemonUpload.UpdatePersistentCacheTask:input_type -> dfdaemon.v2.UpdatePersistentCacheTaskRequest - 36, // 66: dfdaemon.v2.DfdaemonUpload.StatPersistentCacheTask:input_type -> dfdaemon.v2.StatPersistentCacheTaskRequest - 37, // 67: dfdaemon.v2.DfdaemonUpload.DeletePersistentCacheTask:input_type -> dfdaemon.v2.DeletePersistentCacheTaskRequest - 38, // 68: dfdaemon.v2.DfdaemonUpload.SyncPersistentCachePieces:input_type -> dfdaemon.v2.SyncPersistentCachePiecesRequest - 40, // 69: dfdaemon.v2.DfdaemonUpload.SyncHost:input_type -> dfdaemon.v2.SyncHostRequest - 42, // 70: dfdaemon.v2.DfdaemonUpload.ExchangeIBVerbsQueuePairEndpoint:input_type -> dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointRequest - 0, // 71: dfdaemon.v2.DfdaemonDownload.DownloadTask:input_type -> dfdaemon.v2.DownloadTaskRequest - 6, // 72: dfdaemon.v2.DfdaemonDownload.StatTask:input_type -> dfdaemon.v2.StatTaskRequest - 7, // 73: dfdaemon.v2.DfdaemonDownload.StatLocalTask:input_type -> dfdaemon.v2.StatLocalTaskRequest - 9, // 74: dfdaemon.v2.DfdaemonDownload.ListTaskEntries:input_type -> dfdaemon.v2.ListTaskEntriesRequest - 12, // 75: dfdaemon.v2.DfdaemonDownload.DeleteTask:input_type -> dfdaemon.v2.DeleteTaskRequest - 61, // 76: dfdaemon.v2.DfdaemonDownload.DeleteHost:input_type -> google.protobuf.Empty - 13, // 77: dfdaemon.v2.DfdaemonDownload.DownloadCacheTask:input_type -> dfdaemon.v2.DownloadCacheTaskRequest - 20, // 78: dfdaemon.v2.DfdaemonDownload.StatCacheTask:input_type -> dfdaemon.v2.StatCacheTaskRequest - 21, // 79: dfdaemon.v2.DfdaemonDownload.DeleteCacheTask:input_type -> dfdaemon.v2.DeleteCacheTaskRequest - 22, // 80: dfdaemon.v2.DfdaemonDownload.DownloadPersistentTask:input_type -> dfdaemon.v2.DownloadPersistentTaskRequest - 25, // 81: dfdaemon.v2.DfdaemonDownload.UploadPersistentTask:input_type -> dfdaemon.v2.UploadPersistentTaskRequest - 31, // 82: dfdaemon.v2.DfdaemonDownload.DownloadPersistentCacheTask:input_type -> dfdaemon.v2.DownloadPersistentCacheTaskRequest - 34, // 83: dfdaemon.v2.DfdaemonDownload.UploadPersistentCacheTask:input_type -> dfdaemon.v2.UploadPersistentCacheTaskRequest - 36, // 84: dfdaemon.v2.DfdaemonDownload.StatPersistentCacheTask:input_type -> dfdaemon.v2.StatPersistentCacheTaskRequest - 3, // 85: dfdaemon.v2.DfdaemonUpload.DownloadTask:output_type -> dfdaemon.v2.DownloadTaskResponse - 62, // 86: dfdaemon.v2.DfdaemonUpload.StatTask:output_type -> common.v2.Task - 8, // 87: dfdaemon.v2.DfdaemonUpload.StatLocalTask:output_type -> dfdaemon.v2.StatLocalTaskResponse - 10, // 88: dfdaemon.v2.DfdaemonUpload.ListTaskEntries:output_type -> dfdaemon.v2.ListTaskEntriesResponse - 61, // 89: dfdaemon.v2.DfdaemonUpload.DeleteTask:output_type -> google.protobuf.Empty - 5, // 90: dfdaemon.v2.DfdaemonUpload.SyncPieces:output_type -> dfdaemon.v2.SyncPiecesResponse - 15, // 91: dfdaemon.v2.DfdaemonUpload.DownloadCacheTask:output_type -> dfdaemon.v2.DownloadCacheTaskResponse - 63, // 92: dfdaemon.v2.DfdaemonUpload.StatCacheTask:output_type -> common.v2.CacheTask - 61, // 93: dfdaemon.v2.DfdaemonUpload.DeleteCacheTask:output_type -> google.protobuf.Empty - 17, // 94: dfdaemon.v2.DfdaemonUpload.SyncCachePieces:output_type -> dfdaemon.v2.SyncCachePiecesResponse - 19, // 95: dfdaemon.v2.DfdaemonUpload.DownloadCachePiece:output_type -> dfdaemon.v2.DownloadCachePieceResponse - 24, // 96: dfdaemon.v2.DfdaemonUpload.DownloadPersistentTask:output_type -> dfdaemon.v2.DownloadPersistentTaskResponse - 30, // 97: dfdaemon.v2.DfdaemonUpload.SyncPersistentPieces:output_type -> dfdaemon.v2.SyncPersistentPiecesResponse - 61, // 98: dfdaemon.v2.DfdaemonUpload.UpdatePersistentTask:output_type -> google.protobuf.Empty - 64, // 99: dfdaemon.v2.DfdaemonUpload.StatPersistentTask:output_type -> common.v2.PersistentTask - 61, // 100: dfdaemon.v2.DfdaemonUpload.DeletePersistentTask:output_type -> google.protobuf.Empty - 33, // 101: dfdaemon.v2.DfdaemonUpload.DownloadPersistentCacheTask:output_type -> dfdaemon.v2.DownloadPersistentCacheTaskResponse - 61, // 102: dfdaemon.v2.DfdaemonUpload.UpdatePersistentCacheTask:output_type -> google.protobuf.Empty - 65, // 103: dfdaemon.v2.DfdaemonUpload.StatPersistentCacheTask:output_type -> common.v2.PersistentCacheTask - 61, // 104: dfdaemon.v2.DfdaemonUpload.DeletePersistentCacheTask:output_type -> google.protobuf.Empty - 39, // 105: dfdaemon.v2.DfdaemonUpload.SyncPersistentCachePieces:output_type -> dfdaemon.v2.SyncPersistentCachePiecesResponse - 66, // 106: dfdaemon.v2.DfdaemonUpload.SyncHost:output_type -> common.v2.Host - 43, // 107: dfdaemon.v2.DfdaemonUpload.ExchangeIBVerbsQueuePairEndpoint:output_type -> dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointResponse - 3, // 108: dfdaemon.v2.DfdaemonDownload.DownloadTask:output_type -> dfdaemon.v2.DownloadTaskResponse - 62, // 109: dfdaemon.v2.DfdaemonDownload.StatTask:output_type -> common.v2.Task - 8, // 110: dfdaemon.v2.DfdaemonDownload.StatLocalTask:output_type -> dfdaemon.v2.StatLocalTaskResponse - 10, // 111: dfdaemon.v2.DfdaemonDownload.ListTaskEntries:output_type -> dfdaemon.v2.ListTaskEntriesResponse - 61, // 112: dfdaemon.v2.DfdaemonDownload.DeleteTask:output_type -> google.protobuf.Empty - 61, // 113: dfdaemon.v2.DfdaemonDownload.DeleteHost:output_type -> google.protobuf.Empty - 15, // 114: dfdaemon.v2.DfdaemonDownload.DownloadCacheTask:output_type -> dfdaemon.v2.DownloadCacheTaskResponse - 63, // 115: dfdaemon.v2.DfdaemonDownload.StatCacheTask:output_type -> common.v2.CacheTask - 61, // 116: dfdaemon.v2.DfdaemonDownload.DeleteCacheTask:output_type -> google.protobuf.Empty - 24, // 117: dfdaemon.v2.DfdaemonDownload.DownloadPersistentTask:output_type -> dfdaemon.v2.DownloadPersistentTaskResponse - 64, // 118: dfdaemon.v2.DfdaemonDownload.UploadPersistentTask:output_type -> common.v2.PersistentTask - 33, // 119: dfdaemon.v2.DfdaemonDownload.DownloadPersistentCacheTask:output_type -> dfdaemon.v2.DownloadPersistentCacheTaskResponse - 65, // 120: dfdaemon.v2.DfdaemonDownload.UploadPersistentCacheTask:output_type -> common.v2.PersistentCacheTask - 65, // 121: dfdaemon.v2.DfdaemonDownload.StatPersistentCacheTask:output_type -> common.v2.PersistentCacheTask - 85, // [85:122] is the sub-list for method output_type - 48, // [48:85] is the sub-list for method input_type - 48, // [48:48] is the sub-list for extension type_name - 48, // [48:48] is the sub-list for extension extendee - 0, // [0:48] is the sub-list for field type_name + 61, // 0: dfdaemon.v2.DownloadTaskRequest.download:type_name -> common.v2.Download + 62, // 1: dfdaemon.v2.DownloadTaskStartedResponse.range:type_name -> common.v2.Range + 55, // 2: dfdaemon.v2.DownloadTaskStartedResponse.response_header:type_name -> dfdaemon.v2.DownloadTaskStartedResponse.ResponseHeaderEntry + 63, // 3: dfdaemon.v2.DownloadTaskStartedResponse.pieces:type_name -> common.v2.Piece + 63, // 4: dfdaemon.v2.DownloadPieceFinishedResponse.piece:type_name -> common.v2.Piece + 1, // 5: dfdaemon.v2.DownloadTaskResponse.download_task_started_response:type_name -> dfdaemon.v2.DownloadTaskStartedResponse + 2, // 6: dfdaemon.v2.DownloadTaskResponse.download_piece_finished_response:type_name -> dfdaemon.v2.DownloadPieceFinishedResponse + 56, // 7: dfdaemon.v2.StatLocalTaskResponse.response_header:type_name -> dfdaemon.v2.StatLocalTaskResponse.ResponseHeaderEntry + 64, // 8: dfdaemon.v2.StatLocalTaskResponse.created_at:type_name -> google.protobuf.Timestamp + 64, // 9: dfdaemon.v2.StatLocalTaskResponse.updated_at:type_name -> google.protobuf.Timestamp + 64, // 10: dfdaemon.v2.StatLocalTaskResponse.prefetched_at:type_name -> google.protobuf.Timestamp + 64, // 11: dfdaemon.v2.StatLocalTaskResponse.failed_at:type_name -> google.protobuf.Timestamp + 64, // 12: dfdaemon.v2.StatLocalTaskResponse.finished_at:type_name -> google.protobuf.Timestamp + 8, // 13: dfdaemon.v2.ListLocalTasksResponse.tasks:type_name -> dfdaemon.v2.StatLocalTaskResponse + 57, // 14: dfdaemon.v2.ListTaskEntriesRequest.request_header:type_name -> dfdaemon.v2.ListTaskEntriesRequest.RequestHeaderEntry + 65, // 15: dfdaemon.v2.ListTaskEntriesRequest.timeout:type_name -> google.protobuf.Duration + 66, // 16: dfdaemon.v2.ListTaskEntriesRequest.object_storage:type_name -> common.v2.ObjectStorage + 67, // 17: dfdaemon.v2.ListTaskEntriesRequest.hdfs:type_name -> common.v2.HDFS + 68, // 18: dfdaemon.v2.ListTaskEntriesRequest.hugging_face:type_name -> common.v2.HuggingFace + 69, // 19: dfdaemon.v2.ListTaskEntriesRequest.model_scope:type_name -> common.v2.ModelScope + 58, // 20: dfdaemon.v2.ListTaskEntriesResponse.response_header:type_name -> dfdaemon.v2.ListTaskEntriesResponse.ResponseHeaderEntry + 13, // 21: dfdaemon.v2.ListTaskEntriesResponse.entries:type_name -> dfdaemon.v2.Entry + 62, // 22: dfdaemon.v2.DownloadCacheTaskRequest.range:type_name -> common.v2.Range + 70, // 23: dfdaemon.v2.DownloadCacheTaskRequest.type:type_name -> common.v2.TaskType + 71, // 24: dfdaemon.v2.DownloadCacheTaskRequest.priority:type_name -> common.v2.Priority + 59, // 25: dfdaemon.v2.DownloadCacheTaskRequest.request_header:type_name -> dfdaemon.v2.DownloadCacheTaskRequest.RequestHeaderEntry + 65, // 26: dfdaemon.v2.DownloadCacheTaskRequest.timeout:type_name -> google.protobuf.Duration + 66, // 27: dfdaemon.v2.DownloadCacheTaskRequest.object_storage:type_name -> common.v2.ObjectStorage + 67, // 28: dfdaemon.v2.DownloadCacheTaskRequest.hdfs:type_name -> common.v2.HDFS + 62, // 29: dfdaemon.v2.DownloadCacheTaskStartedResponse.range:type_name -> common.v2.Range + 60, // 30: dfdaemon.v2.DownloadCacheTaskStartedResponse.response_header:type_name -> dfdaemon.v2.DownloadCacheTaskStartedResponse.ResponseHeaderEntry + 63, // 31: dfdaemon.v2.DownloadCacheTaskStartedResponse.pieces:type_name -> common.v2.Piece + 17, // 32: dfdaemon.v2.DownloadCacheTaskResponse.download_cache_task_started_response:type_name -> dfdaemon.v2.DownloadCacheTaskStartedResponse + 2, // 33: dfdaemon.v2.DownloadCacheTaskResponse.download_piece_finished_response:type_name -> dfdaemon.v2.DownloadPieceFinishedResponse + 63, // 34: dfdaemon.v2.DownloadCachePieceResponse.piece:type_name -> common.v2.Piece + 66, // 35: dfdaemon.v2.DownloadPersistentTaskRequest.object_storage:type_name -> common.v2.ObjectStorage + 65, // 36: dfdaemon.v2.DownloadPersistentTaskRequest.timeout:type_name -> google.protobuf.Duration + 26, // 37: dfdaemon.v2.DownloadPersistentTaskResponse.download_persistent_task_started_response:type_name -> dfdaemon.v2.DownloadPersistentTaskStartedResponse + 2, // 38: dfdaemon.v2.DownloadPersistentTaskResponse.download_piece_finished_response:type_name -> dfdaemon.v2.DownloadPieceFinishedResponse + 66, // 39: dfdaemon.v2.UploadPersistentTaskRequest.object_storage:type_name -> common.v2.ObjectStorage + 65, // 40: dfdaemon.v2.UploadPersistentTaskRequest.ttl:type_name -> google.protobuf.Duration + 65, // 41: dfdaemon.v2.UploadPersistentTaskRequest.timeout:type_name -> google.protobuf.Duration + 65, // 42: dfdaemon.v2.StatLocalPersistentTaskResponse.ttl:type_name -> google.protobuf.Duration + 64, // 43: dfdaemon.v2.StatLocalPersistentTaskResponse.created_at:type_name -> google.protobuf.Timestamp + 64, // 44: dfdaemon.v2.StatLocalPersistentTaskResponse.updated_at:type_name -> google.protobuf.Timestamp + 64, // 45: dfdaemon.v2.StatLocalPersistentTaskResponse.failed_at:type_name -> google.protobuf.Timestamp + 64, // 46: dfdaemon.v2.StatLocalPersistentTaskResponse.finished_at:type_name -> google.protobuf.Timestamp + 32, // 47: dfdaemon.v2.ListLocalPersistentTasksResponse.tasks:type_name -> dfdaemon.v2.StatLocalPersistentTaskResponse + 65, // 48: dfdaemon.v2.DownloadPersistentCacheTaskRequest.timeout:type_name -> google.protobuf.Duration + 39, // 49: dfdaemon.v2.DownloadPersistentCacheTaskResponse.download_persistent_cache_task_started_response:type_name -> dfdaemon.v2.DownloadPersistentCacheTaskStartedResponse + 2, // 50: dfdaemon.v2.DownloadPersistentCacheTaskResponse.download_piece_finished_response:type_name -> dfdaemon.v2.DownloadPieceFinishedResponse + 65, // 51: dfdaemon.v2.UploadPersistentCacheTaskRequest.ttl:type_name -> google.protobuf.Duration + 65, // 52: dfdaemon.v2.UploadPersistentCacheTaskRequest.timeout:type_name -> google.protobuf.Duration + 65, // 53: dfdaemon.v2.StatLocalPersistentCacheTaskResponse.ttl:type_name -> google.protobuf.Duration + 64, // 54: dfdaemon.v2.StatLocalPersistentCacheTaskResponse.created_at:type_name -> google.protobuf.Timestamp + 64, // 55: dfdaemon.v2.StatLocalPersistentCacheTaskResponse.updated_at:type_name -> google.protobuf.Timestamp + 64, // 56: dfdaemon.v2.StatLocalPersistentCacheTaskResponse.failed_at:type_name -> google.protobuf.Timestamp + 64, // 57: dfdaemon.v2.StatLocalPersistentCacheTaskResponse.finished_at:type_name -> google.protobuf.Timestamp + 45, // 58: dfdaemon.v2.ListLocalPersistentCacheTasksResponse.tasks:type_name -> dfdaemon.v2.StatLocalPersistentCacheTaskResponse + 52, // 59: dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointRequest.endpoint:type_name -> dfdaemon.v2.IBVerbsQueuePairEndpoint + 52, // 60: dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointResponse.endpoint:type_name -> dfdaemon.v2.IBVerbsQueuePairEndpoint + 0, // 61: dfdaemon.v2.DfdaemonUpload.DownloadTask:input_type -> dfdaemon.v2.DownloadTaskRequest + 6, // 62: dfdaemon.v2.DfdaemonUpload.StatTask:input_type -> dfdaemon.v2.StatTaskRequest + 7, // 63: dfdaemon.v2.DfdaemonUpload.StatLocalTask:input_type -> dfdaemon.v2.StatLocalTaskRequest + 11, // 64: dfdaemon.v2.DfdaemonUpload.ListTaskEntries:input_type -> dfdaemon.v2.ListTaskEntriesRequest + 14, // 65: dfdaemon.v2.DfdaemonUpload.DeleteTask:input_type -> dfdaemon.v2.DeleteTaskRequest + 4, // 66: dfdaemon.v2.DfdaemonUpload.SyncPieces:input_type -> dfdaemon.v2.SyncPiecesRequest + 16, // 67: dfdaemon.v2.DfdaemonUpload.DownloadCacheTask:input_type -> dfdaemon.v2.DownloadCacheTaskRequest + 23, // 68: dfdaemon.v2.DfdaemonUpload.StatCacheTask:input_type -> dfdaemon.v2.StatCacheTaskRequest + 24, // 69: dfdaemon.v2.DfdaemonUpload.DeleteCacheTask:input_type -> dfdaemon.v2.DeleteCacheTaskRequest + 19, // 70: dfdaemon.v2.DfdaemonUpload.SyncCachePieces:input_type -> dfdaemon.v2.SyncCachePiecesRequest + 21, // 71: dfdaemon.v2.DfdaemonUpload.DownloadCachePiece:input_type -> dfdaemon.v2.DownloadCachePieceRequest + 25, // 72: dfdaemon.v2.DfdaemonUpload.DownloadPersistentTask:input_type -> dfdaemon.v2.DownloadPersistentTaskRequest + 36, // 73: dfdaemon.v2.DfdaemonUpload.SyncPersistentPieces:input_type -> dfdaemon.v2.SyncPersistentPiecesRequest + 29, // 74: dfdaemon.v2.DfdaemonUpload.UpdatePersistentTask:input_type -> dfdaemon.v2.UpdatePersistentTaskRequest + 30, // 75: dfdaemon.v2.DfdaemonUpload.StatPersistentTask:input_type -> dfdaemon.v2.StatPersistentTaskRequest + 35, // 76: dfdaemon.v2.DfdaemonUpload.DeletePersistentTask:input_type -> dfdaemon.v2.DeletePersistentTaskRequest + 38, // 77: dfdaemon.v2.DfdaemonUpload.DownloadPersistentCacheTask:input_type -> dfdaemon.v2.DownloadPersistentCacheTaskRequest + 42, // 78: dfdaemon.v2.DfdaemonUpload.UpdatePersistentCacheTask:input_type -> dfdaemon.v2.UpdatePersistentCacheTaskRequest + 43, // 79: dfdaemon.v2.DfdaemonUpload.StatPersistentCacheTask:input_type -> dfdaemon.v2.StatPersistentCacheTaskRequest + 48, // 80: dfdaemon.v2.DfdaemonUpload.DeletePersistentCacheTask:input_type -> dfdaemon.v2.DeletePersistentCacheTaskRequest + 49, // 81: dfdaemon.v2.DfdaemonUpload.SyncPersistentCachePieces:input_type -> dfdaemon.v2.SyncPersistentCachePiecesRequest + 51, // 82: dfdaemon.v2.DfdaemonUpload.SyncHost:input_type -> dfdaemon.v2.SyncHostRequest + 53, // 83: dfdaemon.v2.DfdaemonUpload.ExchangeIBVerbsQueuePairEndpoint:input_type -> dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointRequest + 0, // 84: dfdaemon.v2.DfdaemonDownload.DownloadTask:input_type -> dfdaemon.v2.DownloadTaskRequest + 6, // 85: dfdaemon.v2.DfdaemonDownload.StatTask:input_type -> dfdaemon.v2.StatTaskRequest + 7, // 86: dfdaemon.v2.DfdaemonDownload.StatLocalTask:input_type -> dfdaemon.v2.StatLocalTaskRequest + 9, // 87: dfdaemon.v2.DfdaemonDownload.ListLocalTasks:input_type -> dfdaemon.v2.ListLocalTasksRequest + 11, // 88: dfdaemon.v2.DfdaemonDownload.ListTaskEntries:input_type -> dfdaemon.v2.ListTaskEntriesRequest + 14, // 89: dfdaemon.v2.DfdaemonDownload.DeleteTask:input_type -> dfdaemon.v2.DeleteTaskRequest + 15, // 90: dfdaemon.v2.DfdaemonDownload.DeleteLocalTask:input_type -> dfdaemon.v2.DeleteLocalTaskRequest + 72, // 91: dfdaemon.v2.DfdaemonDownload.DeleteHost:input_type -> google.protobuf.Empty + 16, // 92: dfdaemon.v2.DfdaemonDownload.DownloadCacheTask:input_type -> dfdaemon.v2.DownloadCacheTaskRequest + 23, // 93: dfdaemon.v2.DfdaemonDownload.StatCacheTask:input_type -> dfdaemon.v2.StatCacheTaskRequest + 24, // 94: dfdaemon.v2.DfdaemonDownload.DeleteCacheTask:input_type -> dfdaemon.v2.DeleteCacheTaskRequest + 25, // 95: dfdaemon.v2.DfdaemonDownload.DownloadPersistentTask:input_type -> dfdaemon.v2.DownloadPersistentTaskRequest + 28, // 96: dfdaemon.v2.DfdaemonDownload.UploadPersistentTask:input_type -> dfdaemon.v2.UploadPersistentTaskRequest + 30, // 97: dfdaemon.v2.DfdaemonDownload.StatPersistentTask:input_type -> dfdaemon.v2.StatPersistentTaskRequest + 31, // 98: dfdaemon.v2.DfdaemonDownload.StatLocalPersistentTask:input_type -> dfdaemon.v2.StatLocalPersistentTaskRequest + 33, // 99: dfdaemon.v2.DfdaemonDownload.ListLocalPersistentTasks:input_type -> dfdaemon.v2.ListLocalPersistentTasksRequest + 38, // 100: dfdaemon.v2.DfdaemonDownload.DownloadPersistentCacheTask:input_type -> dfdaemon.v2.DownloadPersistentCacheTaskRequest + 41, // 101: dfdaemon.v2.DfdaemonDownload.UploadPersistentCacheTask:input_type -> dfdaemon.v2.UploadPersistentCacheTaskRequest + 43, // 102: dfdaemon.v2.DfdaemonDownload.StatPersistentCacheTask:input_type -> dfdaemon.v2.StatPersistentCacheTaskRequest + 44, // 103: dfdaemon.v2.DfdaemonDownload.StatLocalPersistentCacheTask:input_type -> dfdaemon.v2.StatLocalPersistentCacheTaskRequest + 46, // 104: dfdaemon.v2.DfdaemonDownload.ListLocalPersistentCacheTasks:input_type -> dfdaemon.v2.ListLocalPersistentCacheTasksRequest + 3, // 105: dfdaemon.v2.DfdaemonUpload.DownloadTask:output_type -> dfdaemon.v2.DownloadTaskResponse + 73, // 106: dfdaemon.v2.DfdaemonUpload.StatTask:output_type -> common.v2.Task + 8, // 107: dfdaemon.v2.DfdaemonUpload.StatLocalTask:output_type -> dfdaemon.v2.StatLocalTaskResponse + 12, // 108: dfdaemon.v2.DfdaemonUpload.ListTaskEntries:output_type -> dfdaemon.v2.ListTaskEntriesResponse + 72, // 109: dfdaemon.v2.DfdaemonUpload.DeleteTask:output_type -> google.protobuf.Empty + 5, // 110: dfdaemon.v2.DfdaemonUpload.SyncPieces:output_type -> dfdaemon.v2.SyncPiecesResponse + 18, // 111: dfdaemon.v2.DfdaemonUpload.DownloadCacheTask:output_type -> dfdaemon.v2.DownloadCacheTaskResponse + 74, // 112: dfdaemon.v2.DfdaemonUpload.StatCacheTask:output_type -> common.v2.CacheTask + 72, // 113: dfdaemon.v2.DfdaemonUpload.DeleteCacheTask:output_type -> google.protobuf.Empty + 20, // 114: dfdaemon.v2.DfdaemonUpload.SyncCachePieces:output_type -> dfdaemon.v2.SyncCachePiecesResponse + 22, // 115: dfdaemon.v2.DfdaemonUpload.DownloadCachePiece:output_type -> dfdaemon.v2.DownloadCachePieceResponse + 27, // 116: dfdaemon.v2.DfdaemonUpload.DownloadPersistentTask:output_type -> dfdaemon.v2.DownloadPersistentTaskResponse + 37, // 117: dfdaemon.v2.DfdaemonUpload.SyncPersistentPieces:output_type -> dfdaemon.v2.SyncPersistentPiecesResponse + 72, // 118: dfdaemon.v2.DfdaemonUpload.UpdatePersistentTask:output_type -> google.protobuf.Empty + 75, // 119: dfdaemon.v2.DfdaemonUpload.StatPersistentTask:output_type -> common.v2.PersistentTask + 72, // 120: dfdaemon.v2.DfdaemonUpload.DeletePersistentTask:output_type -> google.protobuf.Empty + 40, // 121: dfdaemon.v2.DfdaemonUpload.DownloadPersistentCacheTask:output_type -> dfdaemon.v2.DownloadPersistentCacheTaskResponse + 72, // 122: dfdaemon.v2.DfdaemonUpload.UpdatePersistentCacheTask:output_type -> google.protobuf.Empty + 76, // 123: dfdaemon.v2.DfdaemonUpload.StatPersistentCacheTask:output_type -> common.v2.PersistentCacheTask + 72, // 124: dfdaemon.v2.DfdaemonUpload.DeletePersistentCacheTask:output_type -> google.protobuf.Empty + 50, // 125: dfdaemon.v2.DfdaemonUpload.SyncPersistentCachePieces:output_type -> dfdaemon.v2.SyncPersistentCachePiecesResponse + 77, // 126: dfdaemon.v2.DfdaemonUpload.SyncHost:output_type -> common.v2.Host + 54, // 127: dfdaemon.v2.DfdaemonUpload.ExchangeIBVerbsQueuePairEndpoint:output_type -> dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointResponse + 3, // 128: dfdaemon.v2.DfdaemonDownload.DownloadTask:output_type -> dfdaemon.v2.DownloadTaskResponse + 73, // 129: dfdaemon.v2.DfdaemonDownload.StatTask:output_type -> common.v2.Task + 8, // 130: dfdaemon.v2.DfdaemonDownload.StatLocalTask:output_type -> dfdaemon.v2.StatLocalTaskResponse + 10, // 131: dfdaemon.v2.DfdaemonDownload.ListLocalTasks:output_type -> dfdaemon.v2.ListLocalTasksResponse + 12, // 132: dfdaemon.v2.DfdaemonDownload.ListTaskEntries:output_type -> dfdaemon.v2.ListTaskEntriesResponse + 72, // 133: dfdaemon.v2.DfdaemonDownload.DeleteTask:output_type -> google.protobuf.Empty + 72, // 134: dfdaemon.v2.DfdaemonDownload.DeleteLocalTask:output_type -> google.protobuf.Empty + 72, // 135: dfdaemon.v2.DfdaemonDownload.DeleteHost:output_type -> google.protobuf.Empty + 18, // 136: dfdaemon.v2.DfdaemonDownload.DownloadCacheTask:output_type -> dfdaemon.v2.DownloadCacheTaskResponse + 74, // 137: dfdaemon.v2.DfdaemonDownload.StatCacheTask:output_type -> common.v2.CacheTask + 72, // 138: dfdaemon.v2.DfdaemonDownload.DeleteCacheTask:output_type -> google.protobuf.Empty + 27, // 139: dfdaemon.v2.DfdaemonDownload.DownloadPersistentTask:output_type -> dfdaemon.v2.DownloadPersistentTaskResponse + 75, // 140: dfdaemon.v2.DfdaemonDownload.UploadPersistentTask:output_type -> common.v2.PersistentTask + 75, // 141: dfdaemon.v2.DfdaemonDownload.StatPersistentTask:output_type -> common.v2.PersistentTask + 32, // 142: dfdaemon.v2.DfdaemonDownload.StatLocalPersistentTask:output_type -> dfdaemon.v2.StatLocalPersistentTaskResponse + 34, // 143: dfdaemon.v2.DfdaemonDownload.ListLocalPersistentTasks:output_type -> dfdaemon.v2.ListLocalPersistentTasksResponse + 40, // 144: dfdaemon.v2.DfdaemonDownload.DownloadPersistentCacheTask:output_type -> dfdaemon.v2.DownloadPersistentCacheTaskResponse + 76, // 145: dfdaemon.v2.DfdaemonDownload.UploadPersistentCacheTask:output_type -> common.v2.PersistentCacheTask + 76, // 146: dfdaemon.v2.DfdaemonDownload.StatPersistentCacheTask:output_type -> common.v2.PersistentCacheTask + 45, // 147: dfdaemon.v2.DfdaemonDownload.StatLocalPersistentCacheTask:output_type -> dfdaemon.v2.StatLocalPersistentCacheTaskResponse + 47, // 148: dfdaemon.v2.DfdaemonDownload.ListLocalPersistentCacheTasks:output_type -> dfdaemon.v2.ListLocalPersistentCacheTasksResponse + 105, // [105:149] is the sub-list for method output_type + 61, // [61:105] is the sub-list for method input_type + 61, // [61:61] is the sub-list for extension type_name + 61, // [61:61] is the sub-list for extension extendee + 0, // [0:61] is the sub-list for field type_name } func init() { file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() } @@ -4998,7 +5935,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTaskEntriesRequest); i { + switch v := v.(*ListLocalTasksRequest); i { case 0: return &v.state case 1: @@ -5010,7 +5947,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTaskEntriesResponse); i { + switch v := v.(*ListLocalTasksResponse); i { case 0: return &v.state case 1: @@ -5022,7 +5959,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Entry); i { + switch v := v.(*ListTaskEntriesRequest); i { case 0: return &v.state case 1: @@ -5034,7 +5971,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteTaskRequest); i { + switch v := v.(*ListTaskEntriesResponse); i { case 0: return &v.state case 1: @@ -5046,7 +5983,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadCacheTaskRequest); i { + switch v := v.(*Entry); i { case 0: return &v.state case 1: @@ -5058,7 +5995,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadCacheTaskStartedResponse); i { + switch v := v.(*DeleteTaskRequest); i { case 0: return &v.state case 1: @@ -5070,7 +6007,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadCacheTaskResponse); i { + switch v := v.(*DeleteLocalTaskRequest); i { case 0: return &v.state case 1: @@ -5082,7 +6019,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncCachePiecesRequest); i { + switch v := v.(*DownloadCacheTaskRequest); i { case 0: return &v.state case 1: @@ -5094,7 +6031,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncCachePiecesResponse); i { + switch v := v.(*DownloadCacheTaskStartedResponse); i { case 0: return &v.state case 1: @@ -5106,7 +6043,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadCachePieceRequest); i { + switch v := v.(*DownloadCacheTaskResponse); i { case 0: return &v.state case 1: @@ -5118,7 +6055,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadCachePieceResponse); i { + switch v := v.(*SyncCachePiecesRequest); i { case 0: return &v.state case 1: @@ -5130,7 +6067,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatCacheTaskRequest); i { + switch v := v.(*SyncCachePiecesResponse); i { case 0: return &v.state case 1: @@ -5142,7 +6079,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteCacheTaskRequest); i { + switch v := v.(*DownloadCachePieceRequest); i { case 0: return &v.state case 1: @@ -5154,7 +6091,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadPersistentTaskRequest); i { + switch v := v.(*DownloadCachePieceResponse); i { case 0: return &v.state case 1: @@ -5166,7 +6103,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadPersistentTaskStartedResponse); i { + switch v := v.(*StatCacheTaskRequest); i { case 0: return &v.state case 1: @@ -5178,7 +6115,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadPersistentTaskResponse); i { + switch v := v.(*DeleteCacheTaskRequest); i { case 0: return &v.state case 1: @@ -5190,7 +6127,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UploadPersistentTaskRequest); i { + switch v := v.(*DownloadPersistentTaskRequest); i { case 0: return &v.state case 1: @@ -5202,7 +6139,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdatePersistentTaskRequest); i { + switch v := v.(*DownloadPersistentTaskStartedResponse); i { case 0: return &v.state case 1: @@ -5214,7 +6151,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatPersistentTaskRequest); i { + switch v := v.(*DownloadPersistentTaskResponse); i { case 0: return &v.state case 1: @@ -5226,7 +6163,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeletePersistentTaskRequest); i { + switch v := v.(*UploadPersistentTaskRequest); i { case 0: return &v.state case 1: @@ -5238,7 +6175,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncPersistentPiecesRequest); i { + switch v := v.(*UpdatePersistentTaskRequest); i { case 0: return &v.state case 1: @@ -5250,7 +6187,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncPersistentPiecesResponse); i { + switch v := v.(*StatPersistentTaskRequest); i { case 0: return &v.state case 1: @@ -5262,7 +6199,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadPersistentCacheTaskRequest); i { + switch v := v.(*StatLocalPersistentTaskRequest); i { case 0: return &v.state case 1: @@ -5274,7 +6211,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadPersistentCacheTaskStartedResponse); i { + switch v := v.(*StatLocalPersistentTaskResponse); i { case 0: return &v.state case 1: @@ -5286,7 +6223,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadPersistentCacheTaskResponse); i { + switch v := v.(*ListLocalPersistentTasksRequest); i { case 0: return &v.state case 1: @@ -5298,7 +6235,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UploadPersistentCacheTaskRequest); i { + switch v := v.(*ListLocalPersistentTasksResponse); i { case 0: return &v.state case 1: @@ -5310,7 +6247,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdatePersistentCacheTaskRequest); i { + switch v := v.(*DeletePersistentTaskRequest); i { case 0: return &v.state case 1: @@ -5322,7 +6259,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatPersistentCacheTaskRequest); i { + switch v := v.(*SyncPersistentPiecesRequest); i { case 0: return &v.state case 1: @@ -5334,7 +6271,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeletePersistentCacheTaskRequest); i { + switch v := v.(*SyncPersistentPiecesResponse); i { case 0: return &v.state case 1: @@ -5346,7 +6283,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncPersistentCachePiecesRequest); i { + switch v := v.(*DownloadPersistentCacheTaskRequest); i { case 0: return &v.state case 1: @@ -5358,7 +6295,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncPersistentCachePiecesResponse); i { + switch v := v.(*DownloadPersistentCacheTaskStartedResponse); i { case 0: return &v.state case 1: @@ -5370,7 +6307,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncHostRequest); i { + switch v := v.(*DownloadPersistentCacheTaskResponse); i { case 0: return &v.state case 1: @@ -5382,7 +6319,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IBVerbsQueuePairEndpoint); i { + switch v := v.(*UploadPersistentCacheTaskRequest); i { case 0: return &v.state case 1: @@ -5394,7 +6331,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExchangeIBVerbsQueuePairEndpointRequest); i { + switch v := v.(*UpdatePersistentCacheTaskRequest); i { case 0: return &v.state case 1: @@ -5406,6 +6343,138 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatPersistentCacheTaskRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatLocalPersistentCacheTaskRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatLocalPersistentCacheTaskResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListLocalPersistentCacheTasksRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListLocalPersistentCacheTasksResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeletePersistentCacheTaskRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SyncPersistentCachePiecesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SyncPersistentCachePiecesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SyncHostRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IBVerbsQueuePairEndpoint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExchangeIBVerbsQueuePairEndpointRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExchangeIBVerbsQueuePairEndpointResponse); i { case 0: return &v.state @@ -5427,45 +6496,50 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[6].OneofWrappers = []interface{}{} file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[7].OneofWrappers = []interface{}{} file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[8].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[9].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[10].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11].OneofWrappers = []interface{}{} file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13].OneofWrappers = []interface{}{} file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15].OneofWrappers = []interface{}{ + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[18].OneofWrappers = []interface{}{ (*DownloadCacheTaskResponse_DownloadCacheTaskStartedResponse)(nil), (*DownloadCacheTaskResponse_DownloadPieceFinishedResponse)(nil), } - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[19].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[20].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[21].OneofWrappers = []interface{}{} file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[22].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[24].OneofWrappers = []interface{}{ + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[23].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[24].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[25].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[27].OneofWrappers = []interface{}{ (*DownloadPersistentTaskResponse_DownloadPersistentTaskStartedResponse)(nil), (*DownloadPersistentTaskResponse_DownloadPieceFinishedResponse)(nil), } - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[25].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[26].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[27].OneofWrappers = []interface{}{} file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[28].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[29].OneofWrappers = []interface{}{} file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[30].OneofWrappers = []interface{}{} file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[31].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[33].OneofWrappers = []interface{}{ + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[32].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[35].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[37].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[38].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[40].OneofWrappers = []interface{}{ (*DownloadPersistentCacheTaskResponse_DownloadPersistentCacheTaskStartedResponse)(nil), (*DownloadPersistentCacheTaskResponse_DownloadPieceFinishedResponse)(nil), } - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[34].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[35].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[36].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[37].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[39].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[41].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[42].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[43].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[44].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[45].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[48].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[50].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDesc, NumEnums: 0, - NumMessages: 50, + NumMessages: 61, NumExtensions: 0, NumServices: 2, }, diff --git a/pkg/apis/dfdaemon/v2/dfdaemon.pb.validate.go b/pkg/apis/dfdaemon/v2/dfdaemon.pb.validate.go index 47b0247..fe91878 100644 --- a/pkg/apis/dfdaemon/v2/dfdaemon.pb.validate.go +++ b/pkg/apis/dfdaemon/v2/dfdaemon.pb.validate.go @@ -1552,6 +1552,244 @@ var _ interface { ErrorName() string } = StatLocalTaskResponseValidationError{} +// Validate checks the field values on ListLocalTasksRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ListLocalTasksRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListLocalTasksRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListLocalTasksRequestMultiError, or nil if none found. +func (m *ListLocalTasksRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListLocalTasksRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return ListLocalTasksRequestMultiError(errors) + } + + return nil +} + +// ListLocalTasksRequestMultiError is an error wrapping multiple validation +// errors returned by ListLocalTasksRequest.ValidateAll() if the designated +// constraints aren't met. +type ListLocalTasksRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListLocalTasksRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListLocalTasksRequestMultiError) AllErrors() []error { return m } + +// ListLocalTasksRequestValidationError is the validation error returned by +// ListLocalTasksRequest.Validate if the designated constraints aren't met. +type ListLocalTasksRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListLocalTasksRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListLocalTasksRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListLocalTasksRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListLocalTasksRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListLocalTasksRequestValidationError) ErrorName() string { + return "ListLocalTasksRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e ListLocalTasksRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListLocalTasksRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListLocalTasksRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListLocalTasksRequestValidationError{} + +// Validate checks the field values on ListLocalTasksResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ListLocalTasksResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListLocalTasksResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListLocalTasksResponseMultiError, or nil if none found. +func (m *ListLocalTasksResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListLocalTasksResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + for idx, item := range m.GetTasks() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListLocalTasksResponseValidationError{ + field: fmt.Sprintf("Tasks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListLocalTasksResponseValidationError{ + field: fmt.Sprintf("Tasks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListLocalTasksResponseValidationError{ + field: fmt.Sprintf("Tasks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return ListLocalTasksResponseMultiError(errors) + } + + return nil +} + +// ListLocalTasksResponseMultiError is an error wrapping multiple validation +// errors returned by ListLocalTasksResponse.ValidateAll() if the designated +// constraints aren't met. +type ListLocalTasksResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListLocalTasksResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListLocalTasksResponseMultiError) AllErrors() []error { return m } + +// ListLocalTasksResponseValidationError is the validation error returned by +// ListLocalTasksResponse.Validate if the designated constraints aren't met. +type ListLocalTasksResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListLocalTasksResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListLocalTasksResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListLocalTasksResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListLocalTasksResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListLocalTasksResponseValidationError) ErrorName() string { + return "ListLocalTasksResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e ListLocalTasksResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListLocalTasksResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListLocalTasksResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListLocalTasksResponseValidationError{} + // Validate checks the field values on ListTaskEntriesRequest with the rules // defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. @@ -2248,64 +2486,32 @@ var _ interface { ErrorName() string } = DeleteTaskRequestValidationError{} -// Validate checks the field values on DownloadCacheTaskRequest with the rules +// Validate checks the field values on DeleteLocalTaskRequest with the rules // defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. -func (m *DownloadCacheTaskRequest) Validate() error { +func (m *DeleteLocalTaskRequest) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on DownloadCacheTaskRequest with the -// rules defined in the proto definition for this message. If any rules are +// ValidateAll checks the field values on DeleteLocalTaskRequest with the rules +// defined in the proto definition for this message. If any rules are // violated, the result is a list of violation errors wrapped in -// DownloadCacheTaskRequestMultiError, or nil if none found. -func (m *DownloadCacheTaskRequest) ValidateAll() error { +// DeleteLocalTaskRequestMultiError, or nil if none found. +func (m *DeleteLocalTaskRequest) ValidateAll() error { return m.validate(true) } -func (m *DownloadCacheTaskRequest) validate(all bool) error { +func (m *DeleteLocalTaskRequest) validate(all bool) error { if m == nil { return nil } var errors []error - if uri, err := url.Parse(m.GetUrl()); err != nil { - err = DownloadCacheTaskRequestValidationError{ - field: "Url", - reason: "value must be a valid URI", - cause: err, - } - if !all { - return err - } - errors = append(errors, err) - } else if !uri.IsAbs() { - err := DownloadCacheTaskRequestValidationError{ - field: "Url", - reason: "value must be absolute", - } - if !all { - return err - } - errors = append(errors, err) - } - - if _, ok := common.TaskType_name[int32(m.GetType())]; !ok { - err := DownloadCacheTaskRequestValidationError{ - field: "Type", - reason: "value must be one of the defined enum values", - } - if !all { - return err - } - errors = append(errors, err) - } - - if _, ok := common.Priority_name[int32(m.GetPriority())]; !ok { - err := DownloadCacheTaskRequestValidationError{ - field: "Priority", - reason: "value must be one of the defined enum values", + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := DeleteLocalTaskRequestValidationError{ + field: "TaskId", + reason: "value length must be at least 1 runes", } if !all { return err @@ -2313,28 +2519,14 @@ func (m *DownloadCacheTaskRequest) validate(all bool) error { errors = append(errors, err) } - // no validation rules for RequestHeader - - // no validation rules for DisableBackToSource - - // no validation rules for NeedBackToSource - - // no validation rules for Prefetch - - // no validation rules for IsPrefetch - - // no validation rules for NeedPieceContent - - // no validation rules for Overwrite - - if m.Digest != nil { + if m.RemoteIp != nil { - if m.GetDigest() != "" { + if m.GetRemoteIp() != "" { - if !_DownloadCacheTaskRequest_Digest_Pattern.MatchString(m.GetDigest()) { - err := DownloadCacheTaskRequestValidationError{ - field: "Digest", - reason: "value does not match regex pattern \"^(md5:[a-fA-F0-9]{32}|sha1:[a-fA-F0-9]{40}|sha256:[a-fA-F0-9]{64}|sha512:[a-fA-F0-9]{128}|blake3:[a-fA-F0-9]{64}|crc32:[a-fA-F0-9]+)$\"", + if ip := net.ParseIP(m.GetRemoteIp()); ip == nil { + err := DeleteLocalTaskRequestValidationError{ + field: "RemoteIp", + reason: "value must be a valid IP address", } if !all { return err @@ -2346,7 +2538,185 @@ func (m *DownloadCacheTaskRequest) validate(all bool) error { } - if m.Range != nil { + if len(errors) > 0 { + return DeleteLocalTaskRequestMultiError(errors) + } + + return nil +} + +// DeleteLocalTaskRequestMultiError is an error wrapping multiple validation +// errors returned by DeleteLocalTaskRequest.ValidateAll() if the designated +// constraints aren't met. +type DeleteLocalTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteLocalTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteLocalTaskRequestMultiError) AllErrors() []error { return m } + +// DeleteLocalTaskRequestValidationError is the validation error returned by +// DeleteLocalTaskRequest.Validate if the designated constraints aren't met. +type DeleteLocalTaskRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DeleteLocalTaskRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DeleteLocalTaskRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DeleteLocalTaskRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DeleteLocalTaskRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DeleteLocalTaskRequestValidationError) ErrorName() string { + return "DeleteLocalTaskRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e DeleteLocalTaskRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDeleteLocalTaskRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DeleteLocalTaskRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DeleteLocalTaskRequestValidationError{} + +// Validate checks the field values on DownloadCacheTaskRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *DownloadCacheTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DownloadCacheTaskRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DownloadCacheTaskRequestMultiError, or nil if none found. +func (m *DownloadCacheTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DownloadCacheTaskRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if uri, err := url.Parse(m.GetUrl()); err != nil { + err = DownloadCacheTaskRequestValidationError{ + field: "Url", + reason: "value must be a valid URI", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else if !uri.IsAbs() { + err := DownloadCacheTaskRequestValidationError{ + field: "Url", + reason: "value must be absolute", + } + if !all { + return err + } + errors = append(errors, err) + } + + if _, ok := common.TaskType_name[int32(m.GetType())]; !ok { + err := DownloadCacheTaskRequestValidationError{ + field: "Type", + reason: "value must be one of the defined enum values", + } + if !all { + return err + } + errors = append(errors, err) + } + + if _, ok := common.Priority_name[int32(m.GetPriority())]; !ok { + err := DownloadCacheTaskRequestValidationError{ + field: "Priority", + reason: "value must be one of the defined enum values", + } + if !all { + return err + } + errors = append(errors, err) + } + + // no validation rules for RequestHeader + + // no validation rules for DisableBackToSource + + // no validation rules for NeedBackToSource + + // no validation rules for Prefetch + + // no validation rules for IsPrefetch + + // no validation rules for NeedPieceContent + + // no validation rules for Overwrite + + if m.Digest != nil { + + if m.GetDigest() != "" { + + if !_DownloadCacheTaskRequest_Digest_Pattern.MatchString(m.GetDigest()) { + err := DownloadCacheTaskRequestValidationError{ + field: "Digest", + reason: "value does not match regex pattern \"^(md5:[a-fA-F0-9]{32}|sha1:[a-fA-F0-9]{40}|sha256:[a-fA-F0-9]{64}|sha512:[a-fA-F0-9]{128}|blake3:[a-fA-F0-9]{64}|crc32:[a-fA-F0-9]+)$\"", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + + } + + if m.Range != nil { if all { switch v := interface{}(m.GetRange()).(type) { @@ -4935,22 +5305,22 @@ var _ interface { ErrorName() string } = StatPersistentTaskRequestValidationError{} -// Validate checks the field values on DeletePersistentTaskRequest with the +// Validate checks the field values on StatLocalPersistentTaskRequest with the // rules defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. -func (m *DeletePersistentTaskRequest) Validate() error { +func (m *StatLocalPersistentTaskRequest) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on DeletePersistentTaskRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// DeletePersistentTaskRequestMultiError, or nil if none found. -func (m *DeletePersistentTaskRequest) ValidateAll() error { +// ValidateAll checks the field values on StatLocalPersistentTaskRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// StatLocalPersistentTaskRequestMultiError, or nil if none found. +func (m *StatLocalPersistentTaskRequest) ValidateAll() error { return m.validate(true) } -func (m *DeletePersistentTaskRequest) validate(all bool) error { +func (m *StatLocalPersistentTaskRequest) validate(all bool) error { if m == nil { return nil } @@ -4958,7 +5328,7 @@ func (m *DeletePersistentTaskRequest) validate(all bool) error { var errors []error if utf8.RuneCountInString(m.GetTaskId()) < 1 { - err := DeletePersistentTaskRequestValidationError{ + err := StatLocalPersistentTaskRequestValidationError{ field: "TaskId", reason: "value length must be at least 1 runes", } @@ -4973,7 +5343,7 @@ func (m *DeletePersistentTaskRequest) validate(all bool) error { if m.GetRemoteIp() != "" { if ip := net.ParseIP(m.GetRemoteIp()); ip == nil { - err := DeletePersistentTaskRequestValidationError{ + err := StatLocalPersistentTaskRequestValidationError{ field: "RemoteIp", reason: "value must be a valid IP address", } @@ -4988,19 +5358,19 @@ func (m *DeletePersistentTaskRequest) validate(all bool) error { } if len(errors) > 0 { - return DeletePersistentTaskRequestMultiError(errors) + return StatLocalPersistentTaskRequestMultiError(errors) } return nil } -// DeletePersistentTaskRequestMultiError is an error wrapping multiple -// validation errors returned by DeletePersistentTaskRequest.ValidateAll() if -// the designated constraints aren't met. -type DeletePersistentTaskRequestMultiError []error +// StatLocalPersistentTaskRequestMultiError is an error wrapping multiple +// validation errors returned by StatLocalPersistentTaskRequest.ValidateAll() +// if the designated constraints aren't met. +type StatLocalPersistentTaskRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m DeletePersistentTaskRequestMultiError) Error() string { +func (m StatLocalPersistentTaskRequestMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -5009,12 +5379,12 @@ func (m DeletePersistentTaskRequestMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m DeletePersistentTaskRequestMultiError) AllErrors() []error { return m } +func (m StatLocalPersistentTaskRequestMultiError) AllErrors() []error { return m } -// DeletePersistentTaskRequestValidationError is the validation error returned -// by DeletePersistentTaskRequest.Validate if the designated constraints -// aren't met. -type DeletePersistentTaskRequestValidationError struct { +// StatLocalPersistentTaskRequestValidationError is the validation error +// returned by StatLocalPersistentTaskRequest.Validate if the designated +// constraints aren't met. +type StatLocalPersistentTaskRequestValidationError struct { field string reason string cause error @@ -5022,24 +5392,24 @@ type DeletePersistentTaskRequestValidationError struct { } // Field function returns field value. -func (e DeletePersistentTaskRequestValidationError) Field() string { return e.field } +func (e StatLocalPersistentTaskRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e DeletePersistentTaskRequestValidationError) Reason() string { return e.reason } +func (e StatLocalPersistentTaskRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e DeletePersistentTaskRequestValidationError) Cause() error { return e.cause } +func (e StatLocalPersistentTaskRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e DeletePersistentTaskRequestValidationError) Key() bool { return e.key } +func (e StatLocalPersistentTaskRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e DeletePersistentTaskRequestValidationError) ErrorName() string { - return "DeletePersistentTaskRequestValidationError" +func (e StatLocalPersistentTaskRequestValidationError) ErrorName() string { + return "StatLocalPersistentTaskRequestValidationError" } // Error satisfies the builtin error interface -func (e DeletePersistentTaskRequestValidationError) Error() string { +func (e StatLocalPersistentTaskRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -5051,14 +5421,14 @@ func (e DeletePersistentTaskRequestValidationError) Error() string { } return fmt.Sprintf( - "invalid %sDeletePersistentTaskRequest.%s: %s%s", + "invalid %sStatLocalPersistentTaskRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = DeletePersistentTaskRequestValidationError{} +var _ error = StatLocalPersistentTaskRequestValidationError{} var _ interface { Field() string @@ -5066,33 +5436,33 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = DeletePersistentTaskRequestValidationError{} +} = StatLocalPersistentTaskRequestValidationError{} -// Validate checks the field values on SyncPersistentPiecesRequest with the +// Validate checks the field values on StatLocalPersistentTaskResponse with the // rules defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. -func (m *SyncPersistentPiecesRequest) Validate() error { +func (m *StatLocalPersistentTaskResponse) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on SyncPersistentPiecesRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// SyncPersistentPiecesRequestMultiError, or nil if none found. -func (m *SyncPersistentPiecesRequest) ValidateAll() error { +// ValidateAll checks the field values on StatLocalPersistentTaskResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// StatLocalPersistentTaskResponseMultiError, or nil if none found. +func (m *StatLocalPersistentTaskResponse) ValidateAll() error { return m.validate(true) } -func (m *SyncPersistentPiecesRequest) validate(all bool) error { +func (m *StatLocalPersistentTaskResponse) validate(all bool) error { if m == nil { return nil } var errors []error - if utf8.RuneCountInString(m.GetHostId()) < 1 { - err := SyncPersistentPiecesRequestValidationError{ - field: "HostId", + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := StatLocalPersistentTaskResponseValidationError{ + field: "TaskId", reason: "value length must be at least 1 runes", } if !all { @@ -5101,10 +5471,45 @@ func (m *SyncPersistentPiecesRequest) validate(all bool) error { errors = append(errors, err) } - if utf8.RuneCountInString(m.GetTaskId()) < 1 { - err := SyncPersistentPiecesRequestValidationError{ - field: "TaskId", - reason: "value length must be at least 1 runes", + // no validation rules for Persistent + + if all { + switch v := interface{}(m.GetTtl()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, StatLocalPersistentTaskResponseValidationError{ + field: "Ttl", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, StatLocalPersistentTaskResponseValidationError{ + field: "Ttl", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTtl()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StatLocalPersistentTaskResponseValidationError{ + field: "Ttl", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for UploadingCount + + // no validation rules for UploadedCount + + if m.GetCreatedAt() == nil { + err := StatLocalPersistentTaskResponseValidationError{ + field: "CreatedAt", + reason: "value is required", } if !all { return err @@ -5112,10 +5517,10 @@ func (m *SyncPersistentPiecesRequest) validate(all bool) error { errors = append(errors, err) } - if len(m.GetInterestedPieceNumbers()) < 1 { - err := SyncPersistentPiecesRequestValidationError{ - field: "InterestedPieceNumbers", - reason: "value must contain at least 1 item(s)", + if m.GetUpdatedAt() == nil { + err := StatLocalPersistentTaskResponseValidationError{ + field: "UpdatedAt", + reason: "value is required", } if !all { return err @@ -5123,20 +5528,1331 @@ func (m *SyncPersistentPiecesRequest) validate(all bool) error { errors = append(errors, err) } - if len(errors) > 0 { - return SyncPersistentPiecesRequestMultiError(errors) - } + if m.PieceLength != nil { + + if m.GetPieceLength() != 0 { + + if m.GetPieceLength() < 4194304 { + err := StatLocalPersistentTaskResponseValidationError{ + field: "PieceLength", + reason: "value must be greater than or equal to 4194304", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + + } + + if m.ContentLength != nil { + // no validation rules for ContentLength + } + + if m.FailedAt != nil { + + if all { + switch v := interface{}(m.GetFailedAt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, StatLocalPersistentTaskResponseValidationError{ + field: "FailedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, StatLocalPersistentTaskResponseValidationError{ + field: "FailedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetFailedAt()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StatLocalPersistentTaskResponseValidationError{ + field: "FailedAt", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if m.FinishedAt != nil { + + if all { + switch v := interface{}(m.GetFinishedAt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, StatLocalPersistentTaskResponseValidationError{ + field: "FinishedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, StatLocalPersistentTaskResponseValidationError{ + field: "FinishedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetFinishedAt()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StatLocalPersistentTaskResponseValidationError{ + field: "FinishedAt", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return StatLocalPersistentTaskResponseMultiError(errors) + } + + return nil +} + +// StatLocalPersistentTaskResponseMultiError is an error wrapping multiple +// validation errors returned by StatLocalPersistentTaskResponse.ValidateAll() +// if the designated constraints aren't met. +type StatLocalPersistentTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m StatLocalPersistentTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m StatLocalPersistentTaskResponseMultiError) AllErrors() []error { return m } + +// StatLocalPersistentTaskResponseValidationError is the validation error +// returned by StatLocalPersistentTaskResponse.Validate if the designated +// constraints aren't met. +type StatLocalPersistentTaskResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StatLocalPersistentTaskResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StatLocalPersistentTaskResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StatLocalPersistentTaskResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StatLocalPersistentTaskResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StatLocalPersistentTaskResponseValidationError) ErrorName() string { + return "StatLocalPersistentTaskResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e StatLocalPersistentTaskResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStatLocalPersistentTaskResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StatLocalPersistentTaskResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StatLocalPersistentTaskResponseValidationError{} + +// Validate checks the field values on ListLocalPersistentTasksRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ListLocalPersistentTasksRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListLocalPersistentTasksRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListLocalPersistentTasksRequestMultiError, or nil if none found. +func (m *ListLocalPersistentTasksRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListLocalPersistentTasksRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return ListLocalPersistentTasksRequestMultiError(errors) + } + + return nil +} + +// ListLocalPersistentTasksRequestMultiError is an error wrapping multiple +// validation errors returned by ListLocalPersistentTasksRequest.ValidateAll() +// if the designated constraints aren't met. +type ListLocalPersistentTasksRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListLocalPersistentTasksRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListLocalPersistentTasksRequestMultiError) AllErrors() []error { return m } + +// ListLocalPersistentTasksRequestValidationError is the validation error +// returned by ListLocalPersistentTasksRequest.Validate if the designated +// constraints aren't met. +type ListLocalPersistentTasksRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListLocalPersistentTasksRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListLocalPersistentTasksRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListLocalPersistentTasksRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListLocalPersistentTasksRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListLocalPersistentTasksRequestValidationError) ErrorName() string { + return "ListLocalPersistentTasksRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e ListLocalPersistentTasksRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListLocalPersistentTasksRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListLocalPersistentTasksRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListLocalPersistentTasksRequestValidationError{} + +// Validate checks the field values on ListLocalPersistentTasksResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the first error encountered is returned, or nil if there are +// no violations. +func (m *ListLocalPersistentTasksResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListLocalPersistentTasksResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListLocalPersistentTasksResponseMultiError, or nil if none found. +func (m *ListLocalPersistentTasksResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListLocalPersistentTasksResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + for idx, item := range m.GetTasks() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListLocalPersistentTasksResponseValidationError{ + field: fmt.Sprintf("Tasks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListLocalPersistentTasksResponseValidationError{ + field: fmt.Sprintf("Tasks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListLocalPersistentTasksResponseValidationError{ + field: fmt.Sprintf("Tasks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return ListLocalPersistentTasksResponseMultiError(errors) + } + + return nil +} + +// ListLocalPersistentTasksResponseMultiError is an error wrapping multiple +// validation errors returned by +// ListLocalPersistentTasksResponse.ValidateAll() if the designated +// constraints aren't met. +type ListLocalPersistentTasksResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListLocalPersistentTasksResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListLocalPersistentTasksResponseMultiError) AllErrors() []error { return m } + +// ListLocalPersistentTasksResponseValidationError is the validation error +// returned by ListLocalPersistentTasksResponse.Validate if the designated +// constraints aren't met. +type ListLocalPersistentTasksResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListLocalPersistentTasksResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListLocalPersistentTasksResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListLocalPersistentTasksResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListLocalPersistentTasksResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListLocalPersistentTasksResponseValidationError) ErrorName() string { + return "ListLocalPersistentTasksResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e ListLocalPersistentTasksResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListLocalPersistentTasksResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListLocalPersistentTasksResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListLocalPersistentTasksResponseValidationError{} + +// Validate checks the field values on DeletePersistentTaskRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *DeletePersistentTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeletePersistentTaskRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeletePersistentTaskRequestMultiError, or nil if none found. +func (m *DeletePersistentTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeletePersistentTaskRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := DeletePersistentTaskRequestValidationError{ + field: "TaskId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if m.RemoteIp != nil { + + if m.GetRemoteIp() != "" { + + if ip := net.ParseIP(m.GetRemoteIp()); ip == nil { + err := DeletePersistentTaskRequestValidationError{ + field: "RemoteIp", + reason: "value must be a valid IP address", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + + } + + if len(errors) > 0 { + return DeletePersistentTaskRequestMultiError(errors) + } + + return nil +} + +// DeletePersistentTaskRequestMultiError is an error wrapping multiple +// validation errors returned by DeletePersistentTaskRequest.ValidateAll() if +// the designated constraints aren't met. +type DeletePersistentTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeletePersistentTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeletePersistentTaskRequestMultiError) AllErrors() []error { return m } + +// DeletePersistentTaskRequestValidationError is the validation error returned +// by DeletePersistentTaskRequest.Validate if the designated constraints +// aren't met. +type DeletePersistentTaskRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DeletePersistentTaskRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DeletePersistentTaskRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DeletePersistentTaskRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DeletePersistentTaskRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DeletePersistentTaskRequestValidationError) ErrorName() string { + return "DeletePersistentTaskRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e DeletePersistentTaskRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDeletePersistentTaskRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DeletePersistentTaskRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DeletePersistentTaskRequestValidationError{} + +// Validate checks the field values on SyncPersistentPiecesRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *SyncPersistentPiecesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SyncPersistentPiecesRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// SyncPersistentPiecesRequestMultiError, or nil if none found. +func (m *SyncPersistentPiecesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *SyncPersistentPiecesRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetHostId()) < 1 { + err := SyncPersistentPiecesRequestValidationError{ + field: "HostId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := SyncPersistentPiecesRequestValidationError{ + field: "TaskId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(m.GetInterestedPieceNumbers()) < 1 { + err := SyncPersistentPiecesRequestValidationError{ + field: "InterestedPieceNumbers", + reason: "value must contain at least 1 item(s)", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return SyncPersistentPiecesRequestMultiError(errors) + } + + return nil +} + +// SyncPersistentPiecesRequestMultiError is an error wrapping multiple +// validation errors returned by SyncPersistentPiecesRequest.ValidateAll() if +// the designated constraints aren't met. +type SyncPersistentPiecesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SyncPersistentPiecesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SyncPersistentPiecesRequestMultiError) AllErrors() []error { return m } + +// SyncPersistentPiecesRequestValidationError is the validation error returned +// by SyncPersistentPiecesRequest.Validate if the designated constraints +// aren't met. +type SyncPersistentPiecesRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SyncPersistentPiecesRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SyncPersistentPiecesRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SyncPersistentPiecesRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SyncPersistentPiecesRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SyncPersistentPiecesRequestValidationError) ErrorName() string { + return "SyncPersistentPiecesRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e SyncPersistentPiecesRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSyncPersistentPiecesRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SyncPersistentPiecesRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SyncPersistentPiecesRequestValidationError{} + +// Validate checks the field values on SyncPersistentPiecesResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *SyncPersistentPiecesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SyncPersistentPiecesResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// SyncPersistentPiecesResponseMultiError, or nil if none found. +func (m *SyncPersistentPiecesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *SyncPersistentPiecesResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Number + + // no validation rules for Offset + + // no validation rules for Length + + if ip := net.ParseIP(m.GetIp()); ip == nil { + err := SyncPersistentPiecesResponseValidationError{ + field: "Ip", + reason: "value must be a valid IP address", + } + if !all { + return err + } + errors = append(errors, err) + } + + if m.TcpPort != nil { + + if m.GetTcpPort() != 0 { + + if val := m.GetTcpPort(); val < 1024 || val >= 65535 { + err := SyncPersistentPiecesResponseValidationError{ + field: "TcpPort", + reason: "value must be inside range [1024, 65535)", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + + } + + if m.QuicPort != nil { + + if m.GetQuicPort() != 0 { + + if val := m.GetQuicPort(); val < 1024 || val >= 65535 { + err := SyncPersistentPiecesResponseValidationError{ + field: "QuicPort", + reason: "value must be inside range [1024, 65535)", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + + } + + if len(errors) > 0 { + return SyncPersistentPiecesResponseMultiError(errors) + } + + return nil +} + +// SyncPersistentPiecesResponseMultiError is an error wrapping multiple +// validation errors returned by SyncPersistentPiecesResponse.ValidateAll() if +// the designated constraints aren't met. +type SyncPersistentPiecesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SyncPersistentPiecesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SyncPersistentPiecesResponseMultiError) AllErrors() []error { return m } + +// SyncPersistentPiecesResponseValidationError is the validation error returned +// by SyncPersistentPiecesResponse.Validate if the designated constraints +// aren't met. +type SyncPersistentPiecesResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SyncPersistentPiecesResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SyncPersistentPiecesResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SyncPersistentPiecesResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SyncPersistentPiecesResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SyncPersistentPiecesResponseValidationError) ErrorName() string { + return "SyncPersistentPiecesResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e SyncPersistentPiecesResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSyncPersistentPiecesResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SyncPersistentPiecesResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SyncPersistentPiecesResponseValidationError{} + +// Validate checks the field values on DownloadPersistentCacheTaskRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the first error encountered is returned, or nil if there are +// no violations. +func (m *DownloadPersistentCacheTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DownloadPersistentCacheTaskRequest +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// DownloadPersistentCacheTaskRequestMultiError, or nil if none found. +func (m *DownloadPersistentCacheTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DownloadPersistentCacheTaskRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := DownloadPersistentCacheTaskRequestValidationError{ + field: "TaskId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + // no validation rules for Persistent + + // no validation rules for NeedPieceContent + + // no validation rules for ForceHardLink + + // no validation rules for Overwrite + + if m.Tag != nil { + // no validation rules for Tag + } + + if m.Application != nil { + // no validation rules for Application + } + + if m.OutputPath != nil { + + if m.GetOutputPath() != "" { + + if utf8.RuneCountInString(m.GetOutputPath()) < 1 { + err := DownloadPersistentCacheTaskRequestValidationError{ + field: "OutputPath", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + + } + + if m.Timeout != nil { + + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DownloadPersistentCacheTaskRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DownloadPersistentCacheTaskRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DownloadPersistentCacheTaskRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if m.Digest != nil { + // no validation rules for Digest + } + + if m.RemoteIp != nil { + + if m.GetRemoteIp() != "" { + + if ip := net.ParseIP(m.GetRemoteIp()); ip == nil { + err := DownloadPersistentCacheTaskRequestValidationError{ + field: "RemoteIp", + reason: "value must be a valid IP address", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + + } + + if len(errors) > 0 { + return DownloadPersistentCacheTaskRequestMultiError(errors) + } + + return nil +} + +// DownloadPersistentCacheTaskRequestMultiError is an error wrapping multiple +// validation errors returned by +// DownloadPersistentCacheTaskRequest.ValidateAll() if the designated +// constraints aren't met. +type DownloadPersistentCacheTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DownloadPersistentCacheTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DownloadPersistentCacheTaskRequestMultiError) AllErrors() []error { return m } + +// DownloadPersistentCacheTaskRequestValidationError is the validation error +// returned by DownloadPersistentCacheTaskRequest.Validate if the designated +// constraints aren't met. +type DownloadPersistentCacheTaskRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DownloadPersistentCacheTaskRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DownloadPersistentCacheTaskRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DownloadPersistentCacheTaskRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DownloadPersistentCacheTaskRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DownloadPersistentCacheTaskRequestValidationError) ErrorName() string { + return "DownloadPersistentCacheTaskRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e DownloadPersistentCacheTaskRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDownloadPersistentCacheTaskRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DownloadPersistentCacheTaskRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DownloadPersistentCacheTaskRequestValidationError{} + +// Validate checks the field values on +// DownloadPersistentCacheTaskStartedResponse with the rules defined in the +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *DownloadPersistentCacheTaskStartedResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on +// DownloadPersistentCacheTaskStartedResponse with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in +// DownloadPersistentCacheTaskStartedResponseMultiError, or nil if none found. +func (m *DownloadPersistentCacheTaskStartedResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DownloadPersistentCacheTaskStartedResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for ContentLength + + if len(errors) > 0 { + return DownloadPersistentCacheTaskStartedResponseMultiError(errors) + } + + return nil +} + +// DownloadPersistentCacheTaskStartedResponseMultiError is an error wrapping +// multiple validation errors returned by +// DownloadPersistentCacheTaskStartedResponse.ValidateAll() if the designated +// constraints aren't met. +type DownloadPersistentCacheTaskStartedResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DownloadPersistentCacheTaskStartedResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DownloadPersistentCacheTaskStartedResponseMultiError) AllErrors() []error { return m } + +// DownloadPersistentCacheTaskStartedResponseValidationError is the validation +// error returned by DownloadPersistentCacheTaskStartedResponse.Validate if +// the designated constraints aren't met. +type DownloadPersistentCacheTaskStartedResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DownloadPersistentCacheTaskStartedResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DownloadPersistentCacheTaskStartedResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DownloadPersistentCacheTaskStartedResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DownloadPersistentCacheTaskStartedResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DownloadPersistentCacheTaskStartedResponseValidationError) ErrorName() string { + return "DownloadPersistentCacheTaskStartedResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e DownloadPersistentCacheTaskStartedResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDownloadPersistentCacheTaskStartedResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DownloadPersistentCacheTaskStartedResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DownloadPersistentCacheTaskStartedResponseValidationError{} + +// Validate checks the field values on DownloadPersistentCacheTaskResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the first error encountered is returned, or nil if there are +// no violations. +func (m *DownloadPersistentCacheTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DownloadPersistentCacheTaskResponse +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// DownloadPersistentCacheTaskResponseMultiError, or nil if none found. +func (m *DownloadPersistentCacheTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DownloadPersistentCacheTaskResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetHostId()) < 1 { + err := DownloadPersistentCacheTaskResponseValidationError{ + field: "HostId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := DownloadPersistentCacheTaskResponseValidationError{ + field: "TaskId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetPeerId()) < 1 { + err := DownloadPersistentCacheTaskResponseValidationError{ + field: "PeerId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + oneofResponsePresent := false + switch v := m.Response.(type) { + case *DownloadPersistentCacheTaskResponse_DownloadPersistentCacheTaskStartedResponse: + if v == nil { + err := DownloadPersistentCacheTaskResponseValidationError{ + field: "Response", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + oneofResponsePresent = true + + if all { + switch v := interface{}(m.GetDownloadPersistentCacheTaskStartedResponse()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DownloadPersistentCacheTaskResponseValidationError{ + field: "DownloadPersistentCacheTaskStartedResponse", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DownloadPersistentCacheTaskResponseValidationError{ + field: "DownloadPersistentCacheTaskStartedResponse", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDownloadPersistentCacheTaskStartedResponse()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DownloadPersistentCacheTaskResponseValidationError{ + field: "DownloadPersistentCacheTaskStartedResponse", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *DownloadPersistentCacheTaskResponse_DownloadPieceFinishedResponse: + if v == nil { + err := DownloadPersistentCacheTaskResponseValidationError{ + field: "Response", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + oneofResponsePresent = true + + if all { + switch v := interface{}(m.GetDownloadPieceFinishedResponse()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DownloadPersistentCacheTaskResponseValidationError{ + field: "DownloadPieceFinishedResponse", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DownloadPersistentCacheTaskResponseValidationError{ + field: "DownloadPieceFinishedResponse", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDownloadPieceFinishedResponse()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DownloadPersistentCacheTaskResponseValidationError{ + field: "DownloadPieceFinishedResponse", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + _ = v // ensures v is used + } + if !oneofResponsePresent { + err := DownloadPersistentCacheTaskResponseValidationError{ + field: "Response", + reason: "value is required", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DownloadPersistentCacheTaskResponseMultiError(errors) + } return nil } -// SyncPersistentPiecesRequestMultiError is an error wrapping multiple -// validation errors returned by SyncPersistentPiecesRequest.ValidateAll() if -// the designated constraints aren't met. -type SyncPersistentPiecesRequestMultiError []error +// DownloadPersistentCacheTaskResponseMultiError is an error wrapping multiple +// validation errors returned by +// DownloadPersistentCacheTaskResponse.ValidateAll() if the designated +// constraints aren't met. +type DownloadPersistentCacheTaskResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m SyncPersistentPiecesRequestMultiError) Error() string { +func (m DownloadPersistentCacheTaskResponseMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -5145,12 +6861,12 @@ func (m SyncPersistentPiecesRequestMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m SyncPersistentPiecesRequestMultiError) AllErrors() []error { return m } +func (m DownloadPersistentCacheTaskResponseMultiError) AllErrors() []error { return m } -// SyncPersistentPiecesRequestValidationError is the validation error returned -// by SyncPersistentPiecesRequest.Validate if the designated constraints -// aren't met. -type SyncPersistentPiecesRequestValidationError struct { +// DownloadPersistentCacheTaskResponseValidationError is the validation error +// returned by DownloadPersistentCacheTaskResponse.Validate if the designated +// constraints aren't met. +type DownloadPersistentCacheTaskResponseValidationError struct { field string reason string cause error @@ -5158,24 +6874,24 @@ type SyncPersistentPiecesRequestValidationError struct { } // Field function returns field value. -func (e SyncPersistentPiecesRequestValidationError) Field() string { return e.field } +func (e DownloadPersistentCacheTaskResponseValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e SyncPersistentPiecesRequestValidationError) Reason() string { return e.reason } +func (e DownloadPersistentCacheTaskResponseValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e SyncPersistentPiecesRequestValidationError) Cause() error { return e.cause } +func (e DownloadPersistentCacheTaskResponseValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e SyncPersistentPiecesRequestValidationError) Key() bool { return e.key } +func (e DownloadPersistentCacheTaskResponseValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e SyncPersistentPiecesRequestValidationError) ErrorName() string { - return "SyncPersistentPiecesRequestValidationError" +func (e DownloadPersistentCacheTaskResponseValidationError) ErrorName() string { + return "DownloadPersistentCacheTaskResponseValidationError" } // Error satisfies the builtin error interface -func (e SyncPersistentPiecesRequestValidationError) Error() string { +func (e DownloadPersistentCacheTaskResponseValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -5187,14 +6903,14 @@ func (e SyncPersistentPiecesRequestValidationError) Error() string { } return fmt.Sprintf( - "invalid %sSyncPersistentPiecesRequest.%s: %s%s", + "invalid %sDownloadPersistentCacheTaskResponse.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = SyncPersistentPiecesRequestValidationError{} +var _ error = DownloadPersistentCacheTaskResponseValidationError{} var _ interface { Field() string @@ -5202,40 +6918,46 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = SyncPersistentPiecesRequestValidationError{} +} = DownloadPersistentCacheTaskResponseValidationError{} -// Validate checks the field values on SyncPersistentPiecesResponse with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *SyncPersistentPiecesResponse) Validate() error { +// Validate checks the field values on UploadPersistentCacheTaskRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the first error encountered is returned, or nil if there are +// no violations. +func (m *UploadPersistentCacheTaskRequest) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on SyncPersistentPiecesResponse with the -// rules defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// SyncPersistentPiecesResponseMultiError, or nil if none found. -func (m *SyncPersistentPiecesResponse) ValidateAll() error { +// ValidateAll checks the field values on UploadPersistentCacheTaskRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UploadPersistentCacheTaskRequestMultiError, or nil if none found. +func (m *UploadPersistentCacheTaskRequest) ValidateAll() error { return m.validate(true) } -func (m *SyncPersistentPiecesResponse) validate(all bool) error { +func (m *UploadPersistentCacheTaskRequest) validate(all bool) error { if m == nil { return nil } var errors []error - // no validation rules for Number - - // no validation rules for Offset - - // no validation rules for Length + if utf8.RuneCountInString(m.GetPath()) < 1 { + err := UploadPersistentCacheTaskRequestValidationError{ + field: "Path", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } - if ip := net.ParseIP(m.GetIp()); ip == nil { - err := SyncPersistentPiecesResponseValidationError{ - field: "Ip", - reason: "value must be a valid IP address", + if val := m.GetPersistentReplicaCount(); val < 1 || val > 5 { + err := UploadPersistentCacheTaskRequestValidationError{ + field: "PersistentReplicaCount", + reason: "value must be inside range [1, 5]", } if !all { return err @@ -5243,33 +6965,109 @@ func (m *SyncPersistentPiecesResponse) validate(all bool) error { errors = append(errors, err) } - if m.TcpPort != nil { + if d := m.GetTtl(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = UploadPersistentCacheTaskRequestValidationError{ + field: "Ttl", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { - if m.GetTcpPort() != 0 { + lte := time.Duration(604800*time.Second + 0*time.Nanosecond) + gte := time.Duration(60*time.Second + 0*time.Nanosecond) - if val := m.GetTcpPort(); val < 1024 || val >= 65535 { - err := SyncPersistentPiecesResponseValidationError{ - field: "TcpPort", - reason: "value must be inside range [1024, 65535)", + if dur < gte || dur > lte { + err := UploadPersistentCacheTaskRequestValidationError{ + field: "Ttl", + reason: "value must be inside range [1m0s, 168h0m0s]", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + + if m.ContentForCalculatingTaskId != nil { + // no validation rules for ContentForCalculatingTaskId + } + + if m.Tag != nil { + // no validation rules for Tag + } + + if m.Application != nil { + // no validation rules for Application + } + + if m.PieceLength != nil { + + if m.GetPieceLength() != 0 { + + if m.GetPieceLength() < 4194304 { + err := UploadPersistentCacheTaskRequestValidationError{ + field: "PieceLength", + reason: "value must be greater than or equal to 4194304", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + + } + + if m.Timeout != nil { + + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UploadPersistentCacheTaskRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) } - if !all { - return err + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UploadPersistentCacheTaskRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UploadPersistentCacheTaskRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, } - errors = append(errors, err) } - } } - if m.QuicPort != nil { + if m.RemoteIp != nil { - if m.GetQuicPort() != 0 { + if m.GetRemoteIp() != "" { - if val := m.GetQuicPort(); val < 1024 || val >= 65535 { - err := SyncPersistentPiecesResponseValidationError{ - field: "QuicPort", - reason: "value must be inside range [1024, 65535)", + if ip := net.ParseIP(m.GetRemoteIp()); ip == nil { + err := UploadPersistentCacheTaskRequestValidationError{ + field: "RemoteIp", + reason: "value must be a valid IP address", } if !all { return err @@ -5282,19 +7080,20 @@ func (m *SyncPersistentPiecesResponse) validate(all bool) error { } if len(errors) > 0 { - return SyncPersistentPiecesResponseMultiError(errors) + return UploadPersistentCacheTaskRequestMultiError(errors) } return nil } -// SyncPersistentPiecesResponseMultiError is an error wrapping multiple -// validation errors returned by SyncPersistentPiecesResponse.ValidateAll() if -// the designated constraints aren't met. -type SyncPersistentPiecesResponseMultiError []error +// UploadPersistentCacheTaskRequestMultiError is an error wrapping multiple +// validation errors returned by +// UploadPersistentCacheTaskRequest.ValidateAll() if the designated +// constraints aren't met. +type UploadPersistentCacheTaskRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m SyncPersistentPiecesResponseMultiError) Error() string { +func (m UploadPersistentCacheTaskRequestMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -5303,12 +7102,12 @@ func (m SyncPersistentPiecesResponseMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m SyncPersistentPiecesResponseMultiError) AllErrors() []error { return m } +func (m UploadPersistentCacheTaskRequestMultiError) AllErrors() []error { return m } -// SyncPersistentPiecesResponseValidationError is the validation error returned -// by SyncPersistentPiecesResponse.Validate if the designated constraints -// aren't met. -type SyncPersistentPiecesResponseValidationError struct { +// UploadPersistentCacheTaskRequestValidationError is the validation error +// returned by UploadPersistentCacheTaskRequest.Validate if the designated +// constraints aren't met. +type UploadPersistentCacheTaskRequestValidationError struct { field string reason string cause error @@ -5316,24 +7115,24 @@ type SyncPersistentPiecesResponseValidationError struct { } // Field function returns field value. -func (e SyncPersistentPiecesResponseValidationError) Field() string { return e.field } +func (e UploadPersistentCacheTaskRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e SyncPersistentPiecesResponseValidationError) Reason() string { return e.reason } +func (e UploadPersistentCacheTaskRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e SyncPersistentPiecesResponseValidationError) Cause() error { return e.cause } +func (e UploadPersistentCacheTaskRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e SyncPersistentPiecesResponseValidationError) Key() bool { return e.key } +func (e UploadPersistentCacheTaskRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e SyncPersistentPiecesResponseValidationError) ErrorName() string { - return "SyncPersistentPiecesResponseValidationError" +func (e UploadPersistentCacheTaskRequestValidationError) ErrorName() string { + return "UploadPersistentCacheTaskRequestValidationError" } // Error satisfies the builtin error interface -func (e SyncPersistentPiecesResponseValidationError) Error() string { +func (e UploadPersistentCacheTaskRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -5345,14 +7144,14 @@ func (e SyncPersistentPiecesResponseValidationError) Error() string { } return fmt.Sprintf( - "invalid %sSyncPersistentPiecesResponse.%s: %s%s", + "invalid %sUploadPersistentCacheTaskRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = SyncPersistentPiecesResponseValidationError{} +var _ error = UploadPersistentCacheTaskRequestValidationError{} var _ interface { Field() string @@ -5360,25 +7159,25 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = SyncPersistentPiecesResponseValidationError{} +} = UploadPersistentCacheTaskRequestValidationError{} -// Validate checks the field values on DownloadPersistentCacheTaskRequest with +// Validate checks the field values on UpdatePersistentCacheTaskRequest with // the rules defined in the proto definition for this message. If any rules // are violated, the first error encountered is returned, or nil if there are // no violations. -func (m *DownloadPersistentCacheTaskRequest) Validate() error { +func (m *UpdatePersistentCacheTaskRequest) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on DownloadPersistentCacheTaskRequest -// with the rules defined in the proto definition for this message. If any -// rules are violated, the result is a list of violation errors wrapped in -// DownloadPersistentCacheTaskRequestMultiError, or nil if none found. -func (m *DownloadPersistentCacheTaskRequest) ValidateAll() error { +// ValidateAll checks the field values on UpdatePersistentCacheTaskRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdatePersistentCacheTaskRequestMultiError, or nil if none found. +func (m *UpdatePersistentCacheTaskRequest) ValidateAll() error { return m.validate(true) } -func (m *DownloadPersistentCacheTaskRequest) validate(all bool) error { +func (m *UpdatePersistentCacheTaskRequest) validate(all bool) error { if m == nil { return nil } @@ -5386,7 +7185,7 @@ func (m *DownloadPersistentCacheTaskRequest) validate(all bool) error { var errors []error if utf8.RuneCountInString(m.GetTaskId()) < 1 { - err := DownloadPersistentCacheTaskRequestValidationError{ + err := UpdatePersistentCacheTaskRequestValidationError{ field: "TaskId", reason: "value length must be at least 1 runes", } @@ -5398,82 +7197,12 @@ func (m *DownloadPersistentCacheTaskRequest) validate(all bool) error { // no validation rules for Persistent - // no validation rules for NeedPieceContent - - // no validation rules for ForceHardLink - - // no validation rules for Overwrite - - if m.Tag != nil { - // no validation rules for Tag - } - - if m.Application != nil { - // no validation rules for Application - } - - if m.OutputPath != nil { - - if m.GetOutputPath() != "" { - - if utf8.RuneCountInString(m.GetOutputPath()) < 1 { - err := DownloadPersistentCacheTaskRequestValidationError{ - field: "OutputPath", - reason: "value length must be at least 1 runes", - } - if !all { - return err - } - errors = append(errors, err) - } - - } - - } - - if m.Timeout != nil { - - if all { - switch v := interface{}(m.GetTimeout()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, DownloadPersistentCacheTaskRequestValidationError{ - field: "Timeout", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, DownloadPersistentCacheTaskRequestValidationError{ - field: "Timeout", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return DownloadPersistentCacheTaskRequestValidationError{ - field: "Timeout", - reason: "embedded message failed validation", - cause: err, - } - } - } - - } - - if m.Digest != nil { - // no validation rules for Digest - } - if m.RemoteIp != nil { if m.GetRemoteIp() != "" { if ip := net.ParseIP(m.GetRemoteIp()); ip == nil { - err := DownloadPersistentCacheTaskRequestValidationError{ + err := UpdatePersistentCacheTaskRequestValidationError{ field: "RemoteIp", reason: "value must be a valid IP address", } @@ -5488,20 +7217,20 @@ func (m *DownloadPersistentCacheTaskRequest) validate(all bool) error { } if len(errors) > 0 { - return DownloadPersistentCacheTaskRequestMultiError(errors) + return UpdatePersistentCacheTaskRequestMultiError(errors) } return nil } -// DownloadPersistentCacheTaskRequestMultiError is an error wrapping multiple +// UpdatePersistentCacheTaskRequestMultiError is an error wrapping multiple // validation errors returned by -// DownloadPersistentCacheTaskRequest.ValidateAll() if the designated +// UpdatePersistentCacheTaskRequest.ValidateAll() if the designated // constraints aren't met. -type DownloadPersistentCacheTaskRequestMultiError []error +type UpdatePersistentCacheTaskRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m DownloadPersistentCacheTaskRequestMultiError) Error() string { +func (m UpdatePersistentCacheTaskRequestMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -5510,12 +7239,12 @@ func (m DownloadPersistentCacheTaskRequestMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m DownloadPersistentCacheTaskRequestMultiError) AllErrors() []error { return m } +func (m UpdatePersistentCacheTaskRequestMultiError) AllErrors() []error { return m } -// DownloadPersistentCacheTaskRequestValidationError is the validation error -// returned by DownloadPersistentCacheTaskRequest.Validate if the designated +// UpdatePersistentCacheTaskRequestValidationError is the validation error +// returned by UpdatePersistentCacheTaskRequest.Validate if the designated // constraints aren't met. -type DownloadPersistentCacheTaskRequestValidationError struct { +type UpdatePersistentCacheTaskRequestValidationError struct { field string reason string cause error @@ -5523,24 +7252,24 @@ type DownloadPersistentCacheTaskRequestValidationError struct { } // Field function returns field value. -func (e DownloadPersistentCacheTaskRequestValidationError) Field() string { return e.field } +func (e UpdatePersistentCacheTaskRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e DownloadPersistentCacheTaskRequestValidationError) Reason() string { return e.reason } +func (e UpdatePersistentCacheTaskRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e DownloadPersistentCacheTaskRequestValidationError) Cause() error { return e.cause } +func (e UpdatePersistentCacheTaskRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e DownloadPersistentCacheTaskRequestValidationError) Key() bool { return e.key } +func (e UpdatePersistentCacheTaskRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e DownloadPersistentCacheTaskRequestValidationError) ErrorName() string { - return "DownloadPersistentCacheTaskRequestValidationError" +func (e UpdatePersistentCacheTaskRequestValidationError) ErrorName() string { + return "UpdatePersistentCacheTaskRequestValidationError" } // Error satisfies the builtin error interface -func (e DownloadPersistentCacheTaskRequestValidationError) Error() string { +func (e UpdatePersistentCacheTaskRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -5552,14 +7281,14 @@ func (e DownloadPersistentCacheTaskRequestValidationError) Error() string { } return fmt.Sprintf( - "invalid %sDownloadPersistentCacheTaskRequest.%s: %s%s", + "invalid %sUpdatePersistentCacheTaskRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = DownloadPersistentCacheTaskRequestValidationError{} +var _ error = UpdatePersistentCacheTaskRequestValidationError{} var _ interface { Field() string @@ -5567,49 +7296,74 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = DownloadPersistentCacheTaskRequestValidationError{} +} = UpdatePersistentCacheTaskRequestValidationError{} -// Validate checks the field values on -// DownloadPersistentCacheTaskStartedResponse with the rules defined in the -// proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *DownloadPersistentCacheTaskStartedResponse) Validate() error { +// Validate checks the field values on StatPersistentCacheTaskRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *StatPersistentCacheTaskRequest) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on -// DownloadPersistentCacheTaskStartedResponse with the rules defined in the -// proto definition for this message. If any rules are violated, the result is -// a list of violation errors wrapped in -// DownloadPersistentCacheTaskStartedResponseMultiError, or nil if none found. -func (m *DownloadPersistentCacheTaskStartedResponse) ValidateAll() error { +// ValidateAll checks the field values on StatPersistentCacheTaskRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// StatPersistentCacheTaskRequestMultiError, or nil if none found. +func (m *StatPersistentCacheTaskRequest) ValidateAll() error { return m.validate(true) } -func (m *DownloadPersistentCacheTaskStartedResponse) validate(all bool) error { +func (m *StatPersistentCacheTaskRequest) validate(all bool) error { if m == nil { return nil } var errors []error - // no validation rules for ContentLength + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := StatPersistentCacheTaskRequestValidationError{ + field: "TaskId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if m.RemoteIp != nil { + + if m.GetRemoteIp() != "" { + + if ip := net.ParseIP(m.GetRemoteIp()); ip == nil { + err := StatPersistentCacheTaskRequestValidationError{ + field: "RemoteIp", + reason: "value must be a valid IP address", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + + } if len(errors) > 0 { - return DownloadPersistentCacheTaskStartedResponseMultiError(errors) + return StatPersistentCacheTaskRequestMultiError(errors) } return nil } -// DownloadPersistentCacheTaskStartedResponseMultiError is an error wrapping -// multiple validation errors returned by -// DownloadPersistentCacheTaskStartedResponse.ValidateAll() if the designated -// constraints aren't met. -type DownloadPersistentCacheTaskStartedResponseMultiError []error +// StatPersistentCacheTaskRequestMultiError is an error wrapping multiple +// validation errors returned by StatPersistentCacheTaskRequest.ValidateAll() +// if the designated constraints aren't met. +type StatPersistentCacheTaskRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m DownloadPersistentCacheTaskStartedResponseMultiError) Error() string { +func (m StatPersistentCacheTaskRequestMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -5618,12 +7372,12 @@ func (m DownloadPersistentCacheTaskStartedResponseMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m DownloadPersistentCacheTaskStartedResponseMultiError) AllErrors() []error { return m } +func (m StatPersistentCacheTaskRequestMultiError) AllErrors() []error { return m } -// DownloadPersistentCacheTaskStartedResponseValidationError is the validation -// error returned by DownloadPersistentCacheTaskStartedResponse.Validate if -// the designated constraints aren't met. -type DownloadPersistentCacheTaskStartedResponseValidationError struct { +// StatPersistentCacheTaskRequestValidationError is the validation error +// returned by StatPersistentCacheTaskRequest.Validate if the designated +// constraints aren't met. +type StatPersistentCacheTaskRequestValidationError struct { field string reason string cause error @@ -5631,24 +7385,24 @@ type DownloadPersistentCacheTaskStartedResponseValidationError struct { } // Field function returns field value. -func (e DownloadPersistentCacheTaskStartedResponseValidationError) Field() string { return e.field } +func (e StatPersistentCacheTaskRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e DownloadPersistentCacheTaskStartedResponseValidationError) Reason() string { return e.reason } +func (e StatPersistentCacheTaskRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e DownloadPersistentCacheTaskStartedResponseValidationError) Cause() error { return e.cause } +func (e StatPersistentCacheTaskRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e DownloadPersistentCacheTaskStartedResponseValidationError) Key() bool { return e.key } +func (e StatPersistentCacheTaskRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e DownloadPersistentCacheTaskStartedResponseValidationError) ErrorName() string { - return "DownloadPersistentCacheTaskStartedResponseValidationError" +func (e StatPersistentCacheTaskRequestValidationError) ErrorName() string { + return "StatPersistentCacheTaskRequestValidationError" } // Error satisfies the builtin error interface -func (e DownloadPersistentCacheTaskStartedResponseValidationError) Error() string { +func (e StatPersistentCacheTaskRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -5660,14 +7414,14 @@ func (e DownloadPersistentCacheTaskStartedResponseValidationError) Error() strin } return fmt.Sprintf( - "invalid %sDownloadPersistentCacheTaskStartedResponse.%s: %s%s", + "invalid %sStatPersistentCacheTaskRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = DownloadPersistentCacheTaskStartedResponseValidationError{} +var _ error = StatPersistentCacheTaskRequestValidationError{} var _ interface { Field() string @@ -5675,44 +7429,33 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = DownloadPersistentCacheTaskStartedResponseValidationError{} +} = StatPersistentCacheTaskRequestValidationError{} -// Validate checks the field values on DownloadPersistentCacheTaskResponse with +// Validate checks the field values on StatLocalPersistentCacheTaskRequest with // the rules defined in the proto definition for this message. If any rules // are violated, the first error encountered is returned, or nil if there are // no violations. -func (m *DownloadPersistentCacheTaskResponse) Validate() error { +func (m *StatLocalPersistentCacheTaskRequest) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on DownloadPersistentCacheTaskResponse +// ValidateAll checks the field values on StatLocalPersistentCacheTaskRequest // with the rules defined in the proto definition for this message. If any // rules are violated, the result is a list of violation errors wrapped in -// DownloadPersistentCacheTaskResponseMultiError, or nil if none found. -func (m *DownloadPersistentCacheTaskResponse) ValidateAll() error { +// StatLocalPersistentCacheTaskRequestMultiError, or nil if none found. +func (m *StatLocalPersistentCacheTaskRequest) ValidateAll() error { return m.validate(true) } -func (m *DownloadPersistentCacheTaskResponse) validate(all bool) error { +func (m *StatLocalPersistentCacheTaskRequest) validate(all bool) error { if m == nil { return nil } var errors []error - if utf8.RuneCountInString(m.GetHostId()) < 1 { - err := DownloadPersistentCacheTaskResponseValidationError{ - field: "HostId", - reason: "value length must be at least 1 runes", - } - if !all { - return err - } - errors = append(errors, err) - } - if utf8.RuneCountInString(m.GetTaskId()) < 1 { - err := DownloadPersistentCacheTaskResponseValidationError{ + err := StatLocalPersistentCacheTaskRequestValidationError{ field: "TaskId", reason: "value length must be at least 1 runes", } @@ -5722,132 +7465,40 @@ func (m *DownloadPersistentCacheTaskResponse) validate(all bool) error { errors = append(errors, err) } - if utf8.RuneCountInString(m.GetPeerId()) < 1 { - err := DownloadPersistentCacheTaskResponseValidationError{ - field: "PeerId", - reason: "value length must be at least 1 runes", - } - if !all { - return err - } - errors = append(errors, err) - } + if m.RemoteIp != nil { - oneofResponsePresent := false - switch v := m.Response.(type) { - case *DownloadPersistentCacheTaskResponse_DownloadPersistentCacheTaskStartedResponse: - if v == nil { - err := DownloadPersistentCacheTaskResponseValidationError{ - field: "Response", - reason: "oneof value cannot be a typed-nil", - } - if !all { - return err - } - errors = append(errors, err) - } - oneofResponsePresent = true + if m.GetRemoteIp() != "" { - if all { - switch v := interface{}(m.GetDownloadPersistentCacheTaskStartedResponse()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, DownloadPersistentCacheTaskResponseValidationError{ - field: "DownloadPersistentCacheTaskStartedResponse", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, DownloadPersistentCacheTaskResponseValidationError{ - field: "DownloadPersistentCacheTaskStartedResponse", - reason: "embedded message failed validation", - cause: err, - }) + if ip := net.ParseIP(m.GetRemoteIp()); ip == nil { + err := StatLocalPersistentCacheTaskRequestValidationError{ + field: "RemoteIp", + reason: "value must be a valid IP address", } - } - } else if v, ok := interface{}(m.GetDownloadPersistentCacheTaskStartedResponse()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return DownloadPersistentCacheTaskResponseValidationError{ - field: "DownloadPersistentCacheTaskStartedResponse", - reason: "embedded message failed validation", - cause: err, + if !all { + return err } + errors = append(errors, err) } - } - - case *DownloadPersistentCacheTaskResponse_DownloadPieceFinishedResponse: - if v == nil { - err := DownloadPersistentCacheTaskResponseValidationError{ - field: "Response", - reason: "oneof value cannot be a typed-nil", - } - if !all { - return err - } - errors = append(errors, err) - } - oneofResponsePresent = true - if all { - switch v := interface{}(m.GetDownloadPieceFinishedResponse()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, DownloadPersistentCacheTaskResponseValidationError{ - field: "DownloadPieceFinishedResponse", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, DownloadPersistentCacheTaskResponseValidationError{ - field: "DownloadPieceFinishedResponse", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetDownloadPieceFinishedResponse()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return DownloadPersistentCacheTaskResponseValidationError{ - field: "DownloadPieceFinishedResponse", - reason: "embedded message failed validation", - cause: err, - } - } } - default: - _ = v // ensures v is used - } - if !oneofResponsePresent { - err := DownloadPersistentCacheTaskResponseValidationError{ - field: "Response", - reason: "value is required", - } - if !all { - return err - } - errors = append(errors, err) } if len(errors) > 0 { - return DownloadPersistentCacheTaskResponseMultiError(errors) + return StatLocalPersistentCacheTaskRequestMultiError(errors) } return nil } -// DownloadPersistentCacheTaskResponseMultiError is an error wrapping multiple +// StatLocalPersistentCacheTaskRequestMultiError is an error wrapping multiple // validation errors returned by -// DownloadPersistentCacheTaskResponse.ValidateAll() if the designated +// StatLocalPersistentCacheTaskRequest.ValidateAll() if the designated // constraints aren't met. -type DownloadPersistentCacheTaskResponseMultiError []error +type StatLocalPersistentCacheTaskRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m DownloadPersistentCacheTaskResponseMultiError) Error() string { +func (m StatLocalPersistentCacheTaskRequestMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -5856,12 +7507,12 @@ func (m DownloadPersistentCacheTaskResponseMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m DownloadPersistentCacheTaskResponseMultiError) AllErrors() []error { return m } +func (m StatLocalPersistentCacheTaskRequestMultiError) AllErrors() []error { return m } -// DownloadPersistentCacheTaskResponseValidationError is the validation error -// returned by DownloadPersistentCacheTaskResponse.Validate if the designated +// StatLocalPersistentCacheTaskRequestValidationError is the validation error +// returned by StatLocalPersistentCacheTaskRequest.Validate if the designated // constraints aren't met. -type DownloadPersistentCacheTaskResponseValidationError struct { +type StatLocalPersistentCacheTaskRequestValidationError struct { field string reason string cause error @@ -5869,24 +7520,24 @@ type DownloadPersistentCacheTaskResponseValidationError struct { } // Field function returns field value. -func (e DownloadPersistentCacheTaskResponseValidationError) Field() string { return e.field } +func (e StatLocalPersistentCacheTaskRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e DownloadPersistentCacheTaskResponseValidationError) Reason() string { return e.reason } +func (e StatLocalPersistentCacheTaskRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e DownloadPersistentCacheTaskResponseValidationError) Cause() error { return e.cause } +func (e StatLocalPersistentCacheTaskRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e DownloadPersistentCacheTaskResponseValidationError) Key() bool { return e.key } +func (e StatLocalPersistentCacheTaskRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e DownloadPersistentCacheTaskResponseValidationError) ErrorName() string { - return "DownloadPersistentCacheTaskResponseValidationError" +func (e StatLocalPersistentCacheTaskRequestValidationError) ErrorName() string { + return "StatLocalPersistentCacheTaskRequestValidationError" } // Error satisfies the builtin error interface -func (e DownloadPersistentCacheTaskResponseValidationError) Error() string { +func (e StatLocalPersistentCacheTaskRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -5898,14 +7549,14 @@ func (e DownloadPersistentCacheTaskResponseValidationError) Error() string { } return fmt.Sprintf( - "invalid %sDownloadPersistentCacheTaskResponse.%s: %s%s", + "invalid %sStatLocalPersistentCacheTaskRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = DownloadPersistentCacheTaskResponseValidationError{} +var _ error = StatLocalPersistentCacheTaskRequestValidationError{} var _ interface { Field() string @@ -5913,34 +7564,34 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = DownloadPersistentCacheTaskResponseValidationError{} +} = StatLocalPersistentCacheTaskRequestValidationError{} -// Validate checks the field values on UploadPersistentCacheTaskRequest with -// the rules defined in the proto definition for this message. If any rules -// are violated, the first error encountered is returned, or nil if there are -// no violations. -func (m *UploadPersistentCacheTaskRequest) Validate() error { +// Validate checks the field values on StatLocalPersistentCacheTaskResponse +// with the rules defined in the proto definition for this message. If any +// rules are violated, the first error encountered is returned, or nil if +// there are no violations. +func (m *StatLocalPersistentCacheTaskResponse) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on UploadPersistentCacheTaskRequest with -// the rules defined in the proto definition for this message. If any rules -// are violated, the result is a list of violation errors wrapped in -// UploadPersistentCacheTaskRequestMultiError, or nil if none found. -func (m *UploadPersistentCacheTaskRequest) ValidateAll() error { +// ValidateAll checks the field values on StatLocalPersistentCacheTaskResponse +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// StatLocalPersistentCacheTaskResponseMultiError, or nil if none found. +func (m *StatLocalPersistentCacheTaskResponse) ValidateAll() error { return m.validate(true) } -func (m *UploadPersistentCacheTaskRequest) validate(all bool) error { +func (m *StatLocalPersistentCacheTaskResponse) validate(all bool) error { if m == nil { return nil } var errors []error - if utf8.RuneCountInString(m.GetPath()) < 1 { - err := UploadPersistentCacheTaskRequestValidationError{ - field: "Path", + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := StatLocalPersistentCacheTaskResponseValidationError{ + field: "TaskId", reason: "value length must be at least 1 runes", } if !all { @@ -5949,58 +7600,61 @@ func (m *UploadPersistentCacheTaskRequest) validate(all bool) error { errors = append(errors, err) } - if val := m.GetPersistentReplicaCount(); val < 1 || val > 5 { - err := UploadPersistentCacheTaskRequestValidationError{ - field: "PersistentReplicaCount", - reason: "value must be inside range [1, 5]", - } - if !all { - return err - } - errors = append(errors, err) - } - - if d := m.GetTtl(); d != nil { - dur, err := d.AsDuration(), d.CheckValid() - if err != nil { - err = UploadPersistentCacheTaskRequestValidationError{ - field: "Ttl", - reason: "value is not a valid duration", - cause: err, - } - if !all { - return err - } - errors = append(errors, err) - } else { - - lte := time.Duration(604800*time.Second + 0*time.Nanosecond) - gte := time.Duration(60*time.Second + 0*time.Nanosecond) + // no validation rules for Persistent - if dur < gte || dur > lte { - err := UploadPersistentCacheTaskRequestValidationError{ + if all { + switch v := interface{}(m.GetTtl()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, StatLocalPersistentCacheTaskResponseValidationError{ field: "Ttl", - reason: "value must be inside range [1m0s, 168h0m0s]", - } - if !all { - return err - } - errors = append(errors, err) + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, StatLocalPersistentCacheTaskResponseValidationError{ + field: "Ttl", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTtl()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StatLocalPersistentCacheTaskResponseValidationError{ + field: "Ttl", + reason: "embedded message failed validation", + cause: err, } - } } - if m.ContentForCalculatingTaskId != nil { - // no validation rules for ContentForCalculatingTaskId - } + // no validation rules for UploadingCount - if m.Tag != nil { - // no validation rules for Tag + // no validation rules for UploadedCount + + if m.GetCreatedAt() == nil { + err := StatLocalPersistentCacheTaskResponseValidationError{ + field: "CreatedAt", + reason: "value is required", + } + if !all { + return err + } + errors = append(errors, err) } - if m.Application != nil { - // no validation rules for Application + if m.GetUpdatedAt() == nil { + err := StatLocalPersistentCacheTaskResponseValidationError{ + field: "UpdatedAt", + reason: "value is required", + } + if !all { + return err + } + errors = append(errors, err) } if m.PieceLength != nil { @@ -6008,7 +7662,7 @@ func (m *UploadPersistentCacheTaskRequest) validate(all bool) error { if m.GetPieceLength() != 0 { if m.GetPieceLength() < 4194304 { - err := UploadPersistentCacheTaskRequestValidationError{ + err := StatLocalPersistentCacheTaskResponseValidationError{ field: "PieceLength", reason: "value must be greater than or equal to 4194304", } @@ -6022,31 +7676,35 @@ func (m *UploadPersistentCacheTaskRequest) validate(all bool) error { } - if m.Timeout != nil { + if m.ContentLength != nil { + // no validation rules for ContentLength + } + + if m.FailedAt != nil { if all { - switch v := interface{}(m.GetTimeout()).(type) { + switch v := interface{}(m.GetFailedAt()).(type) { case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { - errors = append(errors, UploadPersistentCacheTaskRequestValidationError{ - field: "Timeout", + errors = append(errors, StatLocalPersistentCacheTaskResponseValidationError{ + field: "FailedAt", reason: "embedded message failed validation", cause: err, }) } case interface{ Validate() error }: if err := v.Validate(); err != nil { - errors = append(errors, UploadPersistentCacheTaskRequestValidationError{ - field: "Timeout", + errors = append(errors, StatLocalPersistentCacheTaskResponseValidationError{ + field: "FailedAt", reason: "embedded message failed validation", cause: err, }) } } - } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetFailedAt()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return UploadPersistentCacheTaskRequestValidationError{ - field: "Timeout", + return StatLocalPersistentCacheTaskResponseValidationError{ + field: "FailedAt", reason: "embedded message failed validation", cause: err, } @@ -6055,40 +7713,54 @@ func (m *UploadPersistentCacheTaskRequest) validate(all bool) error { } - if m.RemoteIp != nil { - - if m.GetRemoteIp() != "" { + if m.FinishedAt != nil { - if ip := net.ParseIP(m.GetRemoteIp()); ip == nil { - err := UploadPersistentCacheTaskRequestValidationError{ - field: "RemoteIp", - reason: "value must be a valid IP address", + if all { + switch v := interface{}(m.GetFinishedAt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, StatLocalPersistentCacheTaskResponseValidationError{ + field: "FinishedAt", + reason: "embedded message failed validation", + cause: err, + }) } - if !all { - return err + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, StatLocalPersistentCacheTaskResponseValidationError{ + field: "FinishedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetFinishedAt()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StatLocalPersistentCacheTaskResponseValidationError{ + field: "FinishedAt", + reason: "embedded message failed validation", + cause: err, } - errors = append(errors, err) } - } } if len(errors) > 0 { - return UploadPersistentCacheTaskRequestMultiError(errors) + return StatLocalPersistentCacheTaskResponseMultiError(errors) } return nil } -// UploadPersistentCacheTaskRequestMultiError is an error wrapping multiple +// StatLocalPersistentCacheTaskResponseMultiError is an error wrapping multiple // validation errors returned by -// UploadPersistentCacheTaskRequest.ValidateAll() if the designated +// StatLocalPersistentCacheTaskResponse.ValidateAll() if the designated // constraints aren't met. -type UploadPersistentCacheTaskRequestMultiError []error +type StatLocalPersistentCacheTaskResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m UploadPersistentCacheTaskRequestMultiError) Error() string { +func (m StatLocalPersistentCacheTaskResponseMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -6097,12 +7769,12 @@ func (m UploadPersistentCacheTaskRequestMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m UploadPersistentCacheTaskRequestMultiError) AllErrors() []error { return m } +func (m StatLocalPersistentCacheTaskResponseMultiError) AllErrors() []error { return m } -// UploadPersistentCacheTaskRequestValidationError is the validation error -// returned by UploadPersistentCacheTaskRequest.Validate if the designated +// StatLocalPersistentCacheTaskResponseValidationError is the validation error +// returned by StatLocalPersistentCacheTaskResponse.Validate if the designated // constraints aren't met. -type UploadPersistentCacheTaskRequestValidationError struct { +type StatLocalPersistentCacheTaskResponseValidationError struct { field string reason string cause error @@ -6110,24 +7782,24 @@ type UploadPersistentCacheTaskRequestValidationError struct { } // Field function returns field value. -func (e UploadPersistentCacheTaskRequestValidationError) Field() string { return e.field } +func (e StatLocalPersistentCacheTaskResponseValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e UploadPersistentCacheTaskRequestValidationError) Reason() string { return e.reason } +func (e StatLocalPersistentCacheTaskResponseValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e UploadPersistentCacheTaskRequestValidationError) Cause() error { return e.cause } +func (e StatLocalPersistentCacheTaskResponseValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e UploadPersistentCacheTaskRequestValidationError) Key() bool { return e.key } +func (e StatLocalPersistentCacheTaskResponseValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e UploadPersistentCacheTaskRequestValidationError) ErrorName() string { - return "UploadPersistentCacheTaskRequestValidationError" +func (e StatLocalPersistentCacheTaskResponseValidationError) ErrorName() string { + return "StatLocalPersistentCacheTaskResponseValidationError" } // Error satisfies the builtin error interface -func (e UploadPersistentCacheTaskRequestValidationError) Error() string { +func (e StatLocalPersistentCacheTaskResponseValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -6139,14 +7811,14 @@ func (e UploadPersistentCacheTaskRequestValidationError) Error() string { } return fmt.Sprintf( - "invalid %sUploadPersistentCacheTaskRequest.%s: %s%s", + "invalid %sStatLocalPersistentCacheTaskResponse.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = UploadPersistentCacheTaskRequestValidationError{} +var _ error = StatLocalPersistentCacheTaskResponseValidationError{} var _ interface { Field() string @@ -6154,78 +7826,46 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = UploadPersistentCacheTaskRequestValidationError{} +} = StatLocalPersistentCacheTaskResponseValidationError{} -// Validate checks the field values on UpdatePersistentCacheTaskRequest with -// the rules defined in the proto definition for this message. If any rules -// are violated, the first error encountered is returned, or nil if there are -// no violations. -func (m *UpdatePersistentCacheTaskRequest) Validate() error { +// Validate checks the field values on ListLocalPersistentCacheTasksRequest +// with the rules defined in the proto definition for this message. If any +// rules are violated, the first error encountered is returned, or nil if +// there are no violations. +func (m *ListLocalPersistentCacheTasksRequest) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on UpdatePersistentCacheTaskRequest with -// the rules defined in the proto definition for this message. If any rules -// are violated, the result is a list of violation errors wrapped in -// UpdatePersistentCacheTaskRequestMultiError, or nil if none found. -func (m *UpdatePersistentCacheTaskRequest) ValidateAll() error { +// ValidateAll checks the field values on ListLocalPersistentCacheTasksRequest +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// ListLocalPersistentCacheTasksRequestMultiError, or nil if none found. +func (m *ListLocalPersistentCacheTasksRequest) ValidateAll() error { return m.validate(true) } -func (m *UpdatePersistentCacheTaskRequest) validate(all bool) error { +func (m *ListLocalPersistentCacheTasksRequest) validate(all bool) error { if m == nil { return nil } var errors []error - if utf8.RuneCountInString(m.GetTaskId()) < 1 { - err := UpdatePersistentCacheTaskRequestValidationError{ - field: "TaskId", - reason: "value length must be at least 1 runes", - } - if !all { - return err - } - errors = append(errors, err) - } - - // no validation rules for Persistent - - if m.RemoteIp != nil { - - if m.GetRemoteIp() != "" { - - if ip := net.ParseIP(m.GetRemoteIp()); ip == nil { - err := UpdatePersistentCacheTaskRequestValidationError{ - field: "RemoteIp", - reason: "value must be a valid IP address", - } - if !all { - return err - } - errors = append(errors, err) - } - - } - - } - if len(errors) > 0 { - return UpdatePersistentCacheTaskRequestMultiError(errors) + return ListLocalPersistentCacheTasksRequestMultiError(errors) } return nil } -// UpdatePersistentCacheTaskRequestMultiError is an error wrapping multiple +// ListLocalPersistentCacheTasksRequestMultiError is an error wrapping multiple // validation errors returned by -// UpdatePersistentCacheTaskRequest.ValidateAll() if the designated +// ListLocalPersistentCacheTasksRequest.ValidateAll() if the designated // constraints aren't met. -type UpdatePersistentCacheTaskRequestMultiError []error +type ListLocalPersistentCacheTasksRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m UpdatePersistentCacheTaskRequestMultiError) Error() string { +func (m ListLocalPersistentCacheTasksRequestMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -6234,12 +7874,12 @@ func (m UpdatePersistentCacheTaskRequestMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m UpdatePersistentCacheTaskRequestMultiError) AllErrors() []error { return m } +func (m ListLocalPersistentCacheTasksRequestMultiError) AllErrors() []error { return m } -// UpdatePersistentCacheTaskRequestValidationError is the validation error -// returned by UpdatePersistentCacheTaskRequest.Validate if the designated +// ListLocalPersistentCacheTasksRequestValidationError is the validation error +// returned by ListLocalPersistentCacheTasksRequest.Validate if the designated // constraints aren't met. -type UpdatePersistentCacheTaskRequestValidationError struct { +type ListLocalPersistentCacheTasksRequestValidationError struct { field string reason string cause error @@ -6247,24 +7887,24 @@ type UpdatePersistentCacheTaskRequestValidationError struct { } // Field function returns field value. -func (e UpdatePersistentCacheTaskRequestValidationError) Field() string { return e.field } +func (e ListLocalPersistentCacheTasksRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e UpdatePersistentCacheTaskRequestValidationError) Reason() string { return e.reason } +func (e ListLocalPersistentCacheTasksRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e UpdatePersistentCacheTaskRequestValidationError) Cause() error { return e.cause } +func (e ListLocalPersistentCacheTasksRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e UpdatePersistentCacheTaskRequestValidationError) Key() bool { return e.key } +func (e ListLocalPersistentCacheTasksRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e UpdatePersistentCacheTaskRequestValidationError) ErrorName() string { - return "UpdatePersistentCacheTaskRequestValidationError" +func (e ListLocalPersistentCacheTasksRequestValidationError) ErrorName() string { + return "ListLocalPersistentCacheTasksRequestValidationError" } // Error satisfies the builtin error interface -func (e UpdatePersistentCacheTaskRequestValidationError) Error() string { +func (e ListLocalPersistentCacheTasksRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -6276,14 +7916,14 @@ func (e UpdatePersistentCacheTaskRequestValidationError) Error() string { } return fmt.Sprintf( - "invalid %sUpdatePersistentCacheTaskRequest.%s: %s%s", + "invalid %sListLocalPersistentCacheTasksRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = UpdatePersistentCacheTaskRequestValidationError{} +var _ error = ListLocalPersistentCacheTasksRequestValidationError{} var _ interface { Field() string @@ -6291,74 +7931,80 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = UpdatePersistentCacheTaskRequestValidationError{} +} = ListLocalPersistentCacheTasksRequestValidationError{} -// Validate checks the field values on StatPersistentCacheTaskRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *StatPersistentCacheTaskRequest) Validate() error { +// Validate checks the field values on ListLocalPersistentCacheTasksResponse +// with the rules defined in the proto definition for this message. If any +// rules are violated, the first error encountered is returned, or nil if +// there are no violations. +func (m *ListLocalPersistentCacheTasksResponse) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on StatPersistentCacheTaskRequest with -// the rules defined in the proto definition for this message. If any rules -// are violated, the result is a list of violation errors wrapped in -// StatPersistentCacheTaskRequestMultiError, or nil if none found. -func (m *StatPersistentCacheTaskRequest) ValidateAll() error { +// ValidateAll checks the field values on ListLocalPersistentCacheTasksResponse +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// ListLocalPersistentCacheTasksResponseMultiError, or nil if none found. +func (m *ListLocalPersistentCacheTasksResponse) ValidateAll() error { return m.validate(true) } -func (m *StatPersistentCacheTaskRequest) validate(all bool) error { +func (m *ListLocalPersistentCacheTasksResponse) validate(all bool) error { if m == nil { return nil } var errors []error - if utf8.RuneCountInString(m.GetTaskId()) < 1 { - err := StatPersistentCacheTaskRequestValidationError{ - field: "TaskId", - reason: "value length must be at least 1 runes", - } - if !all { - return err - } - errors = append(errors, err) - } - - if m.RemoteIp != nil { - - if m.GetRemoteIp() != "" { + for idx, item := range m.GetTasks() { + _, _ = idx, item - if ip := net.ParseIP(m.GetRemoteIp()); ip == nil { - err := StatPersistentCacheTaskRequestValidationError{ - field: "RemoteIp", - reason: "value must be a valid IP address", + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListLocalPersistentCacheTasksResponseValidationError{ + field: fmt.Sprintf("Tasks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) } - if !all { - return err + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListLocalPersistentCacheTasksResponseValidationError{ + field: fmt.Sprintf("Tasks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListLocalPersistentCacheTasksResponseValidationError{ + field: fmt.Sprintf("Tasks[%v]", idx), + reason: "embedded message failed validation", + cause: err, } - errors = append(errors, err) } - } } if len(errors) > 0 { - return StatPersistentCacheTaskRequestMultiError(errors) + return ListLocalPersistentCacheTasksResponseMultiError(errors) } return nil } -// StatPersistentCacheTaskRequestMultiError is an error wrapping multiple -// validation errors returned by StatPersistentCacheTaskRequest.ValidateAll() -// if the designated constraints aren't met. -type StatPersistentCacheTaskRequestMultiError []error +// ListLocalPersistentCacheTasksResponseMultiError is an error wrapping +// multiple validation errors returned by +// ListLocalPersistentCacheTasksResponse.ValidateAll() if the designated +// constraints aren't met. +type ListLocalPersistentCacheTasksResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m StatPersistentCacheTaskRequestMultiError) Error() string { +func (m ListLocalPersistentCacheTasksResponseMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -6367,12 +8013,12 @@ func (m StatPersistentCacheTaskRequestMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m StatPersistentCacheTaskRequestMultiError) AllErrors() []error { return m } +func (m ListLocalPersistentCacheTasksResponseMultiError) AllErrors() []error { return m } -// StatPersistentCacheTaskRequestValidationError is the validation error -// returned by StatPersistentCacheTaskRequest.Validate if the designated -// constraints aren't met. -type StatPersistentCacheTaskRequestValidationError struct { +// ListLocalPersistentCacheTasksResponseValidationError is the validation error +// returned by ListLocalPersistentCacheTasksResponse.Validate if the +// designated constraints aren't met. +type ListLocalPersistentCacheTasksResponseValidationError struct { field string reason string cause error @@ -6380,24 +8026,24 @@ type StatPersistentCacheTaskRequestValidationError struct { } // Field function returns field value. -func (e StatPersistentCacheTaskRequestValidationError) Field() string { return e.field } +func (e ListLocalPersistentCacheTasksResponseValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e StatPersistentCacheTaskRequestValidationError) Reason() string { return e.reason } +func (e ListLocalPersistentCacheTasksResponseValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e StatPersistentCacheTaskRequestValidationError) Cause() error { return e.cause } +func (e ListLocalPersistentCacheTasksResponseValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e StatPersistentCacheTaskRequestValidationError) Key() bool { return e.key } +func (e ListLocalPersistentCacheTasksResponseValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e StatPersistentCacheTaskRequestValidationError) ErrorName() string { - return "StatPersistentCacheTaskRequestValidationError" +func (e ListLocalPersistentCacheTasksResponseValidationError) ErrorName() string { + return "ListLocalPersistentCacheTasksResponseValidationError" } // Error satisfies the builtin error interface -func (e StatPersistentCacheTaskRequestValidationError) Error() string { +func (e ListLocalPersistentCacheTasksResponseValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -6409,14 +8055,14 @@ func (e StatPersistentCacheTaskRequestValidationError) Error() string { } return fmt.Sprintf( - "invalid %sStatPersistentCacheTaskRequest.%s: %s%s", + "invalid %sListLocalPersistentCacheTasksResponse.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = StatPersistentCacheTaskRequestValidationError{} +var _ error = ListLocalPersistentCacheTasksResponseValidationError{} var _ interface { Field() string @@ -6424,7 +8070,7 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = StatPersistentCacheTaskRequestValidationError{} +} = ListLocalPersistentCacheTasksResponseValidationError{} // Validate checks the field values on DeletePersistentCacheTaskRequest with // the rules defined in the proto definition for this message. If any rules diff --git a/pkg/apis/dfdaemon/v2/dfdaemon.proto b/pkg/apis/dfdaemon/v2/dfdaemon.proto index 1477c83..70fce90 100644 --- a/pkg/apis/dfdaemon/v2/dfdaemon.proto +++ b/pkg/apis/dfdaemon/v2/dfdaemon.proto @@ -164,6 +164,15 @@ message StatLocalTaskResponse { optional google.protobuf.Timestamp finished_at = 11; } +// ListLocalTasksRequest represents request of ListLocalTasks. +message ListLocalTasksRequest {} + +// ListLocalTasksResponse represents response of ListLocalTasks. +message ListLocalTasksResponse { + // Task ids of the local tasks. + repeated StatLocalTaskResponse tasks = 1; +} + // ListTaskEntriesRequest represents request of ListTaskEntries. message ListTaskEntriesRequest { // Task id. @@ -228,6 +237,17 @@ message DeleteTaskRequest { }]; } +// DeleteLocalTaskRequest represents request of DeleteLocalTask. +message DeleteLocalTaskRequest { + // Task id. + string task_id = 1 [(validate.rules).string.min_len = 1]; + // Remote IP represents the IP address of the client initiating the delete request. + optional string remote_ip = 2 [(validate.rules).string = { + ip: true + ignore_empty: true + }]; +} + // DownloadCacheTaskRequest represents request of DownloadCacheTask. message DownloadCacheTaskRequest { // Download url. @@ -525,6 +545,57 @@ message StatPersistentTaskRequest { }]; } +// StatLocalPersistentTaskRequest represents request of StatLocalPersistentTask. +message StatLocalPersistentTaskRequest { + // Task id. + string task_id = 1 [(validate.rules).string.min_len = 1]; + // Remote IP represents the IP address of the client initiating the stat request. + optional string remote_ip = 2 [(validate.rules).string = { + ip: true + ignore_empty: true + }]; +} + +// StatLocalPersistentTaskResponse represents response of StatLocalPersistentTask. +message StatLocalPersistentTaskResponse { + // Task id. + string task_id = 1 [(validate.rules).string.min_len = 1]; + // Persistent represents whether the persistent task is persistent. + // If the persistent task is persistent, the persistent peer will + // not be deleted when dfdamon runs garbage collection. + bool persistent = 2; + // TTL of the persistent task. + google.protobuf.Duration ttl = 3; + // Task piece length. + optional uint64 piece_length = 4 [(validate.rules).uint64 = { + gte: 4194304 + ignore_empty: true + }]; + // Task content length. + optional uint64 content_length = 5; + // Uploading count is the count of the task being uploaded by other peers. + uint64 uploading_count = 6; + // Uploaded count is the count of the task has been uploaded by other peers. + uint64 uploaded_count = 7; + // Task create time. + google.protobuf.Timestamp created_at = 8 [(validate.rules).timestamp.required = true]; + // Task update time. + google.protobuf.Timestamp updated_at = 9 [(validate.rules).timestamp.required = true]; + // Task fail time. + optional google.protobuf.Timestamp failed_at = 10; + // Task finish time. + optional google.protobuf.Timestamp finished_at = 11; +} + +// ListLocalPersistentTasksRequest represents request of ListLocalPersistentTasks. +message ListLocalPersistentTasksRequest {} + +// ListLocalPersistentTasksResponse represents response of ListLocalPersistentTasks. +message ListLocalPersistentTasksResponse { + // Task ids of the local tasks. + repeated StatLocalPersistentTaskResponse tasks = 1; +} + // DeletePersistentTaskRequest represents request of DeletePersistentTask. message DeletePersistentTaskRequest { // Task id. @@ -700,6 +771,57 @@ message StatPersistentCacheTaskRequest { }]; } +// StatLocalPersistentCacheTaskRequest represents request of StatLocalPersistentCacheTask. +message StatLocalPersistentCacheTaskRequest { + // Task id. + string task_id = 1 [(validate.rules).string.min_len = 1]; + // Remote IP represents the IP address of the client initiating the stat request. + optional string remote_ip = 2 [(validate.rules).string = { + ip: true + ignore_empty: true + }]; +} + +// StatLocalPersistentTaskResponse represents response of StatLocalPersistentTask. +message StatLocalPersistentCacheTaskResponse { + // Task id. + string task_id = 1 [(validate.rules).string.min_len = 1]; + // Persistent represents whether the persistent cache task is persistent. + // If the persistent cache task is persistent, the persistent cache peer will + // not be deleted when dfdamon runs garbage collection. + bool persistent = 2; + // TTL of the persistent cache task. + google.protobuf.Duration ttl = 3; + // Task piece length. + optional uint64 piece_length = 4 [(validate.rules).uint64 = { + gte: 4194304 + ignore_empty: true + }]; + // Task content length. + optional uint64 content_length = 5; + // Uploading count is the count of the task being uploaded by other peers. + uint64 uploading_count = 6; + // Uploaded count is the count of the task has been uploaded by other peers. + uint64 uploaded_count = 7; + // Task create time. + google.protobuf.Timestamp created_at = 8 [(validate.rules).timestamp.required = true]; + // Task update time. + google.protobuf.Timestamp updated_at = 9 [(validate.rules).timestamp.required = true]; + // Task fail time. + optional google.protobuf.Timestamp failed_at = 10; + // Task finish time. + optional google.protobuf.Timestamp finished_at = 11; +} + +// ListLocalPersistentCacheTasksRequest represents request of ListLocalPersistentCacheTasks. +message ListLocalPersistentCacheTasksRequest {} + +// ListLocalPersistentTasksResponse represents response of ListLocalPersistentTasks. +message ListLocalPersistentCacheTasksResponse { + // Task ids of the local tasks. + repeated StatLocalPersistentCacheTaskResponse tasks = 1; +} + // DeletePersistentCacheTaskRequest represents request of DeletePersistentCacheTask. message DeletePersistentCacheTaskRequest { // Task id. @@ -859,12 +981,18 @@ service DfdaemonDownload { // StatLocalTask stats local task information from peer. rpc StatLocalTask(StatLocalTaskRequest) returns (StatLocalTaskResponse); + // ListLocalTasks lists local tasks from peer. + rpc ListLocalTasks(ListLocalTasksRequest) returns (ListLocalTasksResponse); + // ListTaskEntries lists task entries for downloading directory. rpc ListTaskEntries(ListTaskEntriesRequest) returns (ListTaskEntriesResponse); // DeleteTask deletes task from p2p network. rpc DeleteTask(DeleteTaskRequest) returns (google.protobuf.Empty); + // DeleteLocalTask deletes local task from peer. + rpc DeleteLocalTask(DeleteLocalTaskRequest) returns (google.protobuf.Empty); + // DeleteHost releases host in scheduler. rpc DeleteHost(google.protobuf.Empty) returns (google.protobuf.Empty); @@ -883,6 +1011,15 @@ service DfdaemonDownload { // UploadPersistentTask uploads persistent task to p2p network. rpc UploadPersistentTask(UploadPersistentTaskRequest) returns (common.v2.PersistentTask); + // StatPersistentTask stats persistent task information. + rpc StatPersistentTask(StatPersistentTaskRequest) returns (common.v2.PersistentTask); + + // StatLocalPersistentTask stats local persistent task information from peer. + rpc StatLocalPersistentTask(StatLocalPersistentTaskRequest) returns (StatLocalPersistentTaskResponse); + + // ListLocalPersistentTasks lists local persistent tasks from peer. + rpc ListLocalPersistentTasks(ListLocalPersistentTasksRequest) returns (ListLocalPersistentTasksResponse); + // DownloadPersistentCacheTask downloads persistent cache task from p2p network. rpc DownloadPersistentCacheTask(DownloadPersistentCacheTaskRequest) returns (stream DownloadPersistentCacheTaskResponse); @@ -891,4 +1028,10 @@ service DfdaemonDownload { // StatPersistentCacheTask stats persistent cache task information. rpc StatPersistentCacheTask(StatPersistentCacheTaskRequest) returns (common.v2.PersistentCacheTask); + + // StatLocalPersistentCacheTask stats local persistent cache task information from peer. + rpc StatLocalPersistentCacheTask(StatLocalPersistentCacheTaskRequest) returns (StatLocalPersistentCacheTaskResponse); + + // ListLocalPersistentCacheTasks lists local persistent cache tasks from peer. + rpc ListLocalPersistentCacheTasks(ListLocalPersistentCacheTasksRequest) returns (ListLocalPersistentCacheTasksResponse); } diff --git a/pkg/apis/dfdaemon/v2/dfdaemon_grpc.pb.go b/pkg/apis/dfdaemon/v2/dfdaemon_grpc.pb.go index 5e641a2..5702c64 100644 --- a/pkg/apis/dfdaemon/v2/dfdaemon_grpc.pb.go +++ b/pkg/apis/dfdaemon/v2/dfdaemon_grpc.pb.go @@ -1196,10 +1196,14 @@ type DfdaemonDownloadClient interface { StatTask(ctx context.Context, in *StatTaskRequest, opts ...grpc.CallOption) (*v2.Task, error) // StatLocalTask stats local task information from peer. StatLocalTask(ctx context.Context, in *StatLocalTaskRequest, opts ...grpc.CallOption) (*StatLocalTaskResponse, error) + // ListLocalTasks lists local tasks from peer. + ListLocalTasks(ctx context.Context, in *ListLocalTasksRequest, opts ...grpc.CallOption) (*ListLocalTasksResponse, error) // ListTaskEntries lists task entries for downloading directory. ListTaskEntries(ctx context.Context, in *ListTaskEntriesRequest, opts ...grpc.CallOption) (*ListTaskEntriesResponse, error) // DeleteTask deletes task from p2p network. DeleteTask(ctx context.Context, in *DeleteTaskRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + // DeleteLocalTask deletes local task from peer. + DeleteLocalTask(ctx context.Context, in *DeleteLocalTaskRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // DeleteHost releases host in scheduler. DeleteHost(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) // DownloadCacheTask downloads cache task from p2p network. @@ -1212,12 +1216,22 @@ type DfdaemonDownloadClient interface { DownloadPersistentTask(ctx context.Context, in *DownloadPersistentTaskRequest, opts ...grpc.CallOption) (DfdaemonDownload_DownloadPersistentTaskClient, error) // UploadPersistentTask uploads persistent task to p2p network. UploadPersistentTask(ctx context.Context, in *UploadPersistentTaskRequest, opts ...grpc.CallOption) (*v2.PersistentTask, error) + // StatPersistentTask stats persistent task information. + StatPersistentTask(ctx context.Context, in *StatPersistentTaskRequest, opts ...grpc.CallOption) (*v2.PersistentTask, error) + // StatLocalPersistentTask stats local persistent task information from peer. + StatLocalPersistentTask(ctx context.Context, in *StatLocalPersistentTaskRequest, opts ...grpc.CallOption) (*StatLocalPersistentTaskResponse, error) + // ListLocalPersistentTasks lists local persistent tasks from peer. + ListLocalPersistentTasks(ctx context.Context, in *ListLocalPersistentTasksRequest, opts ...grpc.CallOption) (*ListLocalPersistentTasksResponse, error) // DownloadPersistentCacheTask downloads persistent cache task from p2p network. DownloadPersistentCacheTask(ctx context.Context, in *DownloadPersistentCacheTaskRequest, opts ...grpc.CallOption) (DfdaemonDownload_DownloadPersistentCacheTaskClient, error) // UploadPersistentCacheTask uploads persistent cache task to p2p network. UploadPersistentCacheTask(ctx context.Context, in *UploadPersistentCacheTaskRequest, opts ...grpc.CallOption) (*v2.PersistentCacheTask, error) // StatPersistentCacheTask stats persistent cache task information. StatPersistentCacheTask(ctx context.Context, in *StatPersistentCacheTaskRequest, opts ...grpc.CallOption) (*v2.PersistentCacheTask, error) + // StatLocalPersistentCacheTask stats local persistent cache task information from peer. + StatLocalPersistentCacheTask(ctx context.Context, in *StatLocalPersistentCacheTaskRequest, opts ...grpc.CallOption) (*StatLocalPersistentCacheTaskResponse, error) + // ListLocalPersistentCacheTasks lists local persistent cache tasks from peer. + ListLocalPersistentCacheTasks(ctx context.Context, in *ListLocalPersistentCacheTasksRequest, opts ...grpc.CallOption) (*ListLocalPersistentCacheTasksResponse, error) } type dfdaemonDownloadClient struct { @@ -1278,6 +1292,15 @@ func (c *dfdaemonDownloadClient) StatLocalTask(ctx context.Context, in *StatLoca return out, nil } +func (c *dfdaemonDownloadClient) ListLocalTasks(ctx context.Context, in *ListLocalTasksRequest, opts ...grpc.CallOption) (*ListLocalTasksResponse, error) { + out := new(ListLocalTasksResponse) + err := c.cc.Invoke(ctx, "/dfdaemon.v2.DfdaemonDownload/ListLocalTasks", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *dfdaemonDownloadClient) ListTaskEntries(ctx context.Context, in *ListTaskEntriesRequest, opts ...grpc.CallOption) (*ListTaskEntriesResponse, error) { out := new(ListTaskEntriesResponse) err := c.cc.Invoke(ctx, "/dfdaemon.v2.DfdaemonDownload/ListTaskEntries", in, out, opts...) @@ -1296,6 +1319,15 @@ func (c *dfdaemonDownloadClient) DeleteTask(ctx context.Context, in *DeleteTaskR return out, nil } +func (c *dfdaemonDownloadClient) DeleteLocalTask(ctx context.Context, in *DeleteLocalTaskRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/dfdaemon.v2.DfdaemonDownload/DeleteLocalTask", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *dfdaemonDownloadClient) DeleteHost(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) { out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/dfdaemon.v2.DfdaemonDownload/DeleteHost", in, out, opts...) @@ -1396,6 +1428,33 @@ func (c *dfdaemonDownloadClient) UploadPersistentTask(ctx context.Context, in *U return out, nil } +func (c *dfdaemonDownloadClient) StatPersistentTask(ctx context.Context, in *StatPersistentTaskRequest, opts ...grpc.CallOption) (*v2.PersistentTask, error) { + out := new(v2.PersistentTask) + err := c.cc.Invoke(ctx, "/dfdaemon.v2.DfdaemonDownload/StatPersistentTask", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dfdaemonDownloadClient) StatLocalPersistentTask(ctx context.Context, in *StatLocalPersistentTaskRequest, opts ...grpc.CallOption) (*StatLocalPersistentTaskResponse, error) { + out := new(StatLocalPersistentTaskResponse) + err := c.cc.Invoke(ctx, "/dfdaemon.v2.DfdaemonDownload/StatLocalPersistentTask", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dfdaemonDownloadClient) ListLocalPersistentTasks(ctx context.Context, in *ListLocalPersistentTasksRequest, opts ...grpc.CallOption) (*ListLocalPersistentTasksResponse, error) { + out := new(ListLocalPersistentTasksResponse) + err := c.cc.Invoke(ctx, "/dfdaemon.v2.DfdaemonDownload/ListLocalPersistentTasks", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *dfdaemonDownloadClient) DownloadPersistentCacheTask(ctx context.Context, in *DownloadPersistentCacheTaskRequest, opts ...grpc.CallOption) (DfdaemonDownload_DownloadPersistentCacheTaskClient, error) { stream, err := c.cc.NewStream(ctx, &DfdaemonDownload_ServiceDesc.Streams[3], "/dfdaemon.v2.DfdaemonDownload/DownloadPersistentCacheTask", opts...) if err != nil { @@ -1446,6 +1505,24 @@ func (c *dfdaemonDownloadClient) StatPersistentCacheTask(ctx context.Context, in return out, nil } +func (c *dfdaemonDownloadClient) StatLocalPersistentCacheTask(ctx context.Context, in *StatLocalPersistentCacheTaskRequest, opts ...grpc.CallOption) (*StatLocalPersistentCacheTaskResponse, error) { + out := new(StatLocalPersistentCacheTaskResponse) + err := c.cc.Invoke(ctx, "/dfdaemon.v2.DfdaemonDownload/StatLocalPersistentCacheTask", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dfdaemonDownloadClient) ListLocalPersistentCacheTasks(ctx context.Context, in *ListLocalPersistentCacheTasksRequest, opts ...grpc.CallOption) (*ListLocalPersistentCacheTasksResponse, error) { + out := new(ListLocalPersistentCacheTasksResponse) + err := c.cc.Invoke(ctx, "/dfdaemon.v2.DfdaemonDownload/ListLocalPersistentCacheTasks", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // DfdaemonDownloadServer is the server API for DfdaemonDownload service. // All implementations should embed UnimplementedDfdaemonDownloadServer // for forward compatibility @@ -1456,10 +1533,14 @@ type DfdaemonDownloadServer interface { StatTask(context.Context, *StatTaskRequest) (*v2.Task, error) // StatLocalTask stats local task information from peer. StatLocalTask(context.Context, *StatLocalTaskRequest) (*StatLocalTaskResponse, error) + // ListLocalTasks lists local tasks from peer. + ListLocalTasks(context.Context, *ListLocalTasksRequest) (*ListLocalTasksResponse, error) // ListTaskEntries lists task entries for downloading directory. ListTaskEntries(context.Context, *ListTaskEntriesRequest) (*ListTaskEntriesResponse, error) // DeleteTask deletes task from p2p network. DeleteTask(context.Context, *DeleteTaskRequest) (*emptypb.Empty, error) + // DeleteLocalTask deletes local task from peer. + DeleteLocalTask(context.Context, *DeleteLocalTaskRequest) (*emptypb.Empty, error) // DeleteHost releases host in scheduler. DeleteHost(context.Context, *emptypb.Empty) (*emptypb.Empty, error) // DownloadCacheTask downloads cache task from p2p network. @@ -1472,12 +1553,22 @@ type DfdaemonDownloadServer interface { DownloadPersistentTask(*DownloadPersistentTaskRequest, DfdaemonDownload_DownloadPersistentTaskServer) error // UploadPersistentTask uploads persistent task to p2p network. UploadPersistentTask(context.Context, *UploadPersistentTaskRequest) (*v2.PersistentTask, error) + // StatPersistentTask stats persistent task information. + StatPersistentTask(context.Context, *StatPersistentTaskRequest) (*v2.PersistentTask, error) + // StatLocalPersistentTask stats local persistent task information from peer. + StatLocalPersistentTask(context.Context, *StatLocalPersistentTaskRequest) (*StatLocalPersistentTaskResponse, error) + // ListLocalPersistentTasks lists local persistent tasks from peer. + ListLocalPersistentTasks(context.Context, *ListLocalPersistentTasksRequest) (*ListLocalPersistentTasksResponse, error) // DownloadPersistentCacheTask downloads persistent cache task from p2p network. DownloadPersistentCacheTask(*DownloadPersistentCacheTaskRequest, DfdaemonDownload_DownloadPersistentCacheTaskServer) error // UploadPersistentCacheTask uploads persistent cache task to p2p network. UploadPersistentCacheTask(context.Context, *UploadPersistentCacheTaskRequest) (*v2.PersistentCacheTask, error) // StatPersistentCacheTask stats persistent cache task information. StatPersistentCacheTask(context.Context, *StatPersistentCacheTaskRequest) (*v2.PersistentCacheTask, error) + // StatLocalPersistentCacheTask stats local persistent cache task information from peer. + StatLocalPersistentCacheTask(context.Context, *StatLocalPersistentCacheTaskRequest) (*StatLocalPersistentCacheTaskResponse, error) + // ListLocalPersistentCacheTasks lists local persistent cache tasks from peer. + ListLocalPersistentCacheTasks(context.Context, *ListLocalPersistentCacheTasksRequest) (*ListLocalPersistentCacheTasksResponse, error) } // UnimplementedDfdaemonDownloadServer should be embedded to have forward compatible implementations. @@ -1493,12 +1584,18 @@ func (UnimplementedDfdaemonDownloadServer) StatTask(context.Context, *StatTaskRe func (UnimplementedDfdaemonDownloadServer) StatLocalTask(context.Context, *StatLocalTaskRequest) (*StatLocalTaskResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method StatLocalTask not implemented") } +func (UnimplementedDfdaemonDownloadServer) ListLocalTasks(context.Context, *ListLocalTasksRequest) (*ListLocalTasksResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListLocalTasks not implemented") +} func (UnimplementedDfdaemonDownloadServer) ListTaskEntries(context.Context, *ListTaskEntriesRequest) (*ListTaskEntriesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListTaskEntries not implemented") } func (UnimplementedDfdaemonDownloadServer) DeleteTask(context.Context, *DeleteTaskRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteTask not implemented") } +func (UnimplementedDfdaemonDownloadServer) DeleteLocalTask(context.Context, *DeleteLocalTaskRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteLocalTask not implemented") +} func (UnimplementedDfdaemonDownloadServer) DeleteHost(context.Context, *emptypb.Empty) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteHost not implemented") } @@ -1517,6 +1614,15 @@ func (UnimplementedDfdaemonDownloadServer) DownloadPersistentTask(*DownloadPersi func (UnimplementedDfdaemonDownloadServer) UploadPersistentTask(context.Context, *UploadPersistentTaskRequest) (*v2.PersistentTask, error) { return nil, status.Errorf(codes.Unimplemented, "method UploadPersistentTask not implemented") } +func (UnimplementedDfdaemonDownloadServer) StatPersistentTask(context.Context, *StatPersistentTaskRequest) (*v2.PersistentTask, error) { + return nil, status.Errorf(codes.Unimplemented, "method StatPersistentTask not implemented") +} +func (UnimplementedDfdaemonDownloadServer) StatLocalPersistentTask(context.Context, *StatLocalPersistentTaskRequest) (*StatLocalPersistentTaskResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StatLocalPersistentTask not implemented") +} +func (UnimplementedDfdaemonDownloadServer) ListLocalPersistentTasks(context.Context, *ListLocalPersistentTasksRequest) (*ListLocalPersistentTasksResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListLocalPersistentTasks not implemented") +} func (UnimplementedDfdaemonDownloadServer) DownloadPersistentCacheTask(*DownloadPersistentCacheTaskRequest, DfdaemonDownload_DownloadPersistentCacheTaskServer) error { return status.Errorf(codes.Unimplemented, "method DownloadPersistentCacheTask not implemented") } @@ -1526,6 +1632,12 @@ func (UnimplementedDfdaemonDownloadServer) UploadPersistentCacheTask(context.Con func (UnimplementedDfdaemonDownloadServer) StatPersistentCacheTask(context.Context, *StatPersistentCacheTaskRequest) (*v2.PersistentCacheTask, error) { return nil, status.Errorf(codes.Unimplemented, "method StatPersistentCacheTask not implemented") } +func (UnimplementedDfdaemonDownloadServer) StatLocalPersistentCacheTask(context.Context, *StatLocalPersistentCacheTaskRequest) (*StatLocalPersistentCacheTaskResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StatLocalPersistentCacheTask not implemented") +} +func (UnimplementedDfdaemonDownloadServer) ListLocalPersistentCacheTasks(context.Context, *ListLocalPersistentCacheTasksRequest) (*ListLocalPersistentCacheTasksResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListLocalPersistentCacheTasks not implemented") +} // UnsafeDfdaemonDownloadServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to DfdaemonDownloadServer will @@ -1595,6 +1707,24 @@ func _DfdaemonDownload_StatLocalTask_Handler(srv interface{}, ctx context.Contex return interceptor(ctx, in, info, handler) } +func _DfdaemonDownload_ListLocalTasks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListLocalTasksRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DfdaemonDownloadServer).ListLocalTasks(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/dfdaemon.v2.DfdaemonDownload/ListLocalTasks", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DfdaemonDownloadServer).ListLocalTasks(ctx, req.(*ListLocalTasksRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _DfdaemonDownload_ListTaskEntries_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ListTaskEntriesRequest) if err := dec(in); err != nil { @@ -1631,6 +1761,24 @@ func _DfdaemonDownload_DeleteTask_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _DfdaemonDownload_DeleteLocalTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteLocalTaskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DfdaemonDownloadServer).DeleteLocalTask(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/dfdaemon.v2.DfdaemonDownload/DeleteLocalTask", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DfdaemonDownloadServer).DeleteLocalTask(ctx, req.(*DeleteLocalTaskRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _DfdaemonDownload_DeleteHost_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(emptypb.Empty) if err := dec(in); err != nil { @@ -1745,6 +1893,60 @@ func _DfdaemonDownload_UploadPersistentTask_Handler(srv interface{}, ctx context return interceptor(ctx, in, info, handler) } +func _DfdaemonDownload_StatPersistentTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StatPersistentTaskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DfdaemonDownloadServer).StatPersistentTask(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/dfdaemon.v2.DfdaemonDownload/StatPersistentTask", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DfdaemonDownloadServer).StatPersistentTask(ctx, req.(*StatPersistentTaskRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DfdaemonDownload_StatLocalPersistentTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StatLocalPersistentTaskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DfdaemonDownloadServer).StatLocalPersistentTask(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/dfdaemon.v2.DfdaemonDownload/StatLocalPersistentTask", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DfdaemonDownloadServer).StatLocalPersistentTask(ctx, req.(*StatLocalPersistentTaskRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DfdaemonDownload_ListLocalPersistentTasks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListLocalPersistentTasksRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DfdaemonDownloadServer).ListLocalPersistentTasks(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/dfdaemon.v2.DfdaemonDownload/ListLocalPersistentTasks", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DfdaemonDownloadServer).ListLocalPersistentTasks(ctx, req.(*ListLocalPersistentTasksRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _DfdaemonDownload_DownloadPersistentCacheTask_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(DownloadPersistentCacheTaskRequest) if err := stream.RecvMsg(m); err != nil { @@ -1802,6 +2004,42 @@ func _DfdaemonDownload_StatPersistentCacheTask_Handler(srv interface{}, ctx cont return interceptor(ctx, in, info, handler) } +func _DfdaemonDownload_StatLocalPersistentCacheTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StatLocalPersistentCacheTaskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DfdaemonDownloadServer).StatLocalPersistentCacheTask(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/dfdaemon.v2.DfdaemonDownload/StatLocalPersistentCacheTask", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DfdaemonDownloadServer).StatLocalPersistentCacheTask(ctx, req.(*StatLocalPersistentCacheTaskRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DfdaemonDownload_ListLocalPersistentCacheTasks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListLocalPersistentCacheTasksRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DfdaemonDownloadServer).ListLocalPersistentCacheTasks(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/dfdaemon.v2.DfdaemonDownload/ListLocalPersistentCacheTasks", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DfdaemonDownloadServer).ListLocalPersistentCacheTasks(ctx, req.(*ListLocalPersistentCacheTasksRequest)) + } + return interceptor(ctx, in, info, handler) +} + // DfdaemonDownload_ServiceDesc is the grpc.ServiceDesc for DfdaemonDownload service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -1817,6 +2055,10 @@ var DfdaemonDownload_ServiceDesc = grpc.ServiceDesc{ MethodName: "StatLocalTask", Handler: _DfdaemonDownload_StatLocalTask_Handler, }, + { + MethodName: "ListLocalTasks", + Handler: _DfdaemonDownload_ListLocalTasks_Handler, + }, { MethodName: "ListTaskEntries", Handler: _DfdaemonDownload_ListTaskEntries_Handler, @@ -1825,6 +2067,10 @@ var DfdaemonDownload_ServiceDesc = grpc.ServiceDesc{ MethodName: "DeleteTask", Handler: _DfdaemonDownload_DeleteTask_Handler, }, + { + MethodName: "DeleteLocalTask", + Handler: _DfdaemonDownload_DeleteLocalTask_Handler, + }, { MethodName: "DeleteHost", Handler: _DfdaemonDownload_DeleteHost_Handler, @@ -1841,6 +2087,18 @@ var DfdaemonDownload_ServiceDesc = grpc.ServiceDesc{ MethodName: "UploadPersistentTask", Handler: _DfdaemonDownload_UploadPersistentTask_Handler, }, + { + MethodName: "StatPersistentTask", + Handler: _DfdaemonDownload_StatPersistentTask_Handler, + }, + { + MethodName: "StatLocalPersistentTask", + Handler: _DfdaemonDownload_StatLocalPersistentTask_Handler, + }, + { + MethodName: "ListLocalPersistentTasks", + Handler: _DfdaemonDownload_ListLocalPersistentTasks_Handler, + }, { MethodName: "UploadPersistentCacheTask", Handler: _DfdaemonDownload_UploadPersistentCacheTask_Handler, @@ -1849,6 +2107,14 @@ var DfdaemonDownload_ServiceDesc = grpc.ServiceDesc{ MethodName: "StatPersistentCacheTask", Handler: _DfdaemonDownload_StatPersistentCacheTask_Handler, }, + { + MethodName: "StatLocalPersistentCacheTask", + Handler: _DfdaemonDownload_StatLocalPersistentCacheTask_Handler, + }, + { + MethodName: "ListLocalPersistentCacheTasks", + Handler: _DfdaemonDownload_ListLocalPersistentCacheTasks_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/pkg/apis/dfdaemon/v2/mocks/dfdaemon_mock.go b/pkg/apis/dfdaemon/v2/mocks/dfdaemon_mock.go index c93b971..92415e9 100644 --- a/pkg/apis/dfdaemon/v2/mocks/dfdaemon_mock.go +++ b/pkg/apis/dfdaemon/v2/mocks/dfdaemon_mock.go @@ -3161,6 +3161,26 @@ func (mr *MockDfdaemonDownloadClientMockRecorder) DeleteHost(ctx, in any, opts . return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteHost", reflect.TypeOf((*MockDfdaemonDownloadClient)(nil).DeleteHost), varargs...) } +// DeleteLocalTask mocks base method. +func (m *MockDfdaemonDownloadClient) DeleteLocalTask(ctx context.Context, in *dfdaemon.DeleteLocalTaskRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "DeleteLocalTask", varargs...) + ret0, _ := ret[0].(*emptypb.Empty) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DeleteLocalTask indicates an expected call of DeleteLocalTask. +func (mr *MockDfdaemonDownloadClientMockRecorder) DeleteLocalTask(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteLocalTask", reflect.TypeOf((*MockDfdaemonDownloadClient)(nil).DeleteLocalTask), varargs...) +} + // DeleteTask mocks base method. func (m *MockDfdaemonDownloadClient) DeleteTask(ctx context.Context, in *dfdaemon.DeleteTaskRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { m.ctrl.T.Helper() @@ -3261,6 +3281,66 @@ func (mr *MockDfdaemonDownloadClientMockRecorder) DownloadTask(ctx, in any, opts return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownloadTask", reflect.TypeOf((*MockDfdaemonDownloadClient)(nil).DownloadTask), varargs...) } +// ListLocalPersistentCacheTasks mocks base method. +func (m *MockDfdaemonDownloadClient) ListLocalPersistentCacheTasks(ctx context.Context, in *dfdaemon.ListLocalPersistentCacheTasksRequest, opts ...grpc.CallOption) (*dfdaemon.ListLocalPersistentCacheTasksResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ListLocalPersistentCacheTasks", varargs...) + ret0, _ := ret[0].(*dfdaemon.ListLocalPersistentCacheTasksResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListLocalPersistentCacheTasks indicates an expected call of ListLocalPersistentCacheTasks. +func (mr *MockDfdaemonDownloadClientMockRecorder) ListLocalPersistentCacheTasks(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListLocalPersistentCacheTasks", reflect.TypeOf((*MockDfdaemonDownloadClient)(nil).ListLocalPersistentCacheTasks), varargs...) +} + +// ListLocalPersistentTasks mocks base method. +func (m *MockDfdaemonDownloadClient) ListLocalPersistentTasks(ctx context.Context, in *dfdaemon.ListLocalPersistentTasksRequest, opts ...grpc.CallOption) (*dfdaemon.ListLocalPersistentTasksResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ListLocalPersistentTasks", varargs...) + ret0, _ := ret[0].(*dfdaemon.ListLocalPersistentTasksResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListLocalPersistentTasks indicates an expected call of ListLocalPersistentTasks. +func (mr *MockDfdaemonDownloadClientMockRecorder) ListLocalPersistentTasks(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListLocalPersistentTasks", reflect.TypeOf((*MockDfdaemonDownloadClient)(nil).ListLocalPersistentTasks), varargs...) +} + +// ListLocalTasks mocks base method. +func (m *MockDfdaemonDownloadClient) ListLocalTasks(ctx context.Context, in *dfdaemon.ListLocalTasksRequest, opts ...grpc.CallOption) (*dfdaemon.ListLocalTasksResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ListLocalTasks", varargs...) + ret0, _ := ret[0].(*dfdaemon.ListLocalTasksResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListLocalTasks indicates an expected call of ListLocalTasks. +func (mr *MockDfdaemonDownloadClientMockRecorder) ListLocalTasks(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListLocalTasks", reflect.TypeOf((*MockDfdaemonDownloadClient)(nil).ListLocalTasks), varargs...) +} + // ListTaskEntries mocks base method. func (m *MockDfdaemonDownloadClient) ListTaskEntries(ctx context.Context, in *dfdaemon.ListTaskEntriesRequest, opts ...grpc.CallOption) (*dfdaemon.ListTaskEntriesResponse, error) { m.ctrl.T.Helper() @@ -3301,6 +3381,46 @@ func (mr *MockDfdaemonDownloadClientMockRecorder) StatCacheTask(ctx, in any, opt return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StatCacheTask", reflect.TypeOf((*MockDfdaemonDownloadClient)(nil).StatCacheTask), varargs...) } +// StatLocalPersistentCacheTask mocks base method. +func (m *MockDfdaemonDownloadClient) StatLocalPersistentCacheTask(ctx context.Context, in *dfdaemon.StatLocalPersistentCacheTaskRequest, opts ...grpc.CallOption) (*dfdaemon.StatLocalPersistentCacheTaskResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "StatLocalPersistentCacheTask", varargs...) + ret0, _ := ret[0].(*dfdaemon.StatLocalPersistentCacheTaskResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StatLocalPersistentCacheTask indicates an expected call of StatLocalPersistentCacheTask. +func (mr *MockDfdaemonDownloadClientMockRecorder) StatLocalPersistentCacheTask(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StatLocalPersistentCacheTask", reflect.TypeOf((*MockDfdaemonDownloadClient)(nil).StatLocalPersistentCacheTask), varargs...) +} + +// StatLocalPersistentTask mocks base method. +func (m *MockDfdaemonDownloadClient) StatLocalPersistentTask(ctx context.Context, in *dfdaemon.StatLocalPersistentTaskRequest, opts ...grpc.CallOption) (*dfdaemon.StatLocalPersistentTaskResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "StatLocalPersistentTask", varargs...) + ret0, _ := ret[0].(*dfdaemon.StatLocalPersistentTaskResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StatLocalPersistentTask indicates an expected call of StatLocalPersistentTask. +func (mr *MockDfdaemonDownloadClientMockRecorder) StatLocalPersistentTask(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StatLocalPersistentTask", reflect.TypeOf((*MockDfdaemonDownloadClient)(nil).StatLocalPersistentTask), varargs...) +} + // StatLocalTask mocks base method. func (m *MockDfdaemonDownloadClient) StatLocalTask(ctx context.Context, in *dfdaemon.StatLocalTaskRequest, opts ...grpc.CallOption) (*dfdaemon.StatLocalTaskResponse, error) { m.ctrl.T.Helper() @@ -3341,6 +3461,26 @@ func (mr *MockDfdaemonDownloadClientMockRecorder) StatPersistentCacheTask(ctx, i return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StatPersistentCacheTask", reflect.TypeOf((*MockDfdaemonDownloadClient)(nil).StatPersistentCacheTask), varargs...) } +// StatPersistentTask mocks base method. +func (m *MockDfdaemonDownloadClient) StatPersistentTask(ctx context.Context, in *dfdaemon.StatPersistentTaskRequest, opts ...grpc.CallOption) (*common.PersistentTask, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "StatPersistentTask", varargs...) + ret0, _ := ret[0].(*common.PersistentTask) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StatPersistentTask indicates an expected call of StatPersistentTask. +func (mr *MockDfdaemonDownloadClientMockRecorder) StatPersistentTask(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StatPersistentTask", reflect.TypeOf((*MockDfdaemonDownloadClient)(nil).StatPersistentTask), varargs...) +} + // StatTask mocks base method. func (m *MockDfdaemonDownloadClient) StatTask(ctx context.Context, in *dfdaemon.StatTaskRequest, opts ...grpc.CallOption) (*common.Task, error) { m.ctrl.T.Helper() @@ -3951,6 +4091,21 @@ func (mr *MockDfdaemonDownloadServerMockRecorder) DeleteHost(arg0, arg1 any) *go return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteHost", reflect.TypeOf((*MockDfdaemonDownloadServer)(nil).DeleteHost), arg0, arg1) } +// DeleteLocalTask mocks base method. +func (m *MockDfdaemonDownloadServer) DeleteLocalTask(arg0 context.Context, arg1 *dfdaemon.DeleteLocalTaskRequest) (*emptypb.Empty, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteLocalTask", arg0, arg1) + ret0, _ := ret[0].(*emptypb.Empty) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DeleteLocalTask indicates an expected call of DeleteLocalTask. +func (mr *MockDfdaemonDownloadServerMockRecorder) DeleteLocalTask(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteLocalTask", reflect.TypeOf((*MockDfdaemonDownloadServer)(nil).DeleteLocalTask), arg0, arg1) +} + // DeleteTask mocks base method. func (m *MockDfdaemonDownloadServer) DeleteTask(arg0 context.Context, arg1 *dfdaemon.DeleteTaskRequest) (*emptypb.Empty, error) { m.ctrl.T.Helper() @@ -4022,6 +4177,51 @@ func (mr *MockDfdaemonDownloadServerMockRecorder) DownloadTask(arg0, arg1 any) * return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownloadTask", reflect.TypeOf((*MockDfdaemonDownloadServer)(nil).DownloadTask), arg0, arg1) } +// ListLocalPersistentCacheTasks mocks base method. +func (m *MockDfdaemonDownloadServer) ListLocalPersistentCacheTasks(arg0 context.Context, arg1 *dfdaemon.ListLocalPersistentCacheTasksRequest) (*dfdaemon.ListLocalPersistentCacheTasksResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListLocalPersistentCacheTasks", arg0, arg1) + ret0, _ := ret[0].(*dfdaemon.ListLocalPersistentCacheTasksResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListLocalPersistentCacheTasks indicates an expected call of ListLocalPersistentCacheTasks. +func (mr *MockDfdaemonDownloadServerMockRecorder) ListLocalPersistentCacheTasks(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListLocalPersistentCacheTasks", reflect.TypeOf((*MockDfdaemonDownloadServer)(nil).ListLocalPersistentCacheTasks), arg0, arg1) +} + +// ListLocalPersistentTasks mocks base method. +func (m *MockDfdaemonDownloadServer) ListLocalPersistentTasks(arg0 context.Context, arg1 *dfdaemon.ListLocalPersistentTasksRequest) (*dfdaemon.ListLocalPersistentTasksResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListLocalPersistentTasks", arg0, arg1) + ret0, _ := ret[0].(*dfdaemon.ListLocalPersistentTasksResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListLocalPersistentTasks indicates an expected call of ListLocalPersistentTasks. +func (mr *MockDfdaemonDownloadServerMockRecorder) ListLocalPersistentTasks(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListLocalPersistentTasks", reflect.TypeOf((*MockDfdaemonDownloadServer)(nil).ListLocalPersistentTasks), arg0, arg1) +} + +// ListLocalTasks mocks base method. +func (m *MockDfdaemonDownloadServer) ListLocalTasks(arg0 context.Context, arg1 *dfdaemon.ListLocalTasksRequest) (*dfdaemon.ListLocalTasksResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListLocalTasks", arg0, arg1) + ret0, _ := ret[0].(*dfdaemon.ListLocalTasksResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListLocalTasks indicates an expected call of ListLocalTasks. +func (mr *MockDfdaemonDownloadServerMockRecorder) ListLocalTasks(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListLocalTasks", reflect.TypeOf((*MockDfdaemonDownloadServer)(nil).ListLocalTasks), arg0, arg1) +} + // ListTaskEntries mocks base method. func (m *MockDfdaemonDownloadServer) ListTaskEntries(arg0 context.Context, arg1 *dfdaemon.ListTaskEntriesRequest) (*dfdaemon.ListTaskEntriesResponse, error) { m.ctrl.T.Helper() @@ -4052,6 +4252,36 @@ func (mr *MockDfdaemonDownloadServerMockRecorder) StatCacheTask(arg0, arg1 any) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StatCacheTask", reflect.TypeOf((*MockDfdaemonDownloadServer)(nil).StatCacheTask), arg0, arg1) } +// StatLocalPersistentCacheTask mocks base method. +func (m *MockDfdaemonDownloadServer) StatLocalPersistentCacheTask(arg0 context.Context, arg1 *dfdaemon.StatLocalPersistentCacheTaskRequest) (*dfdaemon.StatLocalPersistentCacheTaskResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StatLocalPersistentCacheTask", arg0, arg1) + ret0, _ := ret[0].(*dfdaemon.StatLocalPersistentCacheTaskResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StatLocalPersistentCacheTask indicates an expected call of StatLocalPersistentCacheTask. +func (mr *MockDfdaemonDownloadServerMockRecorder) StatLocalPersistentCacheTask(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StatLocalPersistentCacheTask", reflect.TypeOf((*MockDfdaemonDownloadServer)(nil).StatLocalPersistentCacheTask), arg0, arg1) +} + +// StatLocalPersistentTask mocks base method. +func (m *MockDfdaemonDownloadServer) StatLocalPersistentTask(arg0 context.Context, arg1 *dfdaemon.StatLocalPersistentTaskRequest) (*dfdaemon.StatLocalPersistentTaskResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StatLocalPersistentTask", arg0, arg1) + ret0, _ := ret[0].(*dfdaemon.StatLocalPersistentTaskResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StatLocalPersistentTask indicates an expected call of StatLocalPersistentTask. +func (mr *MockDfdaemonDownloadServerMockRecorder) StatLocalPersistentTask(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StatLocalPersistentTask", reflect.TypeOf((*MockDfdaemonDownloadServer)(nil).StatLocalPersistentTask), arg0, arg1) +} + // StatLocalTask mocks base method. func (m *MockDfdaemonDownloadServer) StatLocalTask(arg0 context.Context, arg1 *dfdaemon.StatLocalTaskRequest) (*dfdaemon.StatLocalTaskResponse, error) { m.ctrl.T.Helper() @@ -4082,6 +4312,21 @@ func (mr *MockDfdaemonDownloadServerMockRecorder) StatPersistentCacheTask(arg0, return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StatPersistentCacheTask", reflect.TypeOf((*MockDfdaemonDownloadServer)(nil).StatPersistentCacheTask), arg0, arg1) } +// StatPersistentTask mocks base method. +func (m *MockDfdaemonDownloadServer) StatPersistentTask(arg0 context.Context, arg1 *dfdaemon.StatPersistentTaskRequest) (*common.PersistentTask, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StatPersistentTask", arg0, arg1) + ret0, _ := ret[0].(*common.PersistentTask) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StatPersistentTask indicates an expected call of StatPersistentTask. +func (mr *MockDfdaemonDownloadServerMockRecorder) StatPersistentTask(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StatPersistentTask", reflect.TypeOf((*MockDfdaemonDownloadServer)(nil).StatPersistentTask), arg0, arg1) +} + // StatTask mocks base method. func (m *MockDfdaemonDownloadServer) StatTask(arg0 context.Context, arg1 *dfdaemon.StatTaskRequest) (*common.Task, error) { m.ctrl.T.Helper() diff --git a/proto/dfdaemon.proto b/proto/dfdaemon.proto index 54580c8..0081e7f 100644 --- a/proto/dfdaemon.proto +++ b/proto/dfdaemon.proto @@ -142,6 +142,15 @@ message StatLocalTaskResponse { optional google.protobuf.Timestamp finished_at = 11; } +// ListLocalTasksRequest represents request of ListLocalTasks. +message ListLocalTasksRequest {} + +// ListLocalTasksResponse represents response of ListLocalTasks. +message ListLocalTasksResponse { + // Task ids of the local tasks. + repeated StatLocalTaskResponse tasks = 1; +} + // ListTaskEntriesRequest represents request of ListTaskEntries. message ListTaskEntriesRequest { // Task id. @@ -196,6 +205,14 @@ message DeleteTaskRequest { optional string remote_ip = 2; } +// DeleteLocalTaskRequest represents request of DeleteLocalTask. +message DeleteLocalTaskRequest { + // Task id. + string task_id = 1; + // Remote IP represents the IP address of the client initiating the delete request. + optional string remote_ip = 2; +} + // DownloadCacheTaskRequest represents request of DownloadCacheTask. message DownloadCacheTaskRequest { // Download url. @@ -449,6 +466,51 @@ message StatPersistentTaskRequest { optional string remote_ip = 2; } +// StatLocalPersistentTaskRequest represents request of StatLocalPersistentTask. +message StatLocalPersistentTaskRequest { + // Task id. + string task_id = 1; + // Remote IP represents the IP address of the client initiating the stat request. + optional string remote_ip = 2; +} + +// StatLocalPersistentTaskResponse represents response of StatLocalPersistentTask. +message StatLocalPersistentTaskResponse { + // Task id. + string task_id = 1; + // Persistent represents whether the persistent task is persistent. + // If the persistent task is persistent, the persistent peer will + // not be deleted when dfdamon runs garbage collection. + bool persistent = 2; + // TTL of the persistent task. + google.protobuf.Duration ttl = 3; + // Task piece length. + optional uint64 piece_length = 4; + // Task content length. + optional uint64 content_length = 5; + // Uploading count is the count of the persistent task being uploaded by other peers. + uint64 uploading_count = 6; + // Uploaded count is the count of the persistent task has been uploaded by other peers. + uint64 uploaded_count = 7; + // Task create time. + google.protobuf.Timestamp created_at = 8; + // Task update time. + google.protobuf.Timestamp updated_at = 9; + // Task fail time. + optional google.protobuf.Timestamp failed_at = 10; + // Task finish time. + optional google.protobuf.Timestamp finished_at = 11; +} + +// ListLocalPersistentTasksRequest represents request of ListLocalPersistentTasks. +message ListLocalPersistentTasksRequest {} + +// ListLocalPersistentTasksResponse represents response of ListLocalPersistentTasks. +message ListLocalPersistentTasksResponse { + // Task ids of the local tasks. + repeated StatLocalPersistentTaskResponse tasks = 1; +} + // DeletePersistentTaskRequest represents request of DeletePersistentTask. message DeletePersistentTaskRequest { // Task id. @@ -587,6 +649,51 @@ message StatPersistentCacheTaskRequest { optional string remote_ip = 2; } +// StatLocalPersistentCacheTaskRequest represents request of StatLocalPersistentCacheTask. +message StatLocalPersistentCacheTaskRequest { + // Task id. + string task_id = 1; + // Remote IP represents the IP address of the client initiating the stat request. + optional string remote_ip = 2; +} + +// StatLocalPersistentTaskResponse represents response of StatLocalPersistentTask. +message StatLocalPersistentCacheTaskResponse { + // Task id. + string task_id = 1; + // Persistent represents whether the persistent cache task is persistent. + // If the persistent cache task is persistent, the persistent cache peer will + // not be deleted when dfdamon runs garbage collection. + bool persistent = 2; + // TTL of the persistent task. + google.protobuf.Duration ttl = 3; + // Task piece length. + optional uint64 piece_length = 4; + // Task content length. + optional uint64 content_length = 5; + // Uploading count is the count of the persistent cache task being uploaded by other peers. + uint64 uploading_count = 6; + // Uploaded count is the count of the persistent cache task has been uploaded by other peers. + uint64 uploaded_count = 7; + // Task create time. + google.protobuf.Timestamp created_at = 8; + // Task update time. + google.protobuf.Timestamp updated_at = 9; + // Task fail time. + optional google.protobuf.Timestamp failed_at = 10; + // Task finish time. + optional google.protobuf.Timestamp finished_at = 11; +} + +// ListLocalPersistentCacheTasksRequest represents request of ListLocalPersistentCacheTasks. +message ListLocalPersistentCacheTasksRequest {} + +// ListLocalPersistentTasksResponse represents response of ListLocalPersistentTasks. +message ListLocalPersistentCacheTasksResponse { + // Task ids of the local tasks. + repeated StatLocalPersistentCacheTaskResponse tasks = 1; +} + // DeletePersistentCacheTaskRequest represents request of DeletePersistentCacheTask. message DeletePersistentCacheTaskRequest { // Task id. @@ -735,12 +842,18 @@ service DfdaemonDownload { // StatLocalTask stats local task information from peer. rpc StatLocalTask(StatLocalTaskRequest) returns (StatLocalTaskResponse); + // ListLocalTasks lists local tasks from peer. + rpc ListLocalTasks(ListLocalTasksRequest) returns (ListLocalTasksResponse); + // ListTaskEntries lists task entries for downloading directory. rpc ListTaskEntries(ListTaskEntriesRequest) returns (ListTaskEntriesResponse); // DeleteTask deletes task from p2p network. rpc DeleteTask(DeleteTaskRequest) returns (google.protobuf.Empty); + // DeleteLocalTask deletes local task from peer. + rpc DeleteLocalTask(DeleteLocalTaskRequest) returns (google.protobuf.Empty); + // DeleteHost releases host in scheduler. rpc DeleteHost(google.protobuf.Empty) returns (google.protobuf.Empty); @@ -759,6 +872,15 @@ service DfdaemonDownload { // UploadPersistentTask uploads persistent task to p2p network. rpc UploadPersistentTask(UploadPersistentTaskRequest) returns (common.v2.PersistentTask); + // StatPersistentTask stats persistent task information. + rpc StatPersistentTask(StatPersistentTaskRequest) returns (common.v2.PersistentTask); + + // StatLocalPersistentTask stats local persistent task information from peer. + rpc StatLocalPersistentTask(StatLocalPersistentTaskRequest) returns (StatLocalPersistentTaskResponse); + + // ListLocalPersistentTasks lists local persistent tasks from peer. + rpc ListLocalPersistentTasks(ListLocalPersistentTasksRequest) returns (ListLocalPersistentTasksResponse); + // DownloadPersistentCacheTask downloads persistent cache task from p2p network. rpc DownloadPersistentCacheTask(DownloadPersistentCacheTaskRequest) returns (stream DownloadPersistentCacheTaskResponse); @@ -767,4 +889,10 @@ service DfdaemonDownload { // StatPersistentCacheTask stats persistent cache task information. rpc StatPersistentCacheTask(StatPersistentCacheTaskRequest) returns (common.v2.PersistentCacheTask); + + // StatLocalPersistentCacheTask stats local persistent cache task information from peer. + rpc StatLocalPersistentCacheTask(StatLocalPersistentCacheTaskRequest) returns (StatLocalPersistentCacheTaskResponse); + + // ListLocalPersistentCacheTasks lists local persistent cache tasks from peer. + rpc ListLocalPersistentCacheTasks(ListLocalPersistentCacheTasksRequest) returns (ListLocalPersistentCacheTasksResponse); } diff --git a/src/descriptor.bin b/src/descriptor.bin index 975c0126f0c4b7759d87224739d3264e4ae9f4e6..190863ea881ecc59c22875ecd8fe1cec0c1d93c8 100644 GIT binary patch delta 18612 zcmd6Pd3+W{w)R`q-Ib&hNYZ%|k~bl|WFssI*+9?%*+E4ZK;^oF5)?&1iF4IEzhMys zw+IGPz=aqP0TIN7B?590QIwGZ83u*R2qGwg0&(LaD&KRetJ3H=_nYs(@1OkodFz~~ z&Z(|Cb?S6?-d>UL+{uKOcOU2Hx4gFJc=NbkE!@_Vab-VdUH?2?Q*vhI( zMJtC0mM`B(WF@c7{eDhT!WcJuSk*|sOZn6tELHB#+R$3A6JzwYCbsKhQ-vJJDpQA zw=}nAa%p2&2eAJy2e8y1z^%DFGtLa)-SU%s49d%STr`c$`Wuqi6Y>1QY(UvTU%hGgqeOi^Pm~pP?UzFDOVJdSo`^Z;Y^E6o!Vb1#3Td^)I!F!mwSr<*fRPL2D-Jw+3F@p&f z+_J3rN0{64;v3y!qF4G`cBtu*ZKg-0?4Qb{HqDePU)sps7|%%xO^JCe>AD;E`r)~3 zL~`a8F1O=6do~M2Bi(`pOG74G?`OG}1W~fsb>m&jj$3h4LI0o9%XRZQJD`&#q;>eIz?d9Y)8Dniw5FI$CvSWppeB=V%qhT=d(_ zbx7J);!RKxjE|aDP}j271qNE4om9)(wo`V-dtyEdt(IFW*nn_6BI8QBm+UZfTe`pBBhDOIytHnYYRmN#kxQdK^HJCK`SyS*0IDS zw~JEbo?S1ubYc~g;yH&K^^B)#Ne;z&mX>EA6zf@=Lbs(-1X|2^NhDE?cC>2DJ(c6{ zuhJtF&n=7)+Wip%1odJTpR2hnP%mbA?F|H3crh#P=-#Wip}U0fHj&$9{RjMNxwkXR z>=n;#|7SyK!_6fu-VBHh$|Wp0M^oCMT*C4T+zQ1A*`>1d5?0bTo;%=K8kpw5w52TG zC_3O-%5qCJj{}~itfG_KPVqo?IpewVlkq&acRUxM0yZWI)f}Ipbp@!Fvq-jqpjysa z=eV~hsu<5+!Q}3H*!8d}21F|Yq8Qk_g2g9m%@`1^U|yzyAX>q)Te+o*DAu!AGG11* z>Cf%J6bmLmV^SF?R~%tk@{O*{OG$v* zt1Pya+Xp=+(2QRrk91`{%5e>+*O++=2+1`pu7&Ck5FM;xkxVsj6KHO(lh zXu0PoJ~VD+JS!584jc1OwC}}03Pf$9sq)9ukip-$!ZS(L9~}V7y=KHJn<0=&5^CUvw5n;|8mamNB^Lr(!^>;WRqCMy^i;t)|gH{k7W|{uZ3J9XZ zEH}@MC?23Ava|ww0rS z0ko|g4LqT3)`z{r`X<3Spn%B*)7gNDGP<+D5W8SH%c40dk|yzZ&pwB}O?G>T zMKJB+K?Uq@Zh&y^oXJlBL3PgLCxDM|B1zzdEX3*Ke3jr+y|6mbI-oOcwyu& zKOs8NpXFd+o5KhEYs$&D zL=W?d&MKEm;>n&poy!qduzV0DgJ^m{lnkQjTxU{f1<`b_Gbun2P3M>-lu0FV%>Ef% zzIz3`9=>?+Wk%qO2hABg#?!ud(44_jTj(2-;@OY#npd`tfno|29}N^!p!g_{F##k6 zijVTFY+S zj2twOeFmab5X}yVQb9C3AW8+%Y_0=7gh4c$XGh%|)F`BRb`6(3MzL$*Od2$60%y{o zS;J%eTp6vg(DK?r?7G~jsE#AT7bqU= z6pQ4R!7K+B(AKbs>*EO^6c=%w<^e)+5l5O=s1$*ga9LQuTB$rQS>SgxfUda4I4m6Mn1&}02rN3##2CuZZe(%f^(A@ofH~|&HlKS13+_gph@GpInbnW-AtNv z)JWkN*DZ48FqS_M*YIkKnSOxa*Wyp6rGsWJ0m9&eW-bAeDA&0+Ab1XPjls;5=dm0T7}`%;*7v^9YR|?Y}L^wxgUX8U5sq<5@}{ z`~nM)8VdozcGOr1s1)=*1_-vJTpzvCJ#n0ezT$G#4BkJS4$0$Y5vP-hCzOe)Wn|z9 zV<1`}c)}P62+9*=APrtR8Tchv$HM*qu`a8b<)~Wa`=YA4`U)9f%LKP+ep>vkE@8G^mn{Ecp z;`4IlO>A2QuHn{svrPd)^E{97=Nce1&+~AqyOpx+41$x_U-|&s%z6P}fF@fyrvn7j zWJ_l=fMA+z>4OX)saiOCv{pn=ohmPVh_wU{9jvAXJQT>MTDk;?R`5)AnT{ec@MF>F2OYcOJ}EmP@HDz#0(IM(=43qX8Oa8US?Q4vu4O!UF5+L?7dDI zTz~+-`ROen2xeF@X?hfKdIHRdxHJ8+z~QOdT0h~B>|xeBL!F+g11IS8R2>Wkot~;K zz1AQMs%i^s?Kb5EPEWHeS${jb8KXgUxmf{GEQn?WM0A>(W$9@LVGzx-FzqO{%b?TL z)AI6B?7FVFhT_wKGjx1<+R~XFTA}!~h0G3*0k|FUM6DH?hY4Fn6SjqnS}ajMHHr10 zxhmwXE%2vDC5s71KvQeQ7OBK9LUVSmC7&FGtpor)&b4&r2ME!*md^YD(c@eTaq4Dt znCXcHR%p3=sgnI$N+tvsSg{2vzGM<-og8^D3zy>>ly!y@5R!G4PHX@{S!ZGOQeu-y zQ@37@7|p_ya1F)!K#>+ieV|ASqCQZ>dRT1n)QIb!s>h7dHM2~$I?&`-xBx-3IG~~B zu$X8l)ybq(XNkp^S=J;qWAFpSmsmR2$t3CLE&Jd6MwROTwlxs4&s*(=8K{J>8?MqM zJa#$`wcqG+e*l3l}D z(0b8|&Go}i77hE$>rdRldb4r>4ByMfZ$QYtZ0Q&T2;*M1bPUR(L3ve<7{f}SNJ;yv zmJURK)Mn{G1PH}fEd(NZrjSK(XpMYp46A@5t>iU9k3_o0it|f?Xocb$3njrGN)c$C zY{P3OnnpIDc%=N}?7L^!7>-cxCZ4`GeUrn+-fE#q`zA@~6Xeqam)1lb41 zKtPf=1_FZY12T|8S1V8a%?certQ;I|dfH1*c00(!IDa^*;wu{~S!zlv(EQB=wpL{Q zhst`H^am!2J~YOo1%e+M;{nm%hsO9;Wc>cX_`&!A#_u=A1H$`=JT0AY%AYZwOEvUI?R+ikgoQn#yfCo+fjti(H^#lV1&!;rOXz@mA zf*tc0FEnW(9W#p;5Squ#;su1}F+^QA1mCVN)AJbWYG6UZ-Pd0o)#xBI&fAh=FiaelEJ5L_oIiJ)R*l*Z#L z3r}pWlT)A_aIGj~Z7^OGSI};_D6V{EHfOYg>nqxvDcD6(rm#<2HHWIRI^!C|r;#YB zjR_Enr>(341EF}@!Xs;65t&S*#oO1EJ{6f1Rh3{sqe{6;W1vd8OCzbaQhg$K`NrZE zk!1hD`sk5k@Gu<@i}hX{Rpntwn1QCpjNe%CeysqlApge7FV=R&S(6BtmTSXM9{$ea zo$-83J+}AX5c(xQ6^$Wd_+9XS7w}Wj_&Y1#KY2$v6^*~M$~&o$&>B@=E7T5a>Y`UU z5-xtlNWGYFl?n~NdV51Z7itaqbF|h*VwL82;zuiV0jqS_#f-lo3|?0FZNeN7{%D~> zN3Sj9(Bl2s;+_7b*A^g+p@6tQ6o43tpRM?IYHR^P{j=4+#EsBm0>)VUY@rH4n^LYP zrrMzya@j?=6(P_3$?Et|!%|-~JT{D+f_anAC znDqgGb&uHEIzSLTV(W7Uppw-YG9ZW^vGtCb=ZVMc&}>`&G=U9C$%Eu$#=1PR?g^Rv zGz(YY8k|oU;{YM~gfR{foKKK(wAbd5an-(COhmMsU}S-{NzzYnLEFTPW?ASb21Ij0FYwgJ+sX+Hvt}mO@;~H%~;xkF+tm&)V|dDm;S+P)N@pKoC7^>o-IILG-Mh z>>s89LG-MRgX3UD1ldKl{IQB%**{-pf{V;e15}MoL=>RSg0sx<)>-MTda72UcuL`Az(0a?G!mX|%mvOq*h{JOvug``Th0@_+P z+831_aC@j$fZzNi2oMAtZC!Q%1i?nzlpP8tk<^9tl7IXYYk^^*hp_nB5B-2(+!ip>F1yXv!4<7w z+-B=1O9dR8>^ru4veXFxn(qW&(f;|4t?LhHh2}dp>JLv){h^H~cG&ci$0Rl*+y;_6 z?AS7uZndE`@V@Pr7yv-}zF7l+5Pjd)B?dr{zHcLoxdWVqp4e@N4$483*=;F>5ZrC! z#bk=ug~YjsLVcuok0Ha4klAAv6d=g^$BQ+=-v@&GVnZ=gvFYHy%P3uH4~FKp&r)i3Ert`_xP%K&XCd>t~&S z=;KoxZ_iz-h|qXUe)llzT;5iV^)WMKfYfH|!T=x?kJ%^;^izr$>(Ava(^#*HwrZ?D z4-{#vKeu&Z0Ig8`+}2O-+7kLgM?CzW53bWf8m#mlx7s~UB@ z1b{P*fe~~pXf*K>tsrVN@e&Y3jTA2_eQQfG>l>B6^;1=kKKKP}-vn$FxV{NoqQLcy z2{RA|+c%WM(F|GAXWXJ@h`RsjIjpH1)rq(-x20z&m?+A*oP(2jP@$&PwKvkw3qo9yWL z2?(Oej!sSiK{VOX@e>e4lO0`HXzz(>PUulbPJWCH54VTpG)EUj+mmCDIDYC30MbVs zojL9d|pB7uDJe0Q6gJya0q~ zwebQF{Z<<8VN3qY{VGF|{G1?>eO*k+LzR0JvV#2hEI3SRu*iy+}5 z5Y2I7JE#d(L>|=o9&`mjpS8vVK#0~F4*=0;EqSn?GO{9aVZMVZ$PTK4bd)2O^K?1u z5A2Sh9s(IKLdZ`A0F{o;)BwRa-_iAuBARy#997J$0Kj@&;OK=72+akKUf6)pT;O0~ z=O|Nv>YSh+QluhYof%9(m{Dg26A)x|j*c*ZN*!cW4=JJvU+|aL2wPurH(FT z077x8qpKi*P+aQhDo7E9yXB6qf&f7k(6533LUnndO0jJ@sZtfBh?24u&Ofh$KmfxF z2{XJ@1zF+fDhOIZzQWN}5J0MetZ;M{q=*u6yu?Q6Y3bb@#30=+?LCeRrRAOGIXKOBj~e?VvxN|ON+vKM^C)wgw|nE z4!cC#o%UgC+@ozP}^dJDfPTms409lax!kP#bo$OFLi+i0dAAVfEsfB^{3jTA6w z(=4GC{Dz}y9s>Yi-5bU_KoGrQRu!O<)zJ6Bu__*Ep2#C(N8y^8dwB6Aa5I_)ZcTfSj z9X^(M;?GWKKYYA4NC~jr!f~0(mNep z_W(pMI~`s3C?gYg!9~3PQUL(XU4bS!x+~BmM|TC9aP$MmuX~g!&prq=iS~m)lRW!? zG*#WBjNo2`c~kem59oMrpia?wucPZ8XjSsM?omc#y3g_J9smmIISvS-eU2_y0D@?r zqw5}kAlm2XxGra&+ATtswfyLEYnW+^TX<9CSjT zIP&e;tZVafNFH=zTc{~iE=%6Pt7YZto_uT^1ccDXW(om#} zO@6QkRFXPP0tC%rqM@fw6`nZigic}t^_5GWW>|r9bgx1;oyfH_vUU#ZUx8}`y)!0>0EFZjC)58J3lP1WaSGbt<121= z_QbbN=q%Pd8=KM@g5Nr^CGPJ**_kN6m$RN>13Tdwl;0alKuCUXC;>tFJyG^`xxjh% z2PgDjLMGR;-ibdrv1x8M*A^k-`%w;B%)0i%H3)u0v4#eMnlMT~Iw|UL1VQxnqf>f` zX$Ad{PM3jnFVG6r3-aSyR#tq$5zVy>1H%O;Q9br08K_)v+Fk;SNCk~kh3qa_zv8Jv zq-Y)g=WwBc(3vXA2T-XIIzZEfT=*OtPyv8WrwgH83!^p=P8Vq%v?eXq>Ee<>ba+H7 zR@F=)i|4XSi)RX<-om9{p)*tXU#t;?&P-9%%k8CfFfkq%vUV=(-R^Hj@$6unVn8ulG>sFbNwYXz!TD@ZHyP-}K}QBUloUyENjGgORjH)teyux5b&DiuzL55Rvcbjk zg-}n^V2lfj`68oC>riGhUvwMp4pln%C}5$GQ~r|;>$Xq`^_3TN;-Rxpw7gX7(6<2# zMc=Co1jRxz@GjjgJ_e}A)Ly^_cdHjd9l$}60E&8%*;(r(fTCXXRPVG>D=6y4fKl#E z$_jiI@Ej)A0(Nupa{)y&P&^k<&=&#EiJsT#35+iSmI_(85EFQ5;B9m0EDgM+cm9`( zZf1n=&i@OznG4zAk{5!05~1@#&`%)&&w5UQdC zKk&9aT66knFX`?7m16L<27+m&xb8t@ku)vvy8mjyZ;MpD6prFU0J?b2=zT7 zHG^xli1yIR^osv#an%S4J!r)%{;vu?I?^jDd-lOMf3{ z!c;0KHj1_?J%!=)ivLDY(%l`aDAGJP?+3ZXuu zB8Z+^?G&l)wDT0TcZyC|shGqlYVTI@{>m~+p>~_Ngcd07HgO3Mdb>@uXSAjNRYm&> zI7d0tUrqc5gyvsO{04;PUn%C(hKP@WkeLZSDAF-{(N~A+!S*Qi4?QmS?>F3|WADDe zO2Jzb)|(R8(b+x zd*e3{d~3EEKoERuwi-a(qHoPs0|>rvX{#Bo#tB=^Ss_m^W7k|lUo@RH5gT7pgXXM> z*nrSGE3Udzj{|m@AAYsVbnJmh296(sv827`hhQveula%Yno89-_L`pr|M$pnbB|Qn zG$A?>|8z&MU)kd|Y+)}gXYukL$&%3neXR165bA#r;6Bq{^pnW#r$>wSqMyW&`|%Pw z%>wL2lVkWpk*m$!Qav>L#XYKt&Q7~@;y>IND5IyzF+%13#D$(F$K(yrJ<*mmIcC@c PGmbB3>yIzzH;?^4qb*7S delta 14067 zcmZu&d3;vI)qc<1xi@ca5|Z33gg4up1PF_)35Zo>2}=|N5qDg0Ypb==s{LBquY$^2 zMWq2ok+q0^X~Y<53=~B+WpiPv3W!A%DWb9{MT@3<&zU>J{rdg*?>=|tdFGsRXU?3t z?|qkkk^aV?(_h+tSS*;dV&~yDsVgq~dZk?P({E>IIY0Ib)tDp|s^U0Z+Ojr{u8WJG z`D)AoQKnuZ-1@#PJ(ebB_-aN4wW{5P^lZy}9Vkn*bn8slQu?LeJR$s)z|D$1^Y*ufMng6uk+Qyfz<8#R0`xQikJ8WzLcpV7RWjhc?myxqmstE1E`3mt|zxqde-gT^_k!yxKhl`06tIV3ERxQ$ZN4Us^c zLz!8AKTQ;YRO+EYR6Q|O2oC_pn4SVeMfvS51W{3CC%;$|fu1JOGm)7bdFOriC-1-W z=XXr_)%|C!ccgB&&Nz^Mn$jwamILXhseM-qA(s0zb?@Q-Qfq_z42jCbZEAe0xJ=C% zOoc;Jg$!?7NeMTfp)?y13CU+DyWB`hNIpXyI{MXG5q%es=&PCvoovLWu#n4EuiW?eito;zKcjyr~yxkikej6K?>MPdAd2Ro#A?rT11Hw3n8_L z%F6wlv{XtUmykNpkA|s&-%$<>OM%*wNG%0+FQK$-Lr;O)5()|}gxV4+DfN44wRj+x zlIUIc>b5RWibDy|+7*XgODQdBsBtJQrLt}oLTM@W?B(~=N~wWdMxs|;*S9*?rixT3 z0a~S0C@rJ3QbXnWyo{3eQKmv^8FlaJkH!k{1FxQ9FJlD^N~)3~YO7Y=Mg{8l0Fvs# zp%mo!AlFm8)E|OzeO?R=YUxlKScPl2-e6}jAbK`XYFj-jAckq6M4_I=KF`$UDt{PN zSK}J?Ew{56klQG~gCX+tUrwDm`nk9PXtZ+-5L%6t zU1YQbv>K^2>5tS}Kuzl4FsiNb1yBE`NQb9?Q>4SwzlpL7jE=)hDlGCZK+MttubE=6 zstLoXx+o1Dn<<{*mtll7j!z4T>_krTsw+mStXj&g!cEwSyWw&N1f|6;cR*;j@NzHL z3TRxVyjm&&k@Li=h{%CjWh0DM5La=8+iM~MwOUC~6b-mE)U>O%`GLsRGyAb9I+>I1|8>p1m| zhh^zJ`UX<{r_i`s0K|QRjXNNOHrVw8sQa4r0|=oFyne>O(u}~{M6pK%C2ErDcoC-Q zz!B8r<_u6aQ9P-$UIyE|g`YrXa>#^V-*fkbTW(MO>fXCe)*Pm6Iuso2Z@qIdbk(e|G+QqIO`eDU^M0$ zA)diIC@)NN8G>i<4k}77_6KMsc(Y6W_hoe9;0&F%cSRO)+TInp#%X&O1>v59&Jfx~ z1?}{#%i!hro@$yZlF;Ft{a&Qwa$BUsIr}{dij94ov)`j+nO~yqf$<-xaib_vogp|w ze-L@X8TtdtvqTTX519B5p_xe0AGO>vP25I!N}QcPicH|_{83~AXXlS7s5B;|K1Q(doV$-Wtalkt9=q5whMZ#P;%5cl&&%S$#xAQ>MZ(OxB=rNSYAumL#C z#(=QlKx6}F;{z0g`wdzlb%4q${H>1G@&kE@TK4}zyg`Vl52-_uln<#xkre0VLs3M1 zNFAbNxlTnHA}x@IRoYl8hE5uE4o5m^@b0kP>(L6G!*;I+gwA2!Aa2(dr3dnex@#U)5 zOa0$yVw*r7CDAEyS6Ezpc_o$O(YApPxNXDQ28u^*!bU3;kJ{n_5Q;~sL#6)ug2BcW^vog`C|pcO(VZAk(Mp_4pC zxFpFCK_E|&+Ilrz2VVmCaw_sA0P_^31jd&D%u|%t);y4$Kz>JcP3!OMlOb|I{4OHq zfcPDy*ldvl;&)V3;x7o-SZ*MHpqA~kL;)|dTv-1@WPL8Aeu!peE~I{-Ags;M8B#xR z7>0htIkRQm0Mctn_ zUG<|3kq_d-D2|QW`5-BO(I2Sg2leDQ9A)u9Ox>OjcbSF*%ltnc0SijK>1+PeLpcj*bp6djCnpv;1^z z5jrmwa#YwTIIw`>;Ve^dV3&#xm)KVBJX(yr%y1FeXN4SYS|zxE;Zw-ev3*vQ54Nq~ zJ}ZU}^Z5*$g$iE8Uc!VPkW@#DDPMhjGj+@1WK=KAAvTMn+z>_?*9caFbr}#n8?4KK z5O1)-%Hnt|*HNy*HHgb2B1d_7MC2$hXCl|_SprdRR4 zG>V|7_6`s_jiRbrpHH#_Z-t2cRpsA8m*#R_Tp@54slW)?>{GK)3#U;@H2^f5t!;ql z+ALDTqz(wpW`WZTpNzA4z!srS^r77Id41vr*ewy8J!^^B>{(01hG(l(_N~+o!?G)@ zA|flViiqsWDkkzG2m-h#Led zy{ln;4vKFPdkfR7HmSyxQ0|=lWRr-O>-s2% zz1yPxeH)H6xW>%hB1Cvz21L&-A_xzSfEaQMCsIB*d9QOwSFxcSY=P>geq>B!_pWcSXENCy`t>ZAX|ya1F^FHX4BF zxxrBHAdKDO$9{HJ=Rn}jIf7I6`{VTTfzsqBq-Q?TfMDpBLRQ(V3H z2l5s2gH#tkKq+~=|Lzy@4*n*t9`f1pgQDf3dNG*#0%6F5)^Hzzvj%mE1QA<^|be=~2x`8?H+s2A^~jeT&9QIFW& z3J}aAA|;%LfM6aGxq1G2uEO&f9uqBzne-YB1wzb@*_Z)B>X?lgAf%27bFKl@TpUlz zv=XQ%gy^Z-jK#4vUmvxA!y*Z%1m3xEJ)O@Ud?VBYPtcv` z188JQ9zZa^5vG0v1oInFRP0X=p8$qAB}8G}m<|2Z-+xY95D*UnxEIz;fDkw(Qu0kG z`H*!=v`hHY!+_wB)hb#>&!R_Yc)mVmwMJg>DXTRK2%oZA?OH@yj6RFQ`Q+F zl8GzTpea;8CwaWGZfG8wB$-KpO0S;sX@P_t1rMc zhz~huz2d{xLyoBg(F)>24l2Qi2@|?);7xI2(=nm%4=40-hcdYw9LRIon_Eg=p-E_M zp)Yit1c)2_g$zZk2(lV;gT*`zIJmGN1vU!|YkrBK`W-*&fqXI6C>KrlG2}>hj z^saMEX;i?SXFKv*J-dJ~9|1dCh`zI(E@Lg^&Lf?xuhFGZ0T&N*98($rfeRRxMu6bX zaZG6h2<{vQrO`DAcRQ4wPV5DTRIg2xquwc@H1*PCWUkll$4?1se?l^Ao)fPK(^NZt z0*hKE)r%VH3jpUAS?2*U%p%8RDL@Rf$T3-}9Yhi+c#TeM71r`4NtK;~$EzQ7=_wQ`Js+UFaS4zc z`C;>#N$|67I@g*(3kF3~IO_qyYqGN*5Q8@HtbdpjYl5H9D{Aor^zSNMgZYZhJ%HTi zm@Nhn%vT(2FYm@xsOt;S@m0qhtP0u1HRo~>Ef@ezp^Jdvt+6fwVt_U5A{$!BqpxK{hpU&CP|gtC zfVFF_wSW*?Ypn(3{?=MRh^@5`sVML^IpsQa4v1PGzc*3{y_d&`OK;`yYq zr&69eIfX9BEe7K)YjQE0{EkW401$u2S_z1*?^r7VA^r|q$YgTL143py%kUYim?zOrNAyS(s*}}JG=k4ExCy6mH(W%35Zq~<287^FC+MPcEg%GU zI^DYa*I_o51m62j>>!*T5js738eN!M0>=AJyuChkm9W#ho$%BJ0P)?{T0nH&?U+*+ zAjEe&=G0ZfBky(esjDAbiW^|>jo9q#-iXb+b)Taynob3MO0-k^A|^}ki%Bga{lbWXEfmYqOO(u$SW+Ida9Ci5&{9**4kqImy zgbq07*G)hO9dNS4qz?$80}d*%(OL+7KXufHGw9OcB|33_YM&6GZagc*iStt@J50%F zh0v!?afyEio=|Dv{lkgPkd(Ma^_qk7d;4N4I$MJ$a!SGdhZFCjr&%dKtIt)*??{O?&@spSrT_?`V~+Vvp_I`Hr>@t^(jmBp&WT8epWcZ` zho9aF$JE~FteL32bs1mEHk@)y84skPd47P9Iu%Lr^E(wu@$)<7m@>YU&Hv7BeejOA zKHzYT0b)D*&Tf5xkowMUeSnbqj<-H8<4bw#JMDyJJOG4GM*-$7?zCgdc(j6fnkSJi z<4f^&O}0A!r;NuF(zSOaplff(l<{bVK&xZR_)>x5dveRDSu~l31Hg&N@~jhFb5E9L zw?!*VnJmqT8W2j8rK#dex#pfKMcIE;@wf{`+_quiVti_($i?_nY4R;PLvgA!?{iB9 ze)yPPSHJ1%KDY#Lx->;RAb8WIDdGXan=VnrKgLCTGVmUgu_x4k*)%OTiJp(icyC>% zCwclmF2gb%0HTjelUM=K^>Jy+bU=tcE>Wic1e#@m_eU99sJhLeTXV|L@sBdzRWGSB z)|`!UQsk;d3xzjvwpBz6I?k3RRRcnCwlo>Pj3@kDd5$6-EiepCVa5m4J+YjCMv#-;i^DHh1ER0l@ydD4{X zW!(80DR0vW5eU;2u)Brm`;6>ylZD**QhCd*x>PUY1vg)sQXL3fz_1Jj1b4nPr8*$E z^Ce34TM+W{z*{0?uc!<~H{_P1;}VJY@K1A*Rn9SA*7AErc{CURV=S|C3=q*mwq^x?Y-E8?7MLOY_3KoKb_+IT5CFE^CNP=Umnhna;VaL7JS1&YFsxc!9P6 z)aB};dDI6woXD0(I-JOsM>-tl<{}~?6YH&Dx-|rsgExaDg17(t+HndUlo^8s%l(B zDdQ@jwTfpfmva_fKXd+g8>M&^&AX-YtcUN z-juOzQr*0Wt{K-JJ>Qh(wMBb&b@RDgMGHniQ|Kxnc$=-OfEZyjyUM4G_B{Mnsb8lK z0f4Dnt*L+z+G17Q~89^flb}1E}B9&)Z!YJ?zENyLT9J76p*{xpaMc?r?s>rYHb<& zD4bzW7T~}-shnK??WRzzY@ni?jv&8pjqk|D@7DXyL|kK--PT+{^xSRD1;jAB*<7BB z9ogKy=kgjYkU>-EHK6WkHXcC8>}44~YINiYwNIWsYK-Ip9yj4W?uH8t5Q6)x`+yMK zC(Tg<5Q6(8jvBXNPE`ip$1-*l?q8KuaKB8=Z=ilTm7shq%oW(Uk|AZr{f2nO6}93 zh{(!^A|m^Ah>7~7QOWRgHGMkGuEI5j{5)cEdjDLSg9ci;t276VN)F@~YV-`cWH7E7 z*r)0$2Y}G|LYi|1AauTv=A2Qeq^!}AJ#|(6a z&Q}u0i~)E$odWNKjGe;M>6IM&z&*FAo{xxf_0fxznbQfh6Efab&#q4Vguc57gs+;~s_a!7V% z$w$?LFVo0AxQ67TRuT|BAGMNzkbIOShx)=p1^I*<`TLDa3hLc`w(GSqeFzG( z-Aw&jlKX%%+wFWlY+(u-m8;JC3k~b8TrbCP!rQr>ECffnRkeJu2M1`Ls}}!-Ms=U( zdiobnz6+^&ZvJ_O!)tV&d;Tac!O)83w7^xrTu0UF@@De7FK|8mi3vA>xWElRZDt7K z0=L^>f3PNEHY|44Z7>D!K{zs#-&ufd;UlhYn&BdaMe#* zXjK0fB2FqeFGL*vX88s8{QkyjJ{-Q_UVN25N)L|1VWX?QZlTfL8(mL-WeJmfNHn_b zdK(TO3>)44*Z5ax4!(bT*;Nx((%AklyPp0c7@Rb4UUrLrWH|gK+{^CJ5f(z?Wq0IV zW>|ds){IHMl12}1c0FCyLLwa!&2C{|!%2rkvpYzCy1}iGXm)FF_ixZv;3K$|uDCWa zO23xQRnM-XA>CI-V)%p$9nOmJmvAfHL06lpjW6L=yQ<&~8rUzUKXF?fdEW-i)sgr7 z#oKDPzl|8acw58c4pf6WJNfGUSMdYL#T%&zI{X37n#h7o=&Xq>;P2noumv}2`|KIF`C~u6{*B4_zmUtH>sPtc{O>1*SVfP-NElH$gFeAhnT4Fw{h#-(N|dr)phRG z58!;wlL;TgZFI%0iR(;ty>>NSTD8&j^e5}w4zZ1Ha-d=J7jPTh5#u>)p%q`iZF0qr z6N8hgDF?~&%2%mR?@g|!zeD79us69S7a2Bx1-Ho^emmZAG8b+O# zqV8Lxp>sgq8V$`~!foZDLoz;ud)rk5UZd;#za4RM!FfC4V5GHh`0E|t{S?Ys(N!NbvWX2Vn6I=htC2X z!8`2s3NtyrxJ13CGx^X#d_4Zb=5e%u_l3>lfV!v2qw&!w zP@Kk(+BA-i;2pJT93Q@;eA8)sP;XA+C!#QM5S6A>VI-@1dY z(}{@qbLP|MNJKpb@z=|zZ5~2DsGPQW2oT1cws{B;qNh0zU89Xbf^T(Ik4<#t`TQ+& zt6kEhlYFaP(tzN#x+8w7GY|=6^-11;W}qIOa2pzvJd=k2Vag=W, } +/// ListLocalTasksRequest represents request of ListLocalTasks. +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] +pub struct ListLocalTasksRequest {} +/// ListLocalTasksResponse represents response of ListLocalTasks. +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListLocalTasksResponse { + /// Task ids of the local tasks. + #[prost(message, repeated, tag = "1")] + pub tasks: ::prost::alloc::vec::Vec, +} /// ListTaskEntriesRequest represents request of ListTaskEntries. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -251,6 +263,17 @@ pub struct DeleteTaskRequest { #[prost(string, optional, tag = "2")] pub remote_ip: ::core::option::Option<::prost::alloc::string::String>, } +/// DeleteLocalTaskRequest represents request of DeleteLocalTask. +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] +pub struct DeleteLocalTaskRequest { + /// Task id. + #[prost(string, tag = "1")] + pub task_id: ::prost::alloc::string::String, + /// Remote IP represents the IP address of the client initiating the delete request. + #[prost(string, optional, tag = "2")] + pub remote_ip: ::core::option::Option<::prost::alloc::string::String>, +} /// DownloadCacheTaskRequest represents request of DownloadCacheTask. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -613,6 +636,69 @@ pub struct StatPersistentTaskRequest { #[prost(string, optional, tag = "2")] pub remote_ip: ::core::option::Option<::prost::alloc::string::String>, } +/// StatLocalPersistentTaskRequest represents request of StatLocalPersistentTask. +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] +pub struct StatLocalPersistentTaskRequest { + /// Task id. + #[prost(string, tag = "1")] + pub task_id: ::prost::alloc::string::String, + /// Remote IP represents the IP address of the client initiating the stat request. + #[prost(string, optional, tag = "2")] + pub remote_ip: ::core::option::Option<::prost::alloc::string::String>, +} +/// StatLocalPersistentTaskResponse represents response of StatLocalPersistentTask. +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] +pub struct StatLocalPersistentTaskResponse { + /// Task id. + #[prost(string, tag = "1")] + pub task_id: ::prost::alloc::string::String, + /// Persistent represents whether the persistent task is persistent. + /// If the persistent task is persistent, the persistent peer will + /// not be deleted when dfdamon runs garbage collection. + #[prost(bool, tag = "2")] + pub persistent: bool, + /// TTL of the persistent task. + #[prost(message, optional, tag = "3")] + pub ttl: ::core::option::Option<::prost_wkt_types::Duration>, + /// Task piece length. + #[prost(uint64, optional, tag = "4")] + pub piece_length: ::core::option::Option, + /// Task content length. + #[prost(uint64, optional, tag = "5")] + pub content_length: ::core::option::Option, + /// Uploading count is the count of the persistent task being uploaded by other peers. + #[prost(uint64, tag = "6")] + pub uploading_count: u64, + /// Uploaded count is the count of the persistent task has been uploaded by other peers. + #[prost(uint64, tag = "7")] + pub uploaded_count: u64, + /// Task create time. + #[prost(message, optional, tag = "8")] + pub created_at: ::core::option::Option<::prost_wkt_types::Timestamp>, + /// Task update time. + #[prost(message, optional, tag = "9")] + pub updated_at: ::core::option::Option<::prost_wkt_types::Timestamp>, + /// Task fail time. + #[prost(message, optional, tag = "10")] + pub failed_at: ::core::option::Option<::prost_wkt_types::Timestamp>, + /// Task finish time. + #[prost(message, optional, tag = "11")] + pub finished_at: ::core::option::Option<::prost_wkt_types::Timestamp>, +} +/// ListLocalPersistentTasksRequest represents request of ListLocalPersistentTasks. +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] +pub struct ListLocalPersistentTasksRequest {} +/// ListLocalPersistentTasksResponse represents response of ListLocalPersistentTasks. +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListLocalPersistentTasksResponse { + /// Task ids of the local tasks. + #[prost(message, repeated, tag = "1")] + pub tasks: ::prost::alloc::vec::Vec, +} /// DeletePersistentTaskRequest represents request of DeletePersistentTask. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] @@ -814,6 +900,69 @@ pub struct StatPersistentCacheTaskRequest { #[prost(string, optional, tag = "2")] pub remote_ip: ::core::option::Option<::prost::alloc::string::String>, } +/// StatLocalPersistentCacheTaskRequest represents request of StatLocalPersistentCacheTask. +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] +pub struct StatLocalPersistentCacheTaskRequest { + /// Task id. + #[prost(string, tag = "1")] + pub task_id: ::prost::alloc::string::String, + /// Remote IP represents the IP address of the client initiating the stat request. + #[prost(string, optional, tag = "2")] + pub remote_ip: ::core::option::Option<::prost::alloc::string::String>, +} +/// StatLocalPersistentTaskResponse represents response of StatLocalPersistentTask. +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] +pub struct StatLocalPersistentCacheTaskResponse { + /// Task id. + #[prost(string, tag = "1")] + pub task_id: ::prost::alloc::string::String, + /// Persistent represents whether the persistent cache task is persistent. + /// If the persistent cache task is persistent, the persistent cache peer will + /// not be deleted when dfdamon runs garbage collection. + #[prost(bool, tag = "2")] + pub persistent: bool, + /// TTL of the persistent task. + #[prost(message, optional, tag = "3")] + pub ttl: ::core::option::Option<::prost_wkt_types::Duration>, + /// Task piece length. + #[prost(uint64, optional, tag = "4")] + pub piece_length: ::core::option::Option, + /// Task content length. + #[prost(uint64, optional, tag = "5")] + pub content_length: ::core::option::Option, + /// Uploading count is the count of the persistent cache task being uploaded by other peers. + #[prost(uint64, tag = "6")] + pub uploading_count: u64, + /// Uploaded count is the count of the persistent cache task has been uploaded by other peers. + #[prost(uint64, tag = "7")] + pub uploaded_count: u64, + /// Task create time. + #[prost(message, optional, tag = "8")] + pub created_at: ::core::option::Option<::prost_wkt_types::Timestamp>, + /// Task update time. + #[prost(message, optional, tag = "9")] + pub updated_at: ::core::option::Option<::prost_wkt_types::Timestamp>, + /// Task fail time. + #[prost(message, optional, tag = "10")] + pub failed_at: ::core::option::Option<::prost_wkt_types::Timestamp>, + /// Task finish time. + #[prost(message, optional, tag = "11")] + pub finished_at: ::core::option::Option<::prost_wkt_types::Timestamp>, +} +/// ListLocalPersistentCacheTasksRequest represents request of ListLocalPersistentCacheTasks. +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] +pub struct ListLocalPersistentCacheTasksRequest {} +/// ListLocalPersistentTasksResponse represents response of ListLocalPersistentTasks. +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListLocalPersistentCacheTasksResponse { + /// Task ids of the local tasks. + #[prost(message, repeated, tag = "1")] + pub tasks: ::prost::alloc::vec::Vec, +} /// DeletePersistentCacheTaskRequest represents request of DeletePersistentCacheTask. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] @@ -3267,6 +3416,33 @@ pub mod dfdaemon_download_client { ); self.inner.unary(req, path, codec).await } + /// ListLocalTasks lists local tasks from peer. + pub async fn list_local_tasks( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::unknown( + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic_prost::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/dfdaemon.v2.DfdaemonDownload/ListLocalTasks", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new("dfdaemon.v2.DfdaemonDownload", "ListLocalTasks"), + ); + self.inner.unary(req, path, codec).await + } /// ListTaskEntries lists task entries for downloading directory. pub async fn list_task_entries( &mut self, @@ -3316,6 +3492,30 @@ pub mod dfdaemon_download_client { .insert(GrpcMethod::new("dfdaemon.v2.DfdaemonDownload", "DeleteTask")); self.inner.unary(req, path, codec).await } + /// DeleteLocalTask deletes local task from peer. + pub async fn delete_local_task( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result, tonic::Status> { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::unknown( + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic_prost::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/dfdaemon.v2.DfdaemonDownload/DeleteLocalTask", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new("dfdaemon.v2.DfdaemonDownload", "DeleteLocalTask"), + ); + self.inner.unary(req, path, codec).await + } /// DeleteHost releases host in scheduler. pub async fn delete_host( &mut self, @@ -3478,6 +3678,93 @@ pub mod dfdaemon_download_client { ); self.inner.unary(req, path, codec).await } + /// StatPersistentTask stats persistent task information. + pub async fn stat_persistent_task( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::unknown( + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic_prost::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/dfdaemon.v2.DfdaemonDownload/StatPersistentTask", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new("dfdaemon.v2.DfdaemonDownload", "StatPersistentTask"), + ); + self.inner.unary(req, path, codec).await + } + /// StatLocalPersistentTask stats local persistent task information from peer. + pub async fn stat_local_persistent_task( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::unknown( + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic_prost::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/dfdaemon.v2.DfdaemonDownload/StatLocalPersistentTask", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "dfdaemon.v2.DfdaemonDownload", + "StatLocalPersistentTask", + ), + ); + self.inner.unary(req, path, codec).await + } + /// ListLocalPersistentTasks lists local persistent tasks from peer. + pub async fn list_local_persistent_tasks( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::unknown( + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic_prost::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/dfdaemon.v2.DfdaemonDownload/ListLocalPersistentTasks", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "dfdaemon.v2.DfdaemonDownload", + "ListLocalPersistentTasks", + ), + ); + self.inner.unary(req, path, codec).await + } /// DownloadPersistentCacheTask downloads persistent cache task from p2p network. pub async fn download_persistent_cache_task( &mut self, @@ -3570,44 +3857,104 @@ pub mod dfdaemon_download_client { ); self.inner.unary(req, path, codec).await } - } -} -/// Generated server implementations. -pub mod dfdaemon_download_server { - #![allow( - unused_variables, - dead_code, - missing_docs, - clippy::wildcard_imports, - clippy::let_unit_value, - )] - use tonic::codegen::*; - /// Generated trait containing gRPC methods that should be implemented for use with DfdaemonDownloadServer. - #[async_trait] - pub trait DfdaemonDownload: std::marker::Send + std::marker::Sync + 'static { - /// Server streaming response type for the DownloadTask method. - type DownloadTaskStream: tonic::codegen::tokio_stream::Stream< - Item = std::result::Result, - > - + std::marker::Send - + 'static; - /// DownloadTask downloads task from p2p network. - async fn download_task( - &self, - request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; - /// StatTask stats task information. - async fn stat_task( - &self, - request: tonic::Request, + /// StatLocalPersistentCacheTask stats local persistent cache task information from peer. + pub async fn stat_local_persistent_cache_task( + &mut self, + request: impl tonic::IntoRequest, ) -> std::result::Result< - tonic::Response, + tonic::Response, tonic::Status, - >; - /// StatLocalTask stats local task information from peer. + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::unknown( + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic_prost::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/dfdaemon.v2.DfdaemonDownload/StatLocalPersistentCacheTask", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "dfdaemon.v2.DfdaemonDownload", + "StatLocalPersistentCacheTask", + ), + ); + self.inner.unary(req, path, codec).await + } + /// ListLocalPersistentCacheTasks lists local persistent cache tasks from peer. + pub async fn list_local_persistent_cache_tasks( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::unknown( + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic_prost::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/dfdaemon.v2.DfdaemonDownload/ListLocalPersistentCacheTasks", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "dfdaemon.v2.DfdaemonDownload", + "ListLocalPersistentCacheTasks", + ), + ); + self.inner.unary(req, path, codec).await + } + } +} +/// Generated server implementations. +pub mod dfdaemon_download_server { + #![allow( + unused_variables, + dead_code, + missing_docs, + clippy::wildcard_imports, + clippy::let_unit_value, + )] + use tonic::codegen::*; + /// Generated trait containing gRPC methods that should be implemented for use with DfdaemonDownloadServer. + #[async_trait] + pub trait DfdaemonDownload: std::marker::Send + std::marker::Sync + 'static { + /// Server streaming response type for the DownloadTask method. + type DownloadTaskStream: tonic::codegen::tokio_stream::Stream< + Item = std::result::Result, + > + + std::marker::Send + + 'static; + /// DownloadTask downloads task from p2p network. + async fn download_task( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /// StatTask stats task information. + async fn stat_task( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /// StatLocalTask stats local task information from peer. async fn stat_local_task( &self, request: tonic::Request, @@ -3615,6 +3962,14 @@ pub mod dfdaemon_download_server { tonic::Response, tonic::Status, >; + /// ListLocalTasks lists local tasks from peer. + async fn list_local_tasks( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; /// ListTaskEntries lists task entries for downloading directory. async fn list_task_entries( &self, @@ -3628,6 +3983,11 @@ pub mod dfdaemon_download_server { &self, request: tonic::Request, ) -> std::result::Result, tonic::Status>; + /// DeleteLocalTask deletes local task from peer. + async fn delete_local_task( + &self, + request: tonic::Request, + ) -> std::result::Result, tonic::Status>; /// DeleteHost releases host in scheduler. async fn delete_host( &self, @@ -3688,6 +4048,30 @@ pub mod dfdaemon_download_server { tonic::Response, tonic::Status, >; + /// StatPersistentTask stats persistent task information. + async fn stat_persistent_task( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /// StatLocalPersistentTask stats local persistent task information from peer. + async fn stat_local_persistent_task( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /// ListLocalPersistentTasks lists local persistent tasks from peer. + async fn list_local_persistent_tasks( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; /// Server streaming response type for the DownloadPersistentCacheTask method. type DownloadPersistentCacheTaskStream: tonic::codegen::tokio_stream::Stream< Item = std::result::Result< @@ -3721,6 +4105,22 @@ pub mod dfdaemon_download_server { tonic::Response, tonic::Status, >; + /// StatLocalPersistentCacheTask stats local persistent cache task information from peer. + async fn stat_local_persistent_cache_task( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /// ListLocalPersistentCacheTasks lists local persistent cache tasks from peer. + async fn list_local_persistent_cache_tasks( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; } /// DfdaemonDownload represents download service of dfdaemon. #[derive(Debug)] @@ -3937,6 +4337,52 @@ pub mod dfdaemon_download_server { }; Box::pin(fut) } + "/dfdaemon.v2.DfdaemonDownload/ListLocalTasks" => { + #[allow(non_camel_case_types)] + struct ListLocalTasksSvc(pub Arc); + impl< + T: DfdaemonDownload, + > tonic::server::UnaryService + for ListLocalTasksSvc { + type Response = super::ListLocalTasksResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::list_local_tasks(&inner, request) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let method = ListLocalTasksSvc(inner); + let codec = tonic_prost::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } "/dfdaemon.v2.DfdaemonDownload/ListTaskEntries" => { #[allow(non_camel_case_types)] struct ListTaskEntriesSvc(pub Arc); @@ -4028,6 +4474,52 @@ pub mod dfdaemon_download_server { }; Box::pin(fut) } + "/dfdaemon.v2.DfdaemonDownload/DeleteLocalTask" => { + #[allow(non_camel_case_types)] + struct DeleteLocalTaskSvc(pub Arc); + impl< + T: DfdaemonDownload, + > tonic::server::UnaryService + for DeleteLocalTaskSvc { + type Response = (); + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::delete_local_task(&inner, request) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let method = DeleteLocalTaskSvc(inner); + let codec = tonic_prost::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } "/dfdaemon.v2.DfdaemonDownload/DeleteHost" => { #[allow(non_camel_case_types)] struct DeleteHostSvc(pub Arc); @@ -4311,6 +4803,157 @@ pub mod dfdaemon_download_server { }; Box::pin(fut) } + "/dfdaemon.v2.DfdaemonDownload/StatPersistentTask" => { + #[allow(non_camel_case_types)] + struct StatPersistentTaskSvc(pub Arc); + impl< + T: DfdaemonDownload, + > tonic::server::UnaryService + for StatPersistentTaskSvc { + type Response = super::super::super::common::v2::PersistentTask; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::stat_persistent_task( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let method = StatPersistentTaskSvc(inner); + let codec = tonic_prost::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/dfdaemon.v2.DfdaemonDownload/StatLocalPersistentTask" => { + #[allow(non_camel_case_types)] + struct StatLocalPersistentTaskSvc(pub Arc); + impl< + T: DfdaemonDownload, + > tonic::server::UnaryService + for StatLocalPersistentTaskSvc { + type Response = super::StatLocalPersistentTaskResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request< + super::StatLocalPersistentTaskRequest, + >, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::stat_local_persistent_task( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let method = StatLocalPersistentTaskSvc(inner); + let codec = tonic_prost::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/dfdaemon.v2.DfdaemonDownload/ListLocalPersistentTasks" => { + #[allow(non_camel_case_types)] + struct ListLocalPersistentTasksSvc(pub Arc); + impl< + T: DfdaemonDownload, + > tonic::server::UnaryService + for ListLocalPersistentTasksSvc { + type Response = super::ListLocalPersistentTasksResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request< + super::ListLocalPersistentTasksRequest, + >, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::list_local_persistent_tasks( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let method = ListLocalPersistentTasksSvc(inner); + let codec = tonic_prost::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } "/dfdaemon.v2.DfdaemonDownload/DownloadPersistentCacheTask" => { #[allow(non_camel_case_types)] struct DownloadPersistentCacheTaskSvc( @@ -4469,6 +5112,114 @@ pub mod dfdaemon_download_server { }; Box::pin(fut) } + "/dfdaemon.v2.DfdaemonDownload/StatLocalPersistentCacheTask" => { + #[allow(non_camel_case_types)] + struct StatLocalPersistentCacheTaskSvc( + pub Arc, + ); + impl< + T: DfdaemonDownload, + > tonic::server::UnaryService< + super::StatLocalPersistentCacheTaskRequest, + > for StatLocalPersistentCacheTaskSvc { + type Response = super::StatLocalPersistentCacheTaskResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request< + super::StatLocalPersistentCacheTaskRequest, + >, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::stat_local_persistent_cache_task( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let method = StatLocalPersistentCacheTaskSvc(inner); + let codec = tonic_prost::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/dfdaemon.v2.DfdaemonDownload/ListLocalPersistentCacheTasks" => { + #[allow(non_camel_case_types)] + struct ListLocalPersistentCacheTasksSvc( + pub Arc, + ); + impl< + T: DfdaemonDownload, + > tonic::server::UnaryService< + super::ListLocalPersistentCacheTasksRequest, + > for ListLocalPersistentCacheTasksSvc { + type Response = super::ListLocalPersistentCacheTasksResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request< + super::ListLocalPersistentCacheTasksRequest, + >, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::list_local_persistent_cache_tasks( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let method = ListLocalPersistentCacheTasksSvc(inner); + let codec = tonic_prost::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } _ => { Box::pin(async move { let mut response = http::Response::new(