diff --git a/.github/workflows/js-release.yml b/.github/workflows/js-release.yml new file mode 100644 index 0000000..d6d37ba --- /dev/null +++ b/.github/workflows/js-release.yml @@ -0,0 +1,40 @@ +name: Build and release client +on: + push: + branches: + - 'main' +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: + uses: bufbuild/buf-setup-action@v1 + with: + version: latest + - run: buf --version + - name: 'Automated Version Bump' + uses: 'phips28/gh-action-bump-version@master' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PACKAGEJSON_DIR: 'js' + with: + patch-wording: 'patch,fixes,fix' + rc-wording: 'test,alpha,wip,test-release,release' + commit-message: 'bump' + bump-policy: 'all' + - name: setup node + uses: actions/setup-node@v4 + with: + node-version: '20.x' + - name: Build and publish + run: | + bash generate.sh + cd js + buf generate + npm install + npm config set '//registry.npmjs.org/:_authToken' $NPM_TOKEN + npm publish + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore index 3c4c51b..b6bc1b1 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ log .idea build/ tmp/ +node_modules/ +/js/src/gen/* diff --git a/auth/access_token.go b/auth/access_token.go index ceed873..4dd77fe 100644 --- a/auth/access_token.go +++ b/auth/access_token.go @@ -25,7 +25,7 @@ func GeneratePlugNmeetJWTAccessToken(apiKey, secret, userId string, tokenValidit return jwt.Signed(sig).Claims(cl).Claims(c).Serialize() } -func GenerateLivekitAccessToken(apiKey, secret string, tokenValidity time.Duration, c *plugnmeet.PlugNmeetTokenClaims, metadata string) (string, error) { +func GenerateLivekitAccessToken(apiKey, secret string, tokenValidity time.Duration, c *plugnmeet.PlugNmeetTokenClaims) (string, error) { at := auth.NewAccessToken(apiKey, secret) grant := &auth.VideoGrant{ RoomJoin: true, @@ -37,7 +37,6 @@ func GenerateLivekitAccessToken(apiKey, secret string, tokenValidity time.Durati at.AddGrant(grant). SetIdentity(c.UserId). SetName(c.Name). - SetMetadata(metadata). SetValidFor(tokenValidity) return at.ToJWT() diff --git a/generate.sh b/generate.sh index bdd501a..d455e69 100755 --- a/generate.sh +++ b/generate.sh @@ -19,7 +19,7 @@ fi if ! which buf >/dev/null; then printf "buf not installed, installing using go install" - go install github.com/bufbuild/buf/cmd/buf + go install github.com/bufbuild/buf/cmd/buf@latest fi buf dep update diff --git a/js/.npmignore b/js/.npmignore new file mode 100644 index 0000000..646ac51 --- /dev/null +++ b/js/.npmignore @@ -0,0 +1,2 @@ +.DS_Store +node_modules/ diff --git a/js/buf.gen.yaml b/js/buf.gen.yaml new file mode 100644 index 0000000..f41313a --- /dev/null +++ b/js/buf.gen.yaml @@ -0,0 +1,17 @@ +version: v2 +managed: + enabled: true + override: + - field_option: jstype + value: JS_STRING +plugins: + - remote: buf.build/bufbuild/es:v2.0.0 + out: src/gen + opt: + - target=dts+js + - import_extension=js +inputs: + - directory: ../proto_files + - module: buf.build/bufbuild/protovalidate + - proto_file: ../tmp/livekit-protocol/protobufs/livekit_models.proto + include_package_files: true diff --git a/js/buf.yaml b/js/buf.yaml new file mode 100644 index 0000000..fc909ff --- /dev/null +++ b/js/buf.yaml @@ -0,0 +1,14 @@ +version: v2 +lint: + use: + - DEFAULT +breaking: + use: + - FILE +modules: + - path: ../proto_files + - path: ../tmp/protovalidate/proto/protovalidate + name: buf.build/bufbuild/protovalidate + - path: ../tmp/livekit-protocol/protobufs +deps: + - buf.build/bufbuild/protovalidate diff --git a/js/package-lock.json b/js/package-lock.json new file mode 100644 index 0000000..96364fb --- /dev/null +++ b/js/package-lock.json @@ -0,0 +1,22 @@ +{ + "name": "plugnmeet-protocol-js", + "version": "1.0.3", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "plugnmeet-protocol-js", + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "2.0.0" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.0.0.tgz", + "integrity": "sha512-sw2JhwJyvyL0zlhG61aDzOVryEfJg2PDZFSV7i7IdC7nAE41WuXCru3QWLGiP87At0BMzKOoKO/FqEGoKygGZQ==", + "license": "(Apache-2.0 AND BSD-3-Clause)" + } + } +} diff --git a/js/package.json b/js/package.json new file mode 100644 index 0000000..09b0a3d --- /dev/null +++ b/js/package.json @@ -0,0 +1,26 @@ +{ + "name": "plugnmeet-protocol-js", + "version": "1.0.3", + "description": "plugNmeet JS proto files", + "author": "Jibon L. Costa", + "license": "MIT", + "type": "module", + "main": "src/index.js", + "types": "src/index.d.ts", + "files": [ + "src" + ], + "exports": { + ".": { + "types": "./src/index.d.ts", + "default": "./src/index.js" + }, + "./*": { + "types": "./src/gen/plugnmeet_*_pb.d.ts", + "default": "./src/gen/plugnmeet_*_pb.js" + } + }, + "dependencies": { + "@bufbuild/protobuf": "2.0.0" + } +} diff --git a/js/src/index.d.ts b/js/src/index.d.ts new file mode 100644 index 0000000..8d5a5fe --- /dev/null +++ b/js/src/index.d.ts @@ -0,0 +1,17 @@ +export * from "./gen/plugnmeet_analytics_pb.js"; +export * from "./gen/plugnmeet_auth_analytics_pb.js"; +export * from "./gen/plugnmeet_auth_recording_pb.js"; +export * from "./gen/plugnmeet_auth_room_pb.js"; +export * from "./gen/plugnmeet_breakout_room_pb.js"; +export * from "./gen/plugnmeet_common_api_pb.js"; +export * from "./gen/plugnmeet_common_pb.js"; +export * from "./gen/plugnmeet_create_room_pb.js"; +export * from "./gen/plugnmeet_datamessage_pb.js"; +export * from "./gen/plugnmeet_gen_token_pb.js"; +export * from "./gen/plugnmeet_ingress_pb.js"; +export * from "./gen/plugnmeet_lti_v1_pb.js"; +export * from "./gen/plugnmeet_nats_msg_pb.js"; +export * from "./gen/plugnmeet_polls_pb.js"; +export * from "./gen/plugnmeet_recorder_pb.js"; +export * from "./gen/plugnmeet_recording_pb.js"; +export * from "./gen/plugnmeet_speech_services_pb.js"; diff --git a/js/src/index.js b/js/src/index.js new file mode 100644 index 0000000..8d5a5fe --- /dev/null +++ b/js/src/index.js @@ -0,0 +1,17 @@ +export * from "./gen/plugnmeet_analytics_pb.js"; +export * from "./gen/plugnmeet_auth_analytics_pb.js"; +export * from "./gen/plugnmeet_auth_recording_pb.js"; +export * from "./gen/plugnmeet_auth_room_pb.js"; +export * from "./gen/plugnmeet_breakout_room_pb.js"; +export * from "./gen/plugnmeet_common_api_pb.js"; +export * from "./gen/plugnmeet_common_pb.js"; +export * from "./gen/plugnmeet_create_room_pb.js"; +export * from "./gen/plugnmeet_datamessage_pb.js"; +export * from "./gen/plugnmeet_gen_token_pb.js"; +export * from "./gen/plugnmeet_ingress_pb.js"; +export * from "./gen/plugnmeet_lti_v1_pb.js"; +export * from "./gen/plugnmeet_nats_msg_pb.js"; +export * from "./gen/plugnmeet_polls_pb.js"; +export * from "./gen/plugnmeet_recorder_pb.js"; +export * from "./gen/plugnmeet_recording_pb.js"; +export * from "./gen/plugnmeet_speech_services_pb.js"; diff --git a/plugnmeet/plugnmeet_common_api.pb.go b/plugnmeet/plugnmeet_common_api.pb.go index 6a77681..d6c596d 100644 --- a/plugnmeet/plugnmeet_common_api.pb.go +++ b/plugnmeet/plugnmeet_common_api.pb.go @@ -265,12 +265,13 @@ type VerifyTokenRes struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Status bool `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - LivekitHost *string `protobuf:"bytes,3,opt,name=livekit_host,json=livekitHost,proto3,oneof" json:"livekit_host,omitempty"` - Token *string `protobuf:"bytes,4,opt,name=token,proto3,oneof" json:"token,omitempty"` - ServerVersion *string `protobuf:"bytes,5,opt,name=server_version,json=serverVersion,proto3,oneof" json:"server_version,omitempty"` - EnabledE2Ee bool `protobuf:"varint,6,opt,name=enabled_e2ee,json=enabledE2ee,proto3" json:"enabled_e2ee,omitempty"` + Status bool `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + NatsWsUrls []string `protobuf:"bytes,3,rep,name=nats_ws_urls,json=natsWsUrls,proto3" json:"nats_ws_urls,omitempty"` + ServerVersion *string `protobuf:"bytes,4,opt,name=server_version,json=serverVersion,proto3,oneof" json:"server_version,omitempty"` + RoomId *string `protobuf:"bytes,5,opt,name=room_id,json=roomId,proto3,oneof" json:"room_id,omitempty"` + UserId *string `protobuf:"bytes,6,opt,name=user_id,json=userId,proto3,oneof" json:"user_id,omitempty"` + NatsSubjects *NatsSubjects `protobuf:"bytes,7,opt,name=nats_subjects,json=natsSubjects,proto3,oneof" json:"nats_subjects,omitempty"` } func (x *VerifyTokenRes) Reset() { @@ -319,32 +320,39 @@ func (x *VerifyTokenRes) GetMsg() string { return "" } -func (x *VerifyTokenRes) GetLivekitHost() string { - if x != nil && x.LivekitHost != nil { - return *x.LivekitHost +func (x *VerifyTokenRes) GetNatsWsUrls() []string { + if x != nil { + return x.NatsWsUrls + } + return nil +} + +func (x *VerifyTokenRes) GetServerVersion() string { + if x != nil && x.ServerVersion != nil { + return *x.ServerVersion } return "" } -func (x *VerifyTokenRes) GetToken() string { - if x != nil && x.Token != nil { - return *x.Token +func (x *VerifyTokenRes) GetRoomId() string { + if x != nil && x.RoomId != nil { + return *x.RoomId } return "" } -func (x *VerifyTokenRes) GetServerVersion() string { - if x != nil && x.ServerVersion != nil { - return *x.ServerVersion +func (x *VerifyTokenRes) GetUserId() string { + if x != nil && x.UserId != nil { + return *x.UserId } return "" } -func (x *VerifyTokenRes) GetEnabledE2Ee() bool { +func (x *VerifyTokenRes) GetNatsSubjects() *NatsSubjects { if x != nil { - return x.EnabledE2Ee + return x.NatsSubjects } - return false + return nil } type MuteUnMuteTrackReq struct { @@ -593,7 +601,7 @@ func (x *DataMessageReq) GetMsgBodyType() DataMsgBodyType { if x != nil { return x.MsgBodyType } - return DataMsgBodyType_RAISE_HAND + return DataMsgBodyType_UNKNOWN } func (x *DataMessageReq) GetMsg() string { @@ -1348,185 +1356,192 @@ var file_plugnmeet_common_api_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x1a, 0x1b, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3a, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, - 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, - 0x22, 0x4c, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, - 0x65, 0x71, 0x12, 0x28, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x73, 0x50, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x10, 0x0a, 0x0e, - 0x5f, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xfa, - 0x01, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, - 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x26, 0x0a, 0x0c, 0x6c, - 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x48, 0x6f, 0x73, 0x74, - 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2a, - 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x65, 0x32, 0x65, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0b, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x32, 0x65, 0x65, 0x42, 0x0f, 0x0a, - 0x0d, 0x5f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x42, 0x08, - 0x0a, 0x06, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xb7, 0x01, 0x0a, 0x12, - 0x4d, 0x75, 0x74, 0x65, 0x55, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x5f, + 0x6e, 0x61, 0x74, 0x73, 0x5f, 0x6d, 0x73, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3a, + 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x4c, 0x0a, 0x0e, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x28, 0x0a, 0x0d, + 0x69, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x73, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x69, 0x73, 0x5f, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc4, 0x02, 0x0a, 0x0e, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x20, 0x0a, 0x0c, 0x6e, 0x61, 0x74, 0x73, 0x5f, 0x77, 0x73, + 0x5f, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, 0x74, + 0x73, 0x57, 0x73, 0x55, 0x72, 0x6c, 0x73, 0x12, 0x2a, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x88, 0x01, 0x01, 0x12, 0x1c, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x88, 0x01, + 0x01, 0x12, 0x1c, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, + 0x41, 0x0a, 0x0d, 0x6e, 0x61, 0x74, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, + 0x65, 0x74, 0x2e, 0x4e, 0x61, 0x74, 0x73, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x48, + 0x03, 0x52, 0x0c, 0x6e, 0x61, 0x74, 0x73, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x88, + 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, + 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x42, 0x10, 0x0a, + 0x0e, 0x5f, 0x6e, 0x61, 0x74, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, + 0xb7, 0x01, 0x0a, 0x12, 0x4d, 0x75, 0x74, 0x65, 0x55, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x54, 0x72, + 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, + 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, + 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, + 0x72, 0x61, 0x63, 0x6b, 0x53, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x75, 0x74, 0x65, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x2a, 0x0a, + 0x11, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x8b, 0x01, 0x0a, 0x14, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x5f, - 0x73, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x72, 0x61, 0x63, 0x6b, - 0x53, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x05, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x55, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x8b, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x10, - 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, - 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6d, 0x73, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x55, - 0x73, 0x65, 0x72, 0x22, 0xaa, 0x02, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x22, 0xaa, 0x02, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, + 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, + 0x6d, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x73, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x53, 0x69, 0x64, 0x12, 0x17, + 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x73, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x53, + 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x0d, 0x6d, 0x73, 0x67, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x70, 0x6c, 0x75, 0x67, + 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x42, 0x6f, 0x64, + 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x6d, 0x73, 0x67, 0x42, 0x6f, 0x64, 0x79, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6d, 0x73, 0x67, 0x12, 0x2a, 0x0a, 0x11, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x6f, 0x18, 0x08, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, + 0x64, 0x6d, 0x69, 0x6e, 0x22, 0x28, 0x0a, 0x0d, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x6e, 0x64, 0x41, + 0x50, 0x49, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0xbd, + 0x01, 0x0a, 0x13, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x53, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x53, 0x69, 0x64, 0x12, 0x3e, - 0x0a, 0x0d, 0x6d, 0x73, 0x67, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, - 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x42, 0x6f, 0x64, 0x79, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x0b, 0x6d, 0x73, 0x67, 0x42, 0x6f, 0x64, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, - 0x12, 0x2a, 0x0a, 0x11, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x6f, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x22, 0x28, 0x0a, 0x0d, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x6e, 0x64, 0x41, 0x50, 0x49, 0x52, 0x65, - 0x71, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0xbd, 0x01, 0x0a, 0x13, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x0f, 0x76, - 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x70, 0x61, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x4e, - 0x6f, 0x74, 0x65, 0x70, 0x61, 0x64, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x13, 0x76, 0x69, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x11, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x88, 0x01, 0x01, 0x42, 0x12, - 0x0a, 0x10, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x70, - 0x61, 0x64, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x77, - 0x68, 0x69, 0x74, 0x65, 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x22, 0xa6, 0x01, 0x0a, 0x12, 0x53, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x12, 0x32, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x53, 0x77, 0x69, 0x74, - 0x63, 0x68, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x52, - 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x22, 0xcb, 0x01, 0x0a, 0x16, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x4d, 0x65, 0x64, 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x36, - 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, - 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x15, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x1c, 0x0a, - 0x07, 0x73, 0x65, 0x65, 0x6b, 0x5f, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, - 0x52, 0x06, 0x73, 0x65, 0x65, 0x6b, 0x54, 0x6f, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x07, 0x72, - 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x42, 0x06, 0x0a, - 0x04, 0x5f, 0x75, 0x72, 0x6c, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x65, 0x65, 0x6b, 0x5f, 0x74, - 0x6f, 0x22, 0xa1, 0x01, 0x0a, 0x16, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x36, 0x0a, 0x04, - 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x70, 0x6c, 0x75, - 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x04, - 0x74, 0x61, 0x73, 0x6b, 0x12, 0x15, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x07, 0x72, - 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x42, 0x06, 0x0a, - 0x04, 0x5f, 0x75, 0x72, 0x6c, 0x22, 0xac, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x45, 0x74, 0x68, 0x65, 0x72, 0x70, 0x61, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x1a, 0x0a, 0x06, - 0x70, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, - 0x70, 0x61, 0x64, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0f, 0x72, 0x65, 0x61, 0x64, - 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x70, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x50, 0x61, 0x64, - 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x70, 0x61, 0x64, 0x5f, 0x69, 0x64, - 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x70, 0x61, - 0x64, 0x5f, 0x69, 0x64, 0x22, 0x5b, 0x0a, 0x10, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x45, 0x74, 0x68, - 0x65, 0x72, 0x70, 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x61, - 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x64, 0x49, - 0x64, 0x22, 0x4f, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x74, 0x68, 0x65, 0x72, - 0x70, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, - 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x22, 0x4a, 0x0a, 0x16, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x57, 0x61, 0x69, - 0x74, 0x69, 0x6e, 0x67, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, - 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x48, - 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x52, - 0x6f, 0x6f, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, - 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xcc, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x73, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x53, 0x69, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x52, + 0x2c, 0x0a, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x70, + 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x76, 0x69, 0x73, 0x69, + 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x70, 0x61, 0x64, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, + 0x13, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x5f, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x11, 0x76, 0x69, + 0x73, 0x69, 0x62, 0x6c, 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x88, + 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x6e, + 0x6f, 0x74, 0x65, 0x70, 0x61, 0x64, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, + 0x6c, 0x65, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x22, 0xa6, + 0x01, 0x0a, 0x12, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x32, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, + 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x54, + 0x61, 0x73, 0x6b, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x2a, 0x2e, 0x0a, 0x13, 0x53, 0x77, 0x69, 0x74, 0x63, - 0x68, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x0b, - 0x0a, 0x07, 0x50, 0x52, 0x4f, 0x4d, 0x4f, 0x54, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, - 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x10, 0x01, 0x2a, 0x3f, 0x0a, 0x17, 0x45, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x54, 0x61, - 0x73, 0x6b, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, - 0x42, 0x41, 0x43, 0x4b, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x4e, 0x44, 0x5f, 0x50, 0x4c, - 0x41, 0x59, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x17, 0x45, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x6e, 0x6b, 0x54, - 0x61, 0x73, 0x6b, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x45, 0x58, 0x54, - 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, - 0x53, 0x54, 0x4f, 0x50, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x4c, 0x49, - 0x4e, 0x4b, 0x10, 0x01, 0x42, 0xa0, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6c, 0x75, - 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x42, 0x17, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x79, - 0x6e, 0x61, 0x70, 0x61, 0x72, 0x72, 0x6f, 0x74, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, - 0x65, 0x74, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x70, 0x6c, 0x75, 0x67, - 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x09, 0x50, 0x6c, - 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xca, 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, - 0x65, 0x65, 0x74, 0xe2, 0x02, 0x15, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x50, 0x6c, - 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xcb, 0x01, 0x0a, 0x16, 0x45, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x22, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x45, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x54, 0x61, 0x73, 0x6b, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x15, 0x0a, 0x03, 0x75, 0x72, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x88, 0x01, + 0x01, 0x12, 0x1c, 0x0a, 0x07, 0x73, 0x65, 0x65, 0x6b, 0x5f, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x01, 0x48, 0x01, 0x52, 0x06, 0x73, 0x65, 0x65, 0x6b, 0x54, 0x6f, 0x88, 0x01, 0x01, 0x12, + 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x75, 0x72, 0x6c, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x65, + 0x65, 0x6b, 0x5f, 0x74, 0x6f, 0x22, 0xa1, 0x01, 0x0a, 0x16, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, + 0x12, 0x36, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, + 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x15, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x88, 0x01, 0x01, 0x12, + 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x75, 0x72, 0x6c, 0x22, 0xac, 0x01, 0x0a, 0x18, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x45, 0x74, 0x68, 0x65, 0x72, 0x70, 0x61, 0x64, 0x53, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, + 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, + 0x12, 0x1a, 0x0a, 0x06, 0x70, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x05, 0x70, 0x61, 0x64, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0f, + 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x70, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, + 0x79, 0x50, 0x61, 0x64, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x70, 0x61, + 0x64, 0x5f, 0x69, 0x64, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, + 0x79, 0x5f, 0x70, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x22, 0x5b, 0x0a, 0x10, 0x43, 0x6c, 0x65, 0x61, + 0x6e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x70, 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, + 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, + 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x15, + 0x0a, 0x06, 0x70, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x70, 0x61, 0x64, 0x49, 0x64, 0x22, 0x4f, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, + 0x74, 0x68, 0x65, 0x72, 0x70, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, + 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x4a, 0x0a, 0x16, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x65, 0x57, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, + 0x49, 0x64, 0x22, 0x48, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x61, 0x69, 0x74, + 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, + 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xcc, 0x01, 0x0a, + 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, + 0x6f, 0x6d, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x6f, + 0x6f, 0x6d, 0x53, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, + 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x2a, 0x0a, 0x11, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x2a, 0x2e, 0x0a, 0x13, 0x53, + 0x77, 0x69, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x61, + 0x73, 0x6b, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x4f, 0x4d, 0x4f, 0x54, 0x45, 0x10, 0x00, 0x12, + 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x10, 0x01, 0x2a, 0x3f, 0x0a, 0x17, 0x45, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x4e, + 0x44, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x17, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4c, + 0x69, 0x6e, 0x6b, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x54, 0x41, 0x52, 0x54, + 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x00, + 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x4f, 0x50, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, + 0x4c, 0x5f, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x01, 0x42, 0xa0, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, + 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x42, 0x17, 0x50, 0x6c, 0x75, 0x67, + 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x41, 0x70, 0x69, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x6d, 0x79, 0x6e, 0x61, 0x70, 0x61, 0x72, 0x72, 0x6f, 0x74, 0x2f, 0x70, 0x6c, 0x75, + 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, + 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, + 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xca, 0x02, 0x09, 0x50, 0x6c, + 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xe2, 0x02, 0x15, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, + 0x65, 0x65, 0x74, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, + 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -1564,18 +1579,20 @@ var file_plugnmeet_common_api_proto_goTypes = []any{ (*ApproveWaitingUsersReq)(nil), // 17: plugnmeet.ApproveWaitingUsersReq (*UpdateWaitingRoomMessageReq)(nil), // 18: plugnmeet.UpdateWaitingRoomMessageReq (*UpdateUserLockSettingsReq)(nil), // 19: plugnmeet.UpdateUserLockSettingsReq - (DataMsgBodyType)(0), // 20: plugnmeet.DataMsgBodyType + (*NatsSubjects)(nil), // 20: plugnmeet.NatsSubjects + (DataMsgBodyType)(0), // 21: plugnmeet.DataMsgBodyType } var file_plugnmeet_common_api_proto_depIdxs = []int32{ - 20, // 0: plugnmeet.DataMessageReq.msg_body_type:type_name -> plugnmeet.DataMsgBodyType - 0, // 1: plugnmeet.SwitchPresenterReq.task:type_name -> plugnmeet.SwitchPresenterTask - 1, // 2: plugnmeet.ExternalMediaPlayerReq.task:type_name -> plugnmeet.ExternalMediaPlayerTask - 2, // 3: plugnmeet.ExternalDisplayLinkReq.task:type_name -> plugnmeet.ExternalDisplayLinkTask - 4, // [4:4] is the sub-list for method output_type - 4, // [4:4] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name + 20, // 0: plugnmeet.VerifyTokenRes.nats_subjects:type_name -> plugnmeet.NatsSubjects + 21, // 1: plugnmeet.DataMessageReq.msg_body_type:type_name -> plugnmeet.DataMsgBodyType + 0, // 2: plugnmeet.SwitchPresenterReq.task:type_name -> plugnmeet.SwitchPresenterTask + 1, // 3: plugnmeet.ExternalMediaPlayerReq.task:type_name -> plugnmeet.ExternalMediaPlayerTask + 2, // 4: plugnmeet.ExternalDisplayLinkReq.task:type_name -> plugnmeet.ExternalDisplayLinkTask + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name } func init() { file_plugnmeet_common_api_proto_init() } @@ -1584,6 +1601,7 @@ func file_plugnmeet_common_api_proto_init() { return } file_plugnmeet_datamessage_proto_init() + file_plugnmeet_nats_msg_proto_init() if !protoimpl.UnsafeEnabled { file_plugnmeet_common_api_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CommonResponse); i { diff --git a/plugnmeet/plugnmeet_common_api.pb.validate.go b/plugnmeet/plugnmeet_common_api.pb.validate.go index aa29de2..0d84ab5 100644 --- a/plugnmeet/plugnmeet_common_api.pb.validate.go +++ b/plugnmeet/plugnmeet_common_api.pb.validate.go @@ -269,18 +269,49 @@ func (m *VerifyTokenRes) validate(all bool) error { // no validation rules for Msg - // no validation rules for EnabledE2Ee - - if m.LivekitHost != nil { - // no validation rules for LivekitHost + if m.ServerVersion != nil { + // no validation rules for ServerVersion } - if m.Token != nil { - // no validation rules for Token - } + if m.RoomId != nil { + // no validation rules for RoomId + } + + if m.UserId != nil { + // no validation rules for UserId + } + + if m.NatsSubjects != nil { + + if all { + switch v := interface{}(m.GetNatsSubjects()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, VerifyTokenResValidationError{ + field: "NatsSubjects", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, VerifyTokenResValidationError{ + field: "NatsSubjects", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNatsSubjects()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return VerifyTokenResValidationError{ + field: "NatsSubjects", + reason: "embedded message failed validation", + cause: err, + } + } + } - if m.ServerVersion != nil { - // no validation rules for ServerVersion } if len(errors) > 0 { diff --git a/plugnmeet/plugnmeet_create_room.pb.go b/plugnmeet/plugnmeet_create_room.pb.go index 1f877d8..628cacc 100644 --- a/plugnmeet/plugnmeet_create_room.pb.go +++ b/plugnmeet/plugnmeet_create_room.pb.go @@ -8,7 +8,6 @@ package plugnmeet import ( _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" - livekit "github.com/livekit/protocol/livekit" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -1258,8 +1257,8 @@ type EndToEndEncryptionFeatures struct { IsEnabled bool `protobuf:"varint,1,opt,name=is_enabled,json=isEnabled,proto3" json:"is_enabled,omitempty"` IncludedChatMessages bool `protobuf:"varint,2,opt,name=included_chat_messages,json=includedChatMessages,proto3" json:"included_chat_messages,omitempty"` // SCENE_UPDATE, POINTER_UPDATE - // this may use more CPU for user end. - // do not enable it if really necessary + // this may use more CPU for the user end. + // do not enable it unless really necessary IncludedWhiteboard bool `protobuf:"varint,3,opt,name=included_whiteboard,json=includedWhiteboard,proto3" json:"included_whiteboard,omitempty"` EncryptionKey *string `protobuf:"bytes,4,opt,name=encryption_key,json=encryptionKey,proto3,oneof" json:"encryption_key,omitempty"` } @@ -1384,9 +1383,9 @@ type CreateRoomRes struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Status bool `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - RoomInfo *livekit.Room `protobuf:"bytes,3,opt,name=room_info,json=roomInfo,proto3" json:"room_info,omitempty"` + Status bool `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + RoomInfo *NatsKvRoomInfo `protobuf:"bytes,3,opt,name=room_info,json=roomInfo,proto3" json:"room_info,omitempty"` } func (x *CreateRoomRes) Reset() { @@ -1435,7 +1434,7 @@ func (x *CreateRoomRes) GetMsg() string { return "" } -func (x *CreateRoomRes) GetRoomInfo() *livekit.Room { +func (x *CreateRoomRes) GetRoomInfo() *NatsKvRoomInfo { if x != nil { return x.RoomInfo } @@ -1451,450 +1450,451 @@ var file_plugnmeet_create_room_proto_rawDesc = []byte{ 0x65, 0x65, 0x74, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x14, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, - 0x74, 0x5f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x80, 0x03, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, - 0x71, 0x12, 0x9e, 0x01, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x84, 0x01, 0xba, 0x48, 0x80, 0x01, 0xba, 0x01, 0x7d, 0x0a, 0x0e, 0x72, - 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x47, 0x72, - 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6f, 0x6e, - 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, - 0x72, 0x73, 0x2c, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, - 0x3a, 0x20, 0x2d, 0x5f, 0x2e, 0x3a, 0x1a, 0x22, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, + 0x1a, 0x17, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x5f, 0x69, 0x6e, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x70, 0x6c, 0x75, 0x67, 0x6e, + 0x6d, 0x65, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x74, 0x73, 0x5f, 0x6d, 0x73, 0x67, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0xfa, 0x02, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, + 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x98, 0x01, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x7f, 0xba, 0x48, 0x7c, 0xba, 0x01, 0x79, 0x0a, + 0x0e, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, + 0x45, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, + 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x6c, 0x65, 0x74, + 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x72, 0x20, + 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, + 0x72, 0x73, 0x3a, 0x20, 0x2d, 0x5f, 0x1a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, - 0x39, 0x2d, 0x5f, 0x2e, 0x3a, 0x5d, 0x2b, 0x24, 0x27, 0x29, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0d, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xba, 0x48, 0x04, 0x2a, 0x02, - 0x20, 0x00, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x37, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x42, - 0x07, 0xba, 0x48, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x48, 0x01, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x50, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x88, 0x01, 0x01, 0x12, 0x3b, - 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x52, 0x6f, 0x6f, - 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, - 0x01, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x10, 0x0a, 0x0e, 0x5f, - 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x13, 0x0a, - 0x11, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, - 0x74, 0x73, 0x22, 0xce, 0x07, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0a, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, - 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x77, 0x65, - 0x6c, 0x63, 0x6f, 0x6d, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x77, 0x65, 0x6c, 0x63, 0x6f, 0x6d, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x72, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, - 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x0b, 0x69, 0x73, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x72, 0x74, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, - 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x0c, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, - 0x74, 0x6d, 0x70, 0x12, 0x84, 0x01, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, - 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x5e, 0xba, 0x48, - 0x5b, 0xba, 0x01, 0x58, 0x0a, 0x15, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x2b, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x75, - 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, - 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x52, 0x0c, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x10, 0x69, 0x73, - 0x5f, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x0e, 0x69, - 0x73, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x6f, 0x75, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x2e, 0x0a, - 0x0b, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x88, 0x01, 0x01, 0x48, 0x01, 0x52, 0x0a, - 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x55, 0x72, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, - 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x04, 0x42, 0x07, 0xba, 0x48, 0x04, 0x32, 0x02, 0x08, 0x00, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2c, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x5f, - 0x75, 0x72, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, - 0x88, 0x01, 0x01, 0x48, 0x02, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x55, 0x72, 0x6c, - 0x88, 0x01, 0x01, 0x12, 0x4a, 0x0a, 0x0d, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x6c, 0x75, - 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, - 0x01, 0x52, 0x0c, 0x72, 0x6f, 0x6f, 0x6d, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, - 0x4b, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x4c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3f, 0x0a, 0x0e, - 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, - 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x52, 0x0d, - 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x12, 0x7e, 0x0a, - 0x0b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x58, 0xba, 0x48, 0x55, 0xba, 0x01, 0x52, 0x0a, 0x12, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x28, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x75, + 0x39, 0x2d, 0x5f, 0x5d, 0x2b, 0x24, 0x27, 0x29, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x12, 0x31, 0x0a, 0x0d, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xba, 0x48, 0x04, 0x2a, 0x02, 0x20, 0x00, + 0x48, 0x00, 0x52, 0x0c, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x88, 0x01, 0x01, 0x12, 0x37, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xba, + 0x48, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x48, 0x01, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, + 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x65, 0x6d, + 0x70, 0x74, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x5f, + 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, + 0x22, 0xce, 0x07, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x25, 0x0a, 0x0a, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x09, 0x72, + 0x6f, 0x6f, 0x6d, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x77, 0x65, 0x6c, 0x63, + 0x6f, 0x6d, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x0e, 0x77, 0x65, 0x6c, 0x63, 0x6f, 0x6d, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x0b, 0x69, 0x73, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x67, 0x12, 0x2d, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x72, 0x74, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, + 0x02, 0x08, 0x00, 0x52, 0x0c, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x74, 0x6d, + 0x70, 0x12, 0x84, 0x01, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x6f, + 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x5e, 0xba, 0x48, 0x5b, 0xba, + 0x01, 0x58, 0x0a, 0x15, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, + 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x2b, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, + 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x62, + 0x72, 0x65, 0x61, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x0e, 0x69, 0x73, 0x42, + 0x72, 0x65, 0x61, 0x6b, 0x6f, 0x75, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x2e, 0x0a, 0x0b, 0x77, + 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x88, 0x01, 0x01, 0x48, 0x01, 0x52, 0x0a, 0x77, 0x65, + 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x55, 0x72, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0a, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x42, + 0x07, 0xba, 0x48, 0x04, 0x32, 0x02, 0x08, 0x00, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x2c, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x5f, 0x75, 0x72, + 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x88, 0x01, + 0x01, 0x48, 0x02, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x55, 0x72, 0x6c, 0x88, 0x01, + 0x01, 0x12, 0x4a, 0x0a, 0x0d, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, + 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, + 0x0c, 0x72, 0x6f, 0x6f, 0x6d, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x4b, 0x0a, + 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, + 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, + 0x63, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3f, 0x0a, 0x0e, 0x63, 0x6f, + 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x43, + 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x52, 0x0d, 0x63, 0x6f, + 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x12, 0x7e, 0x0a, 0x0b, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x58, 0xba, 0x48, 0x55, 0xba, 0x01, 0x52, 0x0a, 0x12, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x28, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, + 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x48, 0x03, 0x52, 0x0a, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x65, + 0x78, 0x74, 0x72, 0x61, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x04, 0x52, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x44, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, + 0x12, 0x0a, 0x10, 0x5f, 0x77, 0x65, 0x6c, 0x63, 0x6f, 0x6d, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, + 0x75, 0x72, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x5f, 0x75, + 0x72, 0x6c, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, + 0x69, 0x64, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x22, 0xc6, 0x0c, 0x0a, 0x12, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x5f, 0x77, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x57, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x73, 0x12, 0x22, 0x0a, + 0x0d, 0x6d, 0x75, 0x74, 0x65, 0x5f, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6d, 0x75, 0x74, 0x65, 0x4f, 0x6e, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x72, 0x65, 0x65, + 0x6e, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x74, 0x6d, 0x70, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x74, 0x6d, 0x70, 0x12, 0x37, + 0x0a, 0x18, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6f, 0x74, 0x68, + 0x65, 0x72, 0x5f, 0x77, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x15, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x56, 0x69, 0x65, 0x77, 0x4f, 0x74, 0x68, 0x65, 0x72, + 0x57, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x73, 0x12, 0x3c, 0x0a, 0x1b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, + 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x56, 0x69, 0x65, 0x77, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x6f, + 0x6e, 0x6c, 0x79, 0x5f, 0x77, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x10, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x4f, 0x6e, 0x6c, 0x79, 0x57, 0x65, 0x62, 0x63, + 0x61, 0x6d, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x6f, 0x6c, + 0x6c, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, + 0x6f, 0x6c, 0x6c, 0x73, 0x12, 0x28, 0x0a, 0x0d, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x64, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0c, 0x72, + 0x6f, 0x6f, 0x6d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x29, + 0x0a, 0x10, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, + 0x63, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x12, 0x2d, 0x0a, 0x10, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x5f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x62, 0x67, 0x18, 0x17, 0x20, + 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x56, 0x69, 0x72, 0x74, + 0x75, 0x61, 0x6c, 0x42, 0x67, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x10, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x5f, 0x72, 0x61, 0x69, 0x73, 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x18, 0x18, 0x20, 0x01, + 0x28, 0x08, 0x48, 0x02, 0x52, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x61, 0x69, 0x73, 0x65, + 0x48, 0x61, 0x6e, 0x64, 0x88, 0x01, 0x01, 0x12, 0x4b, 0x0a, 0x12, 0x72, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x52, 0x11, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6c, + 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x12, 0x59, 0x0a, 0x18, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x74, + 0x65, 0x5f, 0x70, 0x61, 0x64, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, + 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x65, 0x50, 0x61, 0x64, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x15, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4e, 0x6f, + 0x74, 0x65, 0x50, 0x61, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x4e, 0x0a, + 0x13, 0x77, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x6c, 0x75, + 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x57, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x12, 0x77, 0x68, 0x69, 0x74, 0x65, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x6b, 0x0a, + 0x1e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x5f, + 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, + 0x74, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x1b, 0x65, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x15, 0x77, 0x61, + 0x69, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x6c, 0x75, 0x67, + 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x6f, + 0x6d, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x13, 0x77, 0x61, 0x69, 0x74, 0x69, + 0x6e, 0x67, 0x52, 0x6f, 0x6f, 0x6d, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x55, + 0x0a, 0x16, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x42, 0x72, 0x65, 0x61, 0x6b, + 0x6f, 0x75, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, + 0x14, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x6f, 0x75, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x6b, 0x0a, 0x1e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, + 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, + 0x79, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x1b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x12, 0x45, 0x0a, 0x10, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, + 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x0f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x78, 0x0a, 0x23, 0x73, 0x70, 0x65, + 0x65, 0x63, 0x68, 0x5f, 0x74, 0x6f, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, + 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, + 0x65, 0x74, 0x2e, 0x53, 0x70, 0x65, 0x65, 0x63, 0x68, 0x54, 0x6f, 0x54, 0x65, 0x78, 0x74, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x52, 0x1f, 0x73, 0x70, 0x65, 0x65, 0x63, 0x68, 0x54, 0x6f, 0x54, 0x65, 0x78, 0x74, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x1e, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x65, 0x6e, + 0x64, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x6c, + 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x45, 0x6e, 0x64, 0x54, 0x6f, 0x45, 0x6e, 0x64, + 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x52, 0x1a, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x45, 0x6e, 0x64, 0x45, 0x6e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x42, 0x10, + 0x0a, 0x0e, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x76, 0x69, 0x72, 0x74, 0x75, + 0x61, 0x6c, 0x5f, 0x62, 0x67, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, + 0x72, 0x61, 0x69, 0x73, 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x0c, 0x43, + 0x68, 0x61, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x43, 0x68, 0x61, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x46, 0x69, 0x6c, 0x65, + 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, + 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x69, 0x6c, 0x65, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0b, 0x6d, + 0x61, 0x78, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x88, 0x01, 0x01, 0x42, 0x10, 0x0a, + 0x0e, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x22, + 0xea, 0x04, 0x0a, 0x15, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x65, 0x50, 0x61, + 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x65, + 0x5f, 0x70, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x65, 0x50, 0x61, 0x64, + 0x12, 0x24, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x08, 0x69, 0x73, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x21, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, + 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x69, 0x0a, 0x07, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x50, 0xba, 0x48, 0x4d, 0xba, + 0x01, 0x4a, 0x0a, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x12, 0x24, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x48, 0x03, 0x52, 0x0a, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, - 0x0a, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x04, 0x52, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x44, 0x61, 0x74, 0x61, 0x88, 0x01, - 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x77, 0x65, 0x6c, 0x63, 0x6f, 0x6d, 0x65, 0x5f, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, - 0x6b, 0x5f, 0x75, 0x72, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, - 0x5f, 0x75, 0x72, 0x6c, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x5f, 0x69, 0x64, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x22, 0xc6, 0x0c, 0x0a, 0x12, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x5f, 0x77, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x57, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x73, 0x12, - 0x22, 0x0a, 0x0d, 0x6d, 0x75, 0x74, 0x65, 0x5f, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6d, 0x75, 0x74, 0x65, 0x4f, 0x6e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x72, - 0x65, 0x65, 0x6e, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x53, 0x68, 0x61, 0x72, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x74, 0x6d, 0x70, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x74, 0x6d, 0x70, - 0x12, 0x37, 0x0a, 0x18, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x5f, 0x77, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x15, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x56, 0x69, 0x65, 0x77, 0x4f, 0x74, 0x68, - 0x65, 0x72, 0x57, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x73, 0x12, 0x3c, 0x0a, 0x1b, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x56, 0x69, 0x65, 0x77, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x55, 0x73, - 0x65, 0x72, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x77, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x4f, 0x6e, 0x6c, 0x79, 0x57, 0x65, - 0x62, 0x63, 0x61, 0x6d, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, - 0x6f, 0x6c, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x50, 0x6f, 0x6c, 0x6c, 0x73, 0x12, 0x28, 0x0a, 0x0d, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x64, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, - 0x0c, 0x72, 0x6f, 0x6f, 0x6d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, - 0x12, 0x29, 0x0a, 0x10, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 0x79, - 0x74, 0x69, 0x63, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x12, 0x2d, 0x0a, 0x10, 0x61, - 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x62, 0x67, 0x18, - 0x17, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x56, 0x69, - 0x72, 0x74, 0x75, 0x61, 0x6c, 0x42, 0x67, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x10, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x61, 0x69, 0x73, 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x18, 0x18, - 0x20, 0x01, 0x28, 0x08, 0x48, 0x02, 0x52, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x61, 0x69, - 0x73, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x88, 0x01, 0x01, 0x12, 0x4b, 0x0a, 0x12, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, - 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x52, 0x11, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x74, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x18, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x6e, - 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x64, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, - 0x65, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x65, 0x50, 0x61, 0x64, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x15, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, - 0x4e, 0x6f, 0x74, 0x65, 0x50, 0x61, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, - 0x4e, 0x0a, 0x13, 0x77, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x57, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, - 0x61, 0x72, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x12, 0x77, 0x68, 0x69, - 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, - 0x6b, 0x0a, 0x1e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x65, 0x64, 0x69, - 0x61, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, - 0x65, 0x65, 0x74, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x64, 0x69, - 0x61, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, - 0x1b, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x15, - 0x77, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x6c, - 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x52, - 0x6f, 0x6f, 0x6d, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x13, 0x77, 0x61, 0x69, - 0x74, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x6f, 0x6d, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, - 0x12, 0x55, 0x0a, 0x16, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x42, 0x72, 0x65, - 0x61, 0x6b, 0x6f, 0x75, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x52, 0x14, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x6f, 0x75, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x6b, 0x0a, 0x1e, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, - 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x44, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x1b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x10, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x0f, 0x69, 0x6e, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x78, 0x0a, 0x23, 0x73, - 0x70, 0x65, 0x65, 0x63, 0x68, 0x5f, 0x74, 0x6f, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, - 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x53, 0x70, 0x65, 0x65, 0x63, 0x68, 0x54, 0x6f, 0x54, 0x65, 0x78, - 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x52, 0x1f, 0x73, 0x70, 0x65, 0x65, 0x63, 0x68, 0x54, 0x6f, 0x54, 0x65, - 0x78, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x1e, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x6f, 0x5f, - 0x65, 0x6e, 0x64, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x45, 0x6e, 0x64, 0x54, 0x6f, 0x45, - 0x6e, 0x64, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x52, 0x1a, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x45, 0x6e, 0x64, 0x45, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, - 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x76, 0x69, 0x72, - 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x62, 0x67, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x5f, 0x72, 0x61, 0x69, 0x73, 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x22, 0xc2, 0x01, 0x0a, - 0x0c, 0x43, 0x68, 0x61, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1d, 0x0a, - 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x43, 0x68, 0x61, 0x74, 0x12, 0x2a, 0x0a, 0x11, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x46, 0x69, - 0x6c, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x46, 0x69, 0x6c, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x69, - 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, - 0x0b, 0x6d, 0x61, 0x78, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x88, 0x01, 0x01, 0x42, - 0x10, 0x0a, 0x0e, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x22, 0xea, 0x04, 0x0a, 0x15, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x65, - 0x50, 0x61, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x61, - 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x6e, 0x6f, - 0x74, 0x65, 0x5f, 0x70, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x65, 0x50, - 0x61, 0x64, 0x12, 0x24, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x08, - 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x21, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, - 0x08, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x69, 0x0a, 0x07, 0x6e, - 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x50, 0xba, 0x48, - 0x4d, 0xba, 0x01, 0x4a, 0x0a, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x12, 0x24, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, + 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x52, 0x06, 0x6e, 0x6f, + 0x64, 0x65, 0x49, 0x64, 0x12, 0x5e, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x4a, 0xba, 0x48, 0x47, 0xba, 0x01, 0x44, 0x0a, 0x0b, 0x68, 0x6f, 0x73, 0x74, + 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x21, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x52, 0x06, - 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x5e, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x4a, 0xba, 0x48, 0x47, 0xba, 0x01, 0x44, 0x0a, 0x0b, 0x68, 0x6f, - 0x73, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x21, 0x68, 0x6f, 0x73, 0x74, 0x20, - 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, - 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x78, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x70, - 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x58, 0xba, 0x48, 0x55, - 0xba, 0x01, 0x52, 0x0a, 0x12, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x64, 0x5f, 0x69, 0x64, - 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x28, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x61, - 0x64, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, - 0x27, 0x5e, 0x24, 0x27, 0x29, 0x52, 0x09, 0x6e, 0x6f, 0x74, 0x65, 0x50, 0x61, 0x64, 0x49, 0x64, - 0x12, 0x8b, 0x01, 0x0a, 0x10, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x70, - 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x62, 0xba, 0x48, 0x5f, - 0xba, 0x01, 0x5c, 0x0a, 0x17, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x70, - 0x61, 0x64, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x2d, 0x72, 0x65, - 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x70, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x20, 0x73, - 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x52, - 0x0d, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x50, 0x61, 0x64, 0x49, 0x64, 0x22, 0xc7, - 0x04, 0x0a, 0x12, 0x57, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, - 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x57, 0x68, 0x69, 0x74, 0x65, 0x62, - 0x6f, 0x61, 0x72, 0x64, 0x12, 0x21, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x07, - 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x30, 0x0a, 0x0c, 0x70, 0x72, 0x65, 0x6c, 0x6f, - 0x61, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, - 0x48, 0x05, 0x72, 0x03, 0x88, 0x01, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x72, 0x65, 0x6c, 0x6f, - 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x94, 0x01, 0x0a, 0x12, 0x77, 0x68, + 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x52, 0x04, + 0x68, 0x6f, 0x73, 0x74, 0x12, 0x78, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x64, + 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x58, 0xba, 0x48, 0x55, 0xba, 0x01, + 0x52, 0x0a, 0x12, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x5f, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x28, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x64, 0x5f, + 0x69, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, + 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, + 0x24, 0x27, 0x29, 0x52, 0x09, 0x6e, 0x6f, 0x74, 0x65, 0x50, 0x61, 0x64, 0x49, 0x64, 0x12, 0x8b, + 0x01, 0x0a, 0x10, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x70, 0x61, 0x64, + 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x62, 0xba, 0x48, 0x5f, 0xba, 0x01, + 0x5c, 0x0a, 0x17, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x70, 0x61, 0x64, + 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x2d, 0x72, 0x65, 0x61, 0x64, + 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x70, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, 0x6f, + 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, + 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x52, 0x0d, 0x72, + 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x50, 0x61, 0x64, 0x49, 0x64, 0x22, 0xc7, 0x04, 0x0a, + 0x12, 0x57, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x77, + 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x57, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x12, 0x21, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x07, 0x76, 0x69, + 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x30, 0x0a, 0x0c, 0x70, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, + 0x72, 0x03, 0x88, 0x01, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, + 0x46, 0x69, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x94, 0x01, 0x0a, 0x12, 0x77, 0x68, 0x69, 0x74, + 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x66, 0xba, 0x48, 0x63, 0xba, 0x01, 0x60, 0x0a, 0x19, 0x77, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x66, 0xba, 0x48, 0x63, 0xba, 0x01, 0x60, 0x0a, 0x19, - 0x77, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, - 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x2f, 0x77, 0x68, 0x69, 0x74, 0x65, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, - 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x52, 0x10, - 0x77, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x64, - 0x12, 0x71, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x54, 0xba, 0x48, 0x51, 0xba, 0x01, 0x4e, 0x0a, 0x10, 0x66, 0x69, 0x6c, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x26, 0x66, - 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x71, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x54, 0xba, 0x48, 0x51, 0xba, 0x01, 0x4e, 0x0a, 0x10, - 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x12, 0x26, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, + 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x2f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x52, 0x08, 0x66, 0x69, - 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, - 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x50, 0x61, 0x67, 0x65, 0x73, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x70, 0x72, 0x65, 0x6c, - 0x6f, 0x61, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0xf5, 0x02, 0x0a, 0x1b, 0x45, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x65, 0x64, - 0x69, 0x61, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x1a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x4d, 0x65, 0x64, 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x09, 0x69, - 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, - 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x12, 0x76, 0x0a, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x54, 0xba, 0x48, 0x51, 0xba, 0x01, 0x4e, 0x0a, 0x10, 0x73, 0x68, - 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x26, - 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, + 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x52, 0x10, 0x77, 0x68, + 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x71, + 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x54, 0xba, 0x48, 0x51, 0xba, 0x01, 0x4e, 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x26, 0x66, 0x69, 0x6c, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, + 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x71, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x54, 0xba, 0x48, 0x51, 0xba, 0x01, 0x4e, 0x0a, 0x10, 0x66, 0x69, + 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x26, + 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x48, 0x00, 0x52, 0x08, 0x73, 0x68, - 0x61, 0x72, 0x65, 0x64, 0x42, 0x79, 0x88, 0x01, 0x01, 0x12, 0x5f, 0x0a, 0x03, 0x75, 0x72, 0x6c, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x48, 0xba, 0x48, 0x45, 0xba, 0x01, 0x42, 0x0a, 0x0a, + 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, + 0x50, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x61, + 0x67, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x50, 0x61, 0x67, 0x65, 0x73, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x70, 0x72, 0x65, 0x6c, 0x6f, 0x61, + 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0xf5, 0x02, 0x0a, 0x1b, 0x45, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, + 0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x65, 0x64, 0x69, 0x61, + 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4d, 0x65, + 0x64, 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x09, 0x69, 0x73, 0x5f, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, + 0x76, 0x0a, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x54, 0xba, 0x48, 0x51, 0xba, 0x01, 0x4e, 0x0a, 0x10, 0x73, 0x68, 0x61, 0x72, + 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x26, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x48, 0x00, 0x52, 0x08, 0x73, 0x68, 0x61, 0x72, + 0x65, 0x64, 0x42, 0x79, 0x88, 0x01, 0x01, 0x12, 0x5f, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x48, 0xba, 0x48, 0x45, 0xba, 0x01, 0x42, 0x0a, 0x0a, 0x75, 0x72, + 0x6c, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x73, 0x68, + 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x48, 0x01, + 0x52, 0x03, 0x75, 0x72, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x75, 0x72, 0x6c, 0x22, 0x5c, + 0x0a, 0x13, 0x57, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x6f, 0x6d, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x77, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x6f, + 0x6f, 0x6d, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x77, 0x61, + 0x69, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x73, 0x67, 0x22, 0x89, 0x01, 0x0a, + 0x14, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x6f, 0x75, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x77, + 0x12, 0x24, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x08, 0x69, 0x73, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, + 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x22, 0xb0, 0x01, 0x0a, 0x1b, 0x44, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, + 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x6c, + 0x6c, 0x6f, 0x77, 0x12, 0x24, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, + 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x6c, 0x69, 0x6e, + 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x88, + 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, + 0x79, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x42, 0x0c, 0x0a, + 0x0a, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x22, 0xf4, 0x01, 0x0a, 0x11, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x24, 0x0a, 0x0e, + 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x12, 0x3d, 0x0a, 0x1b, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x75, 0x74, + 0x6f, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, + 0x75, 0x74, 0x6f, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x41, 0x6c, 0x6c, + 0x6f, 0x77, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x39, 0x0a, 0x19, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, + 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x77, 0x65, 0x62, + 0x63, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x6f, 0x6e, 0x6c, 0x79, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x57, 0x65, 0x62, 0x63, 0x61, + 0x6d, 0x73, 0x22, 0xb7, 0x02, 0x0a, 0x0f, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x6c, 0x6c, 0x6f, + 0x77, 0x12, 0x36, 0x0a, 0x0a, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, + 0x74, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x09, + 0x69, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x5a, 0x0a, 0x03, 0x75, 0x72, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x48, 0xba, 0x48, 0x45, 0xba, 0x01, 0x42, 0x0a, 0x0a, 0x75, 0x72, 0x6c, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, - 0x48, 0x01, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, - 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x75, 0x72, 0x6c, - 0x22, 0x5c, 0x0a, 0x13, 0x57, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x6f, 0x6d, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x77, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x5f, - 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x77, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x73, 0x67, 0x22, 0x89, - 0x01, 0x0a, 0x14, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x6f, 0x75, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x6c, 0x6c, - 0x6f, 0x77, 0x12, 0x24, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x08, - 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x4e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x22, 0xb0, 0x01, 0x0a, 0x1b, 0x44, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4c, 0x69, - 0x6e, 0x6b, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, - 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, - 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x24, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, - 0x00, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x6c, - 0x69, 0x6e, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x69, 0x6e, - 0x6b, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, - 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x42, 0x79, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x42, - 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x22, 0xf4, 0x01, - 0x0a, 0x11, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x24, - 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x12, 0x3d, 0x0a, 0x1b, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, - 0x75, 0x74, 0x6f, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x41, - 0x6c, 0x6c, 0x6f, 0x77, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x39, 0x0a, 0x19, 0x6f, 0x6e, 0x6c, - 0x79, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x77, - 0x65, 0x62, 0x63, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x6f, 0x6e, - 0x6c, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x57, 0x65, 0x62, - 0x63, 0x61, 0x6d, 0x73, 0x22, 0xb7, 0x02, 0x0a, 0x0f, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, - 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x6c, - 0x6c, 0x6f, 0x77, 0x12, 0x36, 0x0a, 0x0a, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, - 0x65, 0x65, 0x74, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74, - 0x52, 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x5a, 0x0a, 0x03, 0x75, - 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x48, 0xba, 0x48, 0x45, 0xba, 0x01, 0x42, - 0x0a, 0x0a, 0x75, 0x72, 0x6c, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x20, 0x75, 0x72, - 0x6c, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, - 0x27, 0x29, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x75, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x56, 0xba, 0x48, 0x53, - 0xba, 0x01, 0x50, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6b, 0x65, 0x79, 0x5f, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x27, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6b, - 0x65, 0x79, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, - 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, - 0x24, 0x27, 0x29, 0x52, 0x09, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4b, 0x65, 0x79, 0x22, 0x94, - 0x05, 0x0a, 0x1f, 0x53, 0x70, 0x65, 0x65, 0x63, 0x68, 0x54, 0x6f, 0x54, 0x65, 0x78, 0x74, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x30, 0x0a, - 0x14, 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x73, 0x41, - 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x26, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x09, 0x69, 0x73, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x3d, 0x0a, 0x16, 0x69, 0x73, 0x5f, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, - 0x52, 0x14, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x22, 0x6d, 0x61, 0x78, 0x5f, 0x6e, 0x75, - 0x6d, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x73, 0x5f, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x1d, 0x6d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x54, 0x72, 0x61, 0x6e, 0x4c, 0x61, - 0x6e, 0x67, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6e, - 0x67, 0x12, 0x3a, 0x0a, 0x14, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x73, 0x70, 0x65, - 0x65, 0x63, 0x68, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x42, - 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x10, 0x00, 0x52, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x65, 0x64, 0x53, 0x70, 0x65, 0x65, 0x63, 0x68, 0x4c, 0x61, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, - 0x14, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x63, 0x68, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, - 0x92, 0x01, 0x02, 0x10, 0x00, 0x52, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x53, 0x70, - 0x65, 0x65, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x38, 0x0a, 0x13, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x73, - 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x10, 0x00, - 0x52, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x4c, 0x61, - 0x6e, 0x67, 0x73, 0x12, 0xa5, 0x01, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, - 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x6c, 0xba, 0x48, 0x69, 0xba, 0x01, 0x66, 0x0a, 0x1c, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x5f, 0x6c, 0x61, - 0x6e, 0x67, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x32, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x75, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, + 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x56, 0xba, 0x48, 0x53, 0xba, 0x01, + 0x50, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x12, 0x27, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6b, 0x65, 0x79, + 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, + 0x29, 0x52, 0x09, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4b, 0x65, 0x79, 0x22, 0x94, 0x05, 0x0a, + 0x1f, 0x53, 0x70, 0x65, 0x65, 0x63, 0x68, 0x54, 0x6f, 0x54, 0x65, 0x78, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, + 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x30, 0x0a, 0x14, 0x69, + 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x73, 0x41, 0x6c, 0x6c, + 0x6f, 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, + 0x0a, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x09, 0x69, 0x73, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x3d, 0x0a, 0x16, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x14, + 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x22, 0x6d, 0x61, 0x78, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, + 0x74, 0x72, 0x61, 0x6e, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x1d, 0x6d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x54, 0x72, 0x61, 0x6e, 0x4c, 0x61, 0x6e, 0x67, + 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x12, + 0x3a, 0x0a, 0x14, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x63, + 0x68, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xba, + 0x48, 0x05, 0x92, 0x01, 0x02, 0x10, 0x00, 0x52, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, + 0x53, 0x70, 0x65, 0x65, 0x63, 0x68, 0x4c, 0x61, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x14, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x63, 0x68, 0x5f, 0x75, 0x73, + 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, + 0x02, 0x10, 0x00, 0x52, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x53, 0x70, 0x65, 0x65, + 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x38, 0x0a, 0x13, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x73, 0x18, 0x09, + 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x10, 0x00, 0x52, 0x11, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x4c, 0x61, 0x6e, 0x67, + 0x73, 0x12, 0xa5, 0x01, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x75, + 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x6c, 0xba, 0x48, 0x69, 0xba, 0x01, 0x66, 0x0a, 0x1c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x5f, 0x6c, 0x61, 0x6e, 0x67, + 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x32, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x5f, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x20, 0x73, + 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x48, + 0x00, 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x75, 0x62, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x4c, 0x61, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x5f, 0x6c, + 0x61, 0x6e, 0x67, 0x22, 0xc2, 0x02, 0x0a, 0x1a, 0x45, 0x6e, 0x64, 0x54, 0x6f, 0x45, 0x6e, 0x64, + 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, 0x63, 0x68, + 0x61, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x14, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x64, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x57, 0x68, + 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x8a, 0x01, 0x0a, 0x0e, 0x65, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x5e, 0xba, 0x48, 0x5b, 0xba, 0x01, 0x58, 0x0a, 0x15, 0x65, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x12, 0x2b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, - 0x29, 0x48, 0x00, 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x75, 0x62, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x4c, 0x61, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x42, 0x18, 0x0a, 0x16, 0x5f, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x22, 0xc2, 0x02, 0x0a, 0x1a, 0x45, 0x6e, 0x64, 0x54, 0x6f, 0x45, - 0x6e, 0x64, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, - 0x63, 0x68, 0x61, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, - 0x57, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x8a, 0x01, 0x0a, 0x0e, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x5e, 0xba, 0x48, 0x5b, 0xba, 0x01, 0x58, 0x0a, 0x15, 0x65, 0x6e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x12, 0x2b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, - 0x65, 0x79, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, - 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, - 0x24, 0x27, 0x29, 0x48, 0x00, 0x52, 0x0d, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x65, 0x6e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x3d, 0x0a, 0x0d, 0x43, 0x6f, - 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x12, 0x18, 0x0a, 0x07, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x65, 0x0a, 0x0d, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6d, 0x73, 0x67, 0x12, 0x2a, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x6e, 0x66, - 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, - 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, - 0x42, 0xa1, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, - 0x65, 0x74, 0x42, 0x18, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x79, 0x6e, 0x61, 0x70, - 0x61, 0x72, 0x72, 0x6f, 0x74, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2d, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, - 0x65, 0x74, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, - 0x6d, 0x65, 0x65, 0x74, 0xca, 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, - 0xe2, 0x02, 0x15, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, - 0x6d, 0x65, 0x65, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x29, 0x48, 0x00, 0x52, 0x0d, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, + 0x65, 0x79, 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x3d, 0x0a, 0x0d, 0x43, 0x6f, 0x70, 0x79, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x71, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, + 0x73, 0x67, 0x12, 0x36, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, + 0x74, 0x2e, 0x4e, 0x61, 0x74, 0x73, 0x4b, 0x76, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0xa1, 0x01, 0x0a, 0x0d, 0x63, + 0x6f, 0x6d, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x42, 0x18, 0x50, 0x6c, + 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, + 0x6d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x79, 0x6e, 0x61, 0x70, 0x61, 0x72, 0x72, 0x6f, 0x74, 0x2f, + 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xa2, 0x02, 0x03, 0x50, + 0x58, 0x58, 0xaa, 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xca, 0x02, + 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xe2, 0x02, 0x15, 0x50, 0x6c, 0x75, + 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1929,7 +1929,7 @@ var file_plugnmeet_create_room_proto_goTypes = []any{ (*CreateRoomRes)(nil), // 15: plugnmeet.CreateRoomRes (*LockSettings)(nil), // 16: plugnmeet.LockSettings (IngressInput)(0), // 17: plugnmeet.IngressInput - (*livekit.Room)(nil), // 18: livekit.Room + (*NatsKvRoomInfo)(nil), // 18: plugnmeet.NatsKvRoomInfo } var file_plugnmeet_create_room_proto_depIdxs = []int32{ 1, // 0: plugnmeet.CreateRoomReq.metadata:type_name -> plugnmeet.RoomMetadata @@ -1948,7 +1948,7 @@ var file_plugnmeet_create_room_proto_depIdxs = []int32{ 12, // 13: plugnmeet.RoomCreateFeatures.speech_to_text_translation_features:type_name -> plugnmeet.SpeechToTextTranslationFeatures 13, // 14: plugnmeet.RoomCreateFeatures.end_to_end_encryption_features:type_name -> plugnmeet.EndToEndEncryptionFeatures 17, // 15: plugnmeet.IngressFeatures.input_type:type_name -> plugnmeet.IngressInput - 18, // 16: plugnmeet.CreateRoomRes.room_info:type_name -> livekit.Room + 18, // 16: plugnmeet.CreateRoomRes.room_info:type_name -> plugnmeet.NatsKvRoomInfo 17, // [17:17] is the sub-list for method output_type 17, // [17:17] is the sub-list for method input_type 17, // [17:17] is the sub-list for extension type_name @@ -1963,6 +1963,7 @@ func file_plugnmeet_create_room_proto_init() { } file_plugnmeet_gen_token_proto_init() file_plugnmeet_ingress_proto_init() + file_plugnmeet_nats_msg_proto_init() if !protoimpl.UnsafeEnabled { file_plugnmeet_create_room_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateRoomReq); i { diff --git a/plugnmeet/plugnmeet_datamessage.pb.go b/plugnmeet/plugnmeet_datamessage.pb.go index 48d514e..4f64f4e 100644 --- a/plugnmeet/plugnmeet_datamessage.pb.go +++ b/plugnmeet/plugnmeet_datamessage.pb.go @@ -20,150 +20,63 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type DataMsgType int32 - -const ( - DataMsgType_USER DataMsgType = 0 - DataMsgType_SYSTEM DataMsgType = 1 - DataMsgType_WHITEBOARD DataMsgType = 2 -) - -// Enum value maps for DataMsgType. -var ( - DataMsgType_name = map[int32]string{ - 0: "USER", - 1: "SYSTEM", - 2: "WHITEBOARD", - } - DataMsgType_value = map[string]int32{ - "USER": 0, - "SYSTEM": 1, - "WHITEBOARD": 2, - } -) - -func (x DataMsgType) Enum() *DataMsgType { - p := new(DataMsgType) - *p = x - return p -} - -func (x DataMsgType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (DataMsgType) Descriptor() protoreflect.EnumDescriptor { - return file_plugnmeet_datamessage_proto_enumTypes[0].Descriptor() -} - -func (DataMsgType) Type() protoreflect.EnumType { - return &file_plugnmeet_datamessage_proto_enumTypes[0] -} - -func (x DataMsgType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use DataMsgType.Descriptor instead. -func (DataMsgType) EnumDescriptor() ([]byte, []int) { - return file_plugnmeet_datamessage_proto_rawDescGZIP(), []int{0} -} - type DataMsgBodyType int32 const ( // SYSTEM type - DataMsgBodyType_RAISE_HAND DataMsgBodyType = 0 - DataMsgBodyType_LOWER_HAND DataMsgBodyType = 1 - DataMsgBodyType_OTHER_USER_LOWER_HAND DataMsgBodyType = 2 - DataMsgBodyType_FILE_UPLOAD DataMsgBodyType = 3 - DataMsgBodyType_INFO DataMsgBodyType = 4 - DataMsgBodyType_ALERT DataMsgBodyType = 5 - DataMsgBodyType_SEND_CHAT_MSGS DataMsgBodyType = 6 - DataMsgBodyType_RENEW_TOKEN DataMsgBodyType = 7 - DataMsgBodyType_UPDATE_LOCK_SETTINGS DataMsgBodyType = 8 - DataMsgBodyType_INIT_WHITEBOARD DataMsgBodyType = 9 - DataMsgBodyType_USER_VISIBILITY_CHANGE DataMsgBodyType = 10 - DataMsgBodyType_EXTERNAL_MEDIA_PLAYER_EVENTS DataMsgBodyType = 11 - DataMsgBodyType_POLL_CREATED DataMsgBodyType = 12 - DataMsgBodyType_NEW_POLL_RESPONSE DataMsgBodyType = 13 - DataMsgBodyType_POLL_CLOSED DataMsgBodyType = 14 - DataMsgBodyType_JOIN_BREAKOUT_ROOM DataMsgBodyType = 15 - DataMsgBodyType_SPEECH_SUBTITLE_TEXT DataMsgBodyType = 23 - DataMsgBodyType_AZURE_COGNITIVE_SERVICE_SPEECH_TOKEN DataMsgBodyType = 24 - DataMsgBodyType_UPDATE_ROOM_METADATA DataMsgBodyType = 25 - // USER type - DataMsgBodyType_CHAT DataMsgBodyType = 16 + DataMsgBodyType_UNKNOWN DataMsgBodyType = 0 + DataMsgBodyType_FILE_UPLOAD DataMsgBodyType = 1 + DataMsgBodyType_INFO DataMsgBodyType = 2 + DataMsgBodyType_ALERT DataMsgBodyType = 3 + DataMsgBodyType_USER_VISIBILITY_CHANGE DataMsgBodyType = 6 + DataMsgBodyType_EXTERNAL_MEDIA_PLAYER_EVENTS DataMsgBodyType = 7 + DataMsgBodyType_NEW_POLL_RESPONSE DataMsgBodyType = 8 + DataMsgBodyType_SPEECH_SUBTITLE_TEXT DataMsgBodyType = 9 // WHITEBOARD type - DataMsgBodyType_SCENE_UPDATE DataMsgBodyType = 17 - DataMsgBodyType_POINTER_UPDATE DataMsgBodyType = 18 - DataMsgBodyType_ADD_WHITEBOARD_FILE DataMsgBodyType = 19 - DataMsgBodyType_ADD_WHITEBOARD_OFFICE_FILE DataMsgBodyType = 20 - DataMsgBodyType_PAGE_CHANGE DataMsgBodyType = 21 - DataMsgBodyType_WHITEBOARD_APP_STATE_CHANGE DataMsgBodyType = 22 - // analytics - DataMsgBodyType_ANALYTICS_DATA DataMsgBodyType = 27 + DataMsgBodyType_REQ_INIT_WHITEBOARD_DATA DataMsgBodyType = 10 + DataMsgBodyType_SCENE_UPDATE DataMsgBodyType = 11 + DataMsgBodyType_POINTER_UPDATE DataMsgBodyType = 12 + DataMsgBodyType_ADD_WHITEBOARD_FILE DataMsgBodyType = 13 + DataMsgBodyType_ADD_WHITEBOARD_OFFICE_FILE DataMsgBodyType = 14 + DataMsgBodyType_PAGE_CHANGE DataMsgBodyType = 15 + DataMsgBodyType_WHITEBOARD_APP_STATE_CHANGE DataMsgBodyType = 16 ) // Enum value maps for DataMsgBodyType. var ( DataMsgBodyType_name = map[int32]string{ - 0: "RAISE_HAND", - 1: "LOWER_HAND", - 2: "OTHER_USER_LOWER_HAND", - 3: "FILE_UPLOAD", - 4: "INFO", - 5: "ALERT", - 6: "SEND_CHAT_MSGS", - 7: "RENEW_TOKEN", - 8: "UPDATE_LOCK_SETTINGS", - 9: "INIT_WHITEBOARD", - 10: "USER_VISIBILITY_CHANGE", - 11: "EXTERNAL_MEDIA_PLAYER_EVENTS", - 12: "POLL_CREATED", - 13: "NEW_POLL_RESPONSE", - 14: "POLL_CLOSED", - 15: "JOIN_BREAKOUT_ROOM", - 23: "SPEECH_SUBTITLE_TEXT", - 24: "AZURE_COGNITIVE_SERVICE_SPEECH_TOKEN", - 25: "UPDATE_ROOM_METADATA", - 16: "CHAT", - 17: "SCENE_UPDATE", - 18: "POINTER_UPDATE", - 19: "ADD_WHITEBOARD_FILE", - 20: "ADD_WHITEBOARD_OFFICE_FILE", - 21: "PAGE_CHANGE", - 22: "WHITEBOARD_APP_STATE_CHANGE", - 27: "ANALYTICS_DATA", + 0: "UNKNOWN", + 1: "FILE_UPLOAD", + 2: "INFO", + 3: "ALERT", + 6: "USER_VISIBILITY_CHANGE", + 7: "EXTERNAL_MEDIA_PLAYER_EVENTS", + 8: "NEW_POLL_RESPONSE", + 9: "SPEECH_SUBTITLE_TEXT", + 10: "REQ_INIT_WHITEBOARD_DATA", + 11: "SCENE_UPDATE", + 12: "POINTER_UPDATE", + 13: "ADD_WHITEBOARD_FILE", + 14: "ADD_WHITEBOARD_OFFICE_FILE", + 15: "PAGE_CHANGE", + 16: "WHITEBOARD_APP_STATE_CHANGE", } DataMsgBodyType_value = map[string]int32{ - "RAISE_HAND": 0, - "LOWER_HAND": 1, - "OTHER_USER_LOWER_HAND": 2, - "FILE_UPLOAD": 3, - "INFO": 4, - "ALERT": 5, - "SEND_CHAT_MSGS": 6, - "RENEW_TOKEN": 7, - "UPDATE_LOCK_SETTINGS": 8, - "INIT_WHITEBOARD": 9, - "USER_VISIBILITY_CHANGE": 10, - "EXTERNAL_MEDIA_PLAYER_EVENTS": 11, - "POLL_CREATED": 12, - "NEW_POLL_RESPONSE": 13, - "POLL_CLOSED": 14, - "JOIN_BREAKOUT_ROOM": 15, - "SPEECH_SUBTITLE_TEXT": 23, - "AZURE_COGNITIVE_SERVICE_SPEECH_TOKEN": 24, - "UPDATE_ROOM_METADATA": 25, - "CHAT": 16, - "SCENE_UPDATE": 17, - "POINTER_UPDATE": 18, - "ADD_WHITEBOARD_FILE": 19, - "ADD_WHITEBOARD_OFFICE_FILE": 20, - "PAGE_CHANGE": 21, - "WHITEBOARD_APP_STATE_CHANGE": 22, - "ANALYTICS_DATA": 27, + "UNKNOWN": 0, + "FILE_UPLOAD": 1, + "INFO": 2, + "ALERT": 3, + "USER_VISIBILITY_CHANGE": 6, + "EXTERNAL_MEDIA_PLAYER_EVENTS": 7, + "NEW_POLL_RESPONSE": 8, + "SPEECH_SUBTITLE_TEXT": 9, + "REQ_INIT_WHITEBOARD_DATA": 10, + "SCENE_UPDATE": 11, + "POINTER_UPDATE": 12, + "ADD_WHITEBOARD_FILE": 13, + "ADD_WHITEBOARD_OFFICE_FILE": 14, + "PAGE_CHANGE": 15, + "WHITEBOARD_APP_STATE_CHANGE": 16, } ) @@ -178,11 +91,11 @@ func (x DataMsgBodyType) String() string { } func (DataMsgBodyType) Descriptor() protoreflect.EnumDescriptor { - return file_plugnmeet_datamessage_proto_enumTypes[1].Descriptor() + return file_plugnmeet_datamessage_proto_enumTypes[0].Descriptor() } func (DataMsgBodyType) Type() protoreflect.EnumType { - return &file_plugnmeet_datamessage_proto_enumTypes[1] + return &file_plugnmeet_datamessage_proto_enumTypes[0] } func (x DataMsgBodyType) Number() protoreflect.EnumNumber { @@ -191,24 +104,23 @@ func (x DataMsgBodyType) Number() protoreflect.EnumNumber { // Deprecated: Use DataMsgBodyType.Descriptor instead. func (DataMsgBodyType) EnumDescriptor() ([]byte, []int) { - return file_plugnmeet_datamessage_proto_rawDescGZIP(), []int{1} + return file_plugnmeet_datamessage_proto_rawDescGZIP(), []int{0} } -type DataMessage struct { +type DataChannelMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Type DataMsgType `protobuf:"varint,1,opt,name=type,proto3,enum=plugnmeet.DataMsgType" json:"type,omitempty"` - MessageId *string `protobuf:"bytes,2,opt,name=message_id,json=messageId,proto3,oneof" json:"message_id,omitempty"` - RoomSid string `protobuf:"bytes,3,opt,name=room_sid,json=roomSid,proto3" json:"room_sid,omitempty"` - RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - To *string `protobuf:"bytes,5,opt,name=to,proto3,oneof" json:"to,omitempty"` - Body *DataMsgBody `protobuf:"bytes,6,opt,name=body,proto3" json:"body,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Type DataMsgBodyType `protobuf:"varint,2,opt,name=type,proto3,enum=plugnmeet.DataMsgBodyType" json:"type,omitempty"` + FromUserId string `protobuf:"bytes,3,opt,name=from_user_id,json=fromUserId,proto3" json:"from_user_id,omitempty"` + ToUserId *string `protobuf:"bytes,4,opt,name=to_user_id,json=toUserId,proto3,oneof" json:"to_user_id,omitempty"` + Message string `protobuf:"bytes,5,opt,name=message,proto3" json:"message,omitempty"` } -func (x *DataMessage) Reset() { - *x = DataMessage{} +func (x *DataChannelMessage) Reset() { + *x = DataChannelMessage{} if protoimpl.UnsafeEnabled { mi := &file_plugnmeet_datamessage_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -216,13 +128,13 @@ func (x *DataMessage) Reset() { } } -func (x *DataMessage) String() string { +func (x *DataChannelMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DataMessage) ProtoMessage() {} +func (*DataChannelMessage) ProtoMessage() {} -func (x *DataMessage) ProtoReflect() protoreflect.Message { +func (x *DataChannelMessage) ProtoReflect() protoreflect.Message { mi := &file_plugnmeet_datamessage_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -234,199 +146,42 @@ func (x *DataMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DataMessage.ProtoReflect.Descriptor instead. -func (*DataMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use DataChannelMessage.ProtoReflect.Descriptor instead. +func (*DataChannelMessage) Descriptor() ([]byte, []int) { return file_plugnmeet_datamessage_proto_rawDescGZIP(), []int{0} } -func (x *DataMessage) GetType() DataMsgType { +func (x *DataChannelMessage) GetId() string { if x != nil { - return x.Type - } - return DataMsgType_USER -} - -func (x *DataMessage) GetMessageId() string { - if x != nil && x.MessageId != nil { - return *x.MessageId + return x.Id } return "" } -func (x *DataMessage) GetRoomSid() string { - if x != nil { - return x.RoomSid - } - return "" -} - -func (x *DataMessage) GetRoomId() string { - if x != nil { - return x.RoomId - } - return "" -} - -func (x *DataMessage) GetTo() string { - if x != nil && x.To != nil { - return *x.To - } - return "" -} - -func (x *DataMessage) GetBody() *DataMsgBody { - if x != nil { - return x.Body - } - return nil -} - -type DataMsgBody struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type DataMsgBodyType `protobuf:"varint,1,opt,name=type,proto3,enum=plugnmeet.DataMsgBodyType" json:"type,omitempty"` - MessageId *string `protobuf:"bytes,2,opt,name=message_id,json=messageId,proto3,oneof" json:"message_id,omitempty"` - Time *string `protobuf:"bytes,3,opt,name=time,proto3,oneof" json:"time,omitempty"` - From *DataMsgReqFrom `protobuf:"bytes,4,opt,name=from,proto3" json:"from,omitempty"` - Msg string `protobuf:"bytes,5,opt,name=msg,proto3" json:"msg,omitempty"` - IsPrivate *uint32 `protobuf:"varint,6,opt,name=is_private,json=isPrivate,proto3,oneof" json:"is_private,omitempty"` -} - -func (x *DataMsgBody) Reset() { - *x = DataMsgBody{} - if protoimpl.UnsafeEnabled { - mi := &file_plugnmeet_datamessage_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DataMsgBody) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DataMsgBody) ProtoMessage() {} - -func (x *DataMsgBody) ProtoReflect() protoreflect.Message { - mi := &file_plugnmeet_datamessage_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DataMsgBody.ProtoReflect.Descriptor instead. -func (*DataMsgBody) Descriptor() ([]byte, []int) { - return file_plugnmeet_datamessage_proto_rawDescGZIP(), []int{1} -} - -func (x *DataMsgBody) GetType() DataMsgBodyType { +func (x *DataChannelMessage) GetType() DataMsgBodyType { if x != nil { return x.Type } - return DataMsgBodyType_RAISE_HAND -} - -func (x *DataMsgBody) GetMessageId() string { - if x != nil && x.MessageId != nil { - return *x.MessageId - } - return "" + return DataMsgBodyType_UNKNOWN } -func (x *DataMsgBody) GetTime() string { - if x != nil && x.Time != nil { - return *x.Time - } - return "" -} - -func (x *DataMsgBody) GetFrom() *DataMsgReqFrom { +func (x *DataChannelMessage) GetFromUserId() string { if x != nil { - return x.From - } - return nil -} - -func (x *DataMsgBody) GetMsg() string { - if x != nil { - return x.Msg + return x.FromUserId } return "" } -func (x *DataMsgBody) GetIsPrivate() uint32 { - if x != nil && x.IsPrivate != nil { - return *x.IsPrivate - } - return 0 -} - -type DataMsgReqFrom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Sid string `protobuf:"bytes,1,opt,name=sid,proto3" json:"sid,omitempty"` - UserId string `protobuf:"bytes,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Name *string `protobuf:"bytes,3,opt,name=name,proto3,oneof" json:"name,omitempty"` -} - -func (x *DataMsgReqFrom) Reset() { - *x = DataMsgReqFrom{} - if protoimpl.UnsafeEnabled { - mi := &file_plugnmeet_datamessage_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DataMsgReqFrom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DataMsgReqFrom) ProtoMessage() {} - -func (x *DataMsgReqFrom) ProtoReflect() protoreflect.Message { - mi := &file_plugnmeet_datamessage_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DataMsgReqFrom.ProtoReflect.Descriptor instead. -func (*DataMsgReqFrom) Descriptor() ([]byte, []int) { - return file_plugnmeet_datamessage_proto_rawDescGZIP(), []int{2} -} - -func (x *DataMsgReqFrom) GetSid() string { - if x != nil { - return x.Sid +func (x *DataChannelMessage) GetToUserId() string { + if x != nil && x.ToUserId != nil { + return *x.ToUserId } return "" } -func (x *DataMsgReqFrom) GetUserId() string { +func (x *DataChannelMessage) GetMessage() string { if x != nil { - return x.UserId - } - return "" -} - -func (x *DataMsgReqFrom) GetName() string { - if x != nil && x.Name != nil { - return *x.Name + return x.Message } return "" } @@ -436,97 +191,52 @@ var File_plugnmeet_datamessage_proto protoreflect.FileDescriptor var file_plugnmeet_datamessage_proto_rawDesc = []byte{ 0x0a, 0x1b, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, - 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x22, 0xe8, 0x01, 0x0a, 0x0b, 0x44, 0x61, 0x74, - 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, - 0x65, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6f, 0x6d, - 0x5f, 0x73, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x6f, 0x6f, 0x6d, - 0x53, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x13, 0x0a, 0x02, - 0x74, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x02, 0x74, 0x6f, 0x88, 0x01, - 0x01, 0x12, 0x2a, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, - 0x4d, 0x73, 0x67, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x42, 0x0d, 0x0a, - 0x0b, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x42, 0x05, 0x0a, 0x03, - 0x5f, 0x74, 0x6f, 0x22, 0x86, 0x02, 0x0a, 0x0b, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x42, - 0x6f, 0x64, 0x79, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1a, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x44, 0x61, - 0x74, 0x61, 0x4d, 0x73, 0x67, 0x42, 0x6f, 0x64, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, - 0x12, 0x2d, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, - 0x73, 0x67, 0x52, 0x65, 0x71, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, - 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, - 0x67, 0x12, 0x22, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x02, 0x52, 0x09, 0x69, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x5f, 0x69, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x0d, 0x0a, - 0x0b, 0x5f, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x22, 0x5d, 0x0a, 0x0e, - 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x10, - 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x88, - 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2a, 0x33, 0x0a, 0x0b, 0x44, - 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x55, 0x53, - 0x45, 0x52, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x10, 0x01, - 0x12, 0x0e, 0x0a, 0x0a, 0x57, 0x48, 0x49, 0x54, 0x45, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x10, 0x02, - 0x2a, 0xe3, 0x04, 0x0a, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x42, 0x6f, 0x64, 0x79, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x41, 0x49, 0x53, 0x45, 0x5f, 0x48, 0x41, - 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x48, 0x41, - 0x4e, 0x44, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x5f, 0x55, 0x53, - 0x45, 0x52, 0x5f, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x48, 0x41, 0x4e, 0x44, 0x10, 0x02, 0x12, - 0x0f, 0x0a, 0x0b, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x03, - 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x4c, - 0x45, 0x52, 0x54, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x43, 0x48, - 0x41, 0x54, 0x5f, 0x4d, 0x53, 0x47, 0x53, 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x45, 0x4e, - 0x45, 0x57, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0x07, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x50, - 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, - 0x47, 0x53, 0x10, 0x08, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x49, 0x54, 0x5f, 0x57, 0x48, 0x49, - 0x54, 0x45, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x10, 0x09, 0x12, 0x1a, 0x0a, 0x16, 0x55, 0x53, 0x45, - 0x52, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x48, 0x41, - 0x4e, 0x47, 0x45, 0x10, 0x0a, 0x12, 0x20, 0x0a, 0x1c, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, - 0x4c, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x45, - 0x56, 0x45, 0x4e, 0x54, 0x53, 0x10, 0x0b, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x4f, 0x4c, 0x4c, 0x5f, - 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x0c, 0x12, 0x15, 0x0a, 0x11, 0x4e, 0x45, 0x57, - 0x5f, 0x50, 0x4f, 0x4c, 0x4c, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x10, 0x0d, - 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x4f, 0x4c, 0x4c, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x10, - 0x0e, 0x12, 0x16, 0x0a, 0x12, 0x4a, 0x4f, 0x49, 0x4e, 0x5f, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x4f, - 0x55, 0x54, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x0f, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x50, 0x45, + 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x22, 0xc2, 0x01, 0x0a, 0x12, 0x44, 0x61, 0x74, + 0x61, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x2e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, + 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, + 0x67, 0x42, 0x6f, 0x64, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x20, 0x0a, 0x0c, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x21, 0x0a, 0x0a, 0x74, 0x6f, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x74, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x88, 0x01, 0x01, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0d, + 0x0a, 0x0b, 0x5f, 0x74, 0x6f, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x2a, 0xe2, 0x02, + 0x0a, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x42, 0x6f, 0x64, 0x79, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0f, + 0x0a, 0x0b, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x01, 0x12, + 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x4c, 0x45, + 0x52, 0x54, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x56, 0x49, 0x53, + 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x06, + 0x12, 0x20, 0x0a, 0x1c, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x4d, 0x45, 0x44, + 0x49, 0x41, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, + 0x10, 0x07, 0x12, 0x15, 0x0a, 0x11, 0x4e, 0x45, 0x57, 0x5f, 0x50, 0x4f, 0x4c, 0x4c, 0x5f, 0x52, + 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x10, 0x08, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x50, 0x45, 0x45, 0x43, 0x48, 0x5f, 0x53, 0x55, 0x42, 0x54, 0x49, 0x54, 0x4c, 0x45, 0x5f, 0x54, 0x45, 0x58, - 0x54, 0x10, 0x17, 0x12, 0x28, 0x0a, 0x24, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x5f, 0x43, 0x4f, 0x47, - 0x4e, 0x49, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, - 0x50, 0x45, 0x45, 0x43, 0x48, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0x18, 0x12, 0x18, 0x0a, - 0x14, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x5f, 0x4d, 0x45, 0x54, - 0x41, 0x44, 0x41, 0x54, 0x41, 0x10, 0x19, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x48, 0x41, 0x54, 0x10, - 0x10, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, - 0x45, 0x10, 0x11, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x55, - 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x12, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x44, 0x44, 0x5f, 0x57, - 0x48, 0x49, 0x54, 0x45, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x13, + 0x54, 0x10, 0x09, 0x12, 0x1c, 0x0a, 0x18, 0x52, 0x45, 0x51, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x5f, + 0x57, 0x48, 0x49, 0x54, 0x45, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x10, + 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, + 0x45, 0x10, 0x0b, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x55, + 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x0c, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x44, 0x44, 0x5f, 0x57, + 0x48, 0x49, 0x54, 0x45, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x0d, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x44, 0x44, 0x5f, 0x57, 0x48, 0x49, 0x54, 0x45, 0x42, 0x4f, 0x41, - 0x52, 0x44, 0x5f, 0x4f, 0x46, 0x46, 0x49, 0x43, 0x45, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x14, + 0x52, 0x44, 0x5f, 0x4f, 0x46, 0x46, 0x49, 0x43, 0x45, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x0e, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x41, 0x47, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, - 0x15, 0x12, 0x1f, 0x0a, 0x1b, 0x57, 0x48, 0x49, 0x54, 0x45, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, + 0x0f, 0x12, 0x1f, 0x0a, 0x1b, 0x57, 0x48, 0x49, 0x54, 0x45, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x41, 0x50, 0x50, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, - 0x10, 0x16, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x54, 0x49, 0x43, 0x53, 0x5f, - 0x44, 0x41, 0x54, 0x41, 0x10, 0x1b, 0x42, 0xa2, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x42, 0x19, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, - 0x65, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x6d, 0x79, 0x6e, 0x61, 0x70, 0x61, 0x72, 0x72, 0x6f, 0x74, 0x2f, 0x70, 0x6c, 0x75, - 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, - 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, - 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xca, 0x02, 0x09, 0x50, 0x6c, - 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xe2, 0x02, 0x15, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, - 0x65, 0x65, 0x74, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x10, 0x10, 0x42, 0xa2, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, + 0x6d, 0x65, 0x65, 0x74, 0x42, 0x19, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x79, + 0x6e, 0x61, 0x70, 0x61, 0x72, 0x72, 0x6f, 0x74, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, + 0x65, 0x74, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x70, 0x6c, 0x75, 0x67, + 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x09, 0x50, 0x6c, + 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xca, 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, + 0x65, 0x65, 0x74, 0xe2, 0x02, 0x15, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x50, 0x6c, + 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -541,25 +251,19 @@ func file_plugnmeet_datamessage_proto_rawDescGZIP() []byte { return file_plugnmeet_datamessage_proto_rawDescData } -var file_plugnmeet_datamessage_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_plugnmeet_datamessage_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_plugnmeet_datamessage_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_plugnmeet_datamessage_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_plugnmeet_datamessage_proto_goTypes = []any{ - (DataMsgType)(0), // 0: plugnmeet.DataMsgType - (DataMsgBodyType)(0), // 1: plugnmeet.DataMsgBodyType - (*DataMessage)(nil), // 2: plugnmeet.DataMessage - (*DataMsgBody)(nil), // 3: plugnmeet.DataMsgBody - (*DataMsgReqFrom)(nil), // 4: plugnmeet.DataMsgReqFrom + (DataMsgBodyType)(0), // 0: plugnmeet.DataMsgBodyType + (*DataChannelMessage)(nil), // 1: plugnmeet.DataChannelMessage } var file_plugnmeet_datamessage_proto_depIdxs = []int32{ - 0, // 0: plugnmeet.DataMessage.type:type_name -> plugnmeet.DataMsgType - 3, // 1: plugnmeet.DataMessage.body:type_name -> plugnmeet.DataMsgBody - 1, // 2: plugnmeet.DataMsgBody.type:type_name -> plugnmeet.DataMsgBodyType - 4, // 3: plugnmeet.DataMsgBody.from:type_name -> plugnmeet.DataMsgReqFrom - 4, // [4:4] is the sub-list for method output_type - 4, // [4:4] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name + 0, // 0: plugnmeet.DataChannelMessage.type:type_name -> plugnmeet.DataMsgBodyType + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name } func init() { file_plugnmeet_datamessage_proto_init() } @@ -569,31 +273,7 @@ func file_plugnmeet_datamessage_proto_init() { } if !protoimpl.UnsafeEnabled { file_plugnmeet_datamessage_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*DataMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_plugnmeet_datamessage_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*DataMsgBody); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_plugnmeet_datamessage_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*DataMsgReqFrom); i { + switch v := v.(*DataChannelMessage); i { case 0: return &v.state case 1: @@ -606,15 +286,13 @@ func file_plugnmeet_datamessage_proto_init() { } } file_plugnmeet_datamessage_proto_msgTypes[0].OneofWrappers = []any{} - file_plugnmeet_datamessage_proto_msgTypes[1].OneofWrappers = []any{} - file_plugnmeet_datamessage_proto_msgTypes[2].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_plugnmeet_datamessage_proto_rawDesc, - NumEnums: 2, - NumMessages: 3, + NumEnums: 1, + NumMessages: 1, NumExtensions: 0, NumServices: 0, }, diff --git a/plugnmeet/plugnmeet_datamessage.pb.validate.go b/plugnmeet/plugnmeet_datamessage.pb.validate.go index b41f742..ca763d2 100644 --- a/plugnmeet/plugnmeet_datamessage.pb.validate.go +++ b/plugnmeet/plugnmeet_datamessage.pb.validate.go @@ -35,336 +35,54 @@ var ( _ = sort.Sort ) -// Validate checks the field values on DataMessage with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *DataMessage) Validate() error { +// Validate checks the field values on DataChannelMessage with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *DataChannelMessage) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on DataMessage with the rules defined in -// the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in DataMessageMultiError, or -// nil if none found. -func (m *DataMessage) ValidateAll() error { +// ValidateAll checks the field values on DataChannelMessage with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DataChannelMessageMultiError, or nil if none found. +func (m *DataChannelMessage) ValidateAll() error { return m.validate(true) } -func (m *DataMessage) validate(all bool) error { +func (m *DataChannelMessage) validate(all bool) error { if m == nil { return nil } var errors []error - // no validation rules for Type - - // no validation rules for RoomSid - - // no validation rules for RoomId - - if all { - switch v := interface{}(m.GetBody()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, DataMessageValidationError{ - field: "Body", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, DataMessageValidationError{ - field: "Body", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetBody()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return DataMessageValidationError{ - field: "Body", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if m.MessageId != nil { - // no validation rules for MessageId - } - - if m.To != nil { - // no validation rules for To - } - - if len(errors) > 0 { - return DataMessageMultiError(errors) - } - - return nil -} - -// DataMessageMultiError is an error wrapping multiple validation errors -// returned by DataMessage.ValidateAll() if the designated constraints aren't met. -type DataMessageMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m DataMessageMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m DataMessageMultiError) AllErrors() []error { return m } - -// DataMessageValidationError is the validation error returned by -// DataMessage.Validate if the designated constraints aren't met. -type DataMessageValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e DataMessageValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e DataMessageValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e DataMessageValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e DataMessageValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e DataMessageValidationError) ErrorName() string { return "DataMessageValidationError" } - -// Error satisfies the builtin error interface -func (e DataMessageValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sDataMessage.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = DataMessageValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = DataMessageValidationError{} - -// Validate checks the field values on DataMsgBody with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *DataMsgBody) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on DataMsgBody with the rules defined in -// the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in DataMsgBodyMultiError, or -// nil if none found. -func (m *DataMsgBody) ValidateAll() error { - return m.validate(true) -} - -func (m *DataMsgBody) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error + // no validation rules for Id // no validation rules for Type - if all { - switch v := interface{}(m.GetFrom()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, DataMsgBodyValidationError{ - field: "From", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, DataMsgBodyValidationError{ - field: "From", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetFrom()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return DataMsgBodyValidationError{ - field: "From", - reason: "embedded message failed validation", - cause: err, - } - } - } + // no validation rules for FromUserId - // no validation rules for Msg + // no validation rules for Message - if m.MessageId != nil { - // no validation rules for MessageId - } - - if m.Time != nil { - // no validation rules for Time - } - - if m.IsPrivate != nil { - // no validation rules for IsPrivate - } - - if len(errors) > 0 { - return DataMsgBodyMultiError(errors) - } - - return nil -} - -// DataMsgBodyMultiError is an error wrapping multiple validation errors -// returned by DataMsgBody.ValidateAll() if the designated constraints aren't met. -type DataMsgBodyMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m DataMsgBodyMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m DataMsgBodyMultiError) AllErrors() []error { return m } - -// DataMsgBodyValidationError is the validation error returned by -// DataMsgBody.Validate if the designated constraints aren't met. -type DataMsgBodyValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e DataMsgBodyValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e DataMsgBodyValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e DataMsgBodyValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e DataMsgBodyValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e DataMsgBodyValidationError) ErrorName() string { return "DataMsgBodyValidationError" } - -// Error satisfies the builtin error interface -func (e DataMsgBodyValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sDataMsgBody.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = DataMsgBodyValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = DataMsgBodyValidationError{} - -// Validate checks the field values on DataMsgReqFrom with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *DataMsgReqFrom) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on DataMsgReqFrom with the rules defined -// in the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in DataMsgReqFromMultiError, -// or nil if none found. -func (m *DataMsgReqFrom) ValidateAll() error { - return m.validate(true) -} - -func (m *DataMsgReqFrom) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for Sid - - // no validation rules for UserId - - if m.Name != nil { - // no validation rules for Name + if m.ToUserId != nil { + // no validation rules for ToUserId } if len(errors) > 0 { - return DataMsgReqFromMultiError(errors) + return DataChannelMessageMultiError(errors) } return nil } -// DataMsgReqFromMultiError is an error wrapping multiple validation errors -// returned by DataMsgReqFrom.ValidateAll() if the designated constraints +// DataChannelMessageMultiError is an error wrapping multiple validation errors +// returned by DataChannelMessage.ValidateAll() if the designated constraints // aren't met. -type DataMsgReqFromMultiError []error +type DataChannelMessageMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m DataMsgReqFromMultiError) Error() string { +func (m DataChannelMessageMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -373,11 +91,11 @@ func (m DataMsgReqFromMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m DataMsgReqFromMultiError) AllErrors() []error { return m } +func (m DataChannelMessageMultiError) AllErrors() []error { return m } -// DataMsgReqFromValidationError is the validation error returned by -// DataMsgReqFrom.Validate if the designated constraints aren't met. -type DataMsgReqFromValidationError struct { +// DataChannelMessageValidationError is the validation error returned by +// DataChannelMessage.Validate if the designated constraints aren't met. +type DataChannelMessageValidationError struct { field string reason string cause error @@ -385,22 +103,24 @@ type DataMsgReqFromValidationError struct { } // Field function returns field value. -func (e DataMsgReqFromValidationError) Field() string { return e.field } +func (e DataChannelMessageValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e DataMsgReqFromValidationError) Reason() string { return e.reason } +func (e DataChannelMessageValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e DataMsgReqFromValidationError) Cause() error { return e.cause } +func (e DataChannelMessageValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e DataMsgReqFromValidationError) Key() bool { return e.key } +func (e DataChannelMessageValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e DataMsgReqFromValidationError) ErrorName() string { return "DataMsgReqFromValidationError" } +func (e DataChannelMessageValidationError) ErrorName() string { + return "DataChannelMessageValidationError" +} // Error satisfies the builtin error interface -func (e DataMsgReqFromValidationError) Error() string { +func (e DataChannelMessageValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -412,14 +132,14 @@ func (e DataMsgReqFromValidationError) Error() string { } return fmt.Sprintf( - "invalid %sDataMsgReqFrom.%s: %s%s", + "invalid %sDataChannelMessage.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = DataMsgReqFromValidationError{} +var _ error = DataChannelMessageValidationError{} var _ interface { Field() string @@ -427,4 +147,4 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = DataMsgReqFromValidationError{} +} = DataChannelMessageValidationError{} diff --git a/plugnmeet/plugnmeet_gen_token.pb.go b/plugnmeet/plugnmeet_gen_token.pb.go index 196180f..501f2ac 100644 --- a/plugnmeet/plugnmeet_gen_token.pb.go +++ b/plugnmeet/plugnmeet_gen_token.pb.go @@ -646,187 +646,186 @@ var file_plugnmeet_gen_token_proto_rawDesc = []byte{ 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0xed, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x9e, 0x01, 0x0a, 0x07, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x84, 0x01, 0xba, 0x48, 0x80, - 0x01, 0xba, 0x01, 0x7d, 0x0a, 0x0e, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x12, 0x47, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, - 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, - 0x73, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x61, - 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x2d, 0x5f, 0x2e, 0x3a, 0x1a, 0x22, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, - 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x2d, 0x5f, 0x2e, 0x3a, 0x5d, 0x2b, 0x24, 0x27, - 0x29, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x09, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, - 0x6f, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x6e, 0x66, 0x6f, 0x22, 0xbd, 0x02, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x1a, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x9e, 0x01, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x84, - 0x01, 0xba, 0x48, 0x80, 0x01, 0xba, 0x01, 0x7d, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x47, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x64, - 0x69, 0x67, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, - 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x2d, 0x5f, 0x2e, - 0x3a, 0x1a, 0x22, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, - 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x2d, 0x5f, 0x2e, 0x3a, - 0x5d, 0x2b, 0x24, 0x27, 0x29, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x68, - 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x48, - 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x3c, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x22, 0xbd, 0x04, 0x0a, 0x0c, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, - 0x70, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, - 0x88, 0x01, 0x01, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, - 0x63, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, - 0x28, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x77, 0x65, 0x62, 0x63, 0x61, 0x6d, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x57, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0c, 0x69, 0x73, 0x5f, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x42, - 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x0b, 0x69, 0x73, 0x50, 0x72, 0x65, 0x73, - 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x0b, 0x72, 0x61, 0x69, 0x73, 0x65, 0x64, 0x5f, - 0x68, 0x61, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, - 0x02, 0x08, 0x00, 0x52, 0x0a, 0x72, 0x61, 0x69, 0x73, 0x65, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x12, - 0x33, 0x0a, 0x11, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x61, 0x70, 0x70, 0x72, - 0x6f, 0x76, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, - 0x02, 0x08, 0x00, 0x52, 0x0f, 0x77, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x41, 0x70, 0x70, 0x72, - 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x2a, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, - 0x64, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0d, - 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x4c, 0x61, 0x6e, 0x67, 0x88, 0x01, 0x01, - 0x12, 0x3c, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, - 0x65, 0x65, 0x74, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x7e, - 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x58, 0xba, 0x48, 0x55, 0xba, 0x01, 0x52, 0x0a, 0x12, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, - 0x28, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, 0x6f, - 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, - 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x48, 0x03, 0x52, - 0x0a, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0e, - 0x0a, 0x0c, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x42, 0x10, - 0x0a, 0x0e, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x77, 0x65, 0x62, 0x63, 0x61, 0x6d, - 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x6c, - 0x61, 0x6e, 0x67, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x5f, 0x69, 0x64, 0x22, 0x94, 0x01, 0x0a, 0x14, 0x50, 0x6c, 0x75, 0x67, 0x4e, 0x6d, 0x65, 0x65, - 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, - 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x1b, 0x0a, - 0x09, 0x69, 0x73, 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x69, 0x73, 0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0xfd, 0x04, 0x0a, 0x0c, 0x4c, - 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x2c, 0x0a, 0x0f, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x69, 0x63, 0x72, - 0x6f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, - 0x6b, 0x5f, 0x77, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, - 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x88, 0x01, 0x01, 0x12, - 0x33, 0x0a, 0x13, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x5f, 0x73, - 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x02, 0x52, 0x11, - 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x69, 0x6e, - 0x67, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x68, 0x61, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x03, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x43, - 0x68, 0x61, 0x74, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x16, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, - 0x68, 0x61, 0x74, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x04, 0x52, 0x13, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x68, - 0x61, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, - 0x12, 0x34, 0x0a, 0x14, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x66, 0x69, - 0x6c, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x48, 0x05, - 0x52, 0x11, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x68, 0x61, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x11, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x06, 0x52, 0x0f, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x43, 0x68, 0x61, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, - 0x77, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, - 0x48, 0x07, 0x52, 0x0e, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, - 0x72, 0x64, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x13, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x68, - 0x61, 0x72, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x70, 0x61, 0x64, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x08, 0x48, 0x08, 0x52, 0x11, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, - 0x4e, 0x6f, 0x74, 0x65, 0x70, 0x61, 0x64, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x42, 0x0e, - 0x0a, 0x0c, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x42, 0x16, - 0x0a, 0x14, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x5f, 0x73, - 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, - 0x63, 0x68, 0x61, 0x74, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x68, - 0x61, 0x74, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, - 0x17, 0x0a, 0x15, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x66, 0x69, - 0x6c, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x6c, 0x6f, 0x63, - 0x6b, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x42, 0x12, - 0x0a, 0x10, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, - 0x72, 0x64, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x68, 0x61, 0x72, - 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x70, 0x61, 0x64, 0x22, 0x61, 0x0a, 0x10, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x19, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xa7, 0x05, - 0x0a, 0x12, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x44, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x0d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x70, - 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2c, - 0x0a, 0x0f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0e, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x61, 0x72, 0x79, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x10, - 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x10, - 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0f, - 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x67, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x04, 0x52, 0x0d, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x42, - 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0f, 0x66, 0x6f, 0x6f, - 0x74, 0x65, 0x72, 0x5f, 0x62, 0x67, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x05, 0x52, 0x0d, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x42, 0x67, 0x43, 0x6f, - 0x6c, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x12, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x73, - 0x69, 0x64, 0x65, 0x5f, 0x62, 0x67, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x06, 0x52, 0x0f, 0x6c, 0x65, 0x66, 0x74, 0x53, 0x69, 0x64, 0x65, 0x42, 0x67, - 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x13, 0x72, 0x69, 0x67, 0x68, - 0x74, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x62, 0x67, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x07, 0x52, 0x10, 0x72, 0x69, 0x67, 0x68, 0x74, 0x53, 0x69, - 0x64, 0x65, 0x42, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0e, - 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x73, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x08, 0x52, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x73, - 0x73, 0x55, 0x72, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x5f, 0x6c, 0x6f, 0x67, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x09, 0x52, 0x0a, - 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4c, 0x6f, 0x67, 0x6f, 0x88, 0x01, 0x01, 0x42, 0x10, 0x0a, - 0x0e, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x42, - 0x12, 0x0a, 0x10, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, - 0x6c, 0x6f, 0x72, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x62, 0x61, 0x63, - 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x12, 0x0a, - 0x10, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x67, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x67, 0x5f, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x73, - 0x69, 0x64, 0x65, 0x5f, 0x62, 0x67, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x42, 0x16, 0x0a, 0x14, - 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x62, 0x67, 0x5f, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, - 0x63, 0x73, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x5f, 0x6c, 0x6f, 0x67, 0x6f, 0x42, 0x9f, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x42, 0x16, 0x50, 0x6c, 0x75, 0x67, 0x6e, - 0x6d, 0x65, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x6d, 0x79, 0x6e, 0x61, 0x70, 0x61, 0x72, 0x72, 0x6f, 0x74, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x6e, - 0x6d, 0x65, 0x65, 0x74, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x70, 0x6c, - 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x09, - 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xca, 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, - 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xe2, 0x02, 0x15, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, - 0x74, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, - 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x6f, 0x74, 0x6f, 0x22, 0xe7, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x98, 0x01, 0x0a, 0x07, 0x72, 0x6f, 0x6f, + 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x7f, 0xba, 0x48, 0x7c, 0xba, + 0x01, 0x79, 0x0a, 0x0e, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x12, 0x45, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x75, + 0x6c, 0x64, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, + 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, 0x73, 0x20, + 0x6f, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, + 0x63, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x2d, 0x5f, 0x1a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, + 0x5a, 0x30, 0x2d, 0x39, 0x2d, 0x5f, 0x5d, 0x2b, 0x24, 0x27, 0x29, 0x52, 0x06, 0x72, 0x6f, 0x6f, + 0x6d, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, + 0x65, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x06, 0xba, 0x48, 0x03, + 0xc8, 0x01, 0x01, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xbd, 0x02, + 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x9e, 0x01, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x84, 0x01, 0xba, 0x48, 0x80, 0x01, 0xba, + 0x01, 0x7d, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x12, 0x47, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x75, + 0x6c, 0x64, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, + 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, 0x73, 0x20, + 0x6f, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, + 0x63, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x2d, 0x5f, 0x2e, 0x3a, 0x1a, 0x22, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, + 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x2d, 0x5f, 0x2e, 0x3a, 0x5d, 0x2b, 0x24, 0x27, 0x29, 0x52, + 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x64, 0x6d, + 0x69, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, + 0x3c, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, + 0x65, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x0c, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xbd, 0x04, + 0x0a, 0x0c, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2e, + 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x88, 0x01, 0x01, 0x48, 0x00, 0x52, + 0x0a, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x88, 0x01, 0x01, 0x12, 0x19, + 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0d, 0x72, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x5f, 0x77, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, + 0x48, 0x01, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x57, 0x65, 0x62, 0x63, 0x61, 0x6d, + 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, + 0x08, 0x00, 0x52, 0x0b, 0x69, 0x73, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, + 0x28, 0x0a, 0x0b, 0x72, 0x61, 0x69, 0x73, 0x65, 0x64, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x0a, 0x72, + 0x61, 0x69, 0x73, 0x65, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x11, 0x77, 0x61, 0x69, + 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x42, 0x07, 0xba, 0x48, 0x04, 0x6a, 0x02, 0x08, 0x00, 0x52, 0x0f, 0x77, + 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x2a, + 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x6c, 0x61, 0x6e, 0x67, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x72, 0x65, 0x64, 0x4c, 0x61, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x12, 0x3c, 0x0a, 0x0d, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x4c, 0x6f, + 0x63, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x6b, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x7e, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x58, 0xba, + 0x48, 0x55, 0xba, 0x01, 0x52, 0x0a, 0x12, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, + 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x28, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x1a, 0x12, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, + 0x73, 0x28, 0x27, 0x5e, 0x24, 0x27, 0x29, 0x48, 0x03, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x72, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x5f, 0x77, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x70, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x42, 0x0e, 0x0a, + 0x0c, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x22, 0x94, 0x01, + 0x0a, 0x14, 0x50, 0x6c, 0x75, 0x67, 0x4e, 0x6d, 0x65, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x68, 0x69, + 0x64, 0x64, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x48, 0x69, + 0x64, 0x64, 0x65, 0x6e, 0x22, 0xfd, 0x04, 0x0a, 0x0c, 0x4c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x2c, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x69, + 0x63, 0x72, 0x6f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, + 0x52, 0x0e, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x70, 0x68, 0x6f, 0x6e, 0x65, + 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x65, 0x62, 0x63, + 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x6b, + 0x57, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x13, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x02, 0x52, 0x11, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x63, + 0x72, 0x65, 0x65, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x12, 0x20, + 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x48, 0x03, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x68, 0x61, 0x74, 0x88, 0x01, 0x01, + 0x12, 0x38, 0x0a, 0x16, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x73, 0x65, + 0x6e, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x48, 0x04, 0x52, 0x13, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x68, 0x61, 0x74, 0x53, 0x65, 0x6e, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x14, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x48, 0x05, 0x52, 0x11, 0x6c, 0x6f, 0x63, 0x6b, + 0x43, 0x68, 0x61, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x88, 0x01, 0x01, + 0x12, 0x2f, 0x0a, 0x11, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x5f, 0x63, 0x68, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x48, 0x06, 0x52, 0x0f, 0x6c, + 0x6f, 0x63, 0x6b, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x74, 0x88, 0x01, + 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x48, 0x07, 0x52, 0x0e, 0x6c, 0x6f, + 0x63, 0x6b, 0x57, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x88, 0x01, 0x01, 0x12, + 0x33, 0x0a, 0x13, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x6e, + 0x6f, 0x74, 0x65, 0x70, 0x61, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x48, 0x08, 0x52, 0x11, + 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x65, 0x70, 0x61, + 0x64, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x69, + 0x63, 0x72, 0x6f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x77, 0x65, 0x62, 0x63, 0x61, 0x6d, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, + 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x42, 0x19, + 0x0a, 0x17, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x73, 0x65, 0x6e, + 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x42, 0x16, 0x0a, 0x14, + 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x74, + 0x65, 0x70, 0x61, 0x64, 0x22, 0x61, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, + 0x73, 0x67, 0x12, 0x19, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, + 0x06, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xa7, 0x05, 0x0a, 0x12, 0x43, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x44, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x28, + 0x0a, 0x0d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, + 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x01, 0x52, 0x0e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x43, 0x6f, + 0x6c, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x10, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, + 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x02, 0x52, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, + 0x6c, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x10, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, + 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x03, 0x52, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x5f, 0x62, 0x67, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x04, 0x52, 0x0d, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x42, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, + 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0f, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x67, + 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x05, 0x52, 0x0d, + 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x42, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x88, 0x01, 0x01, + 0x12, 0x30, 0x0a, 0x12, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x62, 0x67, + 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x06, 0x52, 0x0f, + 0x6c, 0x65, 0x66, 0x74, 0x53, 0x69, 0x64, 0x65, 0x42, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x88, + 0x01, 0x01, 0x12, 0x32, 0x0a, 0x13, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x73, 0x69, 0x64, 0x65, + 0x5f, 0x62, 0x67, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x07, 0x52, 0x10, 0x72, 0x69, 0x67, 0x68, 0x74, 0x53, 0x69, 0x64, 0x65, 0x42, 0x67, 0x43, 0x6f, + 0x6c, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x5f, 0x63, 0x73, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x08, + 0x52, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x73, 0x73, 0x55, 0x72, 0x6c, 0x88, 0x01, + 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6c, 0x6f, 0x67, 0x6f, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x09, 0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x4c, 0x6f, 0x67, 0x6f, 0x88, 0x01, 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x70, 0x72, 0x69, 0x6d, + 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x42, 0x13, 0x0a, + 0x11, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, + 0x64, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x5f, 0x62, 0x67, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x42, 0x12, 0x0a, 0x10, 0x5f, + 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x67, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x42, + 0x15, 0x0a, 0x13, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x62, 0x67, + 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x62, 0x67, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x42, 0x11, + 0x0a, 0x0f, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x73, 0x73, 0x5f, 0x75, 0x72, + 0x6c, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6c, 0x6f, 0x67, + 0x6f, 0x42, 0x9f, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, + 0x65, 0x65, 0x74, 0x42, 0x16, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x47, 0x65, + 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x79, 0x6e, 0x61, 0x70, 0x61, + 0x72, 0x72, 0x6f, 0x74, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2d, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, + 0x74, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, + 0x65, 0x65, 0x74, 0xca, 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xe2, + 0x02, 0x15, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, + 0x65, 0x65, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/plugnmeet/plugnmeet_nats_msg.pb.go b/plugnmeet/plugnmeet_nats_msg.pb.go new file mode 100644 index 0000000..3648771 --- /dev/null +++ b/plugnmeet/plugnmeet_nats_msg.pb.go @@ -0,0 +1,1366 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.34.2 +// protoc (unknown) +// source: plugnmeet_nats_msg.proto + +package plugnmeet + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type NatsMsgServerToClientEvents int32 + +const ( + // initial data + NatsMsgServerToClientEvents_RES_INITIAL_DATA NatsMsgServerToClientEvents = 0 + NatsMsgServerToClientEvents_JOINED_USERS_LIST NatsMsgServerToClientEvents = 1 + NatsMsgServerToClientEvents_ROOM_METADATA_UPDATE NatsMsgServerToClientEvents = 2 + NatsMsgServerToClientEvents_USER_METADATA_UPDATE NatsMsgServerToClientEvents = 3 + NatsMsgServerToClientEvents_USER_JOINED NatsMsgServerToClientEvents = 4 + NatsMsgServerToClientEvents_USER_DISCONNECTED NatsMsgServerToClientEvents = 5 + NatsMsgServerToClientEvents_USER_OFFLINE NatsMsgServerToClientEvents = 6 + NatsMsgServerToClientEvents_RESP_RENEW_PNM_TOKEN NatsMsgServerToClientEvents = 7 + NatsMsgServerToClientEvents_SYSTEM_NOTIFICATION NatsMsgServerToClientEvents = 8 + NatsMsgServerToClientEvents_AZURE_COGNITIVE_SERVICE_SPEECH_TOKEN NatsMsgServerToClientEvents = 9 + NatsMsgServerToClientEvents_SESSION_ENDED NatsMsgServerToClientEvents = 10 + NatsMsgServerToClientEvents_POLL_CLOSED NatsMsgServerToClientEvents = 11 + NatsMsgServerToClientEvents_POLL_CREATED NatsMsgServerToClientEvents = 12 + NatsMsgServerToClientEvents_JOIN_BREAKOUT_ROOM NatsMsgServerToClientEvents = 13 + NatsMsgServerToClientEvents_SYSTEM_CHAT_MSG NatsMsgServerToClientEvents = 14 // mostly system message display in chat +) + +// Enum value maps for NatsMsgServerToClientEvents. +var ( + NatsMsgServerToClientEvents_name = map[int32]string{ + 0: "RES_INITIAL_DATA", + 1: "JOINED_USERS_LIST", + 2: "ROOM_METADATA_UPDATE", + 3: "USER_METADATA_UPDATE", + 4: "USER_JOINED", + 5: "USER_DISCONNECTED", + 6: "USER_OFFLINE", + 7: "RESP_RENEW_PNM_TOKEN", + 8: "SYSTEM_NOTIFICATION", + 9: "AZURE_COGNITIVE_SERVICE_SPEECH_TOKEN", + 10: "SESSION_ENDED", + 11: "POLL_CLOSED", + 12: "POLL_CREATED", + 13: "JOIN_BREAKOUT_ROOM", + 14: "SYSTEM_CHAT_MSG", + } + NatsMsgServerToClientEvents_value = map[string]int32{ + "RES_INITIAL_DATA": 0, + "JOINED_USERS_LIST": 1, + "ROOM_METADATA_UPDATE": 2, + "USER_METADATA_UPDATE": 3, + "USER_JOINED": 4, + "USER_DISCONNECTED": 5, + "USER_OFFLINE": 6, + "RESP_RENEW_PNM_TOKEN": 7, + "SYSTEM_NOTIFICATION": 8, + "AZURE_COGNITIVE_SERVICE_SPEECH_TOKEN": 9, + "SESSION_ENDED": 10, + "POLL_CLOSED": 11, + "POLL_CREATED": 12, + "JOIN_BREAKOUT_ROOM": 13, + "SYSTEM_CHAT_MSG": 14, + } +) + +func (x NatsMsgServerToClientEvents) Enum() *NatsMsgServerToClientEvents { + p := new(NatsMsgServerToClientEvents) + *p = x + return p +} + +func (x NatsMsgServerToClientEvents) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NatsMsgServerToClientEvents) Descriptor() protoreflect.EnumDescriptor { + return file_plugnmeet_nats_msg_proto_enumTypes[0].Descriptor() +} + +func (NatsMsgServerToClientEvents) Type() protoreflect.EnumType { + return &file_plugnmeet_nats_msg_proto_enumTypes[0] +} + +func (x NatsMsgServerToClientEvents) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NatsMsgServerToClientEvents.Descriptor instead. +func (NatsMsgServerToClientEvents) EnumDescriptor() ([]byte, []int) { + return file_plugnmeet_nats_msg_proto_rawDescGZIP(), []int{0} +} + +type NatsMsgClientToServerEvents int32 + +const ( + NatsMsgClientToServerEvents_REQ_INITIAL_DATA NatsMsgClientToServerEvents = 0 + NatsMsgClientToServerEvents_REQ_RENEW_PNM_TOKEN NatsMsgClientToServerEvents = 1 + NatsMsgClientToServerEvents_PING NatsMsgClientToServerEvents = 2 + NatsMsgClientToServerEvents_REQ_RAISE_HAND NatsMsgClientToServerEvents = 4 + NatsMsgClientToServerEvents_REQ_LOWER_HAND NatsMsgClientToServerEvents = 5 + NatsMsgClientToServerEvents_REQ_LOWER_OTHER_USER_HAND NatsMsgClientToServerEvents = 6 + NatsMsgClientToServerEvents_PUSH_ANALYTICS_DATA NatsMsgClientToServerEvents = 7 +) + +// Enum value maps for NatsMsgClientToServerEvents. +var ( + NatsMsgClientToServerEvents_name = map[int32]string{ + 0: "REQ_INITIAL_DATA", + 1: "REQ_RENEW_PNM_TOKEN", + 2: "PING", + 4: "REQ_RAISE_HAND", + 5: "REQ_LOWER_HAND", + 6: "REQ_LOWER_OTHER_USER_HAND", + 7: "PUSH_ANALYTICS_DATA", + } + NatsMsgClientToServerEvents_value = map[string]int32{ + "REQ_INITIAL_DATA": 0, + "REQ_RENEW_PNM_TOKEN": 1, + "PING": 2, + "REQ_RAISE_HAND": 4, + "REQ_LOWER_HAND": 5, + "REQ_LOWER_OTHER_USER_HAND": 6, + "PUSH_ANALYTICS_DATA": 7, + } +) + +func (x NatsMsgClientToServerEvents) Enum() *NatsMsgClientToServerEvents { + p := new(NatsMsgClientToServerEvents) + *p = x + return p +} + +func (x NatsMsgClientToServerEvents) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NatsMsgClientToServerEvents) Descriptor() protoreflect.EnumDescriptor { + return file_plugnmeet_nats_msg_proto_enumTypes[1].Descriptor() +} + +func (NatsMsgClientToServerEvents) Type() protoreflect.EnumType { + return &file_plugnmeet_nats_msg_proto_enumTypes[1] +} + +func (x NatsMsgClientToServerEvents) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NatsMsgClientToServerEvents.Descriptor instead. +func (NatsMsgClientToServerEvents) EnumDescriptor() ([]byte, []int) { + return file_plugnmeet_nats_msg_proto_rawDescGZIP(), []int{1} +} + +type NatsSystemNotificationTypes int32 + +const ( + NatsSystemNotificationTypes_NATS_SYSTEM_NOTIFICATION_INFO NatsSystemNotificationTypes = 0 + NatsSystemNotificationTypes_NATS_SYSTEM_NOTIFICATION_WARNING NatsSystemNotificationTypes = 1 + NatsSystemNotificationTypes_NATS_SYSTEM_NOTIFICATION_ERROR NatsSystemNotificationTypes = 2 +) + +// Enum value maps for NatsSystemNotificationTypes. +var ( + NatsSystemNotificationTypes_name = map[int32]string{ + 0: "NATS_SYSTEM_NOTIFICATION_INFO", + 1: "NATS_SYSTEM_NOTIFICATION_WARNING", + 2: "NATS_SYSTEM_NOTIFICATION_ERROR", + } + NatsSystemNotificationTypes_value = map[string]int32{ + "NATS_SYSTEM_NOTIFICATION_INFO": 0, + "NATS_SYSTEM_NOTIFICATION_WARNING": 1, + "NATS_SYSTEM_NOTIFICATION_ERROR": 2, + } +) + +func (x NatsSystemNotificationTypes) Enum() *NatsSystemNotificationTypes { + p := new(NatsSystemNotificationTypes) + *p = x + return p +} + +func (x NatsSystemNotificationTypes) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NatsSystemNotificationTypes) Descriptor() protoreflect.EnumDescriptor { + return file_plugnmeet_nats_msg_proto_enumTypes[2].Descriptor() +} + +func (NatsSystemNotificationTypes) Type() protoreflect.EnumType { + return &file_plugnmeet_nats_msg_proto_enumTypes[2] +} + +func (x NatsSystemNotificationTypes) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NatsSystemNotificationTypes.Descriptor instead. +func (NatsSystemNotificationTypes) EnumDescriptor() ([]byte, []int) { + return file_plugnmeet_nats_msg_proto_rawDescGZIP(), []int{2} +} + +type NatsSubjects struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SystemApiWorker string `protobuf:"bytes,1,opt,name=system_api_worker,json=systemApiWorker,proto3" json:"system_api_worker,omitempty"` + SystemJsWorker string `protobuf:"bytes,2,opt,name=system_js_worker,json=systemJsWorker,proto3" json:"system_js_worker,omitempty"` + SystemPublic string `protobuf:"bytes,3,opt,name=system_public,json=systemPublic,proto3" json:"system_public,omitempty"` + SystemPrivate string `protobuf:"bytes,4,opt,name=system_private,json=systemPrivate,proto3" json:"system_private,omitempty"` + Chat string `protobuf:"bytes,5,opt,name=chat,proto3" json:"chat,omitempty"` + Whiteboard string `protobuf:"bytes,6,opt,name=whiteboard,proto3" json:"whiteboard,omitempty"` + DataChannel string `protobuf:"bytes,7,opt,name=data_channel,json=dataChannel,proto3" json:"data_channel,omitempty"` +} + +func (x *NatsSubjects) Reset() { + *x = NatsSubjects{} + if protoimpl.UnsafeEnabled { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NatsSubjects) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NatsSubjects) ProtoMessage() {} + +func (x *NatsSubjects) ProtoReflect() protoreflect.Message { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NatsSubjects.ProtoReflect.Descriptor instead. +func (*NatsSubjects) Descriptor() ([]byte, []int) { + return file_plugnmeet_nats_msg_proto_rawDescGZIP(), []int{0} +} + +func (x *NatsSubjects) GetSystemApiWorker() string { + if x != nil { + return x.SystemApiWorker + } + return "" +} + +func (x *NatsSubjects) GetSystemJsWorker() string { + if x != nil { + return x.SystemJsWorker + } + return "" +} + +func (x *NatsSubjects) GetSystemPublic() string { + if x != nil { + return x.SystemPublic + } + return "" +} + +func (x *NatsSubjects) GetSystemPrivate() string { + if x != nil { + return x.SystemPrivate + } + return "" +} + +func (x *NatsSubjects) GetChat() string { + if x != nil { + return x.Chat + } + return "" +} + +func (x *NatsSubjects) GetWhiteboard() string { + if x != nil { + return x.Whiteboard + } + return "" +} + +func (x *NatsSubjects) GetDataChannel() string { + if x != nil { + return x.DataChannel + } + return "" +} + +type NatsMsgServerToClient struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Event NatsMsgServerToClientEvents `protobuf:"varint,2,opt,name=event,proto3,enum=plugnmeet.NatsMsgServerToClientEvents" json:"event,omitempty"` + Msg string `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg,omitempty"` +} + +func (x *NatsMsgServerToClient) Reset() { + *x = NatsMsgServerToClient{} + if protoimpl.UnsafeEnabled { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NatsMsgServerToClient) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NatsMsgServerToClient) ProtoMessage() {} + +func (x *NatsMsgServerToClient) ProtoReflect() protoreflect.Message { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NatsMsgServerToClient.ProtoReflect.Descriptor instead. +func (*NatsMsgServerToClient) Descriptor() ([]byte, []int) { + return file_plugnmeet_nats_msg_proto_rawDescGZIP(), []int{1} +} + +func (x *NatsMsgServerToClient) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *NatsMsgServerToClient) GetEvent() NatsMsgServerToClientEvents { + if x != nil { + return x.Event + } + return NatsMsgServerToClientEvents_RES_INITIAL_DATA +} + +func (x *NatsMsgServerToClient) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +type NatsMsgClientToServer struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Event NatsMsgClientToServerEvents `protobuf:"varint,2,opt,name=event,proto3,enum=plugnmeet.NatsMsgClientToServerEvents" json:"event,omitempty"` + Msg string `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg,omitempty"` +} + +func (x *NatsMsgClientToServer) Reset() { + *x = NatsMsgClientToServer{} + if protoimpl.UnsafeEnabled { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NatsMsgClientToServer) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NatsMsgClientToServer) ProtoMessage() {} + +func (x *NatsMsgClientToServer) ProtoReflect() protoreflect.Message { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NatsMsgClientToServer.ProtoReflect.Descriptor instead. +func (*NatsMsgClientToServer) Descriptor() ([]byte, []int) { + return file_plugnmeet_nats_msg_proto_rawDescGZIP(), []int{2} +} + +func (x *NatsMsgClientToServer) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *NatsMsgClientToServer) GetEvent() NatsMsgClientToServerEvents { + if x != nil { + return x.Event + } + return NatsMsgClientToServerEvents_REQ_INITIAL_DATA +} + +func (x *NatsMsgClientToServer) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +type NatsKvRoomInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DbTableId uint64 `protobuf:"varint,1,opt,name=db_table_id,json=dbTableId,proto3" json:"db_table_id,omitempty"` + RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + RoomSid string `protobuf:"bytes,3,opt,name=room_sid,json=roomSid,proto3" json:"room_sid,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + EmptyTimeout uint64 `protobuf:"varint,5,opt,name=empty_timeout,json=emptyTimeout,proto3" json:"empty_timeout,omitempty"` + Metadata string `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` + CreatedAt uint64 `protobuf:"varint,7,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` +} + +func (x *NatsKvRoomInfo) Reset() { + *x = NatsKvRoomInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NatsKvRoomInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NatsKvRoomInfo) ProtoMessage() {} + +func (x *NatsKvRoomInfo) ProtoReflect() protoreflect.Message { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NatsKvRoomInfo.ProtoReflect.Descriptor instead. +func (*NatsKvRoomInfo) Descriptor() ([]byte, []int) { + return file_plugnmeet_nats_msg_proto_rawDescGZIP(), []int{3} +} + +func (x *NatsKvRoomInfo) GetDbTableId() uint64 { + if x != nil { + return x.DbTableId + } + return 0 +} + +func (x *NatsKvRoomInfo) GetRoomId() string { + if x != nil { + return x.RoomId + } + return "" +} + +func (x *NatsKvRoomInfo) GetRoomSid() string { + if x != nil { + return x.RoomSid + } + return "" +} + +func (x *NatsKvRoomInfo) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *NatsKvRoomInfo) GetEmptyTimeout() uint64 { + if x != nil { + return x.EmptyTimeout + } + return 0 +} + +func (x *NatsKvRoomInfo) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +func (x *NatsKvRoomInfo) GetCreatedAt() uint64 { + if x != nil { + return x.CreatedAt + } + return 0 +} + +type NatsKvUserInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + UserSid string `protobuf:"bytes,2,opt,name=user_sid,json=userSid,proto3" json:"user_sid,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + RoomId string `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + IsAdmin bool `protobuf:"varint,5,opt,name=is_admin,json=isAdmin,proto3" json:"is_admin,omitempty"` + IsPresenter bool `protobuf:"varint,6,opt,name=is_presenter,json=isPresenter,proto3" json:"is_presenter,omitempty"` + Metadata string `protobuf:"bytes,7,opt,name=metadata,proto3" json:"metadata,omitempty"` + JoinedAt uint64 `protobuf:"varint,8,opt,name=joined_at,json=joinedAt,proto3" json:"joined_at,omitempty"` + ReconnectedAt uint64 `protobuf:"varint,9,opt,name=reconnected_at,json=reconnectedAt,proto3" json:"reconnected_at,omitempty"` + DisconnectedAt uint64 `protobuf:"varint,10,opt,name=disconnected_at,json=disconnectedAt,proto3" json:"disconnected_at,omitempty"` +} + +func (x *NatsKvUserInfo) Reset() { + *x = NatsKvUserInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NatsKvUserInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NatsKvUserInfo) ProtoMessage() {} + +func (x *NatsKvUserInfo) ProtoReflect() protoreflect.Message { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NatsKvUserInfo.ProtoReflect.Descriptor instead. +func (*NatsKvUserInfo) Descriptor() ([]byte, []int) { + return file_plugnmeet_nats_msg_proto_rawDescGZIP(), []int{4} +} + +func (x *NatsKvUserInfo) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *NatsKvUserInfo) GetUserSid() string { + if x != nil { + return x.UserSid + } + return "" +} + +func (x *NatsKvUserInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NatsKvUserInfo) GetRoomId() string { + if x != nil { + return x.RoomId + } + return "" +} + +func (x *NatsKvUserInfo) GetIsAdmin() bool { + if x != nil { + return x.IsAdmin + } + return false +} + +func (x *NatsKvUserInfo) GetIsPresenter() bool { + if x != nil { + return x.IsPresenter + } + return false +} + +func (x *NatsKvUserInfo) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +func (x *NatsKvUserInfo) GetJoinedAt() uint64 { + if x != nil { + return x.JoinedAt + } + return 0 +} + +func (x *NatsKvUserInfo) GetReconnectedAt() uint64 { + if x != nil { + return x.ReconnectedAt + } + return 0 +} + +func (x *NatsKvUserInfo) GetDisconnectedAt() uint64 { + if x != nil { + return x.DisconnectedAt + } + return 0 +} + +type MediaServerConnInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` + Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"` + EnabledE2Ee bool `protobuf:"varint,3,opt,name=enabled_e2ee,json=enabledE2ee,proto3" json:"enabled_e2ee,omitempty"` +} + +func (x *MediaServerConnInfo) Reset() { + *x = MediaServerConnInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MediaServerConnInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MediaServerConnInfo) ProtoMessage() {} + +func (x *MediaServerConnInfo) ProtoReflect() protoreflect.Message { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MediaServerConnInfo.ProtoReflect.Descriptor instead. +func (*MediaServerConnInfo) Descriptor() ([]byte, []int) { + return file_plugnmeet_nats_msg_proto_rawDescGZIP(), []int{5} +} + +func (x *MediaServerConnInfo) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *MediaServerConnInfo) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *MediaServerConnInfo) GetEnabledE2Ee() bool { + if x != nil { + return x.EnabledE2Ee + } + return false +} + +type NatsInitialData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Room *NatsKvRoomInfo `protobuf:"bytes,1,opt,name=room,proto3" json:"room,omitempty"` + LocalUser *NatsKvUserInfo `protobuf:"bytes,2,opt,name=local_user,json=localUser,proto3" json:"local_user,omitempty"` + MediaServerInfo *MediaServerConnInfo `protobuf:"bytes,3,opt,name=media_server_info,json=mediaServerInfo,proto3" json:"media_server_info,omitempty"` +} + +func (x *NatsInitialData) Reset() { + *x = NatsInitialData{} + if protoimpl.UnsafeEnabled { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NatsInitialData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NatsInitialData) ProtoMessage() {} + +func (x *NatsInitialData) ProtoReflect() protoreflect.Message { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NatsInitialData.ProtoReflect.Descriptor instead. +func (*NatsInitialData) Descriptor() ([]byte, []int) { + return file_plugnmeet_nats_msg_proto_rawDescGZIP(), []int{6} +} + +func (x *NatsInitialData) GetRoom() *NatsKvRoomInfo { + if x != nil { + return x.Room + } + return nil +} + +func (x *NatsInitialData) GetLocalUser() *NatsKvUserInfo { + if x != nil { + return x.LocalUser + } + return nil +} + +func (x *NatsInitialData) GetMediaServerInfo() *MediaServerConnInfo { + if x != nil { + return x.MediaServerInfo + } + return nil +} + +type NatsSystemNotification struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Type NatsSystemNotificationTypes `protobuf:"varint,2,opt,name=type,proto3,enum=plugnmeet.NatsSystemNotificationTypes" json:"type,omitempty"` + Msg string `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg,omitempty"` + SentAt int64 `protobuf:"varint,4,opt,name=sent_at,json=sentAt,proto3" json:"sent_at,omitempty"` + WithSound bool `protobuf:"varint,5,opt,name=with_sound,json=withSound,proto3" json:"with_sound,omitempty"` +} + +func (x *NatsSystemNotification) Reset() { + *x = NatsSystemNotification{} + if protoimpl.UnsafeEnabled { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NatsSystemNotification) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NatsSystemNotification) ProtoMessage() {} + +func (x *NatsSystemNotification) ProtoReflect() protoreflect.Message { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NatsSystemNotification.ProtoReflect.Descriptor instead. +func (*NatsSystemNotification) Descriptor() ([]byte, []int) { + return file_plugnmeet_nats_msg_proto_rawDescGZIP(), []int{7} +} + +func (x *NatsSystemNotification) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *NatsSystemNotification) GetType() NatsSystemNotificationTypes { + if x != nil { + return x.Type + } + return NatsSystemNotificationTypes_NATS_SYSTEM_NOTIFICATION_INFO +} + +func (x *NatsSystemNotification) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *NatsSystemNotification) GetSentAt() int64 { + if x != nil { + return x.SentAt + } + return 0 +} + +func (x *NatsSystemNotification) GetWithSound() bool { + if x != nil { + return x.WithSound + } + return false +} + +type NatsUserMetadataUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Metadata string `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *NatsUserMetadataUpdate) Reset() { + *x = NatsUserMetadataUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NatsUserMetadataUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NatsUserMetadataUpdate) ProtoMessage() {} + +func (x *NatsUserMetadataUpdate) ProtoReflect() protoreflect.Message { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NatsUserMetadataUpdate.ProtoReflect.Descriptor instead. +func (*NatsUserMetadataUpdate) Descriptor() ([]byte, []int) { + return file_plugnmeet_nats_msg_proto_rawDescGZIP(), []int{8} +} + +func (x *NatsUserMetadataUpdate) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *NatsUserMetadataUpdate) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +type ChatMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + FromName string `protobuf:"bytes,2,opt,name=from_name,json=fromName,proto3" json:"from_name,omitempty"` + FromUserId string `protobuf:"bytes,3,opt,name=from_user_id,json=fromUserId,proto3" json:"from_user_id,omitempty"` + ToUserId *string `protobuf:"bytes,5,opt,name=to_user_id,json=toUserId,proto3,oneof" json:"to_user_id,omitempty"` + IsPrivate bool `protobuf:"varint,6,opt,name=is_private,json=isPrivate,proto3" json:"is_private,omitempty"` + Message string `protobuf:"bytes,7,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *ChatMessage) Reset() { + *x = ChatMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatMessage) ProtoMessage() {} + +func (x *ChatMessage) ProtoReflect() protoreflect.Message { + mi := &file_plugnmeet_nats_msg_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatMessage.ProtoReflect.Descriptor instead. +func (*ChatMessage) Descriptor() ([]byte, []int) { + return file_plugnmeet_nats_msg_proto_rawDescGZIP(), []int{9} +} + +func (x *ChatMessage) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ChatMessage) GetFromName() string { + if x != nil { + return x.FromName + } + return "" +} + +func (x *ChatMessage) GetFromUserId() string { + if x != nil { + return x.FromUserId + } + return "" +} + +func (x *ChatMessage) GetToUserId() string { + if x != nil && x.ToUserId != nil { + return *x.ToUserId + } + return "" +} + +func (x *ChatMessage) GetIsPrivate() bool { + if x != nil { + return x.IsPrivate + } + return false +} + +func (x *ChatMessage) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +var File_plugnmeet_nats_msg_proto protoreflect.FileDescriptor + +var file_plugnmeet_nats_msg_proto_rawDesc = []byte{ + 0x0a, 0x18, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x74, 0x73, + 0x5f, 0x6d, 0x73, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x6c, 0x75, 0x67, + 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x22, 0x87, 0x02, 0x0a, 0x0c, 0x4e, 0x61, 0x74, 0x73, 0x53, 0x75, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x41, 0x70, 0x69, 0x57, 0x6f, 0x72, 0x6b, + 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x6a, 0x73, 0x5f, + 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x4a, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x68, 0x61, 0x74, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x0a, 0x0a, + 0x77, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x77, 0x68, 0x69, 0x74, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x21, 0x0a, 0x0c, + 0x64, 0x61, 0x74, 0x61, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, + 0x77, 0x0a, 0x15, 0x4e, 0x61, 0x74, 0x73, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x54, 0x6f, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, + 0x65, 0x65, 0x74, 0x2e, 0x4e, 0x61, 0x74, 0x73, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x54, 0x6f, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x77, 0x0a, 0x15, 0x4e, 0x61, 0x74, 0x73, + 0x4d, 0x73, 0x67, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x3c, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x26, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x4e, 0x61, 0x74, + 0x73, 0x4d, 0x73, 0x67, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, + 0x67, 0x22, 0xdc, 0x01, 0x0a, 0x0e, 0x4e, 0x61, 0x74, 0x73, 0x4b, 0x76, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a, 0x0b, 0x64, 0x62, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x64, 0x62, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x19, 0x0a, + 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x53, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x54, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x22, 0xb8, 0x02, 0x0a, 0x0e, 0x4e, 0x61, 0x74, 0x73, 0x4b, 0x76, 0x55, 0x73, 0x65, 0x72, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x75, 0x73, 0x65, 0x72, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x72, + 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, + 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, + 0x0a, 0x09, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x72, + 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0d, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x41, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x64, 0x69, 0x73, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x60, 0x0a, 0x13, 0x4d, + 0x65, 0x64, 0x69, 0x61, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x75, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x65, 0x32, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0b, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x32, 0x65, 0x65, 0x22, 0xc6, 0x01, + 0x0a, 0x0f, 0x4e, 0x61, 0x74, 0x73, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x2d, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x4e, 0x61, 0x74, 0x73, + 0x4b, 0x76, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, + 0x12, 0x38, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, + 0x2e, 0x4e, 0x61, 0x74, 0x73, 0x4b, 0x76, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x12, 0x4a, 0x0a, 0x11, 0x6d, 0x65, + 0x64, 0x69, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, + 0x74, 0x2e, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xae, 0x01, 0x0a, 0x16, 0x4e, 0x61, 0x74, 0x73, 0x53, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x26, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2e, 0x4e, 0x61, 0x74, 0x73, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, + 0x17, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x73, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x77, 0x69, 0x74, 0x68, + 0x5f, 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x77, 0x69, + 0x74, 0x68, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x4d, 0x0a, 0x16, 0x4e, 0x61, 0x74, 0x73, 0x55, + 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xc7, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x55, + 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0a, 0x74, 0x6f, 0x5f, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x74, 0x6f, 0x55, + 0x73, 0x65, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x74, 0x6f, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x2a, 0xf8, 0x02, 0x0a, 0x1b, 0x4e, 0x61, 0x74, 0x73, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x54, 0x6f, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x14, 0x0a, 0x10, 0x52, 0x45, 0x53, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x5f, + 0x44, 0x41, 0x54, 0x41, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4a, 0x4f, 0x49, 0x4e, 0x45, 0x44, + 0x5f, 0x55, 0x53, 0x45, 0x52, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, + 0x14, 0x52, 0x4f, 0x4f, 0x4d, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x55, + 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x53, 0x45, 0x52, 0x5f, + 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, + 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x45, 0x44, + 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x55, 0x53, 0x45, + 0x52, 0x5f, 0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x06, 0x12, 0x18, 0x0a, 0x14, 0x52, + 0x45, 0x53, 0x50, 0x5f, 0x52, 0x45, 0x4e, 0x45, 0x57, 0x5f, 0x50, 0x4e, 0x4d, 0x5f, 0x54, 0x4f, + 0x4b, 0x45, 0x4e, 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, + 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x08, 0x12, 0x28, + 0x0a, 0x24, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x5f, 0x43, 0x4f, 0x47, 0x4e, 0x49, 0x54, 0x49, 0x56, + 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x50, 0x45, 0x45, 0x43, 0x48, + 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0x09, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x45, 0x53, 0x53, + 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x0a, 0x12, 0x0f, 0x0a, 0x0b, 0x50, + 0x4f, 0x4c, 0x4c, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x10, 0x0b, 0x12, 0x10, 0x0a, 0x0c, + 0x50, 0x4f, 0x4c, 0x4c, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x0c, 0x12, 0x16, + 0x0a, 0x12, 0x4a, 0x4f, 0x49, 0x4e, 0x5f, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x4f, 0x55, 0x54, 0x5f, + 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x0d, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, + 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4d, 0x53, 0x47, 0x10, 0x0e, 0x2a, 0xb6, 0x01, 0x0a, 0x1b, + 0x4e, 0x61, 0x74, 0x73, 0x4d, 0x73, 0x67, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x10, 0x52, + 0x45, 0x51, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x10, + 0x00, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x45, 0x51, 0x5f, 0x52, 0x45, 0x4e, 0x45, 0x57, 0x5f, 0x50, + 0x4e, 0x4d, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x49, + 0x4e, 0x47, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x45, 0x51, 0x5f, 0x52, 0x41, 0x49, 0x53, + 0x45, 0x5f, 0x48, 0x41, 0x4e, 0x44, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x45, 0x51, 0x5f, + 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x48, 0x41, 0x4e, 0x44, 0x10, 0x05, 0x12, 0x1d, 0x0a, 0x19, + 0x52, 0x45, 0x51, 0x5f, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x5f, + 0x55, 0x53, 0x45, 0x52, 0x5f, 0x48, 0x41, 0x4e, 0x44, 0x10, 0x06, 0x12, 0x17, 0x0a, 0x13, 0x50, + 0x55, 0x53, 0x48, 0x5f, 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x54, 0x49, 0x43, 0x53, 0x5f, 0x44, 0x41, + 0x54, 0x41, 0x10, 0x07, 0x2a, 0x8a, 0x01, 0x0a, 0x1b, 0x4e, 0x61, 0x74, 0x73, 0x53, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x79, 0x70, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x1d, 0x4e, 0x41, 0x54, 0x53, 0x5f, 0x53, 0x59, 0x53, + 0x54, 0x45, 0x4d, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, 0x4e, 0x41, 0x54, 0x53, 0x5f, + 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x22, 0x0a, + 0x1e, 0x4e, 0x41, 0x54, 0x53, 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x4e, 0x4f, 0x54, + 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, + 0x02, 0x42, 0x9e, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, + 0x65, 0x65, 0x74, 0x42, 0x15, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x4e, 0x61, + 0x74, 0x73, 0x4d, 0x73, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x79, 0x6e, 0x61, 0x70, 0x61, 0x72, + 0x72, 0x6f, 0x74, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x2d, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, + 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, + 0x65, 0x74, 0xca, 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0xe2, 0x02, + 0x15, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, 0x65, 0x74, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x50, 0x6c, 0x75, 0x67, 0x6e, 0x6d, 0x65, + 0x65, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_plugnmeet_nats_msg_proto_rawDescOnce sync.Once + file_plugnmeet_nats_msg_proto_rawDescData = file_plugnmeet_nats_msg_proto_rawDesc +) + +func file_plugnmeet_nats_msg_proto_rawDescGZIP() []byte { + file_plugnmeet_nats_msg_proto_rawDescOnce.Do(func() { + file_plugnmeet_nats_msg_proto_rawDescData = protoimpl.X.CompressGZIP(file_plugnmeet_nats_msg_proto_rawDescData) + }) + return file_plugnmeet_nats_msg_proto_rawDescData +} + +var file_plugnmeet_nats_msg_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_plugnmeet_nats_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 10) +var file_plugnmeet_nats_msg_proto_goTypes = []any{ + (NatsMsgServerToClientEvents)(0), // 0: plugnmeet.NatsMsgServerToClientEvents + (NatsMsgClientToServerEvents)(0), // 1: plugnmeet.NatsMsgClientToServerEvents + (NatsSystemNotificationTypes)(0), // 2: plugnmeet.NatsSystemNotificationTypes + (*NatsSubjects)(nil), // 3: plugnmeet.NatsSubjects + (*NatsMsgServerToClient)(nil), // 4: plugnmeet.NatsMsgServerToClient + (*NatsMsgClientToServer)(nil), // 5: plugnmeet.NatsMsgClientToServer + (*NatsKvRoomInfo)(nil), // 6: plugnmeet.NatsKvRoomInfo + (*NatsKvUserInfo)(nil), // 7: plugnmeet.NatsKvUserInfo + (*MediaServerConnInfo)(nil), // 8: plugnmeet.MediaServerConnInfo + (*NatsInitialData)(nil), // 9: plugnmeet.NatsInitialData + (*NatsSystemNotification)(nil), // 10: plugnmeet.NatsSystemNotification + (*NatsUserMetadataUpdate)(nil), // 11: plugnmeet.NatsUserMetadataUpdate + (*ChatMessage)(nil), // 12: plugnmeet.ChatMessage +} +var file_plugnmeet_nats_msg_proto_depIdxs = []int32{ + 0, // 0: plugnmeet.NatsMsgServerToClient.event:type_name -> plugnmeet.NatsMsgServerToClientEvents + 1, // 1: plugnmeet.NatsMsgClientToServer.event:type_name -> plugnmeet.NatsMsgClientToServerEvents + 6, // 2: plugnmeet.NatsInitialData.room:type_name -> plugnmeet.NatsKvRoomInfo + 7, // 3: plugnmeet.NatsInitialData.local_user:type_name -> plugnmeet.NatsKvUserInfo + 8, // 4: plugnmeet.NatsInitialData.media_server_info:type_name -> plugnmeet.MediaServerConnInfo + 2, // 5: plugnmeet.NatsSystemNotification.type:type_name -> plugnmeet.NatsSystemNotificationTypes + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_plugnmeet_nats_msg_proto_init() } +func file_plugnmeet_nats_msg_proto_init() { + if File_plugnmeet_nats_msg_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_plugnmeet_nats_msg_proto_msgTypes[0].Exporter = func(v any, i int) any { + switch v := v.(*NatsSubjects); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_plugnmeet_nats_msg_proto_msgTypes[1].Exporter = func(v any, i int) any { + switch v := v.(*NatsMsgServerToClient); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_plugnmeet_nats_msg_proto_msgTypes[2].Exporter = func(v any, i int) any { + switch v := v.(*NatsMsgClientToServer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_plugnmeet_nats_msg_proto_msgTypes[3].Exporter = func(v any, i int) any { + switch v := v.(*NatsKvRoomInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_plugnmeet_nats_msg_proto_msgTypes[4].Exporter = func(v any, i int) any { + switch v := v.(*NatsKvUserInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_plugnmeet_nats_msg_proto_msgTypes[5].Exporter = func(v any, i int) any { + switch v := v.(*MediaServerConnInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_plugnmeet_nats_msg_proto_msgTypes[6].Exporter = func(v any, i int) any { + switch v := v.(*NatsInitialData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_plugnmeet_nats_msg_proto_msgTypes[7].Exporter = func(v any, i int) any { + switch v := v.(*NatsSystemNotification); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_plugnmeet_nats_msg_proto_msgTypes[8].Exporter = func(v any, i int) any { + switch v := v.(*NatsUserMetadataUpdate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_plugnmeet_nats_msg_proto_msgTypes[9].Exporter = func(v any, i int) any { + switch v := v.(*ChatMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_plugnmeet_nats_msg_proto_msgTypes[9].OneofWrappers = []any{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_plugnmeet_nats_msg_proto_rawDesc, + NumEnums: 3, + NumMessages: 10, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_plugnmeet_nats_msg_proto_goTypes, + DependencyIndexes: file_plugnmeet_nats_msg_proto_depIdxs, + EnumInfos: file_plugnmeet_nats_msg_proto_enumTypes, + MessageInfos: file_plugnmeet_nats_msg_proto_msgTypes, + }.Build() + File_plugnmeet_nats_msg_proto = out.File + file_plugnmeet_nats_msg_proto_rawDesc = nil + file_plugnmeet_nats_msg_proto_goTypes = nil + file_plugnmeet_nats_msg_proto_depIdxs = nil +} diff --git a/plugnmeet/plugnmeet_nats_msg.pb.validate.go b/plugnmeet/plugnmeet_nats_msg.pb.validate.go new file mode 100644 index 0000000..2832f81 --- /dev/null +++ b/plugnmeet/plugnmeet_nats_msg.pb.validate.go @@ -0,0 +1,1225 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: plugnmeet_nats_msg.proto + +package plugnmeet + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "sort" + "strings" + "time" + "unicode/utf8" + + "google.golang.org/protobuf/types/known/anypb" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = anypb.Any{} + _ = sort.Sort +) + +// Validate checks the field values on NatsSubjects with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *NatsSubjects) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NatsSubjects with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NatsSubjectsMultiError, or +// nil if none found. +func (m *NatsSubjects) ValidateAll() error { + return m.validate(true) +} + +func (m *NatsSubjects) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for SystemApiWorker + + // no validation rules for SystemJsWorker + + // no validation rules for SystemPublic + + // no validation rules for SystemPrivate + + // no validation rules for Chat + + // no validation rules for Whiteboard + + // no validation rules for DataChannel + + if len(errors) > 0 { + return NatsSubjectsMultiError(errors) + } + + return nil +} + +// NatsSubjectsMultiError is an error wrapping multiple validation errors +// returned by NatsSubjects.ValidateAll() if the designated constraints aren't met. +type NatsSubjectsMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NatsSubjectsMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NatsSubjectsMultiError) AllErrors() []error { return m } + +// NatsSubjectsValidationError is the validation error returned by +// NatsSubjects.Validate if the designated constraints aren't met. +type NatsSubjectsValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e NatsSubjectsValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e NatsSubjectsValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e NatsSubjectsValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e NatsSubjectsValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e NatsSubjectsValidationError) ErrorName() string { return "NatsSubjectsValidationError" } + +// Error satisfies the builtin error interface +func (e NatsSubjectsValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sNatsSubjects.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = NatsSubjectsValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = NatsSubjectsValidationError{} + +// Validate checks the field values on NatsMsgServerToClient with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *NatsMsgServerToClient) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NatsMsgServerToClient with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// NatsMsgServerToClientMultiError, or nil if none found. +func (m *NatsMsgServerToClient) ValidateAll() error { + return m.validate(true) +} + +func (m *NatsMsgServerToClient) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Id + + // no validation rules for Event + + // no validation rules for Msg + + if len(errors) > 0 { + return NatsMsgServerToClientMultiError(errors) + } + + return nil +} + +// NatsMsgServerToClientMultiError is an error wrapping multiple validation +// errors returned by NatsMsgServerToClient.ValidateAll() if the designated +// constraints aren't met. +type NatsMsgServerToClientMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NatsMsgServerToClientMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NatsMsgServerToClientMultiError) AllErrors() []error { return m } + +// NatsMsgServerToClientValidationError is the validation error returned by +// NatsMsgServerToClient.Validate if the designated constraints aren't met. +type NatsMsgServerToClientValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e NatsMsgServerToClientValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e NatsMsgServerToClientValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e NatsMsgServerToClientValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e NatsMsgServerToClientValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e NatsMsgServerToClientValidationError) ErrorName() string { + return "NatsMsgServerToClientValidationError" +} + +// Error satisfies the builtin error interface +func (e NatsMsgServerToClientValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sNatsMsgServerToClient.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = NatsMsgServerToClientValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = NatsMsgServerToClientValidationError{} + +// Validate checks the field values on NatsMsgClientToServer with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *NatsMsgClientToServer) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NatsMsgClientToServer with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// NatsMsgClientToServerMultiError, or nil if none found. +func (m *NatsMsgClientToServer) ValidateAll() error { + return m.validate(true) +} + +func (m *NatsMsgClientToServer) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Id + + // no validation rules for Event + + // no validation rules for Msg + + if len(errors) > 0 { + return NatsMsgClientToServerMultiError(errors) + } + + return nil +} + +// NatsMsgClientToServerMultiError is an error wrapping multiple validation +// errors returned by NatsMsgClientToServer.ValidateAll() if the designated +// constraints aren't met. +type NatsMsgClientToServerMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NatsMsgClientToServerMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NatsMsgClientToServerMultiError) AllErrors() []error { return m } + +// NatsMsgClientToServerValidationError is the validation error returned by +// NatsMsgClientToServer.Validate if the designated constraints aren't met. +type NatsMsgClientToServerValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e NatsMsgClientToServerValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e NatsMsgClientToServerValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e NatsMsgClientToServerValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e NatsMsgClientToServerValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e NatsMsgClientToServerValidationError) ErrorName() string { + return "NatsMsgClientToServerValidationError" +} + +// Error satisfies the builtin error interface +func (e NatsMsgClientToServerValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sNatsMsgClientToServer.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = NatsMsgClientToServerValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = NatsMsgClientToServerValidationError{} + +// Validate checks the field values on NatsKvRoomInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *NatsKvRoomInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NatsKvRoomInfo with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NatsKvRoomInfoMultiError, +// or nil if none found. +func (m *NatsKvRoomInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *NatsKvRoomInfo) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for DbTableId + + // no validation rules for RoomId + + // no validation rules for RoomSid + + // no validation rules for Status + + // no validation rules for EmptyTimeout + + // no validation rules for Metadata + + // no validation rules for CreatedAt + + if len(errors) > 0 { + return NatsKvRoomInfoMultiError(errors) + } + + return nil +} + +// NatsKvRoomInfoMultiError is an error wrapping multiple validation errors +// returned by NatsKvRoomInfo.ValidateAll() if the designated constraints +// aren't met. +type NatsKvRoomInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NatsKvRoomInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NatsKvRoomInfoMultiError) AllErrors() []error { return m } + +// NatsKvRoomInfoValidationError is the validation error returned by +// NatsKvRoomInfo.Validate if the designated constraints aren't met. +type NatsKvRoomInfoValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e NatsKvRoomInfoValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e NatsKvRoomInfoValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e NatsKvRoomInfoValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e NatsKvRoomInfoValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e NatsKvRoomInfoValidationError) ErrorName() string { return "NatsKvRoomInfoValidationError" } + +// Error satisfies the builtin error interface +func (e NatsKvRoomInfoValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sNatsKvRoomInfo.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = NatsKvRoomInfoValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = NatsKvRoomInfoValidationError{} + +// Validate checks the field values on NatsKvUserInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *NatsKvUserInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NatsKvUserInfo with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NatsKvUserInfoMultiError, +// or nil if none found. +func (m *NatsKvUserInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *NatsKvUserInfo) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for UserId + + // no validation rules for UserSid + + // no validation rules for Name + + // no validation rules for RoomId + + // no validation rules for IsAdmin + + // no validation rules for IsPresenter + + // no validation rules for Metadata + + // no validation rules for JoinedAt + + // no validation rules for ReconnectedAt + + // no validation rules for DisconnectedAt + + if len(errors) > 0 { + return NatsKvUserInfoMultiError(errors) + } + + return nil +} + +// NatsKvUserInfoMultiError is an error wrapping multiple validation errors +// returned by NatsKvUserInfo.ValidateAll() if the designated constraints +// aren't met. +type NatsKvUserInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NatsKvUserInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NatsKvUserInfoMultiError) AllErrors() []error { return m } + +// NatsKvUserInfoValidationError is the validation error returned by +// NatsKvUserInfo.Validate if the designated constraints aren't met. +type NatsKvUserInfoValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e NatsKvUserInfoValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e NatsKvUserInfoValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e NatsKvUserInfoValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e NatsKvUserInfoValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e NatsKvUserInfoValidationError) ErrorName() string { return "NatsKvUserInfoValidationError" } + +// Error satisfies the builtin error interface +func (e NatsKvUserInfoValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sNatsKvUserInfo.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = NatsKvUserInfoValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = NatsKvUserInfoValidationError{} + +// Validate checks the field values on MediaServerConnInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *MediaServerConnInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MediaServerConnInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// MediaServerConnInfoMultiError, or nil if none found. +func (m *MediaServerConnInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *MediaServerConnInfo) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Url + + // no validation rules for Token + + // no validation rules for EnabledE2Ee + + if len(errors) > 0 { + return MediaServerConnInfoMultiError(errors) + } + + return nil +} + +// MediaServerConnInfoMultiError is an error wrapping multiple validation +// errors returned by MediaServerConnInfo.ValidateAll() if the designated +// constraints aren't met. +type MediaServerConnInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MediaServerConnInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m MediaServerConnInfoMultiError) AllErrors() []error { return m } + +// MediaServerConnInfoValidationError is the validation error returned by +// MediaServerConnInfo.Validate if the designated constraints aren't met. +type MediaServerConnInfoValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e MediaServerConnInfoValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e MediaServerConnInfoValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e MediaServerConnInfoValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e MediaServerConnInfoValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e MediaServerConnInfoValidationError) ErrorName() string { + return "MediaServerConnInfoValidationError" +} + +// Error satisfies the builtin error interface +func (e MediaServerConnInfoValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sMediaServerConnInfo.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = MediaServerConnInfoValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = MediaServerConnInfoValidationError{} + +// Validate checks the field values on NatsInitialData with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *NatsInitialData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NatsInitialData with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// NatsInitialDataMultiError, or nil if none found. +func (m *NatsInitialData) ValidateAll() error { + return m.validate(true) +} + +func (m *NatsInitialData) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetRoom()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NatsInitialDataValidationError{ + field: "Room", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NatsInitialDataValidationError{ + field: "Room", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRoom()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return NatsInitialDataValidationError{ + field: "Room", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetLocalUser()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NatsInitialDataValidationError{ + field: "LocalUser", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NatsInitialDataValidationError{ + field: "LocalUser", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLocalUser()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return NatsInitialDataValidationError{ + field: "LocalUser", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetMediaServerInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NatsInitialDataValidationError{ + field: "MediaServerInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NatsInitialDataValidationError{ + field: "MediaServerInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMediaServerInfo()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return NatsInitialDataValidationError{ + field: "MediaServerInfo", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return NatsInitialDataMultiError(errors) + } + + return nil +} + +// NatsInitialDataMultiError is an error wrapping multiple validation errors +// returned by NatsInitialData.ValidateAll() if the designated constraints +// aren't met. +type NatsInitialDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NatsInitialDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NatsInitialDataMultiError) AllErrors() []error { return m } + +// NatsInitialDataValidationError is the validation error returned by +// NatsInitialData.Validate if the designated constraints aren't met. +type NatsInitialDataValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e NatsInitialDataValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e NatsInitialDataValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e NatsInitialDataValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e NatsInitialDataValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e NatsInitialDataValidationError) ErrorName() string { return "NatsInitialDataValidationError" } + +// Error satisfies the builtin error interface +func (e NatsInitialDataValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sNatsInitialData.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = NatsInitialDataValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = NatsInitialDataValidationError{} + +// Validate checks the field values on NatsSystemNotification with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *NatsSystemNotification) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NatsSystemNotification with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// NatsSystemNotificationMultiError, or nil if none found. +func (m *NatsSystemNotification) ValidateAll() error { + return m.validate(true) +} + +func (m *NatsSystemNotification) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Id + + // no validation rules for Type + + // no validation rules for Msg + + // no validation rules for SentAt + + // no validation rules for WithSound + + if len(errors) > 0 { + return NatsSystemNotificationMultiError(errors) + } + + return nil +} + +// NatsSystemNotificationMultiError is an error wrapping multiple validation +// errors returned by NatsSystemNotification.ValidateAll() if the designated +// constraints aren't met. +type NatsSystemNotificationMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NatsSystemNotificationMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NatsSystemNotificationMultiError) AllErrors() []error { return m } + +// NatsSystemNotificationValidationError is the validation error returned by +// NatsSystemNotification.Validate if the designated constraints aren't met. +type NatsSystemNotificationValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e NatsSystemNotificationValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e NatsSystemNotificationValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e NatsSystemNotificationValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e NatsSystemNotificationValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e NatsSystemNotificationValidationError) ErrorName() string { + return "NatsSystemNotificationValidationError" +} + +// Error satisfies the builtin error interface +func (e NatsSystemNotificationValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sNatsSystemNotification.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = NatsSystemNotificationValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = NatsSystemNotificationValidationError{} + +// Validate checks the field values on NatsUserMetadataUpdate with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *NatsUserMetadataUpdate) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NatsUserMetadataUpdate with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// NatsUserMetadataUpdateMultiError, or nil if none found. +func (m *NatsUserMetadataUpdate) ValidateAll() error { + return m.validate(true) +} + +func (m *NatsUserMetadataUpdate) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for UserId + + // no validation rules for Metadata + + if len(errors) > 0 { + return NatsUserMetadataUpdateMultiError(errors) + } + + return nil +} + +// NatsUserMetadataUpdateMultiError is an error wrapping multiple validation +// errors returned by NatsUserMetadataUpdate.ValidateAll() if the designated +// constraints aren't met. +type NatsUserMetadataUpdateMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NatsUserMetadataUpdateMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NatsUserMetadataUpdateMultiError) AllErrors() []error { return m } + +// NatsUserMetadataUpdateValidationError is the validation error returned by +// NatsUserMetadataUpdate.Validate if the designated constraints aren't met. +type NatsUserMetadataUpdateValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e NatsUserMetadataUpdateValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e NatsUserMetadataUpdateValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e NatsUserMetadataUpdateValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e NatsUserMetadataUpdateValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e NatsUserMetadataUpdateValidationError) ErrorName() string { + return "NatsUserMetadataUpdateValidationError" +} + +// Error satisfies the builtin error interface +func (e NatsUserMetadataUpdateValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sNatsUserMetadataUpdate.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = NatsUserMetadataUpdateValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = NatsUserMetadataUpdateValidationError{} + +// Validate checks the field values on ChatMessage with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *ChatMessage) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ChatMessage with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ChatMessageMultiError, or +// nil if none found. +func (m *ChatMessage) ValidateAll() error { + return m.validate(true) +} + +func (m *ChatMessage) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Id + + // no validation rules for FromName + + // no validation rules for FromUserId + + // no validation rules for IsPrivate + + // no validation rules for Message + + if m.ToUserId != nil { + // no validation rules for ToUserId + } + + if len(errors) > 0 { + return ChatMessageMultiError(errors) + } + + return nil +} + +// ChatMessageMultiError is an error wrapping multiple validation errors +// returned by ChatMessage.ValidateAll() if the designated constraints aren't met. +type ChatMessageMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ChatMessageMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ChatMessageMultiError) AllErrors() []error { return m } + +// ChatMessageValidationError is the validation error returned by +// ChatMessage.Validate if the designated constraints aren't met. +type ChatMessageValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatMessageValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatMessageValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatMessageValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatMessageValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatMessageValidationError) ErrorName() string { return "ChatMessageValidationError" } + +// Error satisfies the builtin error interface +func (e ChatMessageValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatMessage.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatMessageValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatMessageValidationError{} diff --git a/proto_files/plugnmeet_common_api.proto b/proto_files/plugnmeet_common_api.proto index 32d5fed..f7feb15 100644 --- a/proto_files/plugnmeet_common_api.proto +++ b/proto_files/plugnmeet_common_api.proto @@ -4,6 +4,7 @@ package plugnmeet; option go_package = "github.com/mynaparrot/plugnmeet-protocol/plugnmeet"; import "plugnmeet_datamessage.proto"; +import "plugnmeet_nats_msg.proto"; message CommonResponse { bool status = 1; @@ -17,10 +18,11 @@ message VerifyTokenReq { message VerifyTokenRes { bool status = 1; string msg = 2; - optional string livekit_host = 3; - optional string token = 4; - optional string server_version = 5; - bool enabled_e2ee = 6; + repeated string nats_ws_urls = 3; + optional string server_version = 4; + optional string room_id = 5; + optional string user_id = 6; + optional NatsSubjects nats_subjects = 7; } message MuteUnMuteTrackReq { diff --git a/proto_files/plugnmeet_create_room.proto b/proto_files/plugnmeet_create_room.proto index 3000f2a..3c9b10d 100644 --- a/proto_files/plugnmeet_create_room.proto +++ b/proto_files/plugnmeet_create_room.proto @@ -5,14 +5,14 @@ option go_package = "github.com/mynaparrot/plugnmeet-protocol/plugnmeet"; import "plugnmeet_gen_token.proto"; import "buf/validate/validate.proto"; -import "livekit_models.proto"; import "plugnmeet_ingress.proto"; +import "plugnmeet_nats_msg.proto"; message CreateRoomReq { string room_id = 1 [(buf.validate.field).cel = { id: "room_id_format", - message: "room_id should only contain letters, digits or special characters: -_.:", - expression: "this.matches('^[a-zA-Z0-9-_.:]+$')" + message: "room_id should only contain letters, digits or special characters: -_", + expression: "this.matches('^[a-zA-Z0-9-_]+$')" }]; optional uint32 empty_timeout = 2 [(buf.validate.field).uint32.gt = 0]; optional uint32 max_participants = 3 [(buf.validate.field).uint32.gt = 0]; @@ -222,5 +222,5 @@ message CopyrightConf { message CreateRoomRes { bool status = 1; string msg = 2; - livekit.Room room_info = 3; + NatsKvRoomInfo room_info = 3; } diff --git a/proto_files/plugnmeet_datamessage.proto b/proto_files/plugnmeet_datamessage.proto index e957195..ab5c7b2 100644 --- a/proto_files/plugnmeet_datamessage.proto +++ b/proto_files/plugnmeet_datamessage.proto @@ -3,71 +3,36 @@ package plugnmeet; option go_package = "github.com/mynaparrot/plugnmeet-protocol/plugnmeet"; -message DataMessage { - DataMsgType type = 1; - optional string message_id = 2; - string room_sid = 3; - string room_id = 4; - optional string to = 5; - DataMsgBody body = 6; -} - -message DataMsgBody { - DataMsgBodyType type = 1; - optional string message_id = 2; - optional string time = 3; - DataMsgReqFrom from = 4; - string msg = 5; - optional uint32 is_private = 6; -} - -message DataMsgReqFrom { - string sid = 1; - string user_id = 2; - optional string name = 3; -} - -enum DataMsgType { - USER = 0; - SYSTEM = 1; - WHITEBOARD = 2; +message DataChannelMessage { + string id = 1; + DataMsgBodyType type = 2; + string from_user_id = 3; + optional string to_user_id = 4; + string message = 5; } enum DataMsgBodyType { // SYSTEM type - RAISE_HAND = 0; - LOWER_HAND = 1; - OTHER_USER_LOWER_HAND = 2; - FILE_UPLOAD = 3; - INFO = 4; - ALERT = 5; - SEND_CHAT_MSGS = 6; - RENEW_TOKEN = 7; - UPDATE_LOCK_SETTINGS = 8; - INIT_WHITEBOARD = 9; - USER_VISIBILITY_CHANGE = 10; - EXTERNAL_MEDIA_PLAYER_EVENTS = 11; - POLL_CREATED = 12; - NEW_POLL_RESPONSE = 13; - POLL_CLOSED = 14; - JOIN_BREAKOUT_ROOM = 15; - SPEECH_SUBTITLE_TEXT = 23; - AZURE_COGNITIVE_SERVICE_SPEECH_TOKEN = 24; - UPDATE_ROOM_METADATA = 25; - - // USER type - CHAT = 16; - - // WHITEBOARD type - SCENE_UPDATE = 17; - POINTER_UPDATE = 18; - ADD_WHITEBOARD_FILE = 19; - ADD_WHITEBOARD_OFFICE_FILE = 20; - PAGE_CHANGE = 21; - WHITEBOARD_APP_STATE_CHANGE = 22; + UNKNOWN = 0; + + FILE_UPLOAD = 1; + INFO = 2; + ALERT = 3; - // analytics - ANALYTICS_DATA = 27; + USER_VISIBILITY_CHANGE = 6; + EXTERNAL_MEDIA_PLAYER_EVENTS = 7; - // next ID: 28 + NEW_POLL_RESPONSE = 8; + SPEECH_SUBTITLE_TEXT = 9; + + // WHITEBOARD type + REQ_INIT_WHITEBOARD_DATA = 10; + SCENE_UPDATE = 11; + POINTER_UPDATE = 12; + ADD_WHITEBOARD_FILE = 13; + ADD_WHITEBOARD_OFFICE_FILE = 14; + PAGE_CHANGE = 15; + WHITEBOARD_APP_STATE_CHANGE = 16; + + // next ID: 17 } diff --git a/proto_files/plugnmeet_gen_token.proto b/proto_files/plugnmeet_gen_token.proto index dcb186b..dd2862c 100644 --- a/proto_files/plugnmeet_gen_token.proto +++ b/proto_files/plugnmeet_gen_token.proto @@ -8,8 +8,8 @@ import "buf/validate/validate.proto"; message GenerateTokenReq { string room_id = 1 [(buf.validate.field).cel = { id: "room_id_format", - message: "room_id should only contain letters, digits or special characters: -_.:", - expression: "this.matches('^[a-zA-Z0-9-_.:]+$')" + message: "room_id should only contain letters, digits or special characters: -_", + expression: "this.matches('^[a-zA-Z0-9-_]+$')" }]; UserInfo user_info = 2 [(buf.validate.field).required = true]; } diff --git a/proto_files/plugnmeet_nats_msg.proto b/proto_files/plugnmeet_nats_msg.proto new file mode 100644 index 0000000..f5c8ac0 --- /dev/null +++ b/proto_files/plugnmeet_nats_msg.proto @@ -0,0 +1,129 @@ +syntax = "proto3"; +package plugnmeet; + +option go_package = "github.com/mynaparrot/plugnmeet-protocol/plugnmeet"; + +message NatsSubjects { + string system_api_worker = 1; + string system_js_worker = 2; + string system_public = 3; + string system_private = 4; + string chat = 5; + string whiteboard = 6; + string data_channel = 7; +} + +enum NatsMsgServerToClientEvents { + // initial data + RES_INITIAL_DATA = 0; + JOINED_USERS_LIST = 1; + + ROOM_METADATA_UPDATE = 2; + USER_METADATA_UPDATE = 3; + + USER_JOINED = 4; + USER_DISCONNECTED = 5; + USER_OFFLINE = 6; + + RESP_RENEW_PNM_TOKEN = 7; + SYSTEM_NOTIFICATION = 8; + + AZURE_COGNITIVE_SERVICE_SPEECH_TOKEN = 9; + SESSION_ENDED = 10; + POLL_CLOSED = 11; + POLL_CREATED = 12; + JOIN_BREAKOUT_ROOM = 13; + SYSTEM_CHAT_MSG = 14; // mostly system message display in chat + + //next ID: 15 +} + +enum NatsMsgClientToServerEvents { + REQ_INITIAL_DATA = 0; + REQ_RENEW_PNM_TOKEN = 1; + PING = 2; + + REQ_RAISE_HAND = 4; + REQ_LOWER_HAND = 5; + REQ_LOWER_OTHER_USER_HAND = 6; + + PUSH_ANALYTICS_DATA = 7; + + //next ID: 8 +} + +message NatsMsgServerToClient { + string id = 1; + NatsMsgServerToClientEvents event = 2; + string msg = 3; +} + +message NatsMsgClientToServer { + string id = 1; + NatsMsgClientToServerEvents event = 2; + string msg = 3; +} + +message NatsKvRoomInfo { + uint64 db_table_id = 1; + string room_id = 2; + string room_sid = 3; + string status = 4; + uint64 empty_timeout = 5; + string metadata = 6; + uint64 created_at = 7; +} + +message NatsKvUserInfo { + string user_id = 1; + string user_sid = 2; + string name = 3; + string room_id = 4; + bool is_admin = 5; + bool is_presenter = 6; + string metadata = 7; + uint64 joined_at = 8; + uint64 reconnected_at = 9; + uint64 disconnected_at = 10; +} + +message MediaServerConnInfo { + string url = 1; + string token = 2; + bool enabled_e2ee = 3; +} + +message NatsInitialData { + NatsKvRoomInfo room = 1; + NatsKvUserInfo local_user = 2; + MediaServerConnInfo media_server_info = 3; +} + +enum NatsSystemNotificationTypes { + NATS_SYSTEM_NOTIFICATION_INFO = 0; + NATS_SYSTEM_NOTIFICATION_WARNING = 1; + NATS_SYSTEM_NOTIFICATION_ERROR = 2; +} + +message NatsSystemNotification { + string id = 1; + NatsSystemNotificationTypes type = 2; + string msg = 3; + int64 sent_at = 4; + bool with_sound = 5; +} + +message NatsUserMetadataUpdate { + string user_id = 1; + string metadata = 2; +} + +message ChatMessage { + string id = 1; + string from_name = 2; + string from_user_id = 3; + int64 sent_at = 4; + optional string to_user_id = 5; + bool is_private = 6; + string message = 7; +}