diff --git a/internal/bridge/bridge_test.go b/internal/bridge/bridge_test.go index f251929a..a5ab59bf 100644 --- a/internal/bridge/bridge_test.go +++ b/internal/bridge/bridge_test.go @@ -529,14 +529,14 @@ func must[T any](val T, err error) T { return val } -func getConnectedUserIDs(t *testing.T, bridge *bridge.Bridge) []string { +func getConnectedUserIDs(t *testing.T, b *bridge.Bridge) []string { t.Helper() - return xslices.Filter(bridge.GetUserIDs(), func(userID string) bool { - info, err := bridge.GetUserInfo(userID) + return xslices.Filter(b.GetUserIDs(), func(userID string) bool { + info, err := b.GetUserInfo(userID) require.NoError(t, err) - return info.Connected + return info.State == bridge.Connected }) } diff --git a/internal/bridge/sync_test.go b/internal/bridge/sync_test.go index db810b04..9590745c 100644 --- a/internal/bridge/sync_test.go +++ b/internal/bridge/sync_test.go @@ -69,14 +69,14 @@ func TestBridge_Sync(t *testing.T) { }) // If we then connect an IMAP client, it should see all the messages. - withBridge(ctx, t, s.GetHostURL(), netCtl, locator, storeKey, func(bridge *bridge.Bridge, mocks *bridge.Mocks) { + withBridge(ctx, t, s.GetHostURL(), netCtl, locator, storeKey, func(b *bridge.Bridge, mocks *bridge.Mocks) { mocks.Reporter.EXPECT().ReportMessageWithContext(gomock.Any(), gomock.Any()).AnyTimes() - info, err := bridge.GetUserInfo(userID) + info, err := b.GetUserInfo(userID) require.NoError(t, err) - require.True(t, info.Connected) + require.True(t, info.State == bridge.Connected) - client, err := client.Dial(fmt.Sprintf("%v:%v", constants.Host, bridge.GetIMAPPort())) + client, err := client.Dial(fmt.Sprintf("%v:%v", constants.Host, b.GetIMAPPort())) require.NoError(t, err) require.NoError(t, client.Login("imap@pm.me", string(info.BridgePass))) defer func() { _ = client.Logout() }() @@ -95,23 +95,23 @@ func TestBridge_Sync(t *testing.T) { netCtl.SetReadLimit(2 * total / 3) // Login the user; its sync should fail. - withBridge(ctx, t, s.GetHostURL(), netCtl, locator, storeKey, func(bridge *bridge.Bridge, mocks *bridge.Mocks) { + withBridge(ctx, t, s.GetHostURL(), netCtl, locator, storeKey, func(b *bridge.Bridge, mocks *bridge.Mocks) { mocks.Reporter.EXPECT().ReportMessageWithContext(gomock.Any(), gomock.Any()).AnyTimes() { - syncCh, done := chToType[events.Event, events.SyncFailed](bridge.GetEvents(events.SyncFailed{})) + syncCh, done := chToType[events.Event, events.SyncFailed](b.GetEvents(events.SyncFailed{})) defer done() - userID, err := bridge.LoginFull(ctx, "imap", password, nil, nil) + userID, err := b.LoginFull(ctx, "imap", password, nil, nil) require.NoError(t, err) require.Equal(t, userID, (<-syncCh).UserID) - info, err := bridge.GetUserInfo(userID) + info, err := b.GetUserInfo(userID) require.NoError(t, err) - require.True(t, info.Connected) + require.True(t, info.State == bridge.Connected) - client, err := client.Dial(fmt.Sprintf("%v:%v", constants.Host, bridge.GetIMAPPort())) + client, err := client.Dial(fmt.Sprintf("%v:%v", constants.Host, b.GetIMAPPort())) require.NoError(t, err) require.NoError(t, client.Login("imap@pm.me", string(info.BridgePass))) defer func() { _ = client.Logout() }() @@ -125,16 +125,16 @@ func TestBridge_Sync(t *testing.T) { netCtl.SetReadLimit(0) { - syncCh, done := chToType[events.Event, events.SyncFinished](bridge.GetEvents(events.SyncFinished{})) + syncCh, done := chToType[events.Event, events.SyncFinished](b.GetEvents(events.SyncFinished{})) defer done() require.Equal(t, userID, (<-syncCh).UserID) - info, err := bridge.GetUserInfo(userID) + info, err := b.GetUserInfo(userID) require.NoError(t, err) - require.True(t, info.Connected) + require.True(t, info.State == bridge.Connected) - client, err := client.Dial(fmt.Sprintf("%v:%v", constants.Host, bridge.GetIMAPPort())) + client, err := client.Dial(fmt.Sprintf("%v:%v", constants.Host, b.GetIMAPPort())) require.NoError(t, err) require.NoError(t, client.Login("imap@pm.me", string(info.BridgePass))) defer func() { _ = client.Logout() }() diff --git a/internal/bridge/user.go b/internal/bridge/user.go index d33b826d..7bdf8666 100644 --- a/internal/bridge/user.go +++ b/internal/bridge/user.go @@ -34,6 +34,14 @@ import ( "gitlab.protontech.ch/go/liteapi" ) +type UserState int + +const ( + SignedOut UserState = iota + Locked + Connected +) + type UserInfo struct { // UserID is the user's API ID. UserID string @@ -41,8 +49,8 @@ type UserInfo struct { // Username is the user's API username. Username string - // Connected is true if the user is logged in (has API auth). - Connected bool + // Signed Out is true if the user is signed out (no AuthUID, user will need to provide credentials to log in again) + State UserState // Addresses holds the user's email addresses. The first address is the primary address. Addresses []string @@ -75,7 +83,11 @@ func (bridge *Bridge) GetUserInfo(userID string) (UserInfo, error) { var info UserInfo if err := bridge.vault.GetUser(userID, func(user *vault.User) { - info = getUserInfo(user.UserID(), user.Username(), user.AddressMode()) + state := Locked + if len(user.AuthUID()) == 0 { + state = SignedOut + } + info = getUserInfo(user.UserID(), user.Username(), state, user.AddressMode()) }); err != nil { return UserInfo{}, fmt.Errorf("failed to get user info: %w", err) } @@ -515,8 +527,9 @@ func (bridge *Bridge) logoutUser(ctx context.Context, user *user.User, withAPI, } // getUserInfo returns information about a disconnected user. -func getUserInfo(userID, username string, addressMode vault.AddressMode) UserInfo { +func getUserInfo(userID, username string, state UserState, addressMode vault.AddressMode) UserInfo { return UserInfo{ + State: state, UserID: userID, Username: username, AddressMode: addressMode, @@ -526,7 +539,7 @@ func getUserInfo(userID, username string, addressMode vault.AddressMode) UserInf // getConnUserInfo returns information about a connected user. func getConnUserInfo(user *user.User) UserInfo { return UserInfo{ - Connected: true, + State: Connected, UserID: user.ID(), Username: user.Name(), Addresses: user.Emails(), diff --git a/internal/frontend/bridge-gui/bridge-gui/main.cpp b/internal/frontend/bridge-gui/bridge-gui/main.cpp index 4e4dd6f5..060d93c1 100644 --- a/internal/frontend/bridge-gui/bridge-gui/main.cpp +++ b/internal/frontend/bridge-gui/bridge-gui/main.cpp @@ -128,7 +128,8 @@ QQmlComponent *createRootQmlComponent(QQmlApplicationEngine &engine) qmlRegisterSingletonInstance("Proton", 1, 0, "Backend", &app().backend()); qmlRegisterType("Proton", 1, 0, "UserList"); qmlRegisterType("Proton", 1, 0, "User"); - + qRegisterMetaType("UserState"); + qmlRegisterUncreatableType("Proton", 1, 0, "EUserState", "Enum type is not creatable"); auto rootComponent = new QQmlComponent(&engine, &engine); engine.addImportPath(qrcQmlDir); diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/AccountDelegate.qml b/internal/frontend/bridge-gui/bridge-gui/qml/AccountDelegate.qml index 6b5668d5..99e212bc 100644 --- a/internal/frontend/bridge-gui/bridge-gui/qml/AccountDelegate.qml +++ b/internal/frontend/bridge-gui/bridge-gui/qml/AccountDelegate.qml @@ -136,7 +136,20 @@ Item { spacing: 0 Label { colorScheme: root.colorScheme - text: root.user && root.user.loggedIn ? root.usedSpace : qsTr("Signed out") + text: { + if (!root.user) + return qsTr("Signed out") + switch (root.user.state) { + case EUserState.SignedOut: + default: + return qsTr("Signed out") + case EUserState.Locked: + return qsTr("Connecting...") + case EUserState.Connected: + return root.usedSpace + } + } + color: root.usedSpaceColor type: { switch (root.type) { @@ -148,7 +161,7 @@ Item { Label { colorScheme: root.colorScheme - text: root.user && root.user.loggedIn ? " / " + root.totalSpace : "" + text: root.user && root.user.state == EUserState.Connected ? " / " + root.totalSpace : "" color: root.colorScheme.text_weak type: { switch (root.type) { @@ -172,7 +185,7 @@ Item { id: storage_bar_filled radius: ProtonStyle.storage_bar_radius color: root.usedSpaceColor - visible: root.user ? parent.visible && root.user.loggedIn : false + visible: root.user ? parent.visible && (root.user.state == EUserState.Connected) : false anchors { top : parent.top bottom : parent.bottom diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/AccountView.qml b/internal/frontend/bridge-gui/bridge-gui/qml/AccountView.qml index 05e2c8bc..d4c17bdf 100644 --- a/internal/frontend/bridge-gui/bridge-gui/qml/AccountView.qml +++ b/internal/frontend/bridge-gui/bridge-gui/qml/AccountView.qml @@ -87,7 +87,7 @@ Item { colorScheme: root.colorScheme user: root.user type: AccountDelegate.LargeView - enabled: root.user ? root.user.loggedIn : false + enabled: root.user ? (root.user.state === EUserState.Connected) : false } Button { @@ -95,7 +95,7 @@ Item { colorScheme: root.colorScheme text: qsTr("Sign out") secondary: true - visible: root.user ? root.user.loggedIn : false + visible: root.user ? (root.user.state === EUserState.Connected) : false onClicked: { if (!root.user) return root.user.logout() @@ -107,7 +107,7 @@ Item { colorScheme: root.colorScheme text: qsTr("Sign in") secondary: true - visible: root.user ? !root.user.loggedIn : false + visible: root.user ? (root.user.state === EUserState.SignedOut) : false onClicked: { if (!root.user) return root.showSignIn() @@ -123,6 +123,7 @@ Item { if (!root.user) return root.notifications.askDeleteAccount(root.user) } + visible: root.user ? root.user.state !== EUserState.Locked : false } } @@ -138,7 +139,7 @@ Item { actionText: qsTr("Configure") description: qsTr("Using the mailbox details below (re)configure your client.") type: SettingsItem.Button - enabled: root.user ? root.user.loggedIn : false + enabled: root.user ? root.user.state === EUserState.Connected : false visible: root.user ? !root.user.splitMode || root.user.addresses.length==1 : false showSeparator: splitMode.visible onClicked: { @@ -157,7 +158,7 @@ Item { type: SettingsItem.Toggle checked: root.user ? root.user.splitMode : false visible: root.user ? root.user.addresses.length > 1 : false - enabled: root.user ? root.user.loggedIn : false + enabled: root.user ? (root.user.state === EUserState.Connected) : false showSeparator: addressSelector.visible onClicked: { if (!splitMode.checked){ @@ -173,7 +174,7 @@ Item { RowLayout { Layout.fillWidth: true - enabled: root.user ? root.user.loggedIn : false + enabled: root.user ? (root.user.state === EUserState.Connected) : false visible: root.user ? root.user.splitMode : false ComboBox { @@ -214,7 +215,7 @@ Item { anchors.bottomMargin: root._spacing spacing: root._spacing - visible: root.user ? root.user.loggedIn : false + visible: root.user ? (root.user.state === EUserState.Connected) : false property string currentAddress: addressSelector.displayText diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/Bridge.qml b/internal/frontend/bridge-gui/bridge-gui/qml/Bridge.qml index 3e1474d3..6a5af431 100644 --- a/internal/frontend/bridge-gui/bridge-gui/qml/Bridge.qml +++ b/internal/frontend/bridge-gui/bridge-gui/qml/Bridge.qml @@ -276,7 +276,7 @@ QtObject { } if (u) { - if (c === 1 && u.loggedIn === false) { + if (c === 1 && (u.state === EUserState.SignedOut)) { mainWindow.showAndRise() } } diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/BridgeTest/UserControl.qml b/internal/frontend/bridge-gui/bridge-gui/qml/BridgeTest/UserControl.qml index dc7700c3..85cddd25 100644 --- a/internal/frontend/bridge-gui/bridge-gui/qml/BridgeTest/UserControl.qml +++ b/internal/frontend/bridge-gui/bridge-gui/qml/BridgeTest/UserControl.qml @@ -56,7 +56,7 @@ ColumnLayout { text: "LoggedIn" enabled: user !== undefined && user.username.length > 0 - checked: user ? user.loggedIn : false + checked: user ? root.user.state == EUserState.Connected : false onCheckedChanged: { if (!user) { @@ -73,11 +73,11 @@ ColumnLayout { return } - user.loggedIn = true + user.state = EUserState.Connected user.resetLoginRequests() return } else { - user.loggedIn = false + user.state = EUserState.SignedOut user.resetLoginRequests() } } diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/BridgeTest/UserList.qml b/internal/frontend/bridge-gui/bridge-gui/qml/BridgeTest/UserList.qml index 0d42f4c8..e0510348 100644 --- a/internal/frontend/bridge-gui/bridge-gui/qml/BridgeTest/UserList.qml +++ b/internal/frontend/bridge-gui/bridge-gui/qml/BridgeTest/UserList.qml @@ -75,11 +75,11 @@ ColumnLayout { onClicked: { var newUserObject = Backend.userComponent.createObject(Backend) newUserObject.username = Backend.loginUser.username.length > 0 ? Backend.loginUser.username : "test@protonmail.com" - newUserObject.loggedIn = true + newUserObject.state = EUserState.Connected newUserObject.setupGuideSeen = true // Backend.loginUser.setupGuideSeen Backend.loginUser.username = "" - Backend.loginUser.loggedIn = false + Backend.loginUser.state = EUserState.SignedOut Backend.loginUser.setupGuideSeen = false Backend.users.append( { object: newUserObject } ) diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/Bridge_test.qml b/internal/frontend/bridge-gui/bridge-gui/qml/Bridge_test.qml index 1a9fe72a..a40f1f7c 100644 --- a/internal/frontend/bridge-gui/bridge-gui/qml/Bridge_test.qml +++ b/internal/frontend/bridge-gui/bridge-gui/qml/Bridge_test.qml @@ -68,7 +68,7 @@ Window { if (showSetupGuide) { var newUserObject = root.userComponent.createObject(root) newUserObject.username = "LerooooyJenkins@protonmail.com" - newUserObject.loggedIn = true + newUserObject.state = EUserState.Connected newUserObject.setupGuideSeen = false root.users.append( { object: newUserObject } ) } @@ -266,7 +266,7 @@ Window { if (hasUserOnStart) { var newUserObject = root.userComponent.createObject(root) newUserObject.username = "LerooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooyJenkins@protonmail.com" - newUserObject.loggedIn = true + newUserObject.loggedIn = EUserState.Connected newUserObject.setupGuideSeen = true root.users.append( { object: newUserObject } ) } diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/ContentWrapper.qml b/internal/frontend/bridge-gui/bridge-gui/qml/ContentWrapper.qml index 4a5d89d0..b824ad91 100644 --- a/internal/frontend/bridge-gui/bridge-gui/qml/ContentWrapper.qml +++ b/internal/frontend/bridge-gui/bridge-gui/qml/ContentWrapper.qml @@ -185,7 +185,7 @@ Item { var user = Backend.users.get(index) accounts.currentIndex = index if (!user) return - if (user.loggedIn) { + if (user.state !== EUserState.SignedOut) { rightContent.showAccount() } else { signIn.username = user.username diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/MainWindow.qml b/internal/frontend/bridge-gui/bridge-gui/qml/MainWindow.qml index d6e6c4f6..1bced1f0 100644 --- a/internal/frontend/bridge-gui/bridge-gui/qml/MainWindow.qml +++ b/internal/frontend/bridge-gui/bridge-gui/qml/MainWindow.qml @@ -55,7 +55,7 @@ ApplicationWindow { // considering that users are added one-by-one var user = Backend.users.get(first) - if (!user.loggedIn) { + if (user.state === EUserState.SignedOut) { return } @@ -111,7 +111,7 @@ ApplicationWindow { return 1 } - if (Backend.users.count === 1 && u.loggedIn === false) { + if ((Backend.users.count === 1) && (u.state === EUserState.SignedOut)) { showSignIn(u.username) return 0 } diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/StatusWindow.qml b/internal/frontend/bridge-gui/bridge-gui/qml/StatusWindow.qml index 047d57f3..fd41abb8 100644 --- a/internal/frontend/bridge-gui/bridge-gui/qml/StatusWindow.qml +++ b/internal/frontend/bridge-gui/bridge-gui/qml/StatusWindow.qml @@ -226,7 +226,7 @@ Window { Layout.bottomMargin: 12 colorScheme: root.colorScheme - visible: viewItem.user ? !viewItem.user.loggedIn : false + visible: viewItem.user ? (viewItem.user.state === EUserState.SignedOut) : false text: qsTr("Sign in") onClicked: { root.showSignIn(viewItem.username) diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/WelcomeGuide.qml b/internal/frontend/bridge-gui/bridge-gui/qml/WelcomeGuide.qml index fa7c99b1..ffe99a03 100644 --- a/internal/frontend/bridge-gui/bridge-gui/qml/WelcomeGuide.qml +++ b/internal/frontend/bridge-gui/bridge-gui/qml/WelcomeGuide.qml @@ -223,7 +223,7 @@ Item { Layout.fillWidth: true focus: true - username: Backend.users.count === 1 && Backend.users.get(0) && Backend.users.get(0).loggedIn === false ? Backend.users.get(0).username : "" + username: Backend.users.count === 1 && Backend.users.get(0) && (Backend.users.get(0).state === EUserState.SignedOut) ? Backend.users.get(0).username : "" } // Right margin diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/BridgeUtils.cpp b/internal/frontend/bridge-gui/bridgepp/bridgepp/BridgeUtils.cpp index 91c49c77..0670a8e7 100644 --- a/internal/frontend/bridge-gui/bridgepp/bridgepp/BridgeUtils.cpp +++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/BridgeUtils.cpp @@ -203,7 +203,6 @@ SPUser randomUser() user->setAddresses(QStringList() << (username + "@proton.me") << (username + "@protonmail.com") ); user->setPassword(QUuid().createUuid().toString(QUuid::StringFormat::WithoutBraces).left(20)); user->setAvatarText(firstName.left(1) + lastName.left(1)); - user->setLoggedIn(true); user->setSplitMode(false); user->setSetupGuideSeen(true); qint64 const totalBytes = (500 + randN(2501)) * 1000000; diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCUtils.cpp b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCUtils.cpp index afdc3fb0..805d793d 100644 --- a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCUtils.cpp +++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCUtils.cpp @@ -191,6 +191,46 @@ Log::Level logLevelFromGRPC(grpc::LogLevel level) } +//**************************************************************************************************************************************************** +/// \param[in] state The user state. +/// \return The gRPC user state. +//**************************************************************************************************************************************************** +grpc::UserState userStateToGRPC(UserState state) +{ + switch (state) + { + case UserState::SignedOut: + return grpc::UserState::SIGNED_OUT; + case UserState::Locked: + return grpc::UserState::LOCKED; + case UserState::Connected: + return grpc::UserState::CONNECTED; + default: + throw Exception(QString("unknown gRPC user state %1.").arg(qint32(state))); + } +} + + +//**************************************************************************************************************************************************** +/// \param[in] state The gRPC user state +/// \return the user state +//**************************************************************************************************************************************************** +UserState userStateFromGRPC(grpc::UserState state) +{ + switch (state) + { + case grpc::UserState::SIGNED_OUT: + return UserState::SignedOut; + case grpc::UserState::LOCKED: + return UserState::Locked; + case grpc::UserState::CONNECTED: + return UserState ::Connected; + default: + throw Exception(QString("unknown gRPC user state %1.").arg(qint32(state))); + } +} + + //**************************************************************************************************************************************************** /// \param[in] grpcUser The gRPC user. /// \return user The user. @@ -207,7 +247,7 @@ SPUser userFromGRPC(grpc::User const &grpcUser) addresses.append(QString::fromStdString(grpcUser.addresses(j))); user->setAddresses(addresses); user->setAvatarText(QString::fromStdString(grpcUser.avatartext())); - user->setLoggedIn(grpcUser.loggedin()); + user->setState(userStateFromGRPC(grpcUser.state())); user->setSplitMode(grpcUser.splitmode()); user->setSetupGuideSeen(grpcUser.setupguideseen()); user->setUsedBytes(float(grpcUser.usedbytes())); @@ -230,7 +270,7 @@ void userToGRPC(User const &user, grpc::User &outGRPCUser) for (QString const& address: user.addresses()) outGRPCUser.add_addresses(address.toStdString()); outGRPCUser.set_avatartext(user.avatarText().toStdString()); - outGRPCUser.set_loggedin(user.loggedIn()); + outGRPCUser.set_state(userStateToGRPC(user.state())); outGRPCUser.set_splitmode(user.splitMode()); outGRPCUser.set_setupguideseen(user.setupGuideSeen()); outGRPCUser.set_usedbytes(qint64(user.usedBytes())); diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCUtils.h b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCUtils.h index b106b304..dc02b742 100644 --- a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCUtils.h +++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCUtils.h @@ -34,6 +34,7 @@ extern std::string const grpcMetadataServerTokenKey; ///< The key for the server typedef std::shared_ptr SPStreamEvent; ///< Type definition for shared pointer to grpc::StreamEvent. + QString grpcServerConfigPath(); ///< Return the path of the gRPC server config file. QString grpcClientConfigBasePath(); ///< Return the path of the gRPC client config file. QString serverCertificatePath(); ///< Return the path of the server certificate. @@ -41,9 +42,12 @@ QString serverKeyPath(); ///< Return the path of the server key. QString createClientConfigFile(QString const &token); ///< Create the client config file the server will retrieve and return its path. grpc::LogLevel logLevelToGRPC(Log::Level level); ///< Convert a Log::Level to gRPC enum value. Log::Level logLevelFromGRPC(grpc::LogLevel level); ///< Convert a grpc::LogLevel to a Log::Level. +grpc::UserState userStateToGRPC(UserState state); ///< Convert a bridgepp::UserState to a grpc::UserState. +UserState userStateFromGRPC(grpc::UserState state); ///< Convert a grpc::UserState to a bridgepp::UserState. void userToGRPC(User const &user, grpc::User &outGRPCUser); ///< Convert a bridgepp::User to a grpc::User. SPUser userFromGRPC(grpc::User const &grpcUser); ///< Create a bridgepp::User from a grpc::User. + } 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 d989514f..e19eadb5 100644 --- a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/bridge.pb.cc +++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/bridge.pb.cc @@ -115,11 +115,11 @@ PROTOBUF_CONSTEXPR User::User( , /*decltype(_impl_.username_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} , /*decltype(_impl_.avatartext_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} , /*decltype(_impl_.password_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} - , /*decltype(_impl_.usedbytes_)*/int64_t{0} - , /*decltype(_impl_.totalbytes_)*/int64_t{0} - , /*decltype(_impl_.loggedin_)*/false + , /*decltype(_impl_.state_)*/0 , /*decltype(_impl_.splitmode_)*/false , /*decltype(_impl_.setupguideseen_)*/false + , /*decltype(_impl_.usedbytes_)*/int64_t{0} + , /*decltype(_impl_.totalbytes_)*/int64_t{0} , /*decltype(_impl_._cached_size_)*/{}} {} struct UserDefaultTypeInternal { PROTOBUF_CONSTEXPR UserDefaultTypeInternal() @@ -741,7 +741,7 @@ struct UserChangedEventDefaultTypeInternal { PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 UserChangedEventDefaultTypeInternal _UserChangedEvent_default_instance_; } // namespace grpc static ::_pb::Metadata file_level_metadata_bridge_2eproto[56]; -static const ::_pb::EnumDescriptor* file_level_enum_descriptors_bridge_2eproto[5]; +static const ::_pb::EnumDescriptor* file_level_enum_descriptors_bridge_2eproto[6]; static constexpr ::_pb::ServiceDescriptor const** file_level_service_descriptors_bridge_2eproto = nullptr; const uint32_t TableStruct_bridge_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { @@ -805,7 +805,7 @@ const uint32_t TableStruct_bridge_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(p PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.id_), PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.username_), PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.avatartext_), - PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.loggedin_), + PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.state_), PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.splitmode_), PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.setupguideseen_), PROTOBUF_FIELD_OFFSET(::grpc::User, _impl_.usedbytes_), @@ -1315,234 +1315,236 @@ const char descriptor_table_protodef_bridge_2eproto[] PROTOBUF_SECTION_VARIABLE( "LoginAbortRequest\022\020\n\010username\030\001 \001(\t\"8\n\022C" "hangePortsRequest\022\020\n\010imapPort\030\001 \001(\005\022\020\n\010s" "mtpPort\030\002 \001(\005\"/\n\032AvailableKeychainsRespo" - "nse\022\021\n\tkeychains\030\001 \003(\t\"\301\001\n\004User\022\n\n\002id\030\001 " + "nse\022\021\n\tkeychains\030\001 \003(\t\"\317\001\n\004User\022\n\n\002id\030\001 " "\001(\t\022\020\n\010username\030\002 \001(\t\022\022\n\navatarText\030\003 \001(" - "\t\022\020\n\010loggedIn\030\004 \001(\010\022\021\n\tsplitMode\030\005 \001(\010\022\026" - "\n\016setupGuideSeen\030\006 \001(\010\022\021\n\tusedBytes\030\007 \001(" - "\003\022\022\n\ntotalBytes\030\010 \001(\003\022\020\n\010password\030\t \001(\014\022" - "\021\n\taddresses\030\n \003(\t\"6\n\024UserSplitModeReque" - "st\022\016\n\006userID\030\001 \001(\t\022\016\n\006active\030\002 \001(\010\"-\n\020Us" - "erListResponse\022\031\n\005users\030\001 \003(\0132\n.grpc.Use" - "r\"<\n\031ConfigureAppleMailRequest\022\016\n\006userID" - "\030\001 \001(\t\022\017\n\007address\030\002 \001(\t\",\n\022EventStreamRe" - "quest\022\026\n\016ClientPlatform\030\001 \001(\t\"\300\002\n\013Stream" - "Event\022\035\n\003app\030\001 \001(\0132\016.grpc.AppEventH\000\022!\n\005" - "login\030\002 \001(\0132\020.grpc.LoginEventH\000\022#\n\006updat" - "e\030\003 \001(\0132\021.grpc.UpdateEventH\000\022%\n\005cache\030\004 " - "\001(\0132\024.grpc.DiskCacheEventH\000\022/\n\014mailSetti" - "ngs\030\005 \001(\0132\027.grpc.MailSettingsEventH\000\022\'\n\010" - "keychain\030\006 \001(\0132\023.grpc.KeychainEventH\000\022\037\n" - "\004mail\030\007 \001(\0132\017.grpc.MailEventH\000\022\037\n\004user\030\010" - " \001(\0132\017.grpc.UserEventH\000B\007\n\005event\"\240\003\n\010App" - "Event\0223\n\016internetStatus\030\001 \001(\0132\031.grpc.Int" - "ernetStatusEventH\000\022E\n\027toggleAutostartFin" - "ished\030\002 \001(\0132\".grpc.ToggleAutostartFinish" - "edEventH\000\0221\n\rresetFinished\030\003 \001(\0132\030.grpc." - "ResetFinishedEventH\000\0229\n\021reportBugFinishe" - "d\030\004 \001(\0132\034.grpc.ReportBugFinishedEventH\000\022" - "7\n\020reportBugSuccess\030\005 \001(\0132\033.grpc.ReportB" - "ugSuccessEventH\000\0223\n\016reportBugError\030\006 \001(\013" - "2\031.grpc.ReportBugErrorEventH\000\0223\n\016showMai" - "nWindow\030\007 \001(\0132\031.grpc.ShowMainWindowEvent" - "H\000B\007\n\005event\"(\n\023InternetStatusEvent\022\021\n\tco" - "nnected\030\001 \001(\010\"\036\n\034ToggleAutostartFinished" - "Event\"\024\n\022ResetFinishedEvent\"\030\n\026ReportBug" - "FinishedEvent\"\027\n\025ReportBugSuccessEvent\"\025" - "\n\023ReportBugErrorEvent\"\025\n\023ShowMainWindowE" - "vent\"\235\002\n\nLoginEvent\022&\n\005error\030\001 \001(\0132\025.grp" - "c.LoginErrorEventH\000\0224\n\014tfaRequested\030\002 \001(" - "\0132\034.grpc.LoginTfaRequestedEventH\000\022E\n\024two" - "PasswordRequested\030\003 \001(\0132%.grpc.LoginTwoP" - "asswordsRequestedEventH\000\022,\n\010finished\030\004 \001" - "(\0132\030.grpc.LoginFinishedEventH\000\0223\n\017alread" - "yLoggedIn\030\005 \001(\0132\030.grpc.LoginFinishedEven" - "tH\000B\007\n\005event\"F\n\017LoginErrorEvent\022\"\n\004type\030" - "\001 \001(\0162\024.grpc.LoginErrorType\022\017\n\007message\030\002" - " \001(\t\"*\n\026LoginTfaRequestedEvent\022\020\n\010userna" - "me\030\001 \001(\t\"!\n\037LoginTwoPasswordsRequestedEv" - "ent\"$\n\022LoginFinishedEvent\022\016\n\006userID\030\001 \001(" - "\t\"\304\003\n\013UpdateEvent\022\'\n\005error\030\001 \001(\0132\026.grpc." - "UpdateErrorEventH\000\0223\n\013manualReady\030\002 \001(\0132" - "\034.grpc.UpdateManualReadyEventH\000\022C\n\023manua" - "lRestartNeeded\030\003 \001(\0132$.grpc.UpdateManual" - "RestartNeededEventH\000\022\'\n\005force\030\004 \001(\0132\026.gr" - "pc.UpdateForceEventH\000\022>\n\023silentRestartNe" - "eded\030\005 \001(\0132\037.grpc.UpdateSilentRestartNee" - "dedH\000\0226\n\017isLatestVersion\030\006 \001(\0132\033.grpc.Up" - "dateIsLatestVersionH\000\0222\n\rcheckFinished\030\007" - " \001(\0132\031.grpc.UpdateCheckFinishedH\000\0224\n\016ver" - "sionChanged\030\010 \001(\0132\032.grpc.UpdateVersionCh" - "angedH\000B\007\n\005event\"7\n\020UpdateErrorEvent\022#\n\004" - "type\030\001 \001(\0162\025.grpc.UpdateErrorType\")\n\026Upd" - "ateManualReadyEvent\022\017\n\007version\030\001 \001(\t\" \n\036" - "UpdateManualRestartNeededEvent\"#\n\020Update" - "ForceEvent\022\017\n\007version\030\001 \001(\t\"\033\n\031UpdateSil" - "entRestartNeeded\"\027\n\025UpdateIsLatestVersio" - "n\"\025\n\023UpdateCheckFinished\"\026\n\024UpdateVersio" - "nChanged\"\303\001\n\016DiskCacheEvent\022*\n\005error\030\001 \001" - "(\0132\031.grpc.DiskCacheErrorEventH\000\0226\n\013pathC" - "hanged\030\002 \001(\0132\037.grpc.DiskCachePathChanged" - "EventH\000\022D\n\022pathChangeFinished\030\003 \001(\0132&.gr" - "pc.DiskCachePathChangeFinishedEventH\000B\007\n" - "\005event\"=\n\023DiskCacheErrorEvent\022&\n\004type\030\001 " - "\001(\0162\030.grpc.DiskCacheErrorType\")\n\031DiskCac" - "hePathChangedEvent\022\014\n\004path\030\001 \001(\t\"\"\n Disk" - "CachePathChangeFinishedEvent\"\220\002\n\021MailSet" - "tingsEvent\022-\n\005error\030\001 \001(\0132\034.grpc.MailSet" - "tingsErrorEventH\000\022A\n\025useSslForSmtpFinish" - "ed\030\002 \001(\0132 .grpc.UseSslForSmtpFinishedEve" - "ntH\000\022=\n\023changePortsFinished\030\003 \001(\0132\036.grpc" - ".ChangePortsFinishedEventH\000\022A\n\025useSslFor" - "ImapFinished\030\004 \001(\0132 .grpc.UseSslForImapF" - "inishedEventH\000B\007\n\005event\"C\n\026MailSettingsE" - "rrorEvent\022)\n\004type\030\001 \001(\0162\033.grpc.MailSetti" - "ngsErrorType\"\034\n\032UseSslForSmtpFinishedEve" - "nt\"\034\n\032UseSslForImapFinishedEvent\"\032\n\030Chan" - "gePortsFinishedEvent\"\307\001\n\rKeychainEvent\022C" - "\n\026changeKeychainFinished\030\001 \001(\0132!.grpc.Ch" - "angeKeychainFinishedEventH\000\0221\n\rhasNoKeyc" - "hain\030\002 \001(\0132\030.grpc.HasNoKeychainEventH\000\0225" - "\n\017rebuildKeychain\030\003 \001(\0132\032.grpc.RebuildKe" - "ychainEventH\000B\007\n\005event\"\035\n\033ChangeKeychain" - "FinishedEvent\"\024\n\022HasNoKeychainEvent\"\026\n\024R" - "ebuildKeychainEvent\"\207\002\n\tMailEvent\022J\n\034noA" - "ctiveKeyForRecipientEvent\030\001 \001(\0132\".grpc.N" - "oActiveKeyForRecipientEventH\000\0223\n\016address" - "Changed\030\002 \001(\0132\031.grpc.AddressChangedEvent" - "H\000\022\?\n\024addressChangedLogout\030\003 \001(\0132\037.grpc." - "AddressChangedLogoutEventH\000\022/\n\014apiCertIs" - "sue\030\006 \001(\0132\027.grpc.ApiCertIssueEventH\000B\007\n\005" - "event\"-\n\034NoActiveKeyForRecipientEvent\022\r\n" - "\005email\030\001 \001(\t\"&\n\023AddressChangedEvent\022\017\n\007a" - "ddress\030\001 \001(\t\",\n\031AddressChangedLogoutEven" - "t\022\017\n\007address\030\001 \001(\t\"\023\n\021ApiCertIssueEvent\"" - "\303\001\n\tUserEvent\022E\n\027toggleSplitModeFinished" - "\030\001 \001(\0132\".grpc.ToggleSplitModeFinishedEve" - "ntH\000\0227\n\020userDisconnected\030\002 \001(\0132\033.grpc.Us" - "erDisconnectedEventH\000\022-\n\013userChanged\030\003 \001" - "(\0132\026.grpc.UserChangedEventH\000B\007\n\005event\".\n" - "\034ToggleSplitModeFinishedEvent\022\016\n\006userID\030" - "\001 \001(\t\")\n\025UserDisconnectedEvent\022\020\n\010userna" - "me\030\001 \001(\t\"\"\n\020UserChangedEvent\022\016\n\006userID\030\001" - " \001(\t*q\n\010LogLevel\022\r\n\tLOG_PANIC\020\000\022\r\n\tLOG_F" - "ATAL\020\001\022\r\n\tLOG_ERROR\020\002\022\014\n\010LOG_WARN\020\003\022\014\n\010L" - "OG_INFO\020\004\022\r\n\tLOG_DEBUG\020\005\022\r\n\tLOG_TRACE\020\006*" - "\242\001\n\016LoginErrorType\022\033\n\027USERNAME_PASSWORD_" - "ERROR\020\000\022\r\n\tFREE_USER\020\001\022\024\n\020CONNECTION_ERR" - "OR\020\002\022\r\n\tTFA_ERROR\020\003\022\r\n\tTFA_ABORT\020\004\022\027\n\023TW" - "O_PASSWORDS_ERROR\020\005\022\027\n\023TWO_PASSWORDS_ABO" - "RT\020\006*[\n\017UpdateErrorType\022\027\n\023UPDATE_MANUAL" - "_ERROR\020\000\022\026\n\022UPDATE_FORCE_ERROR\020\001\022\027\n\023UPDA" - "TE_SILENT_ERROR\020\002*k\n\022DiskCacheErrorType\022" - " \n\034DISK_CACHE_UNAVAILABLE_ERROR\020\000\022\036\n\032CAN" - "T_MOVE_DISK_CACHE_ERROR\020\001\022\023\n\017DISK_FULL_E" - "RROR\020\002*A\n\025MailSettingsErrorType\022\023\n\017IMAP_" - "PORT_ISSUE\020\000\022\023\n\017SMTP_PORT_ISSUE\020\0012\247 \n\006Br" - "idge\022I\n\013CheckTokens\022\034.google.protobuf.St" - "ringValue\032\034.google.protobuf.StringValue\022" - "\?\n\013AddLogEntry\022\030.grpc.AddLogEntryRequest" - "\032\026.google.protobuf.Empty\022:\n\010GuiReady\022\026.g" - "oogle.protobuf.Empty\032\026.google.protobuf.E" - "mpty\0226\n\004Quit\022\026.google.protobuf.Empty\032\026.g" - "oogle.protobuf.Empty\0229\n\007Restart\022\026.google" - ".protobuf.Empty\032\026.google.protobuf.Empty\022" - "C\n\rShowOnStartup\022\026.google.protobuf.Empty" - "\032\032.google.protobuf.BoolValue\022F\n\020ShowSpla" - "shScreen\022\026.google.protobuf.Empty\032\032.googl" - "e.protobuf.BoolValue\022E\n\017IsFirstGuiStart\022" - "\026.google.protobuf.Empty\032\032.google.protobu" - "f.BoolValue\022F\n\020SetIsAutostartOn\022\032.google" - ".protobuf.BoolValue\032\026.google.protobuf.Em" - "pty\022C\n\rIsAutostartOn\022\026.google.protobuf.E" - "mpty\032\032.google.protobuf.BoolValue\022F\n\020SetI" - "sBetaEnabled\022\032.google.protobuf.BoolValue" - "\032\026.google.protobuf.Empty\022C\n\rIsBetaEnable" - "d\022\026.google.protobuf.Empty\032\032.google.proto" - "buf.BoolValue\022I\n\023SetIsAllMailVisible\022\032.g" - "oogle.protobuf.BoolValue\032\026.google.protob" - "uf.Empty\022F\n\020IsAllMailVisible\022\026.google.pr" - "otobuf.Empty\032\032.google.protobuf.BoolValue" - "\022<\n\004GoOs\022\026.google.protobuf.Empty\032\034.googl" - "e.protobuf.StringValue\022>\n\014TriggerReset\022\026" - ".google.protobuf.Empty\032\026.google.protobuf" - ".Empty\022\?\n\007Version\022\026.google.protobuf.Empt" - "y\032\034.google.protobuf.StringValue\022@\n\010LogsP" - "ath\022\026.google.protobuf.Empty\032\034.google.pro" - "tobuf.StringValue\022C\n\013LicensePath\022\026.googl" - "e.protobuf.Empty\032\034.google.protobuf.Strin" - "gValue\022L\n\024ReleaseNotesPageLink\022\026.google." - "protobuf.Empty\032\034.google.protobuf.StringV" - "alue\022N\n\026DependencyLicensesLink\022\026.google." - "protobuf.Empty\032\034.google.protobuf.StringV" - "alue\022G\n\017LandingPageLink\022\026.google.protobu" - "f.Empty\032\034.google.protobuf.StringValue\022J\n" - "\022SetColorSchemeName\022\034.google.protobuf.St" - "ringValue\032\026.google.protobuf.Empty\022G\n\017Col" - "orSchemeName\022\026.google.protobuf.Empty\032\034.g" - "oogle.protobuf.StringValue\022J\n\022CurrentEma" - "ilClient\022\026.google.protobuf.Empty\032\034.googl" - "e.protobuf.StringValue\022;\n\tReportBug\022\026.gr" - "pc.ReportBugRequest\032\026.google.protobuf.Em" - "pty\022E\n\rForceLauncher\022\034.google.protobuf.S" - "tringValue\032\026.google.protobuf.Empty\022I\n\021Se" - "tMainExecutable\022\034.google.protobuf.String" - "Value\032\026.google.protobuf.Empty\0223\n\005Login\022\022" - ".grpc.LoginRequest\032\026.google.protobuf.Emp" - "ty\0226\n\010Login2FA\022\022.grpc.LoginRequest\032\026.goo" - "gle.protobuf.Empty\022=\n\017Login2Passwords\022\022." - "grpc.LoginRequest\032\026.google.protobuf.Empt" - "y\022=\n\nLoginAbort\022\027.grpc.LoginAbortRequest" - "\032\026.google.protobuf.Empty\022=\n\013CheckUpdate\022" - "\026.google.protobuf.Empty\032\026.google.protobu" - "f.Empty\022\?\n\rInstallUpdate\022\026.google.protob" - "uf.Empty\032\026.google.protobuf.Empty\022L\n\026SetI" - "sAutomaticUpdateOn\022\032.google.protobuf.Boo" - "lValue\032\026.google.protobuf.Empty\022I\n\023IsAuto" - "maticUpdateOn\022\026.google.protobuf.Empty\032\032." - "google.protobuf.BoolValue\022E\n\rDiskCachePa" - "th\022\026.google.protobuf.Empty\032\034.google.prot" - "obuf.StringValue\022H\n\020SetDiskCachePath\022\034.g" - "oogle.protobuf.StringValue\032\026.google.prot" - "obuf.Empty\022E\n\017SetIsDoHEnabled\022\032.google.p" - "rotobuf.BoolValue\032\026.google.protobuf.Empt" - "y\022B\n\014IsDoHEnabled\022\026.google.protobuf.Empt" - "y\032\032.google.protobuf.BoolValue\022F\n\020SetUseS" - "slForSmtp\022\032.google.protobuf.BoolValue\032\026." - "google.protobuf.Empty\022C\n\rUseSslForSmtp\022\026" + "\t\022\036\n\005state\030\004 \001(\0162\017.grpc.UserState\022\021\n\tspl" + "itMode\030\005 \001(\010\022\026\n\016setupGuideSeen\030\006 \001(\010\022\021\n\t" + "usedBytes\030\007 \001(\003\022\022\n\ntotalBytes\030\010 \001(\003\022\020\n\010p" + "assword\030\t \001(\014\022\021\n\taddresses\030\n \003(\t\"6\n\024User" + "SplitModeRequest\022\016\n\006userID\030\001 \001(\t\022\016\n\006acti" + "ve\030\002 \001(\010\"-\n\020UserListResponse\022\031\n\005users\030\001 " + "\003(\0132\n.grpc.User\"<\n\031ConfigureAppleMailReq" + "uest\022\016\n\006userID\030\001 \001(\t\022\017\n\007address\030\002 \001(\t\",\n" + "\022EventStreamRequest\022\026\n\016ClientPlatform\030\001 " + "\001(\t\"\300\002\n\013StreamEvent\022\035\n\003app\030\001 \001(\0132\016.grpc." + "AppEventH\000\022!\n\005login\030\002 \001(\0132\020.grpc.LoginEv" + "entH\000\022#\n\006update\030\003 \001(\0132\021.grpc.UpdateEvent" + "H\000\022%\n\005cache\030\004 \001(\0132\024.grpc.DiskCacheEventH" + "\000\022/\n\014mailSettings\030\005 \001(\0132\027.grpc.MailSetti" + "ngsEventH\000\022\'\n\010keychain\030\006 \001(\0132\023.grpc.Keyc" + "hainEventH\000\022\037\n\004mail\030\007 \001(\0132\017.grpc.MailEve" + "ntH\000\022\037\n\004user\030\010 \001(\0132\017.grpc.UserEventH\000B\007\n" + "\005event\"\240\003\n\010AppEvent\0223\n\016internetStatus\030\001 " + "\001(\0132\031.grpc.InternetStatusEventH\000\022E\n\027togg" + "leAutostartFinished\030\002 \001(\0132\".grpc.ToggleA" + "utostartFinishedEventH\000\0221\n\rresetFinished" + "\030\003 \001(\0132\030.grpc.ResetFinishedEventH\000\0229\n\021re" + "portBugFinished\030\004 \001(\0132\034.grpc.ReportBugFi" + "nishedEventH\000\0227\n\020reportBugSuccess\030\005 \001(\0132" + "\033.grpc.ReportBugSuccessEventH\000\0223\n\016report" + "BugError\030\006 \001(\0132\031.grpc.ReportBugErrorEven" + "tH\000\0223\n\016showMainWindow\030\007 \001(\0132\031.grpc.ShowM" + "ainWindowEventH\000B\007\n\005event\"(\n\023InternetSta" + "tusEvent\022\021\n\tconnected\030\001 \001(\010\"\036\n\034ToggleAut" + "ostartFinishedEvent\"\024\n\022ResetFinishedEven" + "t\"\030\n\026ReportBugFinishedEvent\"\027\n\025ReportBug" + "SuccessEvent\"\025\n\023ReportBugErrorEvent\"\025\n\023S" + "howMainWindowEvent\"\235\002\n\nLoginEvent\022&\n\005err" + "or\030\001 \001(\0132\025.grpc.LoginErrorEventH\000\0224\n\014tfa" + "Requested\030\002 \001(\0132\034.grpc.LoginTfaRequested" + "EventH\000\022E\n\024twoPasswordRequested\030\003 \001(\0132%." + "grpc.LoginTwoPasswordsRequestedEventH\000\022," + "\n\010finished\030\004 \001(\0132\030.grpc.LoginFinishedEve" + "ntH\000\0223\n\017alreadyLoggedIn\030\005 \001(\0132\030.grpc.Log" + "inFinishedEventH\000B\007\n\005event\"F\n\017LoginError" + "Event\022\"\n\004type\030\001 \001(\0162\024.grpc.LoginErrorTyp" + "e\022\017\n\007message\030\002 \001(\t\"*\n\026LoginTfaRequestedE" + "vent\022\020\n\010username\030\001 \001(\t\"!\n\037LoginTwoPasswo" + "rdsRequestedEvent\"$\n\022LoginFinishedEvent\022" + "\016\n\006userID\030\001 \001(\t\"\304\003\n\013UpdateEvent\022\'\n\005error" + "\030\001 \001(\0132\026.grpc.UpdateErrorEventH\000\0223\n\013manu" + "alReady\030\002 \001(\0132\034.grpc.UpdateManualReadyEv" + "entH\000\022C\n\023manualRestartNeeded\030\003 \001(\0132$.grp" + "c.UpdateManualRestartNeededEventH\000\022\'\n\005fo" + "rce\030\004 \001(\0132\026.grpc.UpdateForceEventH\000\022>\n\023s" + "ilentRestartNeeded\030\005 \001(\0132\037.grpc.UpdateSi" + "lentRestartNeededH\000\0226\n\017isLatestVersion\030\006" + " \001(\0132\033.grpc.UpdateIsLatestVersionH\000\0222\n\rc" + "heckFinished\030\007 \001(\0132\031.grpc.UpdateCheckFin" + "ishedH\000\0224\n\016versionChanged\030\010 \001(\0132\032.grpc.U" + "pdateVersionChangedH\000B\007\n\005event\"7\n\020Update" + "ErrorEvent\022#\n\004type\030\001 \001(\0162\025.grpc.UpdateEr" + "rorType\")\n\026UpdateManualReadyEvent\022\017\n\007ver" + "sion\030\001 \001(\t\" \n\036UpdateManualRestartNeededE" + "vent\"#\n\020UpdateForceEvent\022\017\n\007version\030\001 \001(" + "\t\"\033\n\031UpdateSilentRestartNeeded\"\027\n\025Update" + "IsLatestVersion\"\025\n\023UpdateCheckFinished\"\026" + "\n\024UpdateVersionChanged\"\303\001\n\016DiskCacheEven" + "t\022*\n\005error\030\001 \001(\0132\031.grpc.DiskCacheErrorEv" + "entH\000\0226\n\013pathChanged\030\002 \001(\0132\037.grpc.DiskCa" + "chePathChangedEventH\000\022D\n\022pathChangeFinis" + "hed\030\003 \001(\0132&.grpc.DiskCachePathChangeFini" + "shedEventH\000B\007\n\005event\"=\n\023DiskCacheErrorEv" + "ent\022&\n\004type\030\001 \001(\0162\030.grpc.DiskCacheErrorT" + "ype\")\n\031DiskCachePathChangedEvent\022\014\n\004path" + "\030\001 \001(\t\"\"\n DiskCachePathChangeFinishedEve" + "nt\"\220\002\n\021MailSettingsEvent\022-\n\005error\030\001 \001(\0132" + "\034.grpc.MailSettingsErrorEventH\000\022A\n\025useSs" + "lForSmtpFinished\030\002 \001(\0132 .grpc.UseSslForS" + "mtpFinishedEventH\000\022=\n\023changePortsFinishe" + "d\030\003 \001(\0132\036.grpc.ChangePortsFinishedEventH" + "\000\022A\n\025useSslForImapFinished\030\004 \001(\0132 .grpc." + "UseSslForImapFinishedEventH\000B\007\n\005event\"C\n" + "\026MailSettingsErrorEvent\022)\n\004type\030\001 \001(\0162\033." + "grpc.MailSettingsErrorType\"\034\n\032UseSslForS" + "mtpFinishedEvent\"\034\n\032UseSslForImapFinishe" + "dEvent\"\032\n\030ChangePortsFinishedEvent\"\307\001\n\rK" + "eychainEvent\022C\n\026changeKeychainFinished\030\001" + " \001(\0132!.grpc.ChangeKeychainFinishedEventH" + "\000\0221\n\rhasNoKeychain\030\002 \001(\0132\030.grpc.HasNoKey" + "chainEventH\000\0225\n\017rebuildKeychain\030\003 \001(\0132\032." + "grpc.RebuildKeychainEventH\000B\007\n\005event\"\035\n\033" + "ChangeKeychainFinishedEvent\"\024\n\022HasNoKeyc" + "hainEvent\"\026\n\024RebuildKeychainEvent\"\207\002\n\tMa" + "ilEvent\022J\n\034noActiveKeyForRecipientEvent\030" + "\001 \001(\0132\".grpc.NoActiveKeyForRecipientEven" + "tH\000\0223\n\016addressChanged\030\002 \001(\0132\031.grpc.Addre" + "ssChangedEventH\000\022\?\n\024addressChangedLogout" + "\030\003 \001(\0132\037.grpc.AddressChangedLogoutEventH" + "\000\022/\n\014apiCertIssue\030\006 \001(\0132\027.grpc.ApiCertIs" + "sueEventH\000B\007\n\005event\"-\n\034NoActiveKeyForRec" + "ipientEvent\022\r\n\005email\030\001 \001(\t\"&\n\023AddressCha" + "ngedEvent\022\017\n\007address\030\001 \001(\t\",\n\031AddressCha" + "ngedLogoutEvent\022\017\n\007address\030\001 \001(\t\"\023\n\021ApiC" + "ertIssueEvent\"\303\001\n\tUserEvent\022E\n\027toggleSpl" + "itModeFinished\030\001 \001(\0132\".grpc.ToggleSplitM" + "odeFinishedEventH\000\0227\n\020userDisconnected\030\002" + " \001(\0132\033.grpc.UserDisconnectedEventH\000\022-\n\013u" + "serChanged\030\003 \001(\0132\026.grpc.UserChangedEvent" + "H\000B\007\n\005event\".\n\034ToggleSplitModeFinishedEv" + "ent\022\016\n\006userID\030\001 \001(\t\")\n\025UserDisconnectedE" + "vent\022\020\n\010username\030\001 \001(\t\"\"\n\020UserChangedEve" + "nt\022\016\n\006userID\030\001 \001(\t*q\n\010LogLevel\022\r\n\tLOG_PA" + "NIC\020\000\022\r\n\tLOG_FATAL\020\001\022\r\n\tLOG_ERROR\020\002\022\014\n\010L" + "OG_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\tUserState\022\016\n\nSIGNED_OUT" + "\020\000\022\n\n\006LOCKED\020\001\022\r\n\tCONNECTED\020\002*\242\001\n\016LoginE" + "rrorType\022\033\n\027USERNAME_PASSWORD_ERROR\020\000\022\r\n" + "\tFREE_USER\020\001\022\024\n\020CONNECTION_ERROR\020\002\022\r\n\tTF" + "A_ERROR\020\003\022\r\n\tTFA_ABORT\020\004\022\027\n\023TWO_PASSWORD" + "S_ERROR\020\005\022\027\n\023TWO_PASSWORDS_ABORT\020\006*[\n\017Up" + "dateErrorType\022\027\n\023UPDATE_MANUAL_ERROR\020\000\022\026" + "\n\022UPDATE_FORCE_ERROR\020\001\022\027\n\023UPDATE_SILENT_" + "ERROR\020\002*k\n\022DiskCacheErrorType\022 \n\034DISK_CA" + "CHE_UNAVAILABLE_ERROR\020\000\022\036\n\032CANT_MOVE_DIS" + "K_CACHE_ERROR\020\001\022\023\n\017DISK_FULL_ERROR\020\002*A\n\025" + "MailSettingsErrorType\022\023\n\017IMAP_PORT_ISSUE" + "\020\000\022\023\n\017SMTP_PORT_ISSUE\020\0012\247 \n\006Bridge\022I\n\013Ch" + "eckTokens\022\034.google.protobuf.StringValue\032" + "\034.google.protobuf.StringValue\022\?\n\013AddLogE" + "ntry\022\030.grpc.AddLogEntryRequest\032\026.google." + "protobuf.Empty\022:\n\010GuiReady\022\026.google.prot" + "obuf.Empty\032\026.google.protobuf.Empty\0226\n\004Qu" + "it\022\026.google.protobuf.Empty\032\026.google.prot" + "obuf.Empty\0229\n\007Restart\022\026.google.protobuf." + "Empty\032\026.google.protobuf.Empty\022C\n\rShowOnS" + "tartup\022\026.google.protobuf.Empty\032\032.google." + "protobuf.BoolValue\022F\n\020ShowSplashScreen\022\026" ".google.protobuf.Empty\032\032.google.protobuf" - ".BoolValue\022F\n\020SetUseSslForImap\022\032.google." - "protobuf.BoolValue\032\026.google.protobuf.Emp" - "ty\022C\n\rUseSslForImap\022\026.google.protobuf.Em" - "pty\032\032.google.protobuf.BoolValue\022@\n\010Hostn" - "ame\022\026.google.protobuf.Empty\032\034.google.pro" - "tobuf.StringValue\022\?\n\010ImapPort\022\026.google.p" - "rotobuf.Empty\032\033.google.protobuf.Int32Val" - "ue\022\?\n\010SmtpPort\022\026.google.protobuf.Empty\032\033" - ".google.protobuf.Int32Value\022\?\n\013ChangePor" - "ts\022\030.grpc.ChangePortsRequest\032\026.google.pr" - "otobuf.Empty\022E\n\nIsPortFree\022\033.google.prot" - "obuf.Int32Value\032\032.google.protobuf.BoolVa" - "lue\022N\n\022AvailableKeychains\022\026.google.proto" - "buf.Empty\032 .grpc.AvailableKeychainsRespo" - "nse\022J\n\022SetCurrentKeychain\022\034.google.proto" - "buf.StringValue\032\026.google.protobuf.Empty\022" - "G\n\017CurrentKeychain\022\026.google.protobuf.Emp" - "ty\032\034.google.protobuf.StringValue\022=\n\013GetU" - "serList\022\026.google.protobuf.Empty\032\026.grpc.U" - "serListResponse\0223\n\007GetUser\022\034.google.prot" - "obuf.StringValue\032\n.grpc.User\022F\n\020SetUserS" - "plitMode\022\032.grpc.UserSplitModeRequest\032\026.g" - "oogle.protobuf.Empty\022B\n\nLogoutUser\022\034.goo" - "gle.protobuf.StringValue\032\026.google.protob" - "uf.Empty\022B\n\nRemoveUser\022\034.google.protobuf" - ".StringValue\032\026.google.protobuf.Empty\022Q\n\026" - "ConfigureUserAppleMail\022\037.grpc.ConfigureA" - "ppleMailRequest\032\026.google.protobuf.Empty\022" - "\?\n\016RunEventStream\022\030.grpc.EventStreamRequ" - "est\032\021.grpc.StreamEvent0\001\022A\n\017StopEventStr" - "eam\022\026.google.protobuf.Empty\032\026.google.pro" - "tobuf.EmptyB6Z4github.com/ProtonMail/pro" - "ton-bridge/v2/internal/grpcb\006proto3" + ".BoolValue\022E\n\017IsFirstGuiStart\022\026.google.p" + "rotobuf.Empty\032\032.google.protobuf.BoolValu" + "e\022F\n\020SetIsAutostartOn\022\032.google.protobuf." + "BoolValue\032\026.google.protobuf.Empty\022C\n\rIsA" + "utostartOn\022\026.google.protobuf.Empty\032\032.goo" + "gle.protobuf.BoolValue\022F\n\020SetIsBetaEnabl" + "ed\022\032.google.protobuf.BoolValue\032\026.google." + "protobuf.Empty\022C\n\rIsBetaEnabled\022\026.google" + ".protobuf.Empty\032\032.google.protobuf.BoolVa" + "lue\022I\n\023SetIsAllMailVisible\022\032.google.prot" + "obuf.BoolValue\032\026.google.protobuf.Empty\022F" + "\n\020IsAllMailVisible\022\026.google.protobuf.Emp" + "ty\032\032.google.protobuf.BoolValue\022<\n\004GoOs\022\026" + ".google.protobuf.Empty\032\034.google.protobuf" + ".StringValue\022>\n\014TriggerReset\022\026.google.pr" + "otobuf.Empty\032\026.google.protobuf.Empty\022\?\n\007" + "Version\022\026.google.protobuf.Empty\032\034.google" + ".protobuf.StringValue\022@\n\010LogsPath\022\026.goog" + "le.protobuf.Empty\032\034.google.protobuf.Stri" + "ngValue\022C\n\013LicensePath\022\026.google.protobuf" + ".Empty\032\034.google.protobuf.StringValue\022L\n\024" + "ReleaseNotesPageLink\022\026.google.protobuf.E" + "mpty\032\034.google.protobuf.StringValue\022N\n\026De" + "pendencyLicensesLink\022\026.google.protobuf.E" + "mpty\032\034.google.protobuf.StringValue\022G\n\017La" + "ndingPageLink\022\026.google.protobuf.Empty\032\034." + "google.protobuf.StringValue\022J\n\022SetColorS" + "chemeName\022\034.google.protobuf.StringValue\032" + "\026.google.protobuf.Empty\022G\n\017ColorSchemeNa" + "me\022\026.google.protobuf.Empty\032\034.google.prot" + "obuf.StringValue\022J\n\022CurrentEmailClient\022\026" + ".google.protobuf.Empty\032\034.google.protobuf" + ".StringValue\022;\n\tReportBug\022\026.grpc.ReportB" + "ugRequest\032\026.google.protobuf.Empty\022E\n\rFor" + "ceLauncher\022\034.google.protobuf.StringValue" + "\032\026.google.protobuf.Empty\022I\n\021SetMainExecu" + "table\022\034.google.protobuf.StringValue\032\026.go" + "ogle.protobuf.Empty\0223\n\005Login\022\022.grpc.Logi" + "nRequest\032\026.google.protobuf.Empty\0226\n\010Logi" + "n2FA\022\022.grpc.LoginRequest\032\026.google.protob" + "uf.Empty\022=\n\017Login2Passwords\022\022.grpc.Login" + "Request\032\026.google.protobuf.Empty\022=\n\nLogin" + "Abort\022\027.grpc.LoginAbortRequest\032\026.google." + "protobuf.Empty\022=\n\013CheckUpdate\022\026.google.p" + "rotobuf.Empty\032\026.google.protobuf.Empty\022\?\n" + "\rInstallUpdate\022\026.google.protobuf.Empty\032\026" + ".google.protobuf.Empty\022L\n\026SetIsAutomatic" + "UpdateOn\022\032.google.protobuf.BoolValue\032\026.g" + "oogle.protobuf.Empty\022I\n\023IsAutomaticUpdat" + "eOn\022\026.google.protobuf.Empty\032\032.google.pro" + "tobuf.BoolValue\022E\n\rDiskCachePath\022\026.googl" + "e.protobuf.Empty\032\034.google.protobuf.Strin" + "gValue\022H\n\020SetDiskCachePath\022\034.google.prot" + "obuf.StringValue\032\026.google.protobuf.Empty" + "\022E\n\017SetIsDoHEnabled\022\032.google.protobuf.Bo" + "olValue\032\026.google.protobuf.Empty\022B\n\014IsDoH" + "Enabled\022\026.google.protobuf.Empty\032\032.google" + ".protobuf.BoolValue\022F\n\020SetUseSslForSmtp\022" + "\032.google.protobuf.BoolValue\032\026.google.pro" + "tobuf.Empty\022C\n\rUseSslForSmtp\022\026.google.pr" + "otobuf.Empty\032\032.google.protobuf.BoolValue" + "\022F\n\020SetUseSslForImap\022\032.google.protobuf.B" + "oolValue\032\026.google.protobuf.Empty\022C\n\rUseS" + "slForImap\022\026.google.protobuf.Empty\032\032.goog" + "le.protobuf.BoolValue\022@\n\010Hostname\022\026.goog" + "le.protobuf.Empty\032\034.google.protobuf.Stri" + "ngValue\022\?\n\010ImapPort\022\026.google.protobuf.Em" + "pty\032\033.google.protobuf.Int32Value\022\?\n\010Smtp" + "Port\022\026.google.protobuf.Empty\032\033.google.pr" + "otobuf.Int32Value\022\?\n\013ChangePorts\022\030.grpc." + "ChangePortsRequest\032\026.google.protobuf.Emp" + "ty\022E\n\nIsPortFree\022\033.google.protobuf.Int32" + "Value\032\032.google.protobuf.BoolValue\022N\n\022Ava" + "ilableKeychains\022\026.google.protobuf.Empty\032" + " .grpc.AvailableKeychainsResponse\022J\n\022Set" + "CurrentKeychain\022\034.google.protobuf.String" + "Value\032\026.google.protobuf.Empty\022G\n\017Current" + "Keychain\022\026.google.protobuf.Empty\032\034.googl" + "e.protobuf.StringValue\022=\n\013GetUserList\022\026." + "google.protobuf.Empty\032\026.grpc.UserListRes" + "ponse\0223\n\007GetUser\022\034.google.protobuf.Strin" + "gValue\032\n.grpc.User\022F\n\020SetUserSplitMode\022\032" + ".grpc.UserSplitModeRequest\032\026.google.prot" + "obuf.Empty\022B\n\nLogoutUser\022\034.google.protob" + "uf.StringValue\032\026.google.protobuf.Empty\022B" + "\n\nRemoveUser\022\034.google.protobuf.StringVal" + "ue\032\026.google.protobuf.Empty\022Q\n\026ConfigureU" + "serAppleMail\022\037.grpc.ConfigureAppleMailRe" + "quest\032\026.google.protobuf.Empty\022\?\n\016RunEven" + "tStream\022\030.grpc.EventStreamRequest\032\021.grpc" + ".StreamEvent0\001\022A\n\017StopEventStream\022\026.goog" + "le.protobuf.Empty\032\026.google.protobuf.Empt" + "yB6Z4github.com/ProtonMail/proton-bridge" + "/v2/internal/grpcb\006proto3" ; static const ::_pbi::DescriptorTable* const descriptor_table_bridge_2eproto_deps[2] = { &::descriptor_table_google_2fprotobuf_2fempty_2eproto, @@ -1550,7 +1552,7 @@ 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, 9595, descriptor_table_protodef_bridge_2eproto, + false, false, 9665, descriptor_table_protodef_bridge_2eproto, "bridge.proto", &descriptor_table_bridge_2eproto_once, descriptor_table_bridge_2eproto_deps, 2, 56, schemas, file_default_instances, TableStruct_bridge_2eproto::offsets, @@ -1583,10 +1585,25 @@ bool LogLevel_IsValid(int value) { } } -const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* LoginErrorType_descriptor() { +const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* UserState_descriptor() { ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_bridge_2eproto); return file_level_enum_descriptors_bridge_2eproto[1]; } +bool UserState_IsValid(int value) { + switch (value) { + case 0: + case 1: + case 2: + return true; + default: + return false; + } +} + +const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* LoginErrorType_descriptor() { + ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_bridge_2eproto); + return file_level_enum_descriptors_bridge_2eproto[2]; +} bool LoginErrorType_IsValid(int value) { switch (value) { case 0: @@ -1604,7 +1621,7 @@ bool LoginErrorType_IsValid(int value) { const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* UpdateErrorType_descriptor() { ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_bridge_2eproto); - return file_level_enum_descriptors_bridge_2eproto[2]; + return file_level_enum_descriptors_bridge_2eproto[3]; } bool UpdateErrorType_IsValid(int value) { switch (value) { @@ -1619,7 +1636,7 @@ bool UpdateErrorType_IsValid(int value) { const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* DiskCacheErrorType_descriptor() { ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_bridge_2eproto); - return file_level_enum_descriptors_bridge_2eproto[3]; + return file_level_enum_descriptors_bridge_2eproto[4]; } bool DiskCacheErrorType_IsValid(int value) { switch (value) { @@ -1634,7 +1651,7 @@ bool DiskCacheErrorType_IsValid(int value) { const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* MailSettingsErrorType_descriptor() { ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_bridge_2eproto); - return file_level_enum_descriptors_bridge_2eproto[4]; + return file_level_enum_descriptors_bridge_2eproto[5]; } bool MailSettingsErrorType_IsValid(int value) { switch (value) { @@ -3233,11 +3250,11 @@ User::User(const User& from) , decltype(_impl_.username_){} , decltype(_impl_.avatartext_){} , decltype(_impl_.password_){} - , decltype(_impl_.usedbytes_){} - , decltype(_impl_.totalbytes_){} - , decltype(_impl_.loggedin_){} + , decltype(_impl_.state_){} , decltype(_impl_.splitmode_){} , decltype(_impl_.setupguideseen_){} + , decltype(_impl_.usedbytes_){} + , decltype(_impl_.totalbytes_){} , /*decltype(_impl_._cached_size_)*/{}}; _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); @@ -3273,9 +3290,9 @@ User::User(const User& from) _this->_impl_.password_.Set(from._internal_password(), _this->GetArenaForAllocation()); } - ::memcpy(&_impl_.usedbytes_, &from._impl_.usedbytes_, - static_cast(reinterpret_cast(&_impl_.setupguideseen_) - - reinterpret_cast(&_impl_.usedbytes_)) + sizeof(_impl_.setupguideseen_)); + ::memcpy(&_impl_.state_, &from._impl_.state_, + static_cast(reinterpret_cast(&_impl_.totalbytes_) - + reinterpret_cast(&_impl_.state_)) + sizeof(_impl_.totalbytes_)); // @@protoc_insertion_point(copy_constructor:grpc.User) } @@ -3289,11 +3306,11 @@ inline void User::SharedCtor( , decltype(_impl_.username_){} , decltype(_impl_.avatartext_){} , decltype(_impl_.password_){} - , decltype(_impl_.usedbytes_){int64_t{0}} - , decltype(_impl_.totalbytes_){int64_t{0}} - , decltype(_impl_.loggedin_){false} + , decltype(_impl_.state_){0} , decltype(_impl_.splitmode_){false} , decltype(_impl_.setupguideseen_){false} + , decltype(_impl_.usedbytes_){int64_t{0}} + , decltype(_impl_.totalbytes_){int64_t{0}} , /*decltype(_impl_._cached_size_)*/{} }; _impl_.id_.InitDefault(); @@ -3347,9 +3364,9 @@ void User::Clear() { _impl_.username_.ClearToEmpty(); _impl_.avatartext_.ClearToEmpty(); _impl_.password_.ClearToEmpty(); - ::memset(&_impl_.usedbytes_, 0, static_cast( - reinterpret_cast(&_impl_.setupguideseen_) - - reinterpret_cast(&_impl_.usedbytes_)) + sizeof(_impl_.setupguideseen_)); + ::memset(&_impl_.state_, 0, static_cast( + reinterpret_cast(&_impl_.totalbytes_) - + reinterpret_cast(&_impl_.state_)) + sizeof(_impl_.totalbytes_)); _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); } @@ -3389,11 +3406,12 @@ const char* User::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) { } else goto handle_unusual; continue; - // bool loggedIn = 4; + // .grpc.UserState state = 4; case 4: if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 32)) { - _impl_.loggedin_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr); + uint64_t val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr); CHK_(ptr); + _internal_set_state(static_cast<::grpc::UserState>(val)); } else goto handle_unusual; continue; @@ -3512,10 +3530,11 @@ uint8_t* User::_InternalSerialize( 3, this->_internal_avatartext(), target); } - // bool loggedIn = 4; - if (this->_internal_loggedin() != 0) { + // .grpc.UserState state = 4; + if (this->_internal_state() != 0) { target = stream->EnsureSpace(target); - target = ::_pbi::WireFormatLite::WriteBoolToArray(4, this->_internal_loggedin(), target); + target = ::_pbi::WireFormatLite::WriteEnumToArray( + 4, this->_internal_state(), target); } // bool splitMode = 5; @@ -3610,19 +3629,10 @@ size_t User::ByteSizeLong() const { this->_internal_password()); } - // int64 usedBytes = 7; - if (this->_internal_usedbytes() != 0) { - total_size += ::_pbi::WireFormatLite::Int64SizePlusOne(this->_internal_usedbytes()); - } - - // int64 totalBytes = 8; - if (this->_internal_totalbytes() != 0) { - total_size += ::_pbi::WireFormatLite::Int64SizePlusOne(this->_internal_totalbytes()); - } - - // bool loggedIn = 4; - if (this->_internal_loggedin() != 0) { - total_size += 1 + 1; + // .grpc.UserState state = 4; + if (this->_internal_state() != 0) { + total_size += 1 + + ::_pbi::WireFormatLite::EnumSize(this->_internal_state()); } // bool splitMode = 5; @@ -3635,6 +3645,16 @@ size_t User::ByteSizeLong() const { total_size += 1 + 1; } + // int64 usedBytes = 7; + if (this->_internal_usedbytes() != 0) { + total_size += ::_pbi::WireFormatLite::Int64SizePlusOne(this->_internal_usedbytes()); + } + + // int64 totalBytes = 8; + if (this->_internal_totalbytes() != 0) { + total_size += ::_pbi::WireFormatLite::Int64SizePlusOne(this->_internal_totalbytes()); + } + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); } @@ -3666,14 +3686,8 @@ void User::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_ if (!from._internal_password().empty()) { _this->_internal_set_password(from._internal_password()); } - if (from._internal_usedbytes() != 0) { - _this->_internal_set_usedbytes(from._internal_usedbytes()); - } - if (from._internal_totalbytes() != 0) { - _this->_internal_set_totalbytes(from._internal_totalbytes()); - } - if (from._internal_loggedin() != 0) { - _this->_internal_set_loggedin(from._internal_loggedin()); + if (from._internal_state() != 0) { + _this->_internal_set_state(from._internal_state()); } if (from._internal_splitmode() != 0) { _this->_internal_set_splitmode(from._internal_splitmode()); @@ -3681,6 +3695,12 @@ void User::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_ if (from._internal_setupguideseen() != 0) { _this->_internal_set_setupguideseen(from._internal_setupguideseen()); } + if (from._internal_usedbytes() != 0) { + _this->_internal_set_usedbytes(from._internal_usedbytes()); + } + if (from._internal_totalbytes() != 0) { + _this->_internal_set_totalbytes(from._internal_totalbytes()); + } _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); } @@ -3718,11 +3738,11 @@ void User::InternalSwap(User* other) { &other->_impl_.password_, rhs_arena ); ::PROTOBUF_NAMESPACE_ID::internal::memswap< - PROTOBUF_FIELD_OFFSET(User, _impl_.setupguideseen_) - + sizeof(User::_impl_.setupguideseen_) - - PROTOBUF_FIELD_OFFSET(User, _impl_.usedbytes_)>( - reinterpret_cast(&_impl_.usedbytes_), - reinterpret_cast(&other->_impl_.usedbytes_)); + PROTOBUF_FIELD_OFFSET(User, _impl_.totalbytes_) + + sizeof(User::_impl_.totalbytes_) + - PROTOBUF_FIELD_OFFSET(User, _impl_.state_)>( + reinterpret_cast(&_impl_.state_), + reinterpret_cast(&other->_impl_.state_)); } ::PROTOBUF_NAMESPACE_ID::Metadata User::GetMetadata() const { 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 e774847e..14e594f8 100644 --- a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/bridge.pb.h +++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/bridge.pb.h @@ -308,6 +308,32 @@ inline bool LogLevel_Parse( return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum( LogLevel_descriptor(), name, value); } +enum UserState : int { + SIGNED_OUT = 0, + LOCKED = 1, + CONNECTED = 2, + UserState_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits::min(), + UserState_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits::max() +}; +bool UserState_IsValid(int value); +constexpr UserState UserState_MIN = SIGNED_OUT; +constexpr UserState UserState_MAX = CONNECTED; +constexpr int UserState_ARRAYSIZE = UserState_MAX + 1; + +const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* UserState_descriptor(); +template +inline const std::string& UserState_Name(T enum_t_value) { + static_assert(::std::is_same::value || + ::std::is_integral::value, + "Incorrect type passed to function UserState_Name."); + return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum( + UserState_descriptor(), enum_t_value); +} +inline bool UserState_Parse( + ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, UserState* value) { + return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum( + UserState_descriptor(), name, value); +} enum LoginErrorType : int { USERNAME_PASSWORD_ERROR = 0, FREE_USER = 1, @@ -1595,11 +1621,11 @@ class User final : kUsernameFieldNumber = 2, kAvatarTextFieldNumber = 3, kPasswordFieldNumber = 9, - kUsedBytesFieldNumber = 7, - kTotalBytesFieldNumber = 8, - kLoggedInFieldNumber = 4, + kStateFieldNumber = 4, kSplitModeFieldNumber = 5, kSetupGuideSeenFieldNumber = 6, + kUsedBytesFieldNumber = 7, + kTotalBytesFieldNumber = 8, }; // repeated string addresses = 10; int addresses_size() const; @@ -1681,31 +1707,13 @@ class User final : std::string* _internal_mutable_password(); public: - // int64 usedBytes = 7; - void clear_usedbytes(); - int64_t usedbytes() const; - void set_usedbytes(int64_t value); + // .grpc.UserState state = 4; + void clear_state(); + ::grpc::UserState state() const; + void set_state(::grpc::UserState value); private: - int64_t _internal_usedbytes() const; - void _internal_set_usedbytes(int64_t value); - public: - - // int64 totalBytes = 8; - void clear_totalbytes(); - int64_t totalbytes() const; - void set_totalbytes(int64_t value); - private: - int64_t _internal_totalbytes() const; - void _internal_set_totalbytes(int64_t value); - public: - - // bool loggedIn = 4; - void clear_loggedin(); - bool loggedin() const; - void set_loggedin(bool value); - private: - bool _internal_loggedin() const; - void _internal_set_loggedin(bool value); + ::grpc::UserState _internal_state() const; + void _internal_set_state(::grpc::UserState value); public: // bool splitMode = 5; @@ -1726,6 +1734,24 @@ class User final : void _internal_set_setupguideseen(bool value); public: + // int64 usedBytes = 7; + void clear_usedbytes(); + int64_t usedbytes() const; + void set_usedbytes(int64_t value); + private: + int64_t _internal_usedbytes() const; + void _internal_set_usedbytes(int64_t value); + public: + + // int64 totalBytes = 8; + void clear_totalbytes(); + int64_t totalbytes() const; + void set_totalbytes(int64_t value); + private: + int64_t _internal_totalbytes() const; + void _internal_set_totalbytes(int64_t value); + public: + // @@protoc_insertion_point(class_scope:grpc.User) private: class _Internal; @@ -1739,11 +1765,11 @@ class User final : ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr username_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr avatartext_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr password_; - int64_t usedbytes_; - int64_t totalbytes_; - bool loggedin_; + int state_; bool splitmode_; bool setupguideseen_; + int64_t usedbytes_; + int64_t totalbytes_; mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; }; union { Impl_ _impl_; }; @@ -10389,24 +10415,24 @@ inline void User::set_allocated_avatartext(std::string* avatartext) { // @@protoc_insertion_point(field_set_allocated:grpc.User.avatarText) } -// bool loggedIn = 4; -inline void User::clear_loggedin() { - _impl_.loggedin_ = false; +// .grpc.UserState state = 4; +inline void User::clear_state() { + _impl_.state_ = 0; } -inline bool User::_internal_loggedin() const { - return _impl_.loggedin_; +inline ::grpc::UserState User::_internal_state() const { + return static_cast< ::grpc::UserState >(_impl_.state_); } -inline bool User::loggedin() const { - // @@protoc_insertion_point(field_get:grpc.User.loggedIn) - return _internal_loggedin(); +inline ::grpc::UserState User::state() const { + // @@protoc_insertion_point(field_get:grpc.User.state) + return _internal_state(); } -inline void User::_internal_set_loggedin(bool value) { +inline void User::_internal_set_state(::grpc::UserState value) { - _impl_.loggedin_ = value; + _impl_.state_ = value; } -inline void User::set_loggedin(bool value) { - _internal_set_loggedin(value); - // @@protoc_insertion_point(field_set:grpc.User.loggedIn) +inline void User::set_state(::grpc::UserState value) { + _internal_set_state(value); + // @@protoc_insertion_point(field_set:grpc.User.state) } // bool splitMode = 5; @@ -15306,6 +15332,11 @@ template <> inline const EnumDescriptor* GetEnumDescriptor< ::grpc::LogLevel>() { return ::grpc::LogLevel_descriptor(); } +template <> struct is_proto_enum< ::grpc::UserState> : ::std::true_type {}; +template <> +inline const EnumDescriptor* GetEnumDescriptor< ::grpc::UserState>() { + return ::grpc::UserState_descriptor(); +} template <> struct is_proto_enum< ::grpc::LoginErrorType> : ::std::true_type {}; template <> inline const EnumDescriptor* GetEnumDescriptor< ::grpc::LoginErrorType>() { diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/User/User.cpp b/internal/frontend/bridge-gui/bridgepp/bridgepp/User/User.cpp index a1fddf44..a39d6472 100644 --- a/internal/frontend/bridge-gui/bridgepp/bridgepp/User/User.cpp +++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/User/User.cpp @@ -52,7 +52,7 @@ void User::update(User const &user) this->setPassword(user.password()); this->setAddresses(user.addresses()); this->setAvatarText(user.avatarText()); - this->setLoggedIn(user.loggedIn()); + this->setState(user.state()); this->setSplitMode(user.splitMode()); this->setSetupGuideSeen(user.setupGuideSeen()); this->setUsedBytes(user.usedBytes()); @@ -217,24 +217,24 @@ void User::setAvatarText(QString const &avatarText) //**************************************************************************************************************************************************** -/// \return The login status. +/// \return The user state. //**************************************************************************************************************************************************** -bool User::loggedIn() const +UserState User::state() const { - return loggedIn_; + return state_; } //**************************************************************************************************************************************************** -/// \param[in] loggedIn The login status. +/// \param[in] state The user state. //**************************************************************************************************************************************************** -void User::setLoggedIn(bool loggedIn) +void User::setState(UserState state) { - if (loggedIn == loggedIn_) + if (state_ == state) return; - loggedIn_ = loggedIn; - emit loggedInChanged(loggedIn_); + state_ = state; + emit stateChanged(state); } diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/User/User.h b/internal/frontend/bridge-gui/bridgepp/bridgepp/User/User.h index 604fc3a1..fe7e7195 100644 --- a/internal/frontend/bridge-gui/bridgepp/bridgepp/User/User.h +++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/User/User.h @@ -24,6 +24,36 @@ namespace bridgepp { +//**************************************************************************************************************************************************** +/// A wrapper QObject class around a C++ enum. The purpose of this is to be able to use this enum in both Qt and QML code. +/// See https://qml.guide/enums-in-qt-qml/ for details (we used Q_OBJECT instead of Q_GADGET as in the reference document avoid a QML warning +/// complaining about the case of the data type). +//**************************************************************************************************************************************************** +class EUserState: public QObject +{ +Q_OBJECT +public: + enum State + { + SignedOut = 0, + Locked = 1, + Connected = 2 + }; + + Q_ENUM(State) + + EUserState() = delete; ///< Default constructor. + EUserState(EUserState const&) = delete; ///< Disabled copy-constructor. + EUserState(EUserState&&) = delete; ///< Disabled assignment copy-constructor. + ~EUserState() = default; ///< Destructor. + EUserState& operator=(EUserState const&) = delete; ///< Disabled assignment operator. + EUserState& operator=(EUserState&&) = delete; ///< Disabled move assignment operator. +}; + + +typedef EUserState::State UserState; + + typedef std::shared_ptr SPUser; ///< Type definition for shared pointer to user. @@ -32,6 +62,7 @@ typedef std::shared_ptr SPUser; ///< Type definition for shared poin //**************************************************************************************************************************************************** class User : public QObject { + Q_OBJECT public: // static member function static SPUser newUser(QObject *parent); ///< Create a new user @@ -58,14 +89,13 @@ signals: // signal used to forward QML event received in the above slots void removeUser(QString const &userID); void configureAppleMailForUser(QString const &userID, QString const &address); - public: Q_PROPERTY(QString id READ id WRITE setID NOTIFY idChanged) // _ string ID Q_PROPERTY(QString username READ username WRITE setUsername NOTIFY usernameChanged) // _ string `property:"username"` Q_PROPERTY(QString password READ password WRITE setPassword NOTIFY passwordChanged) // _ string `property:"password"` Q_PROPERTY(QStringList addresses READ addresses WRITE setAddresses NOTIFY addressesChanged) // _ []string `property:"addresses"` Q_PROPERTY(QString avatarText READ avatarText WRITE setAvatarText NOTIFY avatarTextChanged) // _ string `property:"avatarText"` - Q_PROPERTY(bool loggedIn READ loggedIn WRITE setLoggedIn NOTIFY loggedInChanged) // _ bool `property:"loggedIn"` + Q_PROPERTY(UserState state READ state WRITE setState NOTIFY stateChanged) Q_PROPERTY(bool splitMode READ splitMode WRITE setSplitMode NOTIFY splitModeChanged) // _ bool `property:"splitMode"` Q_PROPERTY(bool setupGuideSeen READ setupGuideSeen WRITE setSetupGuideSeen NOTIFY setupGuideSeenChanged) // _ bool `property:"setupGuideSeen"` Q_PROPERTY(float usedBytes READ usedBytes WRITE setUsedBytes NOTIFY usedBytesChanged) // _ float32 `property:"usedBytes"` @@ -81,8 +111,8 @@ public: void setAddresses(QStringList const &addresses); QString avatarText() const; void setAvatarText(QString const &avatarText); - bool loggedIn() const; - void setLoggedIn(bool loggedIn); + UserState state() const; + void setState(UserState state); bool splitMode() const; void setSplitMode(bool splitMode); bool setupGuideSeen() const; @@ -100,11 +130,11 @@ signals: void addressesChanged(QStringList const &); void avatarTextChanged(QString const &avatarText); void loggedInChanged(bool loggedIn); + void stateChanged(UserState state); void splitModeChanged(bool splitMode); void setupGuideSeenChanged(bool seen); void usedBytesChanged(float byteCount); void totalBytesChanged(float byteCount); - void toggleSplitModeFinished(); private: // member functions. @@ -116,7 +146,7 @@ private: // data members. QString password_; ///< The IMAP password of the user. QStringList addresses_; ///< The email address list of the user. QString avatarText_; ///< The avatar text (i.e. initials of the user) - bool loggedIn_ { true }; ///< Is the user logged in. + UserState state_ { UserState::SignedOut }; ///< The state of the user bool splitMode_ { false }; ///< Is split mode active. bool setupGuideSeen_ { false }; ///< Has the setup guide been seen. float usedBytes_ { 0.0f }; ///< The storage used by the user. diff --git a/internal/frontend/cli/accounts.go b/internal/frontend/cli/accounts.go index b5e2fd5a..5d63657a 100644 --- a/internal/frontend/cli/accounts.go +++ b/internal/frontend/cli/accounts.go @@ -28,7 +28,7 @@ import ( "gitlab.protontech.ch/go/liteapi" ) -func (f *frontendCLI) listAccounts(c *ishell.Context) { +func (f *frontendCLI) listAccounts(_ *ishell.Context) { spacing := "%-2d: %-20s (%-15s, %-15s)\n" f.Printf(bold(strings.ReplaceAll(spacing, "d", "s")), "#", "account", "status", "address mode") for idx, userID := range f.bridge.GetUserIDs() { @@ -36,11 +36,20 @@ func (f *frontendCLI) listAccounts(c *ishell.Context) { if err != nil { panic(err) } - connected := "disconnected" - if user.Connected { - connected = "connected" + + var state string + switch user.State { + case bridge.SignedOut: + state = "signed out" + case bridge.Locked: + state = "locked" + case bridge.Connected: + state = "connected" + default: + panic("Unknown user state") } - f.Printf(spacing, idx, user.Username, connected, user.AddressMode) + + f.Printf(spacing, idx, user.Username, state, user.AddressMode) } f.Println() } @@ -51,9 +60,15 @@ func (f *frontendCLI) showAccountInfo(c *ishell.Context) { return } - if !user.Connected { + switch user.State { + case bridge.SignedOut: f.Printf("Please login to %s to get email client configuration.\n", bold(user.Username)) return + case bridge.Locked: + f.Printf("User %s is currently locked. Please wait and try again.\n", bold(user.Username)) + return + case bridge.Connected: + default: } if user.AddressMode == vault.CombinedMode { diff --git a/internal/frontend/grpc/bridge.pb.go b/internal/frontend/grpc/bridge.pb.go index 59143cb5..71c1223d 100644 --- a/internal/frontend/grpc/bridge.pb.go +++ b/internal/frontend/grpc/bridge.pb.go @@ -24,13 +24,12 @@ package grpc 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" wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" + reflect "reflect" + sync "sync" ) const ( @@ -105,6 +104,58 @@ func (LogLevel) EnumDescriptor() ([]byte, []int) { return file_bridge_proto_rawDescGZIP(), []int{0} } +//********************************************************** +// user related messages +//********************************************************** +type UserState int32 + +const ( + UserState_SIGNED_OUT UserState = 0 + UserState_LOCKED UserState = 1 + UserState_CONNECTED UserState = 2 +) + +// Enum value maps for UserState. +var ( + UserState_name = map[int32]string{ + 0: "SIGNED_OUT", + 1: "LOCKED", + 2: "CONNECTED", + } + UserState_value = map[string]int32{ + "SIGNED_OUT": 0, + "LOCKED": 1, + "CONNECTED": 2, + } +) + +func (x UserState) Enum() *UserState { + p := new(UserState) + *p = x + return p +} + +func (x UserState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (UserState) Descriptor() protoreflect.EnumDescriptor { + return file_bridge_proto_enumTypes[1].Descriptor() +} + +func (UserState) Type() protoreflect.EnumType { + return &file_bridge_proto_enumTypes[1] +} + +func (x UserState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use UserState.Descriptor instead. +func (UserState) EnumDescriptor() ([]byte, []int) { + return file_bridge_proto_rawDescGZIP(), []int{1} +} + type LoginErrorType int32 const ( @@ -150,11 +201,11 @@ func (x LoginErrorType) String() string { } func (LoginErrorType) Descriptor() protoreflect.EnumDescriptor { - return file_bridge_proto_enumTypes[1].Descriptor() + return file_bridge_proto_enumTypes[2].Descriptor() } func (LoginErrorType) Type() protoreflect.EnumType { - return &file_bridge_proto_enumTypes[1] + return &file_bridge_proto_enumTypes[2] } func (x LoginErrorType) Number() protoreflect.EnumNumber { @@ -163,7 +214,7 @@ func (x LoginErrorType) Number() protoreflect.EnumNumber { // Deprecated: Use LoginErrorType.Descriptor instead. func (LoginErrorType) EnumDescriptor() ([]byte, []int) { - return file_bridge_proto_rawDescGZIP(), []int{1} + return file_bridge_proto_rawDescGZIP(), []int{2} } type UpdateErrorType int32 @@ -199,11 +250,11 @@ func (x UpdateErrorType) String() string { } func (UpdateErrorType) Descriptor() protoreflect.EnumDescriptor { - return file_bridge_proto_enumTypes[2].Descriptor() + return file_bridge_proto_enumTypes[3].Descriptor() } func (UpdateErrorType) Type() protoreflect.EnumType { - return &file_bridge_proto_enumTypes[2] + return &file_bridge_proto_enumTypes[3] } func (x UpdateErrorType) Number() protoreflect.EnumNumber { @@ -212,7 +263,7 @@ func (x UpdateErrorType) Number() protoreflect.EnumNumber { // Deprecated: Use UpdateErrorType.Descriptor instead. func (UpdateErrorType) EnumDescriptor() ([]byte, []int) { - return file_bridge_proto_rawDescGZIP(), []int{2} + return file_bridge_proto_rawDescGZIP(), []int{3} } type DiskCacheErrorType int32 @@ -248,11 +299,11 @@ func (x DiskCacheErrorType) String() string { } func (DiskCacheErrorType) Descriptor() protoreflect.EnumDescriptor { - return file_bridge_proto_enumTypes[3].Descriptor() + return file_bridge_proto_enumTypes[4].Descriptor() } func (DiskCacheErrorType) Type() protoreflect.EnumType { - return &file_bridge_proto_enumTypes[3] + return &file_bridge_proto_enumTypes[4] } func (x DiskCacheErrorType) Number() protoreflect.EnumNumber { @@ -261,7 +312,7 @@ func (x DiskCacheErrorType) Number() protoreflect.EnumNumber { // Deprecated: Use DiskCacheErrorType.Descriptor instead. func (DiskCacheErrorType) EnumDescriptor() ([]byte, []int) { - return file_bridge_proto_rawDescGZIP(), []int{3} + return file_bridge_proto_rawDescGZIP(), []int{4} } type MailSettingsErrorType int32 @@ -294,11 +345,11 @@ func (x MailSettingsErrorType) String() string { } func (MailSettingsErrorType) Descriptor() protoreflect.EnumDescriptor { - return file_bridge_proto_enumTypes[4].Descriptor() + return file_bridge_proto_enumTypes[5].Descriptor() } func (MailSettingsErrorType) Type() protoreflect.EnumType { - return &file_bridge_proto_enumTypes[4] + return &file_bridge_proto_enumTypes[5] } func (x MailSettingsErrorType) Number() protoreflect.EnumNumber { @@ -307,7 +358,7 @@ func (x MailSettingsErrorType) Number() protoreflect.EnumNumber { // Deprecated: Use MailSettingsErrorType.Descriptor instead. func (MailSettingsErrorType) EnumDescriptor() ([]byte, []int) { - return file_bridge_proto_rawDescGZIP(), []int{4} + return file_bridge_proto_rawDescGZIP(), []int{5} } type AddLogEntryRequest struct { @@ -673,24 +724,21 @@ func (x *AvailableKeychainsResponse) GetKeychains() []string { return nil } -//********************************************************** -// Cache on disk related messages -//********************************************************** type User struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` - AvatarText string `protobuf:"bytes,3,opt,name=avatarText,proto3" json:"avatarText,omitempty"` - LoggedIn bool `protobuf:"varint,4,opt,name=loggedIn,proto3" json:"loggedIn,omitempty"` - SplitMode bool `protobuf:"varint,5,opt,name=splitMode,proto3" json:"splitMode,omitempty"` - SetupGuideSeen bool `protobuf:"varint,6,opt,name=setupGuideSeen,proto3" json:"setupGuideSeen,omitempty"` - UsedBytes int64 `protobuf:"varint,7,opt,name=usedBytes,proto3" json:"usedBytes,omitempty"` - TotalBytes int64 `protobuf:"varint,8,opt,name=totalBytes,proto3" json:"totalBytes,omitempty"` - Password []byte `protobuf:"bytes,9,opt,name=password,proto3" json:"password,omitempty"` - Addresses []string `protobuf:"bytes,10,rep,name=addresses,proto3" json:"addresses,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` + AvatarText string `protobuf:"bytes,3,opt,name=avatarText,proto3" json:"avatarText,omitempty"` + State UserState `protobuf:"varint,4,opt,name=state,proto3,enum=grpc.UserState" json:"state,omitempty"` + SplitMode bool `protobuf:"varint,5,opt,name=splitMode,proto3" json:"splitMode,omitempty"` + SetupGuideSeen bool `protobuf:"varint,6,opt,name=setupGuideSeen,proto3" json:"setupGuideSeen,omitempty"` + UsedBytes int64 `protobuf:"varint,7,opt,name=usedBytes,proto3" json:"usedBytes,omitempty"` + TotalBytes int64 `protobuf:"varint,8,opt,name=totalBytes,proto3" json:"totalBytes,omitempty"` + Password []byte `protobuf:"bytes,9,opt,name=password,proto3" json:"password,omitempty"` + Addresses []string `protobuf:"bytes,10,rep,name=addresses,proto3" json:"addresses,omitempty"` } func (x *User) Reset() { @@ -746,11 +794,11 @@ func (x *User) GetAvatarText() string { return "" } -func (x *User) GetLoggedIn() bool { +func (x *User) GetState() UserState { if x != nil { - return x.LoggedIn + return x.State } - return false + return UserState_SIGNED_OUT } func (x *User) GetSplitMode() bool { @@ -3682,636 +3730,640 @@ var file_bridge_proto_rawDesc = []byte{ 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x22, - 0xac, 0x02, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0xb7, 0x02, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x54, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, - 0x54, 0x65, 0x78, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x49, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x49, 0x6e, - 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x26, - 0x0a, 0x0e, 0x73, 0x65, 0x74, 0x75, 0x70, 0x47, 0x75, 0x69, 0x64, 0x65, 0x53, 0x65, 0x65, 0x6e, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x65, 0x74, 0x75, 0x70, 0x47, 0x75, 0x69, - 0x64, 0x65, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x64, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x73, 0x65, 0x64, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, - 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x0a, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x46, - 0x0a, 0x14, 0x55, 0x73, 0x65, 0x72, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 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, 0x16, - 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x34, 0x0a, 0x10, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x05, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x4d, 0x0a, 0x19, - 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, 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, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x3c, 0x0a, 0x12, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0xff, 0x02, 0x0a, 0x0b, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x03, 0x61, 0x70, 0x70, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x70, - 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x03, 0x61, 0x70, 0x70, 0x12, 0x28, 0x0a, - 0x05, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x05, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x2b, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x06, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x63, 0x61, 0x63, - 0x68, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x0c, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x12, 0x31, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4b, 0x65, 0x79, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x04, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x69, 0x6c, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x25, 0x0a, 0x04, 0x75, - 0x73, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x75, 0x73, - 0x65, 0x72, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x9d, 0x04, 0x0a, 0x08, - 0x41, 0x70, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x5e, 0x0a, + 0x54, 0x65, 0x78, 0x74, 0x12, 0x25, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, + 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x73, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x65, 0x74, + 0x75, 0x70, 0x47, 0x75, 0x69, 0x64, 0x65, 0x53, 0x65, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0e, 0x73, 0x65, 0x74, 0x75, 0x70, 0x47, 0x75, 0x69, 0x64, 0x65, 0x53, 0x65, 0x65, + 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, + 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, + 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x46, 0x0a, 0x14, 0x55, 0x73, 0x65, + 0x72, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 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, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x22, 0x34, 0x0a, 0x10, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x4d, 0x0a, 0x19, 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, 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, 0x18, 0x0a, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x3c, 0x0a, 0x12, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x22, 0xff, 0x02, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x03, 0x61, 0x70, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x70, 0x70, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x03, 0x61, 0x70, 0x70, 0x12, 0x28, 0x0a, 0x05, 0x6c, 0x6f, 0x67, 0x69, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x6f, 0x67, + 0x69, 0x6e, 0x12, 0x2b, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, + 0x2c, 0x0a, 0x05, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x63, 0x61, 0x63, 0x68, 0x65, 0x12, 0x3d, 0x0a, + 0x0c, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x69, 0x6c, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, + 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x31, 0x0a, 0x08, + 0x6b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, + 0x25, 0x0a, 0x04, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x69, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x04, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x25, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x42, 0x07, 0x0a, + 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x9d, 0x04, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x5e, 0x0a, 0x17, 0x74, 0x6f, 0x67, 0x67, + 0x6c, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, + 0x68, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x6f, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x6f, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x40, 0x0a, - 0x0d, 0x72, 0x65, 0x73, 0x65, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x73, 0x65, - 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, - 0x4c, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x46, 0x69, 0x6e, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x46, 0x69, 0x6e, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x42, 0x75, 0x67, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x49, 0x0a, - 0x10, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, + 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x65, + 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x46, 0x69, 0x6e, 0x69, + 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x65, 0x73, + 0x65, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x4c, 0x0a, 0x11, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, + 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x42, 0x75, 0x67, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x42, 0x75, 0x67, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x10, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x53, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x12, 0x43, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x42, 0x75, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x43, 0x0a, 0x0e, 0x73, 0x68, 0x6f, 0x77, + 0x4d, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x4d, 0x61, 0x69, 0x6e, + 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73, + 0x68, 0x6f, 0x77, 0x4d, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x42, 0x07, 0x0a, + 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x33, 0x0a, 0x13, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0x1e, 0x0a, 0x1c, 0x54, + 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x46, 0x69, + 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x14, 0x0a, 0x12, 0x52, + 0x65, 0x73, 0x65, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x22, 0x18, 0x0a, 0x16, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x46, 0x69, + 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, - 0x67, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x43, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x42, 0x75, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, - 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x72, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x43, 0x0a, - 0x0e, 0x73, 0x68, 0x6f, 0x77, 0x4d, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x68, 0x6f, - 0x77, 0x4d, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x0e, 0x73, 0x68, 0x6f, 0x77, 0x4d, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x33, 0x0a, 0x13, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x22, 0x1e, 0x0a, 0x1c, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x22, 0x14, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x65, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, - 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x18, 0x0a, 0x16, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x42, 0x75, 0x67, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x53, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x15, 0x0a, 0x13, 0x52, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x22, 0x15, 0x0a, 0x13, 0x53, 0x68, 0x6f, 0x77, 0x4d, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xe3, 0x02, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, - 0x69, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x42, 0x0a, 0x0c, 0x74, 0x66, 0x61, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x66, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x66, 0x61, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x5b, 0x0a, 0x14, 0x74, 0x77, 0x6f, + 0x76, 0x65, 0x6e, 0x74, 0x22, 0x15, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, + 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x15, 0x0a, 0x13, 0x53, + 0x68, 0x6f, 0x77, 0x4d, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x22, 0xe3, 0x02, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x12, 0x42, 0x0a, 0x0c, 0x74, 0x66, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, + 0x67, 0x69, 0x6e, 0x54, 0x66, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x66, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x12, 0x5b, 0x0a, 0x14, 0x74, 0x77, 0x6f, 0x50, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, + 0x77, 0x6f, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x74, 0x77, 0x6f, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x77, 0x6f, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x14, 0x74, 0x77, 0x6f, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, - 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x44, - 0x0a, 0x0f, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x49, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x4c, 0x6f, 0x67, 0x67, - 0x65, 0x64, 0x49, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x55, 0x0a, - 0x0f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x28, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x34, 0x0a, 0x16, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x66, 0x61, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 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, 0x21, 0x0a, 0x1f, 0x4c, 0x6f, - 0x67, 0x69, 0x6e, 0x54, 0x77, 0x6f, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x0a, - 0x12, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 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, 0xb9, 0x04, 0x0a, 0x0b, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x40, 0x0a, 0x0b, 0x6d, - 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, - 0x6e, 0x75, 0x61, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x0b, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x58, 0x0a, - 0x13, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x65, - 0x65, 0x64, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x52, 0x65, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x13, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x53, 0x0a, 0x13, 0x73, 0x69, 0x6c, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x53, 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, - 0x65, 0x65, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x13, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x12, 0x47, 0x0a, 0x0f, - 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x49, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x69, - 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, - 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0e, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x42, 0x07, - 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x3d, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x32, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x0a, 0x1e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x0a, 0x10, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x1b, 0x0a, 0x19, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x49, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x15, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, - 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x22, 0x16, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, - 0xeb, 0x01, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, - 0x68, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x43, 0x0a, 0x0b, 0x70, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x70, - 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x12, 0x70, 0x61, - 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, - 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x12, 0x70, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x46, 0x69, 0x6e, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x43, 0x0a, - 0x13, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x22, 0x2f, 0x0a, 0x19, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, - 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x22, 0x22, 0x0a, 0x20, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, - 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, - 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xda, 0x02, 0x0a, 0x11, 0x4d, 0x61, 0x69, 0x6c, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x12, 0x58, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, - 0x53, 0x6d, 0x74, 0x70, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x53, 0x73, 0x6c, - 0x46, 0x6f, 0x72, 0x53, 0x6d, 0x74, 0x70, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x75, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, - 0x72, 0x53, 0x6d, 0x74, 0x70, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x52, 0x0a, - 0x13, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x46, 0x69, 0x6e, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x46, 0x69, 0x6e, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, - 0x64, 0x12, 0x58, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x49, 0x6d, - 0x61, 0x70, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, - 0x72, 0x49, 0x6d, 0x61, 0x70, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x75, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x49, - 0x6d, 0x61, 0x70, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x22, 0x49, 0x0a, 0x16, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2f, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, - 0x1c, 0x0a, 0x1a, 0x55, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x53, 0x6d, 0x74, 0x70, - 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1c, 0x0a, - 0x1a, 0x55, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x49, 0x6d, 0x61, 0x70, 0x46, 0x69, - 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1a, 0x0a, 0x18, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, - 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xff, 0x01, 0x0a, 0x0d, 0x4b, 0x65, 0x79, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x5b, 0x0a, 0x16, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x46, - 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x69, - 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x4e, 0x6f, 0x4b, - 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x61, 0x73, 0x4e, 0x6f, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x68, 0x61, 0x73, 0x4e, 0x6f, - 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x46, 0x0a, 0x0f, 0x72, 0x65, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x0f, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1d, 0x0a, 0x1b, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x14, 0x0a, 0x12, 0x48, 0x61, 0x73, 0x4e, - 0x6f, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x16, - 0x0a, 0x14, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xd9, 0x02, 0x0a, 0x09, 0x4d, 0x61, 0x69, 0x6c, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x68, 0x0a, 0x1c, 0x6e, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x4b, 0x65, 0x79, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x4e, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x46, 0x6f, 0x72, - 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x1c, 0x6e, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x46, 0x6f, 0x72, - 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x43, - 0x0a, 0x0e, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x0e, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x12, 0x55, 0x0a, 0x14, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x70, - 0x69, 0x43, 0x65, 0x72, 0x74, 0x49, 0x73, 0x73, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x70, 0x69, 0x43, 0x65, 0x72, 0x74, 0x49, - 0x73, 0x73, 0x75, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x70, 0x69, - 0x43, 0x65, 0x72, 0x74, 0x49, 0x73, 0x73, 0x75, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x22, 0x34, 0x0a, 0x1c, 0x4e, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4b, 0x65, - 0x79, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x2f, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 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, 0x35, 0x0a, 0x19, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x6f, 0x75, - 0x74, 0x45, 0x76, 0x65, 0x6e, 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, 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, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x74, 0x6f, 0x67, 0x67, - 0x6c, 0x65, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x75, 0x73, - 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x3a, - 0x0a, 0x0b, 0x75, 0x73, 0x65, 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, + 0x64, 0x12, 0x36, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x0f, 0x61, 0x6c, 0x72, + 0x65, 0x61, 0x64, 0x79, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, + 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0f, + 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x42, + 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x55, 0x0a, 0x0f, 0x4c, 0x6f, 0x67, 0x69, + 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x34, 0x0a, 0x16, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x66, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 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, 0x21, 0x0a, 0x1f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x77, + 0x6f, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x69, + 0x6e, 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, 0xb9, 0x04, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x40, 0x0a, 0x0b, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, + 0x52, 0x65, 0x61, 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x52, + 0x65, 0x61, 0x64, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x61, 0x6e, + 0x75, 0x61, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x58, 0x0a, 0x13, 0x6d, 0x61, 0x6e, 0x75, + 0x61, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x6d, + 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x65, 0x65, 0x64, + 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x6f, 0x72, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x66, 0x6f, 0x72, + 0x63, 0x65, 0x12, 0x53, 0x0a, 0x13, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x69, 0x6c, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, + 0x48, 0x00, 0x52, 0x13, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x12, 0x47, 0x0a, 0x0f, 0x69, 0x73, 0x4c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x73, + 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x0f, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x41, 0x0a, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, + 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, + 0x65, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x69, 0x6e, 0x69, 0x73, + 0x68, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0e, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x22, 0x3d, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x22, 0x32, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, + 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, + 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x65, 0x65, 0x64, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x1b, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, + 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x65, 0x65, 0x64, + 0x65, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x73, 0x4c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x15, 0x0a, 0x13, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, + 0x65, 0x64, 0x22, 0x16, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0xeb, 0x01, 0x0a, 0x0e, 0x44, + 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x12, 0x43, 0x0a, 0x0b, 0x70, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x73, + 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x61, 0x74, 0x68, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x12, 0x70, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x46, 0x69, 0x6e, 0x69, + 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x70, 0x61, 0x74, + 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x42, + 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x43, 0x0a, 0x13, 0x44, 0x69, 0x73, 0x6b, + 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x2c, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2f, 0x0a, + 0x19, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x22, + 0x0a, 0x20, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x22, 0xda, 0x02, 0x0a, 0x11, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x58, + 0x0a, 0x15, 0x75, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x53, 0x6d, 0x74, 0x70, 0x46, + 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x53, 0x6d, + 0x74, 0x70, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x15, 0x75, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x53, 0x6d, 0x74, 0x70, + 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x52, 0x0a, 0x13, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, + 0x6f, 0x72, 0x74, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x15, + 0x75, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x49, 0x6d, 0x61, 0x70, 0x46, 0x69, 0x6e, + 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x49, 0x6d, 0x61, 0x70, + 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x15, 0x75, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x49, 0x6d, 0x61, 0x70, 0x46, 0x69, + 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, + 0x49, 0x0a, 0x16, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x55, 0x73, + 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x53, 0x6d, 0x74, 0x70, 0x46, 0x69, 0x6e, 0x69, 0x73, + 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1c, 0x0a, 0x1a, 0x55, 0x73, 0x65, 0x53, + 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x49, 0x6d, 0x61, 0x70, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, + 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1a, 0x0a, 0x18, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x50, 0x6f, 0x72, 0x74, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x22, 0xff, 0x01, 0x0a, 0x0d, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x5b, 0x0a, 0x16, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4b, 0x65, + 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, + 0x64, 0x12, 0x40, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x4e, 0x6f, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x48, 0x61, 0x73, 0x4e, 0x6f, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x68, 0x61, 0x73, 0x4e, 0x6f, 0x4b, 0x65, 0x79, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x12, 0x46, 0x0a, 0x0f, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, + 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1d, 0x0a, 0x1b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4b, 0x65, + 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x22, 0x14, 0x0a, 0x12, 0x48, 0x61, 0x73, 0x4e, 0x6f, 0x4b, 0x65, 0x79, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x22, 0xd9, 0x02, 0x0a, 0x09, 0x4d, 0x61, 0x69, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x68, 0x0a, 0x1c, 0x6e, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x46, 0x6f, + 0x72, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x41, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x63, 0x69, 0x70, + 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x6e, 0x6f, 0x41, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x63, 0x69, 0x70, + 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0e, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x55, + 0x0a, 0x14, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x14, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4c, + 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x70, 0x69, 0x43, 0x65, 0x72, 0x74, + 0x49, 0x73, 0x73, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x41, 0x70, 0x69, 0x43, 0x65, 0x72, 0x74, 0x49, 0x73, 0x73, 0x75, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x70, 0x69, 0x43, 0x65, 0x72, 0x74, 0x49, + 0x73, 0x73, 0x75, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x34, 0x0a, + 0x1c, 0x4e, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x46, 0x6f, 0x72, 0x52, + 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, + 0x61, 0x69, 0x6c, 0x22, 0x2f, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 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, 0x35, 0x0a, 0x19, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x45, 0x76, 0x65, 0x6e, + 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, + 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, 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, 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, - 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, 0x41, - 0x0a, 0x15, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4d, 0x41, 0x50, 0x5f, - 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x49, 0x53, 0x53, 0x55, 0x45, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, - 0x53, 0x4d, 0x54, 0x50, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x49, 0x53, 0x53, 0x55, 0x45, 0x10, - 0x01, 0x32, 0xa7, 0x20, 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, 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, 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, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x53, 0x70, 0x6c, + 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x49, + 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x44, 0x69, 0x73, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x0b, 0x75, 0x73, 0x65, + 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, 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, 0x41, 0x0a, 0x15, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4d, + 0x41, 0x50, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x49, 0x53, 0x53, 0x55, 0x45, 0x10, 0x00, 0x12, + 0x13, 0x0a, 0x0f, 0x53, 0x4d, 0x54, 0x50, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x49, 0x53, 0x53, + 0x55, 0x45, 0x10, 0x01, 0x32, 0xa7, 0x20, 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, 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, + 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, 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, 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, + 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, - 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, + 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, 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, 0x46, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x55, 0x73, 0x65, 0x53, - 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x53, 0x6d, 0x74, 0x70, 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, 0x55, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x53, 0x6d, 0x74, 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, 0x65, 0x74, 0x55, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, - 0x6f, 0x72, 0x49, 0x6d, 0x61, 0x70, 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, 0x55, 0x73, - 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x49, 0x6d, 0x61, 0x70, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 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, - 0x40, 0x0a, 0x08, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 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, 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, 0x3f, 0x0a, 0x08, 0x49, 0x6d, 0x61, 0x70, 0x50, 0x6f, 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, 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, 0x12, 0x3f, 0x0a, 0x08, 0x53, 0x6d, 0x74, 0x70, 0x50, 0x6f, 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, 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, 0x12, 0x3f, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x6f, 0x72, - 0x74, 0x73, 0x12, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x50, 0x6f, 0x72, 0x74, 0x73, 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, 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, + 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, 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, + 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, 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, + 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, 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, 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, 0x32, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 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, 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, 0x46, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x55, + 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x53, 0x6d, 0x74, 0x70, 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, 0x55, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x53, 0x6d, 0x74, + 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, 0x65, 0x74, 0x55, 0x73, 0x65, 0x53, + 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x49, 0x6d, 0x61, 0x70, 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, 0x55, 0x73, 0x65, 0x53, 0x73, 0x6c, 0x46, 0x6f, 0x72, 0x49, 0x6d, 0x61, 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, 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, 0x3f, 0x0a, 0x08, 0x49, 0x6d, 0x61, 0x70, 0x50, 0x6f, 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, 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, 0x12, 0x3f, 0x0a, 0x08, 0x53, 0x6d, 0x74, 0x70, 0x50, 0x6f, 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, 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, 0x12, 0x3f, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x73, 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, 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, 0x32, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4326,252 +4378,254 @@ func file_bridge_proto_rawDescGZIP() []byte { return file_bridge_proto_rawDescData } -var file_bridge_proto_enumTypes = make([]protoimpl.EnumInfo, 5) +var file_bridge_proto_enumTypes = make([]protoimpl.EnumInfo, 6) var file_bridge_proto_msgTypes = make([]protoimpl.MessageInfo, 56) var file_bridge_proto_goTypes = []interface{}{ (LogLevel)(0), // 0: grpc.LogLevel - (LoginErrorType)(0), // 1: grpc.LoginErrorType - (UpdateErrorType)(0), // 2: grpc.UpdateErrorType - (DiskCacheErrorType)(0), // 3: grpc.DiskCacheErrorType - (MailSettingsErrorType)(0), // 4: grpc.MailSettingsErrorType - (*AddLogEntryRequest)(nil), // 5: grpc.AddLogEntryRequest - (*ReportBugRequest)(nil), // 6: grpc.ReportBugRequest - (*LoginRequest)(nil), // 7: grpc.LoginRequest - (*LoginAbortRequest)(nil), // 8: grpc.LoginAbortRequest - (*ChangePortsRequest)(nil), // 9: grpc.ChangePortsRequest - (*AvailableKeychainsResponse)(nil), // 10: grpc.AvailableKeychainsResponse - (*User)(nil), // 11: grpc.User - (*UserSplitModeRequest)(nil), // 12: grpc.UserSplitModeRequest - (*UserListResponse)(nil), // 13: grpc.UserListResponse - (*ConfigureAppleMailRequest)(nil), // 14: grpc.ConfigureAppleMailRequest - (*EventStreamRequest)(nil), // 15: grpc.EventStreamRequest - (*StreamEvent)(nil), // 16: grpc.StreamEvent - (*AppEvent)(nil), // 17: grpc.AppEvent - (*InternetStatusEvent)(nil), // 18: grpc.InternetStatusEvent - (*ToggleAutostartFinishedEvent)(nil), // 19: grpc.ToggleAutostartFinishedEvent - (*ResetFinishedEvent)(nil), // 20: grpc.ResetFinishedEvent - (*ReportBugFinishedEvent)(nil), // 21: grpc.ReportBugFinishedEvent - (*ReportBugSuccessEvent)(nil), // 22: grpc.ReportBugSuccessEvent - (*ReportBugErrorEvent)(nil), // 23: grpc.ReportBugErrorEvent - (*ShowMainWindowEvent)(nil), // 24: grpc.ShowMainWindowEvent - (*LoginEvent)(nil), // 25: grpc.LoginEvent - (*LoginErrorEvent)(nil), // 26: grpc.LoginErrorEvent - (*LoginTfaRequestedEvent)(nil), // 27: grpc.LoginTfaRequestedEvent - (*LoginTwoPasswordsRequestedEvent)(nil), // 28: grpc.LoginTwoPasswordsRequestedEvent - (*LoginFinishedEvent)(nil), // 29: grpc.LoginFinishedEvent - (*UpdateEvent)(nil), // 30: grpc.UpdateEvent - (*UpdateErrorEvent)(nil), // 31: grpc.UpdateErrorEvent - (*UpdateManualReadyEvent)(nil), // 32: grpc.UpdateManualReadyEvent - (*UpdateManualRestartNeededEvent)(nil), // 33: grpc.UpdateManualRestartNeededEvent - (*UpdateForceEvent)(nil), // 34: grpc.UpdateForceEvent - (*UpdateSilentRestartNeeded)(nil), // 35: grpc.UpdateSilentRestartNeeded - (*UpdateIsLatestVersion)(nil), // 36: grpc.UpdateIsLatestVersion - (*UpdateCheckFinished)(nil), // 37: grpc.UpdateCheckFinished - (*UpdateVersionChanged)(nil), // 38: grpc.UpdateVersionChanged - (*DiskCacheEvent)(nil), // 39: grpc.DiskCacheEvent - (*DiskCacheErrorEvent)(nil), // 40: grpc.DiskCacheErrorEvent - (*DiskCachePathChangedEvent)(nil), // 41: grpc.DiskCachePathChangedEvent - (*DiskCachePathChangeFinishedEvent)(nil), // 42: grpc.DiskCachePathChangeFinishedEvent - (*MailSettingsEvent)(nil), // 43: grpc.MailSettingsEvent - (*MailSettingsErrorEvent)(nil), // 44: grpc.MailSettingsErrorEvent - (*UseSslForSmtpFinishedEvent)(nil), // 45: grpc.UseSslForSmtpFinishedEvent - (*UseSslForImapFinishedEvent)(nil), // 46: grpc.UseSslForImapFinishedEvent - (*ChangePortsFinishedEvent)(nil), // 47: grpc.ChangePortsFinishedEvent - (*KeychainEvent)(nil), // 48: grpc.KeychainEvent - (*ChangeKeychainFinishedEvent)(nil), // 49: grpc.ChangeKeychainFinishedEvent - (*HasNoKeychainEvent)(nil), // 50: grpc.HasNoKeychainEvent - (*RebuildKeychainEvent)(nil), // 51: grpc.RebuildKeychainEvent - (*MailEvent)(nil), // 52: grpc.MailEvent - (*NoActiveKeyForRecipientEvent)(nil), // 53: grpc.NoActiveKeyForRecipientEvent - (*AddressChangedEvent)(nil), // 54: grpc.AddressChangedEvent - (*AddressChangedLogoutEvent)(nil), // 55: grpc.AddressChangedLogoutEvent - (*ApiCertIssueEvent)(nil), // 56: grpc.ApiCertIssueEvent - (*UserEvent)(nil), // 57: grpc.UserEvent - (*ToggleSplitModeFinishedEvent)(nil), // 58: grpc.ToggleSplitModeFinishedEvent - (*UserDisconnectedEvent)(nil), // 59: grpc.UserDisconnectedEvent - (*UserChangedEvent)(nil), // 60: grpc.UserChangedEvent - (*wrapperspb.StringValue)(nil), // 61: google.protobuf.StringValue - (*emptypb.Empty)(nil), // 62: google.protobuf.Empty - (*wrapperspb.BoolValue)(nil), // 63: google.protobuf.BoolValue - (*wrapperspb.Int32Value)(nil), // 64: google.protobuf.Int32Value + (UserState)(0), // 1: grpc.UserState + (LoginErrorType)(0), // 2: grpc.LoginErrorType + (UpdateErrorType)(0), // 3: grpc.UpdateErrorType + (DiskCacheErrorType)(0), // 4: grpc.DiskCacheErrorType + (MailSettingsErrorType)(0), // 5: grpc.MailSettingsErrorType + (*AddLogEntryRequest)(nil), // 6: grpc.AddLogEntryRequest + (*ReportBugRequest)(nil), // 7: grpc.ReportBugRequest + (*LoginRequest)(nil), // 8: grpc.LoginRequest + (*LoginAbortRequest)(nil), // 9: grpc.LoginAbortRequest + (*ChangePortsRequest)(nil), // 10: grpc.ChangePortsRequest + (*AvailableKeychainsResponse)(nil), // 11: grpc.AvailableKeychainsResponse + (*User)(nil), // 12: grpc.User + (*UserSplitModeRequest)(nil), // 13: grpc.UserSplitModeRequest + (*UserListResponse)(nil), // 14: grpc.UserListResponse + (*ConfigureAppleMailRequest)(nil), // 15: grpc.ConfigureAppleMailRequest + (*EventStreamRequest)(nil), // 16: grpc.EventStreamRequest + (*StreamEvent)(nil), // 17: grpc.StreamEvent + (*AppEvent)(nil), // 18: grpc.AppEvent + (*InternetStatusEvent)(nil), // 19: grpc.InternetStatusEvent + (*ToggleAutostartFinishedEvent)(nil), // 20: grpc.ToggleAutostartFinishedEvent + (*ResetFinishedEvent)(nil), // 21: grpc.ResetFinishedEvent + (*ReportBugFinishedEvent)(nil), // 22: grpc.ReportBugFinishedEvent + (*ReportBugSuccessEvent)(nil), // 23: grpc.ReportBugSuccessEvent + (*ReportBugErrorEvent)(nil), // 24: grpc.ReportBugErrorEvent + (*ShowMainWindowEvent)(nil), // 25: grpc.ShowMainWindowEvent + (*LoginEvent)(nil), // 26: grpc.LoginEvent + (*LoginErrorEvent)(nil), // 27: grpc.LoginErrorEvent + (*LoginTfaRequestedEvent)(nil), // 28: grpc.LoginTfaRequestedEvent + (*LoginTwoPasswordsRequestedEvent)(nil), // 29: grpc.LoginTwoPasswordsRequestedEvent + (*LoginFinishedEvent)(nil), // 30: grpc.LoginFinishedEvent + (*UpdateEvent)(nil), // 31: grpc.UpdateEvent + (*UpdateErrorEvent)(nil), // 32: grpc.UpdateErrorEvent + (*UpdateManualReadyEvent)(nil), // 33: grpc.UpdateManualReadyEvent + (*UpdateManualRestartNeededEvent)(nil), // 34: grpc.UpdateManualRestartNeededEvent + (*UpdateForceEvent)(nil), // 35: grpc.UpdateForceEvent + (*UpdateSilentRestartNeeded)(nil), // 36: grpc.UpdateSilentRestartNeeded + (*UpdateIsLatestVersion)(nil), // 37: grpc.UpdateIsLatestVersion + (*UpdateCheckFinished)(nil), // 38: grpc.UpdateCheckFinished + (*UpdateVersionChanged)(nil), // 39: grpc.UpdateVersionChanged + (*DiskCacheEvent)(nil), // 40: grpc.DiskCacheEvent + (*DiskCacheErrorEvent)(nil), // 41: grpc.DiskCacheErrorEvent + (*DiskCachePathChangedEvent)(nil), // 42: grpc.DiskCachePathChangedEvent + (*DiskCachePathChangeFinishedEvent)(nil), // 43: grpc.DiskCachePathChangeFinishedEvent + (*MailSettingsEvent)(nil), // 44: grpc.MailSettingsEvent + (*MailSettingsErrorEvent)(nil), // 45: grpc.MailSettingsErrorEvent + (*UseSslForSmtpFinishedEvent)(nil), // 46: grpc.UseSslForSmtpFinishedEvent + (*UseSslForImapFinishedEvent)(nil), // 47: grpc.UseSslForImapFinishedEvent + (*ChangePortsFinishedEvent)(nil), // 48: grpc.ChangePortsFinishedEvent + (*KeychainEvent)(nil), // 49: grpc.KeychainEvent + (*ChangeKeychainFinishedEvent)(nil), // 50: grpc.ChangeKeychainFinishedEvent + (*HasNoKeychainEvent)(nil), // 51: grpc.HasNoKeychainEvent + (*RebuildKeychainEvent)(nil), // 52: grpc.RebuildKeychainEvent + (*MailEvent)(nil), // 53: grpc.MailEvent + (*NoActiveKeyForRecipientEvent)(nil), // 54: grpc.NoActiveKeyForRecipientEvent + (*AddressChangedEvent)(nil), // 55: grpc.AddressChangedEvent + (*AddressChangedLogoutEvent)(nil), // 56: grpc.AddressChangedLogoutEvent + (*ApiCertIssueEvent)(nil), // 57: grpc.ApiCertIssueEvent + (*UserEvent)(nil), // 58: grpc.UserEvent + (*ToggleSplitModeFinishedEvent)(nil), // 59: grpc.ToggleSplitModeFinishedEvent + (*UserDisconnectedEvent)(nil), // 60: grpc.UserDisconnectedEvent + (*UserChangedEvent)(nil), // 61: grpc.UserChangedEvent + (*wrapperspb.StringValue)(nil), // 62: google.protobuf.StringValue + (*emptypb.Empty)(nil), // 63: google.protobuf.Empty + (*wrapperspb.BoolValue)(nil), // 64: google.protobuf.BoolValue + (*wrapperspb.Int32Value)(nil), // 65: google.protobuf.Int32Value } var file_bridge_proto_depIdxs = []int32{ 0, // 0: grpc.AddLogEntryRequest.level:type_name -> grpc.LogLevel - 11, // 1: grpc.UserListResponse.users:type_name -> grpc.User - 17, // 2: grpc.StreamEvent.app:type_name -> grpc.AppEvent - 25, // 3: grpc.StreamEvent.login:type_name -> grpc.LoginEvent - 30, // 4: grpc.StreamEvent.update:type_name -> grpc.UpdateEvent - 39, // 5: grpc.StreamEvent.cache:type_name -> grpc.DiskCacheEvent - 43, // 6: grpc.StreamEvent.mailSettings:type_name -> grpc.MailSettingsEvent - 48, // 7: grpc.StreamEvent.keychain:type_name -> grpc.KeychainEvent - 52, // 8: grpc.StreamEvent.mail:type_name -> grpc.MailEvent - 57, // 9: grpc.StreamEvent.user:type_name -> grpc.UserEvent - 18, // 10: grpc.AppEvent.internetStatus:type_name -> grpc.InternetStatusEvent - 19, // 11: grpc.AppEvent.toggleAutostartFinished:type_name -> grpc.ToggleAutostartFinishedEvent - 20, // 12: grpc.AppEvent.resetFinished:type_name -> grpc.ResetFinishedEvent - 21, // 13: grpc.AppEvent.reportBugFinished:type_name -> grpc.ReportBugFinishedEvent - 22, // 14: grpc.AppEvent.reportBugSuccess:type_name -> grpc.ReportBugSuccessEvent - 23, // 15: grpc.AppEvent.reportBugError:type_name -> grpc.ReportBugErrorEvent - 24, // 16: grpc.AppEvent.showMainWindow:type_name -> grpc.ShowMainWindowEvent - 26, // 17: grpc.LoginEvent.error:type_name -> grpc.LoginErrorEvent - 27, // 18: grpc.LoginEvent.tfaRequested:type_name -> grpc.LoginTfaRequestedEvent - 28, // 19: grpc.LoginEvent.twoPasswordRequested:type_name -> grpc.LoginTwoPasswordsRequestedEvent - 29, // 20: grpc.LoginEvent.finished:type_name -> grpc.LoginFinishedEvent - 29, // 21: grpc.LoginEvent.alreadyLoggedIn:type_name -> grpc.LoginFinishedEvent - 1, // 22: grpc.LoginErrorEvent.type:type_name -> grpc.LoginErrorType - 31, // 23: grpc.UpdateEvent.error:type_name -> grpc.UpdateErrorEvent - 32, // 24: grpc.UpdateEvent.manualReady:type_name -> grpc.UpdateManualReadyEvent - 33, // 25: grpc.UpdateEvent.manualRestartNeeded:type_name -> grpc.UpdateManualRestartNeededEvent - 34, // 26: grpc.UpdateEvent.force:type_name -> grpc.UpdateForceEvent - 35, // 27: grpc.UpdateEvent.silentRestartNeeded:type_name -> grpc.UpdateSilentRestartNeeded - 36, // 28: grpc.UpdateEvent.isLatestVersion:type_name -> grpc.UpdateIsLatestVersion - 37, // 29: grpc.UpdateEvent.checkFinished:type_name -> grpc.UpdateCheckFinished - 38, // 30: grpc.UpdateEvent.versionChanged:type_name -> grpc.UpdateVersionChanged - 2, // 31: grpc.UpdateErrorEvent.type:type_name -> grpc.UpdateErrorType - 40, // 32: grpc.DiskCacheEvent.error:type_name -> grpc.DiskCacheErrorEvent - 41, // 33: grpc.DiskCacheEvent.pathChanged:type_name -> grpc.DiskCachePathChangedEvent - 42, // 34: grpc.DiskCacheEvent.pathChangeFinished:type_name -> grpc.DiskCachePathChangeFinishedEvent - 3, // 35: grpc.DiskCacheErrorEvent.type:type_name -> grpc.DiskCacheErrorType - 44, // 36: grpc.MailSettingsEvent.error:type_name -> grpc.MailSettingsErrorEvent - 45, // 37: grpc.MailSettingsEvent.useSslForSmtpFinished:type_name -> grpc.UseSslForSmtpFinishedEvent - 47, // 38: grpc.MailSettingsEvent.changePortsFinished:type_name -> grpc.ChangePortsFinishedEvent - 46, // 39: grpc.MailSettingsEvent.useSslForImapFinished:type_name -> grpc.UseSslForImapFinishedEvent - 4, // 40: grpc.MailSettingsErrorEvent.type:type_name -> grpc.MailSettingsErrorType - 49, // 41: grpc.KeychainEvent.changeKeychainFinished:type_name -> grpc.ChangeKeychainFinishedEvent - 50, // 42: grpc.KeychainEvent.hasNoKeychain:type_name -> grpc.HasNoKeychainEvent - 51, // 43: grpc.KeychainEvent.rebuildKeychain:type_name -> grpc.RebuildKeychainEvent - 53, // 44: grpc.MailEvent.noActiveKeyForRecipientEvent:type_name -> grpc.NoActiveKeyForRecipientEvent - 54, // 45: grpc.MailEvent.addressChanged:type_name -> grpc.AddressChangedEvent - 55, // 46: grpc.MailEvent.addressChangedLogout:type_name -> grpc.AddressChangedLogoutEvent - 56, // 47: grpc.MailEvent.apiCertIssue:type_name -> grpc.ApiCertIssueEvent - 58, // 48: grpc.UserEvent.toggleSplitModeFinished:type_name -> grpc.ToggleSplitModeFinishedEvent - 59, // 49: grpc.UserEvent.userDisconnected:type_name -> grpc.UserDisconnectedEvent - 60, // 50: grpc.UserEvent.userChanged:type_name -> grpc.UserChangedEvent - 61, // 51: grpc.Bridge.CheckTokens:input_type -> google.protobuf.StringValue - 5, // 52: grpc.Bridge.AddLogEntry:input_type -> grpc.AddLogEntryRequest - 62, // 53: grpc.Bridge.GuiReady:input_type -> google.protobuf.Empty - 62, // 54: grpc.Bridge.Quit:input_type -> google.protobuf.Empty - 62, // 55: grpc.Bridge.Restart:input_type -> google.protobuf.Empty - 62, // 56: grpc.Bridge.ShowOnStartup:input_type -> google.protobuf.Empty - 62, // 57: grpc.Bridge.ShowSplashScreen:input_type -> google.protobuf.Empty - 62, // 58: grpc.Bridge.IsFirstGuiStart:input_type -> google.protobuf.Empty - 63, // 59: grpc.Bridge.SetIsAutostartOn:input_type -> google.protobuf.BoolValue - 62, // 60: grpc.Bridge.IsAutostartOn:input_type -> google.protobuf.Empty - 63, // 61: grpc.Bridge.SetIsBetaEnabled:input_type -> google.protobuf.BoolValue - 62, // 62: grpc.Bridge.IsBetaEnabled:input_type -> google.protobuf.Empty - 63, // 63: grpc.Bridge.SetIsAllMailVisible:input_type -> google.protobuf.BoolValue - 62, // 64: grpc.Bridge.IsAllMailVisible:input_type -> google.protobuf.Empty - 62, // 65: grpc.Bridge.GoOs:input_type -> google.protobuf.Empty - 62, // 66: grpc.Bridge.TriggerReset:input_type -> google.protobuf.Empty - 62, // 67: grpc.Bridge.Version:input_type -> google.protobuf.Empty - 62, // 68: grpc.Bridge.LogsPath:input_type -> google.protobuf.Empty - 62, // 69: grpc.Bridge.LicensePath:input_type -> google.protobuf.Empty - 62, // 70: grpc.Bridge.ReleaseNotesPageLink:input_type -> google.protobuf.Empty - 62, // 71: grpc.Bridge.DependencyLicensesLink:input_type -> google.protobuf.Empty - 62, // 72: grpc.Bridge.LandingPageLink:input_type -> google.protobuf.Empty - 61, // 73: grpc.Bridge.SetColorSchemeName:input_type -> google.protobuf.StringValue - 62, // 74: grpc.Bridge.ColorSchemeName:input_type -> google.protobuf.Empty - 62, // 75: grpc.Bridge.CurrentEmailClient:input_type -> google.protobuf.Empty - 6, // 76: grpc.Bridge.ReportBug:input_type -> grpc.ReportBugRequest - 61, // 77: grpc.Bridge.ForceLauncher:input_type -> google.protobuf.StringValue - 61, // 78: grpc.Bridge.SetMainExecutable:input_type -> google.protobuf.StringValue - 7, // 79: grpc.Bridge.Login:input_type -> grpc.LoginRequest - 7, // 80: grpc.Bridge.Login2FA:input_type -> grpc.LoginRequest - 7, // 81: grpc.Bridge.Login2Passwords:input_type -> grpc.LoginRequest - 8, // 82: grpc.Bridge.LoginAbort:input_type -> grpc.LoginAbortRequest - 62, // 83: grpc.Bridge.CheckUpdate:input_type -> google.protobuf.Empty - 62, // 84: grpc.Bridge.InstallUpdate:input_type -> google.protobuf.Empty - 63, // 85: grpc.Bridge.SetIsAutomaticUpdateOn:input_type -> google.protobuf.BoolValue - 62, // 86: grpc.Bridge.IsAutomaticUpdateOn:input_type -> google.protobuf.Empty - 62, // 87: grpc.Bridge.DiskCachePath:input_type -> google.protobuf.Empty - 61, // 88: grpc.Bridge.SetDiskCachePath:input_type -> google.protobuf.StringValue - 63, // 89: grpc.Bridge.SetIsDoHEnabled:input_type -> google.protobuf.BoolValue - 62, // 90: grpc.Bridge.IsDoHEnabled:input_type -> google.protobuf.Empty - 63, // 91: grpc.Bridge.SetUseSslForSmtp:input_type -> google.protobuf.BoolValue - 62, // 92: grpc.Bridge.UseSslForSmtp:input_type -> google.protobuf.Empty - 63, // 93: grpc.Bridge.SetUseSslForImap:input_type -> google.protobuf.BoolValue - 62, // 94: grpc.Bridge.UseSslForImap:input_type -> google.protobuf.Empty - 62, // 95: grpc.Bridge.Hostname:input_type -> google.protobuf.Empty - 62, // 96: grpc.Bridge.ImapPort:input_type -> google.protobuf.Empty - 62, // 97: grpc.Bridge.SmtpPort:input_type -> google.protobuf.Empty - 9, // 98: grpc.Bridge.ChangePorts:input_type -> grpc.ChangePortsRequest - 64, // 99: grpc.Bridge.IsPortFree:input_type -> google.protobuf.Int32Value - 62, // 100: grpc.Bridge.AvailableKeychains:input_type -> google.protobuf.Empty - 61, // 101: grpc.Bridge.SetCurrentKeychain:input_type -> google.protobuf.StringValue - 62, // 102: grpc.Bridge.CurrentKeychain:input_type -> google.protobuf.Empty - 62, // 103: grpc.Bridge.GetUserList:input_type -> google.protobuf.Empty - 61, // 104: grpc.Bridge.GetUser:input_type -> google.protobuf.StringValue - 12, // 105: grpc.Bridge.SetUserSplitMode:input_type -> grpc.UserSplitModeRequest - 61, // 106: grpc.Bridge.LogoutUser:input_type -> google.protobuf.StringValue - 61, // 107: grpc.Bridge.RemoveUser:input_type -> google.protobuf.StringValue - 14, // 108: grpc.Bridge.ConfigureUserAppleMail:input_type -> grpc.ConfigureAppleMailRequest - 15, // 109: grpc.Bridge.RunEventStream:input_type -> grpc.EventStreamRequest - 62, // 110: grpc.Bridge.StopEventStream:input_type -> google.protobuf.Empty - 61, // 111: grpc.Bridge.CheckTokens:output_type -> google.protobuf.StringValue - 62, // 112: grpc.Bridge.AddLogEntry:output_type -> google.protobuf.Empty - 62, // 113: grpc.Bridge.GuiReady:output_type -> google.protobuf.Empty - 62, // 114: grpc.Bridge.Quit:output_type -> google.protobuf.Empty - 62, // 115: grpc.Bridge.Restart:output_type -> google.protobuf.Empty - 63, // 116: grpc.Bridge.ShowOnStartup:output_type -> google.protobuf.BoolValue - 63, // 117: grpc.Bridge.ShowSplashScreen:output_type -> google.protobuf.BoolValue - 63, // 118: grpc.Bridge.IsFirstGuiStart:output_type -> google.protobuf.BoolValue - 62, // 119: grpc.Bridge.SetIsAutostartOn:output_type -> google.protobuf.Empty - 63, // 120: grpc.Bridge.IsAutostartOn:output_type -> google.protobuf.BoolValue - 62, // 121: grpc.Bridge.SetIsBetaEnabled:output_type -> google.protobuf.Empty - 63, // 122: grpc.Bridge.IsBetaEnabled:output_type -> google.protobuf.BoolValue - 62, // 123: grpc.Bridge.SetIsAllMailVisible:output_type -> google.protobuf.Empty - 63, // 124: grpc.Bridge.IsAllMailVisible:output_type -> google.protobuf.BoolValue - 61, // 125: grpc.Bridge.GoOs:output_type -> google.protobuf.StringValue - 62, // 126: grpc.Bridge.TriggerReset:output_type -> google.protobuf.Empty - 61, // 127: grpc.Bridge.Version:output_type -> google.protobuf.StringValue - 61, // 128: grpc.Bridge.LogsPath:output_type -> google.protobuf.StringValue - 61, // 129: grpc.Bridge.LicensePath:output_type -> google.protobuf.StringValue - 61, // 130: grpc.Bridge.ReleaseNotesPageLink:output_type -> google.protobuf.StringValue - 61, // 131: grpc.Bridge.DependencyLicensesLink:output_type -> google.protobuf.StringValue - 61, // 132: grpc.Bridge.LandingPageLink:output_type -> google.protobuf.StringValue - 62, // 133: grpc.Bridge.SetColorSchemeName:output_type -> google.protobuf.Empty - 61, // 134: grpc.Bridge.ColorSchemeName:output_type -> google.protobuf.StringValue - 61, // 135: grpc.Bridge.CurrentEmailClient:output_type -> google.protobuf.StringValue - 62, // 136: grpc.Bridge.ReportBug:output_type -> google.protobuf.Empty - 62, // 137: grpc.Bridge.ForceLauncher:output_type -> google.protobuf.Empty - 62, // 138: grpc.Bridge.SetMainExecutable:output_type -> google.protobuf.Empty - 62, // 139: grpc.Bridge.Login:output_type -> google.protobuf.Empty - 62, // 140: grpc.Bridge.Login2FA:output_type -> google.protobuf.Empty - 62, // 141: grpc.Bridge.Login2Passwords:output_type -> google.protobuf.Empty - 62, // 142: grpc.Bridge.LoginAbort:output_type -> google.protobuf.Empty - 62, // 143: grpc.Bridge.CheckUpdate:output_type -> google.protobuf.Empty - 62, // 144: grpc.Bridge.InstallUpdate:output_type -> google.protobuf.Empty - 62, // 145: grpc.Bridge.SetIsAutomaticUpdateOn:output_type -> google.protobuf.Empty - 63, // 146: grpc.Bridge.IsAutomaticUpdateOn:output_type -> google.protobuf.BoolValue - 61, // 147: grpc.Bridge.DiskCachePath:output_type -> google.protobuf.StringValue - 62, // 148: grpc.Bridge.SetDiskCachePath:output_type -> google.protobuf.Empty - 62, // 149: grpc.Bridge.SetIsDoHEnabled:output_type -> google.protobuf.Empty - 63, // 150: grpc.Bridge.IsDoHEnabled:output_type -> google.protobuf.BoolValue - 62, // 151: grpc.Bridge.SetUseSslForSmtp:output_type -> google.protobuf.Empty - 63, // 152: grpc.Bridge.UseSslForSmtp:output_type -> google.protobuf.BoolValue - 62, // 153: grpc.Bridge.SetUseSslForImap:output_type -> google.protobuf.Empty - 63, // 154: grpc.Bridge.UseSslForImap:output_type -> google.protobuf.BoolValue - 61, // 155: grpc.Bridge.Hostname:output_type -> google.protobuf.StringValue - 64, // 156: grpc.Bridge.ImapPort:output_type -> google.protobuf.Int32Value - 64, // 157: grpc.Bridge.SmtpPort:output_type -> google.protobuf.Int32Value - 62, // 158: grpc.Bridge.ChangePorts:output_type -> google.protobuf.Empty - 63, // 159: grpc.Bridge.IsPortFree:output_type -> google.protobuf.BoolValue - 10, // 160: grpc.Bridge.AvailableKeychains:output_type -> grpc.AvailableKeychainsResponse - 62, // 161: grpc.Bridge.SetCurrentKeychain:output_type -> google.protobuf.Empty - 61, // 162: grpc.Bridge.CurrentKeychain:output_type -> google.protobuf.StringValue - 13, // 163: grpc.Bridge.GetUserList:output_type -> grpc.UserListResponse - 11, // 164: grpc.Bridge.GetUser:output_type -> grpc.User - 62, // 165: grpc.Bridge.SetUserSplitMode:output_type -> google.protobuf.Empty - 62, // 166: grpc.Bridge.LogoutUser:output_type -> google.protobuf.Empty - 62, // 167: grpc.Bridge.RemoveUser:output_type -> google.protobuf.Empty - 62, // 168: grpc.Bridge.ConfigureUserAppleMail:output_type -> google.protobuf.Empty - 16, // 169: grpc.Bridge.RunEventStream:output_type -> grpc.StreamEvent - 62, // 170: grpc.Bridge.StopEventStream:output_type -> google.protobuf.Empty - 111, // [111:171] is the sub-list for method output_type - 51, // [51:111] is the sub-list for method input_type - 51, // [51:51] is the sub-list for extension type_name - 51, // [51:51] is the sub-list for extension extendee - 0, // [0:51] is the sub-list for field type_name + 1, // 1: grpc.User.state:type_name -> grpc.UserState + 12, // 2: grpc.UserListResponse.users:type_name -> grpc.User + 18, // 3: grpc.StreamEvent.app:type_name -> grpc.AppEvent + 26, // 4: grpc.StreamEvent.login:type_name -> grpc.LoginEvent + 31, // 5: grpc.StreamEvent.update:type_name -> grpc.UpdateEvent + 40, // 6: grpc.StreamEvent.cache:type_name -> grpc.DiskCacheEvent + 44, // 7: grpc.StreamEvent.mailSettings:type_name -> grpc.MailSettingsEvent + 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 + 19, // 11: grpc.AppEvent.internetStatus:type_name -> grpc.InternetStatusEvent + 20, // 12: grpc.AppEvent.toggleAutostartFinished:type_name -> grpc.ToggleAutostartFinishedEvent + 21, // 13: grpc.AppEvent.resetFinished:type_name -> grpc.ResetFinishedEvent + 22, // 14: grpc.AppEvent.reportBugFinished:type_name -> grpc.ReportBugFinishedEvent + 23, // 15: grpc.AppEvent.reportBugSuccess:type_name -> grpc.ReportBugSuccessEvent + 24, // 16: grpc.AppEvent.reportBugError:type_name -> grpc.ReportBugErrorEvent + 25, // 17: grpc.AppEvent.showMainWindow:type_name -> grpc.ShowMainWindowEvent + 27, // 18: grpc.LoginEvent.error:type_name -> grpc.LoginErrorEvent + 28, // 19: grpc.LoginEvent.tfaRequested:type_name -> grpc.LoginTfaRequestedEvent + 29, // 20: grpc.LoginEvent.twoPasswordRequested:type_name -> grpc.LoginTwoPasswordsRequestedEvent + 30, // 21: grpc.LoginEvent.finished:type_name -> grpc.LoginFinishedEvent + 30, // 22: grpc.LoginEvent.alreadyLoggedIn:type_name -> grpc.LoginFinishedEvent + 2, // 23: grpc.LoginErrorEvent.type:type_name -> grpc.LoginErrorType + 32, // 24: grpc.UpdateEvent.error:type_name -> grpc.UpdateErrorEvent + 33, // 25: grpc.UpdateEvent.manualReady:type_name -> grpc.UpdateManualReadyEvent + 34, // 26: grpc.UpdateEvent.manualRestartNeeded:type_name -> grpc.UpdateManualRestartNeededEvent + 35, // 27: grpc.UpdateEvent.force:type_name -> grpc.UpdateForceEvent + 36, // 28: grpc.UpdateEvent.silentRestartNeeded:type_name -> grpc.UpdateSilentRestartNeeded + 37, // 29: grpc.UpdateEvent.isLatestVersion:type_name -> grpc.UpdateIsLatestVersion + 38, // 30: grpc.UpdateEvent.checkFinished:type_name -> grpc.UpdateCheckFinished + 39, // 31: grpc.UpdateEvent.versionChanged:type_name -> grpc.UpdateVersionChanged + 3, // 32: grpc.UpdateErrorEvent.type:type_name -> grpc.UpdateErrorType + 41, // 33: grpc.DiskCacheEvent.error:type_name -> grpc.DiskCacheErrorEvent + 42, // 34: grpc.DiskCacheEvent.pathChanged:type_name -> grpc.DiskCachePathChangedEvent + 43, // 35: grpc.DiskCacheEvent.pathChangeFinished:type_name -> grpc.DiskCachePathChangeFinishedEvent + 4, // 36: grpc.DiskCacheErrorEvent.type:type_name -> grpc.DiskCacheErrorType + 45, // 37: grpc.MailSettingsEvent.error:type_name -> grpc.MailSettingsErrorEvent + 46, // 38: grpc.MailSettingsEvent.useSslForSmtpFinished:type_name -> grpc.UseSslForSmtpFinishedEvent + 48, // 39: grpc.MailSettingsEvent.changePortsFinished:type_name -> grpc.ChangePortsFinishedEvent + 47, // 40: grpc.MailSettingsEvent.useSslForImapFinished:type_name -> grpc.UseSslForImapFinishedEvent + 5, // 41: grpc.MailSettingsErrorEvent.type:type_name -> grpc.MailSettingsErrorType + 50, // 42: grpc.KeychainEvent.changeKeychainFinished:type_name -> grpc.ChangeKeychainFinishedEvent + 51, // 43: grpc.KeychainEvent.hasNoKeychain:type_name -> grpc.HasNoKeychainEvent + 52, // 44: grpc.KeychainEvent.rebuildKeychain:type_name -> grpc.RebuildKeychainEvent + 54, // 45: grpc.MailEvent.noActiveKeyForRecipientEvent:type_name -> grpc.NoActiveKeyForRecipientEvent + 55, // 46: grpc.MailEvent.addressChanged:type_name -> grpc.AddressChangedEvent + 56, // 47: grpc.MailEvent.addressChangedLogout:type_name -> grpc.AddressChangedLogoutEvent + 57, // 48: grpc.MailEvent.apiCertIssue:type_name -> grpc.ApiCertIssueEvent + 59, // 49: grpc.UserEvent.toggleSplitModeFinished:type_name -> grpc.ToggleSplitModeFinishedEvent + 60, // 50: grpc.UserEvent.userDisconnected:type_name -> grpc.UserDisconnectedEvent + 61, // 51: grpc.UserEvent.userChanged:type_name -> grpc.UserChangedEvent + 62, // 52: grpc.Bridge.CheckTokens:input_type -> google.protobuf.StringValue + 6, // 53: grpc.Bridge.AddLogEntry:input_type -> grpc.AddLogEntryRequest + 63, // 54: grpc.Bridge.GuiReady:input_type -> google.protobuf.Empty + 63, // 55: grpc.Bridge.Quit:input_type -> google.protobuf.Empty + 63, // 56: grpc.Bridge.Restart:input_type -> google.protobuf.Empty + 63, // 57: grpc.Bridge.ShowOnStartup:input_type -> google.protobuf.Empty + 63, // 58: grpc.Bridge.ShowSplashScreen:input_type -> google.protobuf.Empty + 63, // 59: grpc.Bridge.IsFirstGuiStart:input_type -> google.protobuf.Empty + 64, // 60: grpc.Bridge.SetIsAutostartOn:input_type -> google.protobuf.BoolValue + 63, // 61: grpc.Bridge.IsAutostartOn:input_type -> google.protobuf.Empty + 64, // 62: grpc.Bridge.SetIsBetaEnabled:input_type -> google.protobuf.BoolValue + 63, // 63: grpc.Bridge.IsBetaEnabled:input_type -> google.protobuf.Empty + 64, // 64: grpc.Bridge.SetIsAllMailVisible:input_type -> google.protobuf.BoolValue + 63, // 65: grpc.Bridge.IsAllMailVisible:input_type -> google.protobuf.Empty + 63, // 66: grpc.Bridge.GoOs:input_type -> google.protobuf.Empty + 63, // 67: grpc.Bridge.TriggerReset:input_type -> google.protobuf.Empty + 63, // 68: grpc.Bridge.Version:input_type -> google.protobuf.Empty + 63, // 69: grpc.Bridge.LogsPath:input_type -> google.protobuf.Empty + 63, // 70: grpc.Bridge.LicensePath:input_type -> google.protobuf.Empty + 63, // 71: grpc.Bridge.ReleaseNotesPageLink:input_type -> google.protobuf.Empty + 63, // 72: grpc.Bridge.DependencyLicensesLink:input_type -> google.protobuf.Empty + 63, // 73: grpc.Bridge.LandingPageLink:input_type -> google.protobuf.Empty + 62, // 74: grpc.Bridge.SetColorSchemeName:input_type -> google.protobuf.StringValue + 63, // 75: grpc.Bridge.ColorSchemeName:input_type -> google.protobuf.Empty + 63, // 76: grpc.Bridge.CurrentEmailClient:input_type -> google.protobuf.Empty + 7, // 77: grpc.Bridge.ReportBug:input_type -> grpc.ReportBugRequest + 62, // 78: grpc.Bridge.ForceLauncher:input_type -> google.protobuf.StringValue + 62, // 79: grpc.Bridge.SetMainExecutable:input_type -> google.protobuf.StringValue + 8, // 80: grpc.Bridge.Login:input_type -> grpc.LoginRequest + 8, // 81: grpc.Bridge.Login2FA:input_type -> grpc.LoginRequest + 8, // 82: grpc.Bridge.Login2Passwords:input_type -> grpc.LoginRequest + 9, // 83: grpc.Bridge.LoginAbort:input_type -> grpc.LoginAbortRequest + 63, // 84: grpc.Bridge.CheckUpdate:input_type -> google.protobuf.Empty + 63, // 85: grpc.Bridge.InstallUpdate:input_type -> google.protobuf.Empty + 64, // 86: grpc.Bridge.SetIsAutomaticUpdateOn:input_type -> google.protobuf.BoolValue + 63, // 87: grpc.Bridge.IsAutomaticUpdateOn:input_type -> google.protobuf.Empty + 63, // 88: grpc.Bridge.DiskCachePath:input_type -> google.protobuf.Empty + 62, // 89: grpc.Bridge.SetDiskCachePath:input_type -> google.protobuf.StringValue + 64, // 90: grpc.Bridge.SetIsDoHEnabled:input_type -> google.protobuf.BoolValue + 63, // 91: grpc.Bridge.IsDoHEnabled:input_type -> google.protobuf.Empty + 64, // 92: grpc.Bridge.SetUseSslForSmtp:input_type -> google.protobuf.BoolValue + 63, // 93: grpc.Bridge.UseSslForSmtp:input_type -> google.protobuf.Empty + 64, // 94: grpc.Bridge.SetUseSslForImap:input_type -> google.protobuf.BoolValue + 63, // 95: grpc.Bridge.UseSslForImap:input_type -> google.protobuf.Empty + 63, // 96: grpc.Bridge.Hostname:input_type -> google.protobuf.Empty + 63, // 97: grpc.Bridge.ImapPort:input_type -> google.protobuf.Empty + 63, // 98: grpc.Bridge.SmtpPort:input_type -> google.protobuf.Empty + 10, // 99: grpc.Bridge.ChangePorts:input_type -> grpc.ChangePortsRequest + 65, // 100: grpc.Bridge.IsPortFree:input_type -> google.protobuf.Int32Value + 63, // 101: grpc.Bridge.AvailableKeychains:input_type -> google.protobuf.Empty + 62, // 102: grpc.Bridge.SetCurrentKeychain:input_type -> google.protobuf.StringValue + 63, // 103: grpc.Bridge.CurrentKeychain:input_type -> google.protobuf.Empty + 63, // 104: grpc.Bridge.GetUserList:input_type -> google.protobuf.Empty + 62, // 105: grpc.Bridge.GetUser:input_type -> google.protobuf.StringValue + 13, // 106: grpc.Bridge.SetUserSplitMode:input_type -> grpc.UserSplitModeRequest + 62, // 107: grpc.Bridge.LogoutUser:input_type -> google.protobuf.StringValue + 62, // 108: grpc.Bridge.RemoveUser:input_type -> google.protobuf.StringValue + 15, // 109: grpc.Bridge.ConfigureUserAppleMail:input_type -> grpc.ConfigureAppleMailRequest + 16, // 110: grpc.Bridge.RunEventStream:input_type -> grpc.EventStreamRequest + 63, // 111: grpc.Bridge.StopEventStream:input_type -> google.protobuf.Empty + 62, // 112: grpc.Bridge.CheckTokens:output_type -> google.protobuf.StringValue + 63, // 113: grpc.Bridge.AddLogEntry:output_type -> google.protobuf.Empty + 63, // 114: grpc.Bridge.GuiReady:output_type -> google.protobuf.Empty + 63, // 115: grpc.Bridge.Quit:output_type -> google.protobuf.Empty + 63, // 116: grpc.Bridge.Restart:output_type -> google.protobuf.Empty + 64, // 117: grpc.Bridge.ShowOnStartup:output_type -> google.protobuf.BoolValue + 64, // 118: grpc.Bridge.ShowSplashScreen:output_type -> google.protobuf.BoolValue + 64, // 119: grpc.Bridge.IsFirstGuiStart:output_type -> google.protobuf.BoolValue + 63, // 120: grpc.Bridge.SetIsAutostartOn:output_type -> google.protobuf.Empty + 64, // 121: grpc.Bridge.IsAutostartOn:output_type -> google.protobuf.BoolValue + 63, // 122: grpc.Bridge.SetIsBetaEnabled:output_type -> google.protobuf.Empty + 64, // 123: grpc.Bridge.IsBetaEnabled:output_type -> google.protobuf.BoolValue + 63, // 124: grpc.Bridge.SetIsAllMailVisible:output_type -> google.protobuf.Empty + 64, // 125: grpc.Bridge.IsAllMailVisible:output_type -> google.protobuf.BoolValue + 62, // 126: grpc.Bridge.GoOs:output_type -> google.protobuf.StringValue + 63, // 127: grpc.Bridge.TriggerReset:output_type -> google.protobuf.Empty + 62, // 128: grpc.Bridge.Version:output_type -> google.protobuf.StringValue + 62, // 129: grpc.Bridge.LogsPath:output_type -> google.protobuf.StringValue + 62, // 130: grpc.Bridge.LicensePath:output_type -> google.protobuf.StringValue + 62, // 131: grpc.Bridge.ReleaseNotesPageLink:output_type -> google.protobuf.StringValue + 62, // 132: grpc.Bridge.DependencyLicensesLink:output_type -> google.protobuf.StringValue + 62, // 133: grpc.Bridge.LandingPageLink:output_type -> google.protobuf.StringValue + 63, // 134: grpc.Bridge.SetColorSchemeName:output_type -> google.protobuf.Empty + 62, // 135: grpc.Bridge.ColorSchemeName:output_type -> google.protobuf.StringValue + 62, // 136: grpc.Bridge.CurrentEmailClient:output_type -> google.protobuf.StringValue + 63, // 137: grpc.Bridge.ReportBug:output_type -> google.protobuf.Empty + 63, // 138: grpc.Bridge.ForceLauncher:output_type -> google.protobuf.Empty + 63, // 139: grpc.Bridge.SetMainExecutable:output_type -> google.protobuf.Empty + 63, // 140: grpc.Bridge.Login:output_type -> google.protobuf.Empty + 63, // 141: grpc.Bridge.Login2FA:output_type -> google.protobuf.Empty + 63, // 142: grpc.Bridge.Login2Passwords:output_type -> google.protobuf.Empty + 63, // 143: grpc.Bridge.LoginAbort:output_type -> google.protobuf.Empty + 63, // 144: grpc.Bridge.CheckUpdate:output_type -> google.protobuf.Empty + 63, // 145: grpc.Bridge.InstallUpdate:output_type -> google.protobuf.Empty + 63, // 146: grpc.Bridge.SetIsAutomaticUpdateOn:output_type -> google.protobuf.Empty + 64, // 147: grpc.Bridge.IsAutomaticUpdateOn:output_type -> google.protobuf.BoolValue + 62, // 148: grpc.Bridge.DiskCachePath:output_type -> google.protobuf.StringValue + 63, // 149: grpc.Bridge.SetDiskCachePath:output_type -> google.protobuf.Empty + 63, // 150: grpc.Bridge.SetIsDoHEnabled:output_type -> google.protobuf.Empty + 64, // 151: grpc.Bridge.IsDoHEnabled:output_type -> google.protobuf.BoolValue + 63, // 152: grpc.Bridge.SetUseSslForSmtp:output_type -> google.protobuf.Empty + 64, // 153: grpc.Bridge.UseSslForSmtp:output_type -> google.protobuf.BoolValue + 63, // 154: grpc.Bridge.SetUseSslForImap:output_type -> google.protobuf.Empty + 64, // 155: grpc.Bridge.UseSslForImap:output_type -> google.protobuf.BoolValue + 62, // 156: grpc.Bridge.Hostname:output_type -> google.protobuf.StringValue + 65, // 157: grpc.Bridge.ImapPort:output_type -> google.protobuf.Int32Value + 65, // 158: grpc.Bridge.SmtpPort:output_type -> google.protobuf.Int32Value + 63, // 159: grpc.Bridge.ChangePorts:output_type -> google.protobuf.Empty + 64, // 160: grpc.Bridge.IsPortFree:output_type -> google.protobuf.BoolValue + 11, // 161: grpc.Bridge.AvailableKeychains:output_type -> grpc.AvailableKeychainsResponse + 63, // 162: grpc.Bridge.SetCurrentKeychain:output_type -> google.protobuf.Empty + 62, // 163: grpc.Bridge.CurrentKeychain:output_type -> google.protobuf.StringValue + 14, // 164: grpc.Bridge.GetUserList:output_type -> grpc.UserListResponse + 12, // 165: grpc.Bridge.GetUser:output_type -> grpc.User + 63, // 166: grpc.Bridge.SetUserSplitMode:output_type -> google.protobuf.Empty + 63, // 167: grpc.Bridge.LogoutUser:output_type -> google.protobuf.Empty + 63, // 168: grpc.Bridge.RemoveUser:output_type -> google.protobuf.Empty + 63, // 169: grpc.Bridge.ConfigureUserAppleMail:output_type -> google.protobuf.Empty + 17, // 170: grpc.Bridge.RunEventStream:output_type -> grpc.StreamEvent + 63, // 171: grpc.Bridge.StopEventStream:output_type -> google.protobuf.Empty + 112, // [112:172] is the sub-list for method output_type + 52, // [52:112] is the sub-list for method input_type + 52, // [52:52] is the sub-list for extension type_name + 52, // [52:52] is the sub-list for extension extendee + 0, // [0:52] is the sub-list for field type_name } func init() { file_bridge_proto_init() } @@ -5321,7 +5375,7 @@ func file_bridge_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_bridge_proto_rawDesc, - NumEnums: 5, + NumEnums: 6, NumMessages: 56, NumExtensions: 0, NumServices: 1, diff --git a/internal/frontend/grpc/bridge.proto b/internal/frontend/grpc/bridge.proto index 6350a7b7..388ae296 100644 --- a/internal/frontend/grpc/bridge.proto +++ b/internal/frontend/grpc/bridge.proto @@ -173,13 +173,19 @@ message AvailableKeychainsResponse { } //********************************************************** -// Cache on disk related messages +// user related messages //********************************************************** +enum UserState { + SIGNED_OUT = 0; + LOCKED = 1; + CONNECTED = 2; +} + message User { string id = 1; string username = 2; string avatarText = 3; - bool loggedIn = 4; + UserState state = 4; bool splitMode = 5; bool setupGuideSeen = 6; int64 usedBytes = 7; diff --git a/internal/frontend/grpc/bridge_grpc.pb.go b/internal/frontend/grpc/bridge_grpc.pb.go index 3fe3173c..d62c2a65 100644 --- a/internal/frontend/grpc/bridge_grpc.pb.go +++ b/internal/frontend/grpc/bridge_grpc.pb.go @@ -8,7 +8,6 @@ package grpc 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/grpc/utils.go b/internal/frontend/grpc/utils.go index 5626a128..b249ddce 100644 --- a/internal/frontend/grpc/utils.go +++ b/internal/frontend/grpc/utils.go @@ -64,7 +64,7 @@ func grpcUserFromInfo(user bridge.UserInfo) *User { Id: user.UserID, Username: user.Username, AvatarText: getInitials(user.Username), - LoggedIn: user.Connected, + State: userStateToGrpc(user.State), SplitMode: user.AddressMode == vault.SplitMode, SetupGuideSeen: true, // users listed have already seen the setup guide. UsedBytes: int64(user.UsedSpace), @@ -74,6 +74,19 @@ func grpcUserFromInfo(user bridge.UserInfo) *User { } } +func userStateToGrpc(state bridge.UserState) UserState { + switch state { + case bridge.SignedOut: + return UserState_SIGNED_OUT + case bridge.Locked: + return UserState_LOCKED + case bridge.Connected: + return UserState_CONNECTED + default: + panic("Unknown user state") + } +} + // logrusLevelFromGrpcLevel converts a gRPC log level to a logrus log level. func logrusLevelFromGrpcLevel(level LogLevel) logrus.Level { switch level { diff --git a/tests/user_test.go b/tests/user_test.go index 212eae58..8a9218d7 100644 --- a/tests/user_test.go +++ b/tests/user_test.go @@ -24,6 +24,7 @@ import ( "net/mail" "github.com/ProtonMail/gopenpgp/v2/crypto" + "github.com/ProtonMail/proton-bridge/v2/internal/bridge" "github.com/bradenaw/juniper/iterator" "github.com/bradenaw/juniper/xslices" "github.com/cucumber/godog" @@ -306,7 +307,7 @@ func (s *scenario) userIsListedAndConnected(username string) error { return errors.New("user not listed") } - if !user.Connected { + if user.State != bridge.Connected { return errors.New("user not connected") } @@ -329,7 +330,7 @@ func (s *scenario) userIsListedButNotConnected(username string) error { return errors.New("user not listed") } - if user.Connected { + if user.State == bridge.Connected { return errors.New("user connected") }