From fb37086e9b23ef91de892c02b5902d0e62200067 Mon Sep 17 00:00:00 2001 From: mytja Date: Sat, 28 Oct 2023 00:27:56 +0200 Subject: [PATCH] =?UTF-8?q?[backend]=20zgodnji=20za=C4=8Detek=20runde?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/messages/messages.pb.go | 1225 ++++++++++++---------- backend/internal/ws/client.go | 3 + backend/internal/ws/gameend.go | 13 + backend/internal/ws/gamestart.go | 52 + backend/internal/ws/results.go | 22 +- backend/internal/ws/types.go | 2 + backend/main.go | 4 + 7 files changed, 742 insertions(+), 579 deletions(-) diff --git a/backend/internal/messages/messages.pb.go b/backend/internal/messages/messages.pb.go index 19c42e4..f62111b 100644 --- a/backend/internal/messages/messages.pb.go +++ b/backend/internal/messages/messages.pb.go @@ -503,6 +503,44 @@ func (x *ReplaySelectGame) GetGame() int32 { return 0 } +type StartEarly struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *StartEarly) Reset() { + *x = StartEarly{} + if protoimpl.UnsafeEnabled { + mi := &file_messages_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartEarly) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartEarly) ProtoMessage() {} + +func (x *StartEarly) ProtoReflect() protoreflect.Message { + mi := &file_messages_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartEarly.ProtoReflect.Descriptor instead. +func (*StartEarly) Descriptor() ([]byte, []int) { + return file_messages_proto_rawDescGZIP(), []int{12} +} + type GameInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -516,7 +554,7 @@ type GameInfo struct { func (x *GameInfo) Reset() { *x = GameInfo{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[12] + mi := &file_messages_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -529,7 +567,7 @@ func (x *GameInfo) String() string { func (*GameInfo) ProtoMessage() {} func (x *GameInfo) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[12] + mi := &file_messages_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -542,7 +580,7 @@ func (x *GameInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use GameInfo.ProtoReflect.Descriptor instead. func (*GameInfo) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{12} + return file_messages_proto_rawDescGZIP(), []int{13} } func (x *GameInfo) GetGamesPlayed() int32 { @@ -581,7 +619,7 @@ type GameEnd struct { func (x *GameEnd) Reset() { *x = GameEnd{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[13] + mi := &file_messages_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -594,7 +632,7 @@ func (x *GameEnd) String() string { func (*GameEnd) ProtoMessage() {} func (x *GameEnd) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[13] + mi := &file_messages_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -607,7 +645,7 @@ func (x *GameEnd) ProtoReflect() protoreflect.Message { // Deprecated: Use GameEnd.ProtoReflect.Descriptor instead. func (*GameEnd) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{13} + return file_messages_proto_rawDescGZIP(), []int{14} } func (m *GameEnd) GetType() isGameEnd_Type { @@ -664,7 +702,7 @@ type Connection struct { func (x *Connection) Reset() { *x = Connection{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[14] + mi := &file_messages_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -677,7 +715,7 @@ func (x *Connection) String() string { func (*Connection) ProtoMessage() {} func (x *Connection) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[14] + mi := &file_messages_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -690,7 +728,7 @@ func (x *Connection) ProtoReflect() protoreflect.Message { // Deprecated: Use Connection.ProtoReflect.Descriptor instead. func (*Connection) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{14} + return file_messages_proto_rawDescGZIP(), []int{15} } func (x *Connection) GetRating() int32 { @@ -761,7 +799,7 @@ type Licitiranje struct { func (x *Licitiranje) Reset() { *x = Licitiranje{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[15] + mi := &file_messages_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -774,7 +812,7 @@ func (x *Licitiranje) String() string { func (*Licitiranje) ProtoMessage() {} func (x *Licitiranje) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[15] + mi := &file_messages_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -787,7 +825,7 @@ func (x *Licitiranje) ProtoReflect() protoreflect.Message { // Deprecated: Use Licitiranje.ProtoReflect.Descriptor instead. func (*Licitiranje) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{15} + return file_messages_proto_rawDescGZIP(), []int{16} } func (x *Licitiranje) GetType() int32 { @@ -806,7 +844,7 @@ type LicitiranjeStart struct { func (x *LicitiranjeStart) Reset() { *x = LicitiranjeStart{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[16] + mi := &file_messages_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -819,7 +857,7 @@ func (x *LicitiranjeStart) String() string { func (*LicitiranjeStart) ProtoMessage() {} func (x *LicitiranjeStart) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[16] + mi := &file_messages_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -832,7 +870,7 @@ func (x *LicitiranjeStart) ProtoReflect() protoreflect.Message { // Deprecated: Use LicitiranjeStart.ProtoReflect.Descriptor instead. func (*LicitiranjeStart) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{16} + return file_messages_proto_rawDescGZIP(), []int{17} } type Card struct { @@ -854,7 +892,7 @@ type Card struct { func (x *Card) Reset() { *x = Card{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[17] + mi := &file_messages_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -867,7 +905,7 @@ func (x *Card) String() string { func (*Card) ProtoMessage() {} func (x *Card) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[17] + mi := &file_messages_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -880,7 +918,7 @@ func (x *Card) ProtoReflect() protoreflect.Message { // Deprecated: Use Card.ProtoReflect.Descriptor instead. func (*Card) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{17} + return file_messages_proto_rawDescGZIP(), []int{18} } func (x *Card) GetId() string { @@ -971,7 +1009,7 @@ type GameStartCountdown struct { func (x *GameStartCountdown) Reset() { *x = GameStartCountdown{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[18] + mi := &file_messages_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -984,7 +1022,7 @@ func (x *GameStartCountdown) String() string { func (*GameStartCountdown) ProtoMessage() {} func (x *GameStartCountdown) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[18] + mi := &file_messages_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -997,7 +1035,7 @@ func (x *GameStartCountdown) ProtoReflect() protoreflect.Message { // Deprecated: Use GameStartCountdown.ProtoReflect.Descriptor instead. func (*GameStartCountdown) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{18} + return file_messages_proto_rawDescGZIP(), []int{19} } func (x *GameStartCountdown) GetCountdown() int32 { @@ -1020,7 +1058,7 @@ type User struct { func (x *User) Reset() { *x = User{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[19] + mi := &file_messages_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1033,7 +1071,7 @@ func (x *User) String() string { func (*User) ProtoMessage() {} func (x *User) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[19] + mi := &file_messages_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1046,7 +1084,7 @@ func (x *User) ProtoReflect() protoreflect.Message { // Deprecated: Use User.ProtoReflect.Descriptor instead. func (*User) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{19} + return file_messages_proto_rawDescGZIP(), []int{20} } func (x *User) GetId() string { @@ -1102,7 +1140,7 @@ type ResultsUser struct { func (x *ResultsUser) Reset() { *x = ResultsUser{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[20] + mi := &file_messages_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1115,7 +1153,7 @@ func (x *ResultsUser) String() string { func (*ResultsUser) ProtoMessage() {} func (x *ResultsUser) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[20] + mi := &file_messages_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1128,7 +1166,7 @@ func (x *ResultsUser) ProtoReflect() protoreflect.Message { // Deprecated: Use ResultsUser.ProtoReflect.Descriptor instead. func (*ResultsUser) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{20} + return file_messages_proto_rawDescGZIP(), []int{21} } func (x *ResultsUser) GetUser() []*User { @@ -1299,7 +1337,7 @@ type Stih struct { func (x *Stih) Reset() { *x = Stih{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[21] + mi := &file_messages_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1312,7 +1350,7 @@ func (x *Stih) String() string { func (*Stih) ProtoMessage() {} func (x *Stih) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[21] + mi := &file_messages_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1325,7 +1363,7 @@ func (x *Stih) ProtoReflect() protoreflect.Message { // Deprecated: Use Stih.ProtoReflect.Descriptor instead. func (*Stih) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{21} + return file_messages_proto_rawDescGZIP(), []int{22} } func (x *Stih) GetCard() []*Card { @@ -1368,7 +1406,7 @@ type Results struct { func (x *Results) Reset() { *x = Results{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[22] + mi := &file_messages_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1381,7 +1419,7 @@ func (x *Results) String() string { func (*Results) ProtoMessage() {} func (x *Results) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[22] + mi := &file_messages_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1394,7 +1432,7 @@ func (x *Results) ProtoReflect() protoreflect.Message { // Deprecated: Use Results.ProtoReflect.Descriptor instead. func (*Results) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{22} + return file_messages_proto_rawDescGZIP(), []int{23} } func (x *Results) GetUser() []*ResultsUser { @@ -1422,7 +1460,7 @@ type GameStart struct { func (x *GameStart) Reset() { *x = GameStart{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[23] + mi := &file_messages_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1435,7 +1473,7 @@ func (x *GameStart) String() string { func (*GameStart) ProtoMessage() {} func (x *GameStart) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[23] + mi := &file_messages_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1448,7 +1486,7 @@ func (x *GameStart) ProtoReflect() protoreflect.Message { // Deprecated: Use GameStart.ProtoReflect.Descriptor instead. func (*GameStart) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{23} + return file_messages_proto_rawDescGZIP(), []int{24} } func (x *GameStart) GetUser() []*User { @@ -1469,7 +1507,7 @@ type UserList struct { func (x *UserList) Reset() { *x = UserList{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[24] + mi := &file_messages_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1482,7 +1520,7 @@ func (x *UserList) String() string { func (*UserList) ProtoMessage() {} func (x *UserList) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[24] + mi := &file_messages_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1495,7 +1533,7 @@ func (x *UserList) ProtoReflect() protoreflect.Message { // Deprecated: Use UserList.ProtoReflect.Descriptor instead. func (*UserList) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{24} + return file_messages_proto_rawDescGZIP(), []int{25} } func (x *UserList) GetUser() []*User { @@ -1522,7 +1560,7 @@ type KingSelection struct { func (x *KingSelection) Reset() { *x = KingSelection{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[25] + mi := &file_messages_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1535,7 +1573,7 @@ func (x *KingSelection) String() string { func (*KingSelection) ProtoMessage() {} func (x *KingSelection) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[25] + mi := &file_messages_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1548,7 +1586,7 @@ func (x *KingSelection) ProtoReflect() protoreflect.Message { // Deprecated: Use KingSelection.ProtoReflect.Descriptor instead. func (*KingSelection) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{25} + return file_messages_proto_rawDescGZIP(), []int{26} } func (x *KingSelection) GetCard() string { @@ -1625,7 +1663,7 @@ type TalonSelection struct { func (x *TalonSelection) Reset() { *x = TalonSelection{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[26] + mi := &file_messages_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1638,7 +1676,7 @@ func (x *TalonSelection) String() string { func (*TalonSelection) ProtoMessage() {} func (x *TalonSelection) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[26] + mi := &file_messages_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1651,7 +1689,7 @@ func (x *TalonSelection) ProtoReflect() protoreflect.Message { // Deprecated: Use TalonSelection.ProtoReflect.Descriptor instead. func (*TalonSelection) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{26} + return file_messages_proto_rawDescGZIP(), []int{27} } func (x *TalonSelection) GetPart() int32 { @@ -1729,7 +1767,7 @@ type Stash struct { func (x *Stash) Reset() { *x = Stash{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[27] + mi := &file_messages_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1742,7 +1780,7 @@ func (x *Stash) String() string { func (*Stash) ProtoMessage() {} func (x *Stash) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[27] + mi := &file_messages_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1755,7 +1793,7 @@ func (x *Stash) ProtoReflect() protoreflect.Message { // Deprecated: Use Stash.ProtoReflect.Descriptor instead. func (*Stash) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{27} + return file_messages_proto_rawDescGZIP(), []int{28} } func (x *Stash) GetCard() []*Card { @@ -1833,7 +1871,7 @@ type StashedTarock struct { func (x *StashedTarock) Reset() { *x = StashedTarock{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[28] + mi := &file_messages_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1846,7 +1884,7 @@ func (x *StashedTarock) String() string { func (*StashedTarock) ProtoMessage() {} func (x *StashedTarock) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[28] + mi := &file_messages_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1859,7 +1897,7 @@ func (x *StashedTarock) ProtoReflect() protoreflect.Message { // Deprecated: Use StashedTarock.ProtoReflect.Descriptor instead. func (*StashedTarock) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{28} + return file_messages_proto_rawDescGZIP(), []int{29} } func (x *StashedTarock) GetCard() *Card { @@ -1880,7 +1918,7 @@ type Radelci struct { func (x *Radelci) Reset() { *x = Radelci{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[29] + mi := &file_messages_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1893,7 +1931,7 @@ func (x *Radelci) String() string { func (*Radelci) ProtoMessage() {} func (x *Radelci) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[29] + mi := &file_messages_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1906,7 +1944,7 @@ func (x *Radelci) ProtoReflect() protoreflect.Message { // Deprecated: Use Radelci.ProtoReflect.Descriptor instead. func (*Radelci) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{29} + return file_messages_proto_rawDescGZIP(), []int{30} } func (x *Radelci) GetRadleci() int32 { @@ -1941,7 +1979,7 @@ type StartPredictions struct { func (x *StartPredictions) Reset() { *x = StartPredictions{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[30] + mi := &file_messages_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1954,7 +1992,7 @@ func (x *StartPredictions) String() string { func (*StartPredictions) ProtoMessage() {} func (x *StartPredictions) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[30] + mi := &file_messages_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1967,7 +2005,7 @@ func (x *StartPredictions) ProtoReflect() protoreflect.Message { // Deprecated: Use StartPredictions.ProtoReflect.Descriptor instead. func (*StartPredictions) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{30} + return file_messages_proto_rawDescGZIP(), []int{31} } func (x *StartPredictions) GetKraljUltimoKontra() bool { @@ -2089,7 +2127,7 @@ type Predictions struct { func (x *Predictions) Reset() { *x = Predictions{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[31] + mi := &file_messages_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2102,7 +2140,7 @@ func (x *Predictions) String() string { func (*Predictions) ProtoMessage() {} func (x *Predictions) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[31] + mi := &file_messages_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2115,7 +2153,7 @@ func (x *Predictions) ProtoReflect() protoreflect.Message { // Deprecated: Use Predictions.ProtoReflect.Descriptor instead. func (*Predictions) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{31} + return file_messages_proto_rawDescGZIP(), []int{32} } func (x *Predictions) GetKraljUltimo() *User { @@ -2255,7 +2293,7 @@ type TalonReveal struct { func (x *TalonReveal) Reset() { *x = TalonReveal{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[32] + mi := &file_messages_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2268,7 +2306,7 @@ func (x *TalonReveal) String() string { func (*TalonReveal) ProtoMessage() {} func (x *TalonReveal) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[32] + mi := &file_messages_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2281,7 +2319,7 @@ func (x *TalonReveal) ProtoReflect() protoreflect.Message { // Deprecated: Use TalonReveal.ProtoReflect.Descriptor instead. func (*TalonReveal) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{32} + return file_messages_proto_rawDescGZIP(), []int{33} } func (x *TalonReveal) GetStih() []*Stih { @@ -2302,7 +2340,7 @@ type PlayingReveal struct { func (x *PlayingReveal) Reset() { *x = PlayingReveal{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[33] + mi := &file_messages_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2315,7 +2353,7 @@ func (x *PlayingReveal) String() string { func (*PlayingReveal) ProtoMessage() {} func (x *PlayingReveal) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[33] + mi := &file_messages_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2328,7 +2366,7 @@ func (x *PlayingReveal) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayingReveal.ProtoReflect.Descriptor instead. func (*PlayingReveal) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{33} + return file_messages_proto_rawDescGZIP(), []int{34} } func (x *PlayingReveal) GetPlaying() *User { @@ -2347,7 +2385,7 @@ type LoginRequest struct { func (x *LoginRequest) Reset() { *x = LoginRequest{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[34] + mi := &file_messages_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2360,7 +2398,7 @@ func (x *LoginRequest) String() string { func (*LoginRequest) ProtoMessage() {} func (x *LoginRequest) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[34] + mi := &file_messages_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2373,7 +2411,7 @@ func (x *LoginRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LoginRequest.ProtoReflect.Descriptor instead. func (*LoginRequest) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{34} + return file_messages_proto_rawDescGZIP(), []int{35} } type LoginInfo struct { @@ -2387,7 +2425,7 @@ type LoginInfo struct { func (x *LoginInfo) Reset() { *x = LoginInfo{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[35] + mi := &file_messages_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2400,7 +2438,7 @@ func (x *LoginInfo) String() string { func (*LoginInfo) ProtoMessage() {} func (x *LoginInfo) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[35] + mi := &file_messages_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2413,7 +2451,7 @@ func (x *LoginInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use LoginInfo.ProtoReflect.Descriptor instead. func (*LoginInfo) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{35} + return file_messages_proto_rawDescGZIP(), []int{36} } func (x *LoginInfo) GetToken() string { @@ -2438,7 +2476,7 @@ type LoginResponse struct { func (x *LoginResponse) Reset() { *x = LoginResponse{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[36] + mi := &file_messages_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2451,7 +2489,7 @@ func (x *LoginResponse) String() string { func (*LoginResponse) ProtoMessage() {} func (x *LoginResponse) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[36] + mi := &file_messages_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2464,7 +2502,7 @@ func (x *LoginResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LoginResponse.ProtoReflect.Descriptor instead. func (*LoginResponse) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{36} + return file_messages_proto_rawDescGZIP(), []int{37} } func (m *LoginResponse) GetType() isLoginResponse_Type { @@ -2513,7 +2551,7 @@ type InvitePlayer struct { func (x *InvitePlayer) Reset() { *x = InvitePlayer{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[37] + mi := &file_messages_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2526,7 +2564,7 @@ func (x *InvitePlayer) String() string { func (*InvitePlayer) ProtoMessage() {} func (x *InvitePlayer) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[37] + mi := &file_messages_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2539,7 +2577,7 @@ func (x *InvitePlayer) ProtoReflect() protoreflect.Message { // Deprecated: Use InvitePlayer.ProtoReflect.Descriptor instead. func (*InvitePlayer) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{37} + return file_messages_proto_rawDescGZIP(), []int{38} } type ClearHand struct { @@ -2551,7 +2589,7 @@ type ClearHand struct { func (x *ClearHand) Reset() { *x = ClearHand{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[38] + mi := &file_messages_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2564,7 +2602,7 @@ func (x *ClearHand) String() string { func (*ClearHand) ProtoMessage() {} func (x *ClearHand) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[38] + mi := &file_messages_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2577,7 +2615,7 @@ func (x *ClearHand) ProtoReflect() protoreflect.Message { // Deprecated: Use ClearHand.ProtoReflect.Descriptor instead. func (*ClearHand) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{38} + return file_messages_proto_rawDescGZIP(), []int{39} } type Time struct { @@ -2592,7 +2630,7 @@ type Time struct { func (x *Time) Reset() { *x = Time{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[39] + mi := &file_messages_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2605,7 +2643,7 @@ func (x *Time) String() string { func (*Time) ProtoMessage() {} func (x *Time) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[39] + mi := &file_messages_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2618,7 +2656,7 @@ func (x *Time) ProtoReflect() protoreflect.Message { // Deprecated: Use Time.ProtoReflect.Descriptor instead. func (*Time) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{39} + return file_messages_proto_rawDescGZIP(), []int{40} } func (x *Time) GetCurrentTime() float32 { @@ -2647,7 +2685,7 @@ type ChatMessage struct { func (x *ChatMessage) Reset() { *x = ChatMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[40] + mi := &file_messages_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2660,7 +2698,7 @@ func (x *ChatMessage) String() string { func (*ChatMessage) ProtoMessage() {} func (x *ChatMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[40] + mi := &file_messages_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2673,7 +2711,7 @@ func (x *ChatMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMessage.ProtoReflect.Descriptor instead. func (*ChatMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{40} + return file_messages_proto_rawDescGZIP(), []int{41} } func (x *ChatMessage) GetUserId() string { @@ -2731,13 +2769,14 @@ type Message struct { // *Message_ReplayMove // *Message_ReplaySelectGame // *Message_GameInfo + // *Message_StartEarly Data isMessage_Data `protobuf_oneof:"data"` } func (x *Message) Reset() { *x = Message{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[41] + mi := &file_messages_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2750,7 +2789,7 @@ func (x *Message) String() string { func (*Message) ProtoMessage() {} func (x *Message) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[41] + mi := &file_messages_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2763,7 +2802,7 @@ func (x *Message) ProtoReflect() protoreflect.Message { // Deprecated: Use Message.ProtoReflect.Descriptor instead. func (*Message) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{41} + return file_messages_proto_rawDescGZIP(), []int{42} } func (x *Message) GetUsername() string { @@ -3011,6 +3050,13 @@ func (x *Message) GetGameInfo() *GameInfo { return nil } +func (x *Message) GetStartEarly() *StartEarly { + if x, ok := x.GetData().(*Message_StartEarly); ok { + return x.StartEarly + } + return nil +} + type isMessage_Data interface { isMessage_Data() } @@ -3139,6 +3185,10 @@ type Message_GameInfo struct { GameInfo *GameInfo `protobuf:"bytes,40,opt,name=game_info,json=gameInfo,proto3,oneof"` } +type Message_StartEarly struct { + StartEarly *StartEarly `protobuf:"bytes,41,opt,name=start_early,json=startEarly,proto3,oneof"` +} + func (*Message_Connection) isMessage_Data() {} func (*Message_Licitiranje) isMessage_Data() {} @@ -3201,6 +3251,8 @@ func (*Message_ReplaySelectGame) isMessage_Data() {} func (*Message_GameInfo) isMessage_Data() {} +func (*Message_StartEarly) isMessage_Data() {} + type LoginResponse_OK struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3210,7 +3262,7 @@ type LoginResponse_OK struct { func (x *LoginResponse_OK) Reset() { *x = LoginResponse_OK{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[42] + mi := &file_messages_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3223,7 +3275,7 @@ func (x *LoginResponse_OK) String() string { func (*LoginResponse_OK) ProtoMessage() {} func (x *LoginResponse_OK) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[42] + mi := &file_messages_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3236,7 +3288,7 @@ func (x *LoginResponse_OK) ProtoReflect() protoreflect.Message { // Deprecated: Use LoginResponse_OK.ProtoReflect.Descriptor instead. func (*LoginResponse_OK) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{36, 0} + return file_messages_proto_rawDescGZIP(), []int{37, 0} } type LoginResponse_Fail struct { @@ -3248,7 +3300,7 @@ type LoginResponse_Fail struct { func (x *LoginResponse_Fail) Reset() { *x = LoginResponse_Fail{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[43] + mi := &file_messages_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3261,7 +3313,7 @@ func (x *LoginResponse_Fail) String() string { func (*LoginResponse_Fail) ProtoMessage() {} func (x *LoginResponse_Fail) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[43] + mi := &file_messages_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3274,7 +3326,7 @@ func (x *LoginResponse_Fail) ProtoReflect() protoreflect.Message { // Deprecated: Use LoginResponse_Fail.ProtoReflect.Descriptor instead. func (*LoginResponse_Fail) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{36, 1} + return file_messages_proto_rawDescGZIP(), []int{37, 1} } var File_messages_proto protoreflect.FileDescriptor @@ -3294,358 +3346,362 @@ var file_messages_proto_rawDesc = []byte{ 0x6c, 0x61, 0x79, 0x22, 0x0c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x4d, 0x6f, 0x76, 0x65, 0x22, 0x26, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x67, 0x61, 0x6d, 0x65, 0x22, 0x78, 0x0a, 0x08, 0x47, 0x61, 0x6d, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x67, 0x61, 0x6d, 0x65, - 0x73, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x67, 0x61, 0x6d, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, - 0x67, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x24, 0x0a, - 0x0d, 0x63, 0x61, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x61, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x47, - 0x61, 0x6d, 0x65, 0x22, 0x5d, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x64, 0x12, 0x24, - 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x08, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, - 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x0a, 0x04, 0x6a, 0x6f, 0x69, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x48, 0x00, 0x52, 0x04, 0x6a, 0x6f, 0x69, 0x6e, 0x12, 0x2d, 0x0a, 0x0a, 0x64, 0x69, 0x73, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x69, - 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x05, 0x6c, 0x65, 0x61, 0x76, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x06, 0x2e, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x48, - 0x00, 0x52, 0x05, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x22, 0x21, 0x0a, 0x0b, 0x4c, 0x69, 0x63, 0x69, 0x74, 0x69, 0x72, 0x61, 0x6e, 0x6a, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x63, 0x69, 0x74, 0x69, 0x72, 0x61, 0x6e, - 0x6a, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x22, 0xc2, 0x01, 0x0a, 0x04, 0x43, 0x61, 0x72, 0x64, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x12, 0x1b, - 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x53, - 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x04, 0x73, 0x65, 0x6e, 0x64, 0x12, 0x24, 0x0a, 0x07, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x21, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x07, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x32, 0x0a, 0x12, - 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, - 0x77, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, - 0x22, 0x46, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8e, 0x05, 0x0a, 0x0b, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x55, 0x73, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, - 0x73, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, - 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x75, 0x6c, 0x61, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x72, 0x75, 0x6c, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x70, - 0x61, 0x67, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x67, 0x61, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x67, 0x72, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x69, 0x67, 0x72, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x61, 0x7a, 0x6c, 0x69, 0x6b, 0x61, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x61, 0x7a, 0x6c, 0x69, 0x6b, 0x61, 0x12, - 0x14, 0x0a, 0x05, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x12, 0x16, 0x0a, 0x06, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x69, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x69, 0x12, 0x21, 0x0a, - 0x0c, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x5f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x50, 0x61, 0x67, 0x61, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x5f, 0x69, 0x67, 0x72, 0x61, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x49, 0x67, 0x72, - 0x61, 0x12, 0x21, 0x0a, 0x0c, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x5f, 0x6b, 0x72, 0x61, 0x6c, - 0x6a, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x4b, - 0x72, 0x61, 0x6c, 0x6a, 0x12, 0x27, 0x0a, 0x0f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x5f, 0x6d, - 0x6f, 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6b, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x4d, 0x6f, 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x12, 0x1a, 0x0a, - 0x08, 0x6d, 0x6f, 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x6d, 0x6f, 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x68, 0x6f, - 0x77, 0x5f, 0x67, 0x61, 0x6d, 0x65, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x73, 0x68, 0x6f, 0x77, 0x47, 0x61, 0x6d, 0x65, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x27, - 0x0a, 0x0f, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x68, 0x6f, 0x77, 0x44, 0x69, 0x66, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x5f, - 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x68, 0x6f, - 0x77, 0x4b, 0x72, 0x61, 0x6c, 0x6a, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x70, - 0x61, 0x67, 0x61, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x68, 0x6f, 0x77, - 0x50, 0x61, 0x67, 0x61, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6b, 0x72, - 0x61, 0x6c, 0x6a, 0x69, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x77, - 0x4b, 0x72, 0x61, 0x6c, 0x6a, 0x69, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x74, - 0x72, 0x75, 0x6c, 0x61, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x68, 0x6f, 0x77, - 0x54, 0x72, 0x75, 0x6c, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x61, 0x64, 0x65, 0x6c, 0x63, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x61, 0x64, 0x65, 0x6c, 0x63, 0x12, 0x1a, 0x0a, - 0x08, 0x73, 0x6b, 0x69, 0x73, 0x66, 0x61, 0x6e, 0x67, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x73, 0x6b, 0x69, 0x73, 0x66, 0x61, 0x6e, 0x67, 0x22, 0x85, 0x01, 0x0a, 0x04, 0x53, 0x74, - 0x69, 0x68, 0x12, 0x19, 0x0a, 0x04, 0x63, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x05, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x52, 0x04, 0x63, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x77, 0x6f, 0x72, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x77, 0x6f, - 0x72, 0x74, 0x68, 0x12, 0x2c, 0x0a, 0x11, 0x70, 0x69, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x70, 0x42, - 0x79, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, - 0x70, 0x69, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x70, 0x42, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, - 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x69, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x70, 0x42, 0x79, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x69, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x70, 0x42, - 0x79, 0x22, 0x46, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x20, 0x0a, 0x04, - 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x19, - 0x0a, 0x04, 0x73, 0x74, 0x69, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x53, - 0x74, 0x69, 0x68, 0x52, 0x04, 0x73, 0x74, 0x69, 0x68, 0x22, 0x26, 0x0a, 0x09, 0x47, 0x61, 0x6d, - 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x19, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x22, 0x25, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, 0x0a, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0xa3, 0x01, 0x0a, 0x0d, 0x4b, 0x69, 0x6e, - 0x67, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x61, - 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x61, 0x72, 0x64, 0x12, 0x24, - 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x08, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x04, 0x73, 0x65, 0x6e, - 0x64, 0x12, 0x33, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xa4, - 0x01, 0x0a, 0x0e, 0x54, 0x61, 0x6c, 0x6f, 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x70, 0x61, 0x72, 0x74, 0x12, 0x24, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x73, - 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x53, 0x65, 0x6e, 0x64, - 0x48, 0x00, 0x52, 0x04, 0x73, 0x65, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, - 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xba, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x73, 0x68, 0x12, - 0x19, 0x0a, 0x04, 0x63, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x05, 0x2e, - 0x43, 0x61, 0x72, 0x64, 0x52, 0x04, 0x63, 0x61, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x12, 0x24, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x67, 0x61, 0x6d, 0x65, 0x22, 0x0c, 0x0a, 0x0a, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x22, 0x78, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x67, 0x61, + 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, + 0x61, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0d, 0x63, 0x61, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x47, 0x61, 0x6d, + 0x65, 0x22, 0x5d, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x64, 0x12, 0x24, 0x0a, 0x07, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x73, 0x12, 0x24, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, - 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, - 0x04, 0x73, 0x65, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x6e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x22, 0x2a, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x73, 0x68, 0x65, 0x64, 0x54, 0x61, 0x72, - 0x6f, 0x63, 0x6b, 0x12, 0x19, 0x0a, 0x04, 0x63, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x05, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x52, 0x04, 0x63, 0x61, 0x72, 0x64, 0x22, 0x23, - 0x0a, 0x07, 0x52, 0x61, 0x64, 0x65, 0x6c, 0x63, 0x69, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x61, 0x64, - 0x6c, 0x65, 0x63, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x61, 0x64, 0x6c, - 0x65, 0x63, 0x69, 0x22, 0xd8, 0x03, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x72, 0x65, - 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6b, 0x72, 0x61, 0x6c, - 0x6a, 0x5f, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x55, 0x6c, 0x74, 0x69, - 0x6d, 0x6f, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x67, 0x61, - 0x74, 0x5f, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x70, 0x61, 0x67, 0x61, 0x74, 0x55, 0x6c, 0x74, 0x69, - 0x6d, 0x6f, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x67, 0x72, 0x61, - 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, - 0x67, 0x72, 0x61, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x6c, - 0x61, 0x74, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0b, 0x76, 0x61, 0x6c, 0x61, 0x74, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x2e, 0x0a, 0x13, - 0x62, 0x61, 0x72, 0x76, 0x6e, 0x69, 0x5f, 0x76, 0x61, 0x6c, 0x61, 0x74, 0x5f, 0x6b, 0x6f, 0x6e, - 0x74, 0x72, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x62, 0x61, 0x72, 0x76, 0x6e, - 0x69, 0x56, 0x61, 0x6c, 0x61, 0x74, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x21, 0x0a, 0x0c, - 0x70, 0x61, 0x67, 0x61, 0x74, 0x5f, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0b, 0x70, 0x61, 0x67, 0x61, 0x74, 0x55, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x72, 0x75, 0x6c, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x74, 0x72, 0x75, 0x6c, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x69, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x69, 0x12, 0x21, 0x0a, - 0x0c, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x5f, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x55, 0x6c, 0x74, 0x69, 0x6d, 0x6f, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x61, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x61, 0x72, 0x76, 0x6e, 0x69, - 0x5f, 0x76, 0x61, 0x6c, 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x62, 0x61, - 0x72, 0x76, 0x6e, 0x69, 0x56, 0x61, 0x6c, 0x61, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x6f, 0x6e, - 0x64, 0x66, 0x61, 0x6e, 0x67, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x6f, 0x6e, - 0x64, 0x66, 0x61, 0x6e, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x6f, 0x6e, 0x64, 0x66, 0x61, 0x6e, - 0x67, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, - 0x6d, 0x6f, 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x22, 0xe4, - 0x05, 0x0a, 0x0b, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, - 0x0a, 0x0c, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x5f, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, 0x6b, 0x72, 0x61, - 0x6c, 0x6a, 0x55, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x12, 0x2e, 0x0a, 0x13, 0x6b, 0x72, 0x61, 0x6c, - 0x6a, 0x5f, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x55, 0x6c, 0x74, 0x69, - 0x6d, 0x6f, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x3c, 0x0a, 0x17, 0x6b, 0x72, 0x61, 0x6c, - 0x6a, 0x5f, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x5f, - 0x64, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x52, 0x14, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x55, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x4b, 0x6f, 0x6e, - 0x74, 0x72, 0x61, 0x44, 0x61, 0x6c, 0x12, 0x1b, 0x0a, 0x05, 0x74, 0x72, 0x75, 0x6c, 0x61, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x74, 0x72, - 0x75, 0x6c, 0x61, 0x12, 0x1d, 0x0a, 0x06, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x69, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x06, 0x6b, 0x72, 0x61, 0x6c, - 0x6a, 0x69, 0x12, 0x28, 0x0a, 0x0c, 0x70, 0x61, 0x67, 0x61, 0x74, 0x5f, 0x75, 0x6c, 0x74, 0x69, - 0x6d, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, - 0x0b, 0x70, 0x61, 0x67, 0x61, 0x74, 0x55, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x12, 0x2e, 0x0a, 0x13, - 0x70, 0x61, 0x67, 0x61, 0x74, 0x5f, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x5f, 0x6b, 0x6f, 0x6e, - 0x74, 0x72, 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x70, 0x61, 0x67, 0x61, 0x74, - 0x55, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x3c, 0x0a, 0x17, - 0x70, 0x61, 0x67, 0x61, 0x74, 0x5f, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x5f, 0x6b, 0x6f, 0x6e, - 0x74, 0x72, 0x61, 0x5f, 0x64, 0x61, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x14, 0x70, 0x61, 0x67, 0x61, 0x74, 0x55, 0x6c, 0x74, 0x69, 0x6d, - 0x6f, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x44, 0x61, 0x6c, 0x12, 0x19, 0x0a, 0x04, 0x69, 0x67, - 0x72, 0x61, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, - 0x04, 0x69, 0x67, 0x72, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x67, 0x72, 0x61, 0x5f, 0x6b, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x67, 0x72, 0x61, - 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x2d, 0x0a, 0x0f, 0x69, 0x67, 0x72, 0x61, 0x5f, 0x6b, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x5f, 0x64, 0x61, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0d, 0x69, 0x67, 0x72, 0x61, 0x4b, 0x6f, 0x6e, 0x74, - 0x72, 0x61, 0x44, 0x61, 0x6c, 0x12, 0x1b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x61, 0x74, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x61, 0x74, 0x12, 0x28, 0x0a, 0x0c, 0x62, 0x61, 0x72, 0x76, 0x6e, 0x69, 0x5f, 0x76, 0x61, 0x6c, - 0x61, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, - 0x0b, 0x62, 0x61, 0x72, 0x76, 0x6e, 0x69, 0x56, 0x61, 0x6c, 0x61, 0x74, 0x12, 0x21, 0x0a, 0x08, - 0x6d, 0x6f, 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x08, 0x6d, 0x6f, 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x12, - 0x27, 0x0a, 0x0f, 0x6d, 0x6f, 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, - 0x72, 0x61, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6d, 0x6f, 0x6e, 0x64, 0x66, 0x61, - 0x6e, 0x67, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x35, 0x0a, 0x13, 0x6d, 0x6f, 0x6e, 0x64, - 0x66, 0x61, 0x6e, 0x67, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x5f, 0x64, 0x61, 0x6c, 0x18, - 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x11, 0x6d, 0x6f, - 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x44, 0x61, 0x6c, 0x12, - 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x6d, 0x65, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x67, 0x61, 0x6d, 0x65, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x28, 0x0a, 0x0b, 0x54, 0x61, 0x6c, 0x6f, 0x6e, 0x52, 0x65, - 0x76, 0x65, 0x61, 0x6c, 0x12, 0x19, 0x0a, 0x04, 0x73, 0x74, 0x69, 0x68, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x53, 0x74, 0x69, 0x68, 0x52, 0x04, 0x73, 0x74, 0x69, 0x68, 0x22, - 0x30, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, - 0x12, 0x1f, 0x0a, 0x07, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x07, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, - 0x67, 0x22, 0x0e, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x21, 0x0a, 0x09, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x75, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x4f, 0x4b, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x6b, 0x12, 0x29, 0x0a, 0x04, 0x66, 0x61, - 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x48, 0x00, 0x52, - 0x04, 0x66, 0x61, 0x69, 0x6c, 0x1a, 0x04, 0x0a, 0x02, 0x4f, 0x4b, 0x1a, 0x06, 0x0a, 0x04, 0x46, - 0x61, 0x69, 0x6c, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x0e, 0x0a, 0x0c, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x22, 0x0b, 0x0a, 0x09, 0x43, - 0x6c, 0x65, 0x61, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x22, 0x40, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xeb, 0x0c, 0x0a, 0x07, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x0b, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x69, - 0x72, 0x61, 0x6e, 0x6a, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x4c, 0x69, - 0x63, 0x69, 0x74, 0x69, 0x72, 0x61, 0x6e, 0x6a, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x6c, 0x69, 0x63, - 0x69, 0x74, 0x69, 0x72, 0x61, 0x6e, 0x6a, 0x65, 0x12, 0x1b, 0x0a, 0x04, 0x63, 0x61, 0x72, 0x64, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x48, 0x00, 0x52, - 0x04, 0x63, 0x61, 0x72, 0x64, 0x12, 0x40, 0x0a, 0x11, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x69, 0x72, - 0x61, 0x6e, 0x6a, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x4c, 0x69, 0x63, 0x69, 0x74, 0x69, 0x72, 0x61, 0x6e, 0x6a, 0x65, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x48, 0x00, 0x52, 0x10, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x69, 0x72, 0x61, 0x6e, - 0x6a, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2b, 0x0a, 0x0a, 0x67, 0x61, 0x6d, 0x65, 0x5f, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x47, 0x61, - 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x48, 0x00, 0x52, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x12, 0x34, 0x0a, 0x0d, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x4c, 0x6f, - 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x6c, 0x6f, - 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0a, 0x6c, 0x6f, - 0x67, 0x69, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, - 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, - 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x37, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x69, 0x6e, - 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, - 0x00, 0x52, 0x0d, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2b, 0x0a, 0x0a, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x6b, 0x18, 0x12, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x44, 0x65, 0x73, 0x6b, - 0x48, 0x00, 0x52, 0x09, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x12, 0x24, 0x0a, - 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, - 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x69, 0x73, 0x74, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, - 0x74, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, - 0x0e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x4b, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, - 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x72, 0x65, - 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x64, - 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0b, 0x70, - 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x31, 0x0a, 0x0c, 0x74, 0x61, - 0x6c, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0c, 0x2e, 0x54, 0x61, 0x6c, 0x6f, 0x6e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x48, 0x00, - 0x52, 0x0b, 0x74, 0x61, 0x6c, 0x6f, 0x6e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x12, 0x37, 0x0a, - 0x0e, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x18, - 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x76, 0x65, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x12, 0x3a, 0x0a, 0x0f, 0x74, 0x61, 0x6c, 0x6f, 0x6e, 0x5f, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x54, 0x61, 0x6c, 0x6f, 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x00, 0x52, 0x0e, 0x74, 0x61, 0x6c, 0x6f, 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x73, 0x68, 0x18, 0x1b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x06, 0x2e, 0x53, 0x74, 0x61, 0x73, 0x68, 0x48, 0x00, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x73, 0x68, 0x12, 0x25, 0x0a, 0x08, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x1c, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x64, 0x48, 0x00, - 0x52, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x64, 0x12, 0x47, 0x0a, 0x14, 0x67, 0x61, 0x6d, - 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, - 0x6e, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x48, 0x00, 0x52, 0x12, - 0x67, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, - 0x77, 0x6e, 0x12, 0x3d, 0x0a, 0x12, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x11, - 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x65, 0x6e, - 0x64, 0x12, 0x24, 0x0a, 0x07, 0x72, 0x61, 0x64, 0x65, 0x6c, 0x63, 0x69, 0x18, 0x1f, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x61, 0x64, 0x65, 0x6c, 0x63, 0x69, 0x48, 0x00, 0x52, 0x07, - 0x72, 0x61, 0x64, 0x65, 0x6c, 0x63, 0x69, 0x12, 0x1b, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x04, - 0x74, 0x69, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, - 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x48, 0x00, 0x52, - 0x0c, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x37, 0x0a, - 0x0e, 0x73, 0x74, 0x61, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x6f, 0x63, 0x6b, 0x18, - 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x74, 0x61, 0x73, 0x68, 0x65, 0x64, 0x54, - 0x61, 0x72, 0x6f, 0x63, 0x6b, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x73, 0x68, 0x65, 0x64, - 0x54, 0x61, 0x72, 0x6f, 0x63, 0x6b, 0x12, 0x2b, 0x0a, 0x0a, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, - 0x68, 0x61, 0x6e, 0x64, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x43, 0x6c, 0x65, - 0x61, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x48, - 0x61, 0x6e, 0x64, 0x12, 0x2e, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6c, 0x69, - 0x6e, 0x6b, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, - 0x79, 0x4c, 0x69, 0x6e, 0x6b, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x4c, - 0x69, 0x6e, 0x6b, 0x12, 0x2e, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x6f, - 0x76, 0x65, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, - 0x79, 0x4d, 0x6f, 0x76, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x4d, - 0x6f, 0x76, 0x65, 0x12, 0x41, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x73, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x67, 0x61, 0x6d, 0x65, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x47, 0x61, - 0x6d, 0x65, 0x48, 0x00, 0x52, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, - 0x6e, 0x66, 0x6f, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x47, 0x61, 0x6d, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x08, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x42, 0x1d, 0x5a, 0x1b, 0x2e, 0x2f, 0x62, 0x61, - 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x22, 0x9b, 0x01, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x16, 0x0a, 0x06, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x0a, 0x04, 0x6a, 0x6f, 0x69, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x48, + 0x00, 0x52, 0x04, 0x6a, 0x6f, 0x69, 0x6e, 0x12, 0x2d, 0x0a, 0x0a, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x44, 0x69, + 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x05, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x06, 0x2e, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x48, 0x00, 0x52, + 0x05, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x21, + 0x0a, 0x0b, 0x4c, 0x69, 0x63, 0x69, 0x74, 0x69, 0x72, 0x61, 0x6e, 0x6a, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x63, 0x69, 0x74, 0x69, 0x72, 0x61, 0x6e, 0x6a, 0x65, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x22, 0xc2, 0x01, 0x0a, 0x04, 0x43, 0x61, 0x72, 0x64, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x12, 0x1b, 0x0a, 0x04, + 0x73, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x53, 0x65, 0x6e, + 0x64, 0x48, 0x00, 0x52, 0x04, 0x73, 0x65, 0x6e, 0x64, 0x12, 0x24, 0x0a, 0x07, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x21, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x07, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x32, 0x0a, 0x12, 0x47, 0x61, + 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, + 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x22, 0x46, + 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8e, 0x05, 0x0a, 0x0b, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x73, 0x55, 0x73, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, + 0x72, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x75, 0x6c, 0x61, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x74, 0x72, 0x75, 0x6c, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x67, + 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x67, 0x61, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x69, 0x67, 0x72, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x69, + 0x67, 0x72, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x61, 0x7a, 0x6c, 0x69, 0x6b, 0x61, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x61, 0x7a, 0x6c, 0x69, 0x6b, 0x61, 0x12, 0x14, 0x0a, + 0x05, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6b, 0x72, + 0x61, 0x6c, 0x6a, 0x12, 0x16, 0x0a, 0x06, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x69, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x69, 0x12, 0x21, 0x0a, 0x0c, 0x6b, + 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x5f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0b, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x50, 0x61, 0x67, 0x61, 0x74, 0x12, 0x1f, + 0x0a, 0x0b, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x5f, 0x69, 0x67, 0x72, 0x61, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x49, 0x67, 0x72, 0x61, 0x12, + 0x21, 0x0a, 0x0c, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x5f, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x4b, 0x72, 0x61, + 0x6c, 0x6a, 0x12, 0x27, 0x0a, 0x0f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x5f, 0x6d, 0x6f, 0x6e, + 0x64, 0x66, 0x61, 0x6e, 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6b, 0x6f, 0x6e, + 0x74, 0x72, 0x61, 0x4d, 0x6f, 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x6d, + 0x6f, 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, + 0x6f, 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x68, 0x6f, 0x77, 0x5f, + 0x67, 0x61, 0x6d, 0x65, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, + 0x73, 0x68, 0x6f, 0x77, 0x47, 0x61, 0x6d, 0x65, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x0f, + 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x68, 0x6f, 0x77, 0x44, 0x69, 0x66, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6b, 0x72, + 0x61, 0x6c, 0x6a, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x68, 0x6f, 0x77, 0x4b, + 0x72, 0x61, 0x6c, 0x6a, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x70, 0x61, 0x67, + 0x61, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x68, 0x6f, 0x77, 0x50, 0x61, + 0x67, 0x61, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6b, 0x72, 0x61, 0x6c, + 0x6a, 0x69, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x4b, 0x72, + 0x61, 0x6c, 0x6a, 0x69, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x74, 0x72, 0x75, + 0x6c, 0x61, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x68, 0x6f, 0x77, 0x54, 0x72, + 0x75, 0x6c, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x61, 0x64, 0x65, 0x6c, 0x63, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x61, 0x64, 0x65, 0x6c, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x73, + 0x6b, 0x69, 0x73, 0x66, 0x61, 0x6e, 0x67, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, + 0x6b, 0x69, 0x73, 0x66, 0x61, 0x6e, 0x67, 0x22, 0x85, 0x01, 0x0a, 0x04, 0x53, 0x74, 0x69, 0x68, + 0x12, 0x19, 0x0a, 0x04, 0x63, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x05, + 0x2e, 0x43, 0x61, 0x72, 0x64, 0x52, 0x04, 0x63, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x77, + 0x6f, 0x72, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x77, 0x6f, 0x72, 0x74, + 0x68, 0x12, 0x2c, 0x0a, 0x11, 0x70, 0x69, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x70, 0x42, 0x79, 0x50, + 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x70, 0x69, + 0x63, 0x6b, 0x65, 0x64, 0x55, 0x70, 0x42, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x12, + 0x1e, 0x0a, 0x0a, 0x70, 0x69, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x70, 0x42, 0x79, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x69, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x70, 0x42, 0x79, 0x22, + 0x46, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x20, 0x0a, 0x04, 0x75, 0x73, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x73, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x04, + 0x73, 0x74, 0x69, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x53, 0x74, 0x69, + 0x68, 0x52, 0x04, 0x73, 0x74, 0x69, 0x68, 0x22, 0x26, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x12, 0x19, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, + 0x25, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x04, 0x75, + 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0xa3, 0x01, 0x0a, 0x0d, 0x4b, 0x69, 0x6e, 0x67, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x61, 0x72, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x61, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x07, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x05, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x04, 0x73, 0x65, 0x6e, 0x64, 0x12, + 0x33, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xa4, 0x01, 0x0a, + 0x0e, 0x54, 0x61, 0x6c, 0x6f, 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x12, 0x0a, 0x04, 0x70, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, + 0x61, 0x72, 0x74, 0x12, 0x24, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x73, 0x65, 0x6e, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x00, + 0x52, 0x04, 0x73, 0x65, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x6e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x22, 0xba, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x73, 0x68, 0x12, 0x19, 0x0a, + 0x04, 0x63, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x43, 0x61, + 0x72, 0x64, 0x52, 0x04, 0x63, 0x61, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x12, 0x24, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x04, 0x73, + 0x65, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x22, 0x2a, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x73, 0x68, 0x65, 0x64, 0x54, 0x61, 0x72, 0x6f, 0x63, + 0x6b, 0x12, 0x19, 0x0a, 0x04, 0x63, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x05, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x52, 0x04, 0x63, 0x61, 0x72, 0x64, 0x22, 0x23, 0x0a, 0x07, + 0x52, 0x61, 0x64, 0x65, 0x6c, 0x63, 0x69, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x61, 0x64, 0x6c, 0x65, + 0x63, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x61, 0x64, 0x6c, 0x65, 0x63, + 0x69, 0x22, 0xd8, 0x03, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x72, 0x65, 0x64, 0x69, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x5f, + 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x11, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x55, 0x6c, 0x74, 0x69, 0x6d, 0x6f, + 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x67, 0x61, 0x74, 0x5f, + 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x11, 0x70, 0x61, 0x67, 0x61, 0x74, 0x55, 0x6c, 0x74, 0x69, 0x6d, 0x6f, + 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x67, 0x72, 0x61, 0x5f, 0x6b, + 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x67, 0x72, + 0x61, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x61, 0x74, + 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x76, + 0x61, 0x6c, 0x61, 0x74, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x2e, 0x0a, 0x13, 0x62, 0x61, + 0x72, 0x76, 0x6e, 0x69, 0x5f, 0x76, 0x61, 0x6c, 0x61, 0x74, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, + 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x62, 0x61, 0x72, 0x76, 0x6e, 0x69, 0x56, + 0x61, 0x6c, 0x61, 0x74, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, + 0x67, 0x61, 0x74, 0x5f, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0b, 0x70, 0x61, 0x67, 0x61, 0x74, 0x55, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x12, 0x14, 0x0a, + 0x05, 0x74, 0x72, 0x75, 0x6c, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x74, 0x72, + 0x75, 0x6c, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x69, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x69, 0x12, 0x21, 0x0a, 0x0c, 0x6b, + 0x72, 0x61, 0x6c, 0x6a, 0x5f, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0b, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x55, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x61, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x61, 0x72, 0x76, 0x6e, 0x69, 0x5f, 0x76, + 0x61, 0x6c, 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x62, 0x61, 0x72, 0x76, + 0x6e, 0x69, 0x56, 0x61, 0x6c, 0x61, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x6f, 0x6e, 0x64, 0x66, + 0x61, 0x6e, 0x67, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x6f, 0x6e, 0x64, 0x66, + 0x61, 0x6e, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x6f, 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x5f, + 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6d, 0x6f, + 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x22, 0xe4, 0x05, 0x0a, + 0x0b, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x0a, 0x0c, + 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x5f, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, 0x6b, 0x72, 0x61, 0x6c, 0x6a, + 0x55, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x12, 0x2e, 0x0a, 0x13, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x5f, + 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x11, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x55, 0x6c, 0x74, 0x69, 0x6d, 0x6f, + 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x3c, 0x0a, 0x17, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x5f, + 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x5f, 0x64, 0x61, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x14, + 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x55, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x4b, 0x6f, 0x6e, 0x74, 0x72, + 0x61, 0x44, 0x61, 0x6c, 0x12, 0x1b, 0x0a, 0x05, 0x74, 0x72, 0x75, 0x6c, 0x61, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x74, 0x72, 0x75, 0x6c, + 0x61, 0x12, 0x1d, 0x0a, 0x06, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x69, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x06, 0x6b, 0x72, 0x61, 0x6c, 0x6a, 0x69, + 0x12, 0x28, 0x0a, 0x0c, 0x70, 0x61, 0x67, 0x61, 0x74, 0x5f, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, 0x70, + 0x61, 0x67, 0x61, 0x74, 0x55, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, + 0x67, 0x61, 0x74, 0x5f, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, + 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x70, 0x61, 0x67, 0x61, 0x74, 0x55, 0x6c, + 0x74, 0x69, 0x6d, 0x6f, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x3c, 0x0a, 0x17, 0x70, 0x61, + 0x67, 0x61, 0x74, 0x5f, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, + 0x61, 0x5f, 0x64, 0x61, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x14, 0x70, 0x61, 0x67, 0x61, 0x74, 0x55, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x4b, + 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x44, 0x61, 0x6c, 0x12, 0x19, 0x0a, 0x04, 0x69, 0x67, 0x72, 0x61, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x69, + 0x67, 0x72, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x67, 0x72, 0x61, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, + 0x72, 0x61, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x67, 0x72, 0x61, 0x4b, 0x6f, + 0x6e, 0x74, 0x72, 0x61, 0x12, 0x2d, 0x0a, 0x0f, 0x69, 0x67, 0x72, 0x61, 0x5f, 0x6b, 0x6f, 0x6e, + 0x74, 0x72, 0x61, 0x5f, 0x64, 0x61, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x0d, 0x69, 0x67, 0x72, 0x61, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, + 0x44, 0x61, 0x6c, 0x12, 0x1b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x61, 0x74, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x61, 0x74, + 0x12, 0x28, 0x0a, 0x0c, 0x62, 0x61, 0x72, 0x76, 0x6e, 0x69, 0x5f, 0x76, 0x61, 0x6c, 0x61, 0x74, + 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, 0x62, + 0x61, 0x72, 0x76, 0x6e, 0x69, 0x56, 0x61, 0x6c, 0x61, 0x74, 0x12, 0x21, 0x0a, 0x08, 0x6d, 0x6f, + 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, + 0x73, 0x65, 0x72, 0x52, 0x08, 0x6d, 0x6f, 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x12, 0x27, 0x0a, + 0x0f, 0x6d, 0x6f, 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, + 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6d, 0x6f, 0x6e, 0x64, 0x66, 0x61, 0x6e, 0x67, + 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x12, 0x35, 0x0a, 0x13, 0x6d, 0x6f, 0x6e, 0x64, 0x66, 0x61, + 0x6e, 0x67, 0x5f, 0x6b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x5f, 0x64, 0x61, 0x6c, 0x18, 0x14, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x11, 0x6d, 0x6f, 0x6e, 0x64, + 0x66, 0x61, 0x6e, 0x67, 0x4b, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x44, 0x61, 0x6c, 0x12, 0x1a, 0x0a, + 0x08, 0x67, 0x61, 0x6d, 0x65, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x67, 0x61, 0x6d, 0x65, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x22, 0x28, 0x0a, 0x0b, 0x54, 0x61, 0x6c, 0x6f, 0x6e, 0x52, 0x65, 0x76, 0x65, + 0x61, 0x6c, 0x12, 0x19, 0x0a, 0x04, 0x73, 0x74, 0x69, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x05, 0x2e, 0x53, 0x74, 0x69, 0x68, 0x52, 0x04, 0x73, 0x74, 0x69, 0x68, 0x22, 0x30, 0x0a, + 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x12, 0x1f, + 0x0a, 0x07, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x05, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x07, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x22, + 0x0e, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x21, 0x0a, 0x09, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x22, 0x75, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x4f, 0x4b, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x6b, 0x12, 0x29, 0x0a, 0x04, 0x66, 0x61, 0x69, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x48, 0x00, 0x52, 0x04, 0x66, + 0x61, 0x69, 0x6c, 0x1a, 0x04, 0x0a, 0x02, 0x4f, 0x4b, 0x1a, 0x06, 0x0a, 0x04, 0x46, 0x61, 0x69, + 0x6c, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x0e, 0x0a, 0x0c, 0x49, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x22, 0x0b, 0x0a, 0x09, 0x43, 0x6c, 0x65, + 0x61, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x22, 0x40, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x9b, 0x0d, 0x0a, 0x07, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, + 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x0b, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x69, 0x72, 0x61, + 0x6e, 0x6a, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x4c, 0x69, 0x63, 0x69, + 0x74, 0x69, 0x72, 0x61, 0x6e, 0x6a, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x6c, 0x69, 0x63, 0x69, 0x74, + 0x69, 0x72, 0x61, 0x6e, 0x6a, 0x65, 0x12, 0x1b, 0x0a, 0x04, 0x63, 0x61, 0x72, 0x64, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x48, 0x00, 0x52, 0x04, 0x63, + 0x61, 0x72, 0x64, 0x12, 0x40, 0x0a, 0x11, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x69, 0x72, 0x61, 0x6e, + 0x6a, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x4c, 0x69, 0x63, 0x69, 0x74, 0x69, 0x72, 0x61, 0x6e, 0x6a, 0x65, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x48, 0x00, 0x52, 0x10, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x69, 0x72, 0x61, 0x6e, 0x6a, 0x65, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2b, 0x0a, 0x0a, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x47, 0x61, 0x6d, 0x65, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x48, 0x00, 0x52, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x12, 0x34, 0x0a, 0x0d, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x4c, 0x6f, 0x67, 0x69, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x6c, 0x6f, 0x67, 0x69, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x69, + 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x69, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x37, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, + 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, + 0x0d, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, + 0x0a, 0x0a, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x6b, 0x18, 0x12, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x48, 0x00, + 0x52, 0x09, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x12, 0x24, 0x0a, 0x07, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x12, 0x28, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x14, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x48, + 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x0e, 0x6b, + 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x4b, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x72, + 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x48, 0x00, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x72, 0x65, 0x64, 0x69, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x50, 0x72, + 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x72, 0x65, + 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x31, 0x0a, 0x0c, 0x74, 0x61, 0x6c, 0x6f, + 0x6e, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, + 0x2e, 0x54, 0x61, 0x6c, 0x6f, 0x6e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0b, + 0x74, 0x61, 0x6c, 0x6f, 0x6e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x12, 0x37, 0x0a, 0x0e, 0x70, + 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x18, 0x19, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x76, + 0x65, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x76, 0x65, 0x61, 0x6c, 0x12, 0x3a, 0x0a, 0x0f, 0x74, 0x61, 0x6c, 0x6f, 0x6e, 0x5f, 0x73, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x54, 0x61, 0x6c, 0x6f, 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x0e, 0x74, 0x61, 0x6c, 0x6f, 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x73, 0x68, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x06, 0x2e, 0x53, 0x74, 0x61, 0x73, 0x68, 0x48, 0x00, 0x52, 0x05, 0x73, 0x74, 0x61, 0x73, 0x68, + 0x12, 0x25, 0x0a, 0x08, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x1c, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x07, + 0x67, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x64, 0x12, 0x47, 0x0a, 0x14, 0x67, 0x61, 0x6d, 0x65, 0x5f, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x18, + 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x48, 0x00, 0x52, 0x12, 0x67, 0x61, + 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, + 0x12, 0x3d, 0x0a, 0x12, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, + 0x72, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x50, + 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x11, 0x70, 0x72, + 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x12, + 0x24, 0x0a, 0x07, 0x72, 0x61, 0x64, 0x65, 0x6c, 0x63, 0x69, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x08, 0x2e, 0x52, 0x61, 0x64, 0x65, 0x6c, 0x63, 0x69, 0x48, 0x00, 0x52, 0x07, 0x72, 0x61, + 0x64, 0x65, 0x6c, 0x63, 0x69, 0x12, 0x1b, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x20, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x04, 0x74, 0x69, + 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, + 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x49, + 0x6e, 0x76, 0x69, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x69, + 0x6e, 0x76, 0x69, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x0e, 0x73, + 0x74, 0x61, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x6f, 0x63, 0x6b, 0x18, 0x23, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x74, 0x61, 0x73, 0x68, 0x65, 0x64, 0x54, 0x61, 0x72, + 0x6f, 0x63, 0x6b, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x73, 0x68, 0x65, 0x64, 0x54, 0x61, + 0x72, 0x6f, 0x63, 0x6b, 0x12, 0x2b, 0x0a, 0x0a, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x68, 0x61, + 0x6e, 0x64, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x72, + 0x48, 0x61, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x48, 0x61, 0x6e, + 0x64, 0x12, 0x2e, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, + 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x4c, + 0x69, 0x6e, 0x6b, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x6e, + 0x6b, 0x12, 0x2e, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x6f, 0x76, 0x65, + 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x4d, + 0x6f, 0x76, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x4d, 0x6f, 0x76, + 0x65, 0x12, 0x41, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x5f, 0x67, 0x61, 0x6d, 0x65, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, + 0x48, 0x00, 0x52, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x47, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x48, 0x00, 0x52, 0x08, 0x67, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, + 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x18, 0x29, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x61, 0x72, 0x6c, 0x79, + 0x48, 0x00, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x42, 0x06, + 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x42, 0x1d, 0x5a, 0x1b, 0x2e, 0x2f, 0x62, 0x61, 0x63, 0x6b, + 0x65, 0x6e, 0x64, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3660,7 +3716,7 @@ func file_messages_proto_rawDescGZIP() []byte { return file_messages_proto_rawDescData } -var file_messages_proto_msgTypes = make([]protoimpl.MessageInfo, 44) +var file_messages_proto_msgTypes = make([]protoimpl.MessageInfo, 45) var file_messages_proto_goTypes = []interface{}{ (*Connect)(nil), // 0: Connect (*Disconnect)(nil), // 1: Disconnect @@ -3674,41 +3730,42 @@ var file_messages_proto_goTypes = []interface{}{ (*ReplayLink)(nil), // 9: ReplayLink (*ReplayMove)(nil), // 10: ReplayMove (*ReplaySelectGame)(nil), // 11: ReplaySelectGame - (*GameInfo)(nil), // 12: GameInfo - (*GameEnd)(nil), // 13: GameEnd - (*Connection)(nil), // 14: Connection - (*Licitiranje)(nil), // 15: Licitiranje - (*LicitiranjeStart)(nil), // 16: LicitiranjeStart - (*Card)(nil), // 17: Card - (*GameStartCountdown)(nil), // 18: GameStartCountdown - (*User)(nil), // 19: User - (*ResultsUser)(nil), // 20: ResultsUser - (*Stih)(nil), // 21: Stih - (*Results)(nil), // 22: Results - (*GameStart)(nil), // 23: GameStart - (*UserList)(nil), // 24: UserList - (*KingSelection)(nil), // 25: KingSelection - (*TalonSelection)(nil), // 26: TalonSelection - (*Stash)(nil), // 27: Stash - (*StashedTarock)(nil), // 28: StashedTarock - (*Radelci)(nil), // 29: Radelci - (*StartPredictions)(nil), // 30: StartPredictions - (*Predictions)(nil), // 31: Predictions - (*TalonReveal)(nil), // 32: TalonReveal - (*PlayingReveal)(nil), // 33: PlayingReveal - (*LoginRequest)(nil), // 34: LoginRequest - (*LoginInfo)(nil), // 35: LoginInfo - (*LoginResponse)(nil), // 36: LoginResponse - (*InvitePlayer)(nil), // 37: InvitePlayer - (*ClearHand)(nil), // 38: ClearHand - (*Time)(nil), // 39: Time - (*ChatMessage)(nil), // 40: ChatMessage - (*Message)(nil), // 41: Message - (*LoginResponse_OK)(nil), // 42: LoginResponse.OK - (*LoginResponse_Fail)(nil), // 43: LoginResponse.Fail + (*StartEarly)(nil), // 12: StartEarly + (*GameInfo)(nil), // 13: GameInfo + (*GameEnd)(nil), // 14: GameEnd + (*Connection)(nil), // 15: Connection + (*Licitiranje)(nil), // 16: Licitiranje + (*LicitiranjeStart)(nil), // 17: LicitiranjeStart + (*Card)(nil), // 18: Card + (*GameStartCountdown)(nil), // 19: GameStartCountdown + (*User)(nil), // 20: User + (*ResultsUser)(nil), // 21: ResultsUser + (*Stih)(nil), // 22: Stih + (*Results)(nil), // 23: Results + (*GameStart)(nil), // 24: GameStart + (*UserList)(nil), // 25: UserList + (*KingSelection)(nil), // 26: KingSelection + (*TalonSelection)(nil), // 27: TalonSelection + (*Stash)(nil), // 28: Stash + (*StashedTarock)(nil), // 29: StashedTarock + (*Radelci)(nil), // 30: Radelci + (*StartPredictions)(nil), // 31: StartPredictions + (*Predictions)(nil), // 32: Predictions + (*TalonReveal)(nil), // 33: TalonReveal + (*PlayingReveal)(nil), // 34: PlayingReveal + (*LoginRequest)(nil), // 35: LoginRequest + (*LoginInfo)(nil), // 36: LoginInfo + (*LoginResponse)(nil), // 37: LoginResponse + (*InvitePlayer)(nil), // 38: InvitePlayer + (*ClearHand)(nil), // 39: ClearHand + (*Time)(nil), // 40: Time + (*ChatMessage)(nil), // 41: ChatMessage + (*Message)(nil), // 42: Message + (*LoginResponse_OK)(nil), // 43: LoginResponse.OK + (*LoginResponse_Fail)(nil), // 44: LoginResponse.Fail } var file_messages_proto_depIdxs = []int32{ - 22, // 0: GameEnd.results:type_name -> Results + 23, // 0: GameEnd.results:type_name -> Results 4, // 1: GameEnd.request:type_name -> Request 0, // 2: Connection.join:type_name -> Connect 1, // 3: Connection.disconnect:type_name -> Disconnect @@ -3717,75 +3774,76 @@ var file_messages_proto_depIdxs = []int32{ 3, // 6: Card.send:type_name -> Send 4, // 7: Card.request:type_name -> Request 5, // 8: Card.remove:type_name -> Remove - 19, // 9: ResultsUser.user:type_name -> User - 17, // 10: Stih.card:type_name -> Card - 20, // 11: Results.user:type_name -> ResultsUser - 21, // 12: Results.stih:type_name -> Stih - 19, // 13: GameStart.user:type_name -> User - 19, // 14: UserList.user:type_name -> User + 20, // 9: ResultsUser.user:type_name -> User + 18, // 10: Stih.card:type_name -> Card + 21, // 11: Results.user:type_name -> ResultsUser + 22, // 12: Results.stih:type_name -> Stih + 20, // 13: GameStart.user:type_name -> User + 20, // 14: UserList.user:type_name -> User 4, // 15: KingSelection.request:type_name -> Request 3, // 16: KingSelection.send:type_name -> Send 7, // 17: KingSelection.notification:type_name -> Notification 4, // 18: TalonSelection.request:type_name -> Request 3, // 19: TalonSelection.send:type_name -> Send 7, // 20: TalonSelection.notification:type_name -> Notification - 17, // 21: Stash.card:type_name -> Card + 18, // 21: Stash.card:type_name -> Card 4, // 22: Stash.request:type_name -> Request 3, // 23: Stash.send:type_name -> Send 7, // 24: Stash.notification:type_name -> Notification - 17, // 25: StashedTarock.card:type_name -> Card - 19, // 26: Predictions.kralj_ultimo:type_name -> User - 19, // 27: Predictions.kralj_ultimo_kontra_dal:type_name -> User - 19, // 28: Predictions.trula:type_name -> User - 19, // 29: Predictions.kralji:type_name -> User - 19, // 30: Predictions.pagat_ultimo:type_name -> User - 19, // 31: Predictions.pagat_ultimo_kontra_dal:type_name -> User - 19, // 32: Predictions.igra:type_name -> User - 19, // 33: Predictions.igra_kontra_dal:type_name -> User - 19, // 34: Predictions.valat:type_name -> User - 19, // 35: Predictions.barvni_valat:type_name -> User - 19, // 36: Predictions.mondfang:type_name -> User - 19, // 37: Predictions.mondfang_kontra_dal:type_name -> User - 21, // 38: TalonReveal.stih:type_name -> Stih - 19, // 39: PlayingReveal.playing:type_name -> User - 42, // 40: LoginResponse.ok:type_name -> LoginResponse.OK - 43, // 41: LoginResponse.fail:type_name -> LoginResponse.Fail - 14, // 42: Message.connection:type_name -> Connection - 15, // 43: Message.licitiranje:type_name -> Licitiranje - 17, // 44: Message.card:type_name -> Card - 16, // 45: Message.licitiranje_start:type_name -> LicitiranjeStart - 23, // 46: Message.game_start:type_name -> GameStart - 34, // 47: Message.login_request:type_name -> LoginRequest - 35, // 48: Message.login_info:type_name -> LoginInfo - 36, // 49: Message.login_response:type_name -> LoginResponse + 18, // 25: StashedTarock.card:type_name -> Card + 20, // 26: Predictions.kralj_ultimo:type_name -> User + 20, // 27: Predictions.kralj_ultimo_kontra_dal:type_name -> User + 20, // 28: Predictions.trula:type_name -> User + 20, // 29: Predictions.kralji:type_name -> User + 20, // 30: Predictions.pagat_ultimo:type_name -> User + 20, // 31: Predictions.pagat_ultimo_kontra_dal:type_name -> User + 20, // 32: Predictions.igra:type_name -> User + 20, // 33: Predictions.igra_kontra_dal:type_name -> User + 20, // 34: Predictions.valat:type_name -> User + 20, // 35: Predictions.barvni_valat:type_name -> User + 20, // 36: Predictions.mondfang:type_name -> User + 20, // 37: Predictions.mondfang_kontra_dal:type_name -> User + 22, // 38: TalonReveal.stih:type_name -> Stih + 20, // 39: PlayingReveal.playing:type_name -> User + 43, // 40: LoginResponse.ok:type_name -> LoginResponse.OK + 44, // 41: LoginResponse.fail:type_name -> LoginResponse.Fail + 15, // 42: Message.connection:type_name -> Connection + 16, // 43: Message.licitiranje:type_name -> Licitiranje + 18, // 44: Message.card:type_name -> Card + 17, // 45: Message.licitiranje_start:type_name -> LicitiranjeStart + 24, // 46: Message.game_start:type_name -> GameStart + 35, // 47: Message.login_request:type_name -> LoginRequest + 36, // 48: Message.login_info:type_name -> LoginInfo + 37, // 49: Message.login_response:type_name -> LoginResponse 6, // 50: Message.clear_desk:type_name -> ClearDesk - 22, // 51: Message.results:type_name -> Results - 24, // 52: Message.user_list:type_name -> UserList - 25, // 53: Message.king_selection:type_name -> KingSelection - 30, // 54: Message.start_predictions:type_name -> StartPredictions - 31, // 55: Message.predictions:type_name -> Predictions - 32, // 56: Message.talon_reveal:type_name -> TalonReveal - 33, // 57: Message.playing_reveal:type_name -> PlayingReveal - 26, // 58: Message.talon_selection:type_name -> TalonSelection - 27, // 59: Message.stash:type_name -> Stash - 13, // 60: Message.game_end:type_name -> GameEnd - 18, // 61: Message.game_start_countdown:type_name -> GameStartCountdown - 31, // 62: Message.predictions_resend:type_name -> Predictions - 29, // 63: Message.radelci:type_name -> Radelci - 39, // 64: Message.time:type_name -> Time - 40, // 65: Message.chat_message:type_name -> ChatMessage - 37, // 66: Message.invite_player:type_name -> InvitePlayer - 28, // 67: Message.stashed_tarock:type_name -> StashedTarock - 38, // 68: Message.clear_hand:type_name -> ClearHand + 23, // 51: Message.results:type_name -> Results + 25, // 52: Message.user_list:type_name -> UserList + 26, // 53: Message.king_selection:type_name -> KingSelection + 31, // 54: Message.start_predictions:type_name -> StartPredictions + 32, // 55: Message.predictions:type_name -> Predictions + 33, // 56: Message.talon_reveal:type_name -> TalonReveal + 34, // 57: Message.playing_reveal:type_name -> PlayingReveal + 27, // 58: Message.talon_selection:type_name -> TalonSelection + 28, // 59: Message.stash:type_name -> Stash + 14, // 60: Message.game_end:type_name -> GameEnd + 19, // 61: Message.game_start_countdown:type_name -> GameStartCountdown + 32, // 62: Message.predictions_resend:type_name -> Predictions + 30, // 63: Message.radelci:type_name -> Radelci + 40, // 64: Message.time:type_name -> Time + 41, // 65: Message.chat_message:type_name -> ChatMessage + 38, // 66: Message.invite_player:type_name -> InvitePlayer + 29, // 67: Message.stashed_tarock:type_name -> StashedTarock + 39, // 68: Message.clear_hand:type_name -> ClearHand 9, // 69: Message.replay_link:type_name -> ReplayLink 10, // 70: Message.replay_move:type_name -> ReplayMove 11, // 71: Message.replay_select_game:type_name -> ReplaySelectGame - 12, // 72: Message.game_info:type_name -> GameInfo - 73, // [73:73] is the sub-list for method output_type - 73, // [73:73] is the sub-list for method input_type - 73, // [73:73] is the sub-list for extension type_name - 73, // [73:73] is the sub-list for extension extendee - 0, // [0:73] is the sub-list for field type_name + 13, // 72: Message.game_info:type_name -> GameInfo + 12, // 73: Message.start_early:type_name -> StartEarly + 74, // [74:74] is the sub-list for method output_type + 74, // [74:74] is the sub-list for method input_type + 74, // [74:74] is the sub-list for extension type_name + 74, // [74:74] is the sub-list for extension extendee + 0, // [0:74] is the sub-list for field type_name } func init() { file_messages_proto_init() } @@ -3939,7 +3997,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameInfo); i { + switch v := v.(*StartEarly); i { case 0: return &v.state case 1: @@ -3951,7 +4009,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameEnd); i { + switch v := v.(*GameInfo); i { case 0: return &v.state case 1: @@ -3963,7 +4021,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Connection); i { + switch v := v.(*GameEnd); i { case 0: return &v.state case 1: @@ -3975,7 +4033,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Licitiranje); i { + switch v := v.(*Connection); i { case 0: return &v.state case 1: @@ -3987,7 +4045,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LicitiranjeStart); i { + switch v := v.(*Licitiranje); i { case 0: return &v.state case 1: @@ -3999,7 +4057,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Card); i { + switch v := v.(*LicitiranjeStart); i { case 0: return &v.state case 1: @@ -4011,7 +4069,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameStartCountdown); i { + switch v := v.(*Card); i { case 0: return &v.state case 1: @@ -4023,7 +4081,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*User); i { + switch v := v.(*GameStartCountdown); i { case 0: return &v.state case 1: @@ -4035,7 +4093,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResultsUser); i { + switch v := v.(*User); i { case 0: return &v.state case 1: @@ -4047,7 +4105,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Stih); i { + switch v := v.(*ResultsUser); i { case 0: return &v.state case 1: @@ -4059,7 +4117,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Results); i { + switch v := v.(*Stih); i { case 0: return &v.state case 1: @@ -4071,7 +4129,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameStart); i { + switch v := v.(*Results); i { case 0: return &v.state case 1: @@ -4083,7 +4141,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UserList); i { + switch v := v.(*GameStart); i { case 0: return &v.state case 1: @@ -4095,7 +4153,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KingSelection); i { + switch v := v.(*UserList); i { case 0: return &v.state case 1: @@ -4107,7 +4165,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TalonSelection); i { + switch v := v.(*KingSelection); i { case 0: return &v.state case 1: @@ -4119,7 +4177,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Stash); i { + switch v := v.(*TalonSelection); i { case 0: return &v.state case 1: @@ -4131,7 +4189,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StashedTarock); i { + switch v := v.(*Stash); i { case 0: return &v.state case 1: @@ -4143,7 +4201,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Radelci); i { + switch v := v.(*StashedTarock); i { case 0: return &v.state case 1: @@ -4155,7 +4213,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartPredictions); i { + switch v := v.(*Radelci); i { case 0: return &v.state case 1: @@ -4167,7 +4225,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Predictions); i { + switch v := v.(*StartPredictions); i { case 0: return &v.state case 1: @@ -4179,7 +4237,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TalonReveal); i { + switch v := v.(*Predictions); i { case 0: return &v.state case 1: @@ -4191,7 +4249,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayingReveal); i { + switch v := v.(*TalonReveal); i { case 0: return &v.state case 1: @@ -4203,7 +4261,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoginRequest); i { + switch v := v.(*PlayingReveal); i { case 0: return &v.state case 1: @@ -4215,7 +4273,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoginInfo); i { + switch v := v.(*LoginRequest); i { case 0: return &v.state case 1: @@ -4227,7 +4285,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoginResponse); i { + switch v := v.(*LoginInfo); i { case 0: return &v.state case 1: @@ -4239,7 +4297,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InvitePlayer); i { + switch v := v.(*LoginResponse); i { case 0: return &v.state case 1: @@ -4251,7 +4309,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClearHand); i { + switch v := v.(*InvitePlayer); i { case 0: return &v.state case 1: @@ -4263,7 +4321,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Time); i { + switch v := v.(*ClearHand); i { case 0: return &v.state case 1: @@ -4275,7 +4333,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMessage); i { + switch v := v.(*Time); i { case 0: return &v.state case 1: @@ -4287,7 +4345,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Message); i { + switch v := v.(*ChatMessage); i { case 0: return &v.state case 1: @@ -4299,7 +4357,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoginResponse_OK); i { + switch v := v.(*Message); i { case 0: return &v.state case 1: @@ -4311,6 +4369,18 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LoginResponse_OK); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_messages_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LoginResponse_Fail); i { case 0: return &v.state @@ -4323,41 +4393,41 @@ func file_messages_proto_init() { } } } - file_messages_proto_msgTypes[13].OneofWrappers = []interface{}{ + file_messages_proto_msgTypes[14].OneofWrappers = []interface{}{ (*GameEnd_Results)(nil), (*GameEnd_Request)(nil), } - file_messages_proto_msgTypes[14].OneofWrappers = []interface{}{ + file_messages_proto_msgTypes[15].OneofWrappers = []interface{}{ (*Connection_Join)(nil), (*Connection_Disconnect)(nil), (*Connection_Leave)(nil), } - file_messages_proto_msgTypes[17].OneofWrappers = []interface{}{ + file_messages_proto_msgTypes[18].OneofWrappers = []interface{}{ (*Card_Receive)(nil), (*Card_Send)(nil), (*Card_Request)(nil), (*Card_Remove)(nil), } - file_messages_proto_msgTypes[25].OneofWrappers = []interface{}{ + file_messages_proto_msgTypes[26].OneofWrappers = []interface{}{ (*KingSelection_Request)(nil), (*KingSelection_Send)(nil), (*KingSelection_Notification)(nil), } - file_messages_proto_msgTypes[26].OneofWrappers = []interface{}{ + file_messages_proto_msgTypes[27].OneofWrappers = []interface{}{ (*TalonSelection_Request)(nil), (*TalonSelection_Send)(nil), (*TalonSelection_Notification)(nil), } - file_messages_proto_msgTypes[27].OneofWrappers = []interface{}{ + file_messages_proto_msgTypes[28].OneofWrappers = []interface{}{ (*Stash_Request)(nil), (*Stash_Send)(nil), (*Stash_Notification)(nil), } - file_messages_proto_msgTypes[36].OneofWrappers = []interface{}{ + file_messages_proto_msgTypes[37].OneofWrappers = []interface{}{ (*LoginResponse_Ok)(nil), (*LoginResponse_Fail_)(nil), } - file_messages_proto_msgTypes[41].OneofWrappers = []interface{}{ + file_messages_proto_msgTypes[42].OneofWrappers = []interface{}{ (*Message_Connection)(nil), (*Message_Licitiranje)(nil), (*Message_Card)(nil), @@ -4389,6 +4459,7 @@ func file_messages_proto_init() { (*Message_ReplayMove)(nil), (*Message_ReplaySelectGame)(nil), (*Message_GameInfo)(nil), + (*Message_StartEarly)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -4396,7 +4467,7 @@ func file_messages_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_messages_proto_rawDesc, NumEnums: 0, - NumMessages: 44, + NumMessages: 45, NumExtensions: 0, NumServices: 0, }, diff --git a/backend/internal/ws/client.go b/backend/internal/ws/client.go index 2457a87..741f1d1 100644 --- a/backend/internal/ws/client.go +++ b/backend/internal/ws/client.go @@ -237,6 +237,9 @@ func (c *clientImpl) ReadPump() { c.logger.Debugw("received ReplayMove packet", "gameId", c.game, "userId", c.user.ID) c.server.NextReplayStep(c.game) break + case *messages.Message_StartEarly: + c.logger.Debugw("received StartEarly packet", "gameId", c.game, "userId", c.user.ID) + c.server.StartGameEarly(c.user.ID, c.game) default: message.PlayerId = c.user.ID events.Publish("server.broadcast", c.user.ID, message) diff --git a/backend/internal/ws/gameend.go b/backend/internal/ws/gameend.go index d42aeb0..909bd07 100644 --- a/backend/internal/ws/gameend.go +++ b/backend/internal/ws/gameend.go @@ -82,6 +82,14 @@ func (s *serverImpl) GameAddRounds(userId string, gameId string, rounds int) { return } + if game.WaitingFor != "results" { + return + } + + if game.GameCount != game.GamesRequired && game.GamesRequired != -1 { + return + } + if !helpers.Contains(game.Starts, userId) { s.logger.Warnw("user tried to end game in which he's not in.", "userId", userId, "gameId", gameId) return @@ -92,6 +100,11 @@ func (s *serverImpl) GameAddRounds(userId string, gameId string, rounds int) { return } + if !(rounds == 0 || rounds == 1 || rounds == 4 || rounds == 8 || rounds == 12 || rounds == 16 || rounds == 20) { + s.logger.Warnw("user tried to add an unofficial number of rounds", "userId", userId, "gameId", gameId) + return + } + game.GameEnd = append(game.GameEnd, userId) if game.VotedAdditionOfGames == -1 { diff --git a/backend/internal/ws/gamestart.go b/backend/internal/ws/gamestart.go index 1d740df..6dd5c17 100644 --- a/backend/internal/ws/gamestart.go +++ b/backend/internal/ws/gamestart.go @@ -55,6 +55,8 @@ func (s *serverImpl) StartGame(gameId string) { game.SinceLastPrediction = -1 game.CurrentPredictions = &messages.Predictions{} game.VotedAdditionOfGames = -1 + game.WaitingFor = "" + game.EarlyGameStart = make([]string, 0) game.GameCount++ @@ -198,3 +200,53 @@ func (s *serverImpl) ManuallyStartGame(playerId string, gameId string) { s.GameStartGoroutine(gameId) } } + +func (s *serverImpl) StartGameEarly(userId string, gameId string) { + game, exists := s.games[gameId] + if !exists { + return + } + + if !game.CanExtendGame { + return + } + + if game.WaitingFor != "results" { + return + } + + if game.GamesRequired == game.GameCount { + return + } + + if game.GamesRequired == -1 { + return + } + + if !helpers.Contains(game.Starts, userId) { + s.logger.Warnw("user tried to end game in which he's not in.", "userId", userId, "gameId", gameId) + return + } + + if helpers.Contains(game.EarlyGameStart, userId) { + s.logger.Warnw("user tried voting twice.", "userId", userId, "gameId", gameId) + return + } + + game.EarlyGameStart = append(game.EarlyGameStart, userId) + + totalPlayers := 0 + for _, v := range game.Players { + if v.GetBotStatus() { + continue + } + if len(v.GetClients()) == 0 { + continue + } + totalPlayers++ + } + + if len(game.EarlyGameStart) >= totalPlayers { + s.StartGame(gameId) + } +} diff --git a/backend/internal/ws/results.go b/backend/internal/ws/results.go index d4e4bd0..106df98 100644 --- a/backend/internal/ws/results.go +++ b/backend/internal/ws/results.go @@ -12,6 +12,9 @@ func (s *serverImpl) Results(gameId string) { return } + gameCount := game.GameCount + game.WaitingFor = "results" + mondfang := false // stockškis does the magic @@ -97,13 +100,28 @@ func (s *serverImpl) Results(gameId string) { }, ) time.Sleep(time.Second) + if game.GameCount != gameCount || game.WaitingFor != "results" { + s.Broadcast( + "", + gameId, + &messages.Message{ + Data: &messages.Message_GameStartCountdown{GameStartCountdown: &messages.GameStartCountdown{Countdown: 0}}, + }, + ) + // igra se je že začela, posledično ne potrebujemo igre začeti še enkrat + return + } } - if game.GameCount == game.GamesRequired && !game.Replay { + if (game.GameCount == game.GamesRequired || game.GamesRequired == -1) && !game.Replay { if game.VotedAdditionOfGames <= 0 { s.EndGame(gameId) return } - game.GamesRequired += game.VotedAdditionOfGames + if game.GamesRequired == -1 { + game.GamesRequired = game.GameCount + game.VotedAdditionOfGames + } else { + game.GamesRequired += game.VotedAdditionOfGames + } if game.VotedAdditionOfGames == 1 { game.SkisRunda = true game.CanExtendGame = false diff --git a/backend/internal/ws/types.go b/backend/internal/ws/types.go index 1263164..95ead64 100644 --- a/backend/internal/ws/types.go +++ b/backend/internal/ws/types.go @@ -48,6 +48,7 @@ type Server interface { GameStartGoroutine(gameId string) SelectReplayGame(gameId string, replayGame int) NextReplayStep(gameId string) + StartGameEarly(playerId string, gameId string) } // Client contains all the methods we need for recognising and working with the Client @@ -132,6 +133,7 @@ type Game struct { CurrentPredictions *messages.Predictions SinceLastPrediction int GameEnd []string + EarlyGameStart []string EndTimer chan bool StartTime int AdditionalTime float64 diff --git a/backend/main.go b/backend/main.go index a97b190..3126924 100644 --- a/backend/main.go +++ b/backend/main.go @@ -224,6 +224,10 @@ func run(config *ServerConfig) { return } + if rund <= 0 || rund > 40 { + rund = -1 + } + skisfang, err := strconv.ParseBool(r.FormValue("skisfang")) if err != nil { sugared.Debugw("atoi failed", "err", err)