From 9070c0a79a682815732484cdeec56ccd1cf98106 Mon Sep 17 00:00:00 2001 From: Kyle Franz Date: Tue, 12 Jul 2022 21:21:39 -0700 Subject: [PATCH] wip --- devices/interfaces.go | 5 +- devices/snes/drivers/fxpakpro/ls.go | 39 +- protos/sni/sni.pb.go | 1131 ++++++++++++++------------- protos/sni/sni.proto | 12 + protos/sni/sni_grpc.pb.go | 4 +- services/grpcimpl/filesystem.go | 6 + 6 files changed, 663 insertions(+), 534 deletions(-) diff --git a/devices/interfaces.go b/devices/interfaces.go index 56721f3..fed52a8 100644 --- a/devices/interfaces.go +++ b/devices/interfaces.go @@ -5,6 +5,7 @@ import ( "io" "net/url" "sni/protos/sni" + "time" ) type Driver interface { @@ -81,7 +82,7 @@ type DeviceControl interface { } type DeviceFilesystem interface { - ReadDirectory(ctx context.Context, path string) ([]DirEntry, error) + ReadDirectory(ctx context.Context, path string) (files []DirEntry, err error) MakeDirectory(ctx context.Context, path string) error RemoveFile(ctx context.Context, path string) error RenameFile(ctx context.Context, path, newFilename string) error @@ -93,6 +94,8 @@ type DeviceFilesystem interface { type DirEntry struct { Name string Type sni.DirEntryType + Size *uint32 + ModifiedTime *time.Time } type ProgressReportFunc func(current uint32, total uint32) diff --git a/devices/snes/drivers/fxpakpro/ls.go b/devices/snes/drivers/fxpakpro/ls.go index 13ed4bb..cb0beb9 100644 --- a/devices/snes/drivers/fxpakpro/ls.go +++ b/devices/snes/drivers/fxpakpro/ls.go @@ -6,6 +6,7 @@ import ( "fmt" "sni/devices" "sni/protos/sni" + "time" ) func (d *Device) listFiles(ctx context.Context, path string) (files []devices.DirEntry, err error) { @@ -15,7 +16,9 @@ func (d *Device) listFiles(ctx context.Context, path string) (files []devices.Di sb[5] = byte(SpaceFILE) sb[6] = byte(FlagNONE) - n := copy(sb[256:], path) + n := copy(sb[256:], path) + 1 + sb[256 + n] = byte(sni.FileDetails_FileSize | sni.FileDetails_FileStamp) + n++ binary.BigEndian.PutUint32(sb[252:], uint32(n)) if shouldLock(ctx) { @@ -73,6 +76,11 @@ recvLoop: } i := 0 + var ls_extended_flags byte + if sb[0] == 0 { + ls_extended_flags = sb[1] + i = i + 2 + } for i < 512 { // FF means no more data expected: if sb[i] == 0xFF { @@ -96,6 +104,28 @@ recvLoop: } i++ + if ls_extended_flags & byte(sni.FileDetails_FileSize) != 0 { + file.Size = new(uint32) + *file.Size = binary.LittleEndian.Uint32(sb[i:i+4]) + i += 4 + } + if ls_extended_flags & byte(sni.FileDetails_FileStamp) != 0 { + ModifiedDate := binary.LittleEndian.Uint16(sb[i:i+2]) + i += 2 + ModifiedTime := binary.LittleEndian.Uint16(sb[i:i+2]) + i += 2 + + Year := int(1980 + (ModifiedDate >> 9)) + Month := time.Month(((ModifiedDate >> 5) & 0x0f)) + Day := int(ModifiedDate & 0x1f) + Hour := int(ModifiedTime >> 11) + Minute := int((ModifiedTime >> 5) & 0x3f) + Second := int((ModifiedTime & 0x1f) * 2) + + file.ModifiedTime = new(time.Time) + *file.ModifiedTime = time.Date(Year, Month, Day, Hour, Minute, Second, 0, time.UTC) + } + // read filename with 0-terminator: start := i for i < 512 && sb[i] != 0 { @@ -107,7 +137,6 @@ recvLoop: file.Name = string(sb[start:i]) i++ - // file size does not come in this response files = append(files, file) } if i == 512 { @@ -118,11 +147,5 @@ recvLoop: } } - // TODO: go back and fetch file sizes - // NOTE: there is no way in the protocol to simply check file size. GET requires downloading the entire file. - //for i, file := range files { - // size, err = d.getFile(file.Name) - //} - return } diff --git a/protos/sni/sni.pb.go b/protos/sni/sni.pb.go index 696fd7e..950451a 100644 --- a/protos/sni/sni.pb.go +++ b/protos/sni/sni.pb.go @@ -9,6 +9,7 @@ package sni import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -343,6 +344,56 @@ func (DirEntryType) EnumDescriptor() ([]byte, []int) { return file_sni_proto_rawDescGZIP(), []int{4} } +// Bitfield, 1, 2, 4, etc +type FileDetails int32 + +const ( + FileDetails_FileNoDetails FileDetails = 0 + FileDetails_FileSize FileDetails = 1 + FileDetails_FileStamp FileDetails = 2 +) + +// Enum value maps for FileDetails. +var ( + FileDetails_name = map[int32]string{ + 0: "FileNoDetails", + 1: "FileSize", + 2: "FileStamp", + } + FileDetails_value = map[string]int32{ + "FileNoDetails": 0, + "FileSize": 1, + "FileStamp": 2, + } +) + +func (x FileDetails) Enum() *FileDetails { + p := new(FileDetails) + *p = x + return p +} + +func (x FileDetails) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FileDetails) Descriptor() protoreflect.EnumDescriptor { + return file_sni_proto_enumTypes[5].Descriptor() +} + +func (FileDetails) Type() protoreflect.EnumType { + return &file_sni_proto_enumTypes[5] +} + +func (x FileDetails) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use FileDetails.Descriptor instead. +func (FileDetails) EnumDescriptor() ([]byte, []int) { + return file_sni_proto_rawDescGZIP(), []int{5} +} + type DevicesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1788,8 +1839,10 @@ type DirEntry struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Type DirEntryType `protobuf:"varint,2,opt,name=type,proto3,enum=DirEntryType" json:"type,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Type DirEntryType `protobuf:"varint,2,opt,name=type,proto3,enum=DirEntryType" json:"type,omitempty"` + Size *uint32 `protobuf:"varint,3,opt,name=size,proto3,oneof" json:"size,omitempty"` + ModifiedStamp *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=modifiedStamp,proto3,oneof" json:"modifiedStamp,omitempty"` } func (x *DirEntry) Reset() { @@ -1838,6 +1891,20 @@ func (x *DirEntry) GetType() DirEntryType { return DirEntryType_Directory } +func (x *DirEntry) GetSize() uint32 { + if x != nil && x.Size != nil { + return *x.Size + } + return 0 +} + +func (x *DirEntry) GetModifiedStamp() *timestamppb.Timestamp { + if x != nil { + return x.ModifiedStamp + } + return nil +} + type ReadDirectoryResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3016,430 +3083,444 @@ func (x *NWACommandResponse_NWAASCIIItem) GetItem() map[string]string { var File_sni_proto protoreflect.FileDescriptor var file_sni_proto_rawDesc = []byte{ - 0x0a, 0x09, 0x73, 0x6e, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x26, 0x0a, 0x0e, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x69, - 0x6e, 0x64, 0x73, 0x22, 0xab, 0x02, 0x0a, 0x0f, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a, 0xe4, 0x01, 0x0a, 0x06, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x35, 0x0a, - 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x0d, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x22, 0x26, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x22, 0x27, 0x0a, 0x13, 0x52, 0x65, 0x73, - 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, - 0x72, 0x69, 0x22, 0x26, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x4d, 0x65, 0x6e, - 0x75, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, + 0x0a, 0x09, 0x73, 0x6e, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x26, 0x0a, 0x0e, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6b, + 0x69, 0x6e, 0x64, 0x73, 0x22, 0xab, 0x02, 0x0a, 0x0f, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a, 0xe4, 0x01, 0x0a, 0x06, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, + 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x35, + 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x61, 0x70, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x22, 0x26, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x22, 0x27, 0x0a, 0x13, 0x52, 0x65, - 0x73, 0x65, 0x74, 0x54, 0x6f, 0x4d, 0x65, 0x6e, 0x75, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x73, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x75, 0x72, 0x69, 0x22, 0x41, 0x0a, 0x15, 0x50, 0x61, 0x75, 0x73, 0x65, 0x45, 0x6d, 0x75, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x16, - 0x0a, 0x06, 0x70, 0x61, 0x75, 0x73, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, - 0x70, 0x61, 0x75, 0x73, 0x65, 0x64, 0x22, 0x42, 0x0a, 0x16, 0x50, 0x61, 0x75, 0x73, 0x65, 0x45, - 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, - 0x72, 0x69, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x75, 0x73, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x70, 0x61, 0x75, 0x73, 0x65, 0x64, 0x22, 0x2f, 0x0a, 0x1b, 0x50, 0x61, - 0x75, 0x73, 0x65, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x22, 0x30, 0x0a, 0x1c, 0x50, - 0x61, 0x75, 0x73, 0x65, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, - 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x22, 0xd6, 0x01, - 0x0a, 0x1a, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, - 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x49, - 0x0a, 0x15, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, - 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, - 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, - 0x15, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, - 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x0f, 0x72, 0x6f, 0x6d, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x30, 0x30, 0x46, 0x46, 0x42, 0x30, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0c, 0x48, 0x01, 0x52, 0x0f, 0x72, 0x6f, 0x6d, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x30, - 0x30, 0x46, 0x46, 0x42, 0x30, 0x88, 0x01, 0x01, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x66, 0x61, 0x6c, - 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, - 0x6e, 0x67, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x72, 0x6f, 0x6d, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x30, 0x30, 0x46, 0x46, 0x42, 0x30, 0x22, 0xaf, 0x01, 0x0a, 0x1b, 0x44, 0x65, 0x74, 0x65, 0x63, - 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x34, 0x0a, 0x0d, 0x6d, 0x65, 0x6d, 0x6f, - 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x0e, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, - 0x0d, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x1e, - 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x28, - 0x0a, 0x0f, 0x72, 0x6f, 0x6d, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x30, 0x30, 0x46, 0x46, 0x42, - 0x30, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x72, 0x6f, 0x6d, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x30, 0x30, 0x46, 0x46, 0x42, 0x30, 0x22, 0xd4, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x61, - 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, - 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3f, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, - 0x63, 0x65, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x42, 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, - 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, - 0xba, 0x02, 0x0a, 0x12, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3f, - 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x53, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x42, 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, - 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, - 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x14, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, - 0x69, 0x6e, 0x67, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3d, 0x0a, 0x12, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x12, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd5, 0x01, 0x0a, - 0x12, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3f, 0x0a, 0x13, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x42, 0x0a, 0x14, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, - 0x70, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x4d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x14, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, - 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x22, 0xbb, 0x02, 0x0a, 0x13, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0e, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x3f, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x0d, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x42, 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, - 0x69, 0x6e, 0x67, 0x52, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, - 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x3d, 0x0a, 0x12, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x53, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x12, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x73, 0x69, - 0x7a, 0x65, 0x22, 0x59, 0x0a, 0x17, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x52, 0x65, 0x61, 0x64, - 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, + 0x75, 0x72, 0x69, 0x22, 0x26, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x4d, 0x65, + 0x6e, 0x75, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x22, 0x27, 0x0a, 0x13, 0x52, + 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x4d, 0x65, 0x6e, 0x75, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x75, 0x72, 0x69, 0x22, 0x41, 0x0a, 0x15, 0x50, 0x61, 0x75, 0x73, 0x65, 0x45, 0x6d, 0x75, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, - 0x2c, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5d, 0x0a, - 0x18, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x2f, 0x0a, 0x08, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x0a, 0x18, - 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x2d, 0x0a, 0x07, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5f, 0x0a, 0x19, 0x53, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x30, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x0a, 0x16, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x2e, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x5e, 0x0a, 0x17, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, - 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x16, 0x0a, 0x06, 0x70, 0x61, 0x75, 0x73, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x70, 0x61, 0x75, 0x73, 0x65, 0x64, 0x22, 0x42, 0x0a, 0x16, 0x50, 0x61, 0x75, 0x73, 0x65, + 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x75, 0x72, 0x69, 0x12, 0x31, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0x5c, 0x0a, 0x17, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x75, 0x72, 0x69, 0x12, 0x2f, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x73, 0x22, 0x60, 0x0a, 0x18, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, - 0x72, 0x69, 0x12, 0x32, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0x3c, 0x0a, 0x14, 0x52, 0x65, 0x61, 0x64, 0x44, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, + 0x75, 0x72, 0x69, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x75, 0x73, 0x65, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x61, 0x75, 0x73, 0x65, 0x64, 0x22, 0x2f, 0x0a, 0x1b, 0x50, + 0x61, 0x75, 0x73, 0x65, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, + 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x22, 0x30, 0x0a, 0x1c, + 0x50, 0x61, 0x75, 0x73, 0x65, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x22, 0xd6, + 0x01, 0x0a, 0x1a, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, + 0x49, 0x0a, 0x15, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x4d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, + 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x48, 0x00, + 0x52, 0x15, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x0f, 0x72, 0x6f, + 0x6d, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x30, 0x30, 0x46, 0x46, 0x42, 0x30, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0c, 0x48, 0x01, 0x52, 0x0f, 0x72, 0x6f, 0x6d, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x30, 0x30, 0x46, 0x46, 0x42, 0x30, 0x88, 0x01, 0x01, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x66, 0x61, + 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, + 0x69, 0x6e, 0x67, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x72, 0x6f, 0x6d, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x30, 0x30, 0x46, 0x46, 0x42, 0x30, 0x22, 0xaf, 0x01, 0x0a, 0x1b, 0x44, 0x65, 0x74, 0x65, + 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x34, 0x0a, 0x0d, 0x6d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x0e, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0x52, 0x0d, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, + 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x28, 0x0a, 0x0f, 0x72, 0x6f, 0x6d, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x30, 0x30, 0x46, 0x46, + 0x42, 0x30, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x72, 0x6f, 0x6d, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x30, 0x30, 0x46, 0x46, 0x42, 0x30, 0x22, 0xd4, 0x01, 0x0a, 0x11, 0x52, 0x65, + 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3f, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, + 0x61, 0x63, 0x65, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x42, 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x22, 0xba, 0x02, 0x0a, 0x12, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x3f, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x13, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x42, 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, + 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x14, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, + 0x70, 0x69, 0x6e, 0x67, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3d, 0x0a, 0x12, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x12, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd5, 0x01, + 0x0a, 0x12, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3f, 0x0a, 0x13, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, + 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x42, 0x0a, + 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, + 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x4d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x14, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xbb, 0x02, 0x0a, 0x13, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, + 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3f, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x42, 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, + 0x70, 0x69, 0x6e, 0x67, 0x52, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x3d, 0x0a, 0x12, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x12, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x73, + 0x69, 0x7a, 0x65, 0x22, 0x59, 0x0a, 0x17, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x52, 0x65, 0x61, + 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, - 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x70, 0x61, 0x74, 0x68, 0x22, 0x41, 0x0a, 0x08, 0x44, 0x69, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x44, 0x69, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x62, 0x0a, 0x15, 0x52, 0x65, 0x61, 0x64, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, - 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x44, 0x69, 0x72, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x3c, 0x0a, 0x14, 0x4d, - 0x61, 0x6b, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x3d, 0x0a, 0x15, 0x4d, 0x61, 0x6b, - 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x12, 0x2c, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5d, + 0x0a, 0x18, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, + 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x2f, 0x0a, 0x08, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x0a, + 0x18, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x2d, 0x0a, 0x07, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5f, 0x0a, 0x19, 0x53, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x30, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x0a, 0x16, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x2e, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x52, 0x65, 0x61, 0x64, + 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x5e, 0x0a, 0x17, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x39, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x72, 0x69, 0x12, 0x31, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0x5c, 0x0a, 0x17, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x75, 0x72, 0x69, 0x12, 0x2f, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x60, 0x0a, 0x18, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x75, 0x72, 0x69, 0x12, 0x32, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0x3c, 0x0a, 0x14, 0x52, 0x65, 0x61, 0x64, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, + 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0xbc, 0x01, 0x0a, 0x08, 0x44, 0x69, 0x72, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x44, 0x69, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x88, + 0x01, 0x01, 0x12, 0x45, 0x0a, 0x0d, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x53, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x01, 0x52, 0x0d, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, + 0x64, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x53, + 0x74, 0x61, 0x6d, 0x70, 0x22, 0x62, 0x0a, 0x15, 0x52, 0x65, 0x61, 0x64, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x22, 0x3a, 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x69, 0x6c, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, + 0x61, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x44, 0x69, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x3c, 0x0a, 0x14, 0x4d, 0x61, 0x6b, 0x65, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, + 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x3d, 0x0a, 0x15, 0x4d, 0x61, 0x6b, 0x65, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, + 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x39, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, + 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, + 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x22, 0x3a, 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x5b, 0x0a, 0x11, + 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x46, 0x69, + 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, + 0x77, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5c, 0x0a, 0x12, 0x52, 0x65, 0x6e, + 0x61, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, + 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x46, + 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x4a, 0x0a, 0x0e, 0x50, 0x75, 0x74, 0x46, 0x69, + 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, - 0x5b, 0x0a, 0x11, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, - 0x77, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5c, 0x0a, 0x12, - 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x4b, 0x0a, 0x0f, 0x50, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x22, 0x36, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x46, - 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, - 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x4a, 0x0a, 0x0e, 0x50, 0x75, + 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x5f, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x46, + 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, + 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x37, 0x0a, 0x0f, 0x42, 0x6f, 0x6f, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, - 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4b, 0x0a, 0x0f, 0x50, 0x75, 0x74, 0x46, 0x69, 0x6c, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, - 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x73, - 0x69, 0x7a, 0x65, 0x22, 0x36, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x5f, 0x0a, 0x0f, 0x47, - 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, - 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x37, 0x0a, 0x0f, - 0x42, 0x6f, 0x6f, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, - 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x38, 0x0a, 0x10, 0x42, 0x6f, 0x6f, 0x74, 0x46, 0x69, 0x6c, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, - 0x41, 0x0a, 0x0d, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, - 0x72, 0x69, 0x12, 0x1e, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0e, 0x32, 0x06, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x22, 0x5a, 0x0a, 0x0e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x1e, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x06, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x84, - 0x01, 0x0a, 0x11, 0x4e, 0x57, 0x41, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x61, 0x72, 0x67, 0x73, 0x12, 0x21, 0x0a, 0x09, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x41, 0x72, - 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x41, 0x72, 0x67, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x62, 0x69, 0x6e, 0x61, - 0x72, 0x79, 0x41, 0x72, 0x67, 0x22, 0xac, 0x02, 0x0a, 0x12, 0x4e, 0x57, 0x41, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x40, - 0x0a, 0x0a, 0x61, 0x73, 0x63, 0x69, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x4e, 0x57, 0x41, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4e, 0x57, 0x41, 0x41, 0x53, 0x43, 0x49, 0x49, - 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0a, 0x61, 0x73, 0x63, 0x69, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, - 0x12, 0x27, 0x0a, 0x0c, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, - 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x88, 0x01, 0x01, 0x1a, 0x87, 0x01, 0x0a, 0x0c, 0x4e, 0x57, - 0x41, 0x41, 0x53, 0x43, 0x49, 0x49, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x3e, 0x0a, 0x04, 0x69, 0x74, - 0x65, 0x6d, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x4e, 0x57, 0x41, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4e, 0x57, - 0x41, 0x41, 0x53, 0x43, 0x49, 0x49, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x1a, 0x37, 0x0a, 0x09, 0x49, 0x74, - 0x65, 0x6d, 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, 0x0f, 0x0a, 0x0d, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x52, 0x65, - 0x70, 0x6c, 0x61, 0x79, 0x2a, 0x33, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x78, 0x50, 0x61, 0x6b, 0x50, 0x72, 0x6f, - 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x6e, 0x65, 0x73, 0x41, 0x42, 0x75, 0x73, 0x10, 0x01, - 0x12, 0x07, 0x0a, 0x03, 0x52, 0x61, 0x77, 0x10, 0x02, 0x2a, 0x3f, 0x0a, 0x0d, 0x4d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x69, 0x52, 0x4f, 0x4d, - 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x6f, 0x52, 0x4f, 0x4d, 0x10, 0x02, 0x12, 0x0b, 0x0a, - 0x07, 0x45, 0x78, 0x48, 0x69, 0x52, 0x4f, 0x4d, 0x10, 0x03, 0x2a, 0xb3, 0x02, 0x0a, 0x10, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, - 0x08, 0x0a, 0x04, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x65, 0x61, - 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x65, 0x41, 0x53, 0x4d, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x65, - 0x73, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x10, 0x04, 0x12, 0x19, 0x0a, 0x15, 0x50, - 0x61, 0x75, 0x73, 0x65, 0x55, 0x6e, 0x70, 0x61, 0x75, 0x73, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x61, 0x75, 0x73, 0x65, 0x54, - 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x06, - 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x4d, 0x65, 0x6e, 0x75, 0x10, - 0x07, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x65, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, - 0x10, 0x08, 0x12, 0x11, 0x0a, 0x0d, 0x52, 0x65, 0x61, 0x64, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x79, 0x10, 0x0a, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x61, 0x6b, 0x65, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x10, 0x0b, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x10, 0x0c, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x65, 0x6e, 0x61, - 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x10, 0x0d, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x75, 0x74, 0x46, - 0x69, 0x6c, 0x65, 0x10, 0x0e, 0x12, 0x0b, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, - 0x10, 0x0f, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x6f, 0x6f, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x10, 0x10, - 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x57, 0x41, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x10, 0x14, - 0x2a, 0xa1, 0x01, 0x0a, 0x05, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x12, 0x10, 0x0a, - 0x0c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0x02, 0x12, - 0x0c, 0x0a, 0x08, 0x43, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x10, 0x14, 0x12, 0x0f, 0x0a, - 0x0b, 0x43, 0x6f, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x15, 0x12, 0x10, - 0x0a, 0x0c, 0x43, 0x6f, 0x72, 0x65, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x10, 0x16, - 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x6f, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x10, - 0x28, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x6f, 0x6d, 0x48, 0x61, 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, - 0x10, 0x29, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x6f, 0x6d, 0x48, 0x61, 0x73, 0x68, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x10, 0x2a, 0x2a, 0x27, 0x0a, 0x0c, 0x44, 0x69, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x79, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x10, 0x01, 0x32, 0x3d, 0x0a, - 0x07, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x0f, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xaa, 0x02, 0x0a, - 0x0d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x3a, - 0x0a, 0x0b, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x13, 0x2e, - 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x0b, 0x52, 0x65, - 0x73, 0x65, 0x74, 0x54, 0x6f, 0x4d, 0x65, 0x6e, 0x75, 0x12, 0x13, 0x2e, 0x52, 0x65, 0x73, 0x65, - 0x74, 0x54, 0x6f, 0x4d, 0x65, 0x6e, 0x75, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, - 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x4d, 0x65, 0x6e, 0x75, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x15, 0x50, 0x61, 0x75, 0x73, 0x65, 0x55, - 0x6e, 0x70, 0x61, 0x75, 0x73, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x16, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x45, - 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x55, 0x0a, 0x14, 0x50, 0x61, 0x75, 0x73, 0x65, 0x54, 0x6f, 0x67, 0x67, 0x6c, - 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x50, 0x61, 0x75, - 0x73, 0x65, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, - 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x81, 0x04, 0x0a, 0x0c, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x4c, 0x0a, 0x0d, 0x4d, 0x61, - 0x70, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x44, 0x65, - 0x74, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, - 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0a, 0x53, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x52, 0x65, 0x61, 0x64, 0x12, 0x18, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x52, - 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x19, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, - 0x0b, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x53, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, + 0x74, 0x68, 0x22, 0x38, 0x0a, 0x10, 0x42, 0x6f, 0x6f, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x41, 0x0a, 0x0d, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, + 0x1e, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, + 0x06, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x22, + 0x5a, 0x0a, 0x0e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x75, 0x72, 0x69, 0x12, 0x1e, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0e, 0x32, 0x06, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x11, + 0x4e, 0x57, 0x41, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x75, 0x72, 0x69, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, + 0x73, 0x12, 0x21, 0x0a, 0x09, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x41, 0x72, 0x67, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x41, 0x72, + 0x67, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x41, + 0x72, 0x67, 0x22, 0xac, 0x02, 0x0a, 0x12, 0x4e, 0x57, 0x41, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x40, 0x0a, 0x0a, 0x61, + 0x73, 0x63, 0x69, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x4e, 0x57, 0x41, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4e, 0x57, 0x41, 0x41, 0x53, 0x43, 0x49, 0x49, 0x49, 0x74, 0x65, + 0x6d, 0x52, 0x0a, 0x61, 0x73, 0x63, 0x69, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x27, 0x0a, + 0x0c, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x52, 0x65, 0x70, + 0x6c, 0x61, 0x79, 0x88, 0x01, 0x01, 0x1a, 0x87, 0x01, 0x0a, 0x0c, 0x4e, 0x57, 0x41, 0x41, 0x53, + 0x43, 0x49, 0x49, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x3e, 0x0a, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x4e, 0x57, 0x41, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4e, 0x57, 0x41, 0x41, 0x53, + 0x43, 0x49, 0x49, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x1a, 0x37, 0x0a, 0x09, 0x49, 0x74, 0x65, 0x6d, 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, 0x0f, 0x0a, 0x0d, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x52, 0x65, 0x70, 0x6c, 0x61, + 0x79, 0x2a, 0x33, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x78, 0x50, 0x61, 0x6b, 0x50, 0x72, 0x6f, 0x10, 0x00, 0x12, + 0x0c, 0x0a, 0x08, 0x53, 0x6e, 0x65, 0x73, 0x41, 0x42, 0x75, 0x73, 0x10, 0x01, 0x12, 0x07, 0x0a, + 0x03, 0x52, 0x61, 0x77, 0x10, 0x02, 0x2a, 0x3f, 0x0a, 0x0d, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, + 0x77, 0x6e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x69, 0x52, 0x4f, 0x4d, 0x10, 0x01, 0x12, + 0x09, 0x0a, 0x05, 0x4c, 0x6f, 0x52, 0x4f, 0x4d, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x78, + 0x48, 0x69, 0x52, 0x4f, 0x4d, 0x10, 0x03, 0x2a, 0xb3, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x08, 0x0a, 0x04, + 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x65, 0x41, 0x53, 0x4d, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x65, 0x73, 0x65, 0x74, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x10, 0x04, 0x12, 0x19, 0x0a, 0x15, 0x50, 0x61, 0x75, 0x73, + 0x65, 0x55, 0x6e, 0x70, 0x61, 0x75, 0x73, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x61, 0x75, 0x73, 0x65, 0x54, 0x6f, 0x67, 0x67, + 0x6c, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x06, 0x12, 0x0f, 0x0a, + 0x0b, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x4d, 0x65, 0x6e, 0x75, 0x10, 0x07, 0x12, 0x0f, + 0x0a, 0x0b, 0x46, 0x65, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x10, 0x08, 0x12, + 0x11, 0x0a, 0x0d, 0x52, 0x65, 0x61, 0x64, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, + 0x10, 0x0a, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x61, 0x6b, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x79, 0x10, 0x0b, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, + 0x69, 0x6c, 0x65, 0x10, 0x0c, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, + 0x69, 0x6c, 0x65, 0x10, 0x0d, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, + 0x10, 0x0e, 0x12, 0x0b, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x10, 0x0f, 0x12, + 0x0c, 0x0a, 0x08, 0x42, 0x6f, 0x6f, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x10, 0x10, 0x12, 0x0e, 0x0a, + 0x0a, 0x4e, 0x57, 0x41, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x10, 0x14, 0x2a, 0xa1, 0x01, + 0x0a, 0x05, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, + 0x43, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x10, 0x14, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x6f, + 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x15, 0x12, 0x10, 0x0a, 0x0c, 0x43, + 0x6f, 0x72, 0x65, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x10, 0x16, 0x12, 0x0f, 0x0a, + 0x0b, 0x52, 0x6f, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x10, 0x28, 0x12, 0x0f, + 0x0a, 0x0b, 0x52, 0x6f, 0x6d, 0x48, 0x61, 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, 0x10, 0x29, 0x12, + 0x10, 0x0a, 0x0c, 0x52, 0x6f, 0x6d, 0x48, 0x61, 0x73, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x10, + 0x2a, 0x2a, 0x27, 0x0a, 0x0c, 0x44, 0x69, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x10, 0x01, 0x2a, 0x3d, 0x0a, 0x0b, 0x46, 0x69, + 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x69, 0x6c, + 0x65, 0x4e, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, + 0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x69, + 0x6c, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x10, 0x02, 0x32, 0x3d, 0x0a, 0x07, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x12, 0x0f, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xaa, 0x02, 0x0a, 0x0d, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x3a, 0x0a, 0x0b, 0x52, 0x65, + 0x73, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x13, 0x2e, 0x52, 0x65, 0x73, 0x65, + 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, + 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x0b, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, + 0x6f, 0x4d, 0x65, 0x6e, 0x75, 0x12, 0x13, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x4d, + 0x65, 0x6e, 0x75, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x52, 0x65, 0x73, + 0x65, 0x74, 0x54, 0x6f, 0x4d, 0x65, 0x6e, 0x75, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x15, 0x50, 0x61, 0x75, 0x73, 0x65, 0x55, 0x6e, 0x70, 0x61, 0x75, + 0x73, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x50, 0x61, + 0x75, 0x73, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, + 0x0a, 0x14, 0x50, 0x61, 0x75, 0x73, 0x65, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x45, 0x6d, 0x75, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x54, 0x6f, + 0x67, 0x67, 0x6c, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x54, 0x6f, 0x67, 0x67, + 0x6c, 0x65, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x81, 0x04, 0x0a, 0x0c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x4c, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, + 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0a, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x52, 0x65, + 0x61, 0x64, 0x12, 0x18, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x52, 0x65, 0x61, 0x64, 0x4d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x53, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0b, 0x53, 0x69, 0x6e, + 0x67, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, + 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x40, 0x0a, 0x09, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x61, 0x64, 0x12, 0x17, + 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, + 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0a, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x12, 0x18, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x52, 0x65, 0x61, 0x64, 0x12, 0x17, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, + 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x18, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, + 0x48, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x18, + 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x09, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, - 0x61, 0x64, 0x12, 0x17, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0a, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x19, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, - 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0a, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x61, 0x64, 0x12, 0x17, 0x2e, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x61, 0x64, 0x4d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, - 0x01, 0x30, 0x01, 0x12, 0x48, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x12, 0x18, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x9b, 0x03, - 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x12, 0x40, 0x0a, 0x0d, 0x52, 0x65, 0x61, 0x64, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x79, 0x12, 0x15, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x52, 0x65, 0x61, - 0x64, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0d, 0x4d, 0x61, 0x6b, 0x65, 0x44, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x15, 0x2e, 0x4d, 0x61, 0x6b, 0x65, 0x44, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x4d, - 0x61, 0x6b, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x0a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x69, 0x6c, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x37, 0x0a, 0x0a, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x2e, - 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x13, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x07, 0x50, 0x75, 0x74, 0x46, - 0x69, 0x6c, 0x65, 0x12, 0x0f, 0x2e, 0x50, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x50, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, - 0x69, 0x6c, 0x65, 0x12, 0x0f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x08, 0x42, 0x6f, 0x6f, 0x74, - 0x46, 0x69, 0x6c, 0x65, 0x12, 0x10, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x46, 0x69, 0x6c, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x3e, 0x0a, 0x0a, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x30, 0x0a, 0x0b, 0x46, 0x65, 0x74, - 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x0e, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x44, 0x0a, 0x09, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x57, 0x41, 0x12, 0x37, 0x0a, 0x0a, 0x4e, 0x57, 0x41, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x12, 0x2e, 0x4e, 0x57, 0x41, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x4e, 0x57, 0x41, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x42, 0x3f, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x61, 0x6c, 0x74, 0x74, 0x70, 0x6f, 0x2e, 0x73, 0x6e, 0x69, 0x5a, 0x20, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x74, 0x74, 0x70, 0x6f, 0x2f, 0x73, 0x6e, - 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x73, 0x6e, 0x69, 0xaa, 0x02, 0x03, 0x53, - 0x4e, 0x49, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x9b, 0x03, 0x0a, 0x10, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x40, + 0x0a, 0x0d, 0x52, 0x65, 0x61, 0x64, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, + 0x15, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x44, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x40, 0x0a, 0x0d, 0x4d, 0x61, 0x6b, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x79, 0x12, 0x15, 0x2e, 0x4d, 0x61, 0x6b, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x4d, 0x61, 0x6b, 0x65, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x37, 0x0a, 0x0a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, + 0x12, 0x12, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x69, 0x6c, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x0a, 0x52, + 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x2e, 0x52, 0x65, 0x6e, 0x61, + 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, + 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x07, 0x50, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x12, + 0x0f, 0x2e, 0x50, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x10, 0x2e, 0x50, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x12, + 0x0f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x10, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x08, 0x42, 0x6f, 0x6f, 0x74, 0x46, 0x69, 0x6c, 0x65, + 0x12, 0x10, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x3e, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x30, 0x0a, 0x0b, 0x46, 0x65, 0x74, 0x63, 0x68, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x73, 0x12, 0x0e, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x44, 0x0a, 0x09, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x4e, 0x57, 0x41, 0x12, 0x37, 0x0a, 0x0a, 0x4e, 0x57, 0x41, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x12, 0x12, 0x2e, 0x4e, 0x57, 0x41, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x4e, 0x57, 0x41, 0x43, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x3f, 0x0a, + 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x61, 0x6c, 0x74, 0x74, + 0x70, 0x6f, 0x2e, 0x73, 0x6e, 0x69, 0x5a, 0x20, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x74, 0x74, 0x70, 0x6f, 0x2f, 0x73, 0x6e, 0x69, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x73, 0x6e, 0x69, 0xaa, 0x02, 0x03, 0x53, 0x4e, 0x49, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3454,7 +3535,7 @@ func file_sni_proto_rawDescGZIP() []byte { return file_sni_proto_rawDescData } -var file_sni_proto_enumTypes = make([]protoimpl.EnumInfo, 5) +var file_sni_proto_enumTypes = make([]protoimpl.EnumInfo, 6) var file_sni_proto_msgTypes = make([]protoimpl.MessageInfo, 46) var file_sni_proto_goTypes = []interface{}{ (AddressSpace)(0), // 0: AddressSpace @@ -3462,55 +3543,57 @@ var file_sni_proto_goTypes = []interface{}{ (DeviceCapability)(0), // 2: DeviceCapability (Field)(0), // 3: Field (DirEntryType)(0), // 4: DirEntryType - (*DevicesRequest)(nil), // 5: DevicesRequest - (*DevicesResponse)(nil), // 6: DevicesResponse - (*ResetSystemRequest)(nil), // 7: ResetSystemRequest - (*ResetSystemResponse)(nil), // 8: ResetSystemResponse - (*ResetToMenuRequest)(nil), // 9: ResetToMenuRequest - (*ResetToMenuResponse)(nil), // 10: ResetToMenuResponse - (*PauseEmulationRequest)(nil), // 11: PauseEmulationRequest - (*PauseEmulationResponse)(nil), // 12: PauseEmulationResponse - (*PauseToggleEmulationRequest)(nil), // 13: PauseToggleEmulationRequest - (*PauseToggleEmulationResponse)(nil), // 14: PauseToggleEmulationResponse - (*DetectMemoryMappingRequest)(nil), // 15: DetectMemoryMappingRequest - (*DetectMemoryMappingResponse)(nil), // 16: DetectMemoryMappingResponse - (*ReadMemoryRequest)(nil), // 17: ReadMemoryRequest - (*ReadMemoryResponse)(nil), // 18: ReadMemoryResponse - (*WriteMemoryRequest)(nil), // 19: WriteMemoryRequest - (*WriteMemoryResponse)(nil), // 20: WriteMemoryResponse - (*SingleReadMemoryRequest)(nil), // 21: SingleReadMemoryRequest - (*SingleReadMemoryResponse)(nil), // 22: SingleReadMemoryResponse - (*SingleWriteMemoryRequest)(nil), // 23: SingleWriteMemoryRequest - (*SingleWriteMemoryResponse)(nil), // 24: SingleWriteMemoryResponse - (*MultiReadMemoryRequest)(nil), // 25: MultiReadMemoryRequest - (*MultiReadMemoryResponse)(nil), // 26: MultiReadMemoryResponse - (*MultiWriteMemoryRequest)(nil), // 27: MultiWriteMemoryRequest - (*MultiWriteMemoryResponse)(nil), // 28: MultiWriteMemoryResponse - (*ReadDirectoryRequest)(nil), // 29: ReadDirectoryRequest - (*DirEntry)(nil), // 30: DirEntry - (*ReadDirectoryResponse)(nil), // 31: ReadDirectoryResponse - (*MakeDirectoryRequest)(nil), // 32: MakeDirectoryRequest - (*MakeDirectoryResponse)(nil), // 33: MakeDirectoryResponse - (*RemoveFileRequest)(nil), // 34: RemoveFileRequest - (*RemoveFileResponse)(nil), // 35: RemoveFileResponse - (*RenameFileRequest)(nil), // 36: RenameFileRequest - (*RenameFileResponse)(nil), // 37: RenameFileResponse - (*PutFileRequest)(nil), // 38: PutFileRequest - (*PutFileResponse)(nil), // 39: PutFileResponse - (*GetFileRequest)(nil), // 40: GetFileRequest - (*GetFileResponse)(nil), // 41: GetFileResponse - (*BootFileRequest)(nil), // 42: BootFileRequest - (*BootFileResponse)(nil), // 43: BootFileResponse - (*FieldsRequest)(nil), // 44: FieldsRequest - (*FieldsResponse)(nil), // 45: FieldsResponse - (*NWACommandRequest)(nil), // 46: NWACommandRequest - (*NWACommandResponse)(nil), // 47: NWACommandResponse - (*DevicesResponse_Device)(nil), // 48: DevicesResponse.Device - (*NWACommandResponse_NWAASCIIItem)(nil), // 49: NWACommandResponse.NWAASCIIItem - nil, // 50: NWACommandResponse.NWAASCIIItem.ItemEntry + (FileDetails)(0), // 5: FileDetails + (*DevicesRequest)(nil), // 6: DevicesRequest + (*DevicesResponse)(nil), // 7: DevicesResponse + (*ResetSystemRequest)(nil), // 8: ResetSystemRequest + (*ResetSystemResponse)(nil), // 9: ResetSystemResponse + (*ResetToMenuRequest)(nil), // 10: ResetToMenuRequest + (*ResetToMenuResponse)(nil), // 11: ResetToMenuResponse + (*PauseEmulationRequest)(nil), // 12: PauseEmulationRequest + (*PauseEmulationResponse)(nil), // 13: PauseEmulationResponse + (*PauseToggleEmulationRequest)(nil), // 14: PauseToggleEmulationRequest + (*PauseToggleEmulationResponse)(nil), // 15: PauseToggleEmulationResponse + (*DetectMemoryMappingRequest)(nil), // 16: DetectMemoryMappingRequest + (*DetectMemoryMappingResponse)(nil), // 17: DetectMemoryMappingResponse + (*ReadMemoryRequest)(nil), // 18: ReadMemoryRequest + (*ReadMemoryResponse)(nil), // 19: ReadMemoryResponse + (*WriteMemoryRequest)(nil), // 20: WriteMemoryRequest + (*WriteMemoryResponse)(nil), // 21: WriteMemoryResponse + (*SingleReadMemoryRequest)(nil), // 22: SingleReadMemoryRequest + (*SingleReadMemoryResponse)(nil), // 23: SingleReadMemoryResponse + (*SingleWriteMemoryRequest)(nil), // 24: SingleWriteMemoryRequest + (*SingleWriteMemoryResponse)(nil), // 25: SingleWriteMemoryResponse + (*MultiReadMemoryRequest)(nil), // 26: MultiReadMemoryRequest + (*MultiReadMemoryResponse)(nil), // 27: MultiReadMemoryResponse + (*MultiWriteMemoryRequest)(nil), // 28: MultiWriteMemoryRequest + (*MultiWriteMemoryResponse)(nil), // 29: MultiWriteMemoryResponse + (*ReadDirectoryRequest)(nil), // 30: ReadDirectoryRequest + (*DirEntry)(nil), // 31: DirEntry + (*ReadDirectoryResponse)(nil), // 32: ReadDirectoryResponse + (*MakeDirectoryRequest)(nil), // 33: MakeDirectoryRequest + (*MakeDirectoryResponse)(nil), // 34: MakeDirectoryResponse + (*RemoveFileRequest)(nil), // 35: RemoveFileRequest + (*RemoveFileResponse)(nil), // 36: RemoveFileResponse + (*RenameFileRequest)(nil), // 37: RenameFileRequest + (*RenameFileResponse)(nil), // 38: RenameFileResponse + (*PutFileRequest)(nil), // 39: PutFileRequest + (*PutFileResponse)(nil), // 40: PutFileResponse + (*GetFileRequest)(nil), // 41: GetFileRequest + (*GetFileResponse)(nil), // 42: GetFileResponse + (*BootFileRequest)(nil), // 43: BootFileRequest + (*BootFileResponse)(nil), // 44: BootFileResponse + (*FieldsRequest)(nil), // 45: FieldsRequest + (*FieldsResponse)(nil), // 46: FieldsResponse + (*NWACommandRequest)(nil), // 47: NWACommandRequest + (*NWACommandResponse)(nil), // 48: NWACommandResponse + (*DevicesResponse_Device)(nil), // 49: DevicesResponse.Device + (*NWACommandResponse_NWAASCIIItem)(nil), // 50: NWACommandResponse.NWAASCIIItem + nil, // 51: NWACommandResponse.NWAASCIIItem.ItemEntry + (*timestamppb.Timestamp)(nil), // 52: google.protobuf.Timestamp } var file_sni_proto_depIdxs = []int32{ - 48, // 0: DevicesResponse.devices:type_name -> DevicesResponse.Device + 49, // 0: DevicesResponse.devices:type_name -> DevicesResponse.Device 1, // 1: DetectMemoryMappingRequest.fallbackMemoryMapping:type_name -> MemoryMapping 1, // 2: DetectMemoryMappingResponse.memoryMapping:type_name -> MemoryMapping 0, // 3: ReadMemoryRequest.requestAddressSpace:type_name -> AddressSpace @@ -3523,69 +3606,70 @@ var file_sni_proto_depIdxs = []int32{ 0, // 10: WriteMemoryResponse.requestAddressSpace:type_name -> AddressSpace 1, // 11: WriteMemoryResponse.requestMemoryMapping:type_name -> MemoryMapping 0, // 12: WriteMemoryResponse.deviceAddressSpace:type_name -> AddressSpace - 17, // 13: SingleReadMemoryRequest.request:type_name -> ReadMemoryRequest - 18, // 14: SingleReadMemoryResponse.response:type_name -> ReadMemoryResponse - 19, // 15: SingleWriteMemoryRequest.request:type_name -> WriteMemoryRequest - 20, // 16: SingleWriteMemoryResponse.response:type_name -> WriteMemoryResponse - 17, // 17: MultiReadMemoryRequest.requests:type_name -> ReadMemoryRequest - 18, // 18: MultiReadMemoryResponse.responses:type_name -> ReadMemoryResponse - 19, // 19: MultiWriteMemoryRequest.requests:type_name -> WriteMemoryRequest - 20, // 20: MultiWriteMemoryResponse.responses:type_name -> WriteMemoryResponse + 18, // 13: SingleReadMemoryRequest.request:type_name -> ReadMemoryRequest + 19, // 14: SingleReadMemoryResponse.response:type_name -> ReadMemoryResponse + 20, // 15: SingleWriteMemoryRequest.request:type_name -> WriteMemoryRequest + 21, // 16: SingleWriteMemoryResponse.response:type_name -> WriteMemoryResponse + 18, // 17: MultiReadMemoryRequest.requests:type_name -> ReadMemoryRequest + 19, // 18: MultiReadMemoryResponse.responses:type_name -> ReadMemoryResponse + 20, // 19: MultiWriteMemoryRequest.requests:type_name -> WriteMemoryRequest + 21, // 20: MultiWriteMemoryResponse.responses:type_name -> WriteMemoryResponse 4, // 21: DirEntry.type:type_name -> DirEntryType - 30, // 22: ReadDirectoryResponse.entries:type_name -> DirEntry - 3, // 23: FieldsRequest.fields:type_name -> Field - 3, // 24: FieldsResponse.fields:type_name -> Field - 49, // 25: NWACommandResponse.asciiReply:type_name -> NWACommandResponse.NWAASCIIItem - 2, // 26: DevicesResponse.Device.capabilities:type_name -> DeviceCapability - 0, // 27: DevicesResponse.Device.defaultAddressSpace:type_name -> AddressSpace - 50, // 28: NWACommandResponse.NWAASCIIItem.item:type_name -> NWACommandResponse.NWAASCIIItem.ItemEntry - 5, // 29: Devices.ListDevices:input_type -> DevicesRequest - 7, // 30: DeviceControl.ResetSystem:input_type -> ResetSystemRequest - 9, // 31: DeviceControl.ResetToMenu:input_type -> ResetToMenuRequest - 11, // 32: DeviceControl.PauseUnpauseEmulation:input_type -> PauseEmulationRequest - 13, // 33: DeviceControl.PauseToggleEmulation:input_type -> PauseToggleEmulationRequest - 15, // 34: DeviceMemory.MappingDetect:input_type -> DetectMemoryMappingRequest - 21, // 35: DeviceMemory.SingleRead:input_type -> SingleReadMemoryRequest - 23, // 36: DeviceMemory.SingleWrite:input_type -> SingleWriteMemoryRequest - 25, // 37: DeviceMemory.MultiRead:input_type -> MultiReadMemoryRequest - 27, // 38: DeviceMemory.MultiWrite:input_type -> MultiWriteMemoryRequest - 25, // 39: DeviceMemory.StreamRead:input_type -> MultiReadMemoryRequest - 27, // 40: DeviceMemory.StreamWrite:input_type -> MultiWriteMemoryRequest - 29, // 41: DeviceFilesystem.ReadDirectory:input_type -> ReadDirectoryRequest - 32, // 42: DeviceFilesystem.MakeDirectory:input_type -> MakeDirectoryRequest - 34, // 43: DeviceFilesystem.RemoveFile:input_type -> RemoveFileRequest - 36, // 44: DeviceFilesystem.RenameFile:input_type -> RenameFileRequest - 38, // 45: DeviceFilesystem.PutFile:input_type -> PutFileRequest - 40, // 46: DeviceFilesystem.GetFile:input_type -> GetFileRequest - 42, // 47: DeviceFilesystem.BootFile:input_type -> BootFileRequest - 44, // 48: DeviceInfo.FetchFields:input_type -> FieldsRequest - 46, // 49: DeviceNWA.NWACommand:input_type -> NWACommandRequest - 6, // 50: Devices.ListDevices:output_type -> DevicesResponse - 8, // 51: DeviceControl.ResetSystem:output_type -> ResetSystemResponse - 10, // 52: DeviceControl.ResetToMenu:output_type -> ResetToMenuResponse - 12, // 53: DeviceControl.PauseUnpauseEmulation:output_type -> PauseEmulationResponse - 14, // 54: DeviceControl.PauseToggleEmulation:output_type -> PauseToggleEmulationResponse - 16, // 55: DeviceMemory.MappingDetect:output_type -> DetectMemoryMappingResponse - 22, // 56: DeviceMemory.SingleRead:output_type -> SingleReadMemoryResponse - 24, // 57: DeviceMemory.SingleWrite:output_type -> SingleWriteMemoryResponse - 26, // 58: DeviceMemory.MultiRead:output_type -> MultiReadMemoryResponse - 28, // 59: DeviceMemory.MultiWrite:output_type -> MultiWriteMemoryResponse - 26, // 60: DeviceMemory.StreamRead:output_type -> MultiReadMemoryResponse - 28, // 61: DeviceMemory.StreamWrite:output_type -> MultiWriteMemoryResponse - 31, // 62: DeviceFilesystem.ReadDirectory:output_type -> ReadDirectoryResponse - 33, // 63: DeviceFilesystem.MakeDirectory:output_type -> MakeDirectoryResponse - 35, // 64: DeviceFilesystem.RemoveFile:output_type -> RemoveFileResponse - 37, // 65: DeviceFilesystem.RenameFile:output_type -> RenameFileResponse - 39, // 66: DeviceFilesystem.PutFile:output_type -> PutFileResponse - 41, // 67: DeviceFilesystem.GetFile:output_type -> GetFileResponse - 43, // 68: DeviceFilesystem.BootFile:output_type -> BootFileResponse - 45, // 69: DeviceInfo.FetchFields:output_type -> FieldsResponse - 47, // 70: DeviceNWA.NWACommand:output_type -> NWACommandResponse - 50, // [50:71] is the sub-list for method output_type - 29, // [29:50] is the sub-list for method input_type - 29, // [29:29] is the sub-list for extension type_name - 29, // [29:29] is the sub-list for extension extendee - 0, // [0:29] is the sub-list for field type_name + 52, // 22: DirEntry.modifiedStamp:type_name -> google.protobuf.Timestamp + 31, // 23: ReadDirectoryResponse.entries:type_name -> DirEntry + 3, // 24: FieldsRequest.fields:type_name -> Field + 3, // 25: FieldsResponse.fields:type_name -> Field + 50, // 26: NWACommandResponse.asciiReply:type_name -> NWACommandResponse.NWAASCIIItem + 2, // 27: DevicesResponse.Device.capabilities:type_name -> DeviceCapability + 0, // 28: DevicesResponse.Device.defaultAddressSpace:type_name -> AddressSpace + 51, // 29: NWACommandResponse.NWAASCIIItem.item:type_name -> NWACommandResponse.NWAASCIIItem.ItemEntry + 6, // 30: Devices.ListDevices:input_type -> DevicesRequest + 8, // 31: DeviceControl.ResetSystem:input_type -> ResetSystemRequest + 10, // 32: DeviceControl.ResetToMenu:input_type -> ResetToMenuRequest + 12, // 33: DeviceControl.PauseUnpauseEmulation:input_type -> PauseEmulationRequest + 14, // 34: DeviceControl.PauseToggleEmulation:input_type -> PauseToggleEmulationRequest + 16, // 35: DeviceMemory.MappingDetect:input_type -> DetectMemoryMappingRequest + 22, // 36: DeviceMemory.SingleRead:input_type -> SingleReadMemoryRequest + 24, // 37: DeviceMemory.SingleWrite:input_type -> SingleWriteMemoryRequest + 26, // 38: DeviceMemory.MultiRead:input_type -> MultiReadMemoryRequest + 28, // 39: DeviceMemory.MultiWrite:input_type -> MultiWriteMemoryRequest + 26, // 40: DeviceMemory.StreamRead:input_type -> MultiReadMemoryRequest + 28, // 41: DeviceMemory.StreamWrite:input_type -> MultiWriteMemoryRequest + 30, // 42: DeviceFilesystem.ReadDirectory:input_type -> ReadDirectoryRequest + 33, // 43: DeviceFilesystem.MakeDirectory:input_type -> MakeDirectoryRequest + 35, // 44: DeviceFilesystem.RemoveFile:input_type -> RemoveFileRequest + 37, // 45: DeviceFilesystem.RenameFile:input_type -> RenameFileRequest + 39, // 46: DeviceFilesystem.PutFile:input_type -> PutFileRequest + 41, // 47: DeviceFilesystem.GetFile:input_type -> GetFileRequest + 43, // 48: DeviceFilesystem.BootFile:input_type -> BootFileRequest + 45, // 49: DeviceInfo.FetchFields:input_type -> FieldsRequest + 47, // 50: DeviceNWA.NWACommand:input_type -> NWACommandRequest + 7, // 51: Devices.ListDevices:output_type -> DevicesResponse + 9, // 52: DeviceControl.ResetSystem:output_type -> ResetSystemResponse + 11, // 53: DeviceControl.ResetToMenu:output_type -> ResetToMenuResponse + 13, // 54: DeviceControl.PauseUnpauseEmulation:output_type -> PauseEmulationResponse + 15, // 55: DeviceControl.PauseToggleEmulation:output_type -> PauseToggleEmulationResponse + 17, // 56: DeviceMemory.MappingDetect:output_type -> DetectMemoryMappingResponse + 23, // 57: DeviceMemory.SingleRead:output_type -> SingleReadMemoryResponse + 25, // 58: DeviceMemory.SingleWrite:output_type -> SingleWriteMemoryResponse + 27, // 59: DeviceMemory.MultiRead:output_type -> MultiReadMemoryResponse + 29, // 60: DeviceMemory.MultiWrite:output_type -> MultiWriteMemoryResponse + 27, // 61: DeviceMemory.StreamRead:output_type -> MultiReadMemoryResponse + 29, // 62: DeviceMemory.StreamWrite:output_type -> MultiWriteMemoryResponse + 32, // 63: DeviceFilesystem.ReadDirectory:output_type -> ReadDirectoryResponse + 34, // 64: DeviceFilesystem.MakeDirectory:output_type -> MakeDirectoryResponse + 36, // 65: DeviceFilesystem.RemoveFile:output_type -> RemoveFileResponse + 38, // 66: DeviceFilesystem.RenameFile:output_type -> RenameFileResponse + 40, // 67: DeviceFilesystem.PutFile:output_type -> PutFileResponse + 42, // 68: DeviceFilesystem.GetFile:output_type -> GetFileResponse + 44, // 69: DeviceFilesystem.BootFile:output_type -> BootFileResponse + 46, // 70: DeviceInfo.FetchFields:output_type -> FieldsResponse + 48, // 71: DeviceNWA.NWACommand:output_type -> NWACommandResponse + 51, // [51:72] is the sub-list for method output_type + 30, // [30:51] is the sub-list for method input_type + 30, // [30:30] is the sub-list for extension type_name + 30, // [30:30] is the sub-list for extension extendee + 0, // [0:30] is the sub-list for field type_name } func init() { file_sni_proto_init() } @@ -4136,6 +4220,7 @@ func file_sni_proto_init() { } } file_sni_proto_msgTypes[10].OneofWrappers = []interface{}{} + file_sni_proto_msgTypes[25].OneofWrappers = []interface{}{} file_sni_proto_msgTypes[41].OneofWrappers = []interface{}{} file_sni_proto_msgTypes[42].OneofWrappers = []interface{}{} type x struct{} @@ -4143,7 +4228,7 @@ func file_sni_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_sni_proto_rawDesc, - NumEnums: 5, + NumEnums: 6, NumMessages: 46, NumExtensions: 0, NumServices: 6, diff --git a/protos/sni/sni.proto b/protos/sni/sni.proto index 095fe9d..b4a6fd1 100644 --- a/protos/sni/sni.proto +++ b/protos/sni/sni.proto @@ -4,6 +4,8 @@ option go_package = "github.com/alttpo/sni/protos/sni"; option csharp_namespace = "SNI"; option java_package = "com.github.alttpo.sni"; +import "google/protobuf/timestamp.proto"; + ////////////////////////////////////////////////////////////////////////////////////////////////// // services ////////////////////////////////////////////////////////////////////////////////////////////////// @@ -318,6 +320,16 @@ enum DirEntryType { message DirEntry { string name = 1; DirEntryType type = 2; + optional uint32 size = 3; + optional google.protobuf.Timestamp modifiedStamp = 4; +} + +// Bitfield, 1, 2, 4, etc +enum FileDetails +{ + FileNoDetails = 0; + FileSize = 1; + FileStamp = 2; } message ReadDirectoryResponse { diff --git a/protos/sni/sni_grpc.pb.go b/protos/sni/sni_grpc.pb.go index 8709a2b..89f750b 100644 --- a/protos/sni/sni_grpc.pb.go +++ b/protos/sni/sni_grpc.pb.go @@ -312,7 +312,7 @@ var DeviceControl_ServiceDesc = grpc.ServiceDesc{ // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type DeviceMemoryClient interface { - // detect the current memory mapping for the given device by reading $00:FFB0 header: + // detect the current memory mapping for the given device by reading 00:FFB0 header: MappingDetect(ctx context.Context, in *DetectMemoryMappingRequest, opts ...grpc.CallOption) (*DetectMemoryMappingResponse, error) // read a single memory segment with a given size from the given device: SingleRead(ctx context.Context, in *SingleReadMemoryRequest, opts ...grpc.CallOption) (*SingleReadMemoryResponse, error) @@ -447,7 +447,7 @@ func (x *deviceMemoryStreamWriteClient) Recv() (*MultiWriteMemoryResponse, error // All implementations must embed UnimplementedDeviceMemoryServer // for forward compatibility type DeviceMemoryServer interface { - // detect the current memory mapping for the given device by reading $00:FFB0 header: + // detect the current memory mapping for the given device by reading 00:FFB0 header: MappingDetect(context.Context, *DetectMemoryMappingRequest) (*DetectMemoryMappingResponse, error) // read a single memory segment with a given size from the given device: SingleRead(context.Context, *SingleReadMemoryRequest) (*SingleReadMemoryResponse, error) diff --git a/services/grpcimpl/filesystem.go b/services/grpcimpl/filesystem.go index f5b9c92..9893df5 100644 --- a/services/grpcimpl/filesystem.go +++ b/services/grpcimpl/filesystem.go @@ -8,6 +8,7 @@ import ( "net/url" "sni/devices" "sni/protos/sni" + "google.golang.org/protobuf/types/known/timestamppb" ) type DeviceFilesystem struct { @@ -47,6 +48,11 @@ func (d *DeviceFilesystem) ReadDirectory(ctx context.Context, request *sni.ReadD grsp.Entries[i] = &sni.DirEntry{ Name: file.Name, Type: file.Type, + Size: file.Size, + } + + if file.ModifiedTime != nil { + grsp.Entries[i].ModifiedStamp = timestamppb.New(*file.ModifiedTime) } } return