From 5a70a161498d33d239897d38f878739a907da90f Mon Sep 17 00:00:00 2001 From: Xavier Michelon Date: Mon, 23 Jan 2023 14:53:44 +0100 Subject: [PATCH] GODT-1770: handle UserBadEvent in CLI and gRPC. --- internal/focus/proto/focus.pb.go | 7 +- internal/focus/proto/focus_grpc.pb.go | 1 - .../bridge-gui-tester/Tabs/UsersTab.cpp | 37 +- .../bridge-gui-tester/Tabs/UsersTab.h | 1 + .../bridge-gui-tester/Tabs/UsersTab.ui | 48 +- .../bridge-gui/bridge-gui/QMLBackend.cpp | 19 + .../bridge-gui/bridge-gui/QMLBackend.h | 3 + .../bridge-gui/bridge-gui/UserList.cpp | 11 + .../frontend/bridge-gui/bridge-gui/UserList.h | 1 + .../bridge-gui/qml/ContentWrapper.qml | 16 + .../bridge-gui/bridge-gui/qml/MainWindow.qml | 5 + .../qml/Notifications/Notifications.qml | 28 + .../bridgepp/bridgepp/GRPC/EventFactory.cpp | 14 + .../bridgepp/bridgepp/GRPC/EventFactory.h | 1 + .../bridgepp/bridgepp/GRPC/GRPCClient.cpp | 8 + .../bridgepp/bridgepp/GRPC/GRPCClient.h | 1 + .../bridgepp/bridgepp/GRPC/bridge.pb.cc | 607 ++++++++--- .../bridgepp/bridgepp/GRPC/bridge.pb.h | 377 ++++++- internal/frontend/cli/frontend.go | 8 + internal/frontend/grpc/bridge.pb.go | 955 ++++++++++-------- internal/frontend/grpc/bridge.proto | 6 + internal/frontend/grpc/event_factory.go | 4 + internal/frontend/grpc/service.go | 5 +- 23 files changed, 1591 insertions(+), 572 deletions(-) diff --git a/internal/focus/proto/focus.pb.go b/internal/focus/proto/focus.pb.go index 5d3c64c0..4e59c6c6 100644 --- a/internal/focus/proto/focus.pb.go +++ b/internal/focus/proto/focus.pb.go @@ -24,12 +24,11 @@ package proto import ( - reflect "reflect" - sync "sync" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" emptypb "google.golang.org/protobuf/types/known/emptypb" + reflect "reflect" + sync "sync" ) const ( @@ -105,7 +104,7 @@ var file_focus_proto_rawDesc = []byte{ 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x4d, 0x61, 0x69, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2d, 0x62, 0x72, 0x69, 0x64, - 0x67, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x66, + 0x67, 0x65, 0x2f, 0x76, 0x33, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } diff --git a/internal/focus/proto/focus_grpc.pb.go b/internal/focus/proto/focus_grpc.pb.go index 19c8c6bb..2c1a00f8 100644 --- a/internal/focus/proto/focus_grpc.pb.go +++ b/internal/focus/proto/focus_grpc.pb.go @@ -8,7 +8,6 @@ package proto import ( context "context" - grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/internal/frontend/bridge-gui/bridge-gui-tester/Tabs/UsersTab.cpp b/internal/frontend/bridge-gui/bridge-gui-tester/Tabs/UsersTab.cpp index 0103da0a..6bce0797 100644 --- a/internal/frontend/bridge-gui/bridge-gui-tester/Tabs/UsersTab.cpp +++ b/internal/frontend/bridge-gui/bridge-gui-tester/Tabs/UsersTab.cpp @@ -51,6 +51,7 @@ UsersTab::UsersTab(QWidget *parent) connect(ui_.buttonEditUser, &QPushButton::clicked, this, &UsersTab::onEditUserButton); connect(ui_.tableUserList, &QTableView::doubleClicked, this, &UsersTab::onEditUserButton); connect(ui_.buttonRemoveUser, &QPushButton::clicked, this, &UsersTab::onRemoveUserButton); + connect(ui_.buttonUserBadEvent, &QPushButton::clicked, this, &UsersTab::onSendUserBadEvent); connect(ui_.checkUsernamePasswordError, &QCheckBox::toggled, this, &UsersTab::updateGUIState); users_.append(randomUser()); @@ -96,6 +97,8 @@ void UsersTab::onEditUserButton() { if (grpc.isStreaming()) { grpc.sendEvent(newUserChangedEvent(user->id())); } + + this->updateGUIState(); } @@ -125,13 +128,45 @@ void UsersTab::onSelectionChanged(QItemSelection, QItemSelection) { } +//**************************************************************************************************************************************************** +// +//**************************************************************************************************************************************************** +void UsersTab::onSendUserBadEvent() { + SPUser const user = selectedUser(); + int const index = this->selectedIndex(); + + if (!user) { + app().log().error(QString("%1 failed. Unkown user.").arg(__FUNCTION__)); + return; + } + + if (UserState::SignedOut == user->state()) { + app().log().error(QString("%1 failed. User is already signed out").arg(__FUNCTION__)); + } + + user->setState(UserState::SignedOut); + users_.touch(index); + + GRPCService &grpc = app().grpc(); + if (grpc.isStreaming()) { + QString const userID = user->id(); + grpc.sendEvent(newUserChangedEvent(userID)); + grpc.sendEvent(newUserBadEvent(userID, ui_.editUserBadEvent->text())); + } + + this->updateGUIState(); +} + + //**************************************************************************************************************************************************** // //**************************************************************************************************************************************************** void UsersTab::updateGUIState() { - bool const hasSelectedUser = ui_.tableUserList->selectionModel()->hasSelection(); + SPUser const user = selectedUser(); + bool const hasSelectedUser = user.get(); ui_.buttonEditUser->setEnabled(hasSelectedUser); ui_.buttonRemoveUser->setEnabled(hasSelectedUser); + ui_.groupBoxBadEvent->setEnabled(hasSelectedUser && (UserState::SignedOut != user->state())); ui_.editUsernamePasswordError->setEnabled(ui_.checkUsernamePasswordError->isChecked()); } diff --git a/internal/frontend/bridge-gui/bridge-gui-tester/Tabs/UsersTab.h b/internal/frontend/bridge-gui/bridge-gui-tester/Tabs/UsersTab.h index 9e3da91e..94258b86 100644 --- a/internal/frontend/bridge-gui/bridge-gui-tester/Tabs/UsersTab.h +++ b/internal/frontend/bridge-gui/bridge-gui-tester/Tabs/UsersTab.h @@ -60,6 +60,7 @@ private slots: void onEditUserButton(); ///< Edit the currently selected user. void onRemoveUserButton(); ///< Remove the currently selected user. void onSelectionChanged(QItemSelection, QItemSelection); ///< Slot for the change of the selection. + void onSendUserBadEvent(); ///< Slot for the 'Send Bad Event Error' button. void updateGUIState(); ///< Update the GUI state. private: // member functions. diff --git a/internal/frontend/bridge-gui/bridge-gui-tester/Tabs/UsersTab.ui b/internal/frontend/bridge-gui/bridge-gui-tester/Tabs/UsersTab.ui index e34cf352..052e2546 100644 --- a/internal/frontend/bridge-gui/bridge-gui-tester/Tabs/UsersTab.ui +++ b/internal/frontend/bridge-gui/bridge-gui-tester/Tabs/UsersTab.ui @@ -67,7 +67,53 @@ - + + + + 0 + 0 + + + + Bad Event + + + + + + + + Message: + + + + + + + + 200 + 0 + + + + Bad event error. + + + + + + + + + Send Bad Event Error + + + + + + + + 0 diff --git a/internal/frontend/bridge-gui/bridge-gui/QMLBackend.cpp b/internal/frontend/bridge-gui/bridge-gui/QMLBackend.cpp index e3dc104f..0e49ec25 100644 --- a/internal/frontend/bridge-gui/bridge-gui/QMLBackend.cpp +++ b/internal/frontend/bridge-gui/bridge-gui/QMLBackend.cpp @@ -880,6 +880,24 @@ void QMLBackend::onLoginAlreadyLoggedIn(QString const &userID) { } +//**************************************************************************************************************************************************** +/// \param[in] userID The userID. +/// \param[in] errorMessage. Unused +//**************************************************************************************************************************************************** +void QMLBackend::onUserBadEvent(QString const &userID, QString const &errorMessage) { + HANDLE_EXCEPTION( + Q_UNUSED(errorMessage); + SPUser const user = users_->getUserWithID(userID); + if (!user) + app().log().error(QString("Received bad event for unknown user %1").arg(user->id())); + user->setState(UserState::SignedOut); + emit userBadEvent(tr("%1 was logged out because of an internal error.").arg(user->primaryEmailOrUsername())); + emit selectUser(userID); + emit showMainWindow(); + ) +} + + //**************************************************************************************************************************************************** // //**************************************************************************************************************************************************** @@ -987,5 +1005,6 @@ void QMLBackend::connectGrpcEvents() { // user events connect(client, &GRPCClient::userDisconnected, this, &QMLBackend::userDisconnected); + connect(client, &GRPCClient::userBadEvent, this, &QMLBackend::onUserBadEvent); users_->connectGRPCEvents(); } diff --git a/internal/frontend/bridge-gui/bridge-gui/QMLBackend.h b/internal/frontend/bridge-gui/bridge-gui/QMLBackend.h index 3e41a5d9..fa41e7a9 100644 --- a/internal/frontend/bridge-gui/bridge-gui/QMLBackend.h +++ b/internal/frontend/bridge-gui/bridge-gui/QMLBackend.h @@ -181,6 +181,7 @@ public slots: // slot for signals received from gRPC that need transformation in void onGenericError(bridgepp::ErrorInfo const &info); ///< Slot for generic errors received from the gRPC service. void onLoginFinished(QString const &userID, bool wasSignedOut); ///< Slot for LoginFinished gRPC event. void onLoginAlreadyLoggedIn(QString const &userID); ///< Slot for the LoginAlreadyLoggedIn gRPC event. + void onUserBadEvent(QString const& userID, QString const& errorMessage); ///< Slot for the userBadEvent gRPC event. signals: // Signals received from the Go backend, to be forwarded to QML void toggleAutostartFinished(); ///< Signal for the 'toggleAutostartFinished' gRPC stream event. @@ -223,6 +224,7 @@ signals: // Signals received from the Go backend, to be forwarded to QML void addressChangedLogout(QString const &address); ///< Signal for the 'addressChangedLogout' gRPC stream event. void apiCertIssue(); ///< Signal for the 'apiCertIssue' gRPC stream event. void userDisconnected(QString const &username); ///< Signal for the 'userDisconnected' gRPC stream event. + void userBadEvent(QString const &message); ///< Signal for the 'userBadEvent' gRPC stream event. void internetOff(); ///< Signal for the 'internetOff' gRPC stream event. void internetOn(); ///< Signal for the 'internetOn' gRPC stream event. void resetFinished(); ///< Signal for the 'resetFinished' gRPC stream event. @@ -232,6 +234,7 @@ signals: // Signals received from the Go backend, to be forwarded to QML void showMainWindow(); ///< Signal for the 'showMainWindow' gRPC stream event. void hideMainWindow(); ///< Signal for the 'hideMainWindow' gRPC stream event. void genericError(QString const &title, QString const &description); ///< Signal for the 'genericError' gRPC stream event. + void selectUser(QString const); ///< Signal that request the given user account to be displayed. // This signal is emitted when an exception is intercepted is calls triggered by QML. QML engine would intercept the exception otherwise. void fatalError(QString const &function, QString const &message) const; ///< Signal emitted when an fatal error occurs. diff --git a/internal/frontend/bridge-gui/bridge-gui/UserList.cpp b/internal/frontend/bridge-gui/bridge-gui/UserList.cpp index 99c0482c..908dbd1c 100644 --- a/internal/frontend/bridge-gui/bridge-gui/UserList.cpp +++ b/internal/frontend/bridge-gui/bridge-gui/UserList.cpp @@ -161,6 +161,17 @@ User *UserList::get(int row) const { } +//**************************************************************************************************************************************************** +/// \param[in] userID The userID. +/// \return The primary email address (or if unknown the username) of the user. +/// \return An empty string if the user cannot be found. +//**************************************************************************************************************************************************** +QString UserList::primaryEmailOrUsername(QString const &userID) const { + SPUser const user = this->getUserWithID(userID); + return user ? user->primaryEmailOrUsername() : QString(); +} + + //**************************************************************************************************************************************************** /// \param[in] userID The userID. //**************************************************************************************************************************************************** diff --git a/internal/frontend/bridge-gui/bridge-gui/UserList.h b/internal/frontend/bridge-gui/bridge-gui/UserList.h index 6e8b78aa..60d06c44 100644 --- a/internal/frontend/bridge-gui/bridge-gui/UserList.h +++ b/internal/frontend/bridge-gui/bridge-gui/UserList.h @@ -54,6 +54,7 @@ signals: public: Q_INVOKABLE bridgepp::User *get(int row) const; + Q_INVOKABLE QString primaryEmailOrUsername(QString const& userID) const; ///< Return the primary email or username of a user public slots: ///< handler for signals coming from the gRPC service void onUserChanged(QString const &userID); diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/ContentWrapper.qml b/internal/frontend/bridge-gui/bridge-gui/qml/ContentWrapper.qml index c2edcc8e..404addea 100644 --- a/internal/frontend/bridge-gui/bridge-gui/qml/ContentWrapper.qml +++ b/internal/frontend/bridge-gui/bridge-gui/qml/ContentWrapper.qml @@ -399,4 +399,20 @@ Item { signIn.username = username rightContent.showSignIn() } + + function selectUser(userID) { + var users = Backend.users; + for (var i = 0; i < users.count; i++) { + var user = users.get(i) + if (user.id !== userID) { + continue; + } + accounts.currentIndex = i; + if (user.state === EUserState.SignedOut) + showSignIn(user.primaryEmailOrUsername()) + return; + } + console.error("User with ID ", userID, " was not found in the account list") + } + } diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/MainWindow.qml b/internal/frontend/bridge-gui/bridge-gui/qml/MainWindow.qml index 3be7437f..4894f6be 100644 --- a/internal/frontend/bridge-gui/bridge-gui/qml/MainWindow.qml +++ b/internal/frontend/bridge-gui/bridge-gui/qml/MainWindow.qml @@ -86,6 +86,10 @@ ApplicationWindow { root.showAndRise() } + function onSelectUser(userID) { + root.selectUser(userID) + } + function onLoginFinished(index, wasSignedOut) { var user = Backend.users.get(index) if (user && !wasSignedOut) { @@ -182,6 +186,7 @@ ApplicationWindow { function showLocalCacheSettings() { contentWrapper.showLocalCacheSettings() } function showSettings() { contentWrapper.showSettings() } function showHelp() { contentWrapper.showHelp() } + function selectUser(userID) { contentWrapper.selectUser(userID) } function showSignIn(username) { if (contentLayout.currentIndex == 1) return diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/Notifications/Notifications.qml b/internal/frontend/bridge-gui/bridge-gui/qml/Notifications/Notifications.qml index 79032447..23638a32 100644 --- a/internal/frontend/bridge-gui/bridge-gui/qml/Notifications/Notifications.qml +++ b/internal/frontend/bridge-gui/bridge-gui/qml/Notifications/Notifications.qml @@ -80,6 +80,7 @@ QtObject { root.addressChanged, root.apiCertIssue, root.noActiveKeyForRecipient, + root.userBadEvent, root.genericError ] @@ -1101,6 +1102,33 @@ QtObject { ] } + property Notification userBadEvent: Notification { + title: qsTr("User was logged out") + brief: title + description: "#PlaceHolderText" + icon: "./icons/ic-exclamation-circle-filled.svg" + type: Notification.NotificationType.Danger + group: Notifications.Group.Connection + + Connections { + target: Backend + function onUserBadEvent(message) { + root.userBadEvent.description = message + root.userBadEvent.active = true + } + } + + action: [ + Action { + text: qsTr("OK") + + onTriggered: { + root.userBadEvent.active = false + } + } + ] + } + property Notification genericError: Notification { title: "#PlaceholderText#" description: "#PlaceholderText#" diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/EventFactory.cpp b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/EventFactory.cpp index 3293a56e..231a5c8e 100644 --- a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/EventFactory.cpp +++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/EventFactory.cpp @@ -560,6 +560,20 @@ SPStreamEvent newUserChangedEvent(QString const &userID) { } +//**************************************************************************************************************************************************** +/// \param[in] userID The userID. +/// \param[in] errorMessage The errorMessage +//**************************************************************************************************************************************************** +SPStreamEvent newUserBadEvent(QString const &userID, QString const &errorMessage) { + auto event = new grpc::UserBadEvent; + event->set_userid(userID.toStdString()); + event->set_errormessage(errorMessage.toStdString()); + auto userEvent = new grpc::UserEvent; + userEvent->set_allocated_userbadevent(event); + return wrapUserEvent(userEvent); +} + + //**************************************************************************************************************************************************** /// \param[in] errorCode The error errorCode. /// \return The event. diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/EventFactory.h b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/EventFactory.h index 12c17786..ed35e712 100644 --- a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/EventFactory.h +++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/EventFactory.h @@ -77,6 +77,7 @@ SPStreamEvent newApiCertIssueEvent(); ///< Create a new ApiCertIssueEvent event. SPStreamEvent newToggleSplitModeFinishedEvent(QString const &userID); ///< Create a new ToggleSplitModeFinishedEvent event. SPStreamEvent newUserDisconnectedEvent(QString const &username); ///< Create a new UserDisconnectedEvent event. SPStreamEvent newUserChangedEvent(QString const &userID); ///< Create a new UserChangedEvent event. +SPStreamEvent newUserBadEvent(QString const &userID, QString const& errorMessage); ///< Create a new UserBadEvent event. // Generic error event SPStreamEvent newGenericErrorEvent(grpc::ErrorCode errorCode); ///< Create a new GenericErrrorEvent event. diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.cpp b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.cpp index cbe47c8f..20bdc094 100644 --- a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.cpp +++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.cpp @@ -1380,6 +1380,14 @@ void GRPCClient::processUserEvent(UserEvent const &event) { emit userChanged(userID); break; } + case UserEvent::kUserBadEvent: { + UserBadEvent const& e = event.userbadevent(); + QString const userID = QString::fromStdString(e.userid()); + QString const errorMessage = QString::fromStdString(e.errormessage()); + this->logTrace(QString("User event received: UserBadEvent (userID = %1, errorMessage = %2).").arg(userID, errorMessage)); + emit userBadEvent(userID, errorMessage); + break; + } default: this->logError("Unknown User event received."); } diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.h b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.h index 678f1629..e85b3ef5 100644 --- a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.h +++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.h @@ -180,6 +180,7 @@ signals: void toggleSplitModeFinished(QString const &userID); void userDisconnected(QString const &username); void userChanged(QString const &userID); + void userBadEvent(QString const &userID, QString const& errorMessage); public: // keychain related calls grpc::Status availableKeychains(QStringList &outKeychains); diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/bridge.pb.cc b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/bridge.pb.cc index f296de54..f0c9d135 100644 --- a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/bridge.pb.cc +++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/bridge.pb.cc @@ -732,6 +732,20 @@ struct UserChangedEventDefaultTypeInternal { }; }; PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 UserChangedEventDefaultTypeInternal _UserChangedEvent_default_instance_; +PROTOBUF_CONSTEXPR UserBadEvent::UserBadEvent( + ::_pbi::ConstantInitialized): _impl_{ + /*decltype(_impl_.userid_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} + , /*decltype(_impl_.errormessage_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} + , /*decltype(_impl_._cached_size_)*/{}} {} +struct UserBadEventDefaultTypeInternal { + PROTOBUF_CONSTEXPR UserBadEventDefaultTypeInternal() + : _instance(::_pbi::ConstantInitialized{}) {} + ~UserBadEventDefaultTypeInternal() {} + union { + UserBadEvent _instance; + }; +}; +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 UserBadEventDefaultTypeInternal _UserBadEvent_default_instance_; PROTOBUF_CONSTEXPR GenericErrorEvent::GenericErrorEvent( ::_pbi::ConstantInitialized): _impl_{ /*decltype(_impl_.code_)*/0 @@ -746,7 +760,7 @@ struct GenericErrorEventDefaultTypeInternal { }; PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 GenericErrorEventDefaultTypeInternal _GenericErrorEvent_default_instance_; } // namespace grpc -static ::_pb::Metadata file_level_metadata_bridge_2eproto[56]; +static ::_pb::Metadata file_level_metadata_bridge_2eproto[57]; static const ::_pb::EnumDescriptor* file_level_enum_descriptors_bridge_2eproto[7]; static constexpr ::_pb::ServiceDescriptor const** file_level_service_descriptors_bridge_2eproto = nullptr; @@ -1164,6 +1178,7 @@ const uint32_t TableStruct_bridge_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(p ::_pbi::kInvalidFieldOffsetTag, ::_pbi::kInvalidFieldOffsetTag, ::_pbi::kInvalidFieldOffsetTag, + ::_pbi::kInvalidFieldOffsetTag, PROTOBUF_FIELD_OFFSET(::grpc::UserEvent, _impl_.event_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::grpc::ToggleSplitModeFinishedEvent, _internal_metadata_), @@ -1187,6 +1202,14 @@ const uint32_t TableStruct_bridge_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(p ~0u, // no _inlined_string_donated_ PROTOBUF_FIELD_OFFSET(::grpc::UserChangedEvent, _impl_.userid_), ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::grpc::UserBadEvent, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + PROTOBUF_FIELD_OFFSET(::grpc::UserBadEvent, _impl_.userid_), + PROTOBUF_FIELD_OFFSET(::grpc::UserBadEvent, _impl_.errormessage_), + ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::grpc::GenericErrorEvent, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ @@ -1247,10 +1270,11 @@ static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protode { 391, -1, -1, sizeof(::grpc::AddressChangedLogoutEvent)}, { 398, -1, -1, sizeof(::grpc::ApiCertIssueEvent)}, { 404, -1, -1, sizeof(::grpc::UserEvent)}, - { 414, -1, -1, sizeof(::grpc::ToggleSplitModeFinishedEvent)}, - { 421, -1, -1, sizeof(::grpc::UserDisconnectedEvent)}, - { 428, -1, -1, sizeof(::grpc::UserChangedEvent)}, - { 435, -1, -1, sizeof(::grpc::GenericErrorEvent)}, + { 415, -1, -1, sizeof(::grpc::ToggleSplitModeFinishedEvent)}, + { 422, -1, -1, sizeof(::grpc::UserDisconnectedEvent)}, + { 429, -1, -1, sizeof(::grpc::UserChangedEvent)}, + { 436, -1, -1, sizeof(::grpc::UserBadEvent)}, + { 444, -1, -1, sizeof(::grpc::GenericErrorEvent)}, }; static const ::_pb::Message* const file_default_instances[] = { @@ -1309,6 +1333,7 @@ static const ::_pb::Message* const file_default_instances[] = { &::grpc::_ToggleSplitModeFinishedEvent_default_instance_._instance, &::grpc::_UserDisconnectedEvent_default_instance_._instance, &::grpc::_UserChangedEvent_default_instance_._instance, + &::grpc::_UserBadEvent_default_instance_._instance, &::grpc::_GenericErrorEvent_default_instance_._instance, }; @@ -1429,136 +1454,139 @@ const char descriptor_table_protodef_bridge_2eproto[] PROTOBUF_SECTION_VARIABLE( "RecipientEvent\022\r\n\005email\030\001 \001(\t\"&\n\023Address" "ChangedEvent\022\017\n\007address\030\001 \001(\t\",\n\031Address" "ChangedLogoutEvent\022\017\n\007address\030\001 \001(\t\"\023\n\021A" - "piCertIssueEvent\"\303\001\n\tUserEvent\022E\n\027toggle" + "piCertIssueEvent\"\357\001\n\tUserEvent\022E\n\027toggle" "SplitModeFinished\030\001 \001(\0132\".grpc.ToggleSpl" "itModeFinishedEventH\000\0227\n\020userDisconnecte" "d\030\002 \001(\0132\033.grpc.UserDisconnectedEventH\000\022-" "\n\013userChanged\030\003 \001(\0132\026.grpc.UserChangedEv" - "entH\000B\007\n\005event\".\n\034ToggleSplitModeFinishe" - "dEvent\022\016\n\006userID\030\001 \001(\t\")\n\025UserDisconnect" - "edEvent\022\020\n\010username\030\001 \001(\t\"\"\n\020UserChanged" - "Event\022\016\n\006userID\030\001 \001(\t\"2\n\021GenericErrorEve" - "nt\022\035\n\004code\030\001 \001(\0162\017.grpc.ErrorCode*q\n\010Log" - "Level\022\r\n\tLOG_PANIC\020\000\022\r\n\tLOG_FATAL\020\001\022\r\n\tL" - "OG_ERROR\020\002\022\014\n\010LOG_WARN\020\003\022\014\n\010LOG_INFO\020\004\022\r" - "\n\tLOG_DEBUG\020\005\022\r\n\tLOG_TRACE\020\006*6\n\tUserStat" - "e\022\016\n\nSIGNED_OUT\020\000\022\n\n\006LOCKED\020\001\022\r\n\tCONNECT" - "ED\020\002*\242\001\n\016LoginErrorType\022\033\n\027USERNAME_PASS" - "WORD_ERROR\020\000\022\r\n\tFREE_USER\020\001\022\024\n\020CONNECTIO" - "N_ERROR\020\002\022\r\n\tTFA_ERROR\020\003\022\r\n\tTFA_ABORT\020\004\022" - "\027\n\023TWO_PASSWORDS_ERROR\020\005\022\027\n\023TWO_PASSWORD" - "S_ABORT\020\006*[\n\017UpdateErrorType\022\027\n\023UPDATE_M" - "ANUAL_ERROR\020\000\022\026\n\022UPDATE_FORCE_ERROR\020\001\022\027\n" - "\023UPDATE_SILENT_ERROR\020\002*k\n\022DiskCacheError" - "Type\022 \n\034DISK_CACHE_UNAVAILABLE_ERROR\020\000\022\036" - "\n\032CANT_MOVE_DISK_CACHE_ERROR\020\001\022\023\n\017DISK_F" - "ULL_ERROR\020\002*\335\001\n\033MailServerSettingsErrorT" - "ype\022\033\n\027IMAP_PORT_STARTUP_ERROR\020\000\022\033\n\027SMTP" - "_PORT_STARTUP_ERROR\020\001\022\032\n\026IMAP_PORT_CHANG" - "E_ERROR\020\002\022\032\n\026SMTP_PORT_CHANGE_ERROR\020\003\022%\n" - "!IMAP_CONNECTION_MODE_CHANGE_ERROR\020\004\022%\n!" - "SMTP_CONNECTION_MODE_CHANGE_ERROR\020\005*S\n\tE" - "rrorCode\022\021\n\rUNKNOWN_ERROR\020\000\022\031\n\025TLS_CERT_" - "EXPORT_ERROR\020\001\022\030\n\024TLS_KEY_EXPORT_ERROR\020\002" - "2\250\036\n\006Bridge\022I\n\013CheckTokens\022\034.google.prot" - "obuf.StringValue\032\034.google.protobuf.Strin" - "gValue\022\?\n\013AddLogEntry\022\030.grpc.AddLogEntry" - "Request\032\026.google.protobuf.Empty\022:\n\010GuiRe" - "ady\022\026.google.protobuf.Empty\032\026.google.pro" - "tobuf.Empty\0226\n\004Quit\022\026.google.protobuf.Em" - "pty\032\026.google.protobuf.Empty\0229\n\007Restart\022\026" - ".google.protobuf.Empty\032\026.google.protobuf" - ".Empty\022C\n\rShowOnStartup\022\026.google.protobu" - "f.Empty\032\032.google.protobuf.BoolValue\022F\n\020S" - "howSplashScreen\022\026.google.protobuf.Empty\032" - "\032.google.protobuf.BoolValue\022E\n\017IsFirstGu" - "iStart\022\026.google.protobuf.Empty\032\032.google." - "protobuf.BoolValue\022F\n\020SetIsAutostartOn\022\032" - ".google.protobuf.BoolValue\032\026.google.prot" - "obuf.Empty\022C\n\rIsAutostartOn\022\026.google.pro" - "tobuf.Empty\032\032.google.protobuf.BoolValue\022" - "F\n\020SetIsBetaEnabled\022\032.google.protobuf.Bo" - "olValue\032\026.google.protobuf.Empty\022C\n\rIsBet" - "aEnabled\022\026.google.protobuf.Empty\032\032.googl" - "e.protobuf.BoolValue\022I\n\023SetIsAllMailVisi" - "ble\022\032.google.protobuf.BoolValue\032\026.google" - ".protobuf.Empty\022F\n\020IsAllMailVisible\022\026.go" - "ogle.protobuf.Empty\032\032.google.protobuf.Bo" - "olValue\022<\n\004GoOs\022\026.google.protobuf.Empty\032" - "\034.google.protobuf.StringValue\022>\n\014Trigger" - "Reset\022\026.google.protobuf.Empty\032\026.google.p" - "rotobuf.Empty\022\?\n\007Version\022\026.google.protob" - "uf.Empty\032\034.google.protobuf.StringValue\022@" - "\n\010LogsPath\022\026.google.protobuf.Empty\032\034.goo" - "gle.protobuf.StringValue\022C\n\013LicensePath\022" - "\026.google.protobuf.Empty\032\034.google.protobu" - "f.StringValue\022L\n\024ReleaseNotesPageLink\022\026." + "entH\000\022*\n\014userBadEvent\030\004 \001(\0132\022.grpc.UserB" + "adEventH\000B\007\n\005event\".\n\034ToggleSplitModeFin" + "ishedEvent\022\016\n\006userID\030\001 \001(\t\")\n\025UserDiscon" + "nectedEvent\022\020\n\010username\030\001 \001(\t\"\"\n\020UserCha" + "ngedEvent\022\016\n\006userID\030\001 \001(\t\"4\n\014UserBadEven" + "t\022\016\n\006userID\030\001 \001(\t\022\024\n\014errorMessage\030\002 \001(\t\"" + "2\n\021GenericErrorEvent\022\035\n\004code\030\001 \001(\0162\017.grp" + "c.ErrorCode*q\n\010LogLevel\022\r\n\tLOG_PANIC\020\000\022\r" + "\n\tLOG_FATAL\020\001\022\r\n\tLOG_ERROR\020\002\022\014\n\010LOG_WARN" + "\020\003\022\014\n\010LOG_INFO\020\004\022\r\n\tLOG_DEBUG\020\005\022\r\n\tLOG_T" + "RACE\020\006*6\n\tUserState\022\016\n\nSIGNED_OUT\020\000\022\n\n\006L" + "OCKED\020\001\022\r\n\tCONNECTED\020\002*\242\001\n\016LoginErrorTyp" + "e\022\033\n\027USERNAME_PASSWORD_ERROR\020\000\022\r\n\tFREE_U" + "SER\020\001\022\024\n\020CONNECTION_ERROR\020\002\022\r\n\tTFA_ERROR" + "\020\003\022\r\n\tTFA_ABORT\020\004\022\027\n\023TWO_PASSWORDS_ERROR" + "\020\005\022\027\n\023TWO_PASSWORDS_ABORT\020\006*[\n\017UpdateErr" + "orType\022\027\n\023UPDATE_MANUAL_ERROR\020\000\022\026\n\022UPDAT" + "E_FORCE_ERROR\020\001\022\027\n\023UPDATE_SILENT_ERROR\020\002" + "*k\n\022DiskCacheErrorType\022 \n\034DISK_CACHE_UNA" + "VAILABLE_ERROR\020\000\022\036\n\032CANT_MOVE_DISK_CACHE" + "_ERROR\020\001\022\023\n\017DISK_FULL_ERROR\020\002*\335\001\n\033MailSe" + "rverSettingsErrorType\022\033\n\027IMAP_PORT_START" + "UP_ERROR\020\000\022\033\n\027SMTP_PORT_STARTUP_ERROR\020\001\022" + "\032\n\026IMAP_PORT_CHANGE_ERROR\020\002\022\032\n\026SMTP_PORT" + "_CHANGE_ERROR\020\003\022%\n!IMAP_CONNECTION_MODE_" + "CHANGE_ERROR\020\004\022%\n!SMTP_CONNECTION_MODE_C" + "HANGE_ERROR\020\005*S\n\tErrorCode\022\021\n\rUNKNOWN_ER" + "ROR\020\000\022\031\n\025TLS_CERT_EXPORT_ERROR\020\001\022\030\n\024TLS_" + "KEY_EXPORT_ERROR\020\0022\250\036\n\006Bridge\022I\n\013CheckTo" + "kens\022\034.google.protobuf.StringValue\032\034.goo" + "gle.protobuf.StringValue\022\?\n\013AddLogEntry\022" + "\030.grpc.AddLogEntryRequest\032\026.google.proto" + "buf.Empty\022:\n\010GuiReady\022\026.google.protobuf." + "Empty\032\026.google.protobuf.Empty\0226\n\004Quit\022\026." + "google.protobuf.Empty\032\026.google.protobuf." + "Empty\0229\n\007Restart\022\026.google.protobuf.Empty" + "\032\026.google.protobuf.Empty\022C\n\rShowOnStartu" + "p\022\026.google.protobuf.Empty\032\032.google.proto" + "buf.BoolValue\022F\n\020ShowSplashScreen\022\026.goog" + "le.protobuf.Empty\032\032.google.protobuf.Bool" + "Value\022E\n\017IsFirstGuiStart\022\026.google.protob" + "uf.Empty\032\032.google.protobuf.BoolValue\022F\n\020" + "SetIsAutostartOn\022\032.google.protobuf.BoolV" + "alue\032\026.google.protobuf.Empty\022C\n\rIsAutost" + "artOn\022\026.google.protobuf.Empty\032\032.google.p" + "rotobuf.BoolValue\022F\n\020SetIsBetaEnabled\022\032." + "google.protobuf.BoolValue\032\026.google.proto" + "buf.Empty\022C\n\rIsBetaEnabled\022\026.google.prot" + "obuf.Empty\032\032.google.protobuf.BoolValue\022I" + "\n\023SetIsAllMailVisible\022\032.google.protobuf." + "BoolValue\032\026.google.protobuf.Empty\022F\n\020IsA" + "llMailVisible\022\026.google.protobuf.Empty\032\032." + "google.protobuf.BoolValue\022<\n\004GoOs\022\026.goog" + "le.protobuf.Empty\032\034.google.protobuf.Stri" + "ngValue\022>\n\014TriggerReset\022\026.google.protobu" + "f.Empty\032\026.google.protobuf.Empty\022\?\n\007Versi" + "on\022\026.google.protobuf.Empty\032\034.google.prot" + "obuf.StringValue\022@\n\010LogsPath\022\026.google.pr" + "otobuf.Empty\032\034.google.protobuf.StringVal" + "ue\022C\n\013LicensePath\022\026.google.protobuf.Empt" + "y\032\034.google.protobuf.StringValue\022L\n\024Relea" + "seNotesPageLink\022\026.google.protobuf.Empty\032" + "\034.google.protobuf.StringValue\022N\n\026Depende" + "ncyLicensesLink\022\026.google.protobuf.Empty\032" + "\034.google.protobuf.StringValue\022G\n\017Landing" + "PageLink\022\026.google.protobuf.Empty\032\034.googl" + "e.protobuf.StringValue\022J\n\022SetColorScheme" + "Name\022\034.google.protobuf.StringValue\032\026.goo" + "gle.protobuf.Empty\022G\n\017ColorSchemeName\022\026." "google.protobuf.Empty\032\034.google.protobuf." - "StringValue\022N\n\026DependencyLicensesLink\022\026." - "google.protobuf.Empty\032\034.google.protobuf." - "StringValue\022G\n\017LandingPageLink\022\026.google." - "protobuf.Empty\032\034.google.protobuf.StringV" - "alue\022J\n\022SetColorSchemeName\022\034.google.prot" - "obuf.StringValue\032\026.google.protobuf.Empty" - "\022G\n\017ColorSchemeName\022\026.google.protobuf.Em" - "pty\032\034.google.protobuf.StringValue\022J\n\022Cur" - "rentEmailClient\022\026.google.protobuf.Empty\032" - "\034.google.protobuf.StringValue\022;\n\tReportB" - "ug\022\026.grpc.ReportBugRequest\032\026.google.prot" - "obuf.Empty\022M\n\025ExportTLSCertificates\022\034.go" + "StringValue\022J\n\022CurrentEmailClient\022\026.goog" + "le.protobuf.Empty\032\034.google.protobuf.Stri" + "ngValue\022;\n\tReportBug\022\026.grpc.ReportBugReq" + "uest\032\026.google.protobuf.Empty\022M\n\025ExportTL" + "SCertificates\022\034.google.protobuf.StringVa" + "lue\032\026.google.protobuf.Empty\022E\n\rForceLaun" + "cher\022\034.google.protobuf.StringValue\032\026.goo" + "gle.protobuf.Empty\022I\n\021SetMainExecutable\022" + "\034.google.protobuf.StringValue\032\026.google.p" + "rotobuf.Empty\0223\n\005Login\022\022.grpc.LoginReque" + "st\032\026.google.protobuf.Empty\0226\n\010Login2FA\022\022" + ".grpc.LoginRequest\032\026.google.protobuf.Emp" + "ty\022=\n\017Login2Passwords\022\022.grpc.LoginReques" + "t\032\026.google.protobuf.Empty\022=\n\nLoginAbort\022" + "\027.grpc.LoginAbortRequest\032\026.google.protob" + "uf.Empty\022=\n\013CheckUpdate\022\026.google.protobu" + "f.Empty\032\026.google.protobuf.Empty\022\?\n\rInsta" + "llUpdate\022\026.google.protobuf.Empty\032\026.googl" + "e.protobuf.Empty\022L\n\026SetIsAutomaticUpdate" + "On\022\032.google.protobuf.BoolValue\032\026.google." + "protobuf.Empty\022I\n\023IsAutomaticUpdateOn\022\026." + "google.protobuf.Empty\032\032.google.protobuf." + "BoolValue\022E\n\rDiskCachePath\022\026.google.prot" + "obuf.Empty\032\034.google.protobuf.StringValue" + "\022H\n\020SetDiskCachePath\022\034.google.protobuf.S" + "tringValue\032\026.google.protobuf.Empty\022E\n\017Se" + "tIsDoHEnabled\022\032.google.protobuf.BoolValu" + "e\032\026.google.protobuf.Empty\022B\n\014IsDoHEnable" + "d\022\026.google.protobuf.Empty\032\032.google.proto" + "buf.BoolValue\022D\n\022MailServerSettings\022\026.go" + "ogle.protobuf.Empty\032\026.grpc.ImapSmtpSetti" + "ngs\022G\n\025SetMailServerSettings\022\026.grpc.Imap" + "SmtpSettings\032\026.google.protobuf.Empty\022@\n\010" + "Hostname\022\026.google.protobuf.Empty\032\034.googl" + "e.protobuf.StringValue\022E\n\nIsPortFree\022\033.g" + "oogle.protobuf.Int32Value\032\032.google.proto" + "buf.BoolValue\022N\n\022AvailableKeychains\022\026.go" + "ogle.protobuf.Empty\032 .grpc.AvailableKeyc" + "hainsResponse\022J\n\022SetCurrentKeychain\022\034.go" "ogle.protobuf.StringValue\032\026.google.proto" - "buf.Empty\022E\n\rForceLauncher\022\034.google.prot" - "obuf.StringValue\032\026.google.protobuf.Empty" - "\022I\n\021SetMainExecutable\022\034.google.protobuf." - "StringValue\032\026.google.protobuf.Empty\0223\n\005L" - "ogin\022\022.grpc.LoginRequest\032\026.google.protob" - "uf.Empty\0226\n\010Login2FA\022\022.grpc.LoginRequest" - "\032\026.google.protobuf.Empty\022=\n\017Login2Passwo" - "rds\022\022.grpc.LoginRequest\032\026.google.protobu" - "f.Empty\022=\n\nLoginAbort\022\027.grpc.LoginAbortR" - "equest\032\026.google.protobuf.Empty\022=\n\013CheckU" - "pdate\022\026.google.protobuf.Empty\032\026.google.p" - "rotobuf.Empty\022\?\n\rInstallUpdate\022\026.google." - "protobuf.Empty\032\026.google.protobuf.Empty\022L" - "\n\026SetIsAutomaticUpdateOn\022\032.google.protob" - "uf.BoolValue\032\026.google.protobuf.Empty\022I\n\023" - "IsAutomaticUpdateOn\022\026.google.protobuf.Em" - "pty\032\032.google.protobuf.BoolValue\022E\n\rDiskC" - "achePath\022\026.google.protobuf.Empty\032\034.googl" - "e.protobuf.StringValue\022H\n\020SetDiskCachePa" - "th\022\034.google.protobuf.StringValue\032\026.googl" - "e.protobuf.Empty\022E\n\017SetIsDoHEnabled\022\032.go" - "ogle.protobuf.BoolValue\032\026.google.protobu" - "f.Empty\022B\n\014IsDoHEnabled\022\026.google.protobu" - "f.Empty\032\032.google.protobuf.BoolValue\022D\n\022M" - "ailServerSettings\022\026.google.protobuf.Empt" - "y\032\026.grpc.ImapSmtpSettings\022G\n\025SetMailServ" - "erSettings\022\026.grpc.ImapSmtpSettings\032\026.goo" - "gle.protobuf.Empty\022@\n\010Hostname\022\026.google." - "protobuf.Empty\032\034.google.protobuf.StringV" - "alue\022E\n\nIsPortFree\022\033.google.protobuf.Int" - "32Value\032\032.google.protobuf.BoolValue\022N\n\022A" - "vailableKeychains\022\026.google.protobuf.Empt" - "y\032 .grpc.AvailableKeychainsResponse\022J\n\022S" - "etCurrentKeychain\022\034.google.protobuf.Stri" - "ngValue\032\026.google.protobuf.Empty\022G\n\017Curre" - "ntKeychain\022\026.google.protobuf.Empty\032\034.goo" - "gle.protobuf.StringValue\022=\n\013GetUserList\022" - "\026.google.protobuf.Empty\032\026.grpc.UserListR" - "esponse\0223\n\007GetUser\022\034.google.protobuf.Str" - "ingValue\032\n.grpc.User\022F\n\020SetUserSplitMode" - "\022\032.grpc.UserSplitModeRequest\032\026.google.pr" - "otobuf.Empty\022B\n\nLogoutUser\022\034.google.prot" - "obuf.StringValue\032\026.google.protobuf.Empty" - "\022B\n\nRemoveUser\022\034.google.protobuf.StringV" - "alue\032\026.google.protobuf.Empty\022Q\n\026Configur" - "eUserAppleMail\022\037.grpc.ConfigureAppleMail" - "Request\032\026.google.protobuf.Empty\022\?\n\016RunEv" - "entStream\022\030.grpc.EventStreamRequest\032\021.gr" - "pc.StreamEvent0\001\022A\n\017StopEventStream\022\026.go" - "ogle.protobuf.Empty\032\026.google.protobuf.Em" - "ptyB6Z4github.com/ProtonMail/proton-brid" - "ge/v3/internal/grpcb\006proto3" + "buf.Empty\022G\n\017CurrentKeychain\022\026.google.pr" + "otobuf.Empty\032\034.google.protobuf.StringVal" + "ue\022=\n\013GetUserList\022\026.google.protobuf.Empt" + "y\032\026.grpc.UserListResponse\0223\n\007GetUser\022\034.g" + "oogle.protobuf.StringValue\032\n.grpc.User\022F" + "\n\020SetUserSplitMode\022\032.grpc.UserSplitModeR" + "equest\032\026.google.protobuf.Empty\022B\n\nLogout" + "User\022\034.google.protobuf.StringValue\032\026.goo" + "gle.protobuf.Empty\022B\n\nRemoveUser\022\034.googl" + "e.protobuf.StringValue\032\026.google.protobuf" + ".Empty\022Q\n\026ConfigureUserAppleMail\022\037.grpc." + "ConfigureAppleMailRequest\032\026.google.proto" + "buf.Empty\022\?\n\016RunEventStream\022\030.grpc.Event" + "StreamRequest\032\021.grpc.StreamEvent0\001\022A\n\017St" + "opEventStream\022\026.google.protobuf.Empty\032\026." + "google.protobuf.EmptyB6Z4github.com/Prot" + "onMail/proton-bridge/v3/internal/grpcb\006p" + "roto3" ; static const ::_pbi::DescriptorTable* const descriptor_table_bridge_2eproto_deps[2] = { &::descriptor_table_google_2fprotobuf_2fempty_2eproto, @@ -1566,9 +1594,9 @@ static const ::_pbi::DescriptorTable* const descriptor_table_bridge_2eproto_deps }; static ::_pbi::once_flag descriptor_table_bridge_2eproto_once; const ::_pbi::DescriptorTable descriptor_table_bridge_2eproto = { - false, false, 9827, descriptor_table_protodef_bridge_2eproto, + false, false, 9925, descriptor_table_protodef_bridge_2eproto, "bridge.proto", - &descriptor_table_bridge_2eproto_once, descriptor_table_bridge_2eproto_deps, 2, 56, + &descriptor_table_bridge_2eproto_once, descriptor_table_bridge_2eproto_deps, 2, 57, schemas, file_default_instances, TableStruct_bridge_2eproto::offsets, file_level_metadata_bridge_2eproto, file_level_enum_descriptors_bridge_2eproto, file_level_service_descriptors_bridge_2eproto, @@ -12152,6 +12180,7 @@ class UserEvent::_Internal { static const ::grpc::ToggleSplitModeFinishedEvent& togglesplitmodefinished(const UserEvent* msg); static const ::grpc::UserDisconnectedEvent& userdisconnected(const UserEvent* msg); static const ::grpc::UserChangedEvent& userchanged(const UserEvent* msg); + static const ::grpc::UserBadEvent& userbadevent(const UserEvent* msg); }; const ::grpc::ToggleSplitModeFinishedEvent& @@ -12166,6 +12195,10 @@ const ::grpc::UserChangedEvent& UserEvent::_Internal::userchanged(const UserEvent* msg) { return *msg->_impl_.event_.userchanged_; } +const ::grpc::UserBadEvent& +UserEvent::_Internal::userbadevent(const UserEvent* msg) { + return *msg->_impl_.event_.userbadevent_; +} void UserEvent::set_allocated_togglesplitmodefinished(::grpc::ToggleSplitModeFinishedEvent* togglesplitmodefinished) { ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); clear_event(); @@ -12211,6 +12244,21 @@ void UserEvent::set_allocated_userchanged(::grpc::UserChangedEvent* userchanged) } // @@protoc_insertion_point(field_set_allocated:grpc.UserEvent.userChanged) } +void UserEvent::set_allocated_userbadevent(::grpc::UserBadEvent* userbadevent) { + ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); + clear_event(); + if (userbadevent) { + ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = + ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(userbadevent); + if (message_arena != submessage_arena) { + userbadevent = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( + message_arena, userbadevent, submessage_arena); + } + set_has_userbadevent(); + _impl_.event_.userbadevent_ = userbadevent; + } + // @@protoc_insertion_point(field_set_allocated:grpc.UserEvent.userBadEvent) +} UserEvent::UserEvent(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned) : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) { @@ -12243,6 +12291,11 @@ UserEvent::UserEvent(const UserEvent& from) from._internal_userchanged()); break; } + case kUserBadEvent: { + _this->_internal_mutable_userbadevent()->::grpc::UserBadEvent::MergeFrom( + from._internal_userbadevent()); + break; + } case EVENT_NOT_SET: { break; } @@ -12303,6 +12356,12 @@ void UserEvent::clear_event() { } break; } + case kUserBadEvent: { + if (GetArenaForAllocation() == nullptr) { + delete _impl_.event_.userbadevent_; + } + break; + } case EVENT_NOT_SET: { break; } @@ -12351,6 +12410,14 @@ const char* UserEvent::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx } else goto handle_unusual; continue; + // .grpc.UserBadEvent userBadEvent = 4; + case 4: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 34)) { + ptr = ctx->ParseMessage(_internal_mutable_userbadevent(), ptr); + CHK_(ptr); + } else + goto handle_unusual; + continue; default: goto handle_unusual; } // switch @@ -12401,6 +12468,13 @@ uint8_t* UserEvent::_InternalSerialize( _Internal::userchanged(this).GetCachedSize(), target, stream); } + // .grpc.UserBadEvent userBadEvent = 4; + if (_internal_has_userbadevent()) { + target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: + InternalWriteMessage(4, _Internal::userbadevent(this), + _Internal::userbadevent(this).GetCachedSize(), target, stream); + } + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); @@ -12439,6 +12513,13 @@ size_t UserEvent::ByteSizeLong() const { *_impl_.event_.userchanged_); break; } + // .grpc.UserBadEvent userBadEvent = 4; + case kUserBadEvent: { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize( + *_impl_.event_.userbadevent_); + break; + } case EVENT_NOT_SET: { break; } @@ -12477,6 +12558,11 @@ void UserEvent::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROT from._internal_userchanged()); break; } + case kUserBadEvent: { + _this->_internal_mutable_userbadevent()->::grpc::UserBadEvent::MergeFrom( + from._internal_userbadevent()); + break; + } case EVENT_NOT_SET: { break; } @@ -13119,6 +13205,259 @@ void UserChangedEvent::InternalSwap(UserChangedEvent* other) { // =================================================================== +class UserBadEvent::_Internal { + public: +}; + +UserBadEvent::UserBadEvent(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned) + : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) { + SharedCtor(arena, is_message_owned); + // @@protoc_insertion_point(arena_constructor:grpc.UserBadEvent) +} +UserBadEvent::UserBadEvent(const UserBadEvent& from) + : ::PROTOBUF_NAMESPACE_ID::Message() { + UserBadEvent* const _this = this; (void)_this; + new (&_impl_) Impl_{ + decltype(_impl_.userid_){} + , decltype(_impl_.errormessage_){} + , /*decltype(_impl_._cached_size_)*/{}}; + + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); + _impl_.userid_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.userid_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_userid().empty()) { + _this->_impl_.userid_.Set(from._internal_userid(), + _this->GetArenaForAllocation()); + } + _impl_.errormessage_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.errormessage_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_errormessage().empty()) { + _this->_impl_.errormessage_.Set(from._internal_errormessage(), + _this->GetArenaForAllocation()); + } + // @@protoc_insertion_point(copy_constructor:grpc.UserBadEvent) +} + +inline void UserBadEvent::SharedCtor( + ::_pb::Arena* arena, bool is_message_owned) { + (void)arena; + (void)is_message_owned; + new (&_impl_) Impl_{ + decltype(_impl_.userid_){} + , decltype(_impl_.errormessage_){} + , /*decltype(_impl_._cached_size_)*/{} + }; + _impl_.userid_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.userid_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.errormessage_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.errormessage_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING +} + +UserBadEvent::~UserBadEvent() { + // @@protoc_insertion_point(destructor:grpc.UserBadEvent) + if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) { + (void)arena; + return; + } + SharedDtor(); +} + +inline void UserBadEvent::SharedDtor() { + GOOGLE_DCHECK(GetArenaForAllocation() == nullptr); + _impl_.userid_.Destroy(); + _impl_.errormessage_.Destroy(); +} + +void UserBadEvent::SetCachedSize(int size) const { + _impl_._cached_size_.Set(size); +} + +void UserBadEvent::Clear() { +// @@protoc_insertion_point(message_clear_start:grpc.UserBadEvent) + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.userid_.ClearToEmpty(); + _impl_.errormessage_.ClearToEmpty(); + _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); +} + +const char* UserBadEvent::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) { +#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure + while (!ctx->Done(&ptr)) { + uint32_t tag; + ptr = ::_pbi::ReadTag(ptr, &tag); + switch (tag >> 3) { + // string userID = 1; + case 1: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 10)) { + auto str = _internal_mutable_userid(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "grpc.UserBadEvent.userID")); + } else + goto handle_unusual; + continue; + // string errorMessage = 2; + case 2: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 18)) { + auto str = _internal_mutable_errormessage(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "grpc.UserBadEvent.errorMessage")); + } else + goto handle_unusual; + continue; + default: + goto handle_unusual; + } // switch + handle_unusual: + if ((tag == 0) || ((tag & 7) == 4)) { + CHK_(ptr); + ctx->SetLastTag(tag); + goto message_done; + } + ptr = UnknownFieldParse( + tag, + _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(), + ptr, ctx); + CHK_(ptr != nullptr); + } // while +message_done: + return ptr; +failure: + ptr = nullptr; + goto message_done; +#undef CHK_ +} + +uint8_t* UserBadEvent::_InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:grpc.UserBadEvent) + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + // string userID = 1; + if (!this->_internal_userid().empty()) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->_internal_userid().data(), static_cast(this->_internal_userid().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "grpc.UserBadEvent.userID"); + target = stream->WriteStringMaybeAliased( + 1, this->_internal_userid(), target); + } + + // string errorMessage = 2; + if (!this->_internal_errormessage().empty()) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->_internal_errormessage().data(), static_cast(this->_internal_errormessage().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "grpc.UserBadEvent.errorMessage"); + target = stream->WriteStringMaybeAliased( + 2, this->_internal_errormessage(), target); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:grpc.UserBadEvent) + return target; +} + +size_t UserBadEvent::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:grpc.UserBadEvent) + size_t total_size = 0; + + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // string userID = 1; + if (!this->_internal_userid().empty()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->_internal_userid()); + } + + // string errorMessage = 2; + if (!this->_internal_errormessage().empty()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->_internal_errormessage()); + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData UserBadEvent::_class_data_ = { + ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck, + UserBadEvent::MergeImpl +}; +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*UserBadEvent::GetClassData() const { return &_class_data_; } + + +void UserBadEvent::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:grpc.UserBadEvent) + GOOGLE_DCHECK_NE(&from, _this); + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + if (!from._internal_userid().empty()) { + _this->_internal_set_userid(from._internal_userid()); + } + if (!from._internal_errormessage().empty()) { + _this->_internal_set_errormessage(from._internal_errormessage()); + } + _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); +} + +void UserBadEvent::CopyFrom(const UserBadEvent& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:grpc.UserBadEvent) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool UserBadEvent::IsInitialized() const { + return true; +} + +void UserBadEvent::InternalSwap(UserBadEvent* other) { + using std::swap; + auto* lhs_arena = GetArenaForAllocation(); + auto* rhs_arena = other->GetArenaForAllocation(); + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap( + &_impl_.userid_, lhs_arena, + &other->_impl_.userid_, rhs_arena + ); + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap( + &_impl_.errormessage_, lhs_arena, + &other->_impl_.errormessage_, rhs_arena + ); +} + +::PROTOBUF_NAMESPACE_ID::Metadata UserBadEvent::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_bridge_2eproto_getter, &descriptor_table_bridge_2eproto_once, + file_level_metadata_bridge_2eproto[55]); +} + +// =================================================================== + class GenericErrorEvent::_Internal { public: }; @@ -13295,7 +13634,7 @@ void GenericErrorEvent::InternalSwap(GenericErrorEvent* other) { ::PROTOBUF_NAMESPACE_ID::Metadata GenericErrorEvent::GetMetadata() const { return ::_pbi::AssignDescriptors( &descriptor_table_bridge_2eproto_getter, &descriptor_table_bridge_2eproto_once, - file_level_metadata_bridge_2eproto[55]); + file_level_metadata_bridge_2eproto[56]); } // @@protoc_insertion_point(namespace_scope) @@ -13521,6 +13860,10 @@ template<> PROTOBUF_NOINLINE ::grpc::UserChangedEvent* Arena::CreateMaybeMessage< ::grpc::UserChangedEvent >(Arena* arena) { return Arena::CreateMessageInternal< ::grpc::UserChangedEvent >(arena); } +template<> PROTOBUF_NOINLINE ::grpc::UserBadEvent* +Arena::CreateMaybeMessage< ::grpc::UserBadEvent >(Arena* arena) { + return Arena::CreateMessageInternal< ::grpc::UserBadEvent >(arena); +} template<> PROTOBUF_NOINLINE ::grpc::GenericErrorEvent* Arena::CreateMaybeMessage< ::grpc::GenericErrorEvent >(Arena* arena) { return Arena::CreateMessageInternal< ::grpc::GenericErrorEvent >(arena); diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/bridge.pb.h b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/bridge.pb.h index ad0c63b2..acc1228c 100644 --- a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/bridge.pb.h +++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/bridge.pb.h @@ -202,6 +202,9 @@ extern UpdateVersionChangedDefaultTypeInternal _UpdateVersionChanged_default_ins class User; struct UserDefaultTypeInternal; extern UserDefaultTypeInternal _User_default_instance_; +class UserBadEvent; +struct UserBadEventDefaultTypeInternal; +extern UserBadEventDefaultTypeInternal _UserBadEvent_default_instance_; class UserChangedEvent; struct UserChangedEventDefaultTypeInternal; extern UserChangedEventDefaultTypeInternal _UserChangedEvent_default_instance_; @@ -270,6 +273,7 @@ template<> ::grpc::UpdateManualRestartNeededEvent* Arena::CreateMaybeMessage<::g template<> ::grpc::UpdateSilentRestartNeeded* Arena::CreateMaybeMessage<::grpc::UpdateSilentRestartNeeded>(Arena*); template<> ::grpc::UpdateVersionChanged* Arena::CreateMaybeMessage<::grpc::UpdateVersionChanged>(Arena*); template<> ::grpc::User* Arena::CreateMaybeMessage<::grpc::User>(Arena*); +template<> ::grpc::UserBadEvent* Arena::CreateMaybeMessage<::grpc::UserBadEvent>(Arena*); template<> ::grpc::UserChangedEvent* Arena::CreateMaybeMessage<::grpc::UserChangedEvent>(Arena*); template<> ::grpc::UserDisconnectedEvent* Arena::CreateMaybeMessage<::grpc::UserDisconnectedEvent>(Arena*); template<> ::grpc::UserEvent* Arena::CreateMaybeMessage<::grpc::UserEvent>(Arena*); @@ -8920,6 +8924,7 @@ class UserEvent final : kToggleSplitModeFinished = 1, kUserDisconnected = 2, kUserChanged = 3, + kUserBadEvent = 4, EVENT_NOT_SET = 0, }; @@ -9004,6 +9009,7 @@ class UserEvent final : kToggleSplitModeFinishedFieldNumber = 1, kUserDisconnectedFieldNumber = 2, kUserChangedFieldNumber = 3, + kUserBadEventFieldNumber = 4, }; // .grpc.ToggleSplitModeFinishedEvent toggleSplitModeFinished = 1; bool has_togglesplitmodefinished() const; @@ -9059,6 +9065,24 @@ class UserEvent final : ::grpc::UserChangedEvent* userchanged); ::grpc::UserChangedEvent* unsafe_arena_release_userchanged(); + // .grpc.UserBadEvent userBadEvent = 4; + bool has_userbadevent() const; + private: + bool _internal_has_userbadevent() const; + public: + void clear_userbadevent(); + const ::grpc::UserBadEvent& userbadevent() const; + PROTOBUF_NODISCARD ::grpc::UserBadEvent* release_userbadevent(); + ::grpc::UserBadEvent* mutable_userbadevent(); + void set_allocated_userbadevent(::grpc::UserBadEvent* userbadevent); + private: + const ::grpc::UserBadEvent& _internal_userbadevent() const; + ::grpc::UserBadEvent* _internal_mutable_userbadevent(); + public: + void unsafe_arena_set_allocated_userbadevent( + ::grpc::UserBadEvent* userbadevent); + ::grpc::UserBadEvent* unsafe_arena_release_userbadevent(); + void clear_event(); EventCase event_case() const; // @@protoc_insertion_point(class_scope:grpc.UserEvent) @@ -9067,6 +9091,7 @@ class UserEvent final : void set_has_togglesplitmodefinished(); void set_has_userdisconnected(); void set_has_userchanged(); + void set_has_userbadevent(); inline bool has_event() const; inline void clear_has_event(); @@ -9081,6 +9106,7 @@ class UserEvent final : ::grpc::ToggleSplitModeFinishedEvent* togglesplitmodefinished_; ::grpc::UserDisconnectedEvent* userdisconnected_; ::grpc::UserChangedEvent* userchanged_; + ::grpc::UserBadEvent* userbadevent_; } event_; mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; uint32_t _oneof_case_[1]; @@ -9550,6 +9576,175 @@ class UserChangedEvent final : }; // ------------------------------------------------------------------- +class UserBadEvent final : + public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:grpc.UserBadEvent) */ { + public: + inline UserBadEvent() : UserBadEvent(nullptr) {} + ~UserBadEvent() override; + explicit PROTOBUF_CONSTEXPR UserBadEvent(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); + + UserBadEvent(const UserBadEvent& from); + UserBadEvent(UserBadEvent&& from) noexcept + : UserBadEvent() { + *this = ::std::move(from); + } + + inline UserBadEvent& operator=(const UserBadEvent& from) { + CopyFrom(from); + return *this; + } + inline UserBadEvent& operator=(UserBadEvent&& from) noexcept { + if (this == &from) return *this; + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const UserBadEvent& default_instance() { + return *internal_default_instance(); + } + static inline const UserBadEvent* internal_default_instance() { + return reinterpret_cast( + &_UserBadEvent_default_instance_); + } + static constexpr int kIndexInFileMessages = + 55; + + friend void swap(UserBadEvent& a, UserBadEvent& b) { + a.Swap(&b); + } + inline void Swap(UserBadEvent* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() != nullptr && + GetOwningArena() == other->GetOwningArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() == other->GetOwningArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(UserBadEvent* other) { + if (other == this) return; + GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + UserBadEvent* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; + void CopyFrom(const UserBadEvent& from); + using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; + void MergeFrom( const UserBadEvent& from) { + UserBadEvent::MergeImpl(*this, from); + } + private: + static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); + public: + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; + uint8_t* _InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const final { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(UserBadEvent* other); + + private: + friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; + static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { + return "grpc.UserBadEvent"; + } + protected: + explicit UserBadEvent(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned = false); + public: + + static const ClassData _class_data_; + const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; + + ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kUserIDFieldNumber = 1, + kErrorMessageFieldNumber = 2, + }; + // string userID = 1; + void clear_userid(); + const std::string& userid() const; + template + void set_userid(ArgT0&& arg0, ArgT... args); + std::string* mutable_userid(); + PROTOBUF_NODISCARD std::string* release_userid(); + void set_allocated_userid(std::string* userid); + private: + const std::string& _internal_userid() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_userid(const std::string& value); + std::string* _internal_mutable_userid(); + public: + + // string errorMessage = 2; + void clear_errormessage(); + const std::string& errormessage() const; + template + void set_errormessage(ArgT0&& arg0, ArgT... args); + std::string* mutable_errormessage(); + PROTOBUF_NODISCARD std::string* release_errormessage(); + void set_allocated_errormessage(std::string* errormessage); + private: + const std::string& _internal_errormessage() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_errormessage(const std::string& value); + std::string* _internal_mutable_errormessage(); + public: + + // @@protoc_insertion_point(class_scope:grpc.UserBadEvent) + private: + class _Internal; + + template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; + struct Impl_ { + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr userid_; + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr errormessage_; + mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_bridge_2eproto; +}; +// ------------------------------------------------------------------- + class GenericErrorEvent final : public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:grpc.GenericErrorEvent) */ { public: @@ -9598,7 +9793,7 @@ class GenericErrorEvent final : &_GenericErrorEvent_default_instance_); } static constexpr int kIndexInFileMessages = - 55; + 56; friend void swap(GenericErrorEvent& a, GenericErrorEvent& b) { a.Swap(&b); @@ -15283,6 +15478,80 @@ inline ::grpc::UserChangedEvent* UserEvent::mutable_userchanged() { return _msg; } +// .grpc.UserBadEvent userBadEvent = 4; +inline bool UserEvent::_internal_has_userbadevent() const { + return event_case() == kUserBadEvent; +} +inline bool UserEvent::has_userbadevent() const { + return _internal_has_userbadevent(); +} +inline void UserEvent::set_has_userbadevent() { + _impl_._oneof_case_[0] = kUserBadEvent; +} +inline void UserEvent::clear_userbadevent() { + if (_internal_has_userbadevent()) { + if (GetArenaForAllocation() == nullptr) { + delete _impl_.event_.userbadevent_; + } + clear_has_event(); + } +} +inline ::grpc::UserBadEvent* UserEvent::release_userbadevent() { + // @@protoc_insertion_point(field_release:grpc.UserEvent.userBadEvent) + if (_internal_has_userbadevent()) { + clear_has_event(); + ::grpc::UserBadEvent* temp = _impl_.event_.userbadevent_; + if (GetArenaForAllocation() != nullptr) { + temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); + } + _impl_.event_.userbadevent_ = nullptr; + return temp; + } else { + return nullptr; + } +} +inline const ::grpc::UserBadEvent& UserEvent::_internal_userbadevent() const { + return _internal_has_userbadevent() + ? *_impl_.event_.userbadevent_ + : reinterpret_cast< ::grpc::UserBadEvent&>(::grpc::_UserBadEvent_default_instance_); +} +inline const ::grpc::UserBadEvent& UserEvent::userbadevent() const { + // @@protoc_insertion_point(field_get:grpc.UserEvent.userBadEvent) + return _internal_userbadevent(); +} +inline ::grpc::UserBadEvent* UserEvent::unsafe_arena_release_userbadevent() { + // @@protoc_insertion_point(field_unsafe_arena_release:grpc.UserEvent.userBadEvent) + if (_internal_has_userbadevent()) { + clear_has_event(); + ::grpc::UserBadEvent* temp = _impl_.event_.userbadevent_; + _impl_.event_.userbadevent_ = nullptr; + return temp; + } else { + return nullptr; + } +} +inline void UserEvent::unsafe_arena_set_allocated_userbadevent(::grpc::UserBadEvent* userbadevent) { + clear_event(); + if (userbadevent) { + set_has_userbadevent(); + _impl_.event_.userbadevent_ = userbadevent; + } + // @@protoc_insertion_point(field_unsafe_arena_set_allocated:grpc.UserEvent.userBadEvent) +} +inline ::grpc::UserBadEvent* UserEvent::_internal_mutable_userbadevent() { + if (!_internal_has_userbadevent()) { + clear_event(); + set_has_userbadevent(); + _impl_.event_.userbadevent_ = CreateMaybeMessage< ::grpc::UserBadEvent >(GetArenaForAllocation()); + } + return _impl_.event_.userbadevent_; +} +inline ::grpc::UserBadEvent* UserEvent::mutable_userbadevent() { + ::grpc::UserBadEvent* _msg = _internal_mutable_userbadevent(); + // @@protoc_insertion_point(field_mutable:grpc.UserEvent.userBadEvent) + return _msg; +} + inline bool UserEvent::has_event() const { return event_case() != EVENT_NOT_SET; } @@ -15456,6 +15725,110 @@ inline void UserChangedEvent::set_allocated_userid(std::string* userid) { // ------------------------------------------------------------------- +// UserBadEvent + +// string userID = 1; +inline void UserBadEvent::clear_userid() { + _impl_.userid_.ClearToEmpty(); +} +inline const std::string& UserBadEvent::userid() const { + // @@protoc_insertion_point(field_get:grpc.UserBadEvent.userID) + return _internal_userid(); +} +template +inline PROTOBUF_ALWAYS_INLINE +void UserBadEvent::set_userid(ArgT0&& arg0, ArgT... args) { + + _impl_.userid_.Set(static_cast(arg0), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:grpc.UserBadEvent.userID) +} +inline std::string* UserBadEvent::mutable_userid() { + std::string* _s = _internal_mutable_userid(); + // @@protoc_insertion_point(field_mutable:grpc.UserBadEvent.userID) + return _s; +} +inline const std::string& UserBadEvent::_internal_userid() const { + return _impl_.userid_.Get(); +} +inline void UserBadEvent::_internal_set_userid(const std::string& value) { + + _impl_.userid_.Set(value, GetArenaForAllocation()); +} +inline std::string* UserBadEvent::_internal_mutable_userid() { + + return _impl_.userid_.Mutable(GetArenaForAllocation()); +} +inline std::string* UserBadEvent::release_userid() { + // @@protoc_insertion_point(field_release:grpc.UserBadEvent.userID) + return _impl_.userid_.Release(); +} +inline void UserBadEvent::set_allocated_userid(std::string* userid) { + if (userid != nullptr) { + + } else { + + } + _impl_.userid_.SetAllocated(userid, GetArenaForAllocation()); +#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.userid_.IsDefault()) { + _impl_.userid_.Set("", GetArenaForAllocation()); + } +#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:grpc.UserBadEvent.userID) +} + +// string errorMessage = 2; +inline void UserBadEvent::clear_errormessage() { + _impl_.errormessage_.ClearToEmpty(); +} +inline const std::string& UserBadEvent::errormessage() const { + // @@protoc_insertion_point(field_get:grpc.UserBadEvent.errorMessage) + return _internal_errormessage(); +} +template +inline PROTOBUF_ALWAYS_INLINE +void UserBadEvent::set_errormessage(ArgT0&& arg0, ArgT... args) { + + _impl_.errormessage_.Set(static_cast(arg0), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:grpc.UserBadEvent.errorMessage) +} +inline std::string* UserBadEvent::mutable_errormessage() { + std::string* _s = _internal_mutable_errormessage(); + // @@protoc_insertion_point(field_mutable:grpc.UserBadEvent.errorMessage) + return _s; +} +inline const std::string& UserBadEvent::_internal_errormessage() const { + return _impl_.errormessage_.Get(); +} +inline void UserBadEvent::_internal_set_errormessage(const std::string& value) { + + _impl_.errormessage_.Set(value, GetArenaForAllocation()); +} +inline std::string* UserBadEvent::_internal_mutable_errormessage() { + + return _impl_.errormessage_.Mutable(GetArenaForAllocation()); +} +inline std::string* UserBadEvent::release_errormessage() { + // @@protoc_insertion_point(field_release:grpc.UserBadEvent.errorMessage) + return _impl_.errormessage_.Release(); +} +inline void UserBadEvent::set_allocated_errormessage(std::string* errormessage) { + if (errormessage != nullptr) { + + } else { + + } + _impl_.errormessage_.SetAllocated(errormessage, GetArenaForAllocation()); +#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.errormessage_.IsDefault()) { + _impl_.errormessage_.Set("", GetArenaForAllocation()); + } +#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:grpc.UserBadEvent.errorMessage) +} + +// ------------------------------------------------------------------- + // GenericErrorEvent // .grpc.ErrorCode code = 1; @@ -15591,6 +15964,8 @@ inline void GenericErrorEvent::set_code(::grpc::ErrorCode value) { // ------------------------------------------------------------------- +// ------------------------------------------------------------------- + // @@protoc_insertion_point(namespace_scope) diff --git a/internal/frontend/cli/frontend.go b/internal/frontend/cli/frontend.go index 3e2fab4a..39d34244 100644 --- a/internal/frontend/cli/frontend.go +++ b/internal/frontend/cli/frontend.go @@ -295,6 +295,14 @@ func (f *frontendCLI) watchEvents(eventCh <-chan events.Event) { // nolint:funle f.notifyLogout(user.Username) + case events.UserBadEvent: + user, err := f.bridge.GetUserInfo(event.UserID) + if err != nil { + return + } + + f.Printf("User %s received a bad event and was logged out.\n", user.Username) + case events.UserAddressUpdated: user, err := f.bridge.GetUserInfo(event.UserID) if err != nil { diff --git a/internal/frontend/grpc/bridge.pb.go b/internal/frontend/grpc/bridge.pb.go index 9a9beeb7..a5207e62 100644 --- a/internal/frontend/grpc/bridge.pb.go +++ b/internal/frontend/grpc/bridge.pb.go @@ -3511,6 +3511,7 @@ type UserEvent struct { // *UserEvent_ToggleSplitModeFinished // *UserEvent_UserDisconnected // *UserEvent_UserChanged + // *UserEvent_UserBadEvent Event isUserEvent_Event `protobuf_oneof:"event"` } @@ -3574,6 +3575,13 @@ func (x *UserEvent) GetUserChanged() *UserChangedEvent { return nil } +func (x *UserEvent) GetUserBadEvent() *UserBadEvent { + if x, ok := x.GetEvent().(*UserEvent_UserBadEvent); ok { + return x.UserBadEvent + } + return nil +} + type isUserEvent_Event interface { isUserEvent_Event() } @@ -3590,12 +3598,18 @@ type UserEvent_UserChanged struct { UserChanged *UserChangedEvent `protobuf:"bytes,3,opt,name=userChanged,proto3,oneof"` } +type UserEvent_UserBadEvent struct { + UserBadEvent *UserBadEvent `protobuf:"bytes,4,opt,name=userBadEvent,proto3,oneof"` +} + func (*UserEvent_ToggleSplitModeFinished) isUserEvent_Event() {} func (*UserEvent_UserDisconnected) isUserEvent_Event() {} func (*UserEvent_UserChanged) isUserEvent_Event() {} +func (*UserEvent_UserBadEvent) isUserEvent_Event() {} + type ToggleSplitModeFinishedEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3737,6 +3751,61 @@ func (x *UserChangedEvent) GetUserID() string { return "" } +type UserBadEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"` + ErrorMessage string `protobuf:"bytes,2,opt,name=errorMessage,proto3" json:"errorMessage,omitempty"` +} + +func (x *UserBadEvent) Reset() { + *x = UserBadEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_bridge_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserBadEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserBadEvent) ProtoMessage() {} + +func (x *UserBadEvent) ProtoReflect() protoreflect.Message { + mi := &file_bridge_proto_msgTypes[55] + 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 UserBadEvent.ProtoReflect.Descriptor instead. +func (*UserBadEvent) Descriptor() ([]byte, []int) { + return file_bridge_proto_rawDescGZIP(), []int{55} +} + +func (x *UserBadEvent) GetUserID() string { + if x != nil { + return x.UserID + } + return "" +} + +func (x *UserBadEvent) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage + } + return "" +} + type GenericErrorEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3748,7 +3817,7 @@ type GenericErrorEvent struct { func (x *GenericErrorEvent) Reset() { *x = GenericErrorEvent{} if protoimpl.UnsafeEnabled { - mi := &file_bridge_proto_msgTypes[55] + mi := &file_bridge_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3761,7 +3830,7 @@ func (x *GenericErrorEvent) String() string { func (*GenericErrorEvent) ProtoMessage() {} func (x *GenericErrorEvent) ProtoReflect() protoreflect.Message { - mi := &file_bridge_proto_msgTypes[55] + mi := &file_bridge_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3774,7 +3843,7 @@ func (x *GenericErrorEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericErrorEvent.ProtoReflect.Descriptor instead. func (*GenericErrorEvent) Descriptor() ([]byte, []int) { - return file_bridge_proto_rawDescGZIP(), []int{55} + return file_bridge_proto_rawDescGZIP(), []int{56} } func (x *GenericErrorEvent) GetCode() ErrorCode { @@ -4147,7 +4216,7 @@ var file_bridge_proto_rawDesc = []byte{ 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x13, 0x0a, 0x11, 0x41, 0x70, 0x69, 0x43, 0x65, 0x72, 0x74, 0x49, 0x73, 0x73, 0x75, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x22, 0xfb, 0x01, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x5e, + 0x22, 0xb5, 0x02, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x5e, 0x0a, 0x17, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x53, 0x70, 0x6c, @@ -4162,320 +4231,329 @@ var file_bridge_proto_rawDesc = []byte{ 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x36, - 0x0a, 0x1c, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, - 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, - 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x33, 0x0a, 0x15, 0x55, 0x73, 0x65, 0x72, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 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, 0x22, 0x2a, 0x0a, 0x10, 0x55, - 0x73, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x38, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x69, 0x63, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x2a, 0x71, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x0d, 0x0a, - 0x09, 0x4c, 0x4f, 0x47, 0x5f, 0x50, 0x41, 0x4e, 0x49, 0x43, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, - 0x4c, 0x4f, 0x47, 0x5f, 0x46, 0x41, 0x54, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, - 0x4f, 0x47, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x4f, - 0x47, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x4f, 0x47, 0x5f, - 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x4f, 0x47, 0x5f, 0x44, 0x45, - 0x42, 0x55, 0x47, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x4f, 0x47, 0x5f, 0x54, 0x52, 0x41, - 0x43, 0x45, 0x10, 0x06, 0x2a, 0x36, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x5f, 0x4f, 0x55, 0x54, 0x10, - 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, - 0x09, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x02, 0x2a, 0xa2, 0x01, 0x0a, - 0x0e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x1b, 0x0a, 0x17, 0x55, 0x53, 0x45, 0x52, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x50, 0x41, 0x53, 0x53, - 0x57, 0x4f, 0x52, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, - 0x46, 0x52, 0x45, 0x45, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x43, - 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, - 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x46, 0x41, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, - 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x46, 0x41, 0x5f, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x10, 0x04, 0x12, - 0x17, 0x0a, 0x13, 0x54, 0x57, 0x4f, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x53, - 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x57, 0x4f, 0x5f, - 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x53, 0x5f, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x10, - 0x06, 0x2a, 0x5b, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4d, - 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x16, 0x0a, - 0x12, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x52, - 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, - 0x53, 0x49, 0x4c, 0x45, 0x4e, 0x54, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x2a, 0x6b, - 0x0a, 0x12, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x43, 0x41, 0x43, - 0x48, 0x45, 0x5f, 0x55, 0x4e, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x45, - 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, - 0x4f, 0x56, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x45, - 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x46, - 0x55, 0x4c, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x2a, 0xdd, 0x01, 0x0a, 0x1b, - 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x49, - 0x4d, 0x41, 0x50, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x55, 0x50, - 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x4d, 0x54, 0x50, - 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x55, 0x50, 0x5f, 0x45, 0x52, - 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4d, 0x41, 0x50, 0x5f, 0x50, 0x4f, - 0x52, 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, - 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x4d, 0x54, 0x50, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x43, - 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x25, 0x0a, - 0x21, 0x49, 0x4d, 0x41, 0x50, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x45, 0x52, 0x52, - 0x4f, 0x52, 0x10, 0x04, 0x12, 0x25, 0x0a, 0x21, 0x53, 0x4d, 0x54, 0x50, 0x5f, 0x43, 0x4f, 0x4e, - 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x48, 0x41, - 0x4e, 0x47, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x2a, 0x53, 0x0a, 0x09, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x54, - 0x4c, 0x53, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x5f, 0x45, 0x58, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x45, - 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x54, 0x4c, 0x53, 0x5f, 0x4b, 0x45, - 0x59, 0x5f, 0x45, 0x58, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, - 0x32, 0xa8, 0x1e, 0x0a, 0x06, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x12, 0x49, 0x0a, 0x0b, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x4c, 0x6f, 0x67, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, - 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3a, 0x0a, 0x08, 0x47, 0x75, 0x69, 0x52, 0x65, - 0x61, 0x64, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x12, 0x36, 0x0a, 0x04, 0x51, 0x75, 0x69, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x39, 0x0a, 0x07, 0x52, - 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x42, 0x61, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x42, 0x61, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x42, 0x61, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, + 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x36, 0x0a, 0x1c, 0x54, 0x6f, 0x67, 0x67, + 0x6c, 0x65, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, + 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, + 0x22, 0x33, 0x0a, 0x15, 0x55, 0x73, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 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, 0x22, 0x2a, 0x0a, 0x10, 0x55, 0x73, 0x65, 0x72, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, + 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x44, 0x22, 0x4a, 0x0a, 0x0c, 0x55, 0x73, 0x65, 0x72, 0x42, 0x61, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x38, 0x0a, + 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x0f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, + 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x2a, 0x71, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x4f, 0x47, 0x5f, 0x50, 0x41, 0x4e, 0x49, 0x43, + 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x4f, 0x47, 0x5f, 0x46, 0x41, 0x54, 0x41, 0x4c, 0x10, + 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x4f, 0x47, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, + 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x4f, 0x47, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x03, 0x12, 0x0c, + 0x0a, 0x08, 0x4c, 0x4f, 0x47, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, + 0x4c, 0x4f, 0x47, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x4c, + 0x4f, 0x47, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x06, 0x2a, 0x36, 0x0a, 0x09, 0x55, 0x73, + 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x49, 0x47, 0x4e, 0x45, + 0x44, 0x5f, 0x4f, 0x55, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x4f, 0x43, 0x4b, 0x45, + 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, + 0x10, 0x02, 0x2a, 0xa2, 0x01, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x55, 0x53, 0x45, 0x52, 0x4e, 0x41, 0x4d, + 0x45, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, + 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x52, 0x45, 0x45, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, + 0x01, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x46, 0x41, 0x5f, 0x45, + 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x46, 0x41, 0x5f, 0x41, 0x42, + 0x4f, 0x52, 0x54, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x57, 0x4f, 0x5f, 0x50, 0x41, 0x53, + 0x53, 0x57, 0x4f, 0x52, 0x44, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x17, + 0x0a, 0x13, 0x54, 0x57, 0x4f, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x53, 0x5f, + 0x41, 0x42, 0x4f, 0x52, 0x54, 0x10, 0x06, 0x2a, 0x5b, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x50, + 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, + 0x52, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x4f, + 0x52, 0x43, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x55, + 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x49, 0x4c, 0x45, 0x4e, 0x54, 0x5f, 0x45, 0x52, 0x52, + 0x4f, 0x52, 0x10, 0x02, 0x2a, 0x6b, 0x0a, 0x12, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x49, + 0x53, 0x4b, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x55, 0x4e, 0x41, 0x56, 0x41, 0x49, 0x4c, + 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, + 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x43, + 0x41, 0x43, 0x48, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, + 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, + 0x02, 0x2a, 0xdd, 0x01, 0x0a, 0x1b, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4d, 0x41, 0x50, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, + 0x54, 0x41, 0x52, 0x54, 0x55, 0x50, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x1b, + 0x0a, 0x17, 0x53, 0x4d, 0x54, 0x50, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, + 0x54, 0x55, 0x50, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x49, + 0x4d, 0x41, 0x50, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x4d, 0x54, 0x50, 0x5f, + 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, + 0x52, 0x10, 0x03, 0x12, 0x25, 0x0a, 0x21, 0x49, 0x4d, 0x41, 0x50, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, + 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, + 0x47, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x25, 0x0a, 0x21, 0x53, 0x4d, + 0x54, 0x50, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, + 0x44, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, + 0x05, 0x2a, 0x53, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x11, + 0x0a, 0x0d, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, + 0x00, 0x12, 0x19, 0x0a, 0x15, 0x54, 0x4c, 0x53, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x5f, 0x45, 0x58, + 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, + 0x54, 0x4c, 0x53, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x45, 0x58, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x45, + 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x32, 0xa8, 0x1e, 0x0a, 0x06, 0x42, 0x72, 0x69, 0x64, 0x67, + 0x65, 0x12, 0x49, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, + 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x77, 0x4f, 0x6e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x46, 0x0a, 0x10, 0x53, - 0x68, 0x6f, 0x77, 0x53, 0x70, 0x6c, 0x61, 0x73, 0x68, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x12, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x49, 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x75, - 0x69, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x0b, + 0x41, 0x64, 0x64, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x18, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3a, 0x0a, + 0x08, 0x47, 0x75, 0x69, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x36, 0x0a, 0x04, 0x51, 0x75, 0x69, + 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x12, 0x39, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x0d, + 0x53, 0x68, 0x6f, 0x77, 0x4f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x46, 0x0a, 0x10, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x70, 0x6c, 0x61, 0x73, 0x68, 0x53, + 0x63, 0x72, 0x65, 0x65, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x49, 0x73, 0x46, + 0x69, 0x72, 0x73, 0x74, 0x47, 0x75, 0x69, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x46, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x49, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x4f, 0x6e, 0x12, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x0d, 0x49, 0x73, 0x41, 0x75, + 0x74, 0x6f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x46, 0x0a, + 0x10, 0x53, 0x65, 0x74, 0x49, 0x73, 0x42, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x12, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x0d, 0x49, 0x73, 0x42, 0x65, 0x74, 0x61, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x46, 0x0a, 0x10, 0x53, 0x65, - 0x74, 0x49, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x6e, 0x12, 0x1a, + 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x49, 0x0a, 0x13, 0x53, 0x65, + 0x74, 0x49, 0x73, 0x41, 0x6c, 0x6c, 0x4d, 0x61, 0x69, 0x6c, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, + 0x65, 0x12, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x46, 0x0a, 0x10, 0x49, 0x73, 0x41, 0x6c, 0x6c, 0x4d, 0x61, + 0x69, 0x6c, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, + 0x04, 0x47, 0x6f, 0x4f, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3e, 0x0a, 0x0c, 0x54, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x07, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x40, 0x0a, 0x08, + 0x4c, 0x6f, 0x67, 0x73, 0x50, 0x61, 0x74, 0x68, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, + 0x0a, 0x0b, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x4c, 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x6f, + 0x74, 0x65, 0x73, 0x50, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x4e, 0x0a, 0x16, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x4c, + 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x47, 0x0a, 0x0f, 0x4c, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x67, 0x65, + 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4a, 0x0a, 0x12, 0x53, 0x65, + 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x47, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x4a, 0x0a, 0x12, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4d, 0x0a, 0x15, 0x45, 0x78, 0x70, 0x6f, + 0x72, 0x74, 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x73, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x45, 0x0a, 0x0d, 0x46, 0x6f, 0x72, 0x63, 0x65, + 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x49, + 0x0a, 0x11, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x4c, 0x6f, 0x67, + 0x69, 0x6e, 0x12, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x36, + 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x32, 0x46, 0x41, 0x12, 0x12, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x0f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x32, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x41, 0x62, + 0x6f, 0x72, 0x74, 0x12, 0x17, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x41, 0x62, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4c, 0x0a, 0x16, 0x53, 0x65, 0x74, 0x49, 0x73, 0x41, 0x75, 0x74, + 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x6e, 0x12, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x43, 0x0a, 0x0d, 0x49, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x4f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, - 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x46, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x49, 0x73, - 0x42, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, - 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x43, 0x0a, 0x0d, 0x49, 0x73, 0x42, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x49, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x49, 0x73, 0x41, 0x6c, 0x6c, - 0x4d, 0x61, 0x69, 0x6c, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, - 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x46, 0x0a, 0x10, 0x49, 0x73, 0x41, 0x6c, 0x6c, 0x4d, 0x61, 0x69, 0x6c, 0x56, 0x69, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, - 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x04, 0x47, 0x6f, 0x4f, 0x73, 0x12, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3e, 0x0a, 0x0c, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, + 0x74, 0x79, 0x12, 0x49, 0x0a, 0x13, 0x49, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, + 0x63, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x45, 0x0a, + 0x0d, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x48, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x44, 0x69, 0x73, 0x6b, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x45, + 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x49, 0x73, 0x44, 0x6f, 0x48, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x12, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0c, 0x49, 0x73, 0x44, 0x6f, 0x48, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x44, 0x0a, 0x12, 0x4d, 0x61, 0x69, + 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x49, + 0x6d, 0x61, 0x70, 0x53, 0x6d, 0x74, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, + 0x47, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x49, 0x6d, 0x61, 0x70, 0x53, 0x6d, 0x74, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x40, 0x0a, 0x08, 0x48, 0x6f, 0x73, 0x74, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x49, 0x73, + 0x50, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x65, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x65, + 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x20, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4a, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4b, + 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x47, 0x0a, + 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x73, 0x50, 0x61, - 0x74, 0x68, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x4c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4c, 0x0a, - 0x14, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x50, 0x61, 0x67, - 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4e, 0x0a, 0x16, 0x44, - 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x47, 0x0a, 0x0f, 0x4c, - 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4a, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x72, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x47, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4a, 0x0a, 0x12, 0x43, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, - 0x75, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x42, 0x75, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, + 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x0a, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x10, 0x53, 0x65, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4d, + 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x4d, 0x0a, 0x15, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x4c, 0x53, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x1c, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x12, 0x45, 0x0a, 0x0d, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, - 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x49, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x4d, - 0x61, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1c, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x12, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x36, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x32, 0x46, 0x41, 0x12, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x3d, 0x0a, 0x0f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x32, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x73, 0x12, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x3d, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x12, 0x17, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3d, - 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x55, 0x73, 0x65, 0x72, + 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x51, 0x0a, 0x16, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x65, + 0x4d, 0x61, 0x69, 0x6c, 0x12, 0x1f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x4d, 0x61, 0x69, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, - 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4c, - 0x0a, 0x16, 0x53, 0x65, 0x74, 0x49, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x6e, 0x12, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x49, 0x0a, 0x13, - 0x49, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, - 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x45, 0x0a, 0x0d, 0x44, 0x69, 0x73, 0x6b, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x48, - 0x0a, 0x10, 0x53, 0x65, 0x74, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, - 0x74, 0x68, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x45, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x49, - 0x73, 0x44, 0x6f, 0x48, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, - 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x42, 0x0a, 0x0c, 0x49, 0x73, 0x44, 0x6f, 0x48, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x44, 0x0a, 0x12, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x0e, 0x52, 0x75, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, + 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x41, + 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6d, 0x61, 0x70, 0x53, 0x6d, 0x74, - 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x47, 0x0a, 0x15, 0x53, 0x65, 0x74, - 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6d, 0x61, 0x70, 0x53, 0x6d, - 0x74, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x40, 0x0a, 0x08, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x49, 0x73, 0x50, 0x6f, 0x72, 0x74, 0x46, 0x72, - 0x65, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x41, - 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x12, 0x53, - 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x47, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x3d, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x33, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x0a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x55, 0x73, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, - 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x55, 0x73, 0x65, 0x72, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0a, - 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x42, 0x0a, 0x0a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x51, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x65, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x4d, 0x61, 0x69, 0x6c, 0x12, 0x1f, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x41, - 0x70, 0x70, 0x6c, 0x65, 0x4d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x41, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x70, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x36, 0x5a, 0x34, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x6e, - 0x4d, 0x61, 0x69, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2d, 0x62, 0x72, 0x69, 0x64, - 0x67, 0x65, 0x2f, 0x76, 0x33, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x79, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x4d, 0x61, 0x69, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x6e, 0x2d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2f, 0x76, 0x33, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -4491,7 +4569,7 @@ func file_bridge_proto_rawDescGZIP() []byte { } var file_bridge_proto_enumTypes = make([]protoimpl.EnumInfo, 7) -var file_bridge_proto_msgTypes = make([]protoimpl.MessageInfo, 56) +var file_bridge_proto_msgTypes = make([]protoimpl.MessageInfo, 57) var file_bridge_proto_goTypes = []interface{}{ (LogLevel)(0), // 0: grpc.LogLevel (UserState)(0), // 1: grpc.UserState @@ -4555,11 +4633,12 @@ var file_bridge_proto_goTypes = []interface{}{ (*ToggleSplitModeFinishedEvent)(nil), // 59: grpc.ToggleSplitModeFinishedEvent (*UserDisconnectedEvent)(nil), // 60: grpc.UserDisconnectedEvent (*UserChangedEvent)(nil), // 61: grpc.UserChangedEvent - (*GenericErrorEvent)(nil), // 62: grpc.GenericErrorEvent - (*wrapperspb.StringValue)(nil), // 63: google.protobuf.StringValue - (*emptypb.Empty)(nil), // 64: google.protobuf.Empty - (*wrapperspb.BoolValue)(nil), // 65: google.protobuf.BoolValue - (*wrapperspb.Int32Value)(nil), // 66: google.protobuf.Int32Value + (*UserBadEvent)(nil), // 62: grpc.UserBadEvent + (*GenericErrorEvent)(nil), // 63: grpc.GenericErrorEvent + (*wrapperspb.StringValue)(nil), // 64: google.protobuf.StringValue + (*emptypb.Empty)(nil), // 65: google.protobuf.Empty + (*wrapperspb.BoolValue)(nil), // 66: google.protobuf.BoolValue + (*wrapperspb.Int32Value)(nil), // 67: google.protobuf.Int32Value } var file_bridge_proto_depIdxs = []int32{ 0, // 0: grpc.AddLogEntryRequest.level:type_name -> grpc.LogLevel @@ -4573,7 +4652,7 @@ var file_bridge_proto_depIdxs = []int32{ 49, // 8: grpc.StreamEvent.keychain:type_name -> grpc.KeychainEvent 53, // 9: grpc.StreamEvent.mail:type_name -> grpc.MailEvent 58, // 10: grpc.StreamEvent.user:type_name -> grpc.UserEvent - 62, // 11: grpc.StreamEvent.genericError:type_name -> grpc.GenericErrorEvent + 63, // 11: grpc.StreamEvent.genericError:type_name -> grpc.GenericErrorEvent 20, // 12: grpc.AppEvent.internetStatus:type_name -> grpc.InternetStatusEvent 21, // 13: grpc.AppEvent.toggleAutostartFinished:type_name -> grpc.ToggleAutostartFinishedEvent 22, // 14: grpc.AppEvent.resetFinished:type_name -> grpc.ResetFinishedEvent @@ -4615,124 +4694,125 @@ var file_bridge_proto_depIdxs = []int32{ 59, // 50: grpc.UserEvent.toggleSplitModeFinished:type_name -> grpc.ToggleSplitModeFinishedEvent 60, // 51: grpc.UserEvent.userDisconnected:type_name -> grpc.UserDisconnectedEvent 61, // 52: grpc.UserEvent.userChanged:type_name -> grpc.UserChangedEvent - 6, // 53: grpc.GenericErrorEvent.code:type_name -> grpc.ErrorCode - 63, // 54: grpc.Bridge.CheckTokens:input_type -> google.protobuf.StringValue - 7, // 55: grpc.Bridge.AddLogEntry:input_type -> grpc.AddLogEntryRequest - 64, // 56: grpc.Bridge.GuiReady:input_type -> google.protobuf.Empty - 64, // 57: grpc.Bridge.Quit:input_type -> google.protobuf.Empty - 64, // 58: grpc.Bridge.Restart:input_type -> google.protobuf.Empty - 64, // 59: grpc.Bridge.ShowOnStartup:input_type -> google.protobuf.Empty - 64, // 60: grpc.Bridge.ShowSplashScreen:input_type -> google.protobuf.Empty - 64, // 61: grpc.Bridge.IsFirstGuiStart:input_type -> google.protobuf.Empty - 65, // 62: grpc.Bridge.SetIsAutostartOn:input_type -> google.protobuf.BoolValue - 64, // 63: grpc.Bridge.IsAutostartOn:input_type -> google.protobuf.Empty - 65, // 64: grpc.Bridge.SetIsBetaEnabled:input_type -> google.protobuf.BoolValue - 64, // 65: grpc.Bridge.IsBetaEnabled:input_type -> google.protobuf.Empty - 65, // 66: grpc.Bridge.SetIsAllMailVisible:input_type -> google.protobuf.BoolValue - 64, // 67: grpc.Bridge.IsAllMailVisible:input_type -> google.protobuf.Empty - 64, // 68: grpc.Bridge.GoOs:input_type -> google.protobuf.Empty - 64, // 69: grpc.Bridge.TriggerReset:input_type -> google.protobuf.Empty - 64, // 70: grpc.Bridge.Version:input_type -> google.protobuf.Empty - 64, // 71: grpc.Bridge.LogsPath:input_type -> google.protobuf.Empty - 64, // 72: grpc.Bridge.LicensePath:input_type -> google.protobuf.Empty - 64, // 73: grpc.Bridge.ReleaseNotesPageLink:input_type -> google.protobuf.Empty - 64, // 74: grpc.Bridge.DependencyLicensesLink:input_type -> google.protobuf.Empty - 64, // 75: grpc.Bridge.LandingPageLink:input_type -> google.protobuf.Empty - 63, // 76: grpc.Bridge.SetColorSchemeName:input_type -> google.protobuf.StringValue - 64, // 77: grpc.Bridge.ColorSchemeName:input_type -> google.protobuf.Empty - 64, // 78: grpc.Bridge.CurrentEmailClient:input_type -> google.protobuf.Empty - 8, // 79: grpc.Bridge.ReportBug:input_type -> grpc.ReportBugRequest - 63, // 80: grpc.Bridge.ExportTLSCertificates:input_type -> google.protobuf.StringValue - 63, // 81: grpc.Bridge.ForceLauncher:input_type -> google.protobuf.StringValue - 63, // 82: grpc.Bridge.SetMainExecutable:input_type -> google.protobuf.StringValue - 9, // 83: grpc.Bridge.Login:input_type -> grpc.LoginRequest - 9, // 84: grpc.Bridge.Login2FA:input_type -> grpc.LoginRequest - 9, // 85: grpc.Bridge.Login2Passwords:input_type -> grpc.LoginRequest - 10, // 86: grpc.Bridge.LoginAbort:input_type -> grpc.LoginAbortRequest - 64, // 87: grpc.Bridge.CheckUpdate:input_type -> google.protobuf.Empty - 64, // 88: grpc.Bridge.InstallUpdate:input_type -> google.protobuf.Empty - 65, // 89: grpc.Bridge.SetIsAutomaticUpdateOn:input_type -> google.protobuf.BoolValue - 64, // 90: grpc.Bridge.IsAutomaticUpdateOn:input_type -> google.protobuf.Empty - 64, // 91: grpc.Bridge.DiskCachePath:input_type -> google.protobuf.Empty - 63, // 92: grpc.Bridge.SetDiskCachePath:input_type -> google.protobuf.StringValue - 65, // 93: grpc.Bridge.SetIsDoHEnabled:input_type -> google.protobuf.BoolValue - 64, // 94: grpc.Bridge.IsDoHEnabled:input_type -> google.protobuf.Empty - 64, // 95: grpc.Bridge.MailServerSettings:input_type -> google.protobuf.Empty - 11, // 96: grpc.Bridge.SetMailServerSettings:input_type -> grpc.ImapSmtpSettings - 64, // 97: grpc.Bridge.Hostname:input_type -> google.protobuf.Empty - 66, // 98: grpc.Bridge.IsPortFree:input_type -> google.protobuf.Int32Value - 64, // 99: grpc.Bridge.AvailableKeychains:input_type -> google.protobuf.Empty - 63, // 100: grpc.Bridge.SetCurrentKeychain:input_type -> google.protobuf.StringValue - 64, // 101: grpc.Bridge.CurrentKeychain:input_type -> google.protobuf.Empty - 64, // 102: grpc.Bridge.GetUserList:input_type -> google.protobuf.Empty - 63, // 103: grpc.Bridge.GetUser:input_type -> google.protobuf.StringValue - 14, // 104: grpc.Bridge.SetUserSplitMode:input_type -> grpc.UserSplitModeRequest - 63, // 105: grpc.Bridge.LogoutUser:input_type -> google.protobuf.StringValue - 63, // 106: grpc.Bridge.RemoveUser:input_type -> google.protobuf.StringValue - 16, // 107: grpc.Bridge.ConfigureUserAppleMail:input_type -> grpc.ConfigureAppleMailRequest - 17, // 108: grpc.Bridge.RunEventStream:input_type -> grpc.EventStreamRequest - 64, // 109: grpc.Bridge.StopEventStream:input_type -> google.protobuf.Empty - 63, // 110: grpc.Bridge.CheckTokens:output_type -> google.protobuf.StringValue - 64, // 111: grpc.Bridge.AddLogEntry:output_type -> google.protobuf.Empty - 64, // 112: grpc.Bridge.GuiReady:output_type -> google.protobuf.Empty - 64, // 113: grpc.Bridge.Quit:output_type -> google.protobuf.Empty - 64, // 114: grpc.Bridge.Restart:output_type -> google.protobuf.Empty - 65, // 115: grpc.Bridge.ShowOnStartup:output_type -> google.protobuf.BoolValue - 65, // 116: grpc.Bridge.ShowSplashScreen:output_type -> google.protobuf.BoolValue - 65, // 117: grpc.Bridge.IsFirstGuiStart:output_type -> google.protobuf.BoolValue - 64, // 118: grpc.Bridge.SetIsAutostartOn:output_type -> google.protobuf.Empty - 65, // 119: grpc.Bridge.IsAutostartOn:output_type -> google.protobuf.BoolValue - 64, // 120: grpc.Bridge.SetIsBetaEnabled:output_type -> google.protobuf.Empty - 65, // 121: grpc.Bridge.IsBetaEnabled:output_type -> google.protobuf.BoolValue - 64, // 122: grpc.Bridge.SetIsAllMailVisible:output_type -> google.protobuf.Empty - 65, // 123: grpc.Bridge.IsAllMailVisible:output_type -> google.protobuf.BoolValue - 63, // 124: grpc.Bridge.GoOs:output_type -> google.protobuf.StringValue - 64, // 125: grpc.Bridge.TriggerReset:output_type -> google.protobuf.Empty - 63, // 126: grpc.Bridge.Version:output_type -> google.protobuf.StringValue - 63, // 127: grpc.Bridge.LogsPath:output_type -> google.protobuf.StringValue - 63, // 128: grpc.Bridge.LicensePath:output_type -> google.protobuf.StringValue - 63, // 129: grpc.Bridge.ReleaseNotesPageLink:output_type -> google.protobuf.StringValue - 63, // 130: grpc.Bridge.DependencyLicensesLink:output_type -> google.protobuf.StringValue - 63, // 131: grpc.Bridge.LandingPageLink:output_type -> google.protobuf.StringValue - 64, // 132: grpc.Bridge.SetColorSchemeName:output_type -> google.protobuf.Empty - 63, // 133: grpc.Bridge.ColorSchemeName:output_type -> google.protobuf.StringValue - 63, // 134: grpc.Bridge.CurrentEmailClient:output_type -> google.protobuf.StringValue - 64, // 135: grpc.Bridge.ReportBug:output_type -> google.protobuf.Empty - 64, // 136: grpc.Bridge.ExportTLSCertificates:output_type -> google.protobuf.Empty - 64, // 137: grpc.Bridge.ForceLauncher:output_type -> google.protobuf.Empty - 64, // 138: grpc.Bridge.SetMainExecutable:output_type -> google.protobuf.Empty - 64, // 139: grpc.Bridge.Login:output_type -> google.protobuf.Empty - 64, // 140: grpc.Bridge.Login2FA:output_type -> google.protobuf.Empty - 64, // 141: grpc.Bridge.Login2Passwords:output_type -> google.protobuf.Empty - 64, // 142: grpc.Bridge.LoginAbort:output_type -> google.protobuf.Empty - 64, // 143: grpc.Bridge.CheckUpdate:output_type -> google.protobuf.Empty - 64, // 144: grpc.Bridge.InstallUpdate:output_type -> google.protobuf.Empty - 64, // 145: grpc.Bridge.SetIsAutomaticUpdateOn:output_type -> google.protobuf.Empty - 65, // 146: grpc.Bridge.IsAutomaticUpdateOn:output_type -> google.protobuf.BoolValue - 63, // 147: grpc.Bridge.DiskCachePath:output_type -> google.protobuf.StringValue - 64, // 148: grpc.Bridge.SetDiskCachePath:output_type -> google.protobuf.Empty - 64, // 149: grpc.Bridge.SetIsDoHEnabled:output_type -> google.protobuf.Empty - 65, // 150: grpc.Bridge.IsDoHEnabled:output_type -> google.protobuf.BoolValue - 11, // 151: grpc.Bridge.MailServerSettings:output_type -> grpc.ImapSmtpSettings - 64, // 152: grpc.Bridge.SetMailServerSettings:output_type -> google.protobuf.Empty - 63, // 153: grpc.Bridge.Hostname:output_type -> google.protobuf.StringValue - 65, // 154: grpc.Bridge.IsPortFree:output_type -> google.protobuf.BoolValue - 12, // 155: grpc.Bridge.AvailableKeychains:output_type -> grpc.AvailableKeychainsResponse - 64, // 156: grpc.Bridge.SetCurrentKeychain:output_type -> google.protobuf.Empty - 63, // 157: grpc.Bridge.CurrentKeychain:output_type -> google.protobuf.StringValue - 15, // 158: grpc.Bridge.GetUserList:output_type -> grpc.UserListResponse - 13, // 159: grpc.Bridge.GetUser:output_type -> grpc.User - 64, // 160: grpc.Bridge.SetUserSplitMode:output_type -> google.protobuf.Empty - 64, // 161: grpc.Bridge.LogoutUser:output_type -> google.protobuf.Empty - 64, // 162: grpc.Bridge.RemoveUser:output_type -> google.protobuf.Empty - 64, // 163: grpc.Bridge.ConfigureUserAppleMail:output_type -> google.protobuf.Empty - 18, // 164: grpc.Bridge.RunEventStream:output_type -> grpc.StreamEvent - 64, // 165: grpc.Bridge.StopEventStream:output_type -> google.protobuf.Empty - 110, // [110:166] is the sub-list for method output_type - 54, // [54:110] is the sub-list for method input_type - 54, // [54:54] is the sub-list for extension type_name - 54, // [54:54] is the sub-list for extension extendee - 0, // [0:54] is the sub-list for field type_name + 62, // 53: grpc.UserEvent.userBadEvent:type_name -> grpc.UserBadEvent + 6, // 54: grpc.GenericErrorEvent.code:type_name -> grpc.ErrorCode + 64, // 55: grpc.Bridge.CheckTokens:input_type -> google.protobuf.StringValue + 7, // 56: grpc.Bridge.AddLogEntry:input_type -> grpc.AddLogEntryRequest + 65, // 57: grpc.Bridge.GuiReady:input_type -> google.protobuf.Empty + 65, // 58: grpc.Bridge.Quit:input_type -> google.protobuf.Empty + 65, // 59: grpc.Bridge.Restart:input_type -> google.protobuf.Empty + 65, // 60: grpc.Bridge.ShowOnStartup:input_type -> google.protobuf.Empty + 65, // 61: grpc.Bridge.ShowSplashScreen:input_type -> google.protobuf.Empty + 65, // 62: grpc.Bridge.IsFirstGuiStart:input_type -> google.protobuf.Empty + 66, // 63: grpc.Bridge.SetIsAutostartOn:input_type -> google.protobuf.BoolValue + 65, // 64: grpc.Bridge.IsAutostartOn:input_type -> google.protobuf.Empty + 66, // 65: grpc.Bridge.SetIsBetaEnabled:input_type -> google.protobuf.BoolValue + 65, // 66: grpc.Bridge.IsBetaEnabled:input_type -> google.protobuf.Empty + 66, // 67: grpc.Bridge.SetIsAllMailVisible:input_type -> google.protobuf.BoolValue + 65, // 68: grpc.Bridge.IsAllMailVisible:input_type -> google.protobuf.Empty + 65, // 69: grpc.Bridge.GoOs:input_type -> google.protobuf.Empty + 65, // 70: grpc.Bridge.TriggerReset:input_type -> google.protobuf.Empty + 65, // 71: grpc.Bridge.Version:input_type -> google.protobuf.Empty + 65, // 72: grpc.Bridge.LogsPath:input_type -> google.protobuf.Empty + 65, // 73: grpc.Bridge.LicensePath:input_type -> google.protobuf.Empty + 65, // 74: grpc.Bridge.ReleaseNotesPageLink:input_type -> google.protobuf.Empty + 65, // 75: grpc.Bridge.DependencyLicensesLink:input_type -> google.protobuf.Empty + 65, // 76: grpc.Bridge.LandingPageLink:input_type -> google.protobuf.Empty + 64, // 77: grpc.Bridge.SetColorSchemeName:input_type -> google.protobuf.StringValue + 65, // 78: grpc.Bridge.ColorSchemeName:input_type -> google.protobuf.Empty + 65, // 79: grpc.Bridge.CurrentEmailClient:input_type -> google.protobuf.Empty + 8, // 80: grpc.Bridge.ReportBug:input_type -> grpc.ReportBugRequest + 64, // 81: grpc.Bridge.ExportTLSCertificates:input_type -> google.protobuf.StringValue + 64, // 82: grpc.Bridge.ForceLauncher:input_type -> google.protobuf.StringValue + 64, // 83: grpc.Bridge.SetMainExecutable:input_type -> google.protobuf.StringValue + 9, // 84: grpc.Bridge.Login:input_type -> grpc.LoginRequest + 9, // 85: grpc.Bridge.Login2FA:input_type -> grpc.LoginRequest + 9, // 86: grpc.Bridge.Login2Passwords:input_type -> grpc.LoginRequest + 10, // 87: grpc.Bridge.LoginAbort:input_type -> grpc.LoginAbortRequest + 65, // 88: grpc.Bridge.CheckUpdate:input_type -> google.protobuf.Empty + 65, // 89: grpc.Bridge.InstallUpdate:input_type -> google.protobuf.Empty + 66, // 90: grpc.Bridge.SetIsAutomaticUpdateOn:input_type -> google.protobuf.BoolValue + 65, // 91: grpc.Bridge.IsAutomaticUpdateOn:input_type -> google.protobuf.Empty + 65, // 92: grpc.Bridge.DiskCachePath:input_type -> google.protobuf.Empty + 64, // 93: grpc.Bridge.SetDiskCachePath:input_type -> google.protobuf.StringValue + 66, // 94: grpc.Bridge.SetIsDoHEnabled:input_type -> google.protobuf.BoolValue + 65, // 95: grpc.Bridge.IsDoHEnabled:input_type -> google.protobuf.Empty + 65, // 96: grpc.Bridge.MailServerSettings:input_type -> google.protobuf.Empty + 11, // 97: grpc.Bridge.SetMailServerSettings:input_type -> grpc.ImapSmtpSettings + 65, // 98: grpc.Bridge.Hostname:input_type -> google.protobuf.Empty + 67, // 99: grpc.Bridge.IsPortFree:input_type -> google.protobuf.Int32Value + 65, // 100: grpc.Bridge.AvailableKeychains:input_type -> google.protobuf.Empty + 64, // 101: grpc.Bridge.SetCurrentKeychain:input_type -> google.protobuf.StringValue + 65, // 102: grpc.Bridge.CurrentKeychain:input_type -> google.protobuf.Empty + 65, // 103: grpc.Bridge.GetUserList:input_type -> google.protobuf.Empty + 64, // 104: grpc.Bridge.GetUser:input_type -> google.protobuf.StringValue + 14, // 105: grpc.Bridge.SetUserSplitMode:input_type -> grpc.UserSplitModeRequest + 64, // 106: grpc.Bridge.LogoutUser:input_type -> google.protobuf.StringValue + 64, // 107: grpc.Bridge.RemoveUser:input_type -> google.protobuf.StringValue + 16, // 108: grpc.Bridge.ConfigureUserAppleMail:input_type -> grpc.ConfigureAppleMailRequest + 17, // 109: grpc.Bridge.RunEventStream:input_type -> grpc.EventStreamRequest + 65, // 110: grpc.Bridge.StopEventStream:input_type -> google.protobuf.Empty + 64, // 111: grpc.Bridge.CheckTokens:output_type -> google.protobuf.StringValue + 65, // 112: grpc.Bridge.AddLogEntry:output_type -> google.protobuf.Empty + 65, // 113: grpc.Bridge.GuiReady:output_type -> google.protobuf.Empty + 65, // 114: grpc.Bridge.Quit:output_type -> google.protobuf.Empty + 65, // 115: grpc.Bridge.Restart:output_type -> google.protobuf.Empty + 66, // 116: grpc.Bridge.ShowOnStartup:output_type -> google.protobuf.BoolValue + 66, // 117: grpc.Bridge.ShowSplashScreen:output_type -> google.protobuf.BoolValue + 66, // 118: grpc.Bridge.IsFirstGuiStart:output_type -> google.protobuf.BoolValue + 65, // 119: grpc.Bridge.SetIsAutostartOn:output_type -> google.protobuf.Empty + 66, // 120: grpc.Bridge.IsAutostartOn:output_type -> google.protobuf.BoolValue + 65, // 121: grpc.Bridge.SetIsBetaEnabled:output_type -> google.protobuf.Empty + 66, // 122: grpc.Bridge.IsBetaEnabled:output_type -> google.protobuf.BoolValue + 65, // 123: grpc.Bridge.SetIsAllMailVisible:output_type -> google.protobuf.Empty + 66, // 124: grpc.Bridge.IsAllMailVisible:output_type -> google.protobuf.BoolValue + 64, // 125: grpc.Bridge.GoOs:output_type -> google.protobuf.StringValue + 65, // 126: grpc.Bridge.TriggerReset:output_type -> google.protobuf.Empty + 64, // 127: grpc.Bridge.Version:output_type -> google.protobuf.StringValue + 64, // 128: grpc.Bridge.LogsPath:output_type -> google.protobuf.StringValue + 64, // 129: grpc.Bridge.LicensePath:output_type -> google.protobuf.StringValue + 64, // 130: grpc.Bridge.ReleaseNotesPageLink:output_type -> google.protobuf.StringValue + 64, // 131: grpc.Bridge.DependencyLicensesLink:output_type -> google.protobuf.StringValue + 64, // 132: grpc.Bridge.LandingPageLink:output_type -> google.protobuf.StringValue + 65, // 133: grpc.Bridge.SetColorSchemeName:output_type -> google.protobuf.Empty + 64, // 134: grpc.Bridge.ColorSchemeName:output_type -> google.protobuf.StringValue + 64, // 135: grpc.Bridge.CurrentEmailClient:output_type -> google.protobuf.StringValue + 65, // 136: grpc.Bridge.ReportBug:output_type -> google.protobuf.Empty + 65, // 137: grpc.Bridge.ExportTLSCertificates:output_type -> google.protobuf.Empty + 65, // 138: grpc.Bridge.ForceLauncher:output_type -> google.protobuf.Empty + 65, // 139: grpc.Bridge.SetMainExecutable:output_type -> google.protobuf.Empty + 65, // 140: grpc.Bridge.Login:output_type -> google.protobuf.Empty + 65, // 141: grpc.Bridge.Login2FA:output_type -> google.protobuf.Empty + 65, // 142: grpc.Bridge.Login2Passwords:output_type -> google.protobuf.Empty + 65, // 143: grpc.Bridge.LoginAbort:output_type -> google.protobuf.Empty + 65, // 144: grpc.Bridge.CheckUpdate:output_type -> google.protobuf.Empty + 65, // 145: grpc.Bridge.InstallUpdate:output_type -> google.protobuf.Empty + 65, // 146: grpc.Bridge.SetIsAutomaticUpdateOn:output_type -> google.protobuf.Empty + 66, // 147: grpc.Bridge.IsAutomaticUpdateOn:output_type -> google.protobuf.BoolValue + 64, // 148: grpc.Bridge.DiskCachePath:output_type -> google.protobuf.StringValue + 65, // 149: grpc.Bridge.SetDiskCachePath:output_type -> google.protobuf.Empty + 65, // 150: grpc.Bridge.SetIsDoHEnabled:output_type -> google.protobuf.Empty + 66, // 151: grpc.Bridge.IsDoHEnabled:output_type -> google.protobuf.BoolValue + 11, // 152: grpc.Bridge.MailServerSettings:output_type -> grpc.ImapSmtpSettings + 65, // 153: grpc.Bridge.SetMailServerSettings:output_type -> google.protobuf.Empty + 64, // 154: grpc.Bridge.Hostname:output_type -> google.protobuf.StringValue + 66, // 155: grpc.Bridge.IsPortFree:output_type -> google.protobuf.BoolValue + 12, // 156: grpc.Bridge.AvailableKeychains:output_type -> grpc.AvailableKeychainsResponse + 65, // 157: grpc.Bridge.SetCurrentKeychain:output_type -> google.protobuf.Empty + 64, // 158: grpc.Bridge.CurrentKeychain:output_type -> google.protobuf.StringValue + 15, // 159: grpc.Bridge.GetUserList:output_type -> grpc.UserListResponse + 13, // 160: grpc.Bridge.GetUser:output_type -> grpc.User + 65, // 161: grpc.Bridge.SetUserSplitMode:output_type -> google.protobuf.Empty + 65, // 162: grpc.Bridge.LogoutUser:output_type -> google.protobuf.Empty + 65, // 163: grpc.Bridge.RemoveUser:output_type -> google.protobuf.Empty + 65, // 164: grpc.Bridge.ConfigureUserAppleMail:output_type -> google.protobuf.Empty + 18, // 165: grpc.Bridge.RunEventStream:output_type -> grpc.StreamEvent + 65, // 166: grpc.Bridge.StopEventStream:output_type -> google.protobuf.Empty + 111, // [111:167] is the sub-list for method output_type + 55, // [55:111] is the sub-list for method input_type + 55, // [55:55] is the sub-list for extension type_name + 55, // [55:55] is the sub-list for extension extendee + 0, // [0:55] is the sub-list for field type_name } func init() { file_bridge_proto_init() } @@ -5402,6 +5482,18 @@ func file_bridge_proto_init() { } } file_bridge_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserBadEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bridge_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenericErrorEvent); i { case 0: return &v.state @@ -5476,6 +5568,7 @@ func file_bridge_proto_init() { (*UserEvent_ToggleSplitModeFinished)(nil), (*UserEvent_UserDisconnected)(nil), (*UserEvent_UserChanged)(nil), + (*UserEvent_UserBadEvent)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -5483,7 +5576,7 @@ func file_bridge_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_bridge_proto_rawDesc, NumEnums: 7, - NumMessages: 56, + NumMessages: 57, NumExtensions: 0, NumServices: 1, }, diff --git a/internal/frontend/grpc/bridge.proto b/internal/frontend/grpc/bridge.proto index 32ae490b..e0b13163 100644 --- a/internal/frontend/grpc/bridge.proto +++ b/internal/frontend/grpc/bridge.proto @@ -440,6 +440,7 @@ message UserEvent { ToggleSplitModeFinishedEvent toggleSplitModeFinished= 1; UserDisconnectedEvent userDisconnected = 2; UserChangedEvent userChanged = 3; + UserBadEvent userBadEvent = 4; } } @@ -455,6 +456,11 @@ message UserChangedEvent { string userID = 1; } +message UserBadEvent { + string userID = 1; + string errorMessage = 2; +} + //********************************************************** // Generic errors //********************************************************** diff --git a/internal/frontend/grpc/event_factory.go b/internal/frontend/grpc/event_factory.go index c5153138..29b0f11c 100644 --- a/internal/frontend/grpc/event_factory.go +++ b/internal/frontend/grpc/event_factory.go @@ -173,6 +173,10 @@ func NewUserChangedEvent(userID string) *StreamEvent { return userEvent(&UserEvent{Event: &UserEvent_UserChanged{UserChanged: &UserChangedEvent{UserID: userID}}}) } +func NewUserBadEvent(userID string, errorMessage string) *StreamEvent { + return userEvent(&UserEvent{Event: &UserEvent_UserBadEvent{UserBadEvent: &UserBadEvent{UserID: userID, ErrorMessage: errorMessage}}}) +} + func NewGenericErrorEvent(errorCode ErrorCode) *StreamEvent { return genericErrorEvent(&GenericErrorEvent{Code: errorCode}) } diff --git a/internal/frontend/grpc/service.go b/internal/frontend/grpc/service.go index 5950e094..59de7f51 100644 --- a/internal/frontend/grpc/service.go +++ b/internal/frontend/grpc/service.go @@ -313,11 +313,14 @@ func (s *Service) watchEvents() { // This is the event the GUI cares about. _ = s.SendEvent(NewUserChangedEvent(event.UserID)) - // The GUI doesn't care about this event... not sure why we still emit it. + // The GUI doesn't care about this event... not sure why we still emit it. GODT-2128. if user, err := s.bridge.GetUserInfo(event.UserID); err == nil { _ = s.SendEvent(NewUserDisconnectedEvent(user.Username)) } + case events.UserBadEvent: + _ = s.SendEvent(NewUserBadEvent(event.UserID, event.Error.Error())) + case events.UpdateLatest: safe.RLock(func() { s.latest = event.Version