From 43b5572c1f2e454d091378436f272cfd3f641930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Del=20Solar?= Date: Fri, 1 Jul 2022 23:03:41 -0400 Subject: [PATCH 1/4] Silent Mode backend profile setting/migration --- api/proto/user_service/user_service.proto | 14 +- .../202207020046_add-silent-mode.down.sql | 5 + .../202207020046_add-silent-mode.up.sql | 5 + liwords-ui/src/App.scss | 6 +- .../proto/user_service/user_service_pb.d.ts | 16 + .../api/proto/user_service/user_service_pb.js | 128 +++- liwords-ui/src/profile/profile.tsx | 4 +- liwords-ui/src/settings/close_account.tsx | 11 +- liwords-ui/src/settings/personal_info.tsx | 15 + liwords-ui/src/settings/settings.tsx | 2 + pkg/entity/user.go | 11 +- pkg/mod/mod_test.go | 2 +- pkg/profile/profile.go | 27 +- pkg/stores/common/db.go | 4 +- pkg/stores/user/cache.go | 8 +- pkg/stores/user/db.go | 17 +- pkg/stores/user/db_test.go | 2 +- pkg/user/user.go | 2 +- rpc/api/proto/user_service/user_service.pb.go | 694 ++++++++++-------- .../proto/user_service/user_service.twirp.go | 270 +++---- 20 files changed, 742 insertions(+), 501 deletions(-) create mode 100644 db/migrations/202207020046_add-silent-mode.down.sql create mode 100644 db/migrations/202207020046_add-silent-mode.up.sql diff --git a/api/proto/user_service/user_service.proto b/api/proto/user_service/user_service.proto index 0c73ee4af..2310df7ca 100644 --- a/api/proto/user_service/user_service.proto +++ b/api/proto/user_service/user_service.proto @@ -86,7 +86,8 @@ service AuthenticationService { returns (NotifyAccountClosureResponse); // These two temporary endpoints for migrating everyone to naked domain: rpc GetSignedCookie(GetSignedCookieRequest) returns (SignedCookieResponse); - rpc InstallSignedCookie(SignedCookieResponse) returns (InstallSignedCookieResponse); + rpc InstallSignedCookie(SignedCookieResponse) + returns (InstallSignedCookieResponse); } message GetSignedCookieRequest {} @@ -135,12 +136,18 @@ message ProfileResponse { string user_id = 8; string avatar_url = 9; string full_name = 10; - bool avatars_editable = 11; + bool avatars_editable = 11 [ deprecated = true ]; string birth_date = 12; + bool silent_mode = 13; } message PersonalInfoRequest {} +// PersonalInfoResponse is sent when we query our own +// profile (in order to modify it) on the front end. It contains +// a field that is not part of the profile model/table itself -- email +// We should consider combining this with the ProfileResponse message, +// and just leaving the email field blank when making a profile request. message PersonalInfoResponse { string email = 1; string first_name = 2; @@ -150,6 +157,7 @@ message PersonalInfoResponse { string full_name = 6; string about = 7; string birth_date = 8; + bool silent_mode = 9; } message UpdatePersonalInfoRequest { @@ -161,6 +169,7 @@ message UpdatePersonalInfoRequest { string full_name = 6; string about = 7; string birth_date = 8; + bool silent_mode = 9; } message UpdatePersonalInfoResponse {} @@ -181,6 +190,7 @@ message BriefProfile { string full_name = 2; // omitted for non-adults string country_code = 3; string avatar_url = 9; + bool silent_mode = 13; } message BriefProfilesResponse { map response = 1; } diff --git a/db/migrations/202207020046_add-silent-mode.down.sql b/db/migrations/202207020046_add-silent-mode.down.sql new file mode 100644 index 000000000..e439c11e4 --- /dev/null +++ b/db/migrations/202207020046_add-silent-mode.down.sql @@ -0,0 +1,5 @@ +BEGIN; + +ALTER TABLE public.profiles DROP COLUMN IF EXISTS "silent_mode"; + +COMMIT; \ No newline at end of file diff --git a/db/migrations/202207020046_add-silent-mode.up.sql b/db/migrations/202207020046_add-silent-mode.up.sql new file mode 100644 index 000000000..a358f58e2 --- /dev/null +++ b/db/migrations/202207020046_add-silent-mode.up.sql @@ -0,0 +1,5 @@ +BEGIN; + +ALTER TABLE public.profiles ADD COLUMN IF NOT EXISTS "silent_mode" BOOLEAN; + +COMMIT; \ No newline at end of file diff --git a/liwords-ui/src/App.scss b/liwords-ui/src/App.scss index 91df7b7b0..ca3c91399 100644 --- a/liwords-ui/src/App.scss +++ b/liwords-ui/src/App.scss @@ -159,17 +159,17 @@ a.plain, } } } -.ant-modal-body .readable-text-color { +.readable-text-color { @include colorModed() { color: m($gray-extreme); } } -.tourney-editor .readable-text-color { +.readable-text-color { @include colorModed() { color: m($gray-extreme); } } -.ant-list-items .readable-text-color { +.readable-text-color { @include colorModed() { color: m($gray-extreme); } diff --git a/liwords-ui/src/gen/api/proto/user_service/user_service_pb.d.ts b/liwords-ui/src/gen/api/proto/user_service/user_service_pb.d.ts index 1b7131d94..6dfda5986 100644 --- a/liwords-ui/src/gen/api/proto/user_service/user_service_pb.d.ts +++ b/liwords-ui/src/gen/api/proto/user_service/user_service_pb.d.ts @@ -613,6 +613,9 @@ export class ProfileResponse extends jspb.Message { getBirthDate(): string; setBirthDate(value: string): void; + getSilentMode(): boolean; + setSilentMode(value: boolean): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ProfileResponse.AsObject; static toObject(includeInstance: boolean, msg: ProfileResponse): ProfileResponse.AsObject; @@ -637,6 +640,7 @@ export namespace ProfileResponse { fullName: string, avatarsEditable: boolean, birthDate: string, + silentMode: boolean, } } @@ -681,6 +685,9 @@ export class PersonalInfoResponse extends jspb.Message { getBirthDate(): string; setBirthDate(value: string): void; + getSilentMode(): boolean; + setSilentMode(value: boolean): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): PersonalInfoResponse.AsObject; static toObject(includeInstance: boolean, msg: PersonalInfoResponse): PersonalInfoResponse.AsObject; @@ -701,6 +708,7 @@ export namespace PersonalInfoResponse { fullName: string, about: string, birthDate: string, + silentMode: boolean, } } @@ -729,6 +737,9 @@ export class UpdatePersonalInfoRequest extends jspb.Message { getBirthDate(): string; setBirthDate(value: string): void; + getSilentMode(): boolean; + setSilentMode(value: boolean): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): UpdatePersonalInfoRequest.AsObject; static toObject(includeInstance: boolean, msg: UpdatePersonalInfoRequest): UpdatePersonalInfoRequest.AsObject; @@ -749,6 +760,7 @@ export namespace UpdatePersonalInfoRequest { fullName: string, about: string, birthDate: string, + silentMode: boolean, } } @@ -877,6 +889,9 @@ export class BriefProfile extends jspb.Message { getAvatarUrl(): string; setAvatarUrl(value: string): void; + getSilentMode(): boolean; + setSilentMode(value: boolean): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): BriefProfile.AsObject; static toObject(includeInstance: boolean, msg: BriefProfile): BriefProfile.AsObject; @@ -893,6 +908,7 @@ export namespace BriefProfile { fullName: string, countryCode: string, avatarUrl: string, + silentMode: boolean, } } diff --git a/liwords-ui/src/gen/api/proto/user_service/user_service_pb.js b/liwords-ui/src/gen/api/proto/user_service/user_service_pb.js index 773da6cea..b0a0313c0 100644 --- a/liwords-ui/src/gen/api/proto/user_service/user_service_pb.js +++ b/liwords-ui/src/gen/api/proto/user_service/user_service_pb.js @@ -5157,7 +5157,8 @@ proto.user_service.ProfileResponse.toObject = function(includeInstance, msg) { avatarUrl: jspb.Message.getFieldWithDefault(msg, 9, ""), fullName: jspb.Message.getFieldWithDefault(msg, 10, ""), avatarsEditable: jspb.Message.getBooleanFieldWithDefault(msg, 11, false), - birthDate: jspb.Message.getFieldWithDefault(msg, 12, "") + birthDate: jspb.Message.getFieldWithDefault(msg, 12, ""), + silentMode: jspb.Message.getBooleanFieldWithDefault(msg, 13, false) }; if (includeInstance) { @@ -5242,6 +5243,10 @@ proto.user_service.ProfileResponse.deserializeBinaryFromReader = function(msg, r var value = /** @type {string} */ (reader.readString()); msg.setBirthDate(value); break; + case 13: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setSilentMode(value); + break; default: reader.skipField(); break; @@ -5355,6 +5360,13 @@ proto.user_service.ProfileResponse.serializeBinaryToWriter = function(message, w f ); } + f = message.getSilentMode(); + if (f) { + writer.writeBool( + 13, + f + ); + } }; @@ -5574,6 +5586,24 @@ proto.user_service.ProfileResponse.prototype.setBirthDate = function(value) { }; +/** + * optional bool silent_mode = 13; + * @return {boolean} + */ +proto.user_service.ProfileResponse.prototype.getSilentMode = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 13, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.user_service.ProfileResponse} returns this + */ +proto.user_service.ProfileResponse.prototype.setSilentMode = function(value) { + return jspb.Message.setProto3BooleanField(this, 13, value); +}; + + @@ -5714,7 +5744,8 @@ proto.user_service.PersonalInfoResponse.toObject = function(includeInstance, msg avatarUrl: jspb.Message.getFieldWithDefault(msg, 5, ""), fullName: jspb.Message.getFieldWithDefault(msg, 6, ""), about: jspb.Message.getFieldWithDefault(msg, 7, ""), - birthDate: jspb.Message.getFieldWithDefault(msg, 8, "") + birthDate: jspb.Message.getFieldWithDefault(msg, 8, ""), + silentMode: jspb.Message.getBooleanFieldWithDefault(msg, 9, false) }; if (includeInstance) { @@ -5783,6 +5814,10 @@ proto.user_service.PersonalInfoResponse.deserializeBinaryFromReader = function(m var value = /** @type {string} */ (reader.readString()); msg.setBirthDate(value); break; + case 9: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setSilentMode(value); + break; default: reader.skipField(); break; @@ -5868,6 +5903,13 @@ proto.user_service.PersonalInfoResponse.serializeBinaryToWriter = function(messa f ); } + f = message.getSilentMode(); + if (f) { + writer.writeBool( + 9, + f + ); + } }; @@ -6015,6 +6057,24 @@ proto.user_service.PersonalInfoResponse.prototype.setBirthDate = function(value) }; +/** + * optional bool silent_mode = 9; + * @return {boolean} + */ +proto.user_service.PersonalInfoResponse.prototype.getSilentMode = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 9, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.user_service.PersonalInfoResponse} returns this + */ +proto.user_service.PersonalInfoResponse.prototype.setSilentMode = function(value) { + return jspb.Message.setProto3BooleanField(this, 9, value); +}; + + @@ -6054,7 +6114,8 @@ proto.user_service.UpdatePersonalInfoRequest.toObject = function(includeInstance avatarUrl: jspb.Message.getFieldWithDefault(msg, 5, ""), fullName: jspb.Message.getFieldWithDefault(msg, 6, ""), about: jspb.Message.getFieldWithDefault(msg, 7, ""), - birthDate: jspb.Message.getFieldWithDefault(msg, 8, "") + birthDate: jspb.Message.getFieldWithDefault(msg, 8, ""), + silentMode: jspb.Message.getBooleanFieldWithDefault(msg, 9, false) }; if (includeInstance) { @@ -6123,6 +6184,10 @@ proto.user_service.UpdatePersonalInfoRequest.deserializeBinaryFromReader = funct var value = /** @type {string} */ (reader.readString()); msg.setBirthDate(value); break; + case 9: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setSilentMode(value); + break; default: reader.skipField(); break; @@ -6208,6 +6273,13 @@ proto.user_service.UpdatePersonalInfoRequest.serializeBinaryToWriter = function( f ); } + f = message.getSilentMode(); + if (f) { + writer.writeBool( + 9, + f + ); + } }; @@ -6355,6 +6427,24 @@ proto.user_service.UpdatePersonalInfoRequest.prototype.setBirthDate = function(v }; +/** + * optional bool silent_mode = 9; + * @return {boolean} + */ +proto.user_service.UpdatePersonalInfoRequest.prototype.getSilentMode = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 9, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.user_service.UpdatePersonalInfoRequest} returns this + */ +proto.user_service.UpdatePersonalInfoRequest.prototype.setSilentMode = function(value) { + return jspb.Message.setProto3BooleanField(this, 9, value); +}; + + @@ -7133,7 +7223,8 @@ proto.user_service.BriefProfile.toObject = function(includeInstance, msg) { username: jspb.Message.getFieldWithDefault(msg, 1, ""), fullName: jspb.Message.getFieldWithDefault(msg, 2, ""), countryCode: jspb.Message.getFieldWithDefault(msg, 3, ""), - avatarUrl: jspb.Message.getFieldWithDefault(msg, 9, "") + avatarUrl: jspb.Message.getFieldWithDefault(msg, 9, ""), + silentMode: jspb.Message.getBooleanFieldWithDefault(msg, 13, false) }; if (includeInstance) { @@ -7186,6 +7277,10 @@ proto.user_service.BriefProfile.deserializeBinaryFromReader = function(msg, read var value = /** @type {string} */ (reader.readString()); msg.setAvatarUrl(value); break; + case 13: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setSilentMode(value); + break; default: reader.skipField(); break; @@ -7243,6 +7338,13 @@ proto.user_service.BriefProfile.serializeBinaryToWriter = function(message, writ f ); } + f = message.getSilentMode(); + if (f) { + writer.writeBool( + 13, + f + ); + } }; @@ -7318,6 +7420,24 @@ proto.user_service.BriefProfile.prototype.setAvatarUrl = function(value) { }; +/** + * optional bool silent_mode = 13; + * @return {boolean} + */ +proto.user_service.BriefProfile.prototype.getSilentMode = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 13, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.user_service.BriefProfile} returns this + */ +proto.user_service.BriefProfile.prototype.setSilentMode = function(value) { + return jspb.Message.setProto3BooleanField(this, 13, value); +}; + + diff --git a/liwords-ui/src/profile/profile.tsx b/liwords-ui/src/profile/profile.tsx index 069338bea..bcacb7096 100644 --- a/liwords-ui/src/profile/profile.tsx +++ b/liwords-ui/src/profile/profile.tsx @@ -234,7 +234,6 @@ export const PlayerProfile = React.memo(() => { const [userFetched, setUserFetched] = useState(false); const [fullName, setFullName] = useState(''); const [avatarUrl, setAvatarUrl] = useState(''); - const [avatarsEditable, setAvatarsEditable] = useState(false); const [bio, setBio] = useState(''); const [showGameTable, setShowGameTable] = useState(false); const [countryCode, setCountryCode] = useState(''); @@ -267,7 +266,6 @@ export const PlayerProfile = React.memo(() => { setCountryCode(resp.data.country_code); setFullName(resp.data.full_name); setAvatarUrl(resp.data.avatar_url); - setAvatarsEditable(resp.data.avatars_editable); setBio(resp.data.about); setBioLoaded(true); }) @@ -393,7 +391,7 @@ export const PlayerProfile = React.memo(() => { full_name: fullName, user_id: userID, // for name-based avatar initial to work }; - const avatarEditable = avatarsEditable && viewer === username; + const avatarEditable = viewer === username; const variantCards = useMemo(() => { const data = []; diff --git a/liwords-ui/src/settings/close_account.tsx b/liwords-ui/src/settings/close_account.tsx index 5c4673de6..93677c000 100644 --- a/liwords-ui/src/settings/close_account.tsx +++ b/liwords-ui/src/settings/close_account.tsx @@ -19,12 +19,19 @@ export const CloseAccount = React.memo((props: Props) => {
{props.player?.full_name}
- If you choose to delete your account, it will no longer be accessible. + If you choose to delete your account, it will{' '} + no longer be accessible.
All of your data will be deleted, except for past games, per the Woogles Terms of Service.
+
+ + Note: Account deletion is not a way to change usernames. It will not + work. + +
{ props.closeAccountNow(values.password); @@ -58,7 +65,7 @@ export const CloseAccount = React.memo((props: Props) => { >
- I understand that closing my account is an irreversible action + I understand that closing my account is an irreversible action.
diff --git a/liwords-ui/src/settings/personal_info.tsx b/liwords-ui/src/settings/personal_info.tsx index f62a443c5..7b3f47f7e 100644 --- a/liwords-ui/src/settings/personal_info.tsx +++ b/liwords-ui/src/settings/personal_info.tsx @@ -10,6 +10,8 @@ import { Select, notification, DatePicker, + Switch, + Divider, } from 'antd'; import { Modal } from '../utils/focus_modal'; import moment from 'moment'; @@ -31,6 +33,7 @@ export type PersonalInfo = { lastName: string; countryCode: string; about: string; + silentMode: boolean; }; type Props = { @@ -373,6 +376,18 @@ export const PersonalInfo = React.memo((props: Props) => { + + + + + + + + { @@ -134,6 +135,7 @@ export const Settings = React.memo(() => { lastName: resp.data.last_name, countryCode: resp.data.country_code, about: resp.data.about, + silentMode: resp.data.silent_mode, }); }) .catch(errorCatcher); diff --git a/pkg/entity/user.go b/pkg/entity/user.go index 84f7f9b15..7f77b4e4d 100644 --- a/pkg/entity/user.go +++ b/pkg/entity/user.go @@ -41,9 +41,13 @@ type User struct { // CurrentChannel tracks presence; where is the user currently? CurrentChannel string IsBot bool - IsDirector bool - IsMod bool - IsAdmin bool + // Note: a "Director" in this case is someone who can create tournaments. + // It might be better named something like IsTournamentCreator. + // Directors of specific tournaments can be assigned at tournament + // creation, and these users do not need any special permission flags. + IsDirector bool + IsMod bool + IsAdmin bool Actions *Actions Notoriety int @@ -78,6 +82,7 @@ type Profile struct { Ratings Ratings Stats ProfileStats AvatarUrl string + SilentMode bool } // If the RD is <= this number, the rating is "known" diff --git a/pkg/mod/mod_test.go b/pkg/mod/mod_test.go index 9bf56f64f..c4ef1f96c 100644 --- a/pkg/mod/mod_test.go +++ b/pkg/mod/mod_test.go @@ -283,7 +283,7 @@ func TestMod(t *testing.T) { // Apply a delete action and ensure that the profile is deleted and the account is suspended deleteAbout := "plz delet this" - err = us.SetPersonalInfo(ctx, "Deleter", "email", "firstname", "lastname", "2000-01-01", "USA", deleteAbout) + err = us.SetPersonalInfo(ctx, "Deleter", "email", "firstname", "lastname", "2000-01-01", "USA", deleteAbout, false) is.NoErr(err) deleterUser, err := us.GetByUUID(ctx, "Deleter") diff --git a/pkg/profile/profile.go b/pkg/profile/profile.go index 01978c021..dc7223e49 100644 --- a/pkg/profile/profile.go +++ b/pkg/profile/profile.go @@ -123,18 +123,18 @@ func (ps *ProfileService) GetProfile(ctx context.Context, r *pb.ProfileRequest) childProof := func(s string) string { return concealIf(!(subjectIsMe || subjectIsAdult), s) } return &pb.ProfileResponse{ - FirstName: childProof(user.Profile.FirstName), - LastName: childProof(user.Profile.LastName), - BirthDate: concealIf(!subjectIsMe, user.Profile.BirthDate), - FullName: childProof(user.RealName()), - CountryCode: user.Profile.CountryCode, - Title: user.Profile.Title, - About: childProof(user.Profile.About), - RatingsJson: string(ratjson), - StatsJson: string(statjson), - UserId: user.UUID, - AvatarUrl: childProof(user.AvatarUrl()), - AvatarsEditable: ps.avatarService != nil, + FirstName: childProof(user.Profile.FirstName), + LastName: childProof(user.Profile.LastName), + BirthDate: concealIf(!subjectIsMe, user.Profile.BirthDate), + FullName: childProof(user.RealName()), + CountryCode: user.Profile.CountryCode, + Title: user.Profile.Title, + About: childProof(user.Profile.About), + RatingsJson: string(ratjson), + StatsJson: string(statjson), + UserId: user.UUID, + AvatarUrl: childProof(user.AvatarUrl()), + SilentMode: user.Profile.SilentMode, }, nil } @@ -162,6 +162,7 @@ func (ps *ProfileService) GetPersonalInfo(ctx context.Context, r *pb.PersonalInf AvatarUrl: user.AvatarUrl(), FullName: user.RealName(), About: user.Profile.About, + SilentMode: user.Profile.SilentMode, }, nil } @@ -180,7 +181,7 @@ func (ps *ProfileService) UpdatePersonalInfo(ctx context.Context, r *pb.UpdatePe return nil, twirp.InternalErrorWith(err) } - updateErr := ps.userStore.SetPersonalInfo(ctx, user.UUID, r.Email, r.FirstName, r.LastName, r.BirthDate, r.CountryCode, r.About) + updateErr := ps.userStore.SetPersonalInfo(ctx, user.UUID, r.Email, r.FirstName, r.LastName, r.BirthDate, r.CountryCode, r.About, r.SilentMode) if updateErr != nil { return nil, twirp.InternalErrorWith(updateErr) } diff --git a/pkg/stores/common/db.go b/pkg/stores/common/db.go index 09d7a2aec..e50159d58 100644 --- a/pkg/stores/common/db.go +++ b/pkg/stores/common/db.go @@ -328,8 +328,9 @@ func GetUserBy(ctx context.Context, tx pgx.Tx, cfg *CommonDBConfig) (*entity.Use var avatar_url sql.NullString var rdata entity.Ratings var sdata entity.ProfileStats + var silentMode sql.NullBool - err = tx.QueryRow(ctx, "SELECT first_name, last_name, birth_date, country_code, title, about, avatar_url, ratings, stats FROM profiles WHERE user_id = $1", id).Scan(&firstName, &lastName, &birthDate, &countryCode, &title, &about, &avatar_url, &rdata, &sdata) + err = tx.QueryRow(ctx, "SELECT first_name, last_name, birth_date, country_code, title, about, avatar_url, silent_mode, ratings, stats FROM profiles WHERE user_id = $1", id).Scan(&firstName, &lastName, &birthDate, &countryCode, &title, &about, &avatar_url, &silentMode, &rdata, &sdata) if err == pgx.ErrNoRows { return nil, errors.New("profile not found") } else if err != nil { @@ -346,6 +347,7 @@ func GetUserBy(ctx context.Context, tx pgx.Tx, cfg *CommonDBConfig) (*entity.Use Ratings: rdata, Stats: sdata, AvatarUrl: avatar_url.String, + SilentMode: silentMode.Bool, } entu.Profile = entp diff --git a/pkg/stores/user/cache.go b/pkg/stores/user/cache.go index 40d6945a7..817f86b90 100644 --- a/pkg/stores/user/cache.go +++ b/pkg/stores/user/cache.go @@ -28,7 +28,7 @@ type backingStore interface { SetPassword(ctx context.Context, uuid string, hashpass string) error SetAvatarUrl(ctx context.Context, uuid string, avatarUrl string) error GetBriefProfiles(ctx context.Context, uuids []string) (map[string]*pb.BriefProfile, error) - SetPersonalInfo(ctx context.Context, uuid string, email string, firstName string, lastName string, birthDate string, countryCode string, about string) error + SetPersonalInfo(ctx context.Context, uuid string, email string, firstName string, lastName string, birthDate string, countryCode string, about string, silentMode bool) error SetRatings(ctx context.Context, p0uuid string, p1uuid string, variant entity.VariantKey, p1Rating *entity.SingleRating, p2Rating *entity.SingleRating) error SetStats(ctx context.Context, p0uuid string, p1uuid string, variant entity.VariantKey, @@ -237,13 +237,13 @@ func (c *Cache) GetBriefProfiles(ctx context.Context, uuids []string) (map[strin return ret, nil } -func (c *Cache) SetPersonalInfo(ctx context.Context, uuid string, email string, firstName string, lastName string, birthDate string, countryCode string, about string) error { +func (c *Cache) SetPersonalInfo(ctx context.Context, uuid string, email string, firstName string, lastName string, birthDate string, countryCode string, about string, silentMode bool) error { u, err := c.GetByUUID(ctx, uuid) if err != nil { return err } - if err = c.backing.SetPersonalInfo(ctx, uuid, email, firstName, lastName, birthDate, countryCode, about); err != nil { + if err = c.backing.SetPersonalInfo(ctx, uuid, email, firstName, lastName, birthDate, countryCode, about, silentMode); err != nil { return err } u.Email = email @@ -252,6 +252,7 @@ func (c *Cache) SetPersonalInfo(ctx context.Context, uuid string, email string, u.Profile.BirthDate = birthDate u.Profile.CountryCode = countryCode u.Profile.About = about + u.Profile.SilentMode = silentMode c.uncacheBriefProfile(uuid) return nil } @@ -272,6 +273,7 @@ func (c *Cache) ResetPersonalInfo(ctx context.Context, uuid string) error { u.Profile.Title = "" u.Profile.AvatarUrl = "" u.Profile.About = "" + u.Profile.SilentMode = false c.uncacheBriefProfile(uuid) return nil } diff --git a/pkg/stores/user/db.go b/pkg/stores/user/db.go index e1e43faf2..ac8c69743 100644 --- a/pkg/stores/user/db.go +++ b/pkg/stores/user/db.go @@ -234,8 +234,8 @@ func (s *DBStore) New(ctx context.Context, u *entity.User) error { prof = &entity.Profile{} } - _, err = tx.Exec(ctx, `INSERT INTO profiles (user_id, first_name, last_name, country_code, title, about, ratings, stats, avatar_url, birth_date, created_at, updated_at) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, NOW(), NOW())`, - userId, prof.FirstName, prof.LastName, prof.CountryCode, prof.Title, prof.About, entity.Ratings{}, entity.ProfileStats{}, prof.AvatarUrl, prof.BirthDate) + _, err = tx.Exec(ctx, `INSERT INTO profiles (user_id, first_name, last_name, country_code, title, about, ratings, stats, avatar_url, birth_date, silent_mode, created_at, updated_at) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, NOW(), NOW())`, + userId, prof.FirstName, prof.LastName, prof.CountryCode, prof.Title, prof.About, entity.Ratings{}, entity.ProfileStats{}, prof.AvatarUrl, prof.BirthDate, prof.SilentMode) if err != nil { return err } @@ -299,7 +299,8 @@ func (s *DBStore) GetBriefProfiles(ctx context.Context, uuids []string) (map[str } defer tx.Rollback(ctx) - query := fmt.Sprintf(`SELECT uuid, username, internal_bot, country_code, avatar_url, first_name, last_name, birth_date + query := fmt.Sprintf(`SELECT uuid, username, internal_bot, country_code, avatar_url, first_name, last_name, birth_date, + silent_mode FROM users LEFT JOIN profiles ON users.id = profiles.user_id WHERE uuid IN (%s)`, common.BuildIn(len(uuids), 1)) @@ -326,7 +327,8 @@ func (s *DBStore) GetBriefProfiles(ctx context.Context, uuids []string) (map[str var firstNameOption sql.NullString var lastNameOption sql.NullString var birthDateOption sql.NullString - if err := rows.Scan(&UUID, &username, &internalBotOption, &countryCodeOption, &avatarUrlOption, &firstNameOption, &lastNameOption, &birthDateOption); err != nil { + var silentModeOption sql.NullBool + if err := rows.Scan(&UUID, &username, &internalBotOption, &countryCodeOption, &avatarUrlOption, &firstNameOption, &lastNameOption, &birthDateOption, &silentModeOption); err != nil { return nil, err } @@ -356,6 +358,7 @@ func (s *DBStore) GetBriefProfiles(ctx context.Context, uuids []string) (map[str CountryCode: countryCodeOption.String, AvatarUrl: censoredAvatarUrl, FullName: censoredFullName, + SilentMode: silentModeOption.Bool, } } @@ -366,7 +369,7 @@ func (s *DBStore) GetBriefProfiles(ctx context.Context, uuids []string) (map[str return response, nil } -func (s *DBStore) SetPersonalInfo(ctx context.Context, uuid string, email string, firstName string, lastName string, birthDate string, countryCode string, about string) error { +func (s *DBStore) SetPersonalInfo(ctx context.Context, uuid string, email string, firstName string, lastName string, birthDate string, countryCode string, about string, silentMode bool) error { tx, err := s.dbPool.BeginTx(ctx, common.DefaultTxOptions) if err != nil { return err @@ -378,7 +381,7 @@ func (s *DBStore) SetPersonalInfo(ctx context.Context, uuid string, email string return err } - err = common.Update(ctx, tx, []string{"first_name", "last_name", "birth_date", "country_code", "about"}, []interface{}{firstName, lastName, birthDate, countryCode, about}, &common.CommonDBConfig{TableType: common.ProfilesTable, SelectByType: common.SelectByUserID, Value: id}) + err = common.Update(ctx, tx, []string{"first_name", "last_name", "birth_date", "country_code", "about", "silent_mode"}, []interface{}{firstName, lastName, birthDate, countryCode, about, silentMode}, &common.CommonDBConfig{TableType: common.ProfilesTable, SelectByType: common.SelectByUserID, Value: id}) if err != nil { return err } @@ -844,7 +847,7 @@ func (s *DBStore) ResetPersonalInfo(ctx context.Context, uuid string) error { return err } - err = common.Update(ctx, tx, []string{"first_name", "last_name", "about", "title", "avatar_url", "country_code"}, []interface{}{"", "", "", "", "", ""}, &common.CommonDBConfig{TableType: common.ProfilesTable, SelectByType: common.SelectByUserID, Value: id}) + err = common.Update(ctx, tx, []string{"first_name", "last_name", "about", "title", "avatar_url", "country_code", "silent_mode"}, []interface{}{"", "", "", "", "", "", false}, &common.CommonDBConfig{TableType: common.ProfilesTable, SelectByType: common.SelectByUserID, Value: id}) if err != nil { return err } diff --git a/pkg/stores/user/db_test.go b/pkg/stores/user/db_test.go index 72953b81e..341d87e8b 100644 --- a/pkg/stores/user/db_test.go +++ b/pkg/stores/user/db_test.go @@ -261,7 +261,7 @@ func TestSet(t *testing.T) { newEmail := "cesar@wolges.io" newLastName := "del lunar" newAbout := "manegar of wolges" - err = ustore.SetPersonalInfo(ctx, cesar.UUID, newEmail, "", newLastName, "", "", newAbout) + err = ustore.SetPersonalInfo(ctx, cesar.UUID, newEmail, "", newLastName, "", "", newAbout, false) is.NoErr(err) cesar, err = ustore.Get(ctx, "cesar") is.NoErr(err) diff --git a/pkg/user/user.go b/pkg/user/user.go index c42dda9d2..529d30680 100644 --- a/pkg/user/user.go +++ b/pkg/user/user.go @@ -23,7 +23,7 @@ type Store interface { SetPassword(ctx context.Context, uuid string, hashpass string) error SetAvatarUrl(ctx context.Context, uuid string, avatarUrl string) error GetBriefProfiles(ctx context.Context, uuids []string) (map[string]*upb.BriefProfile, error) - SetPersonalInfo(ctx context.Context, uuid string, email string, firstName string, lastName string, birthDate string, countryCode string, about string) error + SetPersonalInfo(ctx context.Context, uuid string, email string, firstName string, lastName string, birthDate string, countryCode string, about string, silentMode bool) error SetRatings(ctx context.Context, p0uuid string, p1uuid string, variant entity.VariantKey, p1Rating *entity.SingleRating, p2Rating *entity.SingleRating) error SetStats(ctx context.Context, p0uuid string, p1uuid string, variant entity.VariantKey, diff --git a/rpc/api/proto/user_service/user_service.pb.go b/rpc/api/proto/user_service/user_service.pb.go index d5d2a0978..50fc657f6 100644 --- a/rpc/api/proto/user_service/user_service.pb.go +++ b/rpc/api/proto/user_service/user_service.pb.go @@ -1351,18 +1351,20 @@ type ProfileResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - FirstName string `protobuf:"bytes,1,opt,name=first_name,json=firstName,proto3" json:"first_name,omitempty"` - LastName string `protobuf:"bytes,2,opt,name=last_name,json=lastName,proto3" json:"last_name,omitempty"` - CountryCode string `protobuf:"bytes,3,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` - Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"` - About string `protobuf:"bytes,5,opt,name=about,proto3" json:"about,omitempty"` - RatingsJson string `protobuf:"bytes,6,opt,name=ratings_json,json=ratingsJson,proto3" json:"ratings_json,omitempty"` - StatsJson string `protobuf:"bytes,7,opt,name=stats_json,json=statsJson,proto3" json:"stats_json,omitempty"` - UserId string `protobuf:"bytes,8,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - AvatarUrl string `protobuf:"bytes,9,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` - FullName string `protobuf:"bytes,10,opt,name=full_name,json=fullName,proto3" json:"full_name,omitempty"` + FirstName string `protobuf:"bytes,1,opt,name=first_name,json=firstName,proto3" json:"first_name,omitempty"` + LastName string `protobuf:"bytes,2,opt,name=last_name,json=lastName,proto3" json:"last_name,omitempty"` + CountryCode string `protobuf:"bytes,3,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` + Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"` + About string `protobuf:"bytes,5,opt,name=about,proto3" json:"about,omitempty"` + RatingsJson string `protobuf:"bytes,6,opt,name=ratings_json,json=ratingsJson,proto3" json:"ratings_json,omitempty"` + StatsJson string `protobuf:"bytes,7,opt,name=stats_json,json=statsJson,proto3" json:"stats_json,omitempty"` + UserId string `protobuf:"bytes,8,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + AvatarUrl string `protobuf:"bytes,9,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + FullName string `protobuf:"bytes,10,opt,name=full_name,json=fullName,proto3" json:"full_name,omitempty"` + // Deprecated: Do not use. AvatarsEditable bool `protobuf:"varint,11,opt,name=avatars_editable,json=avatarsEditable,proto3" json:"avatars_editable,omitempty"` BirthDate string `protobuf:"bytes,12,opt,name=birth_date,json=birthDate,proto3" json:"birth_date,omitempty"` + SilentMode bool `protobuf:"varint,13,opt,name=silent_mode,json=silentMode,proto3" json:"silent_mode,omitempty"` } func (x *ProfileResponse) Reset() { @@ -1467,6 +1469,7 @@ func (x *ProfileResponse) GetFullName() string { return "" } +// Deprecated: Do not use. func (x *ProfileResponse) GetAvatarsEditable() bool { if x != nil { return x.AvatarsEditable @@ -1481,6 +1484,13 @@ func (x *ProfileResponse) GetBirthDate() string { return "" } +func (x *ProfileResponse) GetSilentMode() bool { + if x != nil { + return x.SilentMode + } + return false +} + type PersonalInfoRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1519,6 +1529,11 @@ func (*PersonalInfoRequest) Descriptor() ([]byte, []int) { return file_api_proto_user_service_user_service_proto_rawDescGZIP(), []int{27} } +// PersonalInfoResponse is sent when we query our own +// profile (in order to modify it) on the front end. It contains +// a field that is not part of the profile model/table itself -- email +// We should consider combining this with the ProfileResponse message, +// and just leaving the email field blank when making a profile request. type PersonalInfoResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1532,6 +1547,7 @@ type PersonalInfoResponse struct { FullName string `protobuf:"bytes,6,opt,name=full_name,json=fullName,proto3" json:"full_name,omitempty"` About string `protobuf:"bytes,7,opt,name=about,proto3" json:"about,omitempty"` BirthDate string `protobuf:"bytes,8,opt,name=birth_date,json=birthDate,proto3" json:"birth_date,omitempty"` + SilentMode bool `protobuf:"varint,9,opt,name=silent_mode,json=silentMode,proto3" json:"silent_mode,omitempty"` } func (x *PersonalInfoResponse) Reset() { @@ -1622,6 +1638,13 @@ func (x *PersonalInfoResponse) GetBirthDate() string { return "" } +func (x *PersonalInfoResponse) GetSilentMode() bool { + if x != nil { + return x.SilentMode + } + return false +} + type UpdatePersonalInfoRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1635,6 +1658,7 @@ type UpdatePersonalInfoRequest struct { FullName string `protobuf:"bytes,6,opt,name=full_name,json=fullName,proto3" json:"full_name,omitempty"` About string `protobuf:"bytes,7,opt,name=about,proto3" json:"about,omitempty"` BirthDate string `protobuf:"bytes,8,opt,name=birth_date,json=birthDate,proto3" json:"birth_date,omitempty"` + SilentMode bool `protobuf:"varint,9,opt,name=silent_mode,json=silentMode,proto3" json:"silent_mode,omitempty"` } func (x *UpdatePersonalInfoRequest) Reset() { @@ -1725,6 +1749,13 @@ func (x *UpdatePersonalInfoRequest) GetBirthDate() string { return "" } +func (x *UpdatePersonalInfoRequest) GetSilentMode() bool { + if x != nil { + return x.SilentMode + } + return false +} + type UpdatePersonalInfoResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1990,6 +2021,7 @@ type BriefProfile struct { FullName string `protobuf:"bytes,2,opt,name=full_name,json=fullName,proto3" json:"full_name,omitempty"` // omitted for non-adults CountryCode string `protobuf:"bytes,3,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` AvatarUrl string `protobuf:"bytes,9,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + SilentMode bool `protobuf:"varint,13,opt,name=silent_mode,json=silentMode,proto3" json:"silent_mode,omitempty"` } func (x *BriefProfile) Reset() { @@ -2052,6 +2084,13 @@ func (x *BriefProfile) GetAvatarUrl() string { return "" } +func (x *BriefProfile) GetSilentMode() bool { + if x != nil { + return x.SilentMode + } + return false +} + type BriefProfilesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3240,7 +3279,7 @@ var file_api_proto_user_service_user_service_proto_rawDesc = []byte{ 0x73, 0x6f, 0x6e, 0x22, 0x2c, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 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, 0xfd, 0x02, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x65, 0x22, 0xa2, 0x03, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, @@ -3259,325 +3298,334 @@ var file_api_proto_user_service_user_service_proto_rawDesc = []byte{ 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, - 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x76, 0x61, 0x74, 0x61, + 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x10, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x73, 0x5f, 0x65, 0x64, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x73, 0x45, 0x64, 0x69, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x69, 0x72, 0x74, 0x68, 0x5f, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x69, 0x72, 0x74, 0x68, 0x44, 0x61, 0x74, - 0x65, 0x22, 0x15, 0x0a, 0x13, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xfc, 0x01, 0x0a, 0x14, 0x50, 0x65, 0x72, - 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, - 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, - 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, - 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x69, 0x72, 0x74, - 0x68, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x69, - 0x72, 0x74, 0x68, 0x44, 0x61, 0x74, 0x65, 0x22, 0x81, 0x02, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, + 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x73, 0x45, 0x64, + 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x69, 0x72, 0x74, 0x68, 0x5f, + 0x64, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x69, 0x72, 0x74, + 0x68, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x5f, + 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x69, 0x6c, 0x65, + 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, + 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x9d, 0x02, + 0x0a, 0x14, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, + 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, + 0x61, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x6c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, + 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x75, + 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, + 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x12, 0x1d, 0x0a, + 0x0a, 0x62, 0x69, 0x72, 0x74, 0x68, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x62, 0x69, 0x72, 0x74, 0x68, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, + 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0a, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xa2, 0x02, + 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, + 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, + 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, + 0x1b, 0x0a, 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x61, 0x62, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x69, 0x72, 0x74, 0x68, 0x5f, 0x64, 0x61, 0x74, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x69, 0x72, 0x74, 0x68, 0x44, 0x61, 0x74, + 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x4d, 0x6f, + 0x64, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, + 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x30, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x70, 0x67, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6a, 0x70, 0x67, 0x44, 0x61, + 0x74, 0x61, 0x22, 0x35, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x76, 0x61, 0x74, + 0x61, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, + 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x0a, 0x14, 0x42, 0x72, 0x69, 0x65, + 0x66, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x0c, + 0x42, 0x72, 0x69, 0x65, 0x66, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x75, 0x6c, 0x6c, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, + 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, + 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, + 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x69, 0x6c, 0x65, 0x6e, + 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x69, + 0x6c, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xbf, 0x01, 0x0a, 0x15, 0x42, 0x72, 0x69, + 0x65, 0x66, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x42, 0x72, 0x69, 0x65, 0x66, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x1a, 0x57, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x42, 0x72, 0x69, 0x65, 0x66, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2f, 0x0a, 0x15, 0x55, 0x73, + 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x47, 0x0a, 0x16, 0x55, + 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, + 0x73, 0x65, 0x72, 0x73, 0x22, 0x26, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, + 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0x29, 0x0a, 0x13, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0x13, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x46, 0x6f, + 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x25, 0x0a, 0x0f, + 0x41, 0x64, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, + 0x75, 0x69, 0x64, 0x22, 0x28, 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0x12, 0x0a, + 0x10, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0x16, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x0c, 0x0a, 0x0a, 0x4f, 0x4b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, + 0x55, 0x73, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 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, 0x22, 0x5d, 0x0a, 0x11, 0x42, 0x61, 0x73, 0x69, 0x63, 0x46, 0x6f, 0x6c, + 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 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, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x22, 0x73, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x43, 0x68, 0x61, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x6f, 0x75, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x80, 0x02, 0x0a, 0x12, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x43, 0x68, 0x61, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, + 0x44, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x68, 0x61, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, 0x73, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x08, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x1a, 0xa3, 0x01, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, + 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c, + 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, + 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, + 0x61, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, + 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2b, 0x0a, 0x0f, 0x47, + 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, + 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x4b, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x46, + 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, + 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x73, + 0x69, 0x63, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, + 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x42, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x75, 0x73, + 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x32, 0x0a, 0x15, 0x47, 0x65, 0x74, + 0x46, 0x75, 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x13, 0x0a, + 0x11, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x5c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x20, + 0x0a, 0x0c, 0x6d, 0x6f, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, + 0x32, 0xd4, 0x06, 0x0a, 0x15, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x05, 0x4c, 0x6f, + 0x67, 0x69, 0x6e, 0x12, 0x1e, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x47, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x1f, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, + 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0e, 0x47, 0x65, 0x74, + 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x20, 0x2e, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x65, + 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x6f, 0x63, + 0x6b, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x62, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x53, 0x74, 0x65, 0x70, 0x31, 0x12, 0x27, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x31, 0x1a, + 0x23, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, + 0x65, 0x73, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x65, 0x70, 0x32, 0x12, 0x27, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x50, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x74, + 0x65, 0x70, 0x32, 0x1a, 0x23, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x23, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x24, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6c, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x12, 0x29, 0x2e, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6c, 0x6f, 0x73, 0x75, 0x72, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6c, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, + 0x64, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x24, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, + 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x69, 0x67, + 0x6e, 0x65, 0x64, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x64, 0x0a, 0x13, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x69, 0x67, 0x6e, + 0x65, 0x64, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x22, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x6f, + 0x6f, 0x6b, 0x69, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x29, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x6c, 0x0a, 0x13, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, + 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x25, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x22, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb9, 0x05, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x52, + 0x61, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1c, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x52, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, + 0x1a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, + 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, + 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, + 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, + 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x66, - 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, - 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, - 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, - 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x75, 0x6c, - 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, - 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x62, 0x69, 0x72, 0x74, 0x68, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x62, 0x69, 0x72, 0x74, 0x68, 0x44, 0x61, 0x74, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x0a, 0x13, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x70, 0x67, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x07, 0x6a, 0x70, 0x67, 0x44, 0x61, 0x74, 0x61, 0x22, 0x35, 0x0a, 0x14, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, - 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, - 0x72, 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x76, 0x61, 0x74, - 0x61, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x31, 0x0a, 0x14, 0x42, 0x72, 0x69, 0x65, 0x66, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x0c, 0x42, 0x72, 0x69, 0x65, 0x66, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, - 0x22, 0xbf, 0x01, 0x0a, 0x15, 0x42, 0x72, 0x69, 0x65, 0x66, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x08, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x75, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x21, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x76, 0x61, 0x74, + 0x61, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, + 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, + 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x21, 0x2e, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x22, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, 0x65, 0x66, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x42, 0x72, 0x69, 0x65, 0x66, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x42, 0x72, 0x69, 0x65, 0x66, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x57, 0x0a, 0x0d, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x42, 0x72, 0x69, 0x65, 0x66, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x2f, 0x0a, 0x15, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x22, 0x47, 0x0a, 0x16, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, - 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x69, - 0x63, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x26, 0x0a, 0x10, - 0x41, 0x64, 0x64, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x75, 0x75, 0x69, 0x64, 0x22, 0x29, 0x0a, 0x13, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x6f, - 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, - 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, - 0x13, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x25, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0x28, 0x0a, 0x12, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x47, 0x65, 0x74, + 0x65, 0x32, 0x71, 0x0a, 0x13, 0x41, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, + 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5a, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, + 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x73, + 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xaf, 0x06, 0x0a, 0x10, 0x53, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x45, 0x0a, 0x09, 0x41, 0x64, 0x64, + 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x1e, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4f, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4b, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, + 0x12, 0x21, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x4f, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, + 0x0a, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x1f, 0x2e, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6f, + 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, + 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, + 0x0a, 0x08, 0x41, 0x64, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1d, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4f, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0b, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x12, 0x20, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x4f, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, + 0x0a, 0x09, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x1e, 0x2e, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0d, + 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x22, 0x2e, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x0c, 0x0a, 0x0a, 0x4f, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x3b, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x55, 0x73, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, - 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 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, 0x22, 0x5d, 0x0a, 0x11, - 0x42, 0x61, 0x73, 0x69, 0x63, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x55, 0x73, 0x65, - 0x72, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x75, 0x75, 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, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x73, 0x0a, 0x1c, 0x47, + 0x74, 0x1a, 0x23, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x43, 0x68, 0x61, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, + 0x2a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x68, 0x61, 0x74, 0x43, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x74, - 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x22, 0x80, 0x02, 0x0a, 0x12, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x68, 0x61, 0x74, 0x43, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x44, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, - 0x68, 0x61, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x1a, 0xa3, 0x01, - 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, - 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x2b, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x22, 0x4b, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, - 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x42, 0x0a, - 0x11, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, - 0x73, 0x22, 0x32, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x13, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5c, 0x0a, 0x12, 0x47, 0x65, - 0x74, 0x4d, 0x6f, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x6d, 0x6f, 0x64, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x6f, - 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x32, 0xd4, 0x06, 0x0a, 0x15, 0x41, 0x75, 0x74, - 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x44, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x1e, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x6f, - 0x75, 0x74, 0x12, 0x1f, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x55, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x12, 0x20, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x65, - 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x65, 0x70, 0x31, 0x12, 0x27, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, - 0x73, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x31, 0x1a, 0x23, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x12, - 0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x65, - 0x70, 0x32, 0x12, 0x27, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x32, 0x1a, 0x23, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, - 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x5b, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x12, 0x23, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, - 0x14, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6c, - 0x6f, 0x73, 0x75, 0x72, 0x65, 0x12, 0x29, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x43, 0x6c, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6c, 0x6f, - 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0f, - 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, - 0x24, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, - 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x6f, 0x6f, 0x6b, 0x69, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, - 0x12, 0x22, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x29, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x65, - 0x64, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, - 0x6c, 0x0a, 0x13, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x12, 0x25, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb9, 0x05, - 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x49, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x52, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1c, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, - 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x1a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x49, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1c, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0f, 0x47, - 0x65, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x65, - 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x22, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, - 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, - 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, - 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x21, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x22, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, - 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x21, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x76, - 0x61, 0x74, 0x61, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x10, - 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, 0x65, 0x66, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x12, 0x22, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x42, 0x72, 0x69, 0x65, 0x66, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x42, 0x72, 0x69, 0x65, 0x66, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x71, 0x0a, 0x13, 0x41, 0x75, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x5a, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x23, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xaf, 0x06, 0x0a, - 0x10, 0x53, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x45, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x1e, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x41, 0x64, - 0x64, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4f, 0x4b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x21, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x6f, - 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4f, 0x4b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x6c, 0x6c, - 0x6f, 0x77, 0x73, 0x12, 0x1f, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, + 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x43, 0x68, 0x61, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x46, 0x0a, + 0x12, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x12, 0x1d, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x69, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x1f, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x12, 0x1d, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x41, 0x64, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x18, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x4f, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0b, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x20, 0x2e, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4f, 0x4b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x73, 0x12, 0x1e, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x22, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, - 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x68, 0x61, 0x74, 0x43, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x2a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x43, 0x68, 0x61, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x68, 0x61, 0x74, 0x43, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x46, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, - 0x73, 0x46, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1d, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, - 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x69, 0x70, 0x63, - 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x4f, 0x0a, - 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1f, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, - 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, - 0x6f, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, - 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x6f, 0x6d, - 0x69, 0x6e, 0x6f, 0x31, 0x34, 0x2f, 0x6c, 0x69, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x72, 0x70, - 0x63, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x6f, 0x31, 0x34, 0x2f, 0x6c, 0x69, + 0x77, 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/rpc/api/proto/user_service/user_service.twirp.go b/rpc/api/proto/user_service/user_service.twirp.go index 98dc0942b..e4e28aa4c 100644 --- a/rpc/api/proto/user_service/user_service.twirp.go +++ b/rpc/api/proto/user_service/user_service.twirp.go @@ -9763,138 +9763,140 @@ func callClientError(ctx context.Context, h *twirp.ClientHooks, err twirp.Error) } var twirpFileDescriptor0 = []byte{ - // 2122 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x59, 0x5f, 0x53, 0x23, 0xc7, - 0x11, 0x2f, 0x09, 0x04, 0xa8, 0x25, 0x40, 0x0c, 0x82, 0xd3, 0x2d, 0x87, 0x8f, 0xdb, 0xb3, 0x13, - 0xee, 0xec, 0xc0, 0x21, 0xc7, 0x29, 0xc7, 0x79, 0x02, 0xee, 0x8e, 0xe0, 0xbb, 0xb3, 0xaf, 0x44, - 0x70, 0x52, 0x76, 0x5c, 0xaa, 0x61, 0x77, 0x24, 0x2d, 0xac, 0x76, 0xe4, 0x9d, 0x59, 0x08, 0x79, - 0x4a, 0x1e, 0xf3, 0x9a, 0xaf, 0x90, 0x0f, 0x90, 0xe7, 0x3c, 0xe5, 0x4b, 0xe4, 0xb3, 0xe4, 0x29, - 0xa9, 0x4a, 0xcd, 0xbf, 0xd5, 0xee, 0x68, 0x11, 0xaa, 0xe4, 0x31, 0x6f, 0x9a, 0x9e, 0xee, 0x9e, - 0xee, 0x9e, 0xee, 0x9e, 0xfe, 0xad, 0xe0, 0x19, 0x1e, 0x05, 0xfb, 0xa3, 0x98, 0x72, 0xba, 0x9f, - 0x30, 0x12, 0x77, 0x19, 0x89, 0xaf, 0x03, 0x8f, 0xe4, 0x16, 0x7b, 0x72, 0x1f, 0xd5, 0xb3, 0x34, - 0xa7, 0x35, 0x16, 0x0c, 0x46, 0xde, 0xbe, 0x37, 0xc0, 0x5c, 0xf1, 0xb9, 0x5f, 0x42, 0xe3, 0x9c, - 0x91, 0xf8, 0x2d, 0xed, 0x07, 0x51, 0x87, 0xfc, 0x90, 0x10, 0xc6, 0x91, 0x03, 0x4b, 0x42, 0x3a, - 0xc2, 0x43, 0xd2, 0x2a, 0xed, 0x94, 0x76, 0xab, 0x9d, 0x74, 0x2d, 0xf6, 0x46, 0x98, 0xb1, 0x1b, - 0x1a, 0xfb, 0xad, 0xb2, 0xda, 0x33, 0x6b, 0xf7, 0x7b, 0xd8, 0x38, 0x1e, 0xe0, 0xa8, 0x4f, 0xde, - 0x6b, 0x8a, 0x51, 0xf8, 0x04, 0xea, 0x34, 0xf4, 0xbb, 0xa9, 0xa0, 0x52, 0x5a, 0xa3, 0xa1, 0x6f, - 0x38, 0x05, 0x4b, 0x44, 0x6e, 0xba, 0x96, 0xee, 0x5a, 0x44, 0x6e, 0x0c, 0x8b, 0xfb, 0x4b, 0x58, - 0xd6, 0x66, 0xb2, 0x11, 0x8d, 0x18, 0x41, 0x2d, 0x58, 0x1c, 0x12, 0xc6, 0x70, 0xdf, 0x98, 0x69, - 0x96, 0x68, 0x1b, 0x80, 0x11, 0xc6, 0x02, 0x1a, 0x75, 0x03, 0xa3, 0xab, 0xaa, 0x29, 0xa7, 0xbe, - 0xdb, 0x82, 0x4d, 0xdb, 0x50, 0xa5, 0xd2, 0x3d, 0x80, 0x87, 0x1d, 0xc2, 0x08, 0xb7, 0x3c, 0x38, - 0xe3, 0x64, 0x74, 0x80, 0x9a, 0x50, 0x21, 0x43, 0x1c, 0x84, 0xfa, 0x34, 0xb5, 0x70, 0xbf, 0xb9, - 0x5b, 0xa4, 0x9d, 0x0b, 0x57, 0x29, 0x1f, 0x2e, 0x61, 0x64, 0x2c, 0x04, 0xbb, 0x1e, 0xf5, 0x89, - 0x31, 0x52, 0x52, 0x8e, 0xa9, 0x4f, 0xdc, 0x07, 0xb0, 0x61, 0xe9, 0xd5, 0x36, 0x7e, 0x0a, 0xb5, - 0x63, 0x9a, 0x44, 0x3c, 0xbe, 0x7d, 0x1d, 0xe2, 0x3e, 0x6a, 0xc0, 0x5c, 0x12, 0x1b, 0x9b, 0xc4, - 0x4f, 0x84, 0x60, 0x5e, 0xde, 0x9d, 0x52, 0x29, 0x7f, 0xbb, 0x5f, 0x40, 0xe3, 0x4d, 0xe0, 0x5d, - 0x31, 0x8e, 0x63, 0x4e, 0xe2, 0x23, 0xec, 0xf7, 0x49, 0x81, 0x64, 0x13, 0x2a, 0x3c, 0xe0, 0xa1, - 0x11, 0x55, 0x0b, 0xf7, 0x9f, 0x25, 0xa8, 0x8b, 0x24, 0x39, 0xc1, 0x43, 0x72, 0x1a, 0xf5, 0xa8, - 0x38, 0x20, 0x49, 0x02, 0xe3, 0x91, 0xfc, 0x2d, 0xbc, 0xc1, 0xd7, 0x98, 0xe3, 0xb8, 0x2b, 0x74, - 0x6a, 0x6f, 0x14, 0xe5, 0x3c, 0xab, 0x79, 0x2e, 0xa3, 0x19, 0x6d, 0x41, 0xb5, 0x97, 0x84, 0x61, - 0x57, 0x9a, 0x3b, 0xaf, 0xe2, 0x23, 0x08, 0x5f, 0x89, 0x54, 0x3b, 0x80, 0xf9, 0x5e, 0x88, 0xfb, - 0xad, 0xca, 0x4e, 0x69, 0xb7, 0xd6, 0x7e, 0xb8, 0x97, 0xcb, 0xf2, 0x4c, 0x04, 0x8e, 0xca, 0xad, - 0x52, 0x47, 0xb2, 0xa2, 0x77, 0x80, 0xae, 0xc6, 0x5e, 0x76, 0x2f, 0x84, 0x9b, 0xac, 0xb5, 0xb0, - 0x33, 0xb7, 0x5b, 0x6b, 0x7f, 0x90, 0x57, 0x60, 0x47, 0xa3, 0xb3, 0x76, 0x65, 0x51, 0x98, 0xdb, - 0x04, 0x74, 0x46, 0xbd, 0x2b, 0xc2, 0x7f, 0x45, 0xaf, 0x88, 0x29, 0x0f, 0x37, 0x80, 0xf5, 0x1c, - 0x55, 0x67, 0xa3, 0xf0, 0x50, 0x10, 0x4c, 0x76, 0xc8, 0x85, 0x88, 0xb1, 0x97, 0xa6, 0xa0, 0xf8, - 0x89, 0x9e, 0xc3, 0x5a, 0x2f, 0xa6, 0x11, 0xef, 0x92, 0xc8, 0xef, 0x5e, 0x93, 0x58, 0xe4, 0xa4, - 0x8e, 0xca, 0xaa, 0xdc, 0x78, 0x15, 0xf9, 0xdf, 0x28, 0xb2, 0xbb, 0x0e, 0x6b, 0xba, 0x3a, 0x69, - 0xc2, 0xcd, 0xf9, 0x0d, 0x58, 0x31, 0x04, 0x9d, 0x11, 0x3f, 0x87, 0xad, 0xaf, 0x28, 0x0f, 0x7a, - 0xb7, 0x87, 0x9e, 0x27, 0xe2, 0x72, 0x1c, 0x52, 0x96, 0xc4, 0x24, 0x53, 0xcf, 0x77, 0x25, 0xa1, - 0xfb, 0x01, 0x3c, 0x2a, 0x16, 0xd5, 0xaa, 0x5b, 0xb0, 0x79, 0x42, 0xf8, 0x59, 0xd0, 0x8f, 0x88, - 0x7f, 0x4c, 0xe9, 0x55, 0x60, 0xb4, 0xba, 0xbb, 0xd0, 0xcc, 0x93, 0x75, 0x1c, 0x1a, 0x30, 0x77, - 0x79, 0xc3, 0x4d, 0x56, 0x5d, 0xde, 0x70, 0x77, 0x1b, 0xb6, 0x4e, 0x23, 0xc6, 0x71, 0x18, 0x16, - 0x09, 0xb8, 0x7f, 0x2e, 0xc3, 0x03, 0xe1, 0x65, 0x87, 0xf4, 0x03, 0xc6, 0x63, 0xcc, 0x03, 0xfa, - 0xbf, 0xb6, 0xa2, 0x71, 0xa9, 0xce, 0x65, 0x4a, 0x15, 0x7d, 0x0c, 0x6b, 0x71, 0xe6, 0x10, 0x55, - 0x78, 0x2a, 0xed, 0x1a, 0xd9, 0x0d, 0x51, 0x7f, 0x22, 0xa1, 0x2f, 0x82, 0x98, 0x0f, 0xba, 0x3e, - 0xe6, 0x44, 0x26, 0x61, 0xb5, 0x53, 0x95, 0x94, 0x97, 0x98, 0xcb, 0xed, 0x5e, 0x10, 0x33, 0xae, - 0x72, 0x77, 0x41, 0x6d, 0x4b, 0x8a, 0x4c, 0xde, 0x2d, 0xa8, 0x86, 0xd8, 0xec, 0x2e, 0x2a, 0xeb, - 0x04, 0x41, 0x6e, 0x3e, 0x81, 0xba, 0xa7, 0xf2, 0x57, 0x99, 0xb0, 0xa4, 0x9a, 0x9d, 0xa6, 0xc9, - 0xea, 0x7f, 0x01, 0xcd, 0x7c, 0x3c, 0xee, 0xeb, 0x79, 0xee, 0x27, 0xb0, 0xd2, 0xc1, 0x3c, 0x88, - 0xfa, 0x6c, 0x86, 0xe0, 0xb9, 0x1f, 0xc1, 0x6a, 0xca, 0xad, 0x55, 0x23, 0x98, 0xbf, 0x64, 0xd4, - 0xe4, 0xaf, 0xfc, 0xed, 0x3e, 0x87, 0xfa, 0x19, 0xc7, 0x7c, 0x26, 0x95, 0x4f, 0x61, 0x59, 0xf3, - 0x4e, 0x51, 0xf8, 0x09, 0xac, 0xbc, 0x8f, 0x69, 0x2f, 0x08, 0xc9, 0x2c, 0x2a, 0xff, 0x5d, 0x86, - 0xd5, 0x94, 0x5d, 0x6b, 0xcd, 0x07, 0xbe, 0x34, 0x35, 0xf0, 0xe5, 0x7b, 0x02, 0x3f, 0x37, 0x11, - 0xf8, 0x71, 0xa3, 0x9a, 0xcf, 0x36, 0xaa, 0x26, 0x54, 0xf0, 0x05, 0x4d, 0xb8, 0xce, 0x03, 0xb5, - 0x10, 0xea, 0x62, 0x15, 0xc4, 0xae, 0x74, 0x54, 0x65, 0x41, 0x4d, 0xd3, 0xbe, 0x64, 0x34, 0x92, - 0x2f, 0x91, 0x08, 0x8a, 0x62, 0x58, 0xd4, 0x2f, 0x91, 0xa0, 0xc8, 0xed, 0x07, 0xb0, 0x28, 0xbb, - 0x52, 0xe0, 0xeb, 0x24, 0x58, 0x10, 0xcb, 0x53, 0xbb, 0x9d, 0x56, 0xed, 0x76, 0x9a, 0x6b, 0x9c, - 0x60, 0x35, 0xce, 0x67, 0xd0, 0x50, 0x9c, 0xac, 0x4b, 0xfc, 0x80, 0xe3, 0x8b, 0x90, 0xb4, 0x6a, - 0x3b, 0xa5, 0xdd, 0xa5, 0xce, 0xaa, 0xa6, 0xbf, 0xd2, 0x64, 0x2b, 0xc9, 0xeb, 0x56, 0x92, 0xbb, - 0x1b, 0xb0, 0xfe, 0x9e, 0xc4, 0x8c, 0x46, 0x38, 0x14, 0x8d, 0xdf, 0x94, 0xfe, 0xbf, 0x4a, 0xd0, - 0xcc, 0xd3, 0xc7, 0x3d, 0x70, 0xf2, 0x85, 0xb4, 0x6e, 0xac, 0x3c, 0xf5, 0xc6, 0xe6, 0xee, 0xb9, - 0xb1, 0xf9, 0xc9, 0x1b, 0xcb, 0x87, 0xaa, 0x32, 0x35, 0x54, 0x0b, 0x56, 0xa8, 0xd2, 0x7b, 0x5d, - 0xcc, 0xde, 0x6b, 0x3e, 0x2a, 0x4b, 0x76, 0x54, 0xfe, 0x58, 0x86, 0x87, 0xe7, 0x23, 0xb1, 0x57, - 0x10, 0x9c, 0xff, 0x93, 0x18, 0x3c, 0x02, 0xa7, 0x28, 0x04, 0xba, 0xa5, 0xbf, 0x80, 0x75, 0xb5, - 0x7b, 0x28, 0x4d, 0x30, 0xa1, 0x79, 0x08, 0x4b, 0x97, 0xa3, 0xbe, 0xd0, 0x88, 0x65, 0x74, 0xea, - 0x9d, 0xc5, 0xcb, 0x51, 0xff, 0x25, 0xe6, 0xd8, 0xfd, 0x0c, 0x9a, 0x79, 0x89, 0x71, 0xb5, 0x67, - 0x1c, 0x2b, 0x59, 0x8e, 0x89, 0x04, 0xed, 0x90, 0x21, 0xbd, 0xce, 0x1f, 0xe4, 0x6e, 0x8a, 0xee, - 0x99, 0x25, 0xa7, 0xe3, 0x5d, 0xf3, 0x28, 0x0e, 0x48, 0x4f, 0xf7, 0x14, 0x96, 0x31, 0x4c, 0x97, - 0x21, 0x6b, 0x95, 0x76, 0xe6, 0x44, 0x5b, 0x55, 0x75, 0xc8, 0xdc, 0x3f, 0x95, 0xa0, 0x9e, 0x95, - 0x99, 0xfa, 0x24, 0xe5, 0xe2, 0x5c, 0xb6, 0xe2, 0x3c, 0x43, 0xf3, 0x99, 0x5e, 0xf5, 0xee, 0xdf, - 0x4b, 0xb0, 0x61, 0xd9, 0xaf, 0xc3, 0xf4, 0x0e, 0x96, 0x62, 0xfd, 0x5b, 0x3a, 0x50, 0x6b, 0x1f, - 0xe4, 0xc7, 0x9d, 0x42, 0xb1, 0x3d, 0xf3, 0xe3, 0x95, 0xb0, 0xa0, 0x93, 0xaa, 0x70, 0x7e, 0x0d, - 0xcb, 0xb9, 0x2d, 0xf1, 0xa8, 0x5f, 0x91, 0x5b, 0xf3, 0xa8, 0x5f, 0x91, 0x5b, 0xf4, 0x02, 0x2a, - 0xd7, 0x38, 0x4c, 0x94, 0x9b, 0xb5, 0xb6, 0x73, 0xf7, 0x71, 0x1d, 0xc5, 0xf8, 0x45, 0xf9, 0xf3, - 0x92, 0xbb, 0x0f, 0x1b, 0xe7, 0x3a, 0x58, 0x67, 0x04, 0xc7, 0xde, 0xc0, 0xdc, 0xc0, 0x26, 0x2c, - 0x8c, 0x62, 0xd2, 0x0b, 0x7e, 0xa7, 0xcf, 0xd0, 0x2b, 0xf7, 0x04, 0x36, 0x6d, 0x01, 0xed, 0xf2, - 0x4f, 0xa0, 0x22, 0x8e, 0x64, 0xad, 0xb2, 0xf4, 0xf7, 0x81, 0x65, 0x00, 0x66, 0x81, 0x27, 0xa7, - 0x0a, 0xc5, 0xe5, 0xfe, 0x08, 0x1a, 0x87, 0xbe, 0xff, 0x9a, 0x86, 0x21, 0xbd, 0x31, 0x87, 0x16, - 0xcc, 0xb1, 0xee, 0x33, 0x93, 0x51, 0xf7, 0xb3, 0xae, 0xc3, 0xda, 0x09, 0xe1, 0x8a, 0xcf, 0xa4, - 0x92, 0x78, 0x58, 0x0f, 0x7d, 0xff, 0x28, 0xa4, 0xde, 0xd5, 0x34, 0xd9, 0x5d, 0x40, 0xea, 0x98, - 0x7b, 0x39, 0x11, 0x34, 0x4e, 0x08, 0x97, 0x6c, 0x2c, 0x93, 0xdf, 0xe2, 0xe4, 0x24, 0x0c, 0xf3, - 0xf4, 0x3a, 0xc0, 0xd7, 0x6f, 0xd2, 0x6c, 0xff, 0x05, 0x54, 0xd3, 0x30, 0x14, 0xce, 0xec, 0xd9, - 0x54, 0x2e, 0x5b, 0x4f, 0xef, 0xf7, 0xb0, 0x26, 0x85, 0x95, 0x7b, 0xc4, 0xff, 0x6f, 0x94, 0x88, - 0x69, 0xc5, 0x1b, 0xe0, 0x28, 0x22, 0x62, 0x10, 0x93, 0x65, 0xa5, 0x97, 0x2e, 0x83, 0x47, 0x27, - 0x84, 0x1f, 0x7a, 0x3c, 0xb8, 0x26, 0xc7, 0x03, 0xcc, 0x8f, 0x15, 0x9d, 0x65, 0xf2, 0x21, 0x4a, - 0x86, 0x17, 0x24, 0x96, 0x67, 0x55, 0x3a, 0x7a, 0x25, 0xe8, 0xb4, 0xd7, 0x63, 0x84, 0xcb, 0xb3, - 0x2a, 0x1d, 0xbd, 0x42, 0x4f, 0x61, 0x99, 0xd3, 0x44, 0x9e, 0x1a, 0x71, 0xf1, 0x9c, 0xaa, 0xea, - 0xaa, 0x8f, 0x89, 0xa7, 0xbe, 0xfb, 0x87, 0x32, 0xa0, 0xc9, 0x23, 0xd1, 0x4b, 0x58, 0xd2, 0x66, - 0x31, 0x5d, 0x3c, 0xbb, 0xf9, 0x64, 0x9a, 0x94, 0xd9, 0xd3, 0x3f, 0x3a, 0xa9, 0xa4, 0xf3, 0x97, - 0x12, 0x2c, 0x6a, 0x6a, 0x8a, 0xc0, 0x4a, 0x63, 0x04, 0x26, 0xca, 0xdf, 0x0f, 0xd8, 0x28, 0xc4, - 0xb7, 0xd9, 0xf6, 0x50, 0xd3, 0x34, 0xd9, 0x21, 0x1e, 0x43, 0x4d, 0xbe, 0x02, 0x89, 0xec, 0x84, - 0xd2, 0x85, 0xb9, 0x0e, 0x08, 0x92, 0xea, 0x8d, 0xa2, 0x3f, 0x0c, 0x30, 0x33, 0xfb, 0xf3, 0xf2, - 0x4d, 0xaf, 0x0e, 0x30, 0xd3, 0xdb, 0x4f, 0xa0, 0x2e, 0xe5, 0xcd, 0x84, 0xa8, 0xde, 0x01, 0xa9, - 0xf3, 0x9d, 0x9e, 0x12, 0x3f, 0x86, 0xd5, 0x13, 0x22, 0xdc, 0x18, 0xcf, 0x74, 0x99, 0x4b, 0xd2, - 0x23, 0xa5, 0xb9, 0xa4, 0x37, 0x80, 0xb2, 0x09, 0xae, 0x0b, 0xef, 0x33, 0x53, 0x78, 0x2a, 0x56, - 0x8f, 0x0b, 0x0a, 0x2f, 0x9b, 0x34, 0xa6, 0x00, 0x8f, 0x64, 0xb5, 0x98, 0x7c, 0xb5, 0x8b, 0xb8, - 0x34, 0x53, 0x11, 0xb7, 0x61, 0xc3, 0xca, 0x7b, 0xad, 0x67, 0x4a, 0x03, 0x57, 0x55, 0xfa, 0x8e, - 0xfa, 0x6f, 0x03, 0x96, 0x62, 0xa8, 0xdf, 0x4a, 0xcf, 0x52, 0xa2, 0xd6, 0xf2, 0x21, 0xac, 0x60, - 0x7f, 0x18, 0x44, 0x5d, 0x4b, 0x57, 0x5d, 0x52, 0xcf, 0x95, 0x42, 0xb4, 0x03, 0xf5, 0x21, 0xf5, - 0xc7, 0x3c, 0x65, 0xc9, 0x03, 0x43, 0xea, 0x6b, 0x8e, 0xf6, 0x3f, 0x16, 0x60, 0xe3, 0x30, 0xe1, - 0x03, 0x12, 0xf1, 0xc0, 0x93, 0xf3, 0xfb, 0x99, 0xf2, 0x08, 0xbd, 0x84, 0x8a, 0xfc, 0x86, 0x81, - 0x2c, 0x34, 0x6a, 0x7f, 0x83, 0x71, 0xb6, 0xf2, 0xfb, 0xf9, 0x0f, 0x1f, 0x27, 0xb0, 0xa0, 0x10, - 0x20, 0x7a, 0x5c, 0xa8, 0x66, 0x0c, 0x16, 0x9d, 0x47, 0x13, 0x7a, 0x32, 0xc0, 0x11, 0x9d, 0xc3, - 0x8a, 0x40, 0x77, 0x63, 0x34, 0x8b, 0x76, 0xf2, 0xfc, 0x93, 0xf0, 0xd7, 0x79, 0x32, 0x85, 0x43, - 0xab, 0xbd, 0x10, 0xcd, 0x2d, 0xf3, 0xe9, 0x42, 0x7d, 0x3e, 0xf9, 0x71, 0x5e, 0xf0, 0xce, 0xef, - 0x2c, 0xce, 0xd3, 0xa9, 0x8c, 0x53, 0xce, 0x68, 0xcf, 0x7a, 0x46, 0x7b, 0xb6, 0x33, 0xbe, 0x83, - 0x95, 0xfc, 0x77, 0x22, 0x64, 0x89, 0x15, 0x7e, 0xee, 0x72, 0x3e, 0x9c, 0xce, 0xa4, 0x95, 0x0f, - 0xa1, 0x59, 0x84, 0xbc, 0xd1, 0xb3, 0xbc, 0xf4, 0x14, 0x60, 0xef, 0x3c, 0x9f, 0x85, 0x35, 0xf5, - 0x65, 0xd5, 0x02, 0xf2, 0xc8, 0xb2, 0xb3, 0x18, 0xe7, 0x3b, 0xae, 0x75, 0xdf, 0x45, 0x98, 0xdf, - 0x87, 0xf5, 0x02, 0x84, 0x8f, 0x66, 0x10, 0x75, 0x2c, 0x77, 0xa7, 0x7c, 0x28, 0x68, 0x87, 0xe2, - 0x69, 0x1e, 0x63, 0x62, 0x53, 0x53, 0xe7, 0xb0, 0xa4, 0xc8, 0x24, 0x46, 0x1f, 0x4d, 0xd6, 0x43, - 0xc1, 0x67, 0x05, 0xdb, 0xa7, 0x22, 0xa4, 0xdd, 0xfe, 0x5b, 0x25, 0x85, 0xaa, 0xe6, 0xa4, 0x53, - 0x80, 0x13, 0xc2, 0x35, 0x6e, 0x46, 0x56, 0x69, 0xe5, 0xc1, 0xb7, 0xb3, 0x7d, 0xc7, 0xae, 0x8e, - 0xd8, 0x31, 0x2c, 0x89, 0x78, 0x0b, 0x20, 0x88, 0xac, 0xd9, 0x29, 0x0b, 0xb8, 0xed, 0x3e, 0x90, - 0x07, 0xd8, 0xca, 0x1e, 0x33, 0x98, 0x5a, 0xf6, 0xe4, 0x61, 0xb6, 0x6d, 0x8f, 0x8d, 0xaa, 0x7f, - 0x23, 0xd3, 0x23, 0x3b, 0xcc, 0x23, 0xab, 0xd0, 0x0b, 0xb0, 0x8e, 0x1d, 0xc7, 0x42, 0x4c, 0xd8, - 0x07, 0x34, 0x89, 0x14, 0xec, 0x42, 0xbd, 0x13, 0x4e, 0x39, 0xbb, 0xf7, 0x33, 0xa6, 0xcd, 0xac, - 0x9e, 0x85, 0x10, 0xb6, 0xfd, 0x05, 0x80, 0xc4, 0xb6, 0xbf, 0x10, 0x81, 0x9c, 0x43, 0x3d, 0x8b, - 0x25, 0x6c, 0xb5, 0x05, 0xf0, 0x63, 0x32, 0xbd, 0x26, 0xa1, 0x08, 0xfa, 0x4e, 0x8d, 0x75, 0xd9, - 0xb1, 0xdc, 0xae, 0x97, 0x22, 0xa8, 0x62, 0x37, 0xae, 0xc2, 0xb9, 0xbe, 0xfd, 0x03, 0xac, 0x1f, - 0x26, 0x9c, 0x7a, 0x74, 0x38, 0x0a, 0x09, 0x4f, 0xf3, 0xf7, 0x5b, 0x58, 0x16, 0x8f, 0xbf, 0xa2, - 0x06, 0x34, 0xb2, 0xdb, 0x59, 0xe1, 0x68, 0x6e, 0xb7, 0xb3, 0xe2, 0x71, 0xbc, 0xfd, 0xd7, 0x05, - 0x68, 0x9c, 0x51, 0x2f, 0xc0, 0x61, 0xf0, 0xfb, 0xf4, 0xc0, 0x57, 0x50, 0x4d, 0x87, 0x6e, 0xfb, - 0xc9, 0xb3, 0xa7, 0x71, 0xa7, 0x95, 0xdf, 0x1f, 0x0f, 0xb2, 0xe8, 0x8d, 0xb9, 0x02, 0xad, 0xa9, - 0xf0, 0x0a, 0x66, 0x55, 0xf6, 0xb5, 0x2c, 0x1a, 0x3d, 0xd4, 0xd8, 0x0f, 0xe8, 0xc4, 0x3c, 0xef, - 0xec, 0xdc, 0xcd, 0x30, 0x2e, 0x65, 0x33, 0xf1, 0xa3, 0xed, 0x09, 0x1f, 0xb3, 0xf3, 0xfd, 0x14, - 0xab, 0x4e, 0xa1, 0x96, 0xc1, 0x03, 0xf6, 0x33, 0x3c, 0x09, 0x15, 0xa6, 0xa8, 0x7a, 0x0b, 0xd5, - 0x74, 0xd0, 0xb2, 0x83, 0x6e, 0x23, 0x09, 0xe7, 0xf1, 0x9d, 0xfb, 0x69, 0x63, 0x58, 0xce, 0x8d, - 0x5c, 0x76, 0x92, 0x16, 0xe1, 0x10, 0x3b, 0x49, 0x8b, 0x67, 0x36, 0x22, 0x87, 0xb9, 0x82, 0x79, - 0xfc, 0xf9, 0x84, 0xf4, 0x9d, 0x38, 0xc1, 0xbe, 0x9e, 0x02, 0x6d, 0xaf, 0xe5, 0xa8, 0x27, 0x27, - 0xde, 0xd7, 0x34, 0x36, 0x13, 0xfa, 0xf6, 0xc4, 0x19, 0xd9, 0x99, 0xd8, 0x59, 0xdb, 0x0b, 0x46, - 0x9e, 0x78, 0xb9, 0xcd, 0xe0, 0xcc, 0x74, 0xde, 0xe8, 0x91, 0xb1, 0x20, 0x6f, 0xf2, 0x13, 0x66, - 0x41, 0xde, 0x58, 0xd3, 0xe6, 0xd1, 0xe7, 0xdf, 0xfe, 0xac, 0x1f, 0xf0, 0x41, 0x72, 0xb1, 0xe7, - 0xd1, 0xe1, 0xbe, 0x4f, 0x87, 0x41, 0x44, 0x0f, 0x7e, 0xba, 0x1f, 0x06, 0x62, 0x4c, 0x60, 0xfb, - 0xf1, 0xc8, 0xdb, 0x2f, 0xfe, 0xbf, 0xef, 0x62, 0x41, 0xd2, 0x3e, 0xfd, 0x4f, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xed, 0x09, 0xdc, 0x7b, 0x10, 0x1c, 0x00, 0x00, + // 2149 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x39, 0x4f, 0x57, 0x23, 0xc7, + 0xf1, 0x4f, 0x12, 0x02, 0x54, 0x12, 0x20, 0x1a, 0xc1, 0x6a, 0x87, 0xc5, 0xb0, 0xb3, 0xf6, 0xef, + 0xc7, 0xae, 0x6d, 0x58, 0xe4, 0x38, 0xcf, 0x71, 0x4e, 0xc0, 0xee, 0x12, 0xbc, 0x8b, 0xbd, 0x4f, + 0x04, 0x27, 0xcf, 0x8e, 0x9f, 0xde, 0x30, 0xd3, 0x92, 0x1a, 0x46, 0xd3, 0xf2, 0x74, 0x0b, 0x42, + 0x4e, 0xf9, 0x0c, 0xb9, 0xe7, 0xe2, 0xdc, 0x72, 0xc9, 0x39, 0xa7, 0x7c, 0x89, 0x7c, 0x96, 0x9c, + 0xf3, 0xfa, 0xdf, 0x68, 0xa6, 0x35, 0x08, 0xbd, 0xe4, 0x9a, 0xdb, 0x74, 0x75, 0xfd, 0xef, 0xaa, + 0xea, 0xaa, 0x1e, 0x78, 0xee, 0x0d, 0xc9, 0xfe, 0x30, 0xa6, 0x9c, 0xee, 0x8f, 0x18, 0x8e, 0x3b, + 0x0c, 0xc7, 0x37, 0xc4, 0xc7, 0x99, 0xc5, 0x9e, 0xdc, 0x47, 0xb5, 0x34, 0xcc, 0x69, 0x8e, 0x09, + 0xc9, 0xd0, 0xdf, 0xf7, 0xfb, 0x1e, 0x57, 0x78, 0xee, 0x57, 0x50, 0xbf, 0x60, 0x38, 0x7e, 0x47, + 0x7b, 0x24, 0x6a, 0xe3, 0x1f, 0x47, 0x98, 0x71, 0xe4, 0xc0, 0xa2, 0xa0, 0x8e, 0xbc, 0x01, 0x6e, + 0x16, 0x76, 0x0a, 0xbb, 0x95, 0x76, 0xb2, 0x16, 0x7b, 0x43, 0x8f, 0xb1, 0x5b, 0x1a, 0x07, 0xcd, + 0xa2, 0xda, 0x33, 0x6b, 0xf7, 0x07, 0x58, 0x3f, 0xee, 0x7b, 0x51, 0x0f, 0xbf, 0xd7, 0x10, 0xc3, + 0xf0, 0x29, 0xd4, 0x68, 0x18, 0x74, 0x12, 0x42, 0xc5, 0xb4, 0x4a, 0xc3, 0xc0, 0x60, 0x0a, 0x94, + 0x08, 0xdf, 0x76, 0x2c, 0xde, 0xd5, 0x08, 0xdf, 0x1a, 0x14, 0xf7, 0x57, 0xb0, 0xa4, 0xd5, 0x64, + 0x43, 0x1a, 0x31, 0x8c, 0x9a, 0xb0, 0x30, 0xc0, 0x8c, 0x79, 0x3d, 0xa3, 0xa6, 0x59, 0xa2, 0x2d, + 0x00, 0x86, 0x19, 0x23, 0x34, 0xea, 0x10, 0xc3, 0xab, 0xa2, 0x21, 0xa7, 0x81, 0xdb, 0x84, 0x0d, + 0x5b, 0x51, 0xc5, 0xd2, 0x3d, 0x80, 0xc7, 0x6d, 0xcc, 0x30, 0xb7, 0x2c, 0x38, 0xe7, 0x78, 0x78, + 0x80, 0x1a, 0x50, 0xc6, 0x03, 0x8f, 0x84, 0x5a, 0x9a, 0x5a, 0xb8, 0xdf, 0xde, 0x4f, 0xd2, 0xca, + 0xb8, 0xab, 0x90, 0x75, 0x97, 0x50, 0x32, 0x16, 0x84, 0x1d, 0x9f, 0x06, 0xd8, 0x28, 0x29, 0x21, + 0xc7, 0x34, 0xc0, 0xee, 0x23, 0x58, 0xb7, 0xf8, 0x6a, 0x1d, 0x3f, 0x83, 0xea, 0x31, 0x1d, 0x45, + 0x3c, 0xbe, 0x7b, 0x13, 0x7a, 0x3d, 0x54, 0x87, 0xd2, 0x28, 0x36, 0x3a, 0x89, 0x4f, 0x84, 0x60, + 0x4e, 0x9e, 0x9d, 0x62, 0x29, 0xbf, 0xdd, 0x2f, 0xa1, 0xfe, 0x96, 0xf8, 0xd7, 0x8c, 0x7b, 0x31, + 0xc7, 0xf1, 0x91, 0x17, 0xf4, 0x70, 0x0e, 0x65, 0x03, 0xca, 0x9c, 0xf0, 0xd0, 0x90, 0xaa, 0x85, + 0xfb, 0xaf, 0x02, 0xd4, 0x44, 0x90, 0x9c, 0x78, 0x03, 0x7c, 0x1a, 0x75, 0xa9, 0x10, 0x30, 0x1a, + 0x11, 0x63, 0x91, 0xfc, 0x16, 0xd6, 0x78, 0x37, 0x1e, 0xf7, 0xe2, 0x8e, 0xe0, 0xa9, 0xad, 0x51, + 0x90, 0x8b, 0x34, 0xe7, 0x52, 0x8a, 0x33, 0xda, 0x84, 0x4a, 0x77, 0x14, 0x86, 0x1d, 0xa9, 0xee, + 0x9c, 0xf2, 0x8f, 0x00, 0x7c, 0x2d, 0x42, 0xed, 0x00, 0xe6, 0xba, 0xa1, 0xd7, 0x6b, 0x96, 0x77, + 0x0a, 0xbb, 0xd5, 0xd6, 0xe3, 0xbd, 0x4c, 0x94, 0xa7, 0x3c, 0x70, 0x54, 0x6c, 0x16, 0xda, 0x12, + 0x15, 0x9d, 0x01, 0xba, 0x1e, 0x5b, 0xd9, 0xb9, 0x14, 0x66, 0xb2, 0xe6, 0xfc, 0x4e, 0x69, 0xb7, + 0xda, 0xfa, 0x20, 0xcb, 0xc0, 0xf6, 0x46, 0x7b, 0xf5, 0xda, 0x82, 0x30, 0xb7, 0x01, 0xe8, 0x9c, + 0xfa, 0xd7, 0x98, 0xff, 0x9a, 0x5e, 0x63, 0x93, 0x1e, 0x2e, 0x81, 0xb5, 0x0c, 0x54, 0x47, 0xa3, + 0xb0, 0x50, 0x00, 0x4c, 0x74, 0xc8, 0x85, 0xf0, 0xb1, 0x9f, 0x84, 0xa0, 0xf8, 0x44, 0x2f, 0x60, + 0xb5, 0x1b, 0xd3, 0x88, 0x77, 0x70, 0x14, 0x74, 0x6e, 0x70, 0x2c, 0x62, 0x52, 0x7b, 0x65, 0x45, + 0x6e, 0xbc, 0x8e, 0x82, 0x6f, 0x15, 0xd8, 0x5d, 0x83, 0x55, 0x9d, 0x9d, 0x74, 0xc4, 0x8d, 0xfc, + 0x3a, 0x2c, 0x1b, 0x80, 0x8e, 0x88, 0x5f, 0xc0, 0xe6, 0xd7, 0x94, 0x93, 0xee, 0xdd, 0xa1, 0xef, + 0x0b, 0xbf, 0x1c, 0x87, 0x94, 0x8d, 0x62, 0x9c, 0xca, 0xe7, 0xfb, 0x82, 0xd0, 0xfd, 0x00, 0x9e, + 0xe4, 0x93, 0x6a, 0xd6, 0x4d, 0xd8, 0x38, 0xc1, 0xfc, 0x9c, 0xf4, 0x22, 0x1c, 0x1c, 0x53, 0x7a, + 0x4d, 0x0c, 0x57, 0x77, 0x17, 0x1a, 0x59, 0xb0, 0xf6, 0x43, 0x1d, 0x4a, 0x57, 0xb7, 0xdc, 0x44, + 0xd5, 0xd5, 0x2d, 0x77, 0xb7, 0x60, 0xf3, 0x34, 0x62, 0xdc, 0x0b, 0xc3, 0x3c, 0x02, 0xf7, 0x4f, + 0x45, 0x78, 0x24, 0xac, 0x6c, 0xe3, 0x1e, 0x61, 0x3c, 0xf6, 0x38, 0xa1, 0xff, 0x6d, 0x29, 0x1a, + 0xa7, 0x6a, 0x29, 0x95, 0xaa, 0xe8, 0x63, 0x58, 0x8d, 0x53, 0x42, 0x54, 0xe2, 0xa9, 0xb0, 0xab, + 0xa7, 0x37, 0x44, 0xfe, 0x89, 0x80, 0xbe, 0x24, 0x31, 0xef, 0x77, 0x02, 0x8f, 0x63, 0x19, 0x84, + 0x95, 0x76, 0x45, 0x42, 0x5e, 0x79, 0x5c, 0x6e, 0x77, 0x49, 0xcc, 0xb8, 0x8a, 0xdd, 0x79, 0xb5, + 0x2d, 0x21, 0x32, 0x78, 0x37, 0xa1, 0x12, 0x7a, 0x66, 0x77, 0x41, 0x69, 0x27, 0x00, 0x72, 0xf3, + 0x29, 0xd4, 0x7c, 0x15, 0xbf, 0x4a, 0x85, 0x45, 0x55, 0xec, 0x34, 0x4c, 0x66, 0xff, 0x4b, 0x68, + 0x64, 0xfd, 0xf1, 0x50, 0xcd, 0x73, 0x3f, 0x81, 0xe5, 0xb6, 0xc7, 0x49, 0xd4, 0x63, 0x33, 0x38, + 0xcf, 0xfd, 0x08, 0x56, 0x12, 0x6c, 0xcd, 0x1a, 0xc1, 0xdc, 0x15, 0xa3, 0x26, 0x7e, 0xe5, 0xb7, + 0xfb, 0x02, 0x6a, 0xe7, 0xdc, 0xe3, 0x33, 0xb1, 0x7c, 0x06, 0x4b, 0x1a, 0x77, 0x0a, 0xc3, 0x4f, + 0x60, 0xf9, 0x7d, 0x4c, 0xbb, 0x24, 0xc4, 0xb3, 0xb0, 0xfc, 0xa9, 0x04, 0x2b, 0x09, 0xba, 0xe6, + 0x9a, 0x75, 0x7c, 0x61, 0xaa, 0xe3, 0x8b, 0x0f, 0x38, 0xbe, 0x34, 0xe1, 0xf8, 0x71, 0xa1, 0x9a, + 0x4b, 0x17, 0xaa, 0x06, 0x94, 0xbd, 0x4b, 0x3a, 0xe2, 0x3a, 0x0e, 0xd4, 0x42, 0xb0, 0x8b, 0x95, + 0x13, 0x3b, 0xd2, 0x50, 0x15, 0x05, 0x55, 0x0d, 0xfb, 0x8a, 0xd1, 0x48, 0xde, 0x44, 0xc2, 0x29, + 0x0a, 0x61, 0x41, 0xdf, 0x44, 0x02, 0x22, 0xb7, 0x1f, 0xc1, 0x82, 0xac, 0x4a, 0x24, 0xd0, 0x41, + 0x30, 0x2f, 0x96, 0xa7, 0x76, 0x39, 0xad, 0xd8, 0xe5, 0x34, 0x53, 0x38, 0xc1, 0x2a, 0x9c, 0x9f, + 0x42, 0x5d, 0x61, 0xb2, 0x0e, 0x0e, 0x08, 0xf7, 0x2e, 0x43, 0xdc, 0xac, 0xee, 0x14, 0x76, 0x17, + 0x65, 0xa5, 0x5c, 0xd1, 0x7b, 0xaf, 0xf5, 0x96, 0x15, 0xe8, 0x35, 0x3b, 0xd0, 0xb7, 0xa1, 0xca, + 0x48, 0x88, 0x23, 0xde, 0x19, 0x08, 0x97, 0x2d, 0x09, 0x46, 0x6d, 0x50, 0xa0, 0x33, 0x11, 0xaa, + 0xeb, 0xb0, 0xf6, 0x1e, 0xc7, 0x8c, 0x46, 0x5e, 0x28, 0x6e, 0x07, 0x53, 0x1f, 0xfe, 0x5c, 0x84, + 0x46, 0x16, 0x3e, 0x2e, 0x94, 0x93, 0xd7, 0xa8, 0x75, 0xac, 0xc5, 0xa9, 0xc7, 0x5a, 0x7a, 0xe0, + 0x58, 0xe7, 0x26, 0x8f, 0x35, 0xeb, 0xcf, 0xf2, 0x54, 0x7f, 0xce, 0x5b, 0xfe, 0x4c, 0x0e, 0x7f, + 0x21, 0x7d, 0xf8, 0x59, 0xb7, 0x2d, 0x3e, 0xe0, 0xb6, 0xca, 0x84, 0xdb, 0x7e, 0x2a, 0xc2, 0xe3, + 0x8b, 0xa1, 0x20, 0xce, 0xf1, 0xde, 0xff, 0x9c, 0xa4, 0x9c, 0xf4, 0x04, 0x9c, 0x3c, 0x1f, 0xe9, + 0x9b, 0xe3, 0x25, 0xac, 0xa9, 0xdd, 0x43, 0xa9, 0xa3, 0xf1, 0xdd, 0x63, 0x58, 0xbc, 0x1a, 0xf6, + 0x84, 0x48, 0x4f, 0xba, 0xaf, 0xd6, 0x5e, 0xb8, 0x1a, 0xf6, 0x5e, 0x79, 0xdc, 0x73, 0x3f, 0x87, + 0x46, 0x96, 0x62, 0x5c, 0x54, 0x52, 0x96, 0x17, 0x2c, 0xcb, 0x45, 0x88, 0xb7, 0xf1, 0x80, 0xde, + 0x64, 0x05, 0xb9, 0x1b, 0xa2, 0x48, 0xa7, 0xc1, 0x49, 0x17, 0xd9, 0x38, 0x8a, 0x09, 0xee, 0xea, + 0xd2, 0xc5, 0x52, 0x8a, 0xe9, 0x6c, 0x67, 0xcd, 0xc2, 0x4e, 0x49, 0x54, 0x6f, 0x95, 0xee, 0xcc, + 0xfd, 0x6b, 0x01, 0x6a, 0x69, 0x9a, 0xa9, 0x37, 0x5f, 0xe6, 0x20, 0x8a, 0xd6, 0x41, 0xcc, 0x50, + 0xe3, 0x1e, 0x28, 0x2e, 0x0f, 0x66, 0xfc, 0x3f, 0x0a, 0xb0, 0x6e, 0x19, 0xa8, 0xfd, 0x78, 0x06, + 0x8b, 0xb1, 0xfe, 0x96, 0x16, 0x56, 0x5b, 0x07, 0xd9, 0xb6, 0x2b, 0x97, 0x6c, 0xcf, 0x7c, 0xbc, + 0x16, 0x2a, 0xb6, 0x13, 0x16, 0xce, 0x6f, 0x60, 0x29, 0xb3, 0x25, 0x9a, 0x8b, 0x6b, 0x7c, 0x67, + 0x9a, 0x8b, 0x6b, 0x7c, 0x87, 0x5e, 0x42, 0xf9, 0xc6, 0x0b, 0x47, 0xca, 0x0f, 0xd5, 0x96, 0x73, + 0xbf, 0xb8, 0xb6, 0x42, 0xfc, 0xb2, 0xf8, 0x45, 0xc1, 0xdd, 0x87, 0xf5, 0x0b, 0xed, 0xcd, 0x73, + 0xec, 0xc5, 0x7e, 0xdf, 0x1c, 0xd1, 0x06, 0xcc, 0x0f, 0x63, 0xdc, 0x25, 0xbf, 0xd7, 0x32, 0xf4, + 0xca, 0x3d, 0x81, 0x0d, 0x9b, 0x40, 0x9b, 0xfc, 0x29, 0x94, 0x85, 0x48, 0xd6, 0x2c, 0x4a, 0x7b, + 0x1f, 0x59, 0x0a, 0x78, 0x8c, 0xf8, 0xb2, 0xbb, 0x51, 0x58, 0xee, 0xff, 0x41, 0xfd, 0x30, 0x08, + 0xde, 0xd0, 0x30, 0xa4, 0xb7, 0x46, 0x68, 0x4e, 0x3f, 0xed, 0x3e, 0x37, 0x21, 0xf7, 0x30, 0xea, + 0x1a, 0xac, 0x9e, 0x60, 0xae, 0xf0, 0x4c, 0xac, 0x89, 0x0b, 0xfe, 0x30, 0x08, 0x8e, 0x42, 0xea, + 0x5f, 0x4f, 0xa3, 0xdd, 0x05, 0xa4, 0xc4, 0x3c, 0x88, 0x89, 0xa0, 0x7e, 0x82, 0xb9, 0x44, 0x63, + 0xa9, 0x04, 0x10, 0x92, 0x47, 0x61, 0x98, 0x85, 0xd7, 0x00, 0xbe, 0x79, 0x9b, 0xa4, 0xc3, 0x2f, + 0xa1, 0x92, 0xb8, 0x21, 0x77, 0x76, 0x48, 0xc7, 0x7a, 0xd1, 0x6a, 0x01, 0x7e, 0x80, 0x55, 0x49, + 0xac, 0xcc, 0xc3, 0xc1, 0x7f, 0xc2, 0x44, 0x74, 0x4d, 0x7e, 0xdf, 0x8b, 0x22, 0x2c, 0x1a, 0x42, + 0x99, 0x77, 0x7a, 0xe9, 0x32, 0x78, 0x72, 0x82, 0xf9, 0xa1, 0xcf, 0xc9, 0x0d, 0x3e, 0xee, 0x7b, + 0xfc, 0x58, 0xc1, 0x59, 0x2a, 0x1e, 0xa2, 0xd1, 0xe0, 0x12, 0xc7, 0x52, 0x56, 0xb9, 0xad, 0x57, + 0x02, 0x4e, 0xbb, 0x5d, 0x86, 0xb9, 0x94, 0x55, 0x6e, 0xeb, 0x15, 0x7a, 0x06, 0x4b, 0x9c, 0x8e, + 0xa4, 0xd4, 0x88, 0x8b, 0x6b, 0x5d, 0xa5, 0x5f, 0x6d, 0x0c, 0x3c, 0x0d, 0xdc, 0x3f, 0x16, 0x01, + 0x4d, 0x8a, 0x44, 0xaf, 0x60, 0x51, 0xab, 0xc5, 0x74, 0xf2, 0xec, 0x66, 0x83, 0x69, 0x92, 0x66, + 0x4f, 0x7f, 0xb4, 0x13, 0x4a, 0xe7, 0x2f, 0x05, 0x58, 0xd0, 0xd0, 0x64, 0x12, 0x2c, 0x8c, 0x27, + 0x41, 0x51, 0x1f, 0x02, 0xc2, 0x86, 0xa1, 0x77, 0x97, 0xae, 0x1f, 0x55, 0x0d, 0x93, 0x25, 0x64, + 0x1b, 0xaa, 0xf2, 0x1e, 0x19, 0xc9, 0x52, 0x29, 0x4d, 0x28, 0xb5, 0x41, 0x80, 0x54, 0xf1, 0x14, + 0x05, 0xa4, 0xef, 0x31, 0xb3, 0x3f, 0x27, 0x0b, 0x44, 0xa5, 0xef, 0x31, 0xbd, 0xfd, 0x14, 0x6a, + 0x92, 0xde, 0x74, 0xaa, 0xea, 0x26, 0x91, 0x3c, 0xcf, 0x74, 0xb7, 0xfa, 0x31, 0xac, 0x9c, 0x60, + 0x61, 0xc6, 0xb8, 0xb7, 0x4c, 0x1d, 0x92, 0x6e, 0x6d, 0xcd, 0x21, 0xbd, 0x05, 0x94, 0x0e, 0x70, + 0x9d, 0x78, 0x9f, 0x9b, 0xc4, 0x53, 0xbe, 0xda, 0xce, 0x49, 0xbc, 0x74, 0xd0, 0x98, 0x04, 0x3c, + 0x92, 0xd9, 0x62, 0xe2, 0xd5, 0x4e, 0xe2, 0xc2, 0x4c, 0x49, 0xdc, 0x82, 0x75, 0x2b, 0xee, 0x35, + 0x9f, 0x29, 0x15, 0x5e, 0x65, 0xe9, 0x19, 0x0d, 0xde, 0x11, 0x96, 0xcc, 0x72, 0xbf, 0x93, 0x96, + 0x25, 0x40, 0xcd, 0xe5, 0x43, 0x58, 0xf6, 0x82, 0x01, 0x89, 0x3a, 0x16, 0xaf, 0x9a, 0x84, 0x5e, + 0x28, 0x86, 0x68, 0x07, 0x6a, 0x03, 0x1a, 0x8c, 0x71, 0x8a, 0x12, 0x07, 0x06, 0x34, 0xd0, 0x18, + 0xad, 0x7f, 0xce, 0xc3, 0xfa, 0xe1, 0x88, 0xf7, 0x71, 0xc4, 0x89, 0x2f, 0xe7, 0x88, 0x73, 0x65, + 0x11, 0x7a, 0x05, 0x65, 0xf9, 0x96, 0x82, 0xac, 0xa9, 0xd8, 0x7e, 0x0b, 0x72, 0x36, 0xb3, 0xfb, + 0xd9, 0x07, 0x98, 0x13, 0x98, 0x57, 0x93, 0x28, 0xda, 0xce, 0x65, 0x33, 0x1e, 0x5a, 0x9d, 0x27, + 0x13, 0x7c, 0x52, 0x03, 0x2c, 0xba, 0x80, 0x65, 0x31, 0x65, 0x8e, 0xa7, 0x6a, 0xb4, 0x93, 0xc5, + 0x9f, 0x1c, 0xc3, 0x9d, 0xa7, 0x53, 0x30, 0x34, 0xdb, 0x4b, 0x51, 0xdc, 0x52, 0x4f, 0x28, 0xea, + 0x19, 0xe7, 0xff, 0xb3, 0x84, 0xf7, 0xbe, 0xf7, 0x38, 0xcf, 0xa6, 0x22, 0x4e, 0x91, 0xd1, 0x9a, + 0x55, 0x46, 0x6b, 0x36, 0x19, 0xdf, 0xc3, 0x72, 0xf6, 0xbd, 0x0a, 0x59, 0x64, 0xb9, 0xcf, 0x6e, + 0xce, 0x87, 0xd3, 0x91, 0x34, 0xf3, 0x01, 0x34, 0xf2, 0x5e, 0x00, 0xd0, 0xf3, 0x2c, 0xf5, 0x94, + 0x07, 0x06, 0xe7, 0xc5, 0x2c, 0xa8, 0x89, 0x2d, 0x2b, 0xd6, 0x83, 0x02, 0xb2, 0xf4, 0xcc, 0x7f, + 0x6f, 0x70, 0x5c, 0xeb, 0xbc, 0xf3, 0xde, 0x1e, 0x02, 0x58, 0xcb, 0x79, 0x69, 0x40, 0x33, 0x90, + 0x3a, 0x96, 0xb9, 0x53, 0x1e, 0x2c, 0x5a, 0xa1, 0xb8, 0x9a, 0xc7, 0xb3, 0xb9, 0xc9, 0xa9, 0x0b, + 0x58, 0x54, 0x60, 0x1c, 0xa3, 0x8f, 0x26, 0xf3, 0x21, 0xe7, 0x79, 0xc3, 0xb6, 0x29, 0x6f, 0xe2, + 0x6f, 0xfd, 0xbd, 0x9c, 0x8c, 0xcc, 0x46, 0xd2, 0x29, 0xc0, 0x09, 0xe6, 0x7a, 0x7e, 0x47, 0x56, + 0x6a, 0x65, 0x1f, 0x01, 0x9c, 0xad, 0x7b, 0x76, 0xb5, 0xc7, 0x8e, 0x61, 0x51, 0xf8, 0x5b, 0x0c, + 0xa4, 0xc8, 0xea, 0x9d, 0xd2, 0x83, 0xbf, 0x5d, 0x07, 0xb2, 0x83, 0xbe, 0xd2, 0xc7, 0x74, 0xae, + 0x96, 0x3e, 0xd9, 0x71, 0xdf, 0xd6, 0xc7, 0x9e, 0xee, 0x7f, 0x2b, 0xc3, 0x23, 0xdd, 0xed, 0x23, + 0x2b, 0xd1, 0x73, 0xa6, 0x25, 0xdb, 0x8f, 0xb9, 0x63, 0x67, 0x0f, 0xd0, 0xe4, 0x28, 0x61, 0x27, + 0xea, 0xbd, 0x03, 0x99, 0xb3, 0xfb, 0x30, 0x62, 0x52, 0xcc, 0x6a, 0xe9, 0x19, 0xc3, 0xd6, 0x3f, + 0x67, 0x62, 0xb1, 0xf5, 0xcf, 0x1d, 0x51, 0x2e, 0xa0, 0x96, 0x1e, 0x36, 0x6c, 0xb6, 0x39, 0xf3, + 0xc9, 0x64, 0x78, 0x4d, 0xce, 0x2a, 0xe8, 0x7b, 0xd5, 0xd6, 0xa5, 0xdb, 0x72, 0x3b, 0x5f, 0xf2, + 0x66, 0x19, 0xbb, 0x70, 0xe5, 0xf6, 0xf5, 0xad, 0x1f, 0x61, 0xed, 0x70, 0xc4, 0xa9, 0x4f, 0x07, + 0xc3, 0x10, 0xf3, 0x24, 0x7e, 0xbf, 0x83, 0x25, 0x71, 0xf9, 0x2b, 0x28, 0xa1, 0x91, 0x5d, 0xce, + 0x72, 0x5b, 0x73, 0xbb, 0x9c, 0xe5, 0xb7, 0xe3, 0xad, 0xbf, 0xcd, 0x43, 0xfd, 0x9c, 0xfa, 0xc4, + 0x0b, 0xc9, 0x1f, 0x12, 0x81, 0xaf, 0xa1, 0x92, 0x34, 0xdd, 0xf6, 0x95, 0x67, 0x77, 0xe3, 0x4e, + 0x33, 0xbb, 0x3f, 0x6e, 0x64, 0xd1, 0x5b, 0x73, 0x04, 0x9a, 0x53, 0xee, 0x11, 0xcc, 0xca, 0xec, + 0x1b, 0x99, 0x34, 0xba, 0xa9, 0xb1, 0x2f, 0xd0, 0x89, 0x7e, 0xde, 0xd9, 0xb9, 0x1f, 0x61, 0x9c, + 0xca, 0xa6, 0xe3, 0x47, 0x5b, 0x13, 0x36, 0xa6, 0xfb, 0xfb, 0x29, 0x5a, 0x9d, 0x42, 0x35, 0x35, + 0x0f, 0xd8, 0xd7, 0xf0, 0xe4, 0xa8, 0x30, 0x85, 0xd5, 0x3b, 0xa8, 0x24, 0x8d, 0x96, 0xed, 0x74, + 0x7b, 0x92, 0x70, 0xb6, 0xef, 0xdd, 0x4f, 0x0a, 0xc3, 0x52, 0xa6, 0xe5, 0xb2, 0x83, 0x34, 0x6f, + 0x0e, 0xb1, 0x83, 0x34, 0xbf, 0x67, 0xc3, 0xb2, 0x99, 0xcb, 0xe9, 0xc7, 0x5f, 0x4c, 0x50, 0xdf, + 0x3b, 0x27, 0xd8, 0xc7, 0x93, 0xc3, 0xed, 0x8d, 0x6c, 0xf5, 0x64, 0xc7, 0xfb, 0x86, 0xc6, 0xa6, + 0x43, 0xdf, 0x9a, 0x90, 0x91, 0xee, 0x89, 0x9d, 0xd5, 0x3d, 0x32, 0xf4, 0xc5, 0xcd, 0x6d, 0x1a, + 0x67, 0xa6, 0xe3, 0x46, 0xb7, 0x8c, 0x39, 0x71, 0x93, 0xed, 0x30, 0x73, 0xe2, 0xc6, 0xea, 0x36, + 0x8f, 0xbe, 0xf8, 0xee, 0xe7, 0x3d, 0xc2, 0xfb, 0xa3, 0xcb, 0x3d, 0x9f, 0x0e, 0xf6, 0x03, 0x3a, + 0x20, 0x11, 0x3d, 0xf8, 0xd9, 0x7e, 0x48, 0x44, 0x9b, 0xc0, 0xf6, 0xe3, 0xa1, 0xbf, 0x9f, 0xff, + 0xdf, 0xf1, 0x72, 0x5e, 0xc2, 0x3e, 0xfb, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfb, 0xfa, 0x47, + 0xf8, 0x98, 0x1c, 0x00, 0x00, } From 12b502ddcba61dbfac5c7aacf4d13d1f3883d188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Del=20Solar?= Date: Mon, 25 Jul 2022 22:28:39 -0400 Subject: [PATCH 2/4] disable private chat --- pkg/bus/chat.go | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/pkg/bus/chat.go b/pkg/bus/chat.go index b82328a85..e5fe79b2c 100644 --- a/pkg/bus/chat.go +++ b/pkg/bus/chat.go @@ -14,6 +14,12 @@ import ( "github.com/rs/zerolog/log" ) +var ( + errNoPrivateChatAllowed = errors.New("you are in silent mode, so can not chat") + + errReceiverNoPrivateChat = errors.New("this user does not receive chats") +) + // chat-related functionality should be here. Chat should be mostly ephemeral, // but will use Redis to keep a short history of previous chats in every channel. @@ -35,14 +41,25 @@ func (b *Bus) chat(ctx context.Context, userID string, evt *pb.ChatMessage) erro if err != nil { return err } + // check if the sending user is a child or has silent mode on. + isChild := sendingUser.IsChild() == pb.ChildStatus_UNKNOWN || + sendingUser.IsChild() == pb.ChildStatus_CHILD + // Do not allow chat in a private channel + + disallowPrivate := isChild || sendingUser.Profile.SilentMode + privateChannel := strings.HasPrefix(evt.Channel, "chat.pm.") || + strings.HasPrefix(evt.Channel, "chat.game.") // Regulate chat only if the user is not privileged and the // chat is not a private chat or a game chat regulateChat := !(sendingUser.IsAdmin || sendingUser.IsMod || sendingUser.IsDirector || - strings.HasPrefix(evt.Channel, "chat.pm.") || - strings.HasPrefix(evt.Channel, "chat.game.")) + privateChannel) + + if privateChannel && disallowPrivate { + return errNoPrivateChatAllowed + } userFriendlyChannelName := "" if strings.HasPrefix(evt.Channel, "chat.pm.") { @@ -54,6 +71,11 @@ func (b *Bus) chat(ctx context.Context, userID string, evt *pb.ChatMessage) erro if err != nil { return err } + if recUser.IsChild() == pb.ChildStatus_UNKNOWN || + recUser.IsChild() == pb.ChildStatus_CHILD || recUser.Profile.SilentMode { + return errReceiverNoPrivateChat + } + block, err := b.blockExists(ctx, recUser, sendingUser) if err != nil { return err From 37c702ac0ce76cfb3b62dba279baaafd90965a5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Del=20Solar?= Date: Mon, 25 Jul 2022 22:34:27 -0400 Subject: [PATCH 3/4] make sure BriefProfile contains silent mode || is adult --- pkg/stores/user/db.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/stores/user/db.go b/pkg/stores/user/db.go index ac8c69743..0fc8563c6 100644 --- a/pkg/stores/user/db.go +++ b/pkg/stores/user/db.go @@ -358,7 +358,9 @@ func (s *DBStore) GetBriefProfiles(ctx context.Context, uuids []string) (map[str CountryCode: countryCodeOption.String, AvatarUrl: censoredAvatarUrl, FullName: censoredFullName, - SilentMode: silentModeOption.Bool, + // Silent mode for the purposes of the brief profile should + // check both the "silent mode" setting and the user's birthdate. + SilentMode: silentModeOption.Bool || !subjectIsAdult, } } From 4f063f82565d718f26c7c5e7e21833e273c9fb2f Mon Sep 17 00:00:00 2001 From: BriAnna McKissen Date: Sun, 31 Jul 2022 19:07:25 -0700 Subject: [PATCH 4/4] Silent mode for player list --- liwords-ui/src/chat/playerList.scss | 6 ++++++ liwords-ui/src/chat/players.tsx | 1 + liwords-ui/src/shared/usernameWithContext.tsx | 16 ++++++++++++++-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/liwords-ui/src/chat/playerList.scss b/liwords-ui/src/chat/playerList.scss index c170d9c75..e1273eeab 100644 --- a/liwords-ui/src/chat/playerList.scss +++ b/liwords-ui/src/chat/playerList.scss @@ -94,6 +94,12 @@ .country-flag { margin-left: 9px; } + .ant-dropdown-trigger { + i { + margin-left: 0.5em; + opacity: 0.5; + } + } &.offline { .player-name { @include colorModed() { diff --git a/liwords-ui/src/chat/players.tsx b/liwords-ui/src/chat/players.tsx index 0c7d7f15e..8588f9767 100644 --- a/liwords-ui/src/chat/players.tsx +++ b/liwords-ui/src/chat/players.tsx @@ -97,6 +97,7 @@ const Player = React.memo((props: PlayerProps) => { userID={props.uuid} moderate={moderateUser} includeFlag + showSilentMode omitBlock={props.className === 'friends'} showModTools sendMessage={props.sendMessage} diff --git a/liwords-ui/src/shared/usernameWithContext.tsx b/liwords-ui/src/shared/usernameWithContext.tsx index 4ebd914ea..8130704f9 100644 --- a/liwords-ui/src/shared/usernameWithContext.tsx +++ b/liwords-ui/src/shared/usernameWithContext.tsx @@ -1,6 +1,6 @@ import React, { useContext } from 'react'; import { Link } from 'react-router-dom'; -import { Dropdown } from 'antd'; +import { Dropdown, Tooltip } from 'antd'; import { TheBlocker } from './blocker'; import { useContextMatchContext, @@ -11,10 +11,12 @@ import { DisplayUserFlag } from './display_flag'; import { SettingOutlined } from '@ant-design/icons'; import { TheFollower } from './follower'; import { PettableContext } from './player_avatar'; +import { useBriefProfile } from '../utils/brief_profiles'; type UsernameWithContextProps = { additionalMenuItems?: React.ReactNode; includeFlag?: boolean; + showSilentMode?: boolean; fullName?: string; omitProfileLink?: boolean; omitSendMessage?: boolean; @@ -41,6 +43,7 @@ export const UsernameWithContext = (props: UsernameWithContextProps) => { const { handleContextMatches } = useContextMatchContext(); const { loginState } = useLoginStateStoreContext(); const { loggedIn, userID, perms } = loginState; + const briefProfile = useBriefProfile(props.userID); const contextualLink = React.useMemo(() => { if (currentActiveGames && currentActiveGames.length > 0) { const gameID = @@ -95,7 +98,8 @@ export const UsernameWithContext = (props: UsernameWithContextProps) => { !props.omitSendMessage && props.userID && props.userID !== userID && - props.sendMessage ? ( + props.sendMessage && + !briefProfile?.getSilentMode() ? (
  • { @@ -174,6 +178,7 @@ export const UsernameWithContext = (props: UsernameWithContextProps) => { {props.additionalMenuItems} ); + console.warn(briefProfile?.toObject()); return ( { ) : ( <> {props.fullName || props.username} + {props.showSilentMode && briefProfile?.getSilentMode() && ( + + + + )} {props.includeFlag && } )}