From c189283793ad5dc3c9b6e12210f90f48b6ae5911 Mon Sep 17 00:00:00 2001 From: Stefano Scafiti Date: Tue, 23 Jul 2024 11:45:15 +0200 Subject: [PATCH] Implement SQL permissions Signed-off-by: Stefano Scafiti --- embedded/sql/dummy_data_source_test.go | 8 + embedded/sql/engine.go | 58 +- embedded/sql/engine_test.go | 144 +- embedded/sql/parser.go | 5 + embedded/sql/parser_test.go | 63 + embedded/sql/sql_grammar.y | 84 +- embedded/sql/sql_parser.go | 950 ++--- embedded/sql/stmt.go | 393 +- embedded/sql/stmt_test.go | 137 + pkg/api/schema/docs.md | 51 + pkg/api/schema/schema.pb.go | 4587 +++++++++++++----------- pkg/api/schema/schema.pb.gw.go | 81 + pkg/api/schema/schema.proto | 37 + pkg/api/schema/schema.swagger.json | 80 + pkg/api/schema/schema_grpc.pb.go | 36 + pkg/api/schema/sql.go | 41 + pkg/auth/user.go | 61 +- pkg/database/database_test.go | 26 + pkg/server/multidb_handler.go | 110 +- pkg/server/server_test.go | 4 +- pkg/server/servertest/server_mock.go | 4 + pkg/server/user.go | 233 +- pkg/server/user_test.go | 119 + 23 files changed, 4579 insertions(+), 2733 deletions(-) diff --git a/embedded/sql/dummy_data_source_test.go b/embedded/sql/dummy_data_source_test.go index 332c1fe036..cb37af3844 100644 --- a/embedded/sql/dummy_data_source_test.go +++ b/embedded/sql/dummy_data_source_test.go @@ -25,6 +25,14 @@ type dummyDataSource struct { AliasFunc func() string } +func (d *dummyDataSource) readOnly() bool { + return true +} + +func (d *dummyDataSource) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeSelect} +} + func (d *dummyDataSource) execAt(ctx context.Context, tx *SQLTx, params map[string]interface{}) (*SQLTx, error) { return tx, nil } diff --git a/embedded/sql/engine.go b/embedded/sql/engine.go index b7bd51e39d..882a8c7f2b 100644 --- a/embedded/sql/engine.go +++ b/embedded/sql/engine.go @@ -96,6 +96,7 @@ var ( ErrColumnMismatchInUnionStmt = errors.New("column mismatch in union statement") ErrCannotIndexJson = errors.New("cannot index column of type JSON") ErrInvalidTxMetadata = errors.New("invalid transaction metadata") + ErrAccessDenied = errors.New("access denied") ) var MaxKeyLen = 512 @@ -123,16 +124,20 @@ type MultiDBHandler interface { ListDatabases(ctx context.Context) ([]string, error) CreateDatabase(ctx context.Context, db string, ifNotExists bool) error UseDatabase(ctx context.Context, db string) error + GetLoggedUser(ctx context.Context) (User, error) ListUsers(ctx context.Context) ([]User, error) CreateUser(ctx context.Context, username, password string, permission Permission) error AlterUser(ctx context.Context, username, password string, permission Permission) error + GrantSQLPrivileges(ctx context.Context, database, username string, privileges []SQLPrivilege) error + RevokeSQLPrivileges(ctx context.Context, database, username string, privileges []SQLPrivilege) error DropUser(ctx context.Context, username string) error ExecPreparedStmts(ctx context.Context, opts *TxOptions, stmts []SQLStmt, params map[string]interface{}) (ntx *SQLTx, committedTxs []*SQLTx, err error) } type User interface { Username() string - Permission() uint32 + Permission() Permission + SQLPrivileges() []SQLPrivilege } func NewEngine(st *store.ImmuStore, opts *Options) (*Engine, error) { @@ -475,6 +480,13 @@ func (e *Engine) execPreparedStmts(ctx context.Context, tx *SQLTx, stmts []SQLSt } } + if e.multidbHandler != nil { + if err := e.checkUserPermissions(ctx, stmt); err != nil { + currTx.Cancel() + return nil, committedTxs, stmts[execStmts:], err + } + } + ntx, err := stmt.execAt(ctx, currTx, nparams) if err != nil { currTx.Cancel() @@ -517,6 +529,44 @@ func (e *Engine) execPreparedStmts(ctx context.Context, tx *SQLTx, stmts []SQLSt return currTx, committedTxs, stmts[execStmts:], nil } +func (e *Engine) checkUserPermissions(ctx context.Context, stmt SQLStmt) error { + user, err := e.multidbHandler.GetLoggedUser(ctx) + if err != nil { + return err + } + + if user.Permission() == PermissionAdmin { + return nil + } + + if !stmt.readOnly() && user.Permission() == PermissionReadOnly { + return ErrAccessDenied + } + + requiredPrivileges := stmt.requiredPrivileges() + if !hasAllPrivileges(user.SQLPrivileges(), requiredPrivileges) { + return fmt.Errorf("%w: statement requires %v privileges", ErrAccessDenied, requiredPrivileges) + } + return nil +} + +func hasAllPrivileges(userPrivileges, privileges []SQLPrivilege) bool { + for _, p := range privileges { + has := false + for _, up := range userPrivileges { + if up == p { + has = true + break + } + } + + if !has { + return false + } + } + return true +} + func (e *Engine) queryAll(ctx context.Context, tx *SQLTx, sql string, params map[string]interface{}) ([]*Row, error) { reader, err := e.Query(ctx, tx, sql, params) if err != nil { @@ -568,6 +618,12 @@ func (e *Engine) QueryPreparedStmt(ctx context.Context, tx *SQLTx, stmt DataSour return nil, err } + if e.multidbHandler != nil { + if err := e.checkUserPermissions(ctx, stmt); err != nil { + return nil, err + } + } + _, err = stmt.execAt(ctx, qtx, nparams) if err != nil { return nil, err diff --git a/embedded/sql/engine_test.go b/embedded/sql/engine_test.go index 2b47d77eb9..ee07507f6b 100644 --- a/embedded/sql/engine_test.go +++ b/embedded/sql/engine_test.go @@ -7089,7 +7089,12 @@ func TestMultiDBCatalogQueries(t *testing.T) { defer closeStore(t, st) dbs := []string{"db1", "db2"} - handler := &multidbHandlerMock{} + handler := &multidbHandlerMock{ + user: &mockUser{ + username: "user", + sqlPrivileges: allPrivileges, + }, + } opts := DefaultOptions(). WithPrefix(sqlPrefix). @@ -7130,6 +7135,13 @@ func TestMultiDBCatalogQueries(t *testing.T) { `, nil) require.ErrorIs(t, err, ErrNonTransactionalStmt) + _, _, err = engine.Exec(context.Background(), nil, ` + BEGIN TRANSACTION; + GRANT ALL PRIVILEGES ON DATABASE defaultdb TO USER myuser; + COMMIT; + `, nil) + require.ErrorIs(t, err, ErrNonTransactionalStmt) + _, _, err = engine.Exec(context.Background(), nil, "CREATE DATABASE db1", nil) require.ErrorIs(t, err, ErrNoSupported) @@ -7185,23 +7197,19 @@ func TestMultiDBCatalogQueries(t *testing.T) { }) t.Run("show users", func(t *testing.T) { - r, err := engine.Query(context.Background(), nil, "SHOW USERS", nil) + rows, err := engine.queryAll(context.Background(), nil, "SHOW USERS", nil) require.NoError(t, err) + require.Len(t, rows, 1) - defer r.Close() - - _, err = r.Read(context.Background()) - require.ErrorIs(t, err, ErrNoMoreRows) + require.Equal(t, "user", rows[0].ValuesByPosition[0].RawValue()) }) t.Run("list users", func(t *testing.T) { - r, err := engine.Query(context.Background(), nil, "SELECT * FROM USERS()", nil) + rows, err := engine.queryAll(context.Background(), nil, "SELECT * FROM USERS()", nil) require.NoError(t, err) + require.Len(t, rows, 1) - defer r.Close() - - _, err = r.Read(context.Background()) - require.ErrorIs(t, err, ErrNoMoreRows) + require.Equal(t, "user", rows[0].ValuesByPosition[0].RawValue()) }) t.Run("query databases using conditions with table and column aliasing", func(t *testing.T) { @@ -7225,8 +7233,27 @@ func TestMultiDBCatalogQueries(t *testing.T) { }) } +type mockUser struct { + username string + permission Permission + sqlPrivileges []SQLPrivilege +} + +func (u *mockUser) Username() string { + return u.username +} + +func (u *mockUser) Permission() Permission { + return u.permission +} + +func (u *mockUser) SQLPrivileges() []SQLPrivilege { + return u.sqlPrivileges +} + type multidbHandlerMock struct { dbs []string + user *mockUser engine *Engine } @@ -7238,12 +7265,27 @@ func (h *multidbHandlerMock) CreateDatabase(ctx context.Context, db string, ifNo return ErrNoSupported } +func (h *multidbHandlerMock) GrantSQLPrivileges(ctx context.Context, database, username string, privileges []SQLPrivilege) error { + return ErrNoSupported +} + +func (h *multidbHandlerMock) RevokeSQLPrivileges(ctx context.Context, database, username string, privileges []SQLPrivilege) error { + return ErrNoSupported +} + func (h *multidbHandlerMock) UseDatabase(ctx context.Context, db string) error { return nil } +func (h *multidbHandlerMock) GetLoggedUser(ctx context.Context) (User, error) { + if h.user == nil { + return nil, fmt.Errorf("no logged user") + } + return h.user, nil +} + func (h *multidbHandlerMock) ListUsers(ctx context.Context) ([]User, error) { - return nil, nil + return []User{h.user}, nil } func (h *multidbHandlerMock) CreateUser(ctx context.Context, username, password string, permission Permission) error { @@ -8728,3 +8770,81 @@ func TestQueryTxMetadata(t *testing.T) { ) require.ErrorIs(t, err, ErrInvalidTxMetadata) } + +func TestGrantSQLPrivileges(t *testing.T) { + st, err := store.Open(t.TempDir(), store.DefaultOptions().WithMultiIndexing(true)) + require.NoError(t, err) + defer closeStore(t, st) + + dbs := []string{"db1", "db2"} + handler := &multidbHandlerMock{ + dbs: dbs, + user: &mockUser{ + username: "myuser", + permission: PermissionReadOnly, + sqlPrivileges: []SQLPrivilege{SQLPrivilegeSelect}, + }, + } + + opts := DefaultOptions(). + WithPrefix(sqlPrefix). + WithMultiDBHandler(handler) + + engine, err := NewEngine(st, opts) + require.NoError(t, err) + + handler.dbs = dbs + handler.engine = engine + + tx, err := engine.NewTx(context.Background(), DefaultTxOptions()) + require.NoError(t, err) + + _, _, err = engine.Exec( + context.Background(), + tx, + "CREATE TABLE mytable(id INTEGER, PRIMARY KEY id);", + nil, + ) + require.ErrorIs(t, err, ErrAccessDenied) + + handler.user.sqlPrivileges = + append(handler.user.sqlPrivileges, SQLPrivilegeCreate) + + _, _, err = engine.Exec( + context.Background(), + tx, + "CREATE TABLE mytable(id INTEGER, PRIMARY KEY id);", + nil, + ) + require.ErrorIs(t, err, ErrAccessDenied) + + handler.user.permission = PermissionReadWrite + + _, _, err = engine.Exec( + context.Background(), + tx, + "CREATE TABLE mytable(id INTEGER, PRIMARY KEY id);", + nil, + ) + require.NoError(t, err) + + checkGrants := func(sql string) { + rows, err := engine.queryAll(context.Background(), nil, sql, nil) + require.NoError(t, err) + require.Len(t, rows, 2) + + usr := rows[0].ValuesByPosition[0].RawValue().(string) + privilege := rows[0].ValuesByPosition[1].RawValue().(string) + + require.Equal(t, usr, "myuser") + require.Equal(t, privilege, string(SQLPrivilegeSelect)) + + usr = rows[1].ValuesByPosition[0].RawValue().(string) + privilege = rows[1].ValuesByPosition[1].RawValue().(string) + require.Equal(t, usr, "myuser") + require.Equal(t, privilege, string(SQLPrivilegeCreate)) + } + + checkGrants("SHOW GRANTS") + checkGrants("SHOW GRANTS FOR myuser") +} diff --git a/embedded/sql/parser.go b/embedded/sql/parser.go index 046aeae282..14c0923e9b 100644 --- a/embedded/sql/parser.go +++ b/embedded/sql/parser.go @@ -102,6 +102,11 @@ var reservedWords = map[string]int{ "READ": READ, "READWRITE": READWRITE, "ADMIN": ADMIN, + "GRANT": GRANT, + "REVOKE": REVOKE, + "GRANTS": GRANTS, + "FOR": FOR, + "PRIVILEGES": PRIVILEGES, "CHECK": CHECK, "CONSTRAINT": CONSTRAINT, } diff --git a/embedded/sql/parser_test.go b/embedded/sql/parser_test.go index c18d83ac44..55b8b3da03 100644 --- a/embedded/sql/parser_test.go +++ b/embedded/sql/parser_test.go @@ -1729,6 +1729,69 @@ func TestFloatCornerCases(t *testing.T) { } } +func TestGrantRevokeStmt(t *testing.T) { + type test struct { + text string + expectedStmt SQLStmt + } + + cases := []test{ + { + text: "GRANT SELECT, INSERT, UPDATE, DELETE ON DATABASE defaultdb TO USER immudb", + expectedStmt: &AlterPrivilegesStmt{ + database: "defaultdb", + user: "immudb", + privileges: []SQLPrivilege{ + SQLPrivilegeDelete, + SQLPrivilegeUpdate, + SQLPrivilegeInsert, + SQLPrivilegeSelect, + }, + isGrant: true, + }, + }, + { + text: "REVOKE SELECT, INSERT, UPDATE, DELETE ON DATABASE defaultdb TO USER immudb", + expectedStmt: &AlterPrivilegesStmt{ + database: "defaultdb", + user: "immudb", + privileges: []SQLPrivilege{ + SQLPrivilegeDelete, + SQLPrivilegeUpdate, + SQLPrivilegeInsert, + SQLPrivilegeSelect, + }, + }, + }, + { + text: "GRANT ALL PRIVILEGES ON DATABASE defaultdb TO USER immudb", + expectedStmt: &AlterPrivilegesStmt{ + database: "defaultdb", + user: "immudb", + privileges: allPrivileges, + isGrant: true, + }, + }, + { + text: "REVOKE ALL PRIVILEGES ON DATABASE defaultdb TO USER immudb", + expectedStmt: &AlterPrivilegesStmt{ + database: "defaultdb", + user: "immudb", + privileges: allPrivileges, + }, + }, + } + + for i, tc := range cases { + t.Run(fmt.Sprintf("alter_privileges_%d", i), func(t *testing.T) { + stmts, err := ParseSQLString(tc.text) + require.NoError(t, err) + require.Len(t, stmts, 1) + require.Equal(t, tc.expectedStmt, stmts[0]) + }) + } +} + func TestExprString(t *testing.T) { exps := []string{ "(1 + 1) / (2 * 5 - 10)", diff --git a/embedded/sql/sql_grammar.y b/embedded/sql/sql_grammar.y index 34a731cf7c..60e7a14a80 100644 --- a/embedded/sql/sql_grammar.y +++ b/embedded/sql/sql_grammar.y @@ -70,10 +70,12 @@ func setResult(l yyLexer, stmts []SQLStmt) { updates []*colUpdate onConflict *OnConflictDo permission Permission + sqlPrivilege SQLPrivilege + sqlPrivileges []SQLPrivilege } %token CREATE DROP USE DATABASE USER WITH PASSWORD READ READWRITE ADMIN SNAPSHOT HISTORY SINCE AFTER BEFORE UNTIL TX OF TIMESTAMP -%token TABLE UNIQUE INDEX ON ALTER ADD RENAME TO COLUMN CONSTRAINT PRIMARY KEY CHECK +%token TABLE UNIQUE INDEX ON ALTER ADD RENAME TO COLUMN CONSTRAINT PRIMARY KEY CHECK GRANT REVOKE GRANTS FOR PRIVILEGES %token BEGIN TRANSACTION COMMIT ROLLBACK %token INSERT UPSERT INTO VALUES DELETE UPDATE SET CONFLICT DO NOTHING %token SELECT DISTINCT FROM JOIN HAVING WHERE GROUP BY LIMIT OFFSET ORDER ASC DESC AS UNION ALL @@ -148,6 +150,8 @@ func setResult(l yyLexer, stmts []SQLStmt) { %type updates %type opt_on_conflict %type permission +%type sqlPrivilege +%type sqlPrivileges %start sql @@ -157,7 +161,7 @@ sql: sqlstmts { $$ = $1 setResult(yylex, $1) - } + } sqlstmts: sqlstmt opt_separator @@ -284,6 +288,68 @@ ddlstmt: { $$ = &DropUserStmt{username: $3} } +| + GRANT sqlPrivileges ON DATABASE IDENTIFIER TO USER IDENTIFIER + { + $$ = &AlterPrivilegesStmt{database: $5, user: $8, privileges: $2, isGrant: true} + } +| + REVOKE sqlPrivileges ON DATABASE IDENTIFIER TO USER IDENTIFIER + { + $$ = &AlterPrivilegesStmt{database: $5, user: $8, privileges: $2} + } + +sqlPrivileges: + ALL PRIVILEGES + { + $$ = allPrivileges + } +| + sqlPrivilege + { + $$ = []SQLPrivilege{$1} + } +| + sqlPrivilege ',' sqlPrivileges + { + $$ = append($3, $1) + } + +sqlPrivilege: + SELECT + { + $$ = SQLPrivilegeSelect + } +| + CREATE + { + $$ = SQLPrivilegeCreate + } +| + INSERT + { + $$ = SQLPrivilegeInsert + } +| + UPDATE + { + $$ = SQLPrivilegeUpdate + } +| + DELETE + { + $$ = SQLPrivilegeDelete + } +| + DROP + { + $$ = SQLPrivilegeDrop + } +| + ALTER + { + $$ = SQLPrivilegeAlter + } permission: { @@ -600,6 +666,20 @@ dqlstmt: ds: &FnDataSourceStmt{fnCall: &FnCall{fn: "users"}}, } } +| + SHOW GRANTS + { + $$ = &SelectStmt{ + ds: &FnDataSourceStmt{fnCall: &FnCall{fn: "grants"}}, + } + } +| + SHOW GRANTS FOR IDENTIFIER + { + $$ = &SelectStmt{ + ds: &FnDataSourceStmt{fnCall: &FnCall{fn: "grants", params: []ValueExp{&Varchar{val: $4}}}}, + } + } select_stmt: SELECT opt_distinct opt_selectors FROM ds opt_indexon opt_joins opt_where opt_groupby opt_having opt_orderby opt_limit opt_offset { diff --git a/embedded/sql/sql_parser.go b/embedded/sql/sql_parser.go index b70588c9fc..ec706c2cf8 100644 --- a/embedded/sql/sql_parser.go +++ b/embedded/sql/sql_parser.go @@ -56,6 +56,8 @@ type yySymType struct { updates []*colUpdate onConflict *OnConflictDo permission Permission + sqlPrivilege SQLPrivilege + sqlPrivileges []SQLPrivilege } const CREATE = 57346 @@ -90,67 +92,72 @@ const CONSTRAINT = 57374 const PRIMARY = 57375 const KEY = 57376 const CHECK = 57377 -const BEGIN = 57378 -const TRANSACTION = 57379 -const COMMIT = 57380 -const ROLLBACK = 57381 -const INSERT = 57382 -const UPSERT = 57383 -const INTO = 57384 -const VALUES = 57385 -const DELETE = 57386 -const UPDATE = 57387 -const SET = 57388 -const CONFLICT = 57389 -const DO = 57390 -const NOTHING = 57391 -const SELECT = 57392 -const DISTINCT = 57393 -const FROM = 57394 -const JOIN = 57395 -const HAVING = 57396 -const WHERE = 57397 -const GROUP = 57398 -const BY = 57399 -const LIMIT = 57400 -const OFFSET = 57401 -const ORDER = 57402 -const ASC = 57403 -const DESC = 57404 -const AS = 57405 -const UNION = 57406 -const ALL = 57407 -const NOT = 57408 -const LIKE = 57409 -const IF = 57410 -const EXISTS = 57411 -const IN = 57412 -const IS = 57413 -const AUTO_INCREMENT = 57414 -const NULL = 57415 -const CAST = 57416 -const SCAST = 57417 -const SHOW = 57418 -const DATABASES = 57419 -const TABLES = 57420 -const USERS = 57421 -const NPARAM = 57422 -const PPARAM = 57423 -const JOINTYPE = 57424 -const LOP = 57425 -const CMPOP = 57426 -const IDENTIFIER = 57427 -const TYPE = 57428 -const INTEGER = 57429 -const FLOAT = 57430 -const VARCHAR = 57431 -const BOOLEAN = 57432 -const BLOB = 57433 -const AGGREGATE_FUNC = 57434 -const ERROR = 57435 -const DOT = 57436 -const ARROW = 57437 -const STMT_SEPARATOR = 57438 +const GRANT = 57378 +const REVOKE = 57379 +const GRANTS = 57380 +const FOR = 57381 +const PRIVILEGES = 57382 +const BEGIN = 57383 +const TRANSACTION = 57384 +const COMMIT = 57385 +const ROLLBACK = 57386 +const INSERT = 57387 +const UPSERT = 57388 +const INTO = 57389 +const VALUES = 57390 +const DELETE = 57391 +const UPDATE = 57392 +const SET = 57393 +const CONFLICT = 57394 +const DO = 57395 +const NOTHING = 57396 +const SELECT = 57397 +const DISTINCT = 57398 +const FROM = 57399 +const JOIN = 57400 +const HAVING = 57401 +const WHERE = 57402 +const GROUP = 57403 +const BY = 57404 +const LIMIT = 57405 +const OFFSET = 57406 +const ORDER = 57407 +const ASC = 57408 +const DESC = 57409 +const AS = 57410 +const UNION = 57411 +const ALL = 57412 +const NOT = 57413 +const LIKE = 57414 +const IF = 57415 +const EXISTS = 57416 +const IN = 57417 +const IS = 57418 +const AUTO_INCREMENT = 57419 +const NULL = 57420 +const CAST = 57421 +const SCAST = 57422 +const SHOW = 57423 +const DATABASES = 57424 +const TABLES = 57425 +const USERS = 57426 +const NPARAM = 57427 +const PPARAM = 57428 +const JOINTYPE = 57429 +const LOP = 57430 +const CMPOP = 57431 +const IDENTIFIER = 57432 +const TYPE = 57433 +const INTEGER = 57434 +const FLOAT = 57435 +const VARCHAR = 57436 +const BOOLEAN = 57437 +const BLOB = 57438 +const AGGREGATE_FUNC = 57439 +const ERROR = 57440 +const DOT = 57441 +const ARROW = 57442 +const STMT_SEPARATOR = 57443 var yyToknames = [...]string{ "$end", @@ -188,6 +195,11 @@ var yyToknames = [...]string{ "PRIMARY", "KEY", "CHECK", + "GRANT", + "REVOKE", + "GRANTS", + "FOR", + "PRIVILEGES", "BEGIN", "TRANSACTION", "COMMIT", @@ -271,250 +283,266 @@ var yyExca = [...]int16{ -1, 1, 1, -1, -2, 0, - -1, 93, - 67, 168, - 70, 168, - -2, 156, - -1, 233, - 53, 129, - -2, 124, - -1, 274, - 53, 129, - -2, 126, + -1, 112, + 72, 182, + 75, 182, + -2, 170, + -1, 260, + 58, 143, + -2, 138, + -1, 303, + 58, 143, + -2, 140, } const yyPrivate = 57344 -const yyLast = 481 +const yyLast = 512 var yyAct = [...]int16{ - 92, 377, 98, 78, 267, 172, 227, 129, 284, 299, - 303, 107, 178, 169, 214, 273, 298, 215, 6, 121, - 195, 250, 57, 124, 343, 20, 290, 183, 289, 225, - 260, 225, 225, 364, 225, 225, 304, 348, 326, 324, - 291, 95, 261, 226, 97, 347, 344, 336, 110, 106, - 77, 19, 327, 325, 305, 108, 109, 91, 150, 314, - 111, 283, 101, 102, 103, 104, 105, 79, 281, 280, - 148, 149, 278, 96, 259, 257, 245, 244, 100, 135, - 224, 181, 182, 184, 144, 145, 147, 146, 159, 186, - 126, 212, 143, 300, 256, 249, 154, 155, 159, 240, - 239, 157, 238, 95, 237, 197, 97, 180, 160, 158, - 110, 106, 156, 137, 134, 120, 119, 108, 109, 22, - 376, 369, 111, 174, 101, 102, 103, 104, 105, 79, - 122, 187, 329, 189, 171, 96, 150, 80, 192, 185, - 100, 150, 260, 175, 150, 200, 201, 202, 203, 204, - 205, 191, 330, 148, 149, 246, 225, 128, 133, 213, - 216, 135, 144, 145, 147, 146, 365, 144, 145, 147, - 146, 176, 147, 146, 217, 211, 114, 243, 232, 80, - 80, 230, 95, 218, 233, 97, 79, 79, 223, 110, - 106, 199, 190, 241, 75, 242, 108, 109, 323, 235, - 231, 111, 234, 101, 102, 103, 104, 105, 79, 255, - 90, 248, 322, 287, 96, 295, 286, 247, 258, 100, - 210, 150, 329, 80, 30, 62, 150, 170, 318, 269, - 311, 31, 297, 148, 149, 177, 131, 271, 148, 149, - 342, 282, 277, 265, 125, 263, 338, 144, 145, 147, - 146, 222, 144, 145, 147, 146, 221, 216, 130, 220, - 219, 296, 196, 292, 198, 193, 196, 285, 150, 302, - 188, 112, 161, 138, 294, 293, 306, 113, 83, 81, - 148, 149, 276, 301, 63, 150, 310, 317, 312, 313, - 308, 315, 307, 73, 144, 145, 147, 146, 149, 141, - 142, 216, 29, 41, 66, 65, 64, 61, 56, 55, - 20, 144, 145, 147, 146, 331, 153, 254, 341, 332, - 321, 185, 335, 207, 236, 152, 150, 320, 208, 72, - 206, 209, 136, 51, 82, 42, 19, 378, 379, 345, - 356, 352, 359, 268, 353, 45, 228, 355, 354, 368, - 351, 360, 10, 12, 11, 362, 334, 122, 350, 20, - 309, 366, 127, 39, 370, 367, 48, 357, 50, 266, - 346, 374, 372, 375, 371, 13, 70, 264, 179, 380, - 38, 37, 381, 23, 7, 19, 8, 9, 14, 15, - 339, 337, 16, 17, 52, 53, 40, 316, 20, 43, - 44, 46, 287, 165, 166, 286, 163, 164, 162, 117, - 262, 363, 24, 28, 270, 139, 67, 68, 69, 34, - 84, 229, 54, 85, 19, 36, 2, 279, 25, 27, - 26, 167, 115, 116, 32, 118, 33, 89, 88, 140, - 35, 59, 60, 251, 252, 253, 86, 173, 21, 49, - 328, 123, 151, 319, 340, 358, 373, 288, 333, 94, - 93, 349, 275, 274, 272, 87, 58, 71, 47, 132, - 76, 74, 99, 361, 168, 194, 18, 5, 4, 3, - 1, + 111, 408, 117, 97, 296, 197, 254, 152, 313, 330, + 334, 126, 203, 194, 239, 302, 329, 240, 6, 143, + 71, 220, 277, 374, 146, 319, 110, 318, 22, 252, + 287, 252, 109, 252, 252, 252, 395, 379, 357, 355, + 378, 320, 288, 253, 114, 208, 375, 116, 367, 358, + 356, 129, 125, 335, 21, 345, 312, 310, 127, 128, + 173, 309, 307, 130, 96, 120, 121, 122, 123, 124, + 98, 336, 171, 172, 286, 284, 115, 114, 272, 271, + 116, 119, 24, 251, 129, 125, 167, 168, 170, 169, + 331, 127, 128, 237, 283, 276, 130, 182, 120, 121, + 122, 123, 124, 98, 206, 207, 209, 131, 148, 115, + 114, 166, 211, 116, 119, 177, 178, 129, 125, 158, + 180, 267, 266, 265, 127, 128, 264, 222, 182, 130, + 205, 120, 121, 122, 123, 124, 98, 183, 181, 179, + 164, 165, 115, 160, 157, 199, 142, 119, 141, 144, + 407, 173, 361, 99, 212, 400, 196, 173, 360, 287, + 98, 217, 210, 171, 172, 200, 173, 94, 225, 226, + 227, 228, 229, 230, 99, 273, 396, 167, 168, 170, + 169, 252, 238, 241, 151, 170, 169, 173, 216, 83, + 201, 214, 167, 168, 170, 169, 156, 242, 236, 171, + 172, 158, 133, 259, 270, 354, 257, 243, 248, 260, + 99, 285, 369, 167, 168, 170, 169, 98, 268, 173, + 269, 224, 215, 353, 262, 261, 258, 360, 154, 324, + 32, 171, 172, 274, 282, 316, 275, 33, 315, 173, + 235, 99, 76, 195, 349, 167, 168, 170, 169, 173, + 153, 171, 172, 305, 342, 328, 298, 327, 326, 311, + 294, 147, 172, 202, 300, 167, 168, 170, 169, 306, + 247, 290, 246, 245, 244, 167, 168, 170, 169, 221, + 223, 218, 213, 192, 241, 191, 184, 161, 325, 149, + 321, 132, 102, 221, 100, 314, 91, 54, 333, 80, + 79, 323, 322, 78, 75, 337, 77, 70, 69, 39, + 22, 263, 332, 31, 373, 341, 348, 343, 344, 339, + 346, 338, 10, 12, 11, 49, 281, 352, 58, 176, + 232, 372, 241, 173, 351, 159, 21, 231, 175, 233, + 101, 65, 234, 60, 90, 13, 362, 55, 409, 410, + 363, 22, 210, 366, 14, 15, 390, 297, 255, 7, + 399, 8, 9, 16, 17, 382, 144, 18, 19, 64, + 376, 387, 383, 22, 365, 384, 381, 21, 386, 385, + 340, 150, 391, 43, 47, 52, 393, 56, 57, 59, + 62, 204, 397, 139, 388, 401, 398, 66, 67, 21, + 377, 88, 405, 403, 406, 402, 48, 295, 293, 51, + 411, 53, 50, 412, 25, 82, 92, 316, 370, 347, + 315, 368, 188, 189, 44, 186, 187, 185, 46, 45, + 136, 289, 250, 249, 42, 36, 394, 299, 104, 26, + 30, 162, 85, 86, 87, 103, 84, 81, 256, 40, + 34, 68, 35, 134, 135, 27, 29, 28, 2, 38, + 308, 108, 107, 73, 74, 278, 279, 280, 190, 163, + 137, 105, 292, 291, 37, 140, 138, 198, 23, 41, + 359, 145, 174, 63, 350, 371, 389, 404, 317, 364, + 113, 112, 380, 304, 303, 301, 106, 72, 89, 61, + 155, 95, 93, 118, 392, 193, 219, 20, 5, 4, + 3, 1, } var yyPact = [...]int16{ - 348, -1000, -1000, 17, -1000, -1000, -1000, 346, -1000, -1000, - 405, 217, 411, 417, 339, 338, 311, 218, 271, 322, - 315, -1000, 348, -1000, 265, 265, 265, 397, 224, -1000, - 223, 425, 222, 199, 221, 220, 219, 218, 218, 218, - 330, -1000, 264, -1000, -1000, 208, -1000, 95, -1000, -1000, - 194, 268, 193, 394, 265, 437, -1000, -1000, 419, 37, - 37, -1000, 192, 82, -1000, 404, 426, 13, 12, 302, - 159, 260, -1000, -1000, 310, -1000, 61, 173, 63, 11, - 67, -1000, 263, 10, 188, 389, 429, -1000, 37, 37, - -1000, 116, 197, 250, -1000, 116, 116, 9, -1000, -1000, - 116, -1000, -1000, -1000, -1000, -1000, 6, -1000, -1000, -1000, - -1000, -15, -1000, 5, 187, 377, 376, 372, 421, 142, - 142, 441, 116, 75, -1000, 151, -1000, 4, 94, -1000, - -1000, 185, 38, 103, 52, 180, -1000, 177, 2, 179, - 102, -1000, -1000, 197, 116, 116, 116, 116, 116, 116, - 257, 261, 134, -1000, 214, 73, 260, -13, 116, 116, - 142, -1000, 177, 175, 174, 171, 166, 99, -24, 60, - -1000, -61, 288, 396, 197, 441, 159, 116, 441, 425, - 309, 1, -1, -3, -4, 173, -5, 173, -1000, 88, - -1000, -27, -28, -1000, 59, -1000, 131, 142, -8, 432, - 73, 73, 255, 255, 214, 65, -1000, 244, 116, -9, - -1000, -29, -1000, 155, -30, 46, 197, -62, -1000, -1000, - 380, -1000, -1000, 432, 334, 158, 326, 284, 116, 388, - 288, -1000, 197, 200, 173, -32, 406, -35, -36, 156, - -43, -1000, -1000, -1000, -1000, -1000, 181, -77, -64, 142, - -1000, -1000, -1000, -1000, -1000, 214, -25, -1000, 129, -1000, - 116, -1000, 147, -1000, -10, -1000, -10, -1000, 116, 197, - -49, 284, 302, -1000, 200, 307, -1000, -1000, 173, 145, - 173, 173, -45, 173, 364, -1000, 116, 143, 254, 125, - 111, -1000, -65, -51, -66, -52, 197, -1000, 126, -1000, - 116, 36, 197, -1000, -1000, 142, -1000, 300, -1000, 4, - -1000, -57, -1000, -1000, -1000, -1000, 357, 150, 355, 246, - -1000, 167, -82, -58, -1000, -1000, -1000, -1000, -1000, -10, - 323, -59, -67, 304, 293, 441, 173, -49, 370, 116, - -1000, -1000, -1000, -1000, -1000, -1000, 319, -1000, -1000, 282, - 116, 138, 385, -1000, -71, -1000, 70, 312, 288, 292, - 197, 25, -1000, 116, -1000, 370, -1000, 284, 94, 138, - 197, -1000, -1000, 24, 276, -1000, 94, -1000, -1000, -1000, - 276, -1000, + 318, -1000, -1000, -25, -1000, -1000, -1000, 372, -1000, -1000, + 432, 223, 427, 451, 379, 379, 365, 362, 328, 207, + 278, 305, 334, -1000, 318, -1000, 268, 268, 268, 426, + 218, -1000, 217, 447, 214, 216, 213, 210, 209, 421, + 375, 88, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 420, + 207, 207, 207, 350, -1000, 274, -1000, -1000, 206, -1000, + 377, 63, -1000, -1000, 204, 269, 202, 419, 268, 462, + -1000, -1000, 443, 6, 6, -1000, 201, 103, -1000, 425, + 461, 469, -1000, 379, 468, 40, 38, 306, 171, 255, + -1000, -1000, 199, 324, -1000, 83, 160, 96, 36, 102, + -1000, 261, 35, 197, 415, 459, -1000, 6, 6, -1000, + 39, 163, 258, -1000, 39, 39, 31, -1000, -1000, 39, + -1000, -1000, -1000, -1000, -1000, 30, -1000, -1000, -1000, -1000, + 20, -1000, 29, 196, 396, 395, 391, 458, 195, -1000, + 193, 153, 153, 471, 39, 89, -1000, 174, -1000, -1000, + 22, 120, -1000, -1000, 192, 91, 128, 84, 191, -1000, + 189, 19, 190, 127, -1000, -1000, 163, 39, 39, 39, + 39, 39, 39, 259, 267, 149, -1000, 173, 81, 255, + -16, 39, 39, 153, -1000, 189, 184, 183, 182, 180, + 114, 403, 402, -26, 80, -1000, -66, 295, 423, 163, + 471, 171, 39, 471, 447, 296, 18, 15, 14, 13, + 160, -11, 160, -1000, 110, -1000, -30, -31, -1000, 74, + -1000, 142, 153, -13, 454, 81, 81, 257, 257, 173, + 90, -1000, 248, 39, -14, -1000, -34, -1000, 143, -35, + 58, 163, -67, -1000, -1000, 401, -1000, -1000, 454, 465, + 464, 360, 170, 359, 293, 39, 411, 295, -1000, 163, + 166, 160, -47, 439, -48, -52, 169, -53, -1000, -1000, + -1000, -1000, -1000, 203, -83, -68, 153, -1000, -1000, -1000, + -1000, -1000, 173, -27, -1000, 138, -1000, 39, -1000, 168, + -1000, 167, 165, -18, -1000, -18, -1000, 39, 163, -37, + 293, 306, -1000, 166, 322, -1000, -1000, 160, 164, 160, + 160, -54, 160, 386, -1000, 39, 154, 256, 131, 113, + -1000, -70, -59, -71, -60, 163, -1000, -1000, -1000, 126, + -1000, 39, 57, 163, -1000, -1000, 153, -1000, 313, -1000, + 22, -1000, -61, -1000, -1000, -1000, -1000, 387, 111, 383, + 254, -1000, 236, -88, -63, -1000, -1000, -1000, -1000, -1000, + -18, 348, -69, -72, 317, 303, 471, 160, -37, 385, + 39, -1000, -1000, -1000, -1000, -1000, -1000, 341, -1000, -1000, + 291, 39, 151, 410, -1000, -73, -1000, 75, 338, 295, + 298, 163, 54, -1000, 39, -1000, 385, -1000, 293, 120, + 151, 163, -1000, -1000, 49, 282, -1000, 120, -1000, -1000, + -1000, 282, -1000, } var yyPgo = [...]int16{ - 0, 480, 426, 479, 478, 477, 18, 476, 475, 20, - 13, 10, 474, 473, 16, 9, 17, 14, 472, 11, - 2, 471, 470, 469, 3, 468, 467, 12, 378, 22, - 466, 465, 210, 464, 15, 463, 462, 8, 0, 19, - 461, 460, 459, 458, 6, 4, 457, 7, 456, 455, - 1, 5, 368, 454, 453, 452, 23, 451, 450, 21, - 448, + 0, 511, 458, 510, 509, 508, 18, 507, 506, 21, + 13, 10, 505, 504, 16, 9, 17, 14, 503, 11, + 2, 502, 501, 500, 3, 499, 498, 12, 391, 20, + 497, 496, 32, 495, 15, 494, 493, 8, 0, 19, + 492, 491, 490, 489, 6, 4, 488, 7, 487, 486, + 1, 5, 369, 485, 484, 482, 24, 481, 480, 22, + 479, 309, 478, } var yyR1 = [...]int8{ - 0, 1, 2, 2, 60, 60, 3, 3, 3, 4, + 0, 1, 2, 2, 62, 62, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 59, 59, 59, 59, 52, 52, 11, 11, 5, - 5, 5, 5, 58, 58, 57, 57, 56, 12, 12, - 14, 14, 15, 10, 10, 13, 13, 17, 17, 16, - 16, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 19, 8, 8, 9, 46, 46, 46, 53, 53, - 54, 54, 54, 6, 6, 6, 6, 6, 6, 7, - 26, 26, 25, 25, 21, 21, 22, 22, 20, 20, - 20, 20, 23, 23, 24, 24, 27, 27, 27, 27, - 27, 27, 27, 27, 28, 29, 30, 30, 30, 31, - 31, 31, 32, 32, 33, 33, 34, 34, 35, 36, - 36, 39, 39, 43, 43, 40, 40, 44, 44, 45, - 45, 49, 49, 51, 51, 48, 48, 50, 50, 50, - 47, 47, 47, 37, 37, 37, 38, 38, 38, 38, - 38, 38, 38, 38, 41, 41, 41, 41, 55, 55, - 42, 42, 42, 42, 42, 42, 42, 42, + 4, 4, 4, 61, 61, 61, 60, 60, 60, 60, + 60, 60, 60, 59, 59, 59, 59, 52, 52, 11, + 11, 5, 5, 5, 5, 58, 58, 57, 57, 56, + 12, 12, 14, 14, 15, 10, 10, 13, 13, 17, + 17, 16, 16, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 19, 8, 8, 9, 46, 46, 46, + 53, 53, 54, 54, 54, 6, 6, 6, 6, 6, + 6, 6, 6, 7, 26, 26, 25, 25, 21, 21, + 22, 22, 20, 20, 20, 20, 23, 23, 24, 24, + 27, 27, 27, 27, 27, 27, 27, 27, 28, 29, + 30, 30, 30, 31, 31, 31, 32, 32, 33, 33, + 34, 34, 35, 36, 36, 39, 39, 43, 43, 40, + 40, 44, 44, 45, 45, 49, 49, 51, 51, 48, + 48, 50, 50, 50, 47, 47, 47, 37, 37, 37, + 38, 38, 38, 38, 38, 38, 38, 38, 41, 41, + 41, 41, 55, 55, 42, 42, 42, 42, 42, 42, + 42, 42, } var yyR2 = [...]int8{ 0, 1, 2, 3, 0, 1, 1, 1, 1, 2, 1, 1, 1, 4, 2, 3, 3, 12, 3, 8, 9, 7, 5, 6, 6, 8, 6, 6, 7, 7, - 3, 0, 1, 1, 1, 0, 3, 1, 3, 9, - 8, 7, 8, 0, 4, 1, 3, 3, 0, 1, - 1, 3, 3, 1, 3, 1, 3, 0, 1, 1, - 3, 1, 1, 1, 1, 1, 6, 1, 1, 1, - 1, 4, 1, 3, 5, 0, 3, 3, 0, 1, - 0, 1, 2, 1, 4, 2, 2, 3, 2, 13, - 0, 1, 0, 1, 1, 1, 2, 4, 1, 2, - 4, 4, 2, 3, 1, 3, 3, 4, 4, 4, - 4, 4, 2, 6, 1, 2, 0, 2, 2, 0, - 2, 2, 2, 1, 0, 1, 1, 2, 6, 0, - 1, 0, 2, 0, 3, 0, 2, 0, 2, 0, - 2, 0, 3, 0, 4, 2, 4, 0, 1, 1, - 0, 1, 2, 0, 4, 6, 1, 1, 2, 2, - 4, 4, 6, 6, 1, 1, 3, 3, 0, 1, - 3, 3, 3, 3, 3, 3, 3, 4, + 3, 8, 8, 2, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 0, 1, 1, 1, 0, 3, 1, + 3, 9, 8, 7, 8, 0, 4, 1, 3, 3, + 0, 1, 1, 3, 3, 1, 3, 1, 3, 0, + 1, 1, 3, 1, 1, 1, 1, 1, 6, 1, + 1, 1, 1, 4, 1, 3, 5, 0, 3, 3, + 0, 1, 0, 1, 2, 1, 4, 2, 2, 3, + 2, 2, 4, 13, 0, 1, 0, 1, 1, 1, + 2, 4, 1, 2, 4, 4, 2, 3, 1, 3, + 3, 4, 4, 4, 4, 4, 2, 6, 1, 2, + 0, 2, 2, 0, 2, 2, 2, 1, 0, 1, + 1, 2, 6, 0, 1, 0, 2, 0, 3, 0, + 2, 0, 2, 0, 2, 0, 3, 0, 4, 2, + 4, 0, 1, 1, 0, 1, 2, 0, 4, 6, + 1, 1, 2, 2, 4, 4, 6, 6, 1, 1, + 3, 3, 0, 1, 3, 3, 3, 3, 3, 3, + 3, 4, } var yyChk = [...]int16{ - -1000, -1, -2, -3, -4, -5, -6, 36, 38, 39, - 4, 6, 5, 27, 40, 41, 44, 45, -7, 76, - 50, -60, 102, 37, 7, 23, 25, 24, 8, 85, - 7, 14, 23, 25, 8, 23, 8, 42, 42, 52, - -28, 85, 64, 77, 78, 23, 79, -25, 51, -2, - -52, 68, -52, -52, 25, 85, 85, -29, -30, 16, - 17, 85, 26, 85, 85, 85, 85, -28, -28, -28, - 46, -26, 65, 85, -21, 99, -22, -20, -24, 92, - 85, 85, 66, 85, 26, -52, 9, -31, 19, 18, - -32, 20, -38, -41, -42, 66, 98, 69, -20, -18, - 103, 87, 88, 89, 90, 91, 74, -19, 80, 81, - 73, 85, -32, 85, 94, 28, 29, 5, 9, 103, - 103, -39, 55, -57, -56, 85, -6, 52, 96, -47, - 85, 63, -23, 95, 103, 94, 69, 103, 85, 26, - 10, -32, -32, -38, 97, 98, 100, 99, 83, 84, - 71, -55, 75, 66, -38, -38, 103, -38, 103, 103, - 103, 85, 31, 30, 31, 31, 32, 10, -12, -10, - 85, -10, -51, 6, -38, -39, 96, 84, -27, -28, - 103, 77, 78, 23, 79, -19, 85, -20, 85, 95, - 89, 99, -24, 85, -8, -9, 85, 103, 85, 89, - -38, -38, -38, -38, -38, -38, 73, 66, 67, 70, - 86, -6, 104, -38, -17, -16, -38, -10, -9, 85, - 85, 85, 85, 89, 104, 96, 104, -44, 58, 25, - -51, -56, -38, -51, -29, -6, 15, 103, 103, 103, - 103, -47, -47, 89, 104, 104, 96, 86, -10, 103, - -59, 11, 12, 13, 73, -38, 103, 104, 63, 104, - 96, 104, 30, -59, 43, 85, 43, -45, 59, -38, - 26, -44, -33, -34, -35, -36, 82, -47, 104, 21, - 104, 104, 85, 104, -37, -9, 35, 32, -46, 105, - 103, 104, -10, -6, -16, 86, -38, 85, -14, -15, - 103, -14, -38, -11, 85, 103, -45, -39, -34, 53, - -47, 85, -47, -47, 104, -47, 33, -38, 85, -54, - 73, 66, 87, 87, 104, 104, 104, 104, -58, 96, - 26, -17, -10, -43, 56, -27, 104, 34, 96, 35, - -53, 72, 73, 106, 104, -15, 47, 104, 104, -40, - 54, 57, -51, -47, -11, -37, -38, 48, -49, 60, - -38, -13, -24, 26, 104, 96, 49, -44, 57, 96, - -38, -37, -45, -48, -20, -24, 96, -50, 61, 62, - -20, -50, + -1000, -1, -2, -3, -4, -5, -6, 41, 43, 44, + 4, 6, 5, 27, 36, 37, 45, 46, 49, 50, + -7, 81, 55, -62, 107, 42, 7, 23, 25, 24, + 8, 90, 7, 14, 23, 25, 8, 23, 8, -61, + 70, -60, 55, 4, 45, 50, 49, 5, 27, -61, + 47, 47, 57, -28, 90, 69, 82, 83, 23, 84, + 38, -25, 56, -2, -52, 73, -52, -52, 25, 90, + 90, -29, -30, 16, 17, 90, 26, 90, 90, 90, + 90, 26, 40, 101, 26, -28, -28, -28, 51, -26, + 70, 90, 39, -21, 104, -22, -20, -24, 97, 90, + 90, 71, 90, 26, -52, 9, -31, 19, 18, -32, + 20, -38, -41, -42, 71, 103, 74, -20, -18, 108, + 92, 93, 94, 95, 96, 79, -19, 85, 86, 78, + 90, -32, 90, 99, 28, 29, 5, 9, 7, -61, + 7, 108, 108, -39, 60, -57, -56, 90, -6, 90, + 57, 101, -47, 90, 68, -23, 100, 108, 99, 74, + 108, 90, 26, 10, -32, -32, -38, 102, 103, 105, + 104, 88, 89, 76, -55, 80, 71, -38, -38, 108, + -38, 108, 108, 108, 90, 31, 30, 31, 31, 32, + 10, 90, 90, -12, -10, 90, -10, -51, 6, -38, + -39, 101, 89, -27, -28, 108, 82, 83, 23, 84, + -19, 90, -20, 90, 100, 94, 104, -24, 90, -8, + -9, 90, 108, 90, 94, -38, -38, -38, -38, -38, + -38, 78, 71, 72, 75, 91, -6, 109, -38, -17, + -16, -38, -10, -9, 90, 90, 90, 90, 94, 30, + 30, 109, 101, 109, -44, 63, 25, -51, -56, -38, + -51, -29, -6, 15, 108, 108, 108, 108, -47, -47, + 94, 109, 109, 101, 91, -10, 108, -59, 11, 12, + 13, 78, -38, 108, 109, 68, 109, 101, 109, 30, + -59, 8, 8, 48, 90, 48, -45, 64, -38, 26, + -44, -33, -34, -35, -36, 87, -47, 109, 21, 109, + 109, 90, 109, -37, -9, 35, 32, -46, 110, 108, + 109, -10, -6, -16, 91, -38, 90, 90, 90, -14, + -15, 108, -14, -38, -11, 90, 108, -45, -39, -34, + 58, -47, 90, -47, -47, 109, -47, 33, -38, 90, + -54, 78, 71, 92, 92, 109, 109, 109, 109, -58, + 101, 26, -17, -10, -43, 61, -27, 109, 34, 101, + 35, -53, 77, 78, 111, 109, -15, 52, 109, 109, + -40, 59, 62, -51, -47, -11, -37, -38, 53, -49, + 65, -38, -13, -24, 26, 109, 101, 54, -44, 62, + 101, -38, -37, -45, -48, -20, -24, 101, -50, 66, + 67, -20, -50, } var yyDef = [...]int16{ 0, -2, 1, 4, 6, 7, 8, 10, 11, 12, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, - 92, 2, 5, 9, 35, 35, 35, 0, 0, 14, - 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 114, 90, 85, 86, 0, 88, 0, 93, 3, - 0, 0, 0, 0, 35, 0, 15, 16, 119, 0, - 0, 18, 0, 0, 30, 0, 0, 0, 0, 131, - 0, 0, 91, 87, 0, 94, 95, 150, 98, 0, - 104, 13, 0, 0, 0, 0, 0, 115, 0, 0, - 117, 0, 123, -2, 157, 0, 0, 0, 164, 165, - 0, 61, 62, 63, 64, 65, 0, 67, 68, 69, - 70, 104, 118, 0, 0, 0, 0, 0, 0, 48, - 0, 143, 0, 131, 45, 0, 84, 0, 0, 96, - 151, 0, 99, 0, 0, 0, 36, 0, 0, 0, - 0, 120, 121, 122, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 169, 158, 159, 0, 0, 0, 57, - 0, 22, 0, 0, 0, 0, 0, 0, 0, 49, - 53, 0, 137, 0, 132, 143, 0, 0, 143, 116, - 0, 0, 0, 0, 0, 150, 114, 150, 152, 0, - 102, 0, 0, 105, 0, 72, 0, 0, 0, 31, - 170, 171, 172, 173, 174, 175, 176, 0, 0, 0, - 167, 0, 166, 0, 0, 58, 59, 0, 23, 24, - 0, 26, 27, 31, 0, 0, 0, 139, 0, 0, - 137, 46, 47, -2, 150, 0, 0, 0, 0, 0, - 0, 112, 97, 103, 100, 101, 153, 75, 0, 0, - 28, 32, 33, 34, 177, 160, 0, 161, 0, 71, - 0, 21, 0, 29, 0, 54, 0, 41, 0, 138, - 0, 139, 131, 125, -2, 0, 130, 106, 150, 0, - 150, 150, 0, 150, 0, 73, 0, 0, 80, 0, - 0, 19, 0, 0, 0, 0, 60, 25, 43, 50, - 57, 40, 140, 144, 37, 0, 42, 133, 127, 0, - 107, 0, 108, 109, 110, 111, 0, 0, 0, 78, - 81, 0, 0, 0, 20, 162, 163, 66, 39, 0, - 0, 0, 0, 135, 0, 143, 150, 0, 153, 0, - 74, 79, 82, 76, 77, 51, 0, 52, 38, 141, - 0, 0, 0, 113, 0, 154, 0, 0, 137, 0, - 136, 134, 55, 0, 17, 153, 44, 139, 0, 0, - 128, 155, 89, 142, 147, 56, 0, 145, 148, 149, - 147, 146, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 95, 0, 106, 2, 5, 9, 47, 47, 47, 0, + 0, 14, 0, 130, 0, 0, 0, 0, 0, 0, + 0, 34, 36, 37, 38, 39, 40, 41, 42, 0, + 0, 0, 0, 0, 128, 104, 97, 98, 0, 100, + 101, 0, 107, 3, 0, 0, 0, 0, 47, 0, + 15, 16, 133, 0, 0, 18, 0, 0, 30, 0, + 0, 0, 33, 0, 0, 0, 0, 145, 0, 0, + 105, 99, 0, 0, 108, 109, 164, 112, 0, 118, + 13, 0, 0, 0, 0, 0, 129, 0, 0, 131, + 0, 137, -2, 171, 0, 0, 0, 178, 179, 0, + 73, 74, 75, 76, 77, 0, 79, 80, 81, 82, + 118, 132, 0, 0, 0, 0, 0, 0, 0, 35, + 0, 60, 0, 157, 0, 145, 57, 0, 96, 102, + 0, 0, 110, 165, 0, 113, 0, 0, 0, 48, + 0, 0, 0, 0, 134, 135, 136, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 183, 172, 173, 0, + 0, 0, 69, 0, 22, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 61, 65, 0, 151, 0, 146, + 157, 0, 0, 157, 130, 0, 0, 0, 0, 0, + 164, 128, 164, 166, 0, 116, 0, 0, 119, 0, + 84, 0, 0, 0, 43, 184, 185, 186, 187, 188, + 189, 190, 0, 0, 0, 181, 0, 180, 0, 0, + 70, 71, 0, 23, 24, 0, 26, 27, 43, 0, + 0, 0, 0, 0, 153, 0, 0, 151, 58, 59, + -2, 164, 0, 0, 0, 0, 0, 0, 126, 111, + 117, 114, 115, 167, 87, 0, 0, 28, 44, 45, + 46, 191, 174, 0, 175, 0, 83, 0, 21, 0, + 29, 0, 0, 0, 66, 0, 53, 0, 152, 0, + 153, 145, 139, -2, 0, 144, 120, 164, 0, 164, + 164, 0, 164, 0, 85, 0, 0, 92, 0, 0, + 19, 0, 0, 0, 0, 72, 25, 31, 32, 55, + 62, 69, 52, 154, 158, 49, 0, 54, 147, 141, + 0, 121, 0, 122, 123, 124, 125, 0, 0, 0, + 90, 93, 0, 0, 0, 20, 176, 177, 78, 51, + 0, 0, 0, 0, 149, 0, 157, 164, 0, 167, + 0, 86, 91, 94, 88, 89, 63, 0, 64, 50, + 155, 0, 0, 0, 127, 0, 168, 0, 0, 151, + 0, 150, 148, 67, 0, 17, 167, 56, 153, 0, + 0, 142, 169, 103, 156, 161, 68, 0, 159, 162, + 163, 161, 160, } var yyTok1 = [...]int8{ @@ -522,12 +550,12 @@ var yyTok1 = [...]int8{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 103, 104, 99, 97, 96, 98, 101, 100, 3, 3, + 108, 109, 104, 102, 101, 103, 106, 105, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 105, 3, 106, + 3, 110, 3, 111, } var yyTok2 = [...]int8{ @@ -540,7 +568,7 @@ var yyTok2 = [...]int8{ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 102, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 107, } var yyTok3 = [...]int8{ @@ -1013,271 +1041,331 @@ yydefault: yyVAL.stmt = &DropUserStmt{username: yyDollar[3].id} } case 31: + yyDollar = yyS[yypt-8 : yypt+1] + { + yyVAL.stmt = &AlterPrivilegesStmt{database: yyDollar[5].id, user: yyDollar[8].id, privileges: yyDollar[2].sqlPrivileges, isGrant: true} + } + case 32: + yyDollar = yyS[yypt-8 : yypt+1] + { + yyVAL.stmt = &AlterPrivilegesStmt{database: yyDollar[5].id, user: yyDollar[8].id, privileges: yyDollar[2].sqlPrivileges} + } + case 33: + yyDollar = yyS[yypt-2 : yypt+1] + { + yyVAL.sqlPrivileges = allPrivileges + } + case 34: + yyDollar = yyS[yypt-1 : yypt+1] + { + yyVAL.sqlPrivileges = []SQLPrivilege{yyDollar[1].sqlPrivilege} + } + case 35: + yyDollar = yyS[yypt-3 : yypt+1] + { + yyVAL.sqlPrivileges = append(yyDollar[3].sqlPrivileges, yyDollar[1].sqlPrivilege) + } + case 36: + yyDollar = yyS[yypt-1 : yypt+1] + { + yyVAL.sqlPrivilege = SQLPrivilegeSelect + } + case 37: + yyDollar = yyS[yypt-1 : yypt+1] + { + yyVAL.sqlPrivilege = SQLPrivilegeCreate + } + case 38: + yyDollar = yyS[yypt-1 : yypt+1] + { + yyVAL.sqlPrivilege = SQLPrivilegeInsert + } + case 39: + yyDollar = yyS[yypt-1 : yypt+1] + { + yyVAL.sqlPrivilege = SQLPrivilegeUpdate + } + case 40: + yyDollar = yyS[yypt-1 : yypt+1] + { + yyVAL.sqlPrivilege = SQLPrivilegeDelete + } + case 41: + yyDollar = yyS[yypt-1 : yypt+1] + { + yyVAL.sqlPrivilege = SQLPrivilegeDrop + } + case 42: + yyDollar = yyS[yypt-1 : yypt+1] + { + yyVAL.sqlPrivilege = SQLPrivilegeAlter + } + case 43: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.permission = PermissionReadWrite } - case 32: + case 44: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.permission = PermissionReadOnly } - case 33: + case 45: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.permission = PermissionReadWrite } - case 34: + case 46: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.permission = PermissionAdmin } - case 35: + case 47: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.boolean = false } - case 36: + case 48: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.boolean = true } - case 37: + case 49: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.ids = []string{yyDollar[1].id} } - case 38: + case 50: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.ids = yyDollar[2].ids } - case 39: + case 51: yyDollar = yyS[yypt-9 : yypt+1] { yyVAL.stmt = &UpsertIntoStmt{isInsert: true, tableRef: yyDollar[3].tableRef, cols: yyDollar[5].ids, rows: yyDollar[8].rows, onConflict: yyDollar[9].onConflict} } - case 40: + case 52: yyDollar = yyS[yypt-8 : yypt+1] { yyVAL.stmt = &UpsertIntoStmt{tableRef: yyDollar[3].tableRef, cols: yyDollar[5].ids, rows: yyDollar[8].rows} } - case 41: + case 53: yyDollar = yyS[yypt-7 : yypt+1] { yyVAL.stmt = &DeleteFromStmt{tableRef: yyDollar[3].tableRef, where: yyDollar[4].exp, indexOn: yyDollar[5].ids, limit: yyDollar[6].exp, offset: yyDollar[7].exp} } - case 42: + case 54: yyDollar = yyS[yypt-8 : yypt+1] { yyVAL.stmt = &UpdateStmt{tableRef: yyDollar[2].tableRef, updates: yyDollar[4].updates, where: yyDollar[5].exp, indexOn: yyDollar[6].ids, limit: yyDollar[7].exp, offset: yyDollar[8].exp} } - case 43: + case 55: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.onConflict = nil } - case 44: + case 56: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.onConflict = &OnConflictDo{} } - case 45: + case 57: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.updates = []*colUpdate{yyDollar[1].update} } - case 46: + case 58: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.updates = append(yyDollar[1].updates, yyDollar[3].update) } - case 47: + case 59: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.update = &colUpdate{col: yyDollar[1].id, op: yyDollar[2].cmpOp, val: yyDollar[3].exp} } - case 48: + case 60: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.ids = nil } - case 49: + case 61: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.ids = yyDollar[1].ids } - case 50: + case 62: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.rows = []*RowSpec{yyDollar[1].row} } - case 51: + case 63: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.rows = append(yyDollar[1].rows, yyDollar[3].row) } - case 52: + case 64: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.row = &RowSpec{Values: yyDollar[2].values} } - case 53: + case 65: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.ids = []string{yyDollar[1].id} } - case 54: + case 66: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.ids = append(yyDollar[1].ids, yyDollar[3].id) } - case 55: + case 67: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.cols = []*ColSelector{yyDollar[1].col} } - case 56: + case 68: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.cols = append(yyDollar[1].cols, yyDollar[3].col) } - case 57: + case 69: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.values = nil } - case 58: + case 70: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.values = yyDollar[1].values } - case 59: + case 71: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.values = []ValueExp{yyDollar[1].exp} } - case 60: + case 72: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.values = append(yyDollar[1].values, yyDollar[3].exp) } - case 61: + case 73: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.value = &Integer{val: int64(yyDollar[1].integer)} } - case 62: + case 74: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.value = &Float64{val: float64(yyDollar[1].float)} } - case 63: + case 75: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.value = &Varchar{val: yyDollar[1].str} } - case 64: + case 76: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.value = &Bool{val: yyDollar[1].boolean} } - case 65: + case 77: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.value = &Blob{val: yyDollar[1].blob} } - case 66: + case 78: yyDollar = yyS[yypt-6 : yypt+1] { yyVAL.value = &Cast{val: yyDollar[3].exp, t: yyDollar[5].sqlType} } - case 67: + case 79: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.value = yyDollar[1].value } - case 68: + case 80: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.value = &Param{id: yyDollar[1].id} } - case 69: + case 81: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.value = &Param{id: fmt.Sprintf("param%d", yyDollar[1].pparam), pos: yyDollar[1].pparam} } - case 70: + case 82: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.value = &NullValue{t: AnyType} } - case 71: + case 83: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.value = &FnCall{fn: yyDollar[1].id, params: yyDollar[3].values} } - case 72: + case 84: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.colsSpec = []*ColSpec{yyDollar[1].colSpec} } - case 73: + case 85: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.colsSpec = append(yyDollar[1].colsSpec, yyDollar[3].colSpec) } - case 74: + case 86: yyDollar = yyS[yypt-5 : yypt+1] { yyVAL.colSpec = &ColSpec{colName: yyDollar[1].id, colType: yyDollar[2].sqlType, maxLen: int(yyDollar[3].integer), notNull: yyDollar[4].boolean, autoIncrement: yyDollar[5].boolean} } - case 75: + case 87: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.integer = 0 } - case 76: + case 88: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.integer = yyDollar[2].integer } - case 77: + case 89: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.integer = yyDollar[2].integer } - case 78: + case 90: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.boolean = false } - case 79: + case 91: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.boolean = true } - case 80: + case 92: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.boolean = false } - case 81: + case 93: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.boolean = false } - case 82: + case 94: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.boolean = true } - case 83: + case 95: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.stmt = yyDollar[1].stmt } - case 84: + case 96: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.stmt = &UnionStmt{ @@ -1286,35 +1374,49 @@ yydefault: right: yyDollar[4].stmt.(DataSource), } } - case 85: + case 97: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.stmt = &SelectStmt{ ds: &FnDataSourceStmt{fnCall: &FnCall{fn: "databases"}}, } } - case 86: + case 98: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.stmt = &SelectStmt{ ds: &FnDataSourceStmt{fnCall: &FnCall{fn: "tables"}}, } } - case 87: + case 99: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.stmt = &SelectStmt{ ds: &FnDataSourceStmt{fnCall: &FnCall{fn: "table", params: []ValueExp{&Varchar{val: yyDollar[3].id}}}}, } } - case 88: + case 100: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.stmt = &SelectStmt{ ds: &FnDataSourceStmt{fnCall: &FnCall{fn: "users"}}, } } - case 89: + case 101: + yyDollar = yyS[yypt-2 : yypt+1] + { + yyVAL.stmt = &SelectStmt{ + ds: &FnDataSourceStmt{fnCall: &FnCall{fn: "grants"}}, + } + } + case 102: + yyDollar = yyS[yypt-4 : yypt+1] + { + yyVAL.stmt = &SelectStmt{ + ds: &FnDataSourceStmt{fnCall: &FnCall{fn: "grants", params: []ValueExp{&Varchar{val: yyDollar[4].id}}}}, + } + } + case 103: yyDollar = yyS[yypt-13 : yypt+1] { yyVAL.stmt = &SelectStmt{ @@ -1331,447 +1433,447 @@ yydefault: offset: yyDollar[13].exp, } } - case 90: + case 104: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.distinct = true } - case 91: + case 105: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.distinct = false } - case 92: + case 106: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.distinct = false } - case 93: + case 107: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.distinct = true } - case 94: + case 108: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.sels = nil } - case 95: + case 109: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.sels = yyDollar[1].sels } - case 96: + case 110: yyDollar = yyS[yypt-2 : yypt+1] { yyDollar[1].sel.setAlias(yyDollar[2].id) yyVAL.sels = []Selector{yyDollar[1].sel} } - case 97: + case 111: yyDollar = yyS[yypt-4 : yypt+1] { yyDollar[3].sel.setAlias(yyDollar[4].id) yyVAL.sels = append(yyDollar[1].sels, yyDollar[3].sel) } - case 98: + case 112: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.sel = yyDollar[1].col } - case 99: + case 113: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.sel = &JSONSelector{ColSelector: yyDollar[1].col, fields: yyDollar[2].jsonFields} } - case 100: + case 114: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.sel = &AggColSelector{aggFn: yyDollar[1].aggFn, col: "*"} } - case 101: + case 115: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.sel = &AggColSelector{aggFn: yyDollar[1].aggFn, table: yyDollar[3].col.table, col: yyDollar[3].col.col} } - case 102: + case 116: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.jsonFields = []string{yyDollar[2].str} } - case 103: + case 117: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.jsonFields = append(yyVAL.jsonFields, yyDollar[3].str) } - case 104: + case 118: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.col = &ColSelector{col: yyDollar[1].id} } - case 105: + case 119: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.col = &ColSelector{table: yyDollar[1].id, col: yyDollar[3].id} } - case 106: + case 120: yyDollar = yyS[yypt-3 : yypt+1] { yyDollar[1].tableRef.period = yyDollar[2].period yyDollar[1].tableRef.as = yyDollar[3].id yyVAL.ds = yyDollar[1].tableRef } - case 107: + case 121: yyDollar = yyS[yypt-4 : yypt+1] { yyDollar[2].stmt.(*SelectStmt).as = yyDollar[4].id yyVAL.ds = yyDollar[2].stmt.(DataSource) } - case 108: + case 122: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.ds = &FnDataSourceStmt{fnCall: &FnCall{fn: "databases"}, as: yyDollar[4].id} } - case 109: + case 123: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.ds = &FnDataSourceStmt{fnCall: &FnCall{fn: "tables"}, as: yyDollar[4].id} } - case 110: + case 124: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.ds = &FnDataSourceStmt{fnCall: &FnCall{fn: "table", params: []ValueExp{&Varchar{val: yyDollar[3].id}}}} } - case 111: + case 125: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.ds = &FnDataSourceStmt{fnCall: &FnCall{fn: "users"}, as: yyDollar[4].id} } - case 112: + case 126: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.ds = &FnDataSourceStmt{fnCall: yyDollar[1].value.(*FnCall), as: yyDollar[2].id} } - case 113: + case 127: yyDollar = yyS[yypt-6 : yypt+1] { yyVAL.ds = &tableRef{table: yyDollar[4].id, history: true, as: yyDollar[6].id} } - case 114: + case 128: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.tableRef = &tableRef{table: yyDollar[1].id} } - case 115: + case 129: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.period = period{start: yyDollar[1].openPeriod, end: yyDollar[2].openPeriod} } - case 116: + case 130: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.openPeriod = nil } - case 117: + case 131: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.openPeriod = &openPeriod{inclusive: true, instant: yyDollar[2].periodInstant} } - case 118: + case 132: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.openPeriod = &openPeriod{instant: yyDollar[2].periodInstant} } - case 119: + case 133: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.openPeriod = nil } - case 120: + case 134: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.openPeriod = &openPeriod{inclusive: true, instant: yyDollar[2].periodInstant} } - case 121: + case 135: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.openPeriod = &openPeriod{instant: yyDollar[2].periodInstant} } - case 122: + case 136: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.periodInstant = periodInstant{instantType: txInstant, exp: yyDollar[2].exp} } - case 123: + case 137: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.periodInstant = periodInstant{instantType: timeInstant, exp: yyDollar[1].exp} } - case 124: + case 138: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.joins = nil } - case 125: + case 139: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.joins = yyDollar[1].joins } - case 126: + case 140: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.joins = []*JoinSpec{yyDollar[1].join} } - case 127: + case 141: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.joins = append([]*JoinSpec{yyDollar[1].join}, yyDollar[2].joins...) } - case 128: + case 142: yyDollar = yyS[yypt-6 : yypt+1] { yyVAL.join = &JoinSpec{joinType: yyDollar[1].joinType, ds: yyDollar[3].ds, indexOn: yyDollar[4].ids, cond: yyDollar[6].exp} } - case 129: + case 143: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.joinType = InnerJoin } - case 130: + case 144: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.joinType = yyDollar[1].joinType } - case 131: + case 145: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.exp = nil } - case 132: + case 146: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.exp = yyDollar[2].exp } - case 133: + case 147: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.cols = nil } - case 134: + case 148: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.cols = yyDollar[3].cols } - case 135: + case 149: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.exp = nil } - case 136: + case 150: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.exp = yyDollar[2].exp } - case 137: + case 151: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.exp = nil } - case 138: + case 152: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.exp = yyDollar[2].exp } - case 139: + case 153: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.exp = nil } - case 140: + case 154: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.exp = yyDollar[2].exp } - case 141: + case 155: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.ordcols = nil } - case 142: + case 156: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.ordcols = yyDollar[3].ordcols } - case 143: + case 157: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.ids = nil } - case 144: + case 158: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.ids = yyDollar[4].ids } - case 145: + case 159: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.ordcols = []*OrdCol{{sel: yyDollar[1].sel, descOrder: yyDollar[2].opt_ord}} } - case 146: + case 160: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.ordcols = append(yyDollar[1].ordcols, &OrdCol{sel: yyDollar[3].sel, descOrder: yyDollar[4].opt_ord}) } - case 147: + case 161: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.opt_ord = false } - case 148: + case 162: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.opt_ord = false } - case 149: + case 163: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.opt_ord = true } - case 150: + case 164: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.id = "" } - case 151: + case 165: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.id = yyDollar[1].id } - case 152: + case 166: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.id = yyDollar[2].id } - case 153: + case 167: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.checks = nil } - case 154: + case 168: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.checks = append([]CheckConstraint{{exp: yyDollar[2].exp}}, yyDollar[4].checks...) } - case 155: + case 169: yyDollar = yyS[yypt-6 : yypt+1] { yyVAL.checks = append([]CheckConstraint{{name: yyDollar[2].id, exp: yyDollar[4].exp}}, yyDollar[6].checks...) } - case 156: + case 170: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.exp = yyDollar[1].exp } - case 157: + case 171: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.exp = yyDollar[1].binExp } - case 158: + case 172: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.exp = &NotBoolExp{exp: yyDollar[2].exp} } - case 159: + case 173: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.exp = &NumExp{left: &Integer{val: 0}, op: SUBSOP, right: yyDollar[2].exp} } - case 160: + case 174: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.exp = &LikeBoolExp{val: yyDollar[1].exp, notLike: yyDollar[2].boolean, pattern: yyDollar[4].exp} } - case 161: + case 175: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.exp = &ExistsBoolExp{q: (yyDollar[3].stmt).(DataSource)} } - case 162: + case 176: yyDollar = yyS[yypt-6 : yypt+1] { yyVAL.exp = &InSubQueryExp{val: yyDollar[1].exp, notIn: yyDollar[2].boolean, q: yyDollar[5].stmt.(*SelectStmt)} } - case 163: + case 177: yyDollar = yyS[yypt-6 : yypt+1] { yyVAL.exp = &InListExp{val: yyDollar[1].exp, notIn: yyDollar[2].boolean, values: yyDollar[5].values} } - case 164: + case 178: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.exp = yyDollar[1].sel } - case 165: + case 179: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.exp = yyDollar[1].value } - case 166: + case 180: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.exp = yyDollar[2].exp } - case 167: + case 181: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.exp = &Cast{val: yyDollar[1].exp, t: yyDollar[3].sqlType} } - case 168: + case 182: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.boolean = false } - case 169: + case 183: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.boolean = true } - case 170: + case 184: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.binExp = &NumExp{left: yyDollar[1].exp, op: ADDOP, right: yyDollar[3].exp} } - case 171: + case 185: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.binExp = &NumExp{left: yyDollar[1].exp, op: SUBSOP, right: yyDollar[3].exp} } - case 172: + case 186: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.binExp = &NumExp{left: yyDollar[1].exp, op: DIVOP, right: yyDollar[3].exp} } - case 173: + case 187: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.binExp = &NumExp{left: yyDollar[1].exp, op: MULTOP, right: yyDollar[3].exp} } - case 174: + case 188: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.binExp = &BinBoolExp{left: yyDollar[1].exp, op: yyDollar[2].logicOp, right: yyDollar[3].exp} } - case 175: + case 189: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.binExp = &CmpBoolExp{left: yyDollar[1].exp, op: yyDollar[2].cmpOp, right: yyDollar[3].exp} } - case 176: + case 190: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.binExp = &CmpBoolExp{left: yyDollar[1].exp, op: EQ, right: &NullValue{t: AnyType}} } - case 177: + case 191: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.binExp = &CmpBoolExp{left: yyDollar[1].exp, op: NE, right: &NullValue{t: AnyType}} diff --git a/embedded/sql/stmt.go b/embedded/sql/stmt.go index 0bc2f7b27c..f8fe678f4f 100644 --- a/embedded/sql/stmt.go +++ b/embedded/sql/stmt.go @@ -34,11 +34,12 @@ import ( ) const ( - catalogPrefix = "CTL." - catalogTablePrefix = "CTL.TABLE." // (key=CTL.TABLE.{1}{tableID}, value={tableNAME}) - catalogColumnPrefix = "CTL.COLUMN." // (key=CTL.COLUMN.{1}{tableID}{colID}{colTYPE}, value={(auto_incremental | nullable){maxLen}{colNAME}}) - catalogCheckPrefix = "CTL.CHECK." // (key=CTL.CHECK.{1}{tableID}{checkID}, value={nameLen}{name}{expText}) - catalogIndexPrefix = "CTL.INDEX." // (key=CTL.INDEX.{1}{tableID}{indexID}, value={unique {colID1}(ASC|DESC)...{colIDN}(ASC|DESC)}) + catalogPrefix = "CTL." + catalogTablePrefix = "CTL.TABLE." // (key=CTL.TABLE.{1}{tableID}, value={tableNAME}) + catalogColumnPrefix = "CTL.COLUMN." // (key=CTL.COLUMN.{1}{tableID}{colID}{colTYPE}, value={(auto_incremental | nullable){maxLen}{colNAME}}) + catalogIndexPrefix = "CTL.INDEX." // (key=CTL.INDEX.{1}{tableID}{indexID}, value={unique {colID1}(ASC|DESC)...{colIDN}(ASC|DESC)}) + catalogCheckPrefix = "CTL.CHECK." // (key=CTL.CHECK.{1}{tableID}{checkID}, value={nameLen}{name}{expText}) + catalogPrivilegePrefix = "CTL.PRIVILEGE." // (key=CTL.COLUMN.{1}{tableID}{colID}{colTYPE}, value={(auto_incremental | nullable){maxLen}{colNAME}}) RowPrefix = "R." // (key=R.{1}{tableID}{0}({null}({pkVal}{padding}{pkValLen})?)+, value={count (colID valLen val)+}) MappedPrefix = "M." // (key=M.{tableID}{indexID}({null}({val}{padding}{valLen})?)*({pkVal}{padding}{pkValLen})+, value={count (colID valLen val)+}) @@ -93,6 +94,7 @@ const ( PermissionReadOnly Permission = "READ" PermissionReadWrite Permission = "READWRITE" PermissionAdmin Permission = "ADMIN" + PermissionSysAdmin Permission = "SYSADMIN" ) type AggregateFn = string @@ -188,10 +190,13 @@ const ( UsersFnCall string = "USERS" ColumnsFnCall string = "COLUMNS" IndexesFnCall string = "INDEXES" + GrantsFnCall string = "GRANTS" JSONTypeOfFnCall string = "JSON_TYPEOF" ) type SQLStmt interface { + readOnly() bool + requiredPrivileges() []SQLPrivilege execAt(ctx context.Context, tx *SQLTx, params map[string]interface{}) (*SQLTx, error) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error } @@ -199,6 +204,14 @@ type SQLStmt interface { type BeginTransactionStmt struct { } +func (stmt *BeginTransactionStmt) readOnly() bool { + return true +} + +func (stmt *BeginTransactionStmt) requiredPrivileges() []SQLPrivilege { + return nil +} + func (stmt *BeginTransactionStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { return nil } @@ -227,6 +240,14 @@ func (stmt *BeginTransactionStmt) execAt(ctx context.Context, tx *SQLTx, params type CommitStmt struct { } +func (stmt *CommitStmt) readOnly() bool { + return true +} + +func (stmt *CommitStmt) requiredPrivileges() []SQLPrivilege { + return nil +} + func (stmt *CommitStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { return nil } @@ -242,6 +263,14 @@ func (stmt *CommitStmt) execAt(ctx context.Context, tx *SQLTx, params map[string type RollbackStmt struct { } +func (stmt *RollbackStmt) readOnly() bool { + return true +} + +func (stmt *RollbackStmt) requiredPrivileges() []SQLPrivilege { + return nil +} + func (stmt *RollbackStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { return nil } @@ -259,6 +288,14 @@ type CreateDatabaseStmt struct { ifNotExists bool } +func (stmt *CreateDatabaseStmt) readOnly() bool { + return false +} + +func (stmt *CreateDatabaseStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeCreate} +} + func (stmt *CreateDatabaseStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { return nil } @@ -283,6 +320,14 @@ func (stmt *UseDatabaseStmt) inferParameters(ctx context.Context, tx *SQLTx, par return nil } +func (stmt *UseDatabaseStmt) readOnly() bool { + return true +} + +func (stmt *UseDatabaseStmt) requiredPrivileges() []SQLPrivilege { + return nil +} + func (stmt *UseDatabaseStmt) execAt(ctx context.Context, tx *SQLTx, params map[string]interface{}) (*SQLTx, error) { if tx.IsExplicitCloseRequired() { return nil, fmt.Errorf("%w: database selection can NOT be executed within a transaction block", ErrNonTransactionalStmt) @@ -299,6 +344,14 @@ type UseSnapshotStmt struct { period period } +func (stmt *UseSnapshotStmt) readOnly() bool { + return true +} + +func (stmt *UseSnapshotStmt) requiredPrivileges() []SQLPrivilege { + return nil +} + func (stmt *UseSnapshotStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { return nil } @@ -317,6 +370,14 @@ func (stmt *CreateUserStmt) inferParameters(ctx context.Context, tx *SQLTx, para return nil } +func (stmt *CreateUserStmt) readOnly() bool { + return false +} + +func (stmt *CreateUserStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeCreate} +} + func (stmt *CreateUserStmt) execAt(ctx context.Context, tx *SQLTx, params map[string]interface{}) (*SQLTx, error) { if tx.IsExplicitCloseRequired() { return nil, fmt.Errorf("%w: user creation can not be done within a transaction", ErrNonTransactionalStmt) @@ -335,6 +396,14 @@ type AlterUserStmt struct { permission Permission } +func (stmt *AlterUserStmt) readOnly() bool { + return false +} + +func (stmt *AlterUserStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeAlter} +} + func (stmt *AlterUserStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { return nil } @@ -355,6 +424,14 @@ type DropUserStmt struct { username string } +func (stmt *DropUserStmt) readOnly() bool { + return false +} + +func (stmt *DropUserStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeDrop} +} + func (stmt *DropUserStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { return nil } @@ -383,6 +460,14 @@ func NewCreateTableStmt(table string, ifNotExists bool, colsSpec []*ColSpec, pkC return &CreateTableStmt{table: table, ifNotExists: ifNotExists, colsSpec: colsSpec, pkColNames: pkColNames} } +func (stmt *CreateTableStmt) readOnly() bool { + return false +} + +func (stmt *CreateTableStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeCreate} +} + func (stmt *CreateTableStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { return nil } @@ -563,6 +648,14 @@ func NewCreateIndexStmt(table string, cols []string, isUnique bool) *CreateIndex return &CreateIndexStmt{unique: isUnique, table: table, cols: cols} } +func (stmt *CreateIndexStmt) readOnly() bool { + return false +} + +func (stmt *CreateIndexStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeCreate} +} + func (stmt *CreateIndexStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { return nil } @@ -665,6 +758,14 @@ func NewAddColumnStmt(table string, colSpec *ColSpec) *AddColumnStmt { return &AddColumnStmt{table: table, colSpec: colSpec} } +func (stmt *AddColumnStmt) readOnly() bool { + return false +} + +func (stmt *AddColumnStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeAlter} +} + func (stmt *AddColumnStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { return nil } @@ -695,6 +796,14 @@ type RenameTableStmt struct { newName string } +func (stmt *RenameTableStmt) readOnly() bool { + return false +} + +func (stmt *RenameTableStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeAlter} +} + func (stmt *RenameTableStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { return nil } @@ -732,6 +841,14 @@ func NewRenameColumnStmt(table, oldName, newName string) *RenameColumnStmt { return &RenameColumnStmt{table: table, oldName: oldName, newName: newName} } +func (stmt *RenameColumnStmt) readOnly() bool { + return false +} + +func (stmt *RenameColumnStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeAlter} +} + func (stmt *RenameColumnStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { return nil } @@ -766,6 +883,14 @@ func NewDropColumnStmt(table, colName string) *DropColumnStmt { return &DropColumnStmt{table: table, colName: colName} } +func (stmt *DropColumnStmt) readOnly() bool { + return false +} + +func (stmt *DropColumnStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeDrop} +} + func (stmt *DropColumnStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { return nil } @@ -841,6 +966,14 @@ type DropConstraintStmt struct { constraintName string } +func (stmt *DropConstraintStmt) readOnly() bool { + return false +} + +func (stmt *DropConstraintStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeDrop} +} + func (stmt *DropConstraintStmt) execAt(ctx context.Context, tx *SQLTx, params map[string]interface{}) (*SQLTx, error) { table, err := tx.catalog.GetTableByName(stmt.table) if err != nil { @@ -882,6 +1015,17 @@ type UpsertIntoStmt struct { onConflict *OnConflictDo } +func (stmt *UpsertIntoStmt) readOnly() bool { + return false +} + +func (stmt *UpsertIntoStmt) requiredPrivileges() []SQLPrivilege { + if stmt.isInsert { + return []SQLPrivilege{SQLPrivilegeInsert} + } + return []SQLPrivilege{SQLPrivilegeInsert, SQLPrivilegeUpdate} +} + func NewUpserIntoStmt(table string, cols []string, rows []*RowSpec, isInsert bool, onConflict *OnConflictDo) *UpsertIntoStmt { return &UpsertIntoStmt{ isInsert: isInsert, @@ -1414,6 +1558,14 @@ type colUpdate struct { val ValueExp } +func (stmt *UpdateStmt) readOnly() bool { + return false +} + +func (stmt *UpdateStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeUpdate} +} + func (stmt *UpdateStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { selectStmt := &SelectStmt{ ds: stmt.tableRef, @@ -1591,6 +1743,14 @@ func NewDeleteFromStmt(table string, where ValueExp, orderBy []*OrdCol, limit Va } } +func (stmt *DeleteFromStmt) readOnly() bool { + return false +} + +func (stmt *DeleteFromStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeDelete} +} + func (stmt *DeleteFromStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { selectStmt := &SelectStmt{ ds: stmt.tableRef, @@ -2778,6 +2938,14 @@ func NewSelectStmt( } } +func (stmt *SelectStmt) readOnly() bool { + return true +} + +func (stmt *SelectStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeSelect} +} + func (stmt *SelectStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { _, err := stmt.execAt(ctx, tx, nil) if err != nil { @@ -3165,6 +3333,14 @@ type UnionStmt struct { left, right DataSource } +func (stmt *UnionStmt) readOnly() bool { + return true +} + +func (stmt *UnionStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeSelect} +} + func (stmt *UnionStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { err := stmt.left.inferParameters(ctx, tx, params) if err != nil { @@ -3251,6 +3427,14 @@ type tableRef struct { as string } +func (ref *tableRef) readOnly() bool { + return true +} + +func (ref *tableRef) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeSelect} +} + type period struct { start *openPeriod end *openPeriod @@ -4578,6 +4762,14 @@ type FnDataSourceStmt struct { as string } +func (stmt *FnDataSourceStmt) readOnly() bool { + return true +} + +func (stmt *FnDataSourceStmt) requiredPrivileges() []SQLPrivilege { + return nil +} + func (stmt *FnDataSourceStmt) execAt(ctx context.Context, tx *SQLTx, params map[string]interface{}) (*SQLTx, error) { return tx, nil } @@ -4616,6 +4808,8 @@ func (stmt *FnDataSourceStmt) Alias() string { { return "indexes" } + case GrantsFnCall: + return "grants" } // not reachable @@ -4652,6 +4846,10 @@ func (stmt *FnDataSourceStmt) Resolve(ctx context.Context, tx *SQLTx, params map { return stmt.resolveListIndexes(ctx, tx, params, scanSpecs) } + case GrantsFnCall: + { + return stmt.resolveListGrants(ctx, tx, params, scanSpecs) + } } return nil, fmt.Errorf("%w (%s)", ErrFunctionDoesNotExist, stmt.fnCall.fn) @@ -4793,14 +4991,15 @@ func (stmt *FnDataSourceStmt) resolveListUsers(ctx context.Context, tx *SQLTx, p return nil, fmt.Errorf("%w: function '%s' expect no parameters but %d were provided", ErrIllegalArguments, UsersFnCall, len(stmt.fnCall.params)) } - cols := make([]ColDescriptor, 2) - cols[0] = ColDescriptor{ - Column: "name", - Type: VarcharType, - } - cols[1] = ColDescriptor{ - Column: "permission", - Type: VarcharType, + cols := []ColDescriptor{ + { + Column: "name", + Type: VarcharType, + }, + { + Column: "permission", + Type: VarcharType, + }, } var users []User @@ -4817,26 +5016,7 @@ func (stmt *FnDataSourceStmt) resolveListUsers(ctx context.Context, tx *SQLTx, p values := make([][]ValueExp, len(users)) for i, user := range users { - var perm string - - switch user.Permission() { - case 1: - { - perm = "READ" - } - case 2: - { - perm = "READ/WRITE" - } - case 254: - { - perm = "ADMIN" - } - default: - { - perm = "SYSADMIN" - } - } + perm := user.Permission() values[i] = []ValueExp{ &Varchar{val: user.Username()}, @@ -4999,6 +5179,68 @@ func (stmt *FnDataSourceStmt) resolveListIndexes(ctx context.Context, tx *SQLTx, return newValuesRowReader(tx, params, cols, stmt.Alias(), values) } +func (stmt *FnDataSourceStmt) resolveListGrants(ctx context.Context, tx *SQLTx, params map[string]interface{}, _ *ScanSpecs) (RowReader, error) { + if len(stmt.fnCall.params) > 1 { + return nil, fmt.Errorf("%w: function '%s' expect at most one parameter of type %s", ErrIllegalArguments, GrantsFnCall, VarcharType) + } + + var username string + if len(stmt.fnCall.params) == 1 { + val, err := stmt.fnCall.params[0].substitute(params) + if err != nil { + return nil, err + } + + userVal, err := val.reduce(tx, nil, "") + if err != nil { + return nil, err + } + + if userVal.Type() != VarcharType { + return nil, fmt.Errorf("%w: expected '%s' for username but type '%s' given instead", ErrIllegalArguments, VarcharType, userVal.Type()) + } + username, _ = userVal.RawValue().(string) + } + + cols := []ColDescriptor{ + { + Column: "user", + Type: VarcharType, + }, + { + Column: "privilege", + Type: VarcharType, + }, + } + + var err error + var users []User + + if tx.engine.multidbHandler == nil { + return nil, ErrUnspecifiedMultiDBHandler + } else { + users, err = tx.engine.multidbHandler.ListUsers(ctx) + if err != nil { + return nil, err + } + } + + values := make([][]ValueExp, 0, len(users)) + + for _, user := range users { + if username == "" || user.Username() == username { + for _, p := range user.SQLPrivileges() { + values = append(values, []ValueExp{ + &Varchar{val: user.Username()}, + &Varchar{val: string(p)}, + }) + } + } + } + + return newValuesRowReader(tx, params, cols, stmt.Alias(), values) +} + // DropTableStmt represents a statement to delete a table. type DropTableStmt struct { table string @@ -5008,6 +5250,14 @@ func NewDropTableStmt(table string) *DropTableStmt { return &DropTableStmt{table: table} } +func (stmt *DropTableStmt) readOnly() bool { + return false +} + +func (stmt *DropTableStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeDrop} +} + func (stmt *DropTableStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { return nil } @@ -5121,6 +5371,14 @@ func NewDropIndexStmt(table string, cols []string) *DropIndexStmt { return &DropIndexStmt{table: table, cols: cols} } +func (stmt *DropIndexStmt) readOnly() bool { + return false +} + +func (stmt *DropIndexStmt) requiredPrivileges() []SQLPrivilege { + return []SQLPrivilege{SQLPrivilegeDrop} +} + func (stmt *DropIndexStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { return nil } @@ -5192,3 +5450,72 @@ func (stmt *DropIndexStmt) execAt(ctx context.Context, tx *SQLTx, params map[str return tx, nil } + +type SQLPrivilege string + +const ( + SQLPrivilegeSelect SQLPrivilege = "SELECT" + SQLPrivilegeCreate SQLPrivilege = "CREATE" + SQLPrivilegeInsert SQLPrivilege = "INSERT" + SQLPrivilegeUpdate SQLPrivilege = "UPDATE" + SQLPrivilegeDelete SQLPrivilege = "DELETE" + SQLPrivilegeDrop SQLPrivilege = "DROP" + SQLPrivilegeAlter SQLPrivilege = "ALTER" +) + +var allPrivileges = []SQLPrivilege{ + SQLPrivilegeSelect, + SQLPrivilegeCreate, + SQLPrivilegeInsert, + SQLPrivilegeUpdate, + SQLPrivilegeDelete, + SQLPrivilegeDrop, + SQLPrivilegeAlter, +} + +func DefaultSQLPrivilegesForPermission(p Permission) []SQLPrivilege { + switch p { + case PermissionSysAdmin, PermissionAdmin, PermissionReadWrite: // should also contain GRANT/REVOKE + return allPrivileges + case PermissionReadOnly: + return []SQLPrivilege{SQLPrivilegeSelect} + } + return nil +} + +type AlterPrivilegesStmt struct { + database string + user string + privileges []SQLPrivilege + isGrant bool +} + +func (stmt *AlterPrivilegesStmt) readOnly() bool { + return false +} + +func (stmt *AlterPrivilegesStmt) requiredPrivileges() []SQLPrivilege { + return nil +} + +func (stmt *AlterPrivilegesStmt) execAt(ctx context.Context, tx *SQLTx, params map[string]interface{}) (*SQLTx, error) { + if tx.IsExplicitCloseRequired() { + return nil, fmt.Errorf("%w: user privileges modification can not be done within a transaction", ErrNonTransactionalStmt) + } + + if tx.engine.multidbHandler == nil { + return nil, ErrUnspecifiedMultiDBHandler + } + + var err error + if stmt.isGrant { + err = tx.engine.multidbHandler.GrantSQLPrivileges(ctx, stmt.database, stmt.user, stmt.privileges) + } else { + err = tx.engine.multidbHandler.RevokeSQLPrivileges(ctx, stmt.database, stmt.user, stmt.privileges) + } + return nil, err +} + +func (stmt *AlterPrivilegesStmt) inferParameters(ctx context.Context, tx *SQLTx, params map[string]SQLValueType) error { + return nil +} diff --git a/embedded/sql/stmt_test.go b/embedded/sql/stmt_test.go index c5def0b943..bcd81a9d20 100644 --- a/embedded/sql/stmt_test.go +++ b/embedded/sql/stmt_test.go @@ -20,6 +20,7 @@ import ( "context" "encoding/hex" "fmt" + "reflect" "testing" "time" @@ -801,6 +802,9 @@ func TestInferParameterEdgeCases(t *testing.T) { err = (&AlterUserStmt{}).inferParameters(context.Background(), nil, nil) require.Nil(t, err) + err = (&AlterPrivilegesStmt{}).inferParameters(context.Background(), nil, nil) + require.Nil(t, err) + err = (&DropUserStmt{}).inferParameters(context.Background(), nil, nil) require.Nil(t, err) @@ -1356,3 +1360,136 @@ func TestTypedValueString(t *testing.T) { jsVal := &JSON{val: map[string]interface{}{"name": "John Doe"}} require.Equal(t, jsVal.String(), `{"name":"John Doe"}`) } + +func TestRequiredPrivileges(t *testing.T) { + type test struct { + stmt SQLStmt + readOnly bool + privileges []SQLPrivilege + } + + tests := []test{ + { + stmt: &SelectStmt{}, + readOnly: true, + privileges: []SQLPrivilege{SQLPrivilegeSelect}, + }, + { + stmt: &UnionStmt{}, + readOnly: true, + privileges: []SQLPrivilege{SQLPrivilegeSelect}, + }, + { + stmt: &tableRef{}, + readOnly: true, + privileges: []SQLPrivilege{SQLPrivilegeSelect}, + }, + { + stmt: &UpsertIntoStmt{}, + readOnly: false, + privileges: []SQLPrivilege{SQLPrivilegeInsert, SQLPrivilegeUpdate}, + }, + { + stmt: &UpsertIntoStmt{isInsert: true}, + readOnly: false, + privileges: []SQLPrivilege{SQLPrivilegeInsert}, + }, + { + stmt: &DeleteFromStmt{}, + readOnly: false, + privileges: []SQLPrivilege{SQLPrivilegeDelete}, + }, + { + stmt: &CreateDatabaseStmt{}, + readOnly: false, + privileges: []SQLPrivilege{SQLPrivilegeCreate}, + }, + { + stmt: &CreateTableStmt{}, + readOnly: false, + privileges: []SQLPrivilege{SQLPrivilegeCreate}, + }, + { + stmt: &CreateIndexStmt{}, + readOnly: false, + privileges: []SQLPrivilege{SQLPrivilegeCreate}, + }, + { + stmt: &CreateIndexStmt{}, + readOnly: false, + privileges: []SQLPrivilege{SQLPrivilegeCreate}, + }, + { + stmt: &DropTableStmt{}, + readOnly: false, + privileges: []SQLPrivilege{SQLPrivilegeDrop}, + }, + { + stmt: &DropColumnStmt{}, + readOnly: false, + privileges: []SQLPrivilege{SQLPrivilegeDrop}, + }, + { + stmt: &DropIndexStmt{}, + readOnly: false, + privileges: []SQLPrivilege{SQLPrivilegeDrop}, + }, + { + stmt: &DropUserStmt{}, + readOnly: false, + privileges: []SQLPrivilege{SQLPrivilegeDrop}, + }, + { + stmt: &FnDataSourceStmt{}, + readOnly: true, + privileges: nil, + }, + { + stmt: &BeginTransactionStmt{}, + readOnly: true, + privileges: nil, + }, + { + stmt: &CommitStmt{}, + readOnly: true, + privileges: nil, + }, + { + stmt: &RollbackStmt{}, + readOnly: true, + privileges: nil, + }, + { + stmt: &UseDatabaseStmt{}, + readOnly: true, + privileges: nil, + }, + { + stmt: &UseSnapshotStmt{}, + readOnly: true, + privileges: nil, + }, + { + stmt: &AddColumnStmt{}, + readOnly: false, + privileges: []SQLPrivilege{SQLPrivilegeAlter}, + }, + { + stmt: &RenameColumnStmt{}, + readOnly: false, + privileges: []SQLPrivilege{SQLPrivilegeAlter}, + }, + { + stmt: &RenameColumnStmt{}, + readOnly: false, + privileges: []SQLPrivilege{SQLPrivilegeAlter}, + }, + } + + for _, tc := range tests { + t.Run(reflect.TypeOf(tc.stmt).String(), func(t *testing.T) { + require.Equal(t, tc.stmt.readOnly(), tc.readOnly) + require.Equal(t, tc.stmt.requiredPrivileges(), tc.privileges) + }) + } +} diff --git a/pkg/api/schema/docs.md b/pkg/api/schema/docs.md index 9c7aac99c1..7736a4cf5e 100644 --- a/pkg/api/schema/docs.md +++ b/pkg/api/schema/docs.md @@ -8,6 +8,8 @@ - [AuthConfig](#immudb.schema.AuthConfig) - [ChangePasswordRequest](#immudb.schema.ChangePasswordRequest) - [ChangePermissionRequest](#immudb.schema.ChangePermissionRequest) + - [ChangeSQLPrivilegesRequest](#immudb.schema.ChangeSQLPrivilegesRequest) + - [ChangeSQLPrivilegesResponse](#immudb.schema.ChangeSQLPrivilegesResponse) - [Chunk](#immudb.schema.Chunk) - [Chunk.MetadataEntry](#immudb.schema.Chunk.MetadataEntry) - [Column](#immudb.schema.Column) @@ -140,6 +142,7 @@ - [EntryTypeAction](#immudb.schema.EntryTypeAction) - [PermissionAction](#immudb.schema.PermissionAction) + - [SQLPrivilege](#immudb.schema.SQLPrivilege) - [TxMode](#immudb.schema.TxMode) - [ImmuService](#immudb.schema.ImmuService) @@ -221,6 +224,34 @@ DEPRECATED + + +### ChangeSQLPrivilegesRequest + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| action | [PermissionAction](#immudb.schema.PermissionAction) | | Action to perform | +| username | [string](#string) | | Name of the user to update | +| database | [string](#string) | | Name of the database | +| privileges | [SQLPrivilege](#immudb.schema.SQLPrivilege) | repeated | SQL privileges to grant / revoke | + + + + + + + + +### ChangeSQLPrivilegesResponse + + + + + + + ### Chunk @@ -2072,6 +2103,7 @@ Reserved to reply with more advanced response later | createdby | [string](#string) | | Name of the creator user | | createdat | [string](#string) | | Time when the user was created | | active | [bool](#bool) | | Flag indicating whether the user is active or not | +| sqlPrivileges | [SQLPrivilege](#immudb.schema.SQLPrivilege) | repeated | List of SQL privileges | @@ -2456,6 +2488,24 @@ Reserved to reply with more advanced response later + + +### SQLPrivilege + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| UNKNOWN | 0 | | +| SELECT | 1 | | +| CREATE | 2 | | +| INSERT | 3 | | +| UPDATE | 4 | | +| DELETE | 5 | | +| DROP | 6 | | +| ALTER | 7 | | + + + ### TxMode @@ -2484,6 +2534,7 @@ immudb gRPC & REST service | CreateUser | [CreateUserRequest](#immudb.schema.CreateUserRequest) | [.google.protobuf.Empty](#google.protobuf.Empty) | | | ChangePassword | [ChangePasswordRequest](#immudb.schema.ChangePasswordRequest) | [.google.protobuf.Empty](#google.protobuf.Empty) | | | ChangePermission | [ChangePermissionRequest](#immudb.schema.ChangePermissionRequest) | [.google.protobuf.Empty](#google.protobuf.Empty) | | +| ChangeSQLPrivileges | [ChangeSQLPrivilegesRequest](#immudb.schema.ChangeSQLPrivilegesRequest) | [ChangeSQLPrivilegesResponse](#immudb.schema.ChangeSQLPrivilegesResponse) | | | SetActiveUser | [SetActiveUserRequest](#immudb.schema.SetActiveUserRequest) | [.google.protobuf.Empty](#google.protobuf.Empty) | | | UpdateAuthConfig | [AuthConfig](#immudb.schema.AuthConfig) | [.google.protobuf.Empty](#google.protobuf.Empty) | | | UpdateMTLSConfig | [MTLSConfig](#immudb.schema.MTLSConfig) | [.google.protobuf.Empty](#google.protobuf.Empty) | | diff --git a/pkg/api/schema/schema.pb.go b/pkg/api/schema/schema.pb.go index 3f1c2d5fd2..bcbaf021fb 100644 --- a/pkg/api/schema/schema.pb.go +++ b/pkg/api/schema/schema.pb.go @@ -39,6 +39,70 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type SQLPrivilege int32 + +const ( + SQLPrivilege_UNKNOWN SQLPrivilege = 0 + SQLPrivilege_SELECT SQLPrivilege = 1 + SQLPrivilege_CREATE SQLPrivilege = 2 + SQLPrivilege_INSERT SQLPrivilege = 3 + SQLPrivilege_UPDATE SQLPrivilege = 4 + SQLPrivilege_DELETE SQLPrivilege = 5 + SQLPrivilege_DROP SQLPrivilege = 6 + SQLPrivilege_ALTER SQLPrivilege = 7 +) + +// Enum value maps for SQLPrivilege. +var ( + SQLPrivilege_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SELECT", + 2: "CREATE", + 3: "INSERT", + 4: "UPDATE", + 5: "DELETE", + 6: "DROP", + 7: "ALTER", + } + SQLPrivilege_value = map[string]int32{ + "UNKNOWN": 0, + "SELECT": 1, + "CREATE": 2, + "INSERT": 3, + "UPDATE": 4, + "DELETE": 5, + "DROP": 6, + "ALTER": 7, + } +) + +func (x SQLPrivilege) Enum() *SQLPrivilege { + p := new(SQLPrivilege) + *p = x + return p +} + +func (x SQLPrivilege) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SQLPrivilege) Descriptor() protoreflect.EnumDescriptor { + return file_schema_proto_enumTypes[0].Descriptor() +} + +func (SQLPrivilege) Type() protoreflect.EnumType { + return &file_schema_proto_enumTypes[0] +} + +func (x SQLPrivilege) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SQLPrivilege.Descriptor instead. +func (SQLPrivilege) EnumDescriptor() ([]byte, []int) { + return file_schema_proto_rawDescGZIP(), []int{0} +} + type EntryTypeAction int32 const ( @@ -79,11 +143,11 @@ func (x EntryTypeAction) String() string { } func (EntryTypeAction) Descriptor() protoreflect.EnumDescriptor { - return file_schema_proto_enumTypes[0].Descriptor() + return file_schema_proto_enumTypes[1].Descriptor() } func (EntryTypeAction) Type() protoreflect.EnumType { - return &file_schema_proto_enumTypes[0] + return &file_schema_proto_enumTypes[1] } func (x EntryTypeAction) Number() protoreflect.EnumNumber { @@ -92,7 +156,7 @@ func (x EntryTypeAction) Number() protoreflect.EnumNumber { // Deprecated: Use EntryTypeAction.Descriptor instead. func (EntryTypeAction) EnumDescriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{0} + return file_schema_proto_rawDescGZIP(), []int{1} } type PermissionAction int32 @@ -127,11 +191,11 @@ func (x PermissionAction) String() string { } func (PermissionAction) Descriptor() protoreflect.EnumDescriptor { - return file_schema_proto_enumTypes[1].Descriptor() + return file_schema_proto_enumTypes[2].Descriptor() } func (PermissionAction) Type() protoreflect.EnumType { - return &file_schema_proto_enumTypes[1] + return &file_schema_proto_enumTypes[2] } func (x PermissionAction) Number() protoreflect.EnumNumber { @@ -140,7 +204,7 @@ func (x PermissionAction) Number() protoreflect.EnumNumber { // Deprecated: Use PermissionAction.Descriptor instead. func (PermissionAction) EnumDescriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{1} + return file_schema_proto_rawDescGZIP(), []int{2} } type TxMode int32 @@ -179,11 +243,11 @@ func (x TxMode) String() string { } func (TxMode) Descriptor() protoreflect.EnumDescriptor { - return file_schema_proto_enumTypes[2].Descriptor() + return file_schema_proto_enumTypes[3].Descriptor() } func (TxMode) Type() protoreflect.EnumType { - return &file_schema_proto_enumTypes[2] + return &file_schema_proto_enumTypes[3] } func (x TxMode) Number() protoreflect.EnumNumber { @@ -192,7 +256,7 @@ func (x TxMode) Number() protoreflect.EnumNumber { // Deprecated: Use TxMode.Descriptor instead. func (TxMode) EnumDescriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{2} + return file_schema_proto_rawDescGZIP(), []int{3} } type Key struct { @@ -314,6 +378,8 @@ type User struct { Createdat string `protobuf:"bytes,5,opt,name=createdat,proto3" json:"createdat,omitempty"` // Flag indicating whether the user is active or not Active bool `protobuf:"varint,6,opt,name=active,proto3" json:"active,omitempty"` + // List of SQL privileges + SqlPrivileges []SQLPrivilege `protobuf:"varint,7,rep,packed,name=sqlPrivileges,proto3,enum=immudb.schema.SQLPrivilege" json:"sqlPrivileges,omitempty"` } func (x *User) Reset() { @@ -383,6 +449,13 @@ func (x *User) GetActive() bool { return false } +func (x *User) GetSqlPrivileges() []SQLPrivilege { + if x != nil { + return x.SqlPrivileges + } + return nil +} + type UserList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7287,6 +7360,119 @@ func (x *ChangePermissionRequest) GetPermission() uint32 { return 0 } +type ChangeSQLPrivilegesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Action to perform + Action PermissionAction `protobuf:"varint,1,opt,name=action,proto3,enum=immudb.schema.PermissionAction" json:"action,omitempty"` + // Name of the user to update + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` + // Name of the database + Database string `protobuf:"bytes,3,opt,name=database,proto3" json:"database,omitempty"` + // SQL privileges to grant / revoke + Privileges []SQLPrivilege `protobuf:"varint,4,rep,packed,name=privileges,proto3,enum=immudb.schema.SQLPrivilege" json:"privileges,omitempty"` +} + +func (x *ChangeSQLPrivilegesRequest) Reset() { + *x = ChangeSQLPrivilegesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_schema_proto_msgTypes[100] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangeSQLPrivilegesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangeSQLPrivilegesRequest) ProtoMessage() {} + +func (x *ChangeSQLPrivilegesRequest) ProtoReflect() protoreflect.Message { + mi := &file_schema_proto_msgTypes[100] + 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 ChangeSQLPrivilegesRequest.ProtoReflect.Descriptor instead. +func (*ChangeSQLPrivilegesRequest) Descriptor() ([]byte, []int) { + return file_schema_proto_rawDescGZIP(), []int{100} +} + +func (x *ChangeSQLPrivilegesRequest) GetAction() PermissionAction { + if x != nil { + return x.Action + } + return PermissionAction_GRANT +} + +func (x *ChangeSQLPrivilegesRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *ChangeSQLPrivilegesRequest) GetDatabase() string { + if x != nil { + return x.Database + } + return "" +} + +func (x *ChangeSQLPrivilegesRequest) GetPrivileges() []SQLPrivilege { + if x != nil { + return x.Privileges + } + return nil +} + +type ChangeSQLPrivilegesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ChangeSQLPrivilegesResponse) Reset() { + *x = ChangeSQLPrivilegesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_schema_proto_msgTypes[101] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangeSQLPrivilegesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangeSQLPrivilegesResponse) ProtoMessage() {} + +func (x *ChangeSQLPrivilegesResponse) ProtoReflect() protoreflect.Message { + mi := &file_schema_proto_msgTypes[101] + 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 ChangeSQLPrivilegesResponse.ProtoReflect.Descriptor instead. +func (*ChangeSQLPrivilegesResponse) Descriptor() ([]byte, []int) { + return file_schema_proto_rawDescGZIP(), []int{101} +} + type SetActiveUserRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7301,7 +7487,7 @@ type SetActiveUserRequest struct { func (x *SetActiveUserRequest) Reset() { *x = SetActiveUserRequest{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[100] + mi := &file_schema_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7314,7 +7500,7 @@ func (x *SetActiveUserRequest) String() string { func (*SetActiveUserRequest) ProtoMessage() {} func (x *SetActiveUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[100] + mi := &file_schema_proto_msgTypes[102] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7327,7 +7513,7 @@ func (x *SetActiveUserRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetActiveUserRequest.ProtoReflect.Descriptor instead. func (*SetActiveUserRequest) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{100} + return file_schema_proto_rawDescGZIP(), []int{102} } func (x *SetActiveUserRequest) GetActive() bool { @@ -7356,7 +7542,7 @@ type DatabaseListResponse struct { func (x *DatabaseListResponse) Reset() { *x = DatabaseListResponse{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[101] + mi := &file_schema_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7369,7 +7555,7 @@ func (x *DatabaseListResponse) String() string { func (*DatabaseListResponse) ProtoMessage() {} func (x *DatabaseListResponse) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[101] + mi := &file_schema_proto_msgTypes[103] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7382,7 +7568,7 @@ func (x *DatabaseListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DatabaseListResponse.ProtoReflect.Descriptor instead. func (*DatabaseListResponse) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{101} + return file_schema_proto_rawDescGZIP(), []int{103} } func (x *DatabaseListResponse) GetDatabases() []*Database { @@ -7401,7 +7587,7 @@ type DatabaseListRequestV2 struct { func (x *DatabaseListRequestV2) Reset() { *x = DatabaseListRequestV2{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[102] + mi := &file_schema_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7414,7 +7600,7 @@ func (x *DatabaseListRequestV2) String() string { func (*DatabaseListRequestV2) ProtoMessage() {} func (x *DatabaseListRequestV2) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[102] + mi := &file_schema_proto_msgTypes[104] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7427,7 +7613,7 @@ func (x *DatabaseListRequestV2) ProtoReflect() protoreflect.Message { // Deprecated: Use DatabaseListRequestV2.ProtoReflect.Descriptor instead. func (*DatabaseListRequestV2) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{102} + return file_schema_proto_rawDescGZIP(), []int{104} } type DatabaseListResponseV2 struct { @@ -7442,7 +7628,7 @@ type DatabaseListResponseV2 struct { func (x *DatabaseListResponseV2) Reset() { *x = DatabaseListResponseV2{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[103] + mi := &file_schema_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7455,7 +7641,7 @@ func (x *DatabaseListResponseV2) String() string { func (*DatabaseListResponseV2) ProtoMessage() {} func (x *DatabaseListResponseV2) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[103] + mi := &file_schema_proto_msgTypes[105] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7468,7 +7654,7 @@ func (x *DatabaseListResponseV2) ProtoReflect() protoreflect.Message { // Deprecated: Use DatabaseListResponseV2.ProtoReflect.Descriptor instead. func (*DatabaseListResponseV2) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{103} + return file_schema_proto_rawDescGZIP(), []int{105} } func (x *DatabaseListResponseV2) GetDatabases() []*DatabaseInfo { @@ -7502,7 +7688,7 @@ type DatabaseInfo struct { func (x *DatabaseInfo) Reset() { *x = DatabaseInfo{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[104] + mi := &file_schema_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7515,7 +7701,7 @@ func (x *DatabaseInfo) String() string { func (*DatabaseInfo) ProtoMessage() {} func (x *DatabaseInfo) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[104] + mi := &file_schema_proto_msgTypes[106] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7528,7 +7714,7 @@ func (x *DatabaseInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use DatabaseInfo.ProtoReflect.Descriptor instead. func (*DatabaseInfo) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{104} + return file_schema_proto_rawDescGZIP(), []int{106} } func (x *DatabaseInfo) GetName() string { @@ -7592,7 +7778,7 @@ type Chunk struct { func (x *Chunk) Reset() { *x = Chunk{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[105] + mi := &file_schema_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7605,7 +7791,7 @@ func (x *Chunk) String() string { func (*Chunk) ProtoMessage() {} func (x *Chunk) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[105] + mi := &file_schema_proto_msgTypes[107] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7618,7 +7804,7 @@ func (x *Chunk) ProtoReflect() protoreflect.Message { // Deprecated: Use Chunk.ProtoReflect.Descriptor instead. func (*Chunk) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{105} + return file_schema_proto_rawDescGZIP(), []int{107} } func (x *Chunk) GetContent() []byte { @@ -7647,7 +7833,7 @@ type UseSnapshotRequest struct { func (x *UseSnapshotRequest) Reset() { *x = UseSnapshotRequest{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[106] + mi := &file_schema_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7660,7 +7846,7 @@ func (x *UseSnapshotRequest) String() string { func (*UseSnapshotRequest) ProtoMessage() {} func (x *UseSnapshotRequest) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[106] + mi := &file_schema_proto_msgTypes[108] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7673,7 +7859,7 @@ func (x *UseSnapshotRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UseSnapshotRequest.ProtoReflect.Descriptor instead. func (*UseSnapshotRequest) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{106} + return file_schema_proto_rawDescGZIP(), []int{108} } func (x *UseSnapshotRequest) GetSinceTx() uint64 { @@ -7706,7 +7892,7 @@ type SQLExecRequest struct { func (x *SQLExecRequest) Reset() { *x = SQLExecRequest{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[107] + mi := &file_schema_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7719,7 +7905,7 @@ func (x *SQLExecRequest) String() string { func (*SQLExecRequest) ProtoMessage() {} func (x *SQLExecRequest) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[107] + mi := &file_schema_proto_msgTypes[109] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7732,7 +7918,7 @@ func (x *SQLExecRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SQLExecRequest.ProtoReflect.Descriptor instead. func (*SQLExecRequest) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{107} + return file_schema_proto_rawDescGZIP(), []int{109} } func (x *SQLExecRequest) GetSql() string { @@ -7776,7 +7962,7 @@ type SQLQueryRequest struct { func (x *SQLQueryRequest) Reset() { *x = SQLQueryRequest{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[108] + mi := &file_schema_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7789,7 +7975,7 @@ func (x *SQLQueryRequest) String() string { func (*SQLQueryRequest) ProtoMessage() {} func (x *SQLQueryRequest) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[108] + mi := &file_schema_proto_msgTypes[110] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7802,7 +7988,7 @@ func (x *SQLQueryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SQLQueryRequest.ProtoReflect.Descriptor instead. func (*SQLQueryRequest) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{108} + return file_schema_proto_rawDescGZIP(), []int{110} } func (x *SQLQueryRequest) GetSql() string { @@ -7848,7 +8034,7 @@ type NamedParam struct { func (x *NamedParam) Reset() { *x = NamedParam{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[109] + mi := &file_schema_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7861,7 +8047,7 @@ func (x *NamedParam) String() string { func (*NamedParam) ProtoMessage() {} func (x *NamedParam) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[109] + mi := &file_schema_proto_msgTypes[111] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7874,7 +8060,7 @@ func (x *NamedParam) ProtoReflect() protoreflect.Message { // Deprecated: Use NamedParam.ProtoReflect.Descriptor instead. func (*NamedParam) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{109} + return file_schema_proto_rawDescGZIP(), []int{111} } func (x *NamedParam) GetName() string { @@ -7905,7 +8091,7 @@ type SQLExecResult struct { func (x *SQLExecResult) Reset() { *x = SQLExecResult{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[110] + mi := &file_schema_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7918,7 +8104,7 @@ func (x *SQLExecResult) String() string { func (*SQLExecResult) ProtoMessage() {} func (x *SQLExecResult) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[110] + mi := &file_schema_proto_msgTypes[112] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7931,7 +8117,7 @@ func (x *SQLExecResult) ProtoReflect() protoreflect.Message { // Deprecated: Use SQLExecResult.ProtoReflect.Descriptor instead. func (*SQLExecResult) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{110} + return file_schema_proto_rawDescGZIP(), []int{112} } func (x *SQLExecResult) GetTxs() []*CommittedSQLTx { @@ -7966,7 +8152,7 @@ type CommittedSQLTx struct { func (x *CommittedSQLTx) Reset() { *x = CommittedSQLTx{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[111] + mi := &file_schema_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7979,7 +8165,7 @@ func (x *CommittedSQLTx) String() string { func (*CommittedSQLTx) ProtoMessage() {} func (x *CommittedSQLTx) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[111] + mi := &file_schema_proto_msgTypes[113] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7992,7 +8178,7 @@ func (x *CommittedSQLTx) ProtoReflect() protoreflect.Message { // Deprecated: Use CommittedSQLTx.ProtoReflect.Descriptor instead. func (*CommittedSQLTx) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{111} + return file_schema_proto_rawDescGZIP(), []int{113} } func (x *CommittedSQLTx) GetHeader() *TxHeader { @@ -8037,7 +8223,7 @@ type SQLQueryResult struct { func (x *SQLQueryResult) Reset() { *x = SQLQueryResult{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[112] + mi := &file_schema_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8050,7 +8236,7 @@ func (x *SQLQueryResult) String() string { func (*SQLQueryResult) ProtoMessage() {} func (x *SQLQueryResult) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[112] + mi := &file_schema_proto_msgTypes[114] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8063,7 +8249,7 @@ func (x *SQLQueryResult) ProtoReflect() protoreflect.Message { // Deprecated: Use SQLQueryResult.ProtoReflect.Descriptor instead. func (*SQLQueryResult) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{112} + return file_schema_proto_rawDescGZIP(), []int{114} } func (x *SQLQueryResult) GetColumns() []*Column { @@ -8094,7 +8280,7 @@ type Column struct { func (x *Column) Reset() { *x = Column{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[113] + mi := &file_schema_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8107,7 +8293,7 @@ func (x *Column) String() string { func (*Column) ProtoMessage() {} func (x *Column) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[113] + mi := &file_schema_proto_msgTypes[115] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8120,7 +8306,7 @@ func (x *Column) ProtoReflect() protoreflect.Message { // Deprecated: Use Column.ProtoReflect.Descriptor instead. func (*Column) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{113} + return file_schema_proto_rawDescGZIP(), []int{115} } func (x *Column) GetName() string { @@ -8151,7 +8337,7 @@ type Row struct { func (x *Row) Reset() { *x = Row{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[114] + mi := &file_schema_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8164,7 +8350,7 @@ func (x *Row) String() string { func (*Row) ProtoMessage() {} func (x *Row) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[114] + mi := &file_schema_proto_msgTypes[116] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8177,7 +8363,7 @@ func (x *Row) ProtoReflect() protoreflect.Message { // Deprecated: Use Row.ProtoReflect.Descriptor instead. func (*Row) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{114} + return file_schema_proto_rawDescGZIP(), []int{116} } func (x *Row) GetColumns() []string { @@ -8214,7 +8400,7 @@ type SQLValue struct { func (x *SQLValue) Reset() { *x = SQLValue{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[115] + mi := &file_schema_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8227,7 +8413,7 @@ func (x *SQLValue) String() string { func (*SQLValue) ProtoMessage() {} func (x *SQLValue) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[115] + mi := &file_schema_proto_msgTypes[117] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8240,7 +8426,7 @@ func (x *SQLValue) ProtoReflect() protoreflect.Message { // Deprecated: Use SQLValue.ProtoReflect.Descriptor instead. func (*SQLValue) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{115} + return file_schema_proto_rawDescGZIP(), []int{117} } func (m *SQLValue) GetValue() isSQLValue_Value { @@ -8364,7 +8550,7 @@ type NewTxRequest struct { func (x *NewTxRequest) Reset() { *x = NewTxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[116] + mi := &file_schema_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8377,7 +8563,7 @@ func (x *NewTxRequest) String() string { func (*NewTxRequest) ProtoMessage() {} func (x *NewTxRequest) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[116] + mi := &file_schema_proto_msgTypes[118] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8390,7 +8576,7 @@ func (x *NewTxRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NewTxRequest.ProtoReflect.Descriptor instead. func (*NewTxRequest) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{116} + return file_schema_proto_rawDescGZIP(), []int{118} } func (x *NewTxRequest) GetMode() TxMode { @@ -8433,7 +8619,7 @@ type NewTxResponse struct { func (x *NewTxResponse) Reset() { *x = NewTxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[117] + mi := &file_schema_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8446,7 +8632,7 @@ func (x *NewTxResponse) String() string { func (*NewTxResponse) ProtoMessage() {} func (x *NewTxResponse) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[117] + mi := &file_schema_proto_msgTypes[119] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8459,7 +8645,7 @@ func (x *NewTxResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NewTxResponse.ProtoReflect.Descriptor instead. func (*NewTxResponse) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{117} + return file_schema_proto_rawDescGZIP(), []int{119} } func (x *NewTxResponse) GetTransactionID() string { @@ -8483,7 +8669,7 @@ type ErrorInfo struct { func (x *ErrorInfo) Reset() { *x = ErrorInfo{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[118] + mi := &file_schema_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8496,7 +8682,7 @@ func (x *ErrorInfo) String() string { func (*ErrorInfo) ProtoMessage() {} func (x *ErrorInfo) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[118] + mi := &file_schema_proto_msgTypes[120] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8509,7 +8695,7 @@ func (x *ErrorInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ErrorInfo.ProtoReflect.Descriptor instead. func (*ErrorInfo) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{118} + return file_schema_proto_rawDescGZIP(), []int{120} } func (x *ErrorInfo) GetCode() string { @@ -8538,7 +8724,7 @@ type DebugInfo struct { func (x *DebugInfo) Reset() { *x = DebugInfo{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[119] + mi := &file_schema_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8551,7 +8737,7 @@ func (x *DebugInfo) String() string { func (*DebugInfo) ProtoMessage() {} func (x *DebugInfo) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[119] + mi := &file_schema_proto_msgTypes[121] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8564,7 +8750,7 @@ func (x *DebugInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use DebugInfo.ProtoReflect.Descriptor instead. func (*DebugInfo) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{119} + return file_schema_proto_rawDescGZIP(), []int{121} } func (x *DebugInfo) GetStack() string { @@ -8586,7 +8772,7 @@ type RetryInfo struct { func (x *RetryInfo) Reset() { *x = RetryInfo{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[120] + mi := &file_schema_proto_msgTypes[122] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8599,7 +8785,7 @@ func (x *RetryInfo) String() string { func (*RetryInfo) ProtoMessage() {} func (x *RetryInfo) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[120] + mi := &file_schema_proto_msgTypes[122] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8612,7 +8798,7 @@ func (x *RetryInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use RetryInfo.ProtoReflect.Descriptor instead. func (*RetryInfo) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{120} + return file_schema_proto_rawDescGZIP(), []int{122} } func (x *RetryInfo) GetRetryDelay() int32 { @@ -8636,7 +8822,7 @@ type TruncateDatabaseRequest struct { func (x *TruncateDatabaseRequest) Reset() { *x = TruncateDatabaseRequest{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[121] + mi := &file_schema_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8649,7 +8835,7 @@ func (x *TruncateDatabaseRequest) String() string { func (*TruncateDatabaseRequest) ProtoMessage() {} func (x *TruncateDatabaseRequest) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[121] + mi := &file_schema_proto_msgTypes[123] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8662,7 +8848,7 @@ func (x *TruncateDatabaseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TruncateDatabaseRequest.ProtoReflect.Descriptor instead. func (*TruncateDatabaseRequest) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{121} + return file_schema_proto_rawDescGZIP(), []int{123} } func (x *TruncateDatabaseRequest) GetDatabase() string { @@ -8691,7 +8877,7 @@ type TruncateDatabaseResponse struct { func (x *TruncateDatabaseResponse) Reset() { *x = TruncateDatabaseResponse{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[122] + mi := &file_schema_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8704,7 +8890,7 @@ func (x *TruncateDatabaseResponse) String() string { func (*TruncateDatabaseResponse) ProtoMessage() {} func (x *TruncateDatabaseResponse) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[122] + mi := &file_schema_proto_msgTypes[124] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8717,7 +8903,7 @@ func (x *TruncateDatabaseResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TruncateDatabaseResponse.ProtoReflect.Descriptor instead. func (*TruncateDatabaseResponse) Descriptor() ([]byte, []int) { - return file_schema_proto_rawDescGZIP(), []int{122} + return file_schema_proto_rawDescGZIP(), []int{124} } func (x *TruncateDatabaseResponse) GetDatabase() string { @@ -8740,7 +8926,7 @@ type Precondition_KeyMustExistPrecondition struct { func (x *Precondition_KeyMustExistPrecondition) Reset() { *x = Precondition_KeyMustExistPrecondition{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[123] + mi := &file_schema_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8753,7 +8939,7 @@ func (x *Precondition_KeyMustExistPrecondition) String() string { func (*Precondition_KeyMustExistPrecondition) ProtoMessage() {} func (x *Precondition_KeyMustExistPrecondition) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[123] + mi := &file_schema_proto_msgTypes[125] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8789,7 +8975,7 @@ type Precondition_KeyMustNotExistPrecondition struct { func (x *Precondition_KeyMustNotExistPrecondition) Reset() { *x = Precondition_KeyMustNotExistPrecondition{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[124] + mi := &file_schema_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8802,7 +8988,7 @@ func (x *Precondition_KeyMustNotExistPrecondition) String() string { func (*Precondition_KeyMustNotExistPrecondition) ProtoMessage() {} func (x *Precondition_KeyMustNotExistPrecondition) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[124] + mi := &file_schema_proto_msgTypes[126] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8840,7 +9026,7 @@ type Precondition_KeyNotModifiedAfterTXPrecondition struct { func (x *Precondition_KeyNotModifiedAfterTXPrecondition) Reset() { *x = Precondition_KeyNotModifiedAfterTXPrecondition{} if protoimpl.UnsafeEnabled { - mi := &file_schema_proto_msgTypes[125] + mi := &file_schema_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8853,7 +9039,7 @@ func (x *Precondition_KeyNotModifiedAfterTXPrecondition) String() string { func (*Precondition_KeyNotModifiedAfterTXPrecondition) ProtoMessage() {} func (x *Precondition_KeyNotModifiedAfterTXPrecondition) ProtoReflect() protoreflect.Message { - mi := &file_schema_proto_msgTypes[125] + mi := &file_schema_proto_msgTypes[127] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8902,7 +9088,7 @@ var file_schema_proto_rawDesc = []byte{ 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xab, 0x01, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xee, 0x01, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, @@ -8913,214 +9099,247 @@ var file_schema_proto_rawDesc = []byte{ 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x61, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x35, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x7f, 0x0a, 0x11, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x21, 0x0a, - 0x0b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x41, 0x0a, 0x0d, 0x73, 0x71, 0x6c, 0x50, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, + 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x52, 0x0d, 0x73, 0x71, 0x6c, 0x50, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x22, 0x35, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, + 0x7f, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x22, 0x21, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x75, + 0x73, 0x65, 0x72, 0x22, 0x6f, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, - 0x22, 0x6f, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x20, 0x0a, - 0x0b, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0b, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, - 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x22, 0x3e, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x22, 0x3f, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x61, 0x72, 0x6e, - 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, - 0x6e, 0x67, 0x22, 0x20, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, - 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x26, 0x0a, 0x0a, 0x4d, 0x54, 0x4c, 0x53, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x70, 0x0a, 0x12, - 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x53, - 0x0a, 0x13, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x55, 0x49, - 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, - 0x55, 0x49, 0x44, 0x22, 0x80, 0x04, 0x0a, 0x0c, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x0c, 0x6b, 0x65, 0x79, 0x4d, 0x75, 0x73, 0x74, 0x45, - 0x78, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x4d, 0x75, 0x73, 0x74, 0x45, - 0x78, 0x69, 0x73, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x00, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x4d, 0x75, 0x73, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, - 0x12, 0x63, 0x0a, 0x0f, 0x6b, 0x65, 0x79, 0x4d, 0x75, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x45, 0x78, - 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x4d, 0x75, 0x73, 0x74, 0x4e, 0x6f, - 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x6b, 0x65, 0x79, 0x4d, 0x75, 0x73, 0x74, 0x4e, 0x6f, 0x74, - 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x75, 0x0a, 0x15, 0x6b, 0x65, 0x79, 0x4e, 0x6f, 0x74, 0x4d, - 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x54, 0x58, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x4e, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x22, 0x3e, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x22, 0x3f, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x77, + 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x77, 0x61, + 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x22, 0x20, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x68, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x26, 0x0a, 0x0a, 0x4d, 0x54, 0x4c, 0x53, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, + 0x70, 0x0a, 0x12, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x22, 0x0a, + 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x53, 0x0a, 0x13, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x55, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x55, 0x55, 0x49, 0x44, 0x22, 0x80, 0x04, 0x0a, 0x0c, 0x50, 0x72, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x0c, 0x6b, 0x65, 0x79, 0x4d, 0x75, + 0x73, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x72, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x4d, 0x75, + 0x73, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x4d, 0x75, 0x73, 0x74, 0x45, 0x78, + 0x69, 0x73, 0x74, 0x12, 0x63, 0x0a, 0x0f, 0x6b, 0x65, 0x79, 0x4d, 0x75, 0x73, 0x74, 0x4e, 0x6f, + 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x72, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x4d, 0x75, 0x73, + 0x74, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x6b, 0x65, 0x79, 0x4d, 0x75, 0x73, 0x74, + 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x75, 0x0a, 0x15, 0x6b, 0x65, 0x79, 0x4e, + 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x54, + 0x58, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x4e, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x54, 0x58, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x15, 0x6b, 0x65, 0x79, 0x4e, 0x6f, 0x74, + 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x54, 0x58, 0x1a, + 0x2c, 0x0a, 0x18, 0x4b, 0x65, 0x79, 0x4d, 0x75, 0x73, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x50, + 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x1a, 0x2f, 0x0a, + 0x1b, 0x4b, 0x65, 0x79, 0x4d, 0x75, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, + 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x1a, 0x49, + 0x0a, 0x21, 0x4b, 0x65, 0x79, 0x4e, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x54, 0x58, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x15, 0x6b, 0x65, 0x79, 0x4e, 0x6f, 0x74, 0x4d, 0x6f, 0x64, - 0x69, 0x66, 0x69, 0x65, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x54, 0x58, 0x1a, 0x2c, 0x0a, 0x18, - 0x4b, 0x65, 0x79, 0x4d, 0x75, 0x73, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x50, 0x72, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x1a, 0x2f, 0x0a, 0x1b, 0x4b, 0x65, - 0x79, 0x4d, 0x75, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x50, 0x72, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x1a, 0x49, 0x0a, 0x21, 0x4b, - 0x65, 0x79, 0x4e, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x41, 0x66, 0x74, - 0x65, 0x72, 0x54, 0x58, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x42, 0x0e, 0x0a, 0x0c, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x69, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x56, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x22, 0xea, 0x01, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x74, - 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x74, 0x78, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x0c, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x64, 0x42, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x42, 0x0e, 0x0a, 0x0c, 0x70, 0x72, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x69, 0x0a, 0x08, 0x4b, 0x65, 0x79, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x35, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x4b, 0x56, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x22, 0xea, 0x01, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x0e, + 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x74, 0x78, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x0c, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x64, 0x42, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x64, 0x42, 0x79, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x56, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x78, + 0x70, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x74, 0x78, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x54, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x04, 0x61, 0x74, 0x54, 0x78, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x56, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, + 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa3, 0x01, 0x0a, 0x02, 0x4f, 0x70, 0x12, + 0x29, 0x0a, 0x02, 0x6b, 0x76, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x02, 0x6b, 0x76, 0x12, 0x30, 0x0a, 0x04, 0x7a, 0x41, + 0x64, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x04, 0x7a, 0x41, 0x64, 0x64, 0x12, 0x33, 0x0a, 0x03, + 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x42, - 0x79, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x56, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, - 0x72, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, - 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x94, - 0x01, 0x0a, 0x09, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x74, 0x78, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, - 0x0a, 0x04, 0x61, 0x74, 0x54, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x61, 0x74, - 0x54, 0x78, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x56, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa3, 0x01, 0x0a, 0x02, 0x4f, 0x70, 0x12, 0x29, 0x0a, 0x02, - 0x6b, 0x76, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x48, 0x00, 0x52, 0x02, 0x6b, 0x76, 0x12, 0x30, 0x0a, 0x04, 0x7a, 0x41, 0x64, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x48, 0x00, 0x52, 0x04, 0x7a, 0x41, 0x64, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x72, 0x65, 0x66, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x03, 0x72, 0x65, 0x66, 0x42, 0x0b, - 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9e, 0x01, 0x0a, 0x0e, - 0x45, 0x78, 0x65, 0x63, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, - 0x0a, 0x0a, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x4f, 0x70, 0x52, 0x0a, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x12, 0x41, 0x0a, 0x0d, 0x70, 0x72, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x70, - 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x39, 0x0a, 0x07, - 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, - 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x06, 0x5a, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x03, 0x73, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x54, 0x78, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x61, 0x74, 0x54, 0x78, 0x22, 0x3b, 0x0a, 0x08, - 0x5a, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x95, 0x02, 0x0a, 0x0b, 0x53, 0x63, - 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x65, - 0x6b, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x73, 0x65, 0x65, 0x6b, - 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x06, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x70, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, - 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, - 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x12, - 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x53, 0x65, 0x65, 0x6b, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, - 0x65, 0x53, 0x65, 0x65, 0x6b, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, - 0x76, 0x65, 0x45, 0x6e, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x45, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x22, 0x23, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x16, - 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, - 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x22, 0x0a, 0x0a, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x47, 0x0a, 0x09, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x22, 0xf1, 0x01, 0x0a, 0x08, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x65, 0x76, 0x41, 0x6c, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x07, 0x70, 0x72, 0x65, 0x76, 0x41, 0x6c, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x65, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x65, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x65, 0x48, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x02, 0x65, 0x48, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x6c, 0x54, 0x78, 0x49, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x62, 0x6c, 0x54, 0x78, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x62, 0x6c, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, - 0x62, 0x6c, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x48, 0x0a, 0x0a, 0x54, 0x78, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, - 0x65, 0x64, 0x54, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x72, - 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x65, - 0x78, 0x74, 0x72, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, - 0x61, 0x22, 0x63, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x50, 0x72, 0x6f, 0x6f, 0x66, - 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x78, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x78, 0x49, 0x64, - 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x78, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x78, 0x49, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, - 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x6e, 0x65, 0x61, - 0x72, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x2a, 0x0a, - 0x10, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x54, 0x65, 0x72, 0x6d, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x50, - 0x72, 0x6f, 0x6f, 0x66, 0x54, 0x65, 0x72, 0x6d, 0x73, 0x12, 0x47, 0x0a, 0x0f, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x73, 0x22, 0xc8, 0x03, 0x0a, 0x09, 0x44, 0x75, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x03, 0x72, 0x65, + 0x66, 0x42, 0x0b, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9e, + 0x01, 0x0a, 0x0e, 0x45, 0x78, 0x65, 0x63, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x31, 0x0a, 0x0a, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4f, 0x70, 0x52, 0x0a, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x12, 0x41, 0x0a, 0x0d, + 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0x39, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x65, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x06, 0x5a, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x03, 0x73, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x6e, 0x74, + 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, + 0x65, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, + 0x74, 0x54, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x61, 0x74, 0x54, 0x78, 0x22, + 0x3b, 0x0a, 0x08, 0x5a, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x07, 0x65, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x95, 0x02, 0x0a, + 0x0b, 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x65, 0x65, 0x6b, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x73, + 0x65, 0x65, 0x6b, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x16, + 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, + 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, + 0x57, 0x61, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, + 0x69, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x53, + 0x65, 0x65, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x73, 0x69, 0x76, 0x65, 0x53, 0x65, 0x65, 0x6b, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x73, 0x69, 0x76, 0x65, 0x45, 0x6e, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x45, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x22, 0x23, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x50, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x22, 0x0a, 0x0a, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x47, 0x0a, + 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xf1, 0x01, 0x0a, 0x08, 0x54, 0x78, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x65, 0x76, 0x41, 0x6c, 0x68, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x72, 0x65, 0x76, 0x41, 0x6c, 0x68, 0x12, 0x0e, 0x0a, + 0x02, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x74, 0x73, 0x12, 0x1a, 0x0a, + 0x08, 0x6e, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x6e, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x65, 0x48, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x65, 0x48, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x6c, 0x54, + 0x78, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x62, 0x6c, 0x54, 0x78, 0x49, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x6c, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x06, 0x62, 0x6c, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x48, 0x0a, 0x0a, 0x54, 0x78, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x75, 0x6e, + 0x63, 0x61, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0d, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x44, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x65, + 0x78, 0x74, 0x72, 0x61, 0x22, 0x63, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x78, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, + 0x78, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x78, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, + 0x78, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0c, 0x52, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x12, 0x4c, 0x69, + 0x6e, 0x65, 0x61, 0x72, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x12, 0x2a, 0x0a, 0x10, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x54, + 0x65, 0x72, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x6c, 0x69, 0x6e, 0x65, + 0x61, 0x72, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x54, 0x65, 0x72, 0x6d, 0x73, 0x12, 0x47, 0x0a, 0x0f, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, + 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, + 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x22, 0xc8, 0x03, 0x0a, 0x09, 0x44, 0x75, 0x61, 0x6c, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x12, 0x3f, 0x0a, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x78, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x78, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x78, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x78, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0e, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x2a, 0x0a, + 0x10, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x6f, + 0x66, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x42, 0x6c, 0x54, 0x78, 0x41, 0x6c, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x54, 0x78, 0x41, 0x6c, 0x68, 0x12, + 0x2e, 0x0a, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, + 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x12, 0x6c, 0x61, 0x73, + 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, + 0x3c, 0x0a, 0x0b, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x52, 0x0b, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x51, 0x0a, + 0x12, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x72, + 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x12, 0x4c, 0x69, + 0x6e, 0x65, 0x61, 0x72, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x22, 0xe3, 0x01, 0x0a, 0x0b, 0x44, 0x75, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x56, 0x32, 0x12, 0x3f, 0x0a, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, @@ -9134,1475 +9353,1477 @@ var file_schema_proto_rawDesc = []byte{ 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, - 0x79, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x42, 0x6c, 0x54, 0x78, 0x41, 0x6c, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x54, 0x78, 0x41, 0x6c, 0x68, 0x12, 0x2e, 0x0a, 0x12, - 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, - 0x6f, 0x66, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, - 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x3c, 0x0a, 0x0b, - 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x0b, 0x6c, - 0x69, 0x6e, 0x65, 0x61, 0x72, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x51, 0x0a, 0x12, 0x4c, 0x69, - 0x6e, 0x65, 0x61, 0x72, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x41, 0x64, 0x76, - 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x12, 0x4c, 0x69, 0x6e, 0x65, 0x61, - 0x72, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0xe3, 0x01, - 0x0a, 0x0b, 0x44, 0x75, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x56, 0x32, 0x12, 0x3f, 0x0a, - 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x0e, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x3f, - 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, - 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, - 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, - 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0c, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x22, 0xce, 0x01, 0x0a, 0x02, 0x54, 0x78, 0x12, 0x2f, 0x0a, 0x06, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x07, 0x65, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x32, 0x0a, - 0x09, 0x6b, 0x76, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6b, 0x76, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x12, 0x31, 0x0a, 0x08, 0x7a, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x5a, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x7a, 0x45, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x07, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x06, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x76, 0x4c, - 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x76, 0x4c, 0x65, 0x6e, 0x12, 0x35, - 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x4b, 0x56, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x0a, - 0x4b, 0x56, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x22, 0x0a, 0x0c, 0x6e, 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x61, 0x62, 0x6c, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6e, 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x61, - 0x62, 0x6c, 0x65, 0x22, 0x2a, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x22, - 0xa1, 0x01, 0x0a, 0x0c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, - 0x12, 0x21, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x52, - 0x02, 0x74, 0x78, 0x12, 0x36, 0x0a, 0x09, 0x64, 0x75, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x6f, 0x66, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x75, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x6f, 0x66, - 0x52, 0x09, 0x64, 0x75, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x36, 0x0a, 0x09, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x54, 0x78, 0x56, 0x32, 0x12, 0x21, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x52, 0x02, 0x74, 0x78, 0x12, 0x38, 0x0a, 0x09, 0x64, 0x75, 0x61, - 0x6c, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x75, 0x61, - 0x6c, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x56, 0x32, 0x52, 0x09, 0x64, 0x75, 0x61, 0x6c, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x12, 0x36, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xc5, 0x01, 0x0a, 0x0f, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x2a, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x3f, 0x0a, 0x0c, 0x76, - 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x79, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0xce, 0x01, 0x0a, 0x02, 0x54, 0x78, 0x12, 0x2f, 0x0a, + 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x30, + 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x12, 0x32, 0x0a, 0x09, 0x6b, 0x76, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6b, 0x76, 0x45, 0x6e, 0x74, + 0x72, 0x69, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x08, 0x7a, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x7a, + 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x07, 0x54, 0x78, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x76, 0x4c, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x76, 0x4c, 0x65, + 0x6e, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x56, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x85, + 0x01, 0x0a, 0x0a, 0x4b, 0x56, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, + 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x78, 0x70, 0x69, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x6e, 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x61, 0x62, + 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6e, 0x6f, 0x6e, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x2a, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, + 0x41, 0x74, 0x22, 0xa1, 0x01, 0x0a, 0x0c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x54, 0x78, 0x12, 0x21, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x54, 0x78, 0x52, 0x02, 0x74, 0x78, 0x12, 0x36, 0x0a, 0x09, 0x64, 0x75, 0x61, 0x6c, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x75, 0x61, 0x6c, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x52, 0x09, 0x64, 0x75, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x36, + 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x56, 0x32, 0x12, 0x21, 0x0a, 0x02, 0x74, 0x78, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x52, 0x02, 0x74, 0x78, 0x12, 0x38, 0x0a, 0x09, + 0x64, 0x75, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x44, 0x75, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x56, 0x32, 0x52, 0x09, 0x64, 0x75, 0x61, + 0x6c, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x36, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xc5, + 0x01, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x3f, + 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, + 0x78, 0x52, 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x12, + 0x45, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, + 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, + 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, + 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x50, 0x0a, 0x0e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, + 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x65, 0x61, 0x66, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x6c, 0x65, 0x61, 0x66, 0x12, 0x14, 0x0a, 0x05, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x77, 0x69, 0x64, + 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0c, 0x52, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x22, 0x92, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x03, 0x4b, 0x56, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x4b, + 0x56, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x12, 0x41, 0x0a, 0x0d, 0x70, 0x72, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x52, 0x0c, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x12, 0x45, 0x0a, 0x0e, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x22, 0x50, 0x0a, 0x0e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, - 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x65, 0x61, 0x66, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x6c, 0x65, 0x61, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, - 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x05, - 0x74, 0x65, 0x72, 0x6d, 0x73, 0x22, 0x92, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x03, 0x4b, 0x56, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x4b, 0x56, 0x73, 0x12, - 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x12, 0x41, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, - 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x70, 0x72, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x0a, 0x4b, - 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x61, - 0x74, 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x61, 0x74, 0x54, 0x78, 0x12, - 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, - 0x61, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, - 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0x3e, 0x0a, 0x0e, 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0c, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, - 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, - 0x78, 0x22, 0x59, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, + 0x61, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, + 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x84, 0x01, + 0x0a, 0x0a, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, + 0x0a, 0x04, 0x61, 0x74, 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x61, 0x74, + 0x54, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x12, 0x16, 0x0a, 0x06, + 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, + 0x57, 0x61, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x74, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x0a, 0x0e, 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, - 0x63, 0x65, 0x54, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x22, 0x75, 0x0a, 0x14, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x52, 0x0a, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, - 0x65, 0x54, 0x78, 0x22, 0x75, 0x0a, 0x14, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x6b, - 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, - 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x70, 0x72, - 0x6f, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0xc8, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x28, - 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x6e, 0x75, 0x6d, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, - 0x6e, 0x75, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x11, - 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x69, 0x7a, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x73, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x42, 0x0a, 0x0e, 0x48, 0x65, - 0x61, 0x6c, 0x74, 0x68, 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, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x7a, - 0x0a, 0x16, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x12, 0x36, 0x0a, 0x16, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x16, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0xe0, 0x01, 0x0a, 0x0e, 0x49, - 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x64, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x64, 0x62, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x74, 0x78, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x36, 0x0a, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, - 0x64, 0x54, 0x78, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x70, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x12, 0x2e, 0x0a, - 0x12, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x54, 0x78, 0x48, - 0x61, 0x73, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x70, 0x72, 0x65, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x22, 0xd5, 0x01, - 0x0a, 0x10, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x64, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, - 0x54, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x61, 0x74, 0x54, 0x78, 0x12, 0x1a, - 0x0a, 0x08, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, - 0x57, 0x61, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, - 0x69, 0x74, 0x12, 0x41, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x1a, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x10, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, - 0x10, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, - 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, - 0x6e, 0x63, 0x65, 0x54, 0x78, 0x22, 0x8f, 0x01, 0x0a, 0x0b, 0x5a, 0x41, 0x64, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x03, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x12, 0x0a, 0x04, 0x61, 0x74, 0x54, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x61, - 0x74, 0x54, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x12, - 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x22, 0x1d, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x22, 0xf2, 0x02, 0x0a, 0x0c, 0x5a, 0x53, 0x63, 0x61, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x65, - 0x6b, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x73, 0x65, 0x65, 0x6b, - 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x65, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x73, 0x65, 0x65, 0x6b, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x65, 0x6b, 0x41, 0x74, 0x54, 0x78, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x65, 0x6b, 0x41, 0x74, 0x54, 0x78, 0x12, 0x24, 0x0a, - 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x53, 0x65, 0x65, 0x6b, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x53, - 0x65, 0x65, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, - 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x30, 0x0a, - 0x08, 0x6d, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, - 0x30, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x6e, - 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, - 0x61, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x7e, 0x0a, 0x0e, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x65, 0x73, - 0x63, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x22, 0x79, 0x0a, 0x15, 0x56, - 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5a, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0b, 0x7a, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, 0x41, 0x64, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0b, 0x7a, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x63, 0x65, 0x54, 0x78, 0x22, 0x59, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, + 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x18, 0x0a, + 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, + 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x22, + 0x75, 0x0a, 0x14, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, - 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x22, 0xc7, 0x01, 0x0a, 0x09, 0x54, 0x78, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x02, 0x74, 0x78, 0x12, 0x3c, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, - 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x22, 0x75, 0x0a, 0x14, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, + 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x6b, + 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, + 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x22, 0x13, 0x0a, + 0x11, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0xc8, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x6e, + 0x75, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0c, 0x6e, 0x75, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, + 0x2c, 0x0a, 0x11, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x44, 0x69, 0x73, 0x6b, + 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x64, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x73, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x42, 0x0a, + 0x0e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 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, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x7a, 0x0a, 0x16, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x48, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x70, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x16, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0xe0, 0x01, + 0x0a, 0x0e, 0x49, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x64, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x64, 0x62, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, + 0x74, 0x78, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x36, 0x0a, 0x09, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, + 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, + 0x12, 0x2e, 0x0a, 0x12, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, + 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x70, 0x72, + 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, + 0x22, 0xd5, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, + 0x04, 0x61, 0x74, 0x54, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x61, 0x74, 0x54, + 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x12, 0x16, 0x0a, + 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, + 0x6f, 0x57, 0x61, 0x69, 0x74, 0x12, 0x41, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x72, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x1a, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x10, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x52, 0x10, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, 0x6e, + 0x63, 0x65, 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, + 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x22, 0x8f, 0x01, 0x0a, 0x0b, 0x5a, 0x41, 0x64, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, + 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x54, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x04, 0x61, 0x74, 0x54, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, + 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, + 0x65, 0x66, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x22, 0x1d, 0x0a, 0x05, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x22, 0xf2, 0x02, 0x0a, 0x0c, 0x5a, 0x53, + 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x65, 0x65, 0x6b, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x73, + 0x65, 0x65, 0x6b, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x65, 0x6b, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x73, 0x65, 0x65, 0x6b, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x65, 0x6b, 0x41, 0x74, 0x54, 0x78, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x65, 0x6b, 0x41, 0x74, 0x54, 0x78, + 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x53, 0x65, 0x65, + 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, + 0x76, 0x65, 0x53, 0x65, 0x65, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x64, 0x65, 0x73, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, + 0x12, 0x30, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x12, 0x16, + 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, + 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x7e, + 0x0a, 0x0e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, + 0x64, 0x65, 0x73, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x22, 0x79, + 0x0a, 0x15, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5a, 0x41, 0x64, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0b, 0x7a, 0x41, 0x64, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, 0x41, 0x64, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0b, 0x7a, 0x41, 0x64, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, + 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x70, 0x72, 0x6f, + 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x22, 0xc7, 0x01, 0x0a, 0x09, 0x54, 0x78, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x02, 0x74, 0x78, 0x12, 0x3c, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x69, + 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, + 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, + 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x12, + 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x12, 0x3a, 0x0a, 0x18, 0x6b, 0x65, 0x65, 0x70, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x6b, 0x65, 0x65, 0x70, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x64, 0x22, 0xd9, 0x01, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, + 0x70, 0x65, 0x63, 0x12, 0x42, 0x0a, 0x0d, 0x6b, 0x76, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x53, 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0d, 0x6b, 0x76, 0x45, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x40, 0x0a, 0x0c, 0x7a, 0x45, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0c, 0x7a, 0x45, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x44, 0x0a, 0x0e, 0x73, 0x71, 0x6c, + 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x0e, 0x73, 0x71, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x22, + 0x47, 0x0a, 0x0d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, + 0x12, 0x36, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1e, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xf5, 0x01, 0x0a, 0x13, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x74, 0x78, + 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, 0x6e, + 0x63, 0x65, 0x54, 0x78, 0x12, 0x3c, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, + 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x03, 0x20, + 0x65, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x12, 0x16, 0x0a, 0x06, - 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, + 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x12, 0x3a, 0x0a, 0x18, 0x6b, 0x65, 0x65, 0x70, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x6b, 0x65, 0x65, 0x70, 0x52, 0x65, 0x66, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x6b, 0x65, 0x65, 0x70, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, - 0x22, 0xd9, 0x01, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, - 0x12, 0x42, 0x0a, 0x0d, 0x6b, 0x76, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, - 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, - 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0d, 0x6b, 0x76, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x53, 0x70, 0x65, 0x63, 0x12, 0x40, 0x0a, 0x0c, 0x7a, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x53, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0c, 0x7a, 0x45, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x44, 0x0a, 0x0e, 0x73, 0x71, 0x6c, 0x45, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0e, 0x73, 0x71, - 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x22, 0x47, 0x0a, 0x0d, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x36, 0x0a, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xf5, 0x01, 0x0a, 0x13, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x74, 0x78, 0x12, 0x22, 0x0a, - 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, - 0x78, 0x12, 0x3c, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, - 0x65, 0x63, 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, - 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, - 0x61, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, - 0x74, 0x12, 0x3a, 0x0a, 0x18, 0x6b, 0x65, 0x65, 0x70, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x18, 0x6b, 0x65, 0x65, 0x70, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0xc7, 0x01, - 0x0a, 0x0d, 0x54, 0x78, 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x54, 0x78, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x54, 0x78, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x3c, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x12, - 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x22, 0x2d, 0x0a, 0x06, 0x54, 0x78, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x23, 0x0a, 0x03, 0x74, 0x78, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, - 0x78, 0x52, 0x03, 0x74, 0x78, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x6f, 0x72, - 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x78, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x74, 0x78, 0x12, 0x2c, 0x0a, 0x11, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x50, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x72, 0x65, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x3f, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x73, 0x6b, 0x69, - 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x6b, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x22, 0xc2, 0x01, 0x0a, 0x0c, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x55, 0x55, - 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44, 0x12, 0x24, - 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x44, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, - 0x54, 0x78, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, - 0x64, 0x41, 0x6c, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x74, 0x65, 0x64, 0x41, 0x6c, 0x68, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x10, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, - 0x54, 0x78, 0x49, 0x44, 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x64, 0x41, 0x6c, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x70, - 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x41, 0x6c, 0x68, 0x22, 0x2e, - 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xc0, - 0x03, 0x0a, 0x10, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, - 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x20, 0x0a, - 0x0b, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0b, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x72, 0x74, 0x12, - 0x28, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, - 0x79, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x72, 0x69, - 0x6d, 0x61, 0x72, 0x79, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x4c, 0x65, 0x6e, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x4c, 0x65, 0x6e, 0x12, 0x20, 0x0a, - 0x0b, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x65, 0x6e, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x65, 0x6e, 0x12, - 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, - 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x22, 0x92, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, - 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x66, 0x4e, 0x6f, 0x74, - 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x6c, - 0x72, 0x65, 0x61, 0x64, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0e, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, - 0x65, 0x64, 0x22, 0x78, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x79, 0x0a, 0x16, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, + 0x22, 0xc7, 0x01, 0x0a, 0x0d, 0x54, 0x78, 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x54, 0x78, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x54, 0x78, + 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x3c, 0x0a, 0x0b, 0x65, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0b, 0x65, 0x6e, 0x74, + 0x72, 0x69, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, + 0x65, 0x54, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, + 0x54, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x22, 0x2d, 0x0a, 0x06, 0x54, 0x78, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x03, 0x74, 0x78, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x54, 0x78, 0x52, 0x03, 0x74, 0x78, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x0f, 0x45, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x74, 0x78, 0x12, 0x2c, 0x0a, + 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, + 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x3f, 0x0a, 0x0c, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, + 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x12, + 0x73, 0x6b, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x6b, 0x69, 0x70, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x22, 0xc2, 0x01, 0x0a, + 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x55, 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, + 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x54, 0x78, + 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x74, 0x65, 0x64, 0x41, 0x6c, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x41, 0x6c, 0x68, 0x12, 0x2a, 0x0a, 0x10, 0x70, + 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x44, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x44, 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x41, 0x6c, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0f, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x41, 0x6c, + 0x68, 0x22, 0x2e, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x22, 0x0a, + 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0xc0, 0x03, 0x0a, 0x10, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, + 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x48, 0x6f, 0x73, 0x74, + 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x72, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, + 0x72, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x55, 0x73, 0x65, + 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x69, + 0x6d, 0x61, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, + 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x4c, 0x65, 0x6e, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x4c, 0x65, 0x6e, + 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x65, 0x6e, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, + 0x65, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, + 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x45, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x22, 0x92, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x44, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x7b, 0x0a, 0x18, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x66, 0x4e, 0x6f, 0x74, + 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x66, + 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x16, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x26, 0x0a, + 0x0e, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x45, 0x78, + 0x69, 0x73, 0x74, 0x65, 0x64, 0x22, 0x78, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, - 0x26, 0x0a, 0x0e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x25, 0x0a, 0x0d, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x24, 0x0a, 0x0c, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x26, 0x0a, 0x0e, - 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2c, 0x0a, 0x14, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0xd2, 0x0e, 0x0a, 0x18, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, - 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x5c, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x13, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x39, 0x0a, - 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x79, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x7b, 0x0a, 0x18, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x43, 0x0a, + 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x22, 0x26, 0x0a, 0x0e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x4e, 0x75, + 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x25, 0x0a, 0x0d, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, + 0x6f, 0x61, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x24, 0x0a, 0x0c, 0x4e, 0x75, 0x6c, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x26, 0x0a, 0x0e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2c, 0x0a, 0x14, 0x4e, 0x75, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd2, 0x0e, 0x0a, 0x18, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x12, 0x5c, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x13, 0x72, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x12, 0x39, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x6d, + 0x61, 0x78, 0x4b, 0x65, 0x79, 0x4c, 0x65, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, + 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x09, 0x6d, + 0x61, 0x78, 0x4b, 0x65, 0x79, 0x4c, 0x65, 0x6e, 0x12, 0x3f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x65, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, + 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0b, 0x6d, 0x61, + 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x65, 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x6d, 0x61, 0x78, + 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x08, - 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x4b, - 0x65, 0x79, 0x4c, 0x65, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, - 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4b, - 0x65, 0x79, 0x4c, 0x65, 0x6e, 0x12, 0x3f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x4c, 0x65, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x4c, 0x65, 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x45, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, + 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0c, + 0x6d, 0x61, 0x78, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, + 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x45, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x43, 0x6f, + 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0e, + 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x49, + 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x49, 0x4f, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x10, 0x6d, 0x61, 0x78, 0x49, 0x4f, 0x43, 0x6f, + 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x45, 0x0a, 0x0e, 0x74, 0x78, 0x4c, + 0x6f, 0x67, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x52, 0x0e, 0x74, 0x78, 0x4c, 0x6f, 0x67, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x4d, 0x0a, 0x12, 0x76, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, + 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0c, 0x6d, 0x61, 0x78, - 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, - 0x6c, 0x52, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x45, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x12, 0x76, 0x4c, 0x6f, + 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, + 0x4f, 0x0a, 0x13, 0x74, 0x78, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, + 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0e, 0x6d, 0x61, 0x78, - 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x49, 0x0a, 0x10, 0x6d, - 0x61, 0x78, 0x49, 0x4f, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x52, 0x10, 0x6d, 0x61, 0x78, 0x49, 0x4f, 0x43, 0x6f, 0x6e, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x45, 0x0a, 0x0e, 0x74, 0x78, 0x4c, 0x6f, 0x67, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, - 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0e, 0x74, - 0x78, 0x4c, 0x6f, 0x67, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4d, 0x0a, - 0x12, 0x76, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x12, 0x76, 0x4c, 0x6f, 0x67, 0x4d, 0x61, - 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x13, - 0x74, 0x78, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x13, 0x74, 0x78, 0x4c, + 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, + 0x12, 0x57, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, + 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, + 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x0d, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x51, 0x0a, 0x14, 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, 0x78, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x52, 0x14, 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x6f, + 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x08, 0x61, 0x75, 0x74, 0x6f, 0x6c, 0x6f, 0x61, + 0x64, 0x12, 0x45, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x54, 0x78, 0x50, 0x6f, 0x6f, 0x6c, 0x53, + 0x69, 0x7a, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x13, 0x74, 0x78, 0x4c, 0x6f, 0x67, 0x4d, - 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x57, 0x0a, - 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, - 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, - 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x17, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, - 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x52, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x12, 0x51, 0x0a, 0x14, 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, 0x78, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, - 0x14, 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x6f, 0x6c, 0x6f, 0x61, - 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x08, 0x61, 0x75, 0x74, 0x6f, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x45, - 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x54, 0x78, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, 0x65, - 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x54, 0x78, 0x50, 0x6f, 0x6f, - 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x49, 0x0a, 0x0d, 0x73, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, + 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x54, 0x78, + 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x49, 0x0a, 0x0d, 0x73, 0x79, 0x6e, 0x63, + 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x73, 0x52, 0x0d, 0x73, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x6e, 0x63, 0x79, 0x12, 0x47, 0x0a, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x73, 0x52, 0x0d, 0x73, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, - 0x12, 0x47, 0x0a, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, - 0x69, 0x7a, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0f, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x44, 0x0a, 0x0b, + 0x61, 0x68, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x41, 0x48, 0x54, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0b, 0x61, 0x68, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x12, 0x53, 0x0a, 0x15, 0x6d, 0x61, 0x78, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x52, 0x15, 0x6d, 0x61, 0x78, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x49, 0x0a, 0x10, 0x6d, 0x76, 0x63, 0x63, 0x52, + 0x65, 0x61, 0x64, 0x53, 0x65, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x52, 0x10, 0x6d, 0x76, 0x63, 0x63, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x74, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x12, 0x43, 0x0a, 0x0d, 0x76, 0x4c, 0x6f, 0x67, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, + 0x69, 0x7a, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x44, 0x0a, 0x0b, 0x61, 0x68, 0x74, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x41, - 0x48, 0x54, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x52, 0x0b, 0x61, 0x68, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x53, 0x0a, 0x15, 0x6d, 0x61, 0x78, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, - 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x15, 0x6d, - 0x61, 0x78, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x49, 0x0a, 0x10, 0x6d, 0x76, 0x63, 0x63, 0x52, 0x65, 0x61, 0x64, - 0x53, 0x65, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, + 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0d, 0x76, 0x4c, 0x6f, 0x67, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x59, 0x0a, 0x12, 0x74, 0x72, 0x75, 0x6e, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x1d, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, + 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x12, + 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x12, 0x43, 0x0a, 0x0e, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0e, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, + 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x61, 0x6c, + 0x6c, 0x6f, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, - 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x10, 0x6d, - 0x76, 0x63, 0x63, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x43, 0x0a, 0x0d, 0x76, 0x4c, 0x6f, 0x67, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, - 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0d, 0x76, 0x4c, 0x6f, 0x67, 0x43, 0x61, 0x63, 0x68, 0x65, - 0x53, 0x69, 0x7a, 0x65, 0x12, 0x59, 0x0a, 0x12, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x12, 0x74, 0x72, 0x75, - 0x6e, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x43, 0x0a, 0x0e, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0e, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, - 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, - 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x61, 0x6c, 0x6c, - 0x6f, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x22, 0xc8, 0x07, 0x0a, 0x1b, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x35, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x47, - 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x6d, 0x61, - 0x72, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x70, 0x72, 0x69, - 0x6d, 0x61, 0x72, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, - 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0b, 0x70, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x47, 0x0a, 0x0f, 0x70, 0x72, 0x69, - 0x6d, 0x61, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x47, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, + 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0d, 0x70, 0x72, 0x65, + 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x22, 0xc8, 0x07, 0x0a, 0x1b, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x35, 0x0a, 0x07, 0x72, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, - 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x45, 0x0a, 0x0f, 0x73, - 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, - 0x6c, 0x52, 0x0f, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x08, 0x73, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x6b, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x52, 0x08, 0x73, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x6b, 0x73, 0x12, 0x51, 0x0a, - 0x14, 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x54, 0x78, 0x42, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, - 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x14, 0x70, 0x72, 0x65, 0x66, - 0x65, 0x74, 0x63, 0x68, 0x54, 0x78, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, - 0x12, 0x61, 0x0a, 0x1c, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x1c, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x63, 0x79, 0x12, 0x49, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x78, 0x44, 0x69, - 0x73, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, - 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x11, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x54, 0x78, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x4b, - 0x0a, 0x12, 0x73, 0x6b, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x12, 0x73, 0x6b, 0x69, 0x70, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x45, 0x0a, 0x0f, 0x77, - 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, - 0x6c, 0x52, 0x0f, 0x77, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x69, - 0x6e, 0x67, 0x22, 0xc2, 0x01, 0x0a, 0x1a, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x12, 0x4d, 0x0a, 0x0f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, - 0x72, 0x69, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6d, 0x6d, + 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x12, 0x47, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x52, - 0x0f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, - 0x12, 0x55, 0x0a, 0x13, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, - 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x52, 0x13, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x99, 0x09, 0x0a, 0x15, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x12, 0x45, 0x0a, 0x0e, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, - 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0e, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x54, - 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x43, 0x0a, 0x0d, 0x73, 0x79, 0x6e, 0x63, - 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x62, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, + 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x70, 0x72, + 0x69, 0x6d, 0x61, 0x72, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0d, - 0x73, 0x79, 0x6e, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x3b, 0x0a, - 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, + 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0b, 0x70, + 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, - 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x6d, 0x61, - 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0b, - 0x6d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4d, 0x0a, 0x12, 0x6d, - 0x61, 0x78, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x0b, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x47, 0x0a, 0x0f, + 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x55, 0x73, 0x65, + 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x47, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, + 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x70, + 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x45, + 0x0a, 0x0f, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0x4d, 0x0a, 0x12, 0x72, 0x65, - 0x6e, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x52, 0x6f, 0x6f, 0x74, 0x41, 0x66, 0x74, 0x65, 0x72, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x12, 0x72, 0x65, 0x6e, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, - 0x52, 0x6f, 0x6f, 0x74, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x6c, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x6c, 0x64, - 0x12, 0x53, 0x0a, 0x15, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x15, - 0x64, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x55, 0x0a, 0x16, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x4c, 0x6f, - 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x52, 0x16, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x4c, 0x6f, 0x67, 0x4d, 0x61, - 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x18, - 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, - 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, + 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0f, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x08, 0x73, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x6b, + 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x08, 0x73, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x6b, 0x73, + 0x12, 0x51, 0x0a, 0x14, 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x54, 0x78, 0x42, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, - 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x18, 0x68, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, - 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x57, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, - 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, - 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x12, 0x47, 0x0a, 0x0f, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, - 0x69, 0x7a, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x14, 0x70, + 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x54, 0x78, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, + 0x69, 0x7a, 0x65, 0x12, 0x61, 0x0a, 0x1c, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0f, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x42, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4a, 0x0a, 0x11, 0x63, 0x6c, 0x65, - 0x61, 0x6e, 0x75, 0x70, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x6f, - 0x61, 0x74, 0x52, 0x11, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x50, 0x65, 0x72, 0x63, 0x65, - 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x42, 0x75, 0x6c, 0x6b, - 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x42, 0x75, - 0x6c, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x5b, 0x0a, 0x16, 0x62, 0x75, 0x6c, 0x6b, 0x50, 0x72, - 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4d, - 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x52, 0x16, 0x62, 0x75, 0x6c, - 0x6b, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x22, 0xa3, 0x01, 0x0a, 0x13, 0x41, 0x48, 0x54, 0x4e, 0x75, 0x6c, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x43, 0x0a, 0x0d, 0x73, - 0x79, 0x6e, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x1c, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x49, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, + 0x78, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x11, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x78, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, + 0x67, 0x12, 0x4b, 0x0a, 0x12, 0x73, 0x6b, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, + 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, + 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x12, 0x73, 0x6b, 0x69, 0x70, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x45, + 0x0a, 0x0f, 0x77, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x69, 0x6e, + 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0f, 0x77, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x69, 0x6e, 0x67, 0x22, 0xc2, 0x01, 0x0a, 0x1a, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x12, 0x4d, 0x0a, 0x0f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, + 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x73, 0x52, 0x0f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, + 0x69, 0x6f, 0x64, 0x12, 0x55, 0x0a, 0x13, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x52, 0x13, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x99, 0x09, 0x0a, 0x15, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x12, 0x45, 0x0a, 0x0e, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x54, 0x68, 0x72, + 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0e, 0x66, 0x6c, 0x75, + 0x73, 0x68, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x43, 0x0a, 0x0d, 0x73, + 0x79, 0x6e, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0d, 0x73, 0x79, 0x6e, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, - 0x12, 0x47, 0x0a, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, - 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x12, 0x3b, 0x0a, 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x52, 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x3f, 0x0a, + 0x0b, 0x6d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4d, + 0x0a, 0x12, 0x6d, 0x61, 0x78, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x41, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0x4d, 0x0a, + 0x12, 0x72, 0x65, 0x6e, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x52, 0x6f, 0x6f, 0x74, 0x41, 0x66, + 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x31, 0x0a, 0x13, 0x4c, 0x6f, 0x61, - 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x14, - 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x22, 0x33, 0x0a, 0x15, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x34, 0x0a, 0x16, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x15, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x22, 0x34, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x59, 0x0a, 0x11, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x63, - 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x50, - 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6e, - 0x63, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x79, 0x6e, 0x63, 0x65, - 0x64, 0x22, 0x30, 0x0a, 0x12, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, + 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x12, 0x72, 0x65, 0x6e, 0x65, 0x77, 0x53, + 0x6e, 0x61, 0x70, 0x52, 0x6f, 0x6f, 0x74, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x0e, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x6c, 0x64, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x68, 0x6c, 0x64, 0x12, 0x53, 0x0a, 0x15, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x75, 0x72, 0x69, + 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x52, 0x15, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x43, 0x6f, + 0x6d, 0x70, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x55, 0x0a, 0x16, 0x6e, 0x6f, 0x64, 0x65, + 0x73, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, + 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x16, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x4c, 0x6f, + 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, + 0x59, 0x0a, 0x18, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, + 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x52, 0x18, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, + 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x57, 0x0a, 0x17, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, + 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x0f, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x42, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0f, 0x66, 0x6c, 0x75, + 0x73, 0x68, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4a, 0x0a, 0x11, + 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, + 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x52, 0x11, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x50, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x42, + 0x75, 0x6c, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, + 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0b, 0x6d, 0x61, + 0x78, 0x42, 0x75, 0x6c, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x5b, 0x0a, 0x16, 0x62, 0x75, 0x6c, + 0x6b, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x52, 0x16, + 0x62, 0x75, 0x6c, 0x6b, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0xa3, 0x01, 0x0a, 0x13, 0x41, 0x48, 0x54, 0x4e, 0x75, + 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x43, + 0x0a, 0x0d, 0x73, 0x79, 0x6e, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0d, 0x73, 0x79, 0x6e, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, + 0x6f, 0x6c, 0x64, 0x12, 0x47, 0x0a, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0f, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x31, 0x0a, 0x13, + 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, + 0x32, 0x0a, 0x14, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x22, 0x25, 0x0a, 0x05, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x0d, 0x53, - 0x51, 0x4c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x70, 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x70, - 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x54, 0x78, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x61, 0x74, 0x54, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x73, - 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, - 0x6e, 0x63, 0x65, 0x54, 0x78, 0x22, 0x81, 0x01, 0x0a, 0x17, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x42, 0x0a, 0x0d, 0x73, 0x71, 0x6c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0d, 0x73, 0x71, 0x6c, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, - 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x70, 0x72, 0x6f, - 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x22, 0x79, 0x0a, 0x08, 0x53, 0x51, 0x4c, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x02, 0x74, 0x78, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x35, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x4b, 0x56, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x22, 0xa3, 0x07, 0x0a, 0x12, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x33, 0x0a, 0x08, 0x73, - 0x71, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, - 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x71, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x3f, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x54, 0x78, 0x52, 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, - 0x78, 0x12, 0x45, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, - 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, - 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x4b, 0x49, 0x44, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, - 0x0d, 0x52, 0x05, 0x50, 0x4b, 0x49, 0x44, 0x73, 0x12, 0x57, 0x0a, 0x0c, 0x43, 0x6f, 0x6c, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, - 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x2e, 0x43, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0c, 0x43, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x49, - 0x64, 0x12, 0x57, 0x0a, 0x0c, 0x43, 0x6f, 0x6c, 0x49, 0x64, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6c, 0x49, 0x64, - 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x43, 0x6f, - 0x6c, 0x49, 0x64, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x57, 0x0a, 0x0c, 0x43, 0x6f, - 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x33, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x43, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x42, - 0x79, 0x49, 0x64, 0x12, 0x51, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x4c, 0x65, 0x6e, 0x42, 0x79, 0x49, - 0x64, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6c, 0x4c, 0x65, - 0x6e, 0x42, 0x79, 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x43, 0x6f, 0x6c, 0x4c, - 0x65, 0x6e, 0x42, 0x79, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x6c, - 0x49, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x6c, - 0x49, 0x64, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, - 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x6f, 0x6c, 0x49, 0x64, 0x73, 0x42, 0x79, 0x4e, - 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, - 0x42, 0x79, 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x4c, 0x65, 0x6e, 0x42, - 0x79, 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x28, 0x0a, 0x10, 0x55, 0x73, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xaa, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, - 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x37, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, - 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, - 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0x4a, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x4d, 0x0a, - 0x14, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x22, 0x17, 0x0a, 0x15, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x56, 0x32, 0x22, 0x53, 0x0a, 0x16, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x56, 0x32, 0x12, - 0x39, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x22, 0x83, 0x02, 0x0a, 0x0c, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x64, 0x69, 0x73, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x64, 0x69, 0x73, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, - 0x22, 0x9e, 0x01, 0x0a, 0x05, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0x4e, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, - 0x54, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, - 0x78, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, - 0x78, 0x22, 0x6d, 0x0a, 0x0e, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, + 0x61, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x15, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x34, 0x0a, 0x16, 0x55, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x33, + 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x22, 0x34, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x59, 0x0a, 0x11, 0x46, 0x6c, 0x75, + 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, + 0x0a, 0x11, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x63, 0x6c, 0x65, 0x61, 0x6e, + 0x75, 0x70, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x79, + 0x6e, 0x63, 0x65, 0x64, 0x22, 0x30, 0x0a, 0x12, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x25, 0x0a, 0x05, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x88, 0x01, + 0x0a, 0x0d, 0x53, 0x51, 0x4c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x70, 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x08, 0x70, 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, + 0x54, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x61, 0x74, 0x54, 0x78, 0x12, 0x18, + 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x22, 0x81, 0x01, 0x0a, 0x17, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0d, 0x73, 0x71, 0x6c, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0d, 0x73, 0x71, 0x6c, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, + 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, + 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x22, 0x79, 0x0a, 0x08, + 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x74, 0x78, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x4b, 0x56, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa3, 0x07, 0x0a, 0x12, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x33, + 0x0a, 0x08, 0x73, 0x71, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x71, 0x6c, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x3f, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x52, 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x54, 0x78, 0x12, 0x45, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, + 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x63, + 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x0e, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x1e, 0x0a, 0x0a, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0a, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x4b, 0x49, 0x44, 0x73, 0x18, 0x10, + 0x20, 0x03, 0x28, 0x0d, 0x52, 0x05, 0x50, 0x4b, 0x49, 0x44, 0x73, 0x12, 0x57, 0x0a, 0x0c, 0x43, + 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x49, + 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x43, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x42, 0x79, 0x49, 0x64, 0x12, 0x57, 0x0a, 0x0c, 0x43, 0x6f, 0x6c, 0x49, 0x64, 0x73, 0x42, 0x79, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, + 0x6c, 0x49, 0x64, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0c, 0x43, 0x6f, 0x6c, 0x49, 0x64, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x57, 0x0a, + 0x0c, 0x43, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, 0x18, 0x0a, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, + 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x42, + 0x79, 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x43, 0x6f, 0x6c, 0x54, 0x79, 0x70, + 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, 0x12, 0x51, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x4c, 0x65, 0x6e, + 0x42, 0x79, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, + 0x6c, 0x4c, 0x65, 0x6e, 0x42, 0x79, 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x43, + 0x6f, 0x6c, 0x4c, 0x65, 0x6e, 0x42, 0x79, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x78, + 0x43, 0x6f, 0x6c, 0x49, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x4d, 0x61, 0x78, + 0x43, 0x6f, 0x6c, 0x49, 0x64, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x42, 0x79, 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x6f, 0x6c, 0x49, 0x64, 0x73, + 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x6f, 0x6c, 0x54, 0x79, + 0x70, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x4c, + 0x65, 0x6e, 0x42, 0x79, 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x28, 0x0a, + 0x10, 0x55, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xaa, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xca, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, + 0x51, 0x4c, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x50, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, + 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x51, 0x4c, 0x50, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x4a, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x4d, 0x0a, 0x14, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x22, 0x17, 0x0a, 0x15, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x56, 0x32, 0x22, 0x53, 0x0a, 0x16, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x56, 0x32, 0x12, 0x39, + 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x22, 0x83, 0x02, 0x0a, 0x0c, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, + 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x64, + 0x69, 0x73, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x64, + 0x69, 0x73, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x22, + 0x9e, 0x01, 0x0a, 0x05, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x2e, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0x4e, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, + 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, + 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x78, + 0x22, 0x6d, 0x0a, 0x0e, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x73, 0x71, 0x6c, 0x12, 0x31, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, + 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x22, + 0xa4, 0x01, 0x0a, 0x0f, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, 0x31, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, - 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, - 0x22, 0xa4, 0x01, 0x0a, 0x0f, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, 0x31, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x0d, 0x72, 0x65, 0x75, - 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x75, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x70, - 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x4f, 0x0a, 0x0a, 0x4e, 0x61, 0x6d, 0x65, 0x64, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5e, 0x0a, 0x0d, 0x53, 0x51, 0x4c, 0x45, - 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x03, 0x74, 0x78, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, - 0x53, 0x51, 0x4c, 0x54, 0x78, 0x52, 0x03, 0x74, 0x78, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x6e, - 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, - 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x22, 0xdd, 0x03, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x53, 0x51, 0x4c, 0x54, 0x78, 0x12, 0x2f, 0x0a, 0x06, 0x68, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x6f, 0x77, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x5c, - 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, - 0x64, 0x53, 0x51, 0x4c, 0x54, 0x78, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, - 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6c, 0x61, 0x73, - 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x12, 0x5f, 0x0a, 0x10, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, + 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x0d, 0x72, 0x65, 0x75, 0x73, + 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x42, + 0x02, 0x18, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x75, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x4f, 0x0a, 0x0a, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5e, 0x0a, 0x0d, 0x53, 0x51, 0x4c, 0x45, 0x78, + 0x65, 0x63, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x03, 0x74, 0x78, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x53, + 0x51, 0x4c, 0x54, 0x78, 0x52, 0x03, 0x74, 0x78, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x6e, 0x67, + 0x6f, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x6e, + 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x22, 0xdd, 0x03, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x74, 0x65, 0x64, 0x53, 0x51, 0x4c, 0x54, 0x78, 0x12, 0x2f, 0x0a, 0x06, 0x68, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x6f, 0x77, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x5c, 0x0a, + 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, - 0x53, 0x51, 0x4c, 0x54, 0x78, 0x2e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, - 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x66, 0x69, 0x72, - 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x1a, 0x5b, 0x0a, - 0x14, 0x4c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5c, 0x0a, 0x15, 0x46, 0x69, - 0x72, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x69, 0x0a, 0x0e, 0x53, 0x51, 0x4c, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x07, 0x63, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x04, 0x72, - 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, - 0x6f, 0x77, 0x73, 0x22, 0x30, 0x0a, 0x06, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x50, 0x0a, 0x03, 0x52, 0x6f, 0x77, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xa9, 0x01, 0x0a, 0x08, 0x53, 0x51, 0x4c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x75, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, - 0x52, 0x04, 0x6e, 0x75, 0x6c, 0x6c, 0x12, 0x0e, 0x0a, 0x01, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x48, 0x00, 0x52, 0x01, 0x6e, 0x12, 0x0e, 0x0a, 0x01, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x01, 0x73, 0x12, 0x0e, 0x0a, 0x01, 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x00, 0x52, 0x01, 0x62, 0x12, 0x10, 0x0a, 0x02, 0x62, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0c, 0x48, 0x00, 0x52, 0x02, 0x62, 0x73, 0x12, 0x10, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x02, 0x74, 0x73, 0x12, 0x0e, 0x0a, 0x01, 0x66, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x01, 0x66, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x8d, 0x02, 0x0a, 0x0c, 0x4e, 0x65, 0x77, 0x54, 0x78, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, - 0x57, 0x0a, 0x17, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4d, 0x75, 0x73, 0x74, 0x49, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x78, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x52, - 0x17, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4d, 0x75, 0x73, 0x74, 0x49, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x54, 0x78, 0x49, 0x44, 0x12, 0x59, 0x0a, 0x15, 0x73, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x69, 0x6f, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x52, 0x15, 0x73, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x61, 0x6c, 0x50, 0x65, 0x72, - 0x69, 0x6f, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x4d, 0x56, 0x43, - 0x43, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x75, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x4d, - 0x56, 0x43, 0x43, 0x22, 0x35, 0x0a, 0x0d, 0x4e, 0x65, 0x77, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x35, 0x0a, 0x09, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, - 0x61, 0x75, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x61, 0x75, 0x73, - 0x65, 0x22, 0x21, 0x0a, 0x09, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x63, 0x6b, 0x22, 0x2c, 0x0a, 0x09, 0x52, 0x65, 0x74, 0x72, 0x79, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x74, 0x72, 0x79, 0x44, 0x65, 0x6c, - 0x61, 0x79, 0x22, 0x5f, 0x0a, 0x17, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x74, - 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, - 0x69, 0x6f, 0x64, 0x22, 0x36, 0x0a, 0x18, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2a, 0x4b, 0x0a, 0x0f, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, - 0x0a, 0x07, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x44, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, - 0x4e, 0x4c, 0x59, 0x5f, 0x44, 0x49, 0x47, 0x45, 0x53, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, - 0x52, 0x41, 0x57, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x52, - 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x10, 0x03, 0x2a, 0x29, 0x0a, 0x10, 0x50, 0x65, 0x72, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05, - 0x47, 0x52, 0x41, 0x4e, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x56, 0x4f, 0x4b, - 0x45, 0x10, 0x01, 0x2a, 0x34, 0x0a, 0x06, 0x54, 0x78, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0c, 0x0a, - 0x08, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x65, - 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x10, 0x02, 0x32, 0xa6, 0x35, 0x0a, 0x0b, 0x49, 0x6d, - 0x6d, 0x75, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x09, 0x4c, 0x69, 0x73, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, - 0x0a, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x0a, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x20, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x10, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x3a, 0x01, 0x2a, 0x22, 0x05, - 0x2f, 0x75, 0x73, 0x65, 0x72, 0x12, 0x70, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, - 0x22, 0x15, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x75, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x21, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x6c, - 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, - 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x53, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1e, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x01, 0x2a, 0x22, 0x13, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x73, - 0x65, 0x74, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x4a, 0x0a, 0x10, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x41, 0x75, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x4a, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x4d, 0x54, 0x4c, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x54, 0x4c, - 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x03, 0x88, 0x02, 0x01, 0x12, 0x56, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0c, - 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x3d, - 0x0a, 0x09, 0x4b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x44, 0x0a, - 0x05, 0x4e, 0x65, 0x77, 0x54, 0x78, 0x12, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x65, 0x77, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x65, 0x77, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x06, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x53, 0x51, 0x4c, 0x54, 0x78, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, + 0x65, 0x64, 0x50, 0x4b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6c, 0x61, 0x73, 0x74, + 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x12, 0x5f, 0x0a, 0x10, 0x66, + 0x69, 0x72, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x53, - 0x51, 0x4c, 0x54, 0x78, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, - 0x63, 0x6b, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x51, 0x4c, 0x54, 0x78, 0x2e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, + 0x65, 0x64, 0x50, 0x4b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x66, 0x69, 0x72, 0x73, + 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x1a, 0x5b, 0x0a, 0x14, + 0x4c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5c, 0x0a, 0x15, 0x46, 0x69, 0x72, + 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x69, 0x0a, 0x0e, 0x53, 0x51, 0x4c, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x07, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x04, 0x72, 0x6f, + 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, + 0x77, 0x73, 0x22, 0x30, 0x0a, 0x06, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x22, 0x50, 0x0a, 0x03, 0x52, 0x6f, 0x77, 0x12, 0x18, 0x0a, 0x07, 0x63, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xa9, 0x01, 0x0a, 0x08, 0x53, 0x51, 0x4c, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x75, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, + 0x04, 0x6e, 0x75, 0x6c, 0x6c, 0x12, 0x0e, 0x0a, 0x01, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x48, 0x00, 0x52, 0x01, 0x6e, 0x12, 0x0e, 0x0a, 0x01, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x01, 0x73, 0x12, 0x0e, 0x0a, 0x01, 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x48, 0x00, 0x52, 0x01, 0x62, 0x12, 0x10, 0x0a, 0x02, 0x62, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0c, 0x48, 0x00, 0x52, 0x02, 0x62, 0x73, 0x12, 0x10, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x02, 0x74, 0x73, 0x12, 0x0e, 0x0a, 0x01, 0x66, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x01, 0x66, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x8d, 0x02, 0x0a, 0x0c, 0x4e, 0x65, 0x77, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x15, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x54, 0x78, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x57, + 0x0a, 0x17, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4d, 0x75, 0x73, 0x74, 0x49, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x78, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x17, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4d, 0x75, 0x73, 0x74, 0x49, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x54, 0x78, 0x49, 0x44, 0x12, 0x59, 0x0a, 0x15, 0x73, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4d, + 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x52, 0x15, 0x73, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x4d, 0x56, 0x43, 0x43, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x75, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x4d, 0x56, + 0x43, 0x43, 0x22, 0x35, 0x0a, 0x0d, 0x4e, 0x65, 0x77, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x35, 0x0a, 0x09, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x61, + 0x75, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, + 0x22, 0x21, 0x0a, 0x09, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x63, 0x6b, 0x22, 0x2c, 0x0a, 0x09, 0x52, 0x65, 0x74, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x74, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x61, + 0x79, 0x22, 0x5f, 0x0a, 0x17, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x74, 0x65, + 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x22, 0x36, 0x0a, 0x18, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2a, 0x6c, 0x0a, 0x0c, 0x53, 0x51, + 0x4c, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x45, 0x4c, 0x45, 0x43, + 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, + 0x0a, 0x0a, 0x06, 0x49, 0x4e, 0x53, 0x45, 0x52, 0x54, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x55, + 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, + 0x45, 0x10, 0x05, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x52, 0x4f, 0x50, 0x10, 0x06, 0x12, 0x09, 0x0a, + 0x05, 0x41, 0x4c, 0x54, 0x45, 0x52, 0x10, 0x07, 0x2a, 0x4b, 0x0a, 0x0f, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x54, 0x79, 0x70, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x45, + 0x58, 0x43, 0x4c, 0x55, 0x44, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x4e, 0x4c, 0x59, + 0x5f, 0x44, 0x49, 0x47, 0x45, 0x53, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x41, 0x57, + 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x53, 0x4f, + 0x4c, 0x56, 0x45, 0x10, 0x03, 0x2a, 0x29, 0x0a, 0x10, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x52, 0x41, + 0x4e, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x56, 0x4f, 0x4b, 0x45, 0x10, 0x01, + 0x2a, 0x34, 0x0a, 0x06, 0x54, 0x78, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x65, + 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x65, 0x61, 0x64, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x10, 0x02, 0x32, 0xbb, 0x36, 0x0a, 0x0b, 0x49, 0x6d, 0x6d, 0x75, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x4c, 0x69, 0x73, 0x74, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x75, + 0x73, 0x65, 0x72, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x20, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x10, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x3a, 0x01, 0x2a, 0x22, 0x05, 0x2f, 0x75, 0x73, + 0x65, 0x72, 0x12, 0x70, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x09, 0x54, 0x78, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, - 0x63, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x74, 0x79, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, + 0x75, 0x73, 0x65, 0x72, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x12, 0x75, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x65, + 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, + 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0a, 0x54, 0x78, - 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1e, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x5d, 0x0a, 0x05, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x19, 0x92, 0x41, 0x02, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x3a, 0x01, 0x2a, 0x22, - 0x06, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x88, 0x02, 0x01, 0x12, 0x4f, 0x0a, 0x06, 0x4c, 0x6f, - 0x67, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x3a, 0x01, 0x2a, 0x22, - 0x07, 0x2f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x88, 0x02, 0x01, 0x12, 0x4d, 0x0a, 0x03, 0x53, - 0x65, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x3a, 0x01, - 0x2a, 0x22, 0x07, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x65, 0x74, 0x12, 0x70, 0x0a, 0x0d, 0x56, 0x65, - 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x12, 0x23, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x22, 0x1d, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x64, 0x62, 0x2f, 0x76, 0x65, - 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x73, 0x65, 0x74, 0x12, 0x4d, 0x0a, 0x03, - 0x47, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x64, - 0x62, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x12, 0x73, 0x0a, 0x0d, 0x56, - 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x12, 0x23, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, - 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1e, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x64, - 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x67, 0x65, 0x74, - 0x12, 0x5d, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a, 0x01, 0x2a, - 0x22, 0x0d, 0x2f, 0x64, 0x62, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x6b, 0x65, 0x79, 0x12, - 0x56, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x3a, 0x01, 0x2a, 0x22, 0x0a, 0x2f, 0x64, 0x62, - 0x2f, 0x67, 0x65, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x59, 0x0a, 0x07, 0x45, 0x78, 0x65, 0x63, 0x41, - 0x6c, 0x6c, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x64, 0x62, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x61, - 0x6c, 0x6c, 0x12, 0x4f, 0x0a, 0x04, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x1a, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x13, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x3a, 0x01, 0x2a, 0x22, 0x08, 0x2f, 0x64, 0x62, 0x2f, 0x73, - 0x63, 0x61, 0x6e, 0x12, 0x58, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, - 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x64, 0x62, 0x2f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x7d, 0x12, 0x53, 0x0a, - 0x08, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, + 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x92, 0x01, 0x0a, 0x13, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x51, 0x4c, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x51, 0x4c, 0x50, 0x72, 0x69, + 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x51, 0x4c, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x73, 0x71, 0x6c, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, + 0x12, 0x6c, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x53, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1e, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x01, 0x2a, 0x22, 0x13, 0x2f, 0x75, 0x73, 0x65, 0x72, + 0x2f, 0x73, 0x65, 0x74, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x4a, + 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x4a, 0x0a, 0x10, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x4d, 0x54, 0x4c, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, + 0x54, 0x4c, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x14, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x0e, 0x12, 0x0c, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x61, - 0x6c, 0x6c, 0x12, 0x4a, 0x0a, 0x06, 0x54, 0x78, 0x42, 0x79, 0x49, 0x64, 0x12, 0x18, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x0d, 0x12, 0x0b, 0x2f, 0x64, 0x62, 0x2f, 0x74, 0x78, 0x2f, 0x7b, 0x74, 0x78, 0x7d, 0x12, 0x73, - 0x0a, 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x42, 0x79, - 0x49, 0x64, 0x12, 0x22, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x54, 0x78, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x64, 0x62, - 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x74, 0x78, 0x2f, 0x7b, - 0x74, 0x78, 0x7d, 0x12, 0x50, 0x0a, 0x06, 0x54, 0x78, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x1c, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, - 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x4c, 0x69, - 0x73, 0x74, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x3a, 0x01, 0x2a, 0x22, 0x06, 0x2f, - 0x64, 0x62, 0x2f, 0x74, 0x78, 0x12, 0x58, 0x0a, 0x07, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, - 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x3a, - 0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x64, 0x62, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, - 0x6b, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x21, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x18, 0x92, 0x41, 0x02, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, - 0x0b, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x55, 0x0a, 0x06, - 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1d, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x92, - 0x41, 0x02, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x2f, 0x68, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x12, 0x68, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x25, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x92, 0x41, 0x02, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x0c, 0x12, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x5d, 0x0a, - 0x0c, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, + 0x79, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x56, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, + 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, + 0x12, 0x3d, 0x0a, 0x09, 0x4b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x22, 0x16, 0x92, 0x41, 0x02, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x0b, 0x12, 0x09, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x65, 0x0a, 0x0c, - 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, - 0x2a, 0x22, 0x10, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x65, 0x74, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x16, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x29, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, + 0x44, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x54, 0x78, 0x12, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x65, 0x77, 0x54, 0x78, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x65, 0x77, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x06, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, + 0x64, 0x53, 0x51, 0x4c, 0x54, 0x78, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x6c, + 0x62, 0x61, 0x63, 0x6b, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x09, 0x54, 0x78, 0x53, 0x51, 0x4c, 0x45, + 0x78, 0x65, 0x63, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0a, + 0x54, 0x78, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1e, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x5d, 0x0a, + 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x19, 0x92, 0x41, 0x02, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x3a, 0x01, + 0x2a, 0x22, 0x06, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x88, 0x02, 0x01, 0x12, 0x4f, 0x0a, 0x06, + 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x3a, 0x01, + 0x2a, 0x22, 0x07, 0x2f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x88, 0x02, 0x01, 0x12, 0x4d, 0x0a, + 0x03, 0x53, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, + 0x3a, 0x01, 0x2a, 0x22, 0x07, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x65, 0x74, 0x12, 0x70, 0x0a, 0x0d, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x12, 0x23, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x22, + 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x64, 0x62, 0x2f, + 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x73, 0x65, 0x74, 0x12, 0x4d, + 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, + 0x2f, 0x64, 0x62, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x12, 0x73, 0x0a, + 0x0d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x12, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, - 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, - 0x2a, 0x22, 0x1b, 0x2f, 0x64, 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x2f, 0x73, 0x65, 0x74, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x50, - 0x0a, 0x04, 0x5a, 0x41, 0x64, 0x64, 0x12, 0x1a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x13, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x0d, 0x3a, 0x01, 0x2a, 0x22, 0x08, 0x2f, 0x64, 0x62, 0x2f, 0x7a, 0x61, 0x64, 0x64, - 0x12, 0x73, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5a, 0x41, - 0x64, 0x64, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5a, 0x41, 0x64, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, + 0x2f, 0x64, 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x67, + 0x65, 0x74, 0x12, 0x5d, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, + 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a, + 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x64, 0x62, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x6b, 0x65, + 0x79, 0x12, 0x56, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x1d, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x69, + 0x65, 0x73, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x3a, 0x01, 0x2a, 0x22, 0x0a, 0x2f, + 0x64, 0x62, 0x2f, 0x67, 0x65, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x59, 0x0a, 0x07, 0x45, 0x78, 0x65, + 0x63, 0x41, 0x6c, 0x6c, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x16, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x64, 0x62, 0x2f, 0x65, 0x78, 0x65, + 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x4f, 0x0a, 0x04, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x1a, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x63, 0x61, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x3a, 0x01, 0x2a, 0x22, 0x08, 0x2f, 0x64, 0x62, + 0x2f, 0x73, 0x63, 0x61, 0x6e, 0x12, 0x58, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, + 0x65, 0x79, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x64, 0x62, + 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x7d, 0x12, + 0x53, 0x0a, 0x08, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x14, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x12, 0x0c, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x4a, 0x0a, 0x06, 0x54, 0x78, 0x42, 0x79, 0x49, 0x64, 0x12, 0x18, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, + 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x22, 0x13, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x64, 0x62, 0x2f, 0x74, 0x78, 0x2f, 0x7b, 0x74, 0x78, 0x7d, + 0x12, 0x73, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, + 0x42, 0x79, 0x49, 0x64, 0x12, 0x22, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, + 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x54, 0x78, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x01, 0x2a, - 0x22, 0x13, 0x2f, 0x64, 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x2f, 0x7a, 0x61, 0x64, 0x64, 0x12, 0x53, 0x0a, 0x05, 0x5a, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x1b, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, - 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, 0x45, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x3a, 0x01, 0x2a, 0x22, - 0x09, 0x2f, 0x64, 0x62, 0x2f, 0x7a, 0x73, 0x63, 0x61, 0x6e, 0x12, 0x5b, 0x0a, 0x0e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x17, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x18, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x3a, 0x01, 0x2a, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x88, 0x02, 0x01, 0x12, 0x6b, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, 0x12, 0x1f, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x3a, 0x01, - 0x2a, 0x22, 0x0e, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x77, 0x69, 0x74, - 0x68, 0x88, 0x02, 0x01, 0x12, 0x79, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x56, 0x32, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a, 0x01, 0x2a, - 0x22, 0x0d, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x12, - 0x6c, 0x0a, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, - 0x22, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, - 0x3a, 0x01, 0x2a, 0x22, 0x08, 0x2f, 0x64, 0x62, 0x2f, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x74, 0x0a, - 0x0e, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, - 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x0f, 0x3a, 0x01, 0x2a, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x75, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x12, 0x74, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x3a, 0x01, 0x2a, 0x22, 0x0a, 0x2f, - 0x64, 0x62, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x0c, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x3a, 0x01, - 0x2a, 0x22, 0x08, 0x2f, 0x64, 0x62, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x88, 0x02, 0x01, 0x12, 0x75, - 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x32, - 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x56, 0x32, 0x1a, 0x25, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x56, 0x32, 0x22, 0x16, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x64, 0x62, 0x2f, 0x6c, 0x69, - 0x73, 0x74, 0x2f, 0x76, 0x32, 0x12, 0x67, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x12, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x1a, 0x1f, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x73, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1e, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x64, 0x62, 0x2f, 0x75, 0x73, 0x65, 0x2f, - 0x7b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x63, - 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x12, 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x0f, 0x3a, 0x01, 0x2a, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x88, 0x02, 0x01, 0x12, 0x79, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x56, 0x32, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a, 0x01, 0x2a, 0x22, - 0x0d, 0x2f, 0x64, 0x62, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x12, 0x6a, - 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1f, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x1a, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x64, 0x62, 0x2f, 0x73, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x88, 0x02, 0x01, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x47, - 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x56, 0x32, 0x12, 0x26, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x3a, 0x01, 0x2a, - 0x22, 0x0f, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x76, - 0x32, 0x12, 0x69, 0x0a, 0x0a, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x62, 0x6c, 0x65, 0x54, 0x78, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, + 0x64, 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x74, 0x78, + 0x2f, 0x7b, 0x74, 0x78, 0x7d, 0x12, 0x50, 0x0a, 0x06, 0x54, 0x78, 0x53, 0x63, 0x61, 0x6e, 0x12, + 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x54, 0x78, 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, + 0x4c, 0x69, 0x73, 0x74, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x3a, 0x01, 0x2a, 0x22, + 0x06, 0x2f, 0x64, 0x62, 0x2f, 0x74, 0x78, 0x12, 0x58, 0x0a, 0x07, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x64, 0x62, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x12, 0x6b, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x64, - 0x62, 0x2f, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x58, 0x0a, 0x0c, - 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x18, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, - 0x74, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x40, 0x0a, 0x09, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x47, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, - 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3e, 0x0a, 0x09, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x53, 0x65, 0x74, 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x1a, 0x17, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x22, 0x00, 0x28, 0x01, 0x12, 0x54, 0x0a, 0x13, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x12, - 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4c, - 0x0a, 0x13, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x53, 0x65, 0x74, 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x1a, 0x1b, 0x2e, 0x69, 0x6d, + 0x61, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x92, 0x41, 0x02, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x0d, 0x12, 0x0b, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x55, + 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x14, 0x92, 0x41, 0x02, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x2f, 0x68, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x68, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x25, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x92, 0x41, 0x02, 0x62, 0x00, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, + 0x5d, 0x0a, 0x0c, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x16, 0x92, 0x41, 0x02, 0x62, 0x00, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x65, + 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1f, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, + 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x65, 0x74, 0x72, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x16, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x29, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x22, 0x00, 0x28, 0x01, 0x12, 0x42, 0x0a, 0x0a, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x1a, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, - 0x12, 0x44, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x53, 0x63, 0x61, 0x6e, 0x12, - 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x5a, 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, - 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x48, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, + 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, + 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x64, 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x2f, 0x73, 0x65, 0x74, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x50, 0x0a, 0x04, 0x5a, 0x41, 0x64, 0x64, 0x12, 0x1a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x13, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x3a, 0x01, 0x2a, 0x22, 0x08, 0x2f, 0x64, 0x62, 0x2f, 0x7a, 0x61, + 0x64, 0x64, 0x12, 0x73, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x5a, 0x41, 0x64, 0x64, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5a, + 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, + 0x01, 0x2a, 0x22, 0x13, 0x2f, 0x64, 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x2f, 0x7a, 0x61, 0x64, 0x64, 0x12, 0x53, 0x0a, 0x05, 0x5a, 0x53, 0x63, 0x61, 0x6e, + 0x12, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x5a, 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, 0x45, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x3a, 0x01, + 0x2a, 0x22, 0x09, 0x2f, 0x64, 0x62, 0x2f, 0x7a, 0x73, 0x63, 0x61, 0x6e, 0x12, 0x5b, 0x0a, 0x0e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x17, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x3a, 0x01, 0x2a, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x88, 0x02, 0x01, 0x12, 0x6b, 0x0a, 0x12, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, 0x12, + 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, + 0x3a, 0x01, 0x2a, 0x22, 0x0e, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x77, + 0x69, 0x74, 0x68, 0x88, 0x02, 0x01, 0x12, 0x79, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x56, 0x32, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x25, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a, + 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x2f, 0x76, + 0x32, 0x12, 0x6c, 0x0a, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x12, 0x22, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x0d, 0x3a, 0x01, 0x2a, 0x22, 0x08, 0x2f, 0x64, 0x62, 0x2f, 0x6c, 0x6f, 0x61, 0x64, 0x12, + 0x74, 0x0a, 0x0e, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x3a, 0x01, 0x2a, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x75, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x74, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x3a, 0x01, 0x2a, 0x22, + 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x0c, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, + 0x3a, 0x01, 0x2a, 0x22, 0x08, 0x2f, 0x64, 0x62, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x88, 0x02, 0x01, + 0x12, 0x75, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x56, 0x32, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x56, 0x32, 0x1a, 0x25, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x56, 0x32, 0x22, + 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x64, 0x62, 0x2f, + 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x76, 0x32, 0x12, 0x67, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x1a, + 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x55, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x64, 0x62, 0x2f, 0x75, 0x73, + 0x65, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, + 0x12, 0x63, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x12, 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x18, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x0f, 0x3a, 0x01, 0x2a, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x88, 0x02, 0x01, 0x12, 0x79, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x56, 0x32, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x25, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a, 0x01, + 0x2a, 0x22, 0x0d, 0x2f, 0x64, 0x62, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x32, + 0x12, 0x6a, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x64, 0x62, + 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x88, 0x02, 0x01, 0x12, 0x84, 0x01, 0x0a, + 0x15, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x12, 0x26, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x3a, + 0x01, 0x2a, 0x22, 0x0f, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x2f, 0x76, 0x32, 0x12, 0x69, 0x0a, 0x0a, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x20, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, + 0x2f, 0x64, 0x62, 0x2f, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x58, + 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x18, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x63, 0x74, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x40, 0x0a, 0x09, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x47, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3e, 0x0a, 0x09, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x74, 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x1a, 0x17, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x00, 0x28, 0x01, 0x12, 0x54, 0x0a, 0x13, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x65, + 0x74, 0x12, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, - 0x12, 0x42, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x41, 0x6c, - 0x6c, 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x22, 0x00, 0x28, 0x01, 0x12, 0x44, 0x0a, 0x08, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x78, + 0x12, 0x4c, 0x0a, 0x13, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x1a, 0x1b, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x22, 0x00, 0x28, 0x01, 0x12, 0x42, + 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x1a, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x63, 0x61, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, + 0x30, 0x01, 0x12, 0x44, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x53, 0x63, 0x61, + 0x6e, 0x12, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x5a, 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, + 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x48, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, + 0x30, 0x01, 0x12, 0x42, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, + 0x41, 0x6c, 0x6c, 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x22, 0x00, 0x28, 0x01, 0x12, 0x44, 0x0a, 0x08, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, + 0x54, 0x78, 0x12, 0x1e, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x40, 0x0a, 0x0b, + 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x78, 0x12, 0x14, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, + 0x6b, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x00, 0x28, 0x01, 0x12, 0x4c, + 0x0a, 0x0e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x78, 0x12, 0x1e, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x40, 0x0a, 0x0b, 0x72, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x78, 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x1a, - 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x00, 0x28, 0x01, 0x12, 0x4c, 0x0a, 0x0e, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x78, 0x12, 0x1e, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, - 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, - 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5e, 0x0a, 0x07, 0x53, 0x51, - 0x4c, 0x45, 0x78, 0x65, 0x63, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, - 0x64, 0x62, 0x2f, 0x73, 0x71, 0x6c, 0x65, 0x78, 0x65, 0x63, 0x12, 0x67, 0x0a, 0x0d, 0x55, 0x6e, - 0x61, 0x72, 0x79, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1e, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x71, 0x6c, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x12, 0x64, 0x0a, 0x08, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x1e, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x17, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x64, 0x62, 0x2f, 0x73, - 0x71, 0x6c, 0x71, 0x75, 0x65, 0x72, 0x79, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x0a, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x16, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x64, 0x62, 0x2f, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x5b, 0x0a, 0x0d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x1a, 0x1d, 0x2e, + 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5e, 0x0a, 0x07, + 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x3a, 0x01, 0x2a, 0x22, + 0x0b, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x71, 0x6c, 0x65, 0x78, 0x65, 0x63, 0x12, 0x67, 0x0a, 0x0d, + 0x55, 0x6e, 0x61, 0x72, 0x79, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1e, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, - 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x15, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x0f, 0x3a, 0x01, 0x2a, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x12, 0x7f, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x53, 0x51, 0x4c, 0x47, 0x65, 0x74, 0x12, 0x26, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x21, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, - 0x64, 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x73, 0x71, - 0x6c, 0x67, 0x65, 0x74, 0x12, 0x7c, 0x0a, 0x10, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x26, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x64, 0x62, 0x2f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, - 0x74, 0x65, 0x42, 0x91, 0x03, 0x92, 0x41, 0xe0, 0x02, 0x12, 0xee, 0x01, 0x0a, 0x0f, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x20, 0x52, 0x45, 0x53, 0x54, 0x20, 0x41, 0x50, 0x49, 0x12, 0xda, 0x01, - 0x3c, 0x62, 0x3e, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x41, 0x4e, 0x54, 0x3c, 0x2f, 0x62, 0x3e, - 0x3a, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x67, 0x65, 0x74, 0x3c, - 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, - 0x3e, 0x73, 0x61, 0x66, 0x65, 0x67, 0x65, 0x74, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x20, 0x3c, 0x75, 0x3e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x2d, 0x65, 0x6e, 0x63, 0x6f, 0x64, - 0x65, 0x64, 0x3c, 0x2f, 0x75, 0x3e, 0x20, 0x6b, 0x65, 0x79, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x61, 0x6c, - 0x6c, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x73, 0x65, 0x74, 0x3c, 0x2f, 0x63, 0x6f, 0x64, - 0x65, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x73, 0x61, 0x66, - 0x65, 0x73, 0x65, 0x74, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x20, 0x3c, 0x75, 0x3e, - 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x2d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x3c, 0x2f, - 0x75, 0x3e, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x2e, 0x22, 0x04, 0x2f, 0x61, 0x70, 0x69, - 0x5a, 0x59, 0x0a, 0x57, 0x0a, 0x06, 0x62, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x4d, 0x08, 0x02, - 0x12, 0x38, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x20, 0x62, 0x79, 0x20, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x3a, 0x20, 0x42, 0x65, 0x61, 0x72, - 0x65, 0x72, 0x20, 0x3c, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3e, 0x1a, 0x0d, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x02, 0x62, 0x0c, 0x0a, 0x0a, 0x0a, - 0x06, 0x62, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x00, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x6e, 0x6f, 0x74, 0x61, 0x72, 0x79, - 0x2f, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, + 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x17, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x71, 0x6c, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x64, 0x0a, 0x08, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x12, 0x1e, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x64, 0x62, + 0x2f, 0x73, 0x71, 0x6c, 0x71, 0x75, 0x65, 0x72, 0x79, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x0a, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x64, 0x62, 0x2f, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x5b, 0x0a, 0x0d, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x1a, + 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x15, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x3a, 0x01, 0x2a, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x7f, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x47, 0x65, 0x74, 0x12, 0x26, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x21, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, + 0x15, 0x2f, 0x64, 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, + 0x73, 0x71, 0x6c, 0x67, 0x65, 0x74, 0x12, 0x7c, 0x0a, 0x10, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, + 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x26, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x72, 0x75, 0x6e, 0x63, + 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x64, 0x62, 0x2f, 0x74, 0x72, 0x75, 0x6e, + 0x63, 0x61, 0x74, 0x65, 0x42, 0x91, 0x03, 0x92, 0x41, 0xe0, 0x02, 0x12, 0xee, 0x01, 0x0a, 0x0f, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x20, 0x52, 0x45, 0x53, 0x54, 0x20, 0x41, 0x50, 0x49, 0x12, + 0xda, 0x01, 0x3c, 0x62, 0x3e, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x41, 0x4e, 0x54, 0x3c, 0x2f, + 0x62, 0x3e, 0x3a, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x67, 0x65, + 0x74, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x63, 0x6f, + 0x64, 0x65, 0x3e, 0x73, 0x61, 0x66, 0x65, 0x67, 0x65, 0x74, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, + 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x20, 0x3c, 0x75, 0x3e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x2d, 0x65, 0x6e, 0x63, + 0x6f, 0x64, 0x65, 0x64, 0x3c, 0x2f, 0x75, 0x3e, 0x20, 0x6b, 0x65, 0x79, 0x73, 0x20, 0x61, 0x6e, + 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, + 0x61, 0x6c, 0x6c, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x73, 0x65, 0x74, 0x3c, 0x2f, 0x63, + 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x73, + 0x61, 0x66, 0x65, 0x73, 0x65, 0x74, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x20, 0x3c, + 0x75, 0x3e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x2d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, + 0x3c, 0x2f, 0x75, 0x3e, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x2e, 0x22, 0x04, 0x2f, 0x61, + 0x70, 0x69, 0x5a, 0x59, 0x0a, 0x57, 0x0a, 0x06, 0x62, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x4d, + 0x08, 0x02, 0x12, 0x38, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x3a, 0x20, 0x42, 0x65, + 0x61, 0x72, 0x65, 0x72, 0x20, 0x3c, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3e, 0x1a, 0x0d, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x02, 0x62, 0x0c, 0x0a, + 0x0a, 0x0a, 0x06, 0x62, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x00, 0x5a, 0x2b, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x6e, 0x6f, 0x74, 0x61, + 0x72, 0x79, 0x2f, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -10617,452 +10838,460 @@ func file_schema_proto_rawDescGZIP() []byte { return file_schema_proto_rawDescData } -var file_schema_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_schema_proto_msgTypes = make([]protoimpl.MessageInfo, 133) +var file_schema_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_schema_proto_msgTypes = make([]protoimpl.MessageInfo, 135) var file_schema_proto_goTypes = []interface{}{ - (EntryTypeAction)(0), // 0: immudb.schema.EntryTypeAction - (PermissionAction)(0), // 1: immudb.schema.PermissionAction - (TxMode)(0), // 2: immudb.schema.TxMode - (*Key)(nil), // 3: immudb.schema.Key - (*Permission)(nil), // 4: immudb.schema.Permission - (*User)(nil), // 5: immudb.schema.User - (*UserList)(nil), // 6: immudb.schema.UserList - (*CreateUserRequest)(nil), // 7: immudb.schema.CreateUserRequest - (*UserRequest)(nil), // 8: immudb.schema.UserRequest - (*ChangePasswordRequest)(nil), // 9: immudb.schema.ChangePasswordRequest - (*LoginRequest)(nil), // 10: immudb.schema.LoginRequest - (*LoginResponse)(nil), // 11: immudb.schema.LoginResponse - (*AuthConfig)(nil), // 12: immudb.schema.AuthConfig - (*MTLSConfig)(nil), // 13: immudb.schema.MTLSConfig - (*OpenSessionRequest)(nil), // 14: immudb.schema.OpenSessionRequest - (*OpenSessionResponse)(nil), // 15: immudb.schema.OpenSessionResponse - (*Precondition)(nil), // 16: immudb.schema.Precondition - (*KeyValue)(nil), // 17: immudb.schema.KeyValue - (*Entry)(nil), // 18: immudb.schema.Entry - (*Reference)(nil), // 19: immudb.schema.Reference - (*Op)(nil), // 20: immudb.schema.Op - (*ExecAllRequest)(nil), // 21: immudb.schema.ExecAllRequest - (*Entries)(nil), // 22: immudb.schema.Entries - (*ZEntry)(nil), // 23: immudb.schema.ZEntry - (*ZEntries)(nil), // 24: immudb.schema.ZEntries - (*ScanRequest)(nil), // 25: immudb.schema.ScanRequest - (*KeyPrefix)(nil), // 26: immudb.schema.KeyPrefix - (*EntryCount)(nil), // 27: immudb.schema.EntryCount - (*Signature)(nil), // 28: immudb.schema.Signature - (*TxHeader)(nil), // 29: immudb.schema.TxHeader - (*TxMetadata)(nil), // 30: immudb.schema.TxMetadata - (*LinearProof)(nil), // 31: immudb.schema.LinearProof - (*LinearAdvanceProof)(nil), // 32: immudb.schema.LinearAdvanceProof - (*DualProof)(nil), // 33: immudb.schema.DualProof - (*DualProofV2)(nil), // 34: immudb.schema.DualProofV2 - (*Tx)(nil), // 35: immudb.schema.Tx - (*TxEntry)(nil), // 36: immudb.schema.TxEntry - (*KVMetadata)(nil), // 37: immudb.schema.KVMetadata - (*Expiration)(nil), // 38: immudb.schema.Expiration - (*VerifiableTx)(nil), // 39: immudb.schema.VerifiableTx - (*VerifiableTxV2)(nil), // 40: immudb.schema.VerifiableTxV2 - (*VerifiableEntry)(nil), // 41: immudb.schema.VerifiableEntry - (*InclusionProof)(nil), // 42: immudb.schema.InclusionProof - (*SetRequest)(nil), // 43: immudb.schema.SetRequest - (*KeyRequest)(nil), // 44: immudb.schema.KeyRequest - (*KeyListRequest)(nil), // 45: immudb.schema.KeyListRequest - (*DeleteKeysRequest)(nil), // 46: immudb.schema.DeleteKeysRequest - (*VerifiableSetRequest)(nil), // 47: immudb.schema.VerifiableSetRequest - (*VerifiableGetRequest)(nil), // 48: immudb.schema.VerifiableGetRequest - (*ServerInfoRequest)(nil), // 49: immudb.schema.ServerInfoRequest - (*ServerInfoResponse)(nil), // 50: immudb.schema.ServerInfoResponse - (*HealthResponse)(nil), // 51: immudb.schema.HealthResponse - (*DatabaseHealthResponse)(nil), // 52: immudb.schema.DatabaseHealthResponse - (*ImmutableState)(nil), // 53: immudb.schema.ImmutableState - (*ReferenceRequest)(nil), // 54: immudb.schema.ReferenceRequest - (*VerifiableReferenceRequest)(nil), // 55: immudb.schema.VerifiableReferenceRequest - (*ZAddRequest)(nil), // 56: immudb.schema.ZAddRequest - (*Score)(nil), // 57: immudb.schema.Score - (*ZScanRequest)(nil), // 58: immudb.schema.ZScanRequest - (*HistoryRequest)(nil), // 59: immudb.schema.HistoryRequest - (*VerifiableZAddRequest)(nil), // 60: immudb.schema.VerifiableZAddRequest - (*TxRequest)(nil), // 61: immudb.schema.TxRequest - (*EntriesSpec)(nil), // 62: immudb.schema.EntriesSpec - (*EntryTypeSpec)(nil), // 63: immudb.schema.EntryTypeSpec - (*VerifiableTxRequest)(nil), // 64: immudb.schema.VerifiableTxRequest - (*TxScanRequest)(nil), // 65: immudb.schema.TxScanRequest - (*TxList)(nil), // 66: immudb.schema.TxList - (*ExportTxRequest)(nil), // 67: immudb.schema.ExportTxRequest - (*ReplicaState)(nil), // 68: immudb.schema.ReplicaState - (*Database)(nil), // 69: immudb.schema.Database - (*DatabaseSettings)(nil), // 70: immudb.schema.DatabaseSettings - (*CreateDatabaseRequest)(nil), // 71: immudb.schema.CreateDatabaseRequest - (*CreateDatabaseResponse)(nil), // 72: immudb.schema.CreateDatabaseResponse - (*UpdateDatabaseRequest)(nil), // 73: immudb.schema.UpdateDatabaseRequest - (*UpdateDatabaseResponse)(nil), // 74: immudb.schema.UpdateDatabaseResponse - (*DatabaseSettingsRequest)(nil), // 75: immudb.schema.DatabaseSettingsRequest - (*DatabaseSettingsResponse)(nil), // 76: immudb.schema.DatabaseSettingsResponse - (*NullableUint32)(nil), // 77: immudb.schema.NullableUint32 - (*NullableUint64)(nil), // 78: immudb.schema.NullableUint64 - (*NullableFloat)(nil), // 79: immudb.schema.NullableFloat - (*NullableBool)(nil), // 80: immudb.schema.NullableBool - (*NullableString)(nil), // 81: immudb.schema.NullableString - (*NullableMilliseconds)(nil), // 82: immudb.schema.NullableMilliseconds - (*DatabaseNullableSettings)(nil), // 83: immudb.schema.DatabaseNullableSettings - (*ReplicationNullableSettings)(nil), // 84: immudb.schema.ReplicationNullableSettings - (*TruncationNullableSettings)(nil), // 85: immudb.schema.TruncationNullableSettings - (*IndexNullableSettings)(nil), // 86: immudb.schema.IndexNullableSettings - (*AHTNullableSettings)(nil), // 87: immudb.schema.AHTNullableSettings - (*LoadDatabaseRequest)(nil), // 88: immudb.schema.LoadDatabaseRequest - (*LoadDatabaseResponse)(nil), // 89: immudb.schema.LoadDatabaseResponse - (*UnloadDatabaseRequest)(nil), // 90: immudb.schema.UnloadDatabaseRequest - (*UnloadDatabaseResponse)(nil), // 91: immudb.schema.UnloadDatabaseResponse - (*DeleteDatabaseRequest)(nil), // 92: immudb.schema.DeleteDatabaseRequest - (*DeleteDatabaseResponse)(nil), // 93: immudb.schema.DeleteDatabaseResponse - (*FlushIndexRequest)(nil), // 94: immudb.schema.FlushIndexRequest - (*FlushIndexResponse)(nil), // 95: immudb.schema.FlushIndexResponse - (*Table)(nil), // 96: immudb.schema.Table - (*SQLGetRequest)(nil), // 97: immudb.schema.SQLGetRequest - (*VerifiableSQLGetRequest)(nil), // 98: immudb.schema.VerifiableSQLGetRequest - (*SQLEntry)(nil), // 99: immudb.schema.SQLEntry - (*VerifiableSQLEntry)(nil), // 100: immudb.schema.VerifiableSQLEntry - (*UseDatabaseReply)(nil), // 101: immudb.schema.UseDatabaseReply - (*ChangePermissionRequest)(nil), // 102: immudb.schema.ChangePermissionRequest - (*SetActiveUserRequest)(nil), // 103: immudb.schema.SetActiveUserRequest - (*DatabaseListResponse)(nil), // 104: immudb.schema.DatabaseListResponse - (*DatabaseListRequestV2)(nil), // 105: immudb.schema.DatabaseListRequestV2 - (*DatabaseListResponseV2)(nil), // 106: immudb.schema.DatabaseListResponseV2 - (*DatabaseInfo)(nil), // 107: immudb.schema.DatabaseInfo - (*Chunk)(nil), // 108: immudb.schema.Chunk - (*UseSnapshotRequest)(nil), // 109: immudb.schema.UseSnapshotRequest - (*SQLExecRequest)(nil), // 110: immudb.schema.SQLExecRequest - (*SQLQueryRequest)(nil), // 111: immudb.schema.SQLQueryRequest - (*NamedParam)(nil), // 112: immudb.schema.NamedParam - (*SQLExecResult)(nil), // 113: immudb.schema.SQLExecResult - (*CommittedSQLTx)(nil), // 114: immudb.schema.CommittedSQLTx - (*SQLQueryResult)(nil), // 115: immudb.schema.SQLQueryResult - (*Column)(nil), // 116: immudb.schema.Column - (*Row)(nil), // 117: immudb.schema.Row - (*SQLValue)(nil), // 118: immudb.schema.SQLValue - (*NewTxRequest)(nil), // 119: immudb.schema.NewTxRequest - (*NewTxResponse)(nil), // 120: immudb.schema.NewTxResponse - (*ErrorInfo)(nil), // 121: immudb.schema.ErrorInfo - (*DebugInfo)(nil), // 122: immudb.schema.DebugInfo - (*RetryInfo)(nil), // 123: immudb.schema.RetryInfo - (*TruncateDatabaseRequest)(nil), // 124: immudb.schema.TruncateDatabaseRequest - (*TruncateDatabaseResponse)(nil), // 125: immudb.schema.TruncateDatabaseResponse - (*Precondition_KeyMustExistPrecondition)(nil), // 126: immudb.schema.Precondition.KeyMustExistPrecondition - (*Precondition_KeyMustNotExistPrecondition)(nil), // 127: immudb.schema.Precondition.KeyMustNotExistPrecondition - (*Precondition_KeyNotModifiedAfterTXPrecondition)(nil), // 128: immudb.schema.Precondition.KeyNotModifiedAfterTXPrecondition - nil, // 129: immudb.schema.VerifiableSQLEntry.ColNamesByIdEntry - nil, // 130: immudb.schema.VerifiableSQLEntry.ColIdsByNameEntry - nil, // 131: immudb.schema.VerifiableSQLEntry.ColTypesByIdEntry - nil, // 132: immudb.schema.VerifiableSQLEntry.ColLenByIdEntry - nil, // 133: immudb.schema.Chunk.MetadataEntry - nil, // 134: immudb.schema.CommittedSQLTx.LastInsertedPKsEntry - nil, // 135: immudb.schema.CommittedSQLTx.FirstInsertedPKsEntry - (structpb.NullValue)(0), // 136: google.protobuf.NullValue - (*emptypb.Empty)(nil), // 137: google.protobuf.Empty + (SQLPrivilege)(0), // 0: immudb.schema.SQLPrivilege + (EntryTypeAction)(0), // 1: immudb.schema.EntryTypeAction + (PermissionAction)(0), // 2: immudb.schema.PermissionAction + (TxMode)(0), // 3: immudb.schema.TxMode + (*Key)(nil), // 4: immudb.schema.Key + (*Permission)(nil), // 5: immudb.schema.Permission + (*User)(nil), // 6: immudb.schema.User + (*UserList)(nil), // 7: immudb.schema.UserList + (*CreateUserRequest)(nil), // 8: immudb.schema.CreateUserRequest + (*UserRequest)(nil), // 9: immudb.schema.UserRequest + (*ChangePasswordRequest)(nil), // 10: immudb.schema.ChangePasswordRequest + (*LoginRequest)(nil), // 11: immudb.schema.LoginRequest + (*LoginResponse)(nil), // 12: immudb.schema.LoginResponse + (*AuthConfig)(nil), // 13: immudb.schema.AuthConfig + (*MTLSConfig)(nil), // 14: immudb.schema.MTLSConfig + (*OpenSessionRequest)(nil), // 15: immudb.schema.OpenSessionRequest + (*OpenSessionResponse)(nil), // 16: immudb.schema.OpenSessionResponse + (*Precondition)(nil), // 17: immudb.schema.Precondition + (*KeyValue)(nil), // 18: immudb.schema.KeyValue + (*Entry)(nil), // 19: immudb.schema.Entry + (*Reference)(nil), // 20: immudb.schema.Reference + (*Op)(nil), // 21: immudb.schema.Op + (*ExecAllRequest)(nil), // 22: immudb.schema.ExecAllRequest + (*Entries)(nil), // 23: immudb.schema.Entries + (*ZEntry)(nil), // 24: immudb.schema.ZEntry + (*ZEntries)(nil), // 25: immudb.schema.ZEntries + (*ScanRequest)(nil), // 26: immudb.schema.ScanRequest + (*KeyPrefix)(nil), // 27: immudb.schema.KeyPrefix + (*EntryCount)(nil), // 28: immudb.schema.EntryCount + (*Signature)(nil), // 29: immudb.schema.Signature + (*TxHeader)(nil), // 30: immudb.schema.TxHeader + (*TxMetadata)(nil), // 31: immudb.schema.TxMetadata + (*LinearProof)(nil), // 32: immudb.schema.LinearProof + (*LinearAdvanceProof)(nil), // 33: immudb.schema.LinearAdvanceProof + (*DualProof)(nil), // 34: immudb.schema.DualProof + (*DualProofV2)(nil), // 35: immudb.schema.DualProofV2 + (*Tx)(nil), // 36: immudb.schema.Tx + (*TxEntry)(nil), // 37: immudb.schema.TxEntry + (*KVMetadata)(nil), // 38: immudb.schema.KVMetadata + (*Expiration)(nil), // 39: immudb.schema.Expiration + (*VerifiableTx)(nil), // 40: immudb.schema.VerifiableTx + (*VerifiableTxV2)(nil), // 41: immudb.schema.VerifiableTxV2 + (*VerifiableEntry)(nil), // 42: immudb.schema.VerifiableEntry + (*InclusionProof)(nil), // 43: immudb.schema.InclusionProof + (*SetRequest)(nil), // 44: immudb.schema.SetRequest + (*KeyRequest)(nil), // 45: immudb.schema.KeyRequest + (*KeyListRequest)(nil), // 46: immudb.schema.KeyListRequest + (*DeleteKeysRequest)(nil), // 47: immudb.schema.DeleteKeysRequest + (*VerifiableSetRequest)(nil), // 48: immudb.schema.VerifiableSetRequest + (*VerifiableGetRequest)(nil), // 49: immudb.schema.VerifiableGetRequest + (*ServerInfoRequest)(nil), // 50: immudb.schema.ServerInfoRequest + (*ServerInfoResponse)(nil), // 51: immudb.schema.ServerInfoResponse + (*HealthResponse)(nil), // 52: immudb.schema.HealthResponse + (*DatabaseHealthResponse)(nil), // 53: immudb.schema.DatabaseHealthResponse + (*ImmutableState)(nil), // 54: immudb.schema.ImmutableState + (*ReferenceRequest)(nil), // 55: immudb.schema.ReferenceRequest + (*VerifiableReferenceRequest)(nil), // 56: immudb.schema.VerifiableReferenceRequest + (*ZAddRequest)(nil), // 57: immudb.schema.ZAddRequest + (*Score)(nil), // 58: immudb.schema.Score + (*ZScanRequest)(nil), // 59: immudb.schema.ZScanRequest + (*HistoryRequest)(nil), // 60: immudb.schema.HistoryRequest + (*VerifiableZAddRequest)(nil), // 61: immudb.schema.VerifiableZAddRequest + (*TxRequest)(nil), // 62: immudb.schema.TxRequest + (*EntriesSpec)(nil), // 63: immudb.schema.EntriesSpec + (*EntryTypeSpec)(nil), // 64: immudb.schema.EntryTypeSpec + (*VerifiableTxRequest)(nil), // 65: immudb.schema.VerifiableTxRequest + (*TxScanRequest)(nil), // 66: immudb.schema.TxScanRequest + (*TxList)(nil), // 67: immudb.schema.TxList + (*ExportTxRequest)(nil), // 68: immudb.schema.ExportTxRequest + (*ReplicaState)(nil), // 69: immudb.schema.ReplicaState + (*Database)(nil), // 70: immudb.schema.Database + (*DatabaseSettings)(nil), // 71: immudb.schema.DatabaseSettings + (*CreateDatabaseRequest)(nil), // 72: immudb.schema.CreateDatabaseRequest + (*CreateDatabaseResponse)(nil), // 73: immudb.schema.CreateDatabaseResponse + (*UpdateDatabaseRequest)(nil), // 74: immudb.schema.UpdateDatabaseRequest + (*UpdateDatabaseResponse)(nil), // 75: immudb.schema.UpdateDatabaseResponse + (*DatabaseSettingsRequest)(nil), // 76: immudb.schema.DatabaseSettingsRequest + (*DatabaseSettingsResponse)(nil), // 77: immudb.schema.DatabaseSettingsResponse + (*NullableUint32)(nil), // 78: immudb.schema.NullableUint32 + (*NullableUint64)(nil), // 79: immudb.schema.NullableUint64 + (*NullableFloat)(nil), // 80: immudb.schema.NullableFloat + (*NullableBool)(nil), // 81: immudb.schema.NullableBool + (*NullableString)(nil), // 82: immudb.schema.NullableString + (*NullableMilliseconds)(nil), // 83: immudb.schema.NullableMilliseconds + (*DatabaseNullableSettings)(nil), // 84: immudb.schema.DatabaseNullableSettings + (*ReplicationNullableSettings)(nil), // 85: immudb.schema.ReplicationNullableSettings + (*TruncationNullableSettings)(nil), // 86: immudb.schema.TruncationNullableSettings + (*IndexNullableSettings)(nil), // 87: immudb.schema.IndexNullableSettings + (*AHTNullableSettings)(nil), // 88: immudb.schema.AHTNullableSettings + (*LoadDatabaseRequest)(nil), // 89: immudb.schema.LoadDatabaseRequest + (*LoadDatabaseResponse)(nil), // 90: immudb.schema.LoadDatabaseResponse + (*UnloadDatabaseRequest)(nil), // 91: immudb.schema.UnloadDatabaseRequest + (*UnloadDatabaseResponse)(nil), // 92: immudb.schema.UnloadDatabaseResponse + (*DeleteDatabaseRequest)(nil), // 93: immudb.schema.DeleteDatabaseRequest + (*DeleteDatabaseResponse)(nil), // 94: immudb.schema.DeleteDatabaseResponse + (*FlushIndexRequest)(nil), // 95: immudb.schema.FlushIndexRequest + (*FlushIndexResponse)(nil), // 96: immudb.schema.FlushIndexResponse + (*Table)(nil), // 97: immudb.schema.Table + (*SQLGetRequest)(nil), // 98: immudb.schema.SQLGetRequest + (*VerifiableSQLGetRequest)(nil), // 99: immudb.schema.VerifiableSQLGetRequest + (*SQLEntry)(nil), // 100: immudb.schema.SQLEntry + (*VerifiableSQLEntry)(nil), // 101: immudb.schema.VerifiableSQLEntry + (*UseDatabaseReply)(nil), // 102: immudb.schema.UseDatabaseReply + (*ChangePermissionRequest)(nil), // 103: immudb.schema.ChangePermissionRequest + (*ChangeSQLPrivilegesRequest)(nil), // 104: immudb.schema.ChangeSQLPrivilegesRequest + (*ChangeSQLPrivilegesResponse)(nil), // 105: immudb.schema.ChangeSQLPrivilegesResponse + (*SetActiveUserRequest)(nil), // 106: immudb.schema.SetActiveUserRequest + (*DatabaseListResponse)(nil), // 107: immudb.schema.DatabaseListResponse + (*DatabaseListRequestV2)(nil), // 108: immudb.schema.DatabaseListRequestV2 + (*DatabaseListResponseV2)(nil), // 109: immudb.schema.DatabaseListResponseV2 + (*DatabaseInfo)(nil), // 110: immudb.schema.DatabaseInfo + (*Chunk)(nil), // 111: immudb.schema.Chunk + (*UseSnapshotRequest)(nil), // 112: immudb.schema.UseSnapshotRequest + (*SQLExecRequest)(nil), // 113: immudb.schema.SQLExecRequest + (*SQLQueryRequest)(nil), // 114: immudb.schema.SQLQueryRequest + (*NamedParam)(nil), // 115: immudb.schema.NamedParam + (*SQLExecResult)(nil), // 116: immudb.schema.SQLExecResult + (*CommittedSQLTx)(nil), // 117: immudb.schema.CommittedSQLTx + (*SQLQueryResult)(nil), // 118: immudb.schema.SQLQueryResult + (*Column)(nil), // 119: immudb.schema.Column + (*Row)(nil), // 120: immudb.schema.Row + (*SQLValue)(nil), // 121: immudb.schema.SQLValue + (*NewTxRequest)(nil), // 122: immudb.schema.NewTxRequest + (*NewTxResponse)(nil), // 123: immudb.schema.NewTxResponse + (*ErrorInfo)(nil), // 124: immudb.schema.ErrorInfo + (*DebugInfo)(nil), // 125: immudb.schema.DebugInfo + (*RetryInfo)(nil), // 126: immudb.schema.RetryInfo + (*TruncateDatabaseRequest)(nil), // 127: immudb.schema.TruncateDatabaseRequest + (*TruncateDatabaseResponse)(nil), // 128: immudb.schema.TruncateDatabaseResponse + (*Precondition_KeyMustExistPrecondition)(nil), // 129: immudb.schema.Precondition.KeyMustExistPrecondition + (*Precondition_KeyMustNotExistPrecondition)(nil), // 130: immudb.schema.Precondition.KeyMustNotExistPrecondition + (*Precondition_KeyNotModifiedAfterTXPrecondition)(nil), // 131: immudb.schema.Precondition.KeyNotModifiedAfterTXPrecondition + nil, // 132: immudb.schema.VerifiableSQLEntry.ColNamesByIdEntry + nil, // 133: immudb.schema.VerifiableSQLEntry.ColIdsByNameEntry + nil, // 134: immudb.schema.VerifiableSQLEntry.ColTypesByIdEntry + nil, // 135: immudb.schema.VerifiableSQLEntry.ColLenByIdEntry + nil, // 136: immudb.schema.Chunk.MetadataEntry + nil, // 137: immudb.schema.CommittedSQLTx.LastInsertedPKsEntry + nil, // 138: immudb.schema.CommittedSQLTx.FirstInsertedPKsEntry + (structpb.NullValue)(0), // 139: google.protobuf.NullValue + (*emptypb.Empty)(nil), // 140: google.protobuf.Empty } var file_schema_proto_depIdxs = []int32{ - 4, // 0: immudb.schema.User.permissions:type_name -> immudb.schema.Permission - 5, // 1: immudb.schema.UserList.users:type_name -> immudb.schema.User - 126, // 2: immudb.schema.Precondition.keyMustExist:type_name -> immudb.schema.Precondition.KeyMustExistPrecondition - 127, // 3: immudb.schema.Precondition.keyMustNotExist:type_name -> immudb.schema.Precondition.KeyMustNotExistPrecondition - 128, // 4: immudb.schema.Precondition.keyNotModifiedAfterTX:type_name -> immudb.schema.Precondition.KeyNotModifiedAfterTXPrecondition - 37, // 5: immudb.schema.KeyValue.metadata:type_name -> immudb.schema.KVMetadata - 19, // 6: immudb.schema.Entry.referencedBy:type_name -> immudb.schema.Reference - 37, // 7: immudb.schema.Entry.metadata:type_name -> immudb.schema.KVMetadata - 37, // 8: immudb.schema.Reference.metadata:type_name -> immudb.schema.KVMetadata - 17, // 9: immudb.schema.Op.kv:type_name -> immudb.schema.KeyValue - 56, // 10: immudb.schema.Op.zAdd:type_name -> immudb.schema.ZAddRequest - 54, // 11: immudb.schema.Op.ref:type_name -> immudb.schema.ReferenceRequest - 20, // 12: immudb.schema.ExecAllRequest.Operations:type_name -> immudb.schema.Op - 16, // 13: immudb.schema.ExecAllRequest.preconditions:type_name -> immudb.schema.Precondition - 18, // 14: immudb.schema.Entries.entries:type_name -> immudb.schema.Entry - 18, // 15: immudb.schema.ZEntry.entry:type_name -> immudb.schema.Entry - 23, // 16: immudb.schema.ZEntries.entries:type_name -> immudb.schema.ZEntry - 30, // 17: immudb.schema.TxHeader.metadata:type_name -> immudb.schema.TxMetadata - 42, // 18: immudb.schema.LinearAdvanceProof.inclusionProofs:type_name -> immudb.schema.InclusionProof - 29, // 19: immudb.schema.DualProof.sourceTxHeader:type_name -> immudb.schema.TxHeader - 29, // 20: immudb.schema.DualProof.targetTxHeader:type_name -> immudb.schema.TxHeader - 31, // 21: immudb.schema.DualProof.linearProof:type_name -> immudb.schema.LinearProof - 32, // 22: immudb.schema.DualProof.LinearAdvanceProof:type_name -> immudb.schema.LinearAdvanceProof - 29, // 23: immudb.schema.DualProofV2.sourceTxHeader:type_name -> immudb.schema.TxHeader - 29, // 24: immudb.schema.DualProofV2.targetTxHeader:type_name -> immudb.schema.TxHeader - 29, // 25: immudb.schema.Tx.header:type_name -> immudb.schema.TxHeader - 36, // 26: immudb.schema.Tx.entries:type_name -> immudb.schema.TxEntry - 18, // 27: immudb.schema.Tx.kvEntries:type_name -> immudb.schema.Entry - 23, // 28: immudb.schema.Tx.zEntries:type_name -> immudb.schema.ZEntry - 37, // 29: immudb.schema.TxEntry.metadata:type_name -> immudb.schema.KVMetadata - 38, // 30: immudb.schema.KVMetadata.expiration:type_name -> immudb.schema.Expiration - 35, // 31: immudb.schema.VerifiableTx.tx:type_name -> immudb.schema.Tx - 33, // 32: immudb.schema.VerifiableTx.dualProof:type_name -> immudb.schema.DualProof - 28, // 33: immudb.schema.VerifiableTx.signature:type_name -> immudb.schema.Signature - 35, // 34: immudb.schema.VerifiableTxV2.tx:type_name -> immudb.schema.Tx - 34, // 35: immudb.schema.VerifiableTxV2.dualProof:type_name -> immudb.schema.DualProofV2 - 28, // 36: immudb.schema.VerifiableTxV2.signature:type_name -> immudb.schema.Signature - 18, // 37: immudb.schema.VerifiableEntry.entry:type_name -> immudb.schema.Entry - 39, // 38: immudb.schema.VerifiableEntry.verifiableTx:type_name -> immudb.schema.VerifiableTx - 42, // 39: immudb.schema.VerifiableEntry.inclusionProof:type_name -> immudb.schema.InclusionProof - 17, // 40: immudb.schema.SetRequest.KVs:type_name -> immudb.schema.KeyValue - 16, // 41: immudb.schema.SetRequest.preconditions:type_name -> immudb.schema.Precondition - 43, // 42: immudb.schema.VerifiableSetRequest.setRequest:type_name -> immudb.schema.SetRequest - 44, // 43: immudb.schema.VerifiableGetRequest.keyRequest:type_name -> immudb.schema.KeyRequest - 28, // 44: immudb.schema.ImmutableState.signature:type_name -> immudb.schema.Signature - 16, // 45: immudb.schema.ReferenceRequest.preconditions:type_name -> immudb.schema.Precondition - 54, // 46: immudb.schema.VerifiableReferenceRequest.referenceRequest:type_name -> immudb.schema.ReferenceRequest - 57, // 47: immudb.schema.ZScanRequest.minScore:type_name -> immudb.schema.Score - 57, // 48: immudb.schema.ZScanRequest.maxScore:type_name -> immudb.schema.Score - 56, // 49: immudb.schema.VerifiableZAddRequest.zAddRequest:type_name -> immudb.schema.ZAddRequest - 62, // 50: immudb.schema.TxRequest.entriesSpec:type_name -> immudb.schema.EntriesSpec - 63, // 51: immudb.schema.EntriesSpec.kvEntriesSpec:type_name -> immudb.schema.EntryTypeSpec - 63, // 52: immudb.schema.EntriesSpec.zEntriesSpec:type_name -> immudb.schema.EntryTypeSpec - 63, // 53: immudb.schema.EntriesSpec.sqlEntriesSpec:type_name -> immudb.schema.EntryTypeSpec - 0, // 54: immudb.schema.EntryTypeSpec.action:type_name -> immudb.schema.EntryTypeAction - 62, // 55: immudb.schema.VerifiableTxRequest.entriesSpec:type_name -> immudb.schema.EntriesSpec - 62, // 56: immudb.schema.TxScanRequest.entriesSpec:type_name -> immudb.schema.EntriesSpec - 35, // 57: immudb.schema.TxList.txs:type_name -> immudb.schema.Tx - 68, // 58: immudb.schema.ExportTxRequest.replicaState:type_name -> immudb.schema.ReplicaState - 83, // 59: immudb.schema.CreateDatabaseRequest.settings:type_name -> immudb.schema.DatabaseNullableSettings - 83, // 60: immudb.schema.CreateDatabaseResponse.settings:type_name -> immudb.schema.DatabaseNullableSettings - 83, // 61: immudb.schema.UpdateDatabaseRequest.settings:type_name -> immudb.schema.DatabaseNullableSettings - 83, // 62: immudb.schema.UpdateDatabaseResponse.settings:type_name -> immudb.schema.DatabaseNullableSettings - 83, // 63: immudb.schema.DatabaseSettingsResponse.settings:type_name -> immudb.schema.DatabaseNullableSettings - 84, // 64: immudb.schema.DatabaseNullableSettings.replicationSettings:type_name -> immudb.schema.ReplicationNullableSettings - 77, // 65: immudb.schema.DatabaseNullableSettings.fileSize:type_name -> immudb.schema.NullableUint32 - 77, // 66: immudb.schema.DatabaseNullableSettings.maxKeyLen:type_name -> immudb.schema.NullableUint32 - 77, // 67: immudb.schema.DatabaseNullableSettings.maxValueLen:type_name -> immudb.schema.NullableUint32 - 77, // 68: immudb.schema.DatabaseNullableSettings.maxTxEntries:type_name -> immudb.schema.NullableUint32 - 80, // 69: immudb.schema.DatabaseNullableSettings.excludeCommitTime:type_name -> immudb.schema.NullableBool - 77, // 70: immudb.schema.DatabaseNullableSettings.maxConcurrency:type_name -> immudb.schema.NullableUint32 - 77, // 71: immudb.schema.DatabaseNullableSettings.maxIOConcurrency:type_name -> immudb.schema.NullableUint32 - 77, // 72: immudb.schema.DatabaseNullableSettings.txLogCacheSize:type_name -> immudb.schema.NullableUint32 - 77, // 73: immudb.schema.DatabaseNullableSettings.vLogMaxOpenedFiles:type_name -> immudb.schema.NullableUint32 - 77, // 74: immudb.schema.DatabaseNullableSettings.txLogMaxOpenedFiles:type_name -> immudb.schema.NullableUint32 - 77, // 75: immudb.schema.DatabaseNullableSettings.commitLogMaxOpenedFiles:type_name -> immudb.schema.NullableUint32 - 86, // 76: immudb.schema.DatabaseNullableSettings.indexSettings:type_name -> immudb.schema.IndexNullableSettings - 77, // 77: immudb.schema.DatabaseNullableSettings.writeTxHeaderVersion:type_name -> immudb.schema.NullableUint32 - 80, // 78: immudb.schema.DatabaseNullableSettings.autoload:type_name -> immudb.schema.NullableBool - 77, // 79: immudb.schema.DatabaseNullableSettings.readTxPoolSize:type_name -> immudb.schema.NullableUint32 - 82, // 80: immudb.schema.DatabaseNullableSettings.syncFrequency:type_name -> immudb.schema.NullableMilliseconds - 77, // 81: immudb.schema.DatabaseNullableSettings.writeBufferSize:type_name -> immudb.schema.NullableUint32 - 87, // 82: immudb.schema.DatabaseNullableSettings.ahtSettings:type_name -> immudb.schema.AHTNullableSettings - 77, // 83: immudb.schema.DatabaseNullableSettings.maxActiveTransactions:type_name -> immudb.schema.NullableUint32 - 77, // 84: immudb.schema.DatabaseNullableSettings.mvccReadSetLimit:type_name -> immudb.schema.NullableUint32 - 77, // 85: immudb.schema.DatabaseNullableSettings.vLogCacheSize:type_name -> immudb.schema.NullableUint32 - 85, // 86: immudb.schema.DatabaseNullableSettings.truncationSettings:type_name -> immudb.schema.TruncationNullableSettings - 80, // 87: immudb.schema.DatabaseNullableSettings.embeddedValues:type_name -> immudb.schema.NullableBool - 80, // 88: immudb.schema.DatabaseNullableSettings.preallocFiles:type_name -> immudb.schema.NullableBool - 80, // 89: immudb.schema.ReplicationNullableSettings.replica:type_name -> immudb.schema.NullableBool - 81, // 90: immudb.schema.ReplicationNullableSettings.primaryDatabase:type_name -> immudb.schema.NullableString - 81, // 91: immudb.schema.ReplicationNullableSettings.primaryHost:type_name -> immudb.schema.NullableString - 77, // 92: immudb.schema.ReplicationNullableSettings.primaryPort:type_name -> immudb.schema.NullableUint32 - 81, // 93: immudb.schema.ReplicationNullableSettings.primaryUsername:type_name -> immudb.schema.NullableString - 81, // 94: immudb.schema.ReplicationNullableSettings.primaryPassword:type_name -> immudb.schema.NullableString - 80, // 95: immudb.schema.ReplicationNullableSettings.syncReplication:type_name -> immudb.schema.NullableBool - 77, // 96: immudb.schema.ReplicationNullableSettings.syncAcks:type_name -> immudb.schema.NullableUint32 - 77, // 97: immudb.schema.ReplicationNullableSettings.prefetchTxBufferSize:type_name -> immudb.schema.NullableUint32 - 77, // 98: immudb.schema.ReplicationNullableSettings.replicationCommitConcurrency:type_name -> immudb.schema.NullableUint32 - 80, // 99: immudb.schema.ReplicationNullableSettings.allowTxDiscarding:type_name -> immudb.schema.NullableBool - 80, // 100: immudb.schema.ReplicationNullableSettings.skipIntegrityCheck:type_name -> immudb.schema.NullableBool - 80, // 101: immudb.schema.ReplicationNullableSettings.waitForIndexing:type_name -> immudb.schema.NullableBool - 82, // 102: immudb.schema.TruncationNullableSettings.retentionPeriod:type_name -> immudb.schema.NullableMilliseconds - 82, // 103: immudb.schema.TruncationNullableSettings.truncationFrequency:type_name -> immudb.schema.NullableMilliseconds - 77, // 104: immudb.schema.IndexNullableSettings.flushThreshold:type_name -> immudb.schema.NullableUint32 - 77, // 105: immudb.schema.IndexNullableSettings.syncThreshold:type_name -> immudb.schema.NullableUint32 - 77, // 106: immudb.schema.IndexNullableSettings.cacheSize:type_name -> immudb.schema.NullableUint32 - 77, // 107: immudb.schema.IndexNullableSettings.maxNodeSize:type_name -> immudb.schema.NullableUint32 - 77, // 108: immudb.schema.IndexNullableSettings.maxActiveSnapshots:type_name -> immudb.schema.NullableUint32 - 78, // 109: immudb.schema.IndexNullableSettings.renewSnapRootAfter:type_name -> immudb.schema.NullableUint64 - 77, // 110: immudb.schema.IndexNullableSettings.compactionThld:type_name -> immudb.schema.NullableUint32 - 77, // 111: immudb.schema.IndexNullableSettings.delayDuringCompaction:type_name -> immudb.schema.NullableUint32 - 77, // 112: immudb.schema.IndexNullableSettings.nodesLogMaxOpenedFiles:type_name -> immudb.schema.NullableUint32 - 77, // 113: immudb.schema.IndexNullableSettings.historyLogMaxOpenedFiles:type_name -> immudb.schema.NullableUint32 - 77, // 114: immudb.schema.IndexNullableSettings.commitLogMaxOpenedFiles:type_name -> immudb.schema.NullableUint32 - 77, // 115: immudb.schema.IndexNullableSettings.flushBufferSize:type_name -> immudb.schema.NullableUint32 - 79, // 116: immudb.schema.IndexNullableSettings.cleanupPercentage:type_name -> immudb.schema.NullableFloat - 77, // 117: immudb.schema.IndexNullableSettings.maxBulkSize:type_name -> immudb.schema.NullableUint32 - 82, // 118: immudb.schema.IndexNullableSettings.bulkPreparationTimeout:type_name -> immudb.schema.NullableMilliseconds - 77, // 119: immudb.schema.AHTNullableSettings.syncThreshold:type_name -> immudb.schema.NullableUint32 - 77, // 120: immudb.schema.AHTNullableSettings.writeBufferSize:type_name -> immudb.schema.NullableUint32 - 118, // 121: immudb.schema.SQLGetRequest.pkValues:type_name -> immudb.schema.SQLValue - 97, // 122: immudb.schema.VerifiableSQLGetRequest.sqlGetRequest:type_name -> immudb.schema.SQLGetRequest - 37, // 123: immudb.schema.SQLEntry.metadata:type_name -> immudb.schema.KVMetadata - 99, // 124: immudb.schema.VerifiableSQLEntry.sqlEntry:type_name -> immudb.schema.SQLEntry - 39, // 125: immudb.schema.VerifiableSQLEntry.verifiableTx:type_name -> immudb.schema.VerifiableTx - 42, // 126: immudb.schema.VerifiableSQLEntry.inclusionProof:type_name -> immudb.schema.InclusionProof - 129, // 127: immudb.schema.VerifiableSQLEntry.ColNamesById:type_name -> immudb.schema.VerifiableSQLEntry.ColNamesByIdEntry - 130, // 128: immudb.schema.VerifiableSQLEntry.ColIdsByName:type_name -> immudb.schema.VerifiableSQLEntry.ColIdsByNameEntry - 131, // 129: immudb.schema.VerifiableSQLEntry.ColTypesById:type_name -> immudb.schema.VerifiableSQLEntry.ColTypesByIdEntry - 132, // 130: immudb.schema.VerifiableSQLEntry.ColLenById:type_name -> immudb.schema.VerifiableSQLEntry.ColLenByIdEntry - 1, // 131: immudb.schema.ChangePermissionRequest.action:type_name -> immudb.schema.PermissionAction - 69, // 132: immudb.schema.DatabaseListResponse.databases:type_name -> immudb.schema.Database - 107, // 133: immudb.schema.DatabaseListResponseV2.databases:type_name -> immudb.schema.DatabaseInfo - 83, // 134: immudb.schema.DatabaseInfo.settings:type_name -> immudb.schema.DatabaseNullableSettings - 133, // 135: immudb.schema.Chunk.metadata:type_name -> immudb.schema.Chunk.MetadataEntry - 112, // 136: immudb.schema.SQLExecRequest.params:type_name -> immudb.schema.NamedParam - 112, // 137: immudb.schema.SQLQueryRequest.params:type_name -> immudb.schema.NamedParam - 118, // 138: immudb.schema.NamedParam.value:type_name -> immudb.schema.SQLValue - 114, // 139: immudb.schema.SQLExecResult.txs:type_name -> immudb.schema.CommittedSQLTx - 29, // 140: immudb.schema.CommittedSQLTx.header:type_name -> immudb.schema.TxHeader - 134, // 141: immudb.schema.CommittedSQLTx.lastInsertedPKs:type_name -> immudb.schema.CommittedSQLTx.LastInsertedPKsEntry - 135, // 142: immudb.schema.CommittedSQLTx.firstInsertedPKs:type_name -> immudb.schema.CommittedSQLTx.FirstInsertedPKsEntry - 116, // 143: immudb.schema.SQLQueryResult.columns:type_name -> immudb.schema.Column - 117, // 144: immudb.schema.SQLQueryResult.rows:type_name -> immudb.schema.Row - 118, // 145: immudb.schema.Row.values:type_name -> immudb.schema.SQLValue - 136, // 146: immudb.schema.SQLValue.null:type_name -> google.protobuf.NullValue - 2, // 147: immudb.schema.NewTxRequest.mode:type_name -> immudb.schema.TxMode - 78, // 148: immudb.schema.NewTxRequest.snapshotMustIncludeTxID:type_name -> immudb.schema.NullableUint64 - 82, // 149: immudb.schema.NewTxRequest.snapshotRenewalPeriod:type_name -> immudb.schema.NullableMilliseconds - 118, // 150: immudb.schema.CommittedSQLTx.LastInsertedPKsEntry.value:type_name -> immudb.schema.SQLValue - 118, // 151: immudb.schema.CommittedSQLTx.FirstInsertedPKsEntry.value:type_name -> immudb.schema.SQLValue - 137, // 152: immudb.schema.ImmuService.ListUsers:input_type -> google.protobuf.Empty - 7, // 153: immudb.schema.ImmuService.CreateUser:input_type -> immudb.schema.CreateUserRequest - 9, // 154: immudb.schema.ImmuService.ChangePassword:input_type -> immudb.schema.ChangePasswordRequest - 102, // 155: immudb.schema.ImmuService.ChangePermission:input_type -> immudb.schema.ChangePermissionRequest - 103, // 156: immudb.schema.ImmuService.SetActiveUser:input_type -> immudb.schema.SetActiveUserRequest - 12, // 157: immudb.schema.ImmuService.UpdateAuthConfig:input_type -> immudb.schema.AuthConfig - 13, // 158: immudb.schema.ImmuService.UpdateMTLSConfig:input_type -> immudb.schema.MTLSConfig - 14, // 159: immudb.schema.ImmuService.OpenSession:input_type -> immudb.schema.OpenSessionRequest - 137, // 160: immudb.schema.ImmuService.CloseSession:input_type -> google.protobuf.Empty - 137, // 161: immudb.schema.ImmuService.KeepAlive:input_type -> google.protobuf.Empty - 119, // 162: immudb.schema.ImmuService.NewTx:input_type -> immudb.schema.NewTxRequest - 137, // 163: immudb.schema.ImmuService.Commit:input_type -> google.protobuf.Empty - 137, // 164: immudb.schema.ImmuService.Rollback:input_type -> google.protobuf.Empty - 110, // 165: immudb.schema.ImmuService.TxSQLExec:input_type -> immudb.schema.SQLExecRequest - 111, // 166: immudb.schema.ImmuService.TxSQLQuery:input_type -> immudb.schema.SQLQueryRequest - 10, // 167: immudb.schema.ImmuService.Login:input_type -> immudb.schema.LoginRequest - 137, // 168: immudb.schema.ImmuService.Logout:input_type -> google.protobuf.Empty - 43, // 169: immudb.schema.ImmuService.Set:input_type -> immudb.schema.SetRequest - 47, // 170: immudb.schema.ImmuService.VerifiableSet:input_type -> immudb.schema.VerifiableSetRequest - 44, // 171: immudb.schema.ImmuService.Get:input_type -> immudb.schema.KeyRequest - 48, // 172: immudb.schema.ImmuService.VerifiableGet:input_type -> immudb.schema.VerifiableGetRequest - 46, // 173: immudb.schema.ImmuService.Delete:input_type -> immudb.schema.DeleteKeysRequest - 45, // 174: immudb.schema.ImmuService.GetAll:input_type -> immudb.schema.KeyListRequest - 21, // 175: immudb.schema.ImmuService.ExecAll:input_type -> immudb.schema.ExecAllRequest - 25, // 176: immudb.schema.ImmuService.Scan:input_type -> immudb.schema.ScanRequest - 26, // 177: immudb.schema.ImmuService.Count:input_type -> immudb.schema.KeyPrefix - 137, // 178: immudb.schema.ImmuService.CountAll:input_type -> google.protobuf.Empty - 61, // 179: immudb.schema.ImmuService.TxById:input_type -> immudb.schema.TxRequest - 64, // 180: immudb.schema.ImmuService.VerifiableTxById:input_type -> immudb.schema.VerifiableTxRequest - 65, // 181: immudb.schema.ImmuService.TxScan:input_type -> immudb.schema.TxScanRequest - 59, // 182: immudb.schema.ImmuService.History:input_type -> immudb.schema.HistoryRequest - 49, // 183: immudb.schema.ImmuService.ServerInfo:input_type -> immudb.schema.ServerInfoRequest - 137, // 184: immudb.schema.ImmuService.Health:input_type -> google.protobuf.Empty - 137, // 185: immudb.schema.ImmuService.DatabaseHealth:input_type -> google.protobuf.Empty - 137, // 186: immudb.schema.ImmuService.CurrentState:input_type -> google.protobuf.Empty - 54, // 187: immudb.schema.ImmuService.SetReference:input_type -> immudb.schema.ReferenceRequest - 55, // 188: immudb.schema.ImmuService.VerifiableSetReference:input_type -> immudb.schema.VerifiableReferenceRequest - 56, // 189: immudb.schema.ImmuService.ZAdd:input_type -> immudb.schema.ZAddRequest - 60, // 190: immudb.schema.ImmuService.VerifiableZAdd:input_type -> immudb.schema.VerifiableZAddRequest - 58, // 191: immudb.schema.ImmuService.ZScan:input_type -> immudb.schema.ZScanRequest - 69, // 192: immudb.schema.ImmuService.CreateDatabase:input_type -> immudb.schema.Database - 70, // 193: immudb.schema.ImmuService.CreateDatabaseWith:input_type -> immudb.schema.DatabaseSettings - 71, // 194: immudb.schema.ImmuService.CreateDatabaseV2:input_type -> immudb.schema.CreateDatabaseRequest - 88, // 195: immudb.schema.ImmuService.LoadDatabase:input_type -> immudb.schema.LoadDatabaseRequest - 90, // 196: immudb.schema.ImmuService.UnloadDatabase:input_type -> immudb.schema.UnloadDatabaseRequest - 92, // 197: immudb.schema.ImmuService.DeleteDatabase:input_type -> immudb.schema.DeleteDatabaseRequest - 137, // 198: immudb.schema.ImmuService.DatabaseList:input_type -> google.protobuf.Empty - 105, // 199: immudb.schema.ImmuService.DatabaseListV2:input_type -> immudb.schema.DatabaseListRequestV2 - 69, // 200: immudb.schema.ImmuService.UseDatabase:input_type -> immudb.schema.Database - 70, // 201: immudb.schema.ImmuService.UpdateDatabase:input_type -> immudb.schema.DatabaseSettings - 73, // 202: immudb.schema.ImmuService.UpdateDatabaseV2:input_type -> immudb.schema.UpdateDatabaseRequest - 137, // 203: immudb.schema.ImmuService.GetDatabaseSettings:input_type -> google.protobuf.Empty - 75, // 204: immudb.schema.ImmuService.GetDatabaseSettingsV2:input_type -> immudb.schema.DatabaseSettingsRequest - 94, // 205: immudb.schema.ImmuService.FlushIndex:input_type -> immudb.schema.FlushIndexRequest - 137, // 206: immudb.schema.ImmuService.CompactIndex:input_type -> google.protobuf.Empty - 44, // 207: immudb.schema.ImmuService.streamGet:input_type -> immudb.schema.KeyRequest - 108, // 208: immudb.schema.ImmuService.streamSet:input_type -> immudb.schema.Chunk - 48, // 209: immudb.schema.ImmuService.streamVerifiableGet:input_type -> immudb.schema.VerifiableGetRequest - 108, // 210: immudb.schema.ImmuService.streamVerifiableSet:input_type -> immudb.schema.Chunk - 25, // 211: immudb.schema.ImmuService.streamScan:input_type -> immudb.schema.ScanRequest - 58, // 212: immudb.schema.ImmuService.streamZScan:input_type -> immudb.schema.ZScanRequest - 59, // 213: immudb.schema.ImmuService.streamHistory:input_type -> immudb.schema.HistoryRequest - 108, // 214: immudb.schema.ImmuService.streamExecAll:input_type -> immudb.schema.Chunk - 67, // 215: immudb.schema.ImmuService.exportTx:input_type -> immudb.schema.ExportTxRequest - 108, // 216: immudb.schema.ImmuService.replicateTx:input_type -> immudb.schema.Chunk - 67, // 217: immudb.schema.ImmuService.streamExportTx:input_type -> immudb.schema.ExportTxRequest - 110, // 218: immudb.schema.ImmuService.SQLExec:input_type -> immudb.schema.SQLExecRequest - 111, // 219: immudb.schema.ImmuService.UnarySQLQuery:input_type -> immudb.schema.SQLQueryRequest - 111, // 220: immudb.schema.ImmuService.SQLQuery:input_type -> immudb.schema.SQLQueryRequest - 137, // 221: immudb.schema.ImmuService.ListTables:input_type -> google.protobuf.Empty - 96, // 222: immudb.schema.ImmuService.DescribeTable:input_type -> immudb.schema.Table - 98, // 223: immudb.schema.ImmuService.VerifiableSQLGet:input_type -> immudb.schema.VerifiableSQLGetRequest - 124, // 224: immudb.schema.ImmuService.TruncateDatabase:input_type -> immudb.schema.TruncateDatabaseRequest - 6, // 225: immudb.schema.ImmuService.ListUsers:output_type -> immudb.schema.UserList - 137, // 226: immudb.schema.ImmuService.CreateUser:output_type -> google.protobuf.Empty - 137, // 227: immudb.schema.ImmuService.ChangePassword:output_type -> google.protobuf.Empty - 137, // 228: immudb.schema.ImmuService.ChangePermission:output_type -> google.protobuf.Empty - 137, // 229: immudb.schema.ImmuService.SetActiveUser:output_type -> google.protobuf.Empty - 137, // 230: immudb.schema.ImmuService.UpdateAuthConfig:output_type -> google.protobuf.Empty - 137, // 231: immudb.schema.ImmuService.UpdateMTLSConfig:output_type -> google.protobuf.Empty - 15, // 232: immudb.schema.ImmuService.OpenSession:output_type -> immudb.schema.OpenSessionResponse - 137, // 233: immudb.schema.ImmuService.CloseSession:output_type -> google.protobuf.Empty - 137, // 234: immudb.schema.ImmuService.KeepAlive:output_type -> google.protobuf.Empty - 120, // 235: immudb.schema.ImmuService.NewTx:output_type -> immudb.schema.NewTxResponse - 114, // 236: immudb.schema.ImmuService.Commit:output_type -> immudb.schema.CommittedSQLTx - 137, // 237: immudb.schema.ImmuService.Rollback:output_type -> google.protobuf.Empty - 137, // 238: immudb.schema.ImmuService.TxSQLExec:output_type -> google.protobuf.Empty - 115, // 239: immudb.schema.ImmuService.TxSQLQuery:output_type -> immudb.schema.SQLQueryResult - 11, // 240: immudb.schema.ImmuService.Login:output_type -> immudb.schema.LoginResponse - 137, // 241: immudb.schema.ImmuService.Logout:output_type -> google.protobuf.Empty - 29, // 242: immudb.schema.ImmuService.Set:output_type -> immudb.schema.TxHeader - 39, // 243: immudb.schema.ImmuService.VerifiableSet:output_type -> immudb.schema.VerifiableTx - 18, // 244: immudb.schema.ImmuService.Get:output_type -> immudb.schema.Entry - 41, // 245: immudb.schema.ImmuService.VerifiableGet:output_type -> immudb.schema.VerifiableEntry - 29, // 246: immudb.schema.ImmuService.Delete:output_type -> immudb.schema.TxHeader - 22, // 247: immudb.schema.ImmuService.GetAll:output_type -> immudb.schema.Entries - 29, // 248: immudb.schema.ImmuService.ExecAll:output_type -> immudb.schema.TxHeader - 22, // 249: immudb.schema.ImmuService.Scan:output_type -> immudb.schema.Entries - 27, // 250: immudb.schema.ImmuService.Count:output_type -> immudb.schema.EntryCount - 27, // 251: immudb.schema.ImmuService.CountAll:output_type -> immudb.schema.EntryCount - 35, // 252: immudb.schema.ImmuService.TxById:output_type -> immudb.schema.Tx - 39, // 253: immudb.schema.ImmuService.VerifiableTxById:output_type -> immudb.schema.VerifiableTx - 66, // 254: immudb.schema.ImmuService.TxScan:output_type -> immudb.schema.TxList - 22, // 255: immudb.schema.ImmuService.History:output_type -> immudb.schema.Entries - 50, // 256: immudb.schema.ImmuService.ServerInfo:output_type -> immudb.schema.ServerInfoResponse - 51, // 257: immudb.schema.ImmuService.Health:output_type -> immudb.schema.HealthResponse - 52, // 258: immudb.schema.ImmuService.DatabaseHealth:output_type -> immudb.schema.DatabaseHealthResponse - 53, // 259: immudb.schema.ImmuService.CurrentState:output_type -> immudb.schema.ImmutableState - 29, // 260: immudb.schema.ImmuService.SetReference:output_type -> immudb.schema.TxHeader - 39, // 261: immudb.schema.ImmuService.VerifiableSetReference:output_type -> immudb.schema.VerifiableTx - 29, // 262: immudb.schema.ImmuService.ZAdd:output_type -> immudb.schema.TxHeader - 39, // 263: immudb.schema.ImmuService.VerifiableZAdd:output_type -> immudb.schema.VerifiableTx - 24, // 264: immudb.schema.ImmuService.ZScan:output_type -> immudb.schema.ZEntries - 137, // 265: immudb.schema.ImmuService.CreateDatabase:output_type -> google.protobuf.Empty - 137, // 266: immudb.schema.ImmuService.CreateDatabaseWith:output_type -> google.protobuf.Empty - 72, // 267: immudb.schema.ImmuService.CreateDatabaseV2:output_type -> immudb.schema.CreateDatabaseResponse - 89, // 268: immudb.schema.ImmuService.LoadDatabase:output_type -> immudb.schema.LoadDatabaseResponse - 91, // 269: immudb.schema.ImmuService.UnloadDatabase:output_type -> immudb.schema.UnloadDatabaseResponse - 93, // 270: immudb.schema.ImmuService.DeleteDatabase:output_type -> immudb.schema.DeleteDatabaseResponse - 104, // 271: immudb.schema.ImmuService.DatabaseList:output_type -> immudb.schema.DatabaseListResponse - 106, // 272: immudb.schema.ImmuService.DatabaseListV2:output_type -> immudb.schema.DatabaseListResponseV2 - 101, // 273: immudb.schema.ImmuService.UseDatabase:output_type -> immudb.schema.UseDatabaseReply - 137, // 274: immudb.schema.ImmuService.UpdateDatabase:output_type -> google.protobuf.Empty - 74, // 275: immudb.schema.ImmuService.UpdateDatabaseV2:output_type -> immudb.schema.UpdateDatabaseResponse - 70, // 276: immudb.schema.ImmuService.GetDatabaseSettings:output_type -> immudb.schema.DatabaseSettings - 76, // 277: immudb.schema.ImmuService.GetDatabaseSettingsV2:output_type -> immudb.schema.DatabaseSettingsResponse - 95, // 278: immudb.schema.ImmuService.FlushIndex:output_type -> immudb.schema.FlushIndexResponse - 137, // 279: immudb.schema.ImmuService.CompactIndex:output_type -> google.protobuf.Empty - 108, // 280: immudb.schema.ImmuService.streamGet:output_type -> immudb.schema.Chunk - 29, // 281: immudb.schema.ImmuService.streamSet:output_type -> immudb.schema.TxHeader - 108, // 282: immudb.schema.ImmuService.streamVerifiableGet:output_type -> immudb.schema.Chunk - 39, // 283: immudb.schema.ImmuService.streamVerifiableSet:output_type -> immudb.schema.VerifiableTx - 108, // 284: immudb.schema.ImmuService.streamScan:output_type -> immudb.schema.Chunk - 108, // 285: immudb.schema.ImmuService.streamZScan:output_type -> immudb.schema.Chunk - 108, // 286: immudb.schema.ImmuService.streamHistory:output_type -> immudb.schema.Chunk - 29, // 287: immudb.schema.ImmuService.streamExecAll:output_type -> immudb.schema.TxHeader - 108, // 288: immudb.schema.ImmuService.exportTx:output_type -> immudb.schema.Chunk - 29, // 289: immudb.schema.ImmuService.replicateTx:output_type -> immudb.schema.TxHeader - 108, // 290: immudb.schema.ImmuService.streamExportTx:output_type -> immudb.schema.Chunk - 113, // 291: immudb.schema.ImmuService.SQLExec:output_type -> immudb.schema.SQLExecResult - 115, // 292: immudb.schema.ImmuService.UnarySQLQuery:output_type -> immudb.schema.SQLQueryResult - 115, // 293: immudb.schema.ImmuService.SQLQuery:output_type -> immudb.schema.SQLQueryResult - 115, // 294: immudb.schema.ImmuService.ListTables:output_type -> immudb.schema.SQLQueryResult - 115, // 295: immudb.schema.ImmuService.DescribeTable:output_type -> immudb.schema.SQLQueryResult - 100, // 296: immudb.schema.ImmuService.VerifiableSQLGet:output_type -> immudb.schema.VerifiableSQLEntry - 125, // 297: immudb.schema.ImmuService.TruncateDatabase:output_type -> immudb.schema.TruncateDatabaseResponse - 225, // [225:298] is the sub-list for method output_type - 152, // [152:225] is the sub-list for method input_type - 152, // [152:152] is the sub-list for extension type_name - 152, // [152:152] is the sub-list for extension extendee - 0, // [0:152] is the sub-list for field type_name + 5, // 0: immudb.schema.User.permissions:type_name -> immudb.schema.Permission + 0, // 1: immudb.schema.User.sqlPrivileges:type_name -> immudb.schema.SQLPrivilege + 6, // 2: immudb.schema.UserList.users:type_name -> immudb.schema.User + 129, // 3: immudb.schema.Precondition.keyMustExist:type_name -> immudb.schema.Precondition.KeyMustExistPrecondition + 130, // 4: immudb.schema.Precondition.keyMustNotExist:type_name -> immudb.schema.Precondition.KeyMustNotExistPrecondition + 131, // 5: immudb.schema.Precondition.keyNotModifiedAfterTX:type_name -> immudb.schema.Precondition.KeyNotModifiedAfterTXPrecondition + 38, // 6: immudb.schema.KeyValue.metadata:type_name -> immudb.schema.KVMetadata + 20, // 7: immudb.schema.Entry.referencedBy:type_name -> immudb.schema.Reference + 38, // 8: immudb.schema.Entry.metadata:type_name -> immudb.schema.KVMetadata + 38, // 9: immudb.schema.Reference.metadata:type_name -> immudb.schema.KVMetadata + 18, // 10: immudb.schema.Op.kv:type_name -> immudb.schema.KeyValue + 57, // 11: immudb.schema.Op.zAdd:type_name -> immudb.schema.ZAddRequest + 55, // 12: immudb.schema.Op.ref:type_name -> immudb.schema.ReferenceRequest + 21, // 13: immudb.schema.ExecAllRequest.Operations:type_name -> immudb.schema.Op + 17, // 14: immudb.schema.ExecAllRequest.preconditions:type_name -> immudb.schema.Precondition + 19, // 15: immudb.schema.Entries.entries:type_name -> immudb.schema.Entry + 19, // 16: immudb.schema.ZEntry.entry:type_name -> immudb.schema.Entry + 24, // 17: immudb.schema.ZEntries.entries:type_name -> immudb.schema.ZEntry + 31, // 18: immudb.schema.TxHeader.metadata:type_name -> immudb.schema.TxMetadata + 43, // 19: immudb.schema.LinearAdvanceProof.inclusionProofs:type_name -> immudb.schema.InclusionProof + 30, // 20: immudb.schema.DualProof.sourceTxHeader:type_name -> immudb.schema.TxHeader + 30, // 21: immudb.schema.DualProof.targetTxHeader:type_name -> immudb.schema.TxHeader + 32, // 22: immudb.schema.DualProof.linearProof:type_name -> immudb.schema.LinearProof + 33, // 23: immudb.schema.DualProof.LinearAdvanceProof:type_name -> immudb.schema.LinearAdvanceProof + 30, // 24: immudb.schema.DualProofV2.sourceTxHeader:type_name -> immudb.schema.TxHeader + 30, // 25: immudb.schema.DualProofV2.targetTxHeader:type_name -> immudb.schema.TxHeader + 30, // 26: immudb.schema.Tx.header:type_name -> immudb.schema.TxHeader + 37, // 27: immudb.schema.Tx.entries:type_name -> immudb.schema.TxEntry + 19, // 28: immudb.schema.Tx.kvEntries:type_name -> immudb.schema.Entry + 24, // 29: immudb.schema.Tx.zEntries:type_name -> immudb.schema.ZEntry + 38, // 30: immudb.schema.TxEntry.metadata:type_name -> immudb.schema.KVMetadata + 39, // 31: immudb.schema.KVMetadata.expiration:type_name -> immudb.schema.Expiration + 36, // 32: immudb.schema.VerifiableTx.tx:type_name -> immudb.schema.Tx + 34, // 33: immudb.schema.VerifiableTx.dualProof:type_name -> immudb.schema.DualProof + 29, // 34: immudb.schema.VerifiableTx.signature:type_name -> immudb.schema.Signature + 36, // 35: immudb.schema.VerifiableTxV2.tx:type_name -> immudb.schema.Tx + 35, // 36: immudb.schema.VerifiableTxV2.dualProof:type_name -> immudb.schema.DualProofV2 + 29, // 37: immudb.schema.VerifiableTxV2.signature:type_name -> immudb.schema.Signature + 19, // 38: immudb.schema.VerifiableEntry.entry:type_name -> immudb.schema.Entry + 40, // 39: immudb.schema.VerifiableEntry.verifiableTx:type_name -> immudb.schema.VerifiableTx + 43, // 40: immudb.schema.VerifiableEntry.inclusionProof:type_name -> immudb.schema.InclusionProof + 18, // 41: immudb.schema.SetRequest.KVs:type_name -> immudb.schema.KeyValue + 17, // 42: immudb.schema.SetRequest.preconditions:type_name -> immudb.schema.Precondition + 44, // 43: immudb.schema.VerifiableSetRequest.setRequest:type_name -> immudb.schema.SetRequest + 45, // 44: immudb.schema.VerifiableGetRequest.keyRequest:type_name -> immudb.schema.KeyRequest + 29, // 45: immudb.schema.ImmutableState.signature:type_name -> immudb.schema.Signature + 17, // 46: immudb.schema.ReferenceRequest.preconditions:type_name -> immudb.schema.Precondition + 55, // 47: immudb.schema.VerifiableReferenceRequest.referenceRequest:type_name -> immudb.schema.ReferenceRequest + 58, // 48: immudb.schema.ZScanRequest.minScore:type_name -> immudb.schema.Score + 58, // 49: immudb.schema.ZScanRequest.maxScore:type_name -> immudb.schema.Score + 57, // 50: immudb.schema.VerifiableZAddRequest.zAddRequest:type_name -> immudb.schema.ZAddRequest + 63, // 51: immudb.schema.TxRequest.entriesSpec:type_name -> immudb.schema.EntriesSpec + 64, // 52: immudb.schema.EntriesSpec.kvEntriesSpec:type_name -> immudb.schema.EntryTypeSpec + 64, // 53: immudb.schema.EntriesSpec.zEntriesSpec:type_name -> immudb.schema.EntryTypeSpec + 64, // 54: immudb.schema.EntriesSpec.sqlEntriesSpec:type_name -> immudb.schema.EntryTypeSpec + 1, // 55: immudb.schema.EntryTypeSpec.action:type_name -> immudb.schema.EntryTypeAction + 63, // 56: immudb.schema.VerifiableTxRequest.entriesSpec:type_name -> immudb.schema.EntriesSpec + 63, // 57: immudb.schema.TxScanRequest.entriesSpec:type_name -> immudb.schema.EntriesSpec + 36, // 58: immudb.schema.TxList.txs:type_name -> immudb.schema.Tx + 69, // 59: immudb.schema.ExportTxRequest.replicaState:type_name -> immudb.schema.ReplicaState + 84, // 60: immudb.schema.CreateDatabaseRequest.settings:type_name -> immudb.schema.DatabaseNullableSettings + 84, // 61: immudb.schema.CreateDatabaseResponse.settings:type_name -> immudb.schema.DatabaseNullableSettings + 84, // 62: immudb.schema.UpdateDatabaseRequest.settings:type_name -> immudb.schema.DatabaseNullableSettings + 84, // 63: immudb.schema.UpdateDatabaseResponse.settings:type_name -> immudb.schema.DatabaseNullableSettings + 84, // 64: immudb.schema.DatabaseSettingsResponse.settings:type_name -> immudb.schema.DatabaseNullableSettings + 85, // 65: immudb.schema.DatabaseNullableSettings.replicationSettings:type_name -> immudb.schema.ReplicationNullableSettings + 78, // 66: immudb.schema.DatabaseNullableSettings.fileSize:type_name -> immudb.schema.NullableUint32 + 78, // 67: immudb.schema.DatabaseNullableSettings.maxKeyLen:type_name -> immudb.schema.NullableUint32 + 78, // 68: immudb.schema.DatabaseNullableSettings.maxValueLen:type_name -> immudb.schema.NullableUint32 + 78, // 69: immudb.schema.DatabaseNullableSettings.maxTxEntries:type_name -> immudb.schema.NullableUint32 + 81, // 70: immudb.schema.DatabaseNullableSettings.excludeCommitTime:type_name -> immudb.schema.NullableBool + 78, // 71: immudb.schema.DatabaseNullableSettings.maxConcurrency:type_name -> immudb.schema.NullableUint32 + 78, // 72: immudb.schema.DatabaseNullableSettings.maxIOConcurrency:type_name -> immudb.schema.NullableUint32 + 78, // 73: immudb.schema.DatabaseNullableSettings.txLogCacheSize:type_name -> immudb.schema.NullableUint32 + 78, // 74: immudb.schema.DatabaseNullableSettings.vLogMaxOpenedFiles:type_name -> immudb.schema.NullableUint32 + 78, // 75: immudb.schema.DatabaseNullableSettings.txLogMaxOpenedFiles:type_name -> immudb.schema.NullableUint32 + 78, // 76: immudb.schema.DatabaseNullableSettings.commitLogMaxOpenedFiles:type_name -> immudb.schema.NullableUint32 + 87, // 77: immudb.schema.DatabaseNullableSettings.indexSettings:type_name -> immudb.schema.IndexNullableSettings + 78, // 78: immudb.schema.DatabaseNullableSettings.writeTxHeaderVersion:type_name -> immudb.schema.NullableUint32 + 81, // 79: immudb.schema.DatabaseNullableSettings.autoload:type_name -> immudb.schema.NullableBool + 78, // 80: immudb.schema.DatabaseNullableSettings.readTxPoolSize:type_name -> immudb.schema.NullableUint32 + 83, // 81: immudb.schema.DatabaseNullableSettings.syncFrequency:type_name -> immudb.schema.NullableMilliseconds + 78, // 82: immudb.schema.DatabaseNullableSettings.writeBufferSize:type_name -> immudb.schema.NullableUint32 + 88, // 83: immudb.schema.DatabaseNullableSettings.ahtSettings:type_name -> immudb.schema.AHTNullableSettings + 78, // 84: immudb.schema.DatabaseNullableSettings.maxActiveTransactions:type_name -> immudb.schema.NullableUint32 + 78, // 85: immudb.schema.DatabaseNullableSettings.mvccReadSetLimit:type_name -> immudb.schema.NullableUint32 + 78, // 86: immudb.schema.DatabaseNullableSettings.vLogCacheSize:type_name -> immudb.schema.NullableUint32 + 86, // 87: immudb.schema.DatabaseNullableSettings.truncationSettings:type_name -> immudb.schema.TruncationNullableSettings + 81, // 88: immudb.schema.DatabaseNullableSettings.embeddedValues:type_name -> immudb.schema.NullableBool + 81, // 89: immudb.schema.DatabaseNullableSettings.preallocFiles:type_name -> immudb.schema.NullableBool + 81, // 90: immudb.schema.ReplicationNullableSettings.replica:type_name -> immudb.schema.NullableBool + 82, // 91: immudb.schema.ReplicationNullableSettings.primaryDatabase:type_name -> immudb.schema.NullableString + 82, // 92: immudb.schema.ReplicationNullableSettings.primaryHost:type_name -> immudb.schema.NullableString + 78, // 93: immudb.schema.ReplicationNullableSettings.primaryPort:type_name -> immudb.schema.NullableUint32 + 82, // 94: immudb.schema.ReplicationNullableSettings.primaryUsername:type_name -> immudb.schema.NullableString + 82, // 95: immudb.schema.ReplicationNullableSettings.primaryPassword:type_name -> immudb.schema.NullableString + 81, // 96: immudb.schema.ReplicationNullableSettings.syncReplication:type_name -> immudb.schema.NullableBool + 78, // 97: immudb.schema.ReplicationNullableSettings.syncAcks:type_name -> immudb.schema.NullableUint32 + 78, // 98: immudb.schema.ReplicationNullableSettings.prefetchTxBufferSize:type_name -> immudb.schema.NullableUint32 + 78, // 99: immudb.schema.ReplicationNullableSettings.replicationCommitConcurrency:type_name -> immudb.schema.NullableUint32 + 81, // 100: immudb.schema.ReplicationNullableSettings.allowTxDiscarding:type_name -> immudb.schema.NullableBool + 81, // 101: immudb.schema.ReplicationNullableSettings.skipIntegrityCheck:type_name -> immudb.schema.NullableBool + 81, // 102: immudb.schema.ReplicationNullableSettings.waitForIndexing:type_name -> immudb.schema.NullableBool + 83, // 103: immudb.schema.TruncationNullableSettings.retentionPeriod:type_name -> immudb.schema.NullableMilliseconds + 83, // 104: immudb.schema.TruncationNullableSettings.truncationFrequency:type_name -> immudb.schema.NullableMilliseconds + 78, // 105: immudb.schema.IndexNullableSettings.flushThreshold:type_name -> immudb.schema.NullableUint32 + 78, // 106: immudb.schema.IndexNullableSettings.syncThreshold:type_name -> immudb.schema.NullableUint32 + 78, // 107: immudb.schema.IndexNullableSettings.cacheSize:type_name -> immudb.schema.NullableUint32 + 78, // 108: immudb.schema.IndexNullableSettings.maxNodeSize:type_name -> immudb.schema.NullableUint32 + 78, // 109: immudb.schema.IndexNullableSettings.maxActiveSnapshots:type_name -> immudb.schema.NullableUint32 + 79, // 110: immudb.schema.IndexNullableSettings.renewSnapRootAfter:type_name -> immudb.schema.NullableUint64 + 78, // 111: immudb.schema.IndexNullableSettings.compactionThld:type_name -> immudb.schema.NullableUint32 + 78, // 112: immudb.schema.IndexNullableSettings.delayDuringCompaction:type_name -> immudb.schema.NullableUint32 + 78, // 113: immudb.schema.IndexNullableSettings.nodesLogMaxOpenedFiles:type_name -> immudb.schema.NullableUint32 + 78, // 114: immudb.schema.IndexNullableSettings.historyLogMaxOpenedFiles:type_name -> immudb.schema.NullableUint32 + 78, // 115: immudb.schema.IndexNullableSettings.commitLogMaxOpenedFiles:type_name -> immudb.schema.NullableUint32 + 78, // 116: immudb.schema.IndexNullableSettings.flushBufferSize:type_name -> immudb.schema.NullableUint32 + 80, // 117: immudb.schema.IndexNullableSettings.cleanupPercentage:type_name -> immudb.schema.NullableFloat + 78, // 118: immudb.schema.IndexNullableSettings.maxBulkSize:type_name -> immudb.schema.NullableUint32 + 83, // 119: immudb.schema.IndexNullableSettings.bulkPreparationTimeout:type_name -> immudb.schema.NullableMilliseconds + 78, // 120: immudb.schema.AHTNullableSettings.syncThreshold:type_name -> immudb.schema.NullableUint32 + 78, // 121: immudb.schema.AHTNullableSettings.writeBufferSize:type_name -> immudb.schema.NullableUint32 + 121, // 122: immudb.schema.SQLGetRequest.pkValues:type_name -> immudb.schema.SQLValue + 98, // 123: immudb.schema.VerifiableSQLGetRequest.sqlGetRequest:type_name -> immudb.schema.SQLGetRequest + 38, // 124: immudb.schema.SQLEntry.metadata:type_name -> immudb.schema.KVMetadata + 100, // 125: immudb.schema.VerifiableSQLEntry.sqlEntry:type_name -> immudb.schema.SQLEntry + 40, // 126: immudb.schema.VerifiableSQLEntry.verifiableTx:type_name -> immudb.schema.VerifiableTx + 43, // 127: immudb.schema.VerifiableSQLEntry.inclusionProof:type_name -> immudb.schema.InclusionProof + 132, // 128: immudb.schema.VerifiableSQLEntry.ColNamesById:type_name -> immudb.schema.VerifiableSQLEntry.ColNamesByIdEntry + 133, // 129: immudb.schema.VerifiableSQLEntry.ColIdsByName:type_name -> immudb.schema.VerifiableSQLEntry.ColIdsByNameEntry + 134, // 130: immudb.schema.VerifiableSQLEntry.ColTypesById:type_name -> immudb.schema.VerifiableSQLEntry.ColTypesByIdEntry + 135, // 131: immudb.schema.VerifiableSQLEntry.ColLenById:type_name -> immudb.schema.VerifiableSQLEntry.ColLenByIdEntry + 2, // 132: immudb.schema.ChangePermissionRequest.action:type_name -> immudb.schema.PermissionAction + 2, // 133: immudb.schema.ChangeSQLPrivilegesRequest.action:type_name -> immudb.schema.PermissionAction + 0, // 134: immudb.schema.ChangeSQLPrivilegesRequest.privileges:type_name -> immudb.schema.SQLPrivilege + 70, // 135: immudb.schema.DatabaseListResponse.databases:type_name -> immudb.schema.Database + 110, // 136: immudb.schema.DatabaseListResponseV2.databases:type_name -> immudb.schema.DatabaseInfo + 84, // 137: immudb.schema.DatabaseInfo.settings:type_name -> immudb.schema.DatabaseNullableSettings + 136, // 138: immudb.schema.Chunk.metadata:type_name -> immudb.schema.Chunk.MetadataEntry + 115, // 139: immudb.schema.SQLExecRequest.params:type_name -> immudb.schema.NamedParam + 115, // 140: immudb.schema.SQLQueryRequest.params:type_name -> immudb.schema.NamedParam + 121, // 141: immudb.schema.NamedParam.value:type_name -> immudb.schema.SQLValue + 117, // 142: immudb.schema.SQLExecResult.txs:type_name -> immudb.schema.CommittedSQLTx + 30, // 143: immudb.schema.CommittedSQLTx.header:type_name -> immudb.schema.TxHeader + 137, // 144: immudb.schema.CommittedSQLTx.lastInsertedPKs:type_name -> immudb.schema.CommittedSQLTx.LastInsertedPKsEntry + 138, // 145: immudb.schema.CommittedSQLTx.firstInsertedPKs:type_name -> immudb.schema.CommittedSQLTx.FirstInsertedPKsEntry + 119, // 146: immudb.schema.SQLQueryResult.columns:type_name -> immudb.schema.Column + 120, // 147: immudb.schema.SQLQueryResult.rows:type_name -> immudb.schema.Row + 121, // 148: immudb.schema.Row.values:type_name -> immudb.schema.SQLValue + 139, // 149: immudb.schema.SQLValue.null:type_name -> google.protobuf.NullValue + 3, // 150: immudb.schema.NewTxRequest.mode:type_name -> immudb.schema.TxMode + 79, // 151: immudb.schema.NewTxRequest.snapshotMustIncludeTxID:type_name -> immudb.schema.NullableUint64 + 83, // 152: immudb.schema.NewTxRequest.snapshotRenewalPeriod:type_name -> immudb.schema.NullableMilliseconds + 121, // 153: immudb.schema.CommittedSQLTx.LastInsertedPKsEntry.value:type_name -> immudb.schema.SQLValue + 121, // 154: immudb.schema.CommittedSQLTx.FirstInsertedPKsEntry.value:type_name -> immudb.schema.SQLValue + 140, // 155: immudb.schema.ImmuService.ListUsers:input_type -> google.protobuf.Empty + 8, // 156: immudb.schema.ImmuService.CreateUser:input_type -> immudb.schema.CreateUserRequest + 10, // 157: immudb.schema.ImmuService.ChangePassword:input_type -> immudb.schema.ChangePasswordRequest + 103, // 158: immudb.schema.ImmuService.ChangePermission:input_type -> immudb.schema.ChangePermissionRequest + 104, // 159: immudb.schema.ImmuService.ChangeSQLPrivileges:input_type -> immudb.schema.ChangeSQLPrivilegesRequest + 106, // 160: immudb.schema.ImmuService.SetActiveUser:input_type -> immudb.schema.SetActiveUserRequest + 13, // 161: immudb.schema.ImmuService.UpdateAuthConfig:input_type -> immudb.schema.AuthConfig + 14, // 162: immudb.schema.ImmuService.UpdateMTLSConfig:input_type -> immudb.schema.MTLSConfig + 15, // 163: immudb.schema.ImmuService.OpenSession:input_type -> immudb.schema.OpenSessionRequest + 140, // 164: immudb.schema.ImmuService.CloseSession:input_type -> google.protobuf.Empty + 140, // 165: immudb.schema.ImmuService.KeepAlive:input_type -> google.protobuf.Empty + 122, // 166: immudb.schema.ImmuService.NewTx:input_type -> immudb.schema.NewTxRequest + 140, // 167: immudb.schema.ImmuService.Commit:input_type -> google.protobuf.Empty + 140, // 168: immudb.schema.ImmuService.Rollback:input_type -> google.protobuf.Empty + 113, // 169: immudb.schema.ImmuService.TxSQLExec:input_type -> immudb.schema.SQLExecRequest + 114, // 170: immudb.schema.ImmuService.TxSQLQuery:input_type -> immudb.schema.SQLQueryRequest + 11, // 171: immudb.schema.ImmuService.Login:input_type -> immudb.schema.LoginRequest + 140, // 172: immudb.schema.ImmuService.Logout:input_type -> google.protobuf.Empty + 44, // 173: immudb.schema.ImmuService.Set:input_type -> immudb.schema.SetRequest + 48, // 174: immudb.schema.ImmuService.VerifiableSet:input_type -> immudb.schema.VerifiableSetRequest + 45, // 175: immudb.schema.ImmuService.Get:input_type -> immudb.schema.KeyRequest + 49, // 176: immudb.schema.ImmuService.VerifiableGet:input_type -> immudb.schema.VerifiableGetRequest + 47, // 177: immudb.schema.ImmuService.Delete:input_type -> immudb.schema.DeleteKeysRequest + 46, // 178: immudb.schema.ImmuService.GetAll:input_type -> immudb.schema.KeyListRequest + 22, // 179: immudb.schema.ImmuService.ExecAll:input_type -> immudb.schema.ExecAllRequest + 26, // 180: immudb.schema.ImmuService.Scan:input_type -> immudb.schema.ScanRequest + 27, // 181: immudb.schema.ImmuService.Count:input_type -> immudb.schema.KeyPrefix + 140, // 182: immudb.schema.ImmuService.CountAll:input_type -> google.protobuf.Empty + 62, // 183: immudb.schema.ImmuService.TxById:input_type -> immudb.schema.TxRequest + 65, // 184: immudb.schema.ImmuService.VerifiableTxById:input_type -> immudb.schema.VerifiableTxRequest + 66, // 185: immudb.schema.ImmuService.TxScan:input_type -> immudb.schema.TxScanRequest + 60, // 186: immudb.schema.ImmuService.History:input_type -> immudb.schema.HistoryRequest + 50, // 187: immudb.schema.ImmuService.ServerInfo:input_type -> immudb.schema.ServerInfoRequest + 140, // 188: immudb.schema.ImmuService.Health:input_type -> google.protobuf.Empty + 140, // 189: immudb.schema.ImmuService.DatabaseHealth:input_type -> google.protobuf.Empty + 140, // 190: immudb.schema.ImmuService.CurrentState:input_type -> google.protobuf.Empty + 55, // 191: immudb.schema.ImmuService.SetReference:input_type -> immudb.schema.ReferenceRequest + 56, // 192: immudb.schema.ImmuService.VerifiableSetReference:input_type -> immudb.schema.VerifiableReferenceRequest + 57, // 193: immudb.schema.ImmuService.ZAdd:input_type -> immudb.schema.ZAddRequest + 61, // 194: immudb.schema.ImmuService.VerifiableZAdd:input_type -> immudb.schema.VerifiableZAddRequest + 59, // 195: immudb.schema.ImmuService.ZScan:input_type -> immudb.schema.ZScanRequest + 70, // 196: immudb.schema.ImmuService.CreateDatabase:input_type -> immudb.schema.Database + 71, // 197: immudb.schema.ImmuService.CreateDatabaseWith:input_type -> immudb.schema.DatabaseSettings + 72, // 198: immudb.schema.ImmuService.CreateDatabaseV2:input_type -> immudb.schema.CreateDatabaseRequest + 89, // 199: immudb.schema.ImmuService.LoadDatabase:input_type -> immudb.schema.LoadDatabaseRequest + 91, // 200: immudb.schema.ImmuService.UnloadDatabase:input_type -> immudb.schema.UnloadDatabaseRequest + 93, // 201: immudb.schema.ImmuService.DeleteDatabase:input_type -> immudb.schema.DeleteDatabaseRequest + 140, // 202: immudb.schema.ImmuService.DatabaseList:input_type -> google.protobuf.Empty + 108, // 203: immudb.schema.ImmuService.DatabaseListV2:input_type -> immudb.schema.DatabaseListRequestV2 + 70, // 204: immudb.schema.ImmuService.UseDatabase:input_type -> immudb.schema.Database + 71, // 205: immudb.schema.ImmuService.UpdateDatabase:input_type -> immudb.schema.DatabaseSettings + 74, // 206: immudb.schema.ImmuService.UpdateDatabaseV2:input_type -> immudb.schema.UpdateDatabaseRequest + 140, // 207: immudb.schema.ImmuService.GetDatabaseSettings:input_type -> google.protobuf.Empty + 76, // 208: immudb.schema.ImmuService.GetDatabaseSettingsV2:input_type -> immudb.schema.DatabaseSettingsRequest + 95, // 209: immudb.schema.ImmuService.FlushIndex:input_type -> immudb.schema.FlushIndexRequest + 140, // 210: immudb.schema.ImmuService.CompactIndex:input_type -> google.protobuf.Empty + 45, // 211: immudb.schema.ImmuService.streamGet:input_type -> immudb.schema.KeyRequest + 111, // 212: immudb.schema.ImmuService.streamSet:input_type -> immudb.schema.Chunk + 49, // 213: immudb.schema.ImmuService.streamVerifiableGet:input_type -> immudb.schema.VerifiableGetRequest + 111, // 214: immudb.schema.ImmuService.streamVerifiableSet:input_type -> immudb.schema.Chunk + 26, // 215: immudb.schema.ImmuService.streamScan:input_type -> immudb.schema.ScanRequest + 59, // 216: immudb.schema.ImmuService.streamZScan:input_type -> immudb.schema.ZScanRequest + 60, // 217: immudb.schema.ImmuService.streamHistory:input_type -> immudb.schema.HistoryRequest + 111, // 218: immudb.schema.ImmuService.streamExecAll:input_type -> immudb.schema.Chunk + 68, // 219: immudb.schema.ImmuService.exportTx:input_type -> immudb.schema.ExportTxRequest + 111, // 220: immudb.schema.ImmuService.replicateTx:input_type -> immudb.schema.Chunk + 68, // 221: immudb.schema.ImmuService.streamExportTx:input_type -> immudb.schema.ExportTxRequest + 113, // 222: immudb.schema.ImmuService.SQLExec:input_type -> immudb.schema.SQLExecRequest + 114, // 223: immudb.schema.ImmuService.UnarySQLQuery:input_type -> immudb.schema.SQLQueryRequest + 114, // 224: immudb.schema.ImmuService.SQLQuery:input_type -> immudb.schema.SQLQueryRequest + 140, // 225: immudb.schema.ImmuService.ListTables:input_type -> google.protobuf.Empty + 97, // 226: immudb.schema.ImmuService.DescribeTable:input_type -> immudb.schema.Table + 99, // 227: immudb.schema.ImmuService.VerifiableSQLGet:input_type -> immudb.schema.VerifiableSQLGetRequest + 127, // 228: immudb.schema.ImmuService.TruncateDatabase:input_type -> immudb.schema.TruncateDatabaseRequest + 7, // 229: immudb.schema.ImmuService.ListUsers:output_type -> immudb.schema.UserList + 140, // 230: immudb.schema.ImmuService.CreateUser:output_type -> google.protobuf.Empty + 140, // 231: immudb.schema.ImmuService.ChangePassword:output_type -> google.protobuf.Empty + 140, // 232: immudb.schema.ImmuService.ChangePermission:output_type -> google.protobuf.Empty + 105, // 233: immudb.schema.ImmuService.ChangeSQLPrivileges:output_type -> immudb.schema.ChangeSQLPrivilegesResponse + 140, // 234: immudb.schema.ImmuService.SetActiveUser:output_type -> google.protobuf.Empty + 140, // 235: immudb.schema.ImmuService.UpdateAuthConfig:output_type -> google.protobuf.Empty + 140, // 236: immudb.schema.ImmuService.UpdateMTLSConfig:output_type -> google.protobuf.Empty + 16, // 237: immudb.schema.ImmuService.OpenSession:output_type -> immudb.schema.OpenSessionResponse + 140, // 238: immudb.schema.ImmuService.CloseSession:output_type -> google.protobuf.Empty + 140, // 239: immudb.schema.ImmuService.KeepAlive:output_type -> google.protobuf.Empty + 123, // 240: immudb.schema.ImmuService.NewTx:output_type -> immudb.schema.NewTxResponse + 117, // 241: immudb.schema.ImmuService.Commit:output_type -> immudb.schema.CommittedSQLTx + 140, // 242: immudb.schema.ImmuService.Rollback:output_type -> google.protobuf.Empty + 140, // 243: immudb.schema.ImmuService.TxSQLExec:output_type -> google.protobuf.Empty + 118, // 244: immudb.schema.ImmuService.TxSQLQuery:output_type -> immudb.schema.SQLQueryResult + 12, // 245: immudb.schema.ImmuService.Login:output_type -> immudb.schema.LoginResponse + 140, // 246: immudb.schema.ImmuService.Logout:output_type -> google.protobuf.Empty + 30, // 247: immudb.schema.ImmuService.Set:output_type -> immudb.schema.TxHeader + 40, // 248: immudb.schema.ImmuService.VerifiableSet:output_type -> immudb.schema.VerifiableTx + 19, // 249: immudb.schema.ImmuService.Get:output_type -> immudb.schema.Entry + 42, // 250: immudb.schema.ImmuService.VerifiableGet:output_type -> immudb.schema.VerifiableEntry + 30, // 251: immudb.schema.ImmuService.Delete:output_type -> immudb.schema.TxHeader + 23, // 252: immudb.schema.ImmuService.GetAll:output_type -> immudb.schema.Entries + 30, // 253: immudb.schema.ImmuService.ExecAll:output_type -> immudb.schema.TxHeader + 23, // 254: immudb.schema.ImmuService.Scan:output_type -> immudb.schema.Entries + 28, // 255: immudb.schema.ImmuService.Count:output_type -> immudb.schema.EntryCount + 28, // 256: immudb.schema.ImmuService.CountAll:output_type -> immudb.schema.EntryCount + 36, // 257: immudb.schema.ImmuService.TxById:output_type -> immudb.schema.Tx + 40, // 258: immudb.schema.ImmuService.VerifiableTxById:output_type -> immudb.schema.VerifiableTx + 67, // 259: immudb.schema.ImmuService.TxScan:output_type -> immudb.schema.TxList + 23, // 260: immudb.schema.ImmuService.History:output_type -> immudb.schema.Entries + 51, // 261: immudb.schema.ImmuService.ServerInfo:output_type -> immudb.schema.ServerInfoResponse + 52, // 262: immudb.schema.ImmuService.Health:output_type -> immudb.schema.HealthResponse + 53, // 263: immudb.schema.ImmuService.DatabaseHealth:output_type -> immudb.schema.DatabaseHealthResponse + 54, // 264: immudb.schema.ImmuService.CurrentState:output_type -> immudb.schema.ImmutableState + 30, // 265: immudb.schema.ImmuService.SetReference:output_type -> immudb.schema.TxHeader + 40, // 266: immudb.schema.ImmuService.VerifiableSetReference:output_type -> immudb.schema.VerifiableTx + 30, // 267: immudb.schema.ImmuService.ZAdd:output_type -> immudb.schema.TxHeader + 40, // 268: immudb.schema.ImmuService.VerifiableZAdd:output_type -> immudb.schema.VerifiableTx + 25, // 269: immudb.schema.ImmuService.ZScan:output_type -> immudb.schema.ZEntries + 140, // 270: immudb.schema.ImmuService.CreateDatabase:output_type -> google.protobuf.Empty + 140, // 271: immudb.schema.ImmuService.CreateDatabaseWith:output_type -> google.protobuf.Empty + 73, // 272: immudb.schema.ImmuService.CreateDatabaseV2:output_type -> immudb.schema.CreateDatabaseResponse + 90, // 273: immudb.schema.ImmuService.LoadDatabase:output_type -> immudb.schema.LoadDatabaseResponse + 92, // 274: immudb.schema.ImmuService.UnloadDatabase:output_type -> immudb.schema.UnloadDatabaseResponse + 94, // 275: immudb.schema.ImmuService.DeleteDatabase:output_type -> immudb.schema.DeleteDatabaseResponse + 107, // 276: immudb.schema.ImmuService.DatabaseList:output_type -> immudb.schema.DatabaseListResponse + 109, // 277: immudb.schema.ImmuService.DatabaseListV2:output_type -> immudb.schema.DatabaseListResponseV2 + 102, // 278: immudb.schema.ImmuService.UseDatabase:output_type -> immudb.schema.UseDatabaseReply + 140, // 279: immudb.schema.ImmuService.UpdateDatabase:output_type -> google.protobuf.Empty + 75, // 280: immudb.schema.ImmuService.UpdateDatabaseV2:output_type -> immudb.schema.UpdateDatabaseResponse + 71, // 281: immudb.schema.ImmuService.GetDatabaseSettings:output_type -> immudb.schema.DatabaseSettings + 77, // 282: immudb.schema.ImmuService.GetDatabaseSettingsV2:output_type -> immudb.schema.DatabaseSettingsResponse + 96, // 283: immudb.schema.ImmuService.FlushIndex:output_type -> immudb.schema.FlushIndexResponse + 140, // 284: immudb.schema.ImmuService.CompactIndex:output_type -> google.protobuf.Empty + 111, // 285: immudb.schema.ImmuService.streamGet:output_type -> immudb.schema.Chunk + 30, // 286: immudb.schema.ImmuService.streamSet:output_type -> immudb.schema.TxHeader + 111, // 287: immudb.schema.ImmuService.streamVerifiableGet:output_type -> immudb.schema.Chunk + 40, // 288: immudb.schema.ImmuService.streamVerifiableSet:output_type -> immudb.schema.VerifiableTx + 111, // 289: immudb.schema.ImmuService.streamScan:output_type -> immudb.schema.Chunk + 111, // 290: immudb.schema.ImmuService.streamZScan:output_type -> immudb.schema.Chunk + 111, // 291: immudb.schema.ImmuService.streamHistory:output_type -> immudb.schema.Chunk + 30, // 292: immudb.schema.ImmuService.streamExecAll:output_type -> immudb.schema.TxHeader + 111, // 293: immudb.schema.ImmuService.exportTx:output_type -> immudb.schema.Chunk + 30, // 294: immudb.schema.ImmuService.replicateTx:output_type -> immudb.schema.TxHeader + 111, // 295: immudb.schema.ImmuService.streamExportTx:output_type -> immudb.schema.Chunk + 116, // 296: immudb.schema.ImmuService.SQLExec:output_type -> immudb.schema.SQLExecResult + 118, // 297: immudb.schema.ImmuService.UnarySQLQuery:output_type -> immudb.schema.SQLQueryResult + 118, // 298: immudb.schema.ImmuService.SQLQuery:output_type -> immudb.schema.SQLQueryResult + 118, // 299: immudb.schema.ImmuService.ListTables:output_type -> immudb.schema.SQLQueryResult + 118, // 300: immudb.schema.ImmuService.DescribeTable:output_type -> immudb.schema.SQLQueryResult + 101, // 301: immudb.schema.ImmuService.VerifiableSQLGet:output_type -> immudb.schema.VerifiableSQLEntry + 128, // 302: immudb.schema.ImmuService.TruncateDatabase:output_type -> immudb.schema.TruncateDatabaseResponse + 229, // [229:303] is the sub-list for method output_type + 155, // [155:229] is the sub-list for method input_type + 155, // [155:155] is the sub-list for extension type_name + 155, // [155:155] is the sub-list for extension extendee + 0, // [0:155] is the sub-list for field type_name } func init() { file_schema_proto_init() } @@ -12272,7 +12501,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetActiveUserRequest); i { + switch v := v.(*ChangeSQLPrivilegesRequest); i { case 0: return &v.state case 1: @@ -12284,7 +12513,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DatabaseListResponse); i { + switch v := v.(*ChangeSQLPrivilegesResponse); i { case 0: return &v.state case 1: @@ -12296,7 +12525,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DatabaseListRequestV2); i { + switch v := v.(*SetActiveUserRequest); i { case 0: return &v.state case 1: @@ -12308,7 +12537,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DatabaseListResponseV2); i { + switch v := v.(*DatabaseListResponse); i { case 0: return &v.state case 1: @@ -12320,7 +12549,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DatabaseInfo); i { + switch v := v.(*DatabaseListRequestV2); i { case 0: return &v.state case 1: @@ -12332,7 +12561,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Chunk); i { + switch v := v.(*DatabaseListResponseV2); i { case 0: return &v.state case 1: @@ -12344,7 +12573,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UseSnapshotRequest); i { + switch v := v.(*DatabaseInfo); i { case 0: return &v.state case 1: @@ -12356,7 +12585,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SQLExecRequest); i { + switch v := v.(*Chunk); i { case 0: return &v.state case 1: @@ -12368,7 +12597,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SQLQueryRequest); i { + switch v := v.(*UseSnapshotRequest); i { case 0: return &v.state case 1: @@ -12380,7 +12609,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NamedParam); i { + switch v := v.(*SQLExecRequest); i { case 0: return &v.state case 1: @@ -12392,7 +12621,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SQLExecResult); i { + switch v := v.(*SQLQueryRequest); i { case 0: return &v.state case 1: @@ -12404,7 +12633,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommittedSQLTx); i { + switch v := v.(*NamedParam); i { case 0: return &v.state case 1: @@ -12416,7 +12645,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SQLQueryResult); i { + switch v := v.(*SQLExecResult); i { case 0: return &v.state case 1: @@ -12428,7 +12657,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Column); i { + switch v := v.(*CommittedSQLTx); i { case 0: return &v.state case 1: @@ -12440,7 +12669,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Row); i { + switch v := v.(*SQLQueryResult); i { case 0: return &v.state case 1: @@ -12452,7 +12681,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SQLValue); i { + switch v := v.(*Column); i { case 0: return &v.state case 1: @@ -12464,7 +12693,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewTxRequest); i { + switch v := v.(*Row); i { case 0: return &v.state case 1: @@ -12476,7 +12705,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[117].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewTxResponse); i { + switch v := v.(*SQLValue); i { case 0: return &v.state case 1: @@ -12488,7 +12717,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ErrorInfo); i { + switch v := v.(*NewTxRequest); i { case 0: return &v.state case 1: @@ -12500,7 +12729,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DebugInfo); i { + switch v := v.(*NewTxResponse); i { case 0: return &v.state case 1: @@ -12512,7 +12741,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[120].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RetryInfo); i { + switch v := v.(*ErrorInfo); i { case 0: return &v.state case 1: @@ -12524,7 +12753,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[121].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TruncateDatabaseRequest); i { + switch v := v.(*DebugInfo); i { case 0: return &v.state case 1: @@ -12536,7 +12765,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[122].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TruncateDatabaseResponse); i { + switch v := v.(*RetryInfo); i { case 0: return &v.state case 1: @@ -12548,7 +12777,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[123].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Precondition_KeyMustExistPrecondition); i { + switch v := v.(*TruncateDatabaseRequest); i { case 0: return &v.state case 1: @@ -12560,7 +12789,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Precondition_KeyMustNotExistPrecondition); i { + switch v := v.(*TruncateDatabaseResponse); i { case 0: return &v.state case 1: @@ -12572,6 +12801,30 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Precondition_KeyMustExistPrecondition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_schema_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Precondition_KeyMustNotExistPrecondition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_schema_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Precondition_KeyNotModifiedAfterTXPrecondition); i { case 0: return &v.state @@ -12594,7 +12847,7 @@ func file_schema_proto_init() { (*Op_ZAdd)(nil), (*Op_Ref)(nil), } - file_schema_proto_msgTypes[115].OneofWrappers = []interface{}{ + file_schema_proto_msgTypes[117].OneofWrappers = []interface{}{ (*SQLValue_Null)(nil), (*SQLValue_N)(nil), (*SQLValue_S)(nil), @@ -12608,8 +12861,8 @@ func file_schema_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_schema_proto_rawDesc, - NumEnums: 3, - NumMessages: 133, + NumEnums: 4, + NumMessages: 135, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/api/schema/schema.pb.gw.go b/pkg/api/schema/schema.pb.gw.go index de98e2b20e..77fcc584da 100644 --- a/pkg/api/schema/schema.pb.gw.go +++ b/pkg/api/schema/schema.pb.gw.go @@ -154,6 +154,40 @@ func local_request_ImmuService_ChangePermission_0(ctx context.Context, marshaler } +func request_ImmuService_ChangeSQLPrivileges_0(ctx context.Context, marshaler runtime.Marshaler, client ImmuServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ChangeSQLPrivilegesRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ChangeSQLPrivileges(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ImmuService_ChangeSQLPrivileges_0(ctx context.Context, marshaler runtime.Marshaler, server ImmuServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ChangeSQLPrivilegesRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ChangeSQLPrivileges(ctx, &protoReq) + return msg, metadata, err + +} + func request_ImmuService_SetActiveUser_0(ctx context.Context, marshaler runtime.Marshaler, client ImmuServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq SetActiveUserRequest var metadata runtime.ServerMetadata @@ -1919,6 +1953,29 @@ func RegisterImmuServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux }) + mux.Handle("POST", pattern_ImmuService_ChangeSQLPrivileges_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ImmuService_ChangeSQLPrivileges_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ImmuService_ChangeSQLPrivileges_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_ImmuService_SetActiveUser_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3128,6 +3185,26 @@ func RegisterImmuServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux }) + mux.Handle("POST", pattern_ImmuService_ChangeSQLPrivileges_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ImmuService_ChangeSQLPrivileges_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ImmuService_ChangeSQLPrivileges_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_ImmuService_SetActiveUser_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -4100,6 +4177,8 @@ var ( pattern_ImmuService_ChangePermission_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"user", "changepermission"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ImmuService_ChangeSQLPrivileges_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"user", "changesqlprivileges"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ImmuService_SetActiveUser_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"user", "setactiveUser"}, "", runtime.AssumeColonVerbOpt(true))) pattern_ImmuService_Login_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"login"}, "", runtime.AssumeColonVerbOpt(true))) @@ -4206,6 +4285,8 @@ var ( forward_ImmuService_ChangePermission_0 = runtime.ForwardResponseMessage + forward_ImmuService_ChangeSQLPrivileges_0 = runtime.ForwardResponseMessage + forward_ImmuService_SetActiveUser_0 = runtime.ForwardResponseMessage forward_ImmuService_Login_0 = runtime.ForwardResponseMessage diff --git a/pkg/api/schema/schema.proto b/pkg/api/schema/schema.proto index 50da7a8828..645784e5cc 100644 --- a/pkg/api/schema/schema.proto +++ b/pkg/api/schema/schema.proto @@ -75,6 +75,20 @@ message User { // Flag indicating whether the user is active or not bool active = 6; + + // List of SQL privileges + repeated SQLPrivilege sqlPrivileges = 7; +} + +enum SQLPrivilege { + UNKNOWN = 0; + SELECT = 1; + CREATE = 2; + INSERT = 3; + UPDATE = 4; + DELETE = 5; + DROP = 6; + ALTER = 7; } message UserList { @@ -1343,6 +1357,22 @@ message ChangePermissionRequest { uint32 permission = 4; } +message ChangeSQLPrivilegesRequest { + // Action to perform + PermissionAction action = 1; + + // Name of the user to update + string username = 2; + + // Name of the database + string database = 3; + + // SQL privileges to grant / revoke + repeated SQLPrivilege privileges = 4; +} + +message ChangeSQLPrivilegesResponse {} + message SetActiveUserRequest { // If true, the user is active bool active = 1; @@ -1575,6 +1605,13 @@ service ImmuService { }; } + rpc ChangeSQLPrivileges(ChangeSQLPrivilegesRequest) returns (ChangeSQLPrivilegesResponse) { + option (google.api.http) = { + post: "/user/changesqlprivileges" + body: "*" + }; + } + rpc SetActiveUser(SetActiveUserRequest) returns (google.protobuf.Empty) { option (google.api.http) = { post: "/user/setactiveUser" diff --git a/pkg/api/schema/schema.swagger.json b/pkg/api/schema/schema.swagger.json index f395e4658c..a8e6be9f80 100644 --- a/pkg/api/schema/schema.swagger.json +++ b/pkg/api/schema/schema.swagger.json @@ -1674,6 +1674,38 @@ ] } }, + "/user/changesqlprivileges": { + "post": { + "operationId": "ImmuService_ChangeSQLPrivileges", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/schemaChangeSQLPrivilegesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/runtimeError" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/schemaChangeSQLPrivilegesRequest" + } + } + ], + "tags": [ + "ImmuService" + ] + } + }, "/user/list": { "get": { "operationId": "ImmuService_ListUsers", @@ -1924,6 +1956,33 @@ } } }, + "schemaChangeSQLPrivilegesRequest": { + "type": "object", + "properties": { + "action": { + "$ref": "#/definitions/schemaPermissionAction", + "title": "Action to perform" + }, + "username": { + "type": "string", + "title": "Name of the user to update" + }, + "database": { + "type": "string", + "title": "Name of the database" + }, + "privileges": { + "type": "array", + "items": { + "$ref": "#/definitions/schemaSQLPrivilege" + }, + "title": "SQL privileges to grant / revoke" + } + } + }, + "schemaChangeSQLPrivilegesResponse": { + "type": "object" + }, "schemaChunk": { "type": "object", "properties": { @@ -3258,6 +3317,20 @@ } } }, + "schemaSQLPrivilege": { + "type": "string", + "enum": [ + "UNKNOWN", + "SELECT", + "CREATE", + "INSERT", + "UPDATE", + "DELETE", + "DROP", + "ALTER" + ], + "default": "UNKNOWN" + }, "schemaSQLQueryRequest": { "type": "object", "properties": { @@ -3774,6 +3847,13 @@ "active": { "type": "boolean", "title": "Flag indicating whether the user is active or not" + }, + "sqlPrivileges": { + "type": "array", + "items": { + "$ref": "#/definitions/schemaSQLPrivilege" + }, + "title": "List of SQL privileges" } } }, diff --git a/pkg/api/schema/schema_grpc.pb.go b/pkg/api/schema/schema_grpc.pb.go index 2786dc831d..3a46864cff 100644 --- a/pkg/api/schema/schema_grpc.pb.go +++ b/pkg/api/schema/schema_grpc.pb.go @@ -23,6 +23,7 @@ type ImmuServiceClient interface { CreateUser(ctx context.Context, in *CreateUserRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) ChangePassword(ctx context.Context, in *ChangePasswordRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) ChangePermission(ctx context.Context, in *ChangePermissionRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + ChangeSQLPrivileges(ctx context.Context, in *ChangeSQLPrivilegesRequest, opts ...grpc.CallOption) (*ChangeSQLPrivilegesResponse, error) SetActiveUser(ctx context.Context, in *SetActiveUserRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // Deprecated: Do not use. UpdateAuthConfig(ctx context.Context, in *AuthConfig, opts ...grpc.CallOption) (*emptypb.Empty, error) @@ -160,6 +161,15 @@ func (c *immuServiceClient) ChangePermission(ctx context.Context, in *ChangePerm return out, nil } +func (c *immuServiceClient) ChangeSQLPrivileges(ctx context.Context, in *ChangeSQLPrivilegesRequest, opts ...grpc.CallOption) (*ChangeSQLPrivilegesResponse, error) { + out := new(ChangeSQLPrivilegesResponse) + err := c.cc.Invoke(ctx, "/immudb.schema.ImmuService/ChangeSQLPrivileges", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *immuServiceClient) SetActiveUser(ctx context.Context, in *SetActiveUserRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/immudb.schema.ImmuService/SetActiveUser", in, out, opts...) @@ -1104,6 +1114,7 @@ type ImmuServiceServer interface { CreateUser(context.Context, *CreateUserRequest) (*emptypb.Empty, error) ChangePassword(context.Context, *ChangePasswordRequest) (*emptypb.Empty, error) ChangePermission(context.Context, *ChangePermissionRequest) (*emptypb.Empty, error) + ChangeSQLPrivileges(context.Context, *ChangeSQLPrivilegesRequest) (*ChangeSQLPrivilegesResponse, error) SetActiveUser(context.Context, *SetActiveUserRequest) (*emptypb.Empty, error) // Deprecated: Do not use. UpdateAuthConfig(context.Context, *AuthConfig) (*emptypb.Empty, error) @@ -1213,6 +1224,9 @@ func (UnimplementedImmuServiceServer) ChangePassword(context.Context, *ChangePas func (UnimplementedImmuServiceServer) ChangePermission(context.Context, *ChangePermissionRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method ChangePermission not implemented") } +func (UnimplementedImmuServiceServer) ChangeSQLPrivileges(context.Context, *ChangeSQLPrivilegesRequest) (*ChangeSQLPrivilegesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ChangeSQLPrivileges not implemented") +} func (UnimplementedImmuServiceServer) SetActiveUser(context.Context, *SetActiveUserRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method SetActiveUser not implemented") } @@ -1504,6 +1518,24 @@ func _ImmuService_ChangePermission_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _ImmuService_ChangeSQLPrivileges_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ChangeSQLPrivilegesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ImmuServiceServer).ChangeSQLPrivileges(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/immudb.schema.ImmuService/ChangeSQLPrivileges", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ImmuServiceServer).ChangeSQLPrivileges(ctx, req.(*ChangeSQLPrivilegesRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _ImmuService_SetActiveUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(SetActiveUserRequest) if err := dec(in); err != nil { @@ -2833,6 +2865,10 @@ var ImmuService_ServiceDesc = grpc.ServiceDesc{ MethodName: "ChangePermission", Handler: _ImmuService_ChangePermission_Handler, }, + { + MethodName: "ChangeSQLPrivileges", + Handler: _ImmuService_ChangeSQLPrivileges_Handler, + }, { MethodName: "SetActiveUser", Handler: _ImmuService_SetActiveUser_Handler, diff --git a/pkg/api/schema/sql.go b/pkg/api/schema/sql.go index 74999b3189..507909f440 100644 --- a/pkg/api/schema/sql.go +++ b/pkg/api/schema/sql.go @@ -17,6 +17,7 @@ limitations under the License. package schema import ( + "fmt" "time" "github.com/codenotary/immudb/embedded/sql" @@ -157,3 +158,43 @@ func TypedValueToRowValue(tv sql.TypedValue) *SQLValue { } return nil } + +func SQLPrivilegeToProto(p sql.SQLPrivilege) (SQLPrivilege, error) { + switch p { + case sql.SQLPrivilegeSelect: + return SQLPrivilege_SELECT, nil + case sql.SQLPrivilegeCreate: + return SQLPrivilege_CREATE, nil + case sql.SQLPrivilegeInsert: + return SQLPrivilege_INSERT, nil + case sql.SQLPrivilegeUpdate: + return SQLPrivilege_UPDATE, nil + case sql.SQLPrivilegeDelete: + return SQLPrivilege_DELETE, nil + case sql.SQLPrivilegeDrop: + return SQLPrivilege_DROP, nil + case sql.SQLPrivilegeAlter: + return SQLPrivilege_ALTER, nil + } + return SQLPrivilege_UNKNOWN, fmt.Errorf("invalid privilege") +} + +func SQLPrivilegeFromProto(p SQLPrivilege) sql.SQLPrivilege { + switch p { + case SQLPrivilege_SELECT: + return sql.SQLPrivilegeSelect + case SQLPrivilege_CREATE: + return sql.SQLPrivilegeCreate + case SQLPrivilege_INSERT: + return sql.SQLPrivilegeInsert + case SQLPrivilege_UPDATE: + return sql.SQLPrivilegeUpdate + case SQLPrivilege_DELETE: + return sql.SQLPrivilegeDelete + case SQLPrivilege_DROP: + return sql.SQLPrivilegeDrop + case SQLPrivilege_ALTER: + return sql.SQLPrivilegeAlter + } + return "" +} diff --git a/pkg/auth/user.go b/pkg/auth/user.go index 57e80a0b69..45267186c7 100644 --- a/pkg/auth/user.go +++ b/pkg/auth/user.go @@ -24,19 +24,26 @@ import ( // Permission per database type Permission struct { - Permission uint32 `json:"permission"` //permission of type auth.PermissionW - Database string `json:"database"` //databases the user has access to + Permission uint32 `json:"permission"` // permission of type auth.PermissionW + Database string `json:"database"` // databases the user has access to +} + +type SQLPrivilege struct { + Privilege string `json:"privilege"` // sql privilege + Database string `json:"database"` // database to which the privilege applies } // User ... type User struct { - Username string `json:"username"` - HashedPassword []byte `json:"hashedpassword"` - Permissions []Permission `json:"permissions"` - Active bool `json:"active"` - IsSysAdmin bool `json:"-"` //for the sysadmin we'll use this instead of adding all db and permissions to Permissions, to save some cpu cycles - CreatedBy string `json:"createdBy"` //user which created this user - CreatedAt time.Time `json:"createdat"` //time in which this user is created/updated + Username string `json:"username"` + HashedPassword []byte `json:"hashedpassword"` + Permissions []Permission `json:"permissions"` + SQLPrivileges []SQLPrivilege `json:"sqlPrivileges"` + HasPrivileges bool `json:"hasPrivileges"` // needed for backward compatibility + Active bool `json:"active"` + IsSysAdmin bool `json:"-"` // for the sysadmin we'll use this instead of adding all db and permissions to Permissions, to save some cpu cycles + CreatedBy string `json:"createdBy"` // user which created this user + CreatedAt time.Time `json:"createdat"` // time in which this user is created/updated } var ( @@ -122,10 +129,44 @@ func (u *User) RevokePermission(database string) bool { // GrantPermission add permission to database func (u *User) GrantPermission(database string, permission uint32) bool { - //first remove any previous permission for this db + // first remove any previous permission for this db u.RevokePermission(database) perm := Permission{Permission: permission, Database: database} u.Permissions = append(u.Permissions, perm) return true } + +// GrantSQLPrivilege grants sql privilege on the specified database +func (u *User) GrantSQLPrivileges(database string, privileges []string) bool { + for _, p := range privileges { + if !u.HasSQLPrivilege(database, p) { + u.SQLPrivileges = append(u.SQLPrivileges, SQLPrivilege{Database: database, Privilege: p}) + } + } + return false +} + +func (u *User) HasSQLPrivilege(database string, privilege string) bool { + return u.indexOfPrivilege(database, privilege) >= 0 +} + +func (u *User) indexOfPrivilege(database string, privilege string) int { + for i, p := range u.SQLPrivileges { + if p.Database == database && p.Privilege == privilege { + return i + } + } + return -1 +} + +// RevokePrivilege add permission to database +func (u *User) RevokeSQLPrivileges(database string, privileges []string) bool { + for _, p := range privileges { + if idx := u.indexOfPrivilege(database, p); idx >= 0 { + u.SQLPrivileges[idx] = u.SQLPrivileges[0] + u.SQLPrivileges = u.SQLPrivileges[1:] + } + } + return true +} diff --git a/pkg/database/database_test.go b/pkg/database/database_test.go index 9c808a3b1b..d932a6b5c0 100644 --- a/pkg/database/database_test.go +++ b/pkg/database/database_test.go @@ -93,6 +93,24 @@ func (h *dummyMultidbHandler) UseDatabase(ctx context.Context, db string) error return sql.ErrNoSupported } +type mockUser struct{} + +func (u *mockUser) Username() string { + return "default" +} + +func (u *mockUser) Permission() sql.Permission { + return sql.PermissionAdmin +} + +func (u *mockUser) SQLPrivileges() []sql.SQLPrivilege { + return sql.DefaultSQLPrivilegesForPermission(sql.PermissionAdmin) +} + +func (h *dummyMultidbHandler) GetLoggedUser(ctx context.Context) (sql.User, error) { + return &mockUser{}, nil +} + func (h *dummyMultidbHandler) ListUsers(ctx context.Context) ([]sql.User, error) { return nil, sql.ErrNoSupported } @@ -105,6 +123,14 @@ func (h *dummyMultidbHandler) AlterUser(ctx context.Context, username, password return sql.ErrNoSupported } +func (h *dummyMultidbHandler) GrantSQLPrivileges(ctx context.Context, database, username string, privileges []sql.SQLPrivilege) error { + return sql.ErrNoSupported +} + +func (h *dummyMultidbHandler) RevokeSQLPrivileges(ctx context.Context, database, username string, privileges []sql.SQLPrivilege) error { + return sql.ErrNoSupported +} + func (h *dummyMultidbHandler) DropUser(ctx context.Context, username string) error { return sql.ErrNoSupported } diff --git a/pkg/server/multidb_handler.go b/pkg/server/multidb_handler.go index 058a6e4077..3d86414397 100644 --- a/pkg/server/multidb_handler.go +++ b/pkg/server/multidb_handler.go @@ -50,6 +50,30 @@ func (h *multidbHandler) CreateDatabase(ctx context.Context, db string, ifNotExi return err } +func (h *multidbHandler) GetLoggedUser(ctx context.Context) (sql.User, error) { + _, user, err := h.s.getLoggedInUserdataFromCtx(ctx) + if err != nil { + return nil, err + } + + db, err := h.s.getDBFromCtx(ctx, "SQLQuery") + if err != nil { + return nil, err + } + + privileges := make([]sql.SQLPrivilege, len(user.SQLPrivileges)) + for i, p := range user.SQLPrivileges { + privileges[i] = sql.SQLPrivilege(p.Privilege) + } + + permCode := user.WhichPermission(db.GetName()) + return &User{ + username: user.Username, + perm: permissionFromCode(permCode), + sqlPrivileges: privileges, + }, nil +} + func (h *multidbHandler) ListDatabases(ctx context.Context) ([]string, error) { res, err := h.s.DatabaseList(ctx, nil) if err != nil { @@ -57,11 +81,9 @@ func (h *multidbHandler) ListDatabases(ctx context.Context) ([]string, error) { } dbs := make([]string, len(res.Databases)) - for i, db := range res.Databases { dbs[i] = db.DatabaseName } - return dbs, nil } @@ -83,40 +105,72 @@ func (h *multidbHandler) ListUsers(ctx context.Context) ([]sql.User, error) { continue } - var hasPermission *schema.Permission + var perm *schema.Permission if string(user.User) == auth.SysAdminUsername { - hasPermission = &schema.Permission{Database: db.GetName()} + perm = &schema.Permission{Database: db.GetName()} } else { - for _, perm := range user.Permissions { - if perm.Database == db.GetName() { - hasPermission = perm - break - } - } + perm = findPermission(user.Permissions, db.GetName()) + } + + privileges := make([]sql.SQLPrivilege, len(user.SqlPrivileges)) + for i, p := range user.SqlPrivileges { + privileges[i] = schema.SQLPrivilegeFromProto(p) } - if hasPermission != nil { - users = append(users, &User{username: string(user.User), perm: hasPermission.Permission}) + if perm != nil { + users = append(users, &User{username: string(user.User), perm: permissionFromCode(perm.Permission), sqlPrivileges: privileges}) } } return users, nil } +func permissionFromCode(code uint32) sql.Permission { + switch code { + case 1: + { + return sql.PermissionReadOnly + } + case 2: + { + return sql.PermissionReadWrite + } + case 254: + { + return sql.PermissionAdmin + } + } + return sql.PermissionSysAdmin +} + +func findPermission(permissions []*schema.Permission, database string) *schema.Permission { + for _, perm := range permissions { + if perm.Database == database { + return perm + } + } + return nil +} + type User struct { - username string - perm uint32 + username string + perm sql.Permission + sqlPrivileges []sql.SQLPrivilege } func (usr *User) Username() string { return usr.username } -func (usr *User) Permission() uint32 { +func (usr *User) Permission() sql.Permission { return usr.perm } +func (usr *User) SQLPrivileges() []sql.SQLPrivilege { + return usr.sqlPrivileges +} + func permCode(permission sql.Permission) uint32 { switch permission { case sql.PermissionReadOnly: @@ -185,7 +239,33 @@ func (h *multidbHandler) AlterUser(ctx context.Context, username, password strin Action: schema.PermissionAction_GRANT, Permission: permCode(permission), }) + return err +} + +func (h *multidbHandler) GrantSQLPrivileges(ctx context.Context, database, username string, privileges []sql.SQLPrivilege) error { + return h.changeSQLPrivileges(ctx, database, username, privileges, schema.PermissionAction_GRANT) +} + +func (h *multidbHandler) RevokeSQLPrivileges(ctx context.Context, database, username string, privileges []sql.SQLPrivilege) error { + return h.changeSQLPrivileges(ctx, database, username, privileges, schema.PermissionAction_REVOKE) +} +func (h *multidbHandler) changeSQLPrivileges(ctx context.Context, database, username string, privileges []sql.SQLPrivilege, action schema.PermissionAction) error { + ps := make([]schema.SQLPrivilege, len(privileges)) + for i, p := range privileges { + pp, err := schema.SQLPrivilegeToProto(p) + if err != nil { + return err + } + ps[i] = pp + } + + _, err := h.s.ChangeSQLPrivileges(ctx, &schema.ChangeSQLPrivilegesRequest{ + Action: action, + Username: username, + Database: database, + Privileges: ps, + }) return err } diff --git a/pkg/server/server_test.go b/pkg/server/server_test.go index 63a408ad4e..0233d87870 100644 --- a/pkg/server/server_test.go +++ b/pkg/server/server_test.go @@ -50,7 +50,7 @@ import ( ) var testDatabase = "lisbon" -var testUsername = []byte("Sagrada") +var testUsername = []byte("sagrada") var testPassword = []byte("Familia@2") var testKey = []byte("Antoni") var testValue = []byte("Gaudí") @@ -1533,7 +1533,7 @@ func TestServerErrors(t *testing.T) { cpr.Username = auth.SysAdminUsername _, err = s.ChangePermission(userCtx, cpr) errStatus, _ = status.FromError(err) - require.Equal(t, "changing sysadmin permisions is not allowed", errStatus.Message()) + require.Equal(t, "changing sysadmin permissions is not allowed", errStatus.Message()) cpr.Username = username diff --git a/pkg/server/servertest/server_mock.go b/pkg/server/servertest/server_mock.go index c14fd96d6e..78864a1f88 100644 --- a/pkg/server/servertest/server_mock.go +++ b/pkg/server/servertest/server_mock.go @@ -390,3 +390,7 @@ func (s *ServerMock) VerifiableSQLGet(ctx context.Context, req *schema.Verifiabl func (s *ServerMock) TruncateDatabase(ctx context.Context, req *schema.TruncateDatabaseRequest) (*schema.TruncateDatabaseResponse, error) { return s.Srv.TruncateDatabase(ctx, req) } + +func (s *ServerMock) ChangeSQLPrivileges(ctx context.Context, r *schema.ChangeSQLPrivilegesRequest) (*schema.ChangeSQLPrivilegesResponse, error) { + return nil, nil +} diff --git a/pkg/server/user.go b/pkg/server/user.go index a1f111e42c..f360268d7b 100644 --- a/pkg/server/user.go +++ b/pkg/server/user.go @@ -22,6 +22,7 @@ import ( "fmt" "time" + "github.com/codenotary/immudb/embedded/sql" "github.com/codenotary/immudb/pkg/database" "github.com/codenotary/immudb/pkg/server/sessions" @@ -204,105 +205,102 @@ func (s *ImmuServer) ListUsers(ctx context.Context, req *empty.Empty) (*schema.U for i := 0; i < len(itemList.Entries); i++ { itemList.Entries[i].Key = itemList.Entries[i].Key[1:] - var user auth.User - - err = json.Unmarshal(itemList.Entries[i].Value, &user) + usr, err := unmarshalSchemaUser(itemList.Entries[i].Value) if err != nil { return nil, err } - - permissions := []*schema.Permission{} - - for _, val := range user.Permissions { - permissions = append(permissions, &schema.Permission{ - Database: val.Database, - Permission: val.Permission, - }) - } - - u := schema.User{ - User: []byte(user.Username), - Createdat: user.CreatedAt.String(), - Createdby: user.CreatedBy, - Permissions: permissions, - Active: user.Active, - } - - userlist.Users = append(userlist.Users, &u) + userlist.Users = append(userlist.Users, usr) } - return userlist, nil - } else if db != nil && loggedInuser.WhichPermission(db.GetName()) == auth.PermissionAdmin { // for admin users return only users for the database that is has selected selectedDbname := db.GetName() userlist := &schema.UserList{} for i := 0; i < len(itemList.Entries); i++ { - include := false itemList.Entries[i].Key = itemList.Entries[i].Key[1:] - var user auth.User - - err = json.Unmarshal(itemList.Entries[i].Value, &user) + usr, err := unmarshalSchemaUser(itemList.Entries[i].Value) if err != nil { return nil, err } - permissions := []*schema.Permission{} + include := false - for _, val := range user.Permissions { + for _, val := range usr.Permissions { //check if this user has any permission for this database //include in the reply only if it has any permission for the currently selected database if val.Database == selectedDbname { include = true } - - permissions = append(permissions, &schema.Permission{ - Database: val.Database, - Permission: val.Permission, - }) } if include { - u := schema.User{ - User: []byte(user.Username), - Createdat: user.CreatedAt.String(), - Createdby: user.CreatedBy, - Permissions: permissions, - Active: user.Active, - } - - userlist.Users = append(userlist.Users, &u) + userlist.Users = append(userlist.Users, usr) } } - return userlist, nil - } else { // any other permission return only its data - userlist := &schema.UserList{} - permissions := []*schema.Permission{} - - for _, val := range loggedInuser.Permissions { - permissions = append(permissions, &schema.Permission{ - Database: val.Database, - Permission: val.Permission, - }) + usr, err := toSchemaUser(loggedInuser) + if err != nil { + return nil, err } + return &schema.UserList{Users: []*schema.User{usr}}, nil + } +} + +func unmarshalSchemaUser(data []byte) (*schema.User, error) { + var u auth.User + if err := json.Unmarshal(data, &u); err != nil { + return nil, err + } + return toSchemaUser(&u) +} + +func toSchemaUser(u *auth.User) (*schema.User, error) { + permissions := make([]*schema.Permission, len(u.Permissions)) - u := schema.User{ - User: []byte(loggedInuser.Username), - Createdat: loggedInuser.CreatedAt.String(), - Createdby: loggedInuser.CreatedBy, - Permissions: permissions, - Active: loggedInuser.Active, + for i, val := range u.Permissions { + permissions[i] = &schema.Permission{ + Database: val.Database, + Permission: val.Permission, } + } - userlist.Users = append(userlist.Users, &u) + var privileges []schema.SQLPrivilege - return userlist, nil + if u.HasPrivileges { + privileges = make([]schema.SQLPrivilege, len(u.SQLPrivileges)) + for i, p := range u.SQLPrivileges { + pp, err := schema.SQLPrivilegeToProto(sql.SQLPrivilege(p.Privilege)) + if err != nil { + return nil, err + } + privileges[i] = pp + } + } else { + privileges = make([]schema.SQLPrivilege, 0) + for _, perm := range u.Permissions { + sqlPrivileges := sql.DefaultSQLPrivilegesForPermission(permissionFromCode(perm.Permission)) + for _, sqlPrivilege := range sqlPrivileges { + schemaPrivilege, err := schema.SQLPrivilegeToProto(sqlPrivilege) + if err != nil { + return nil, err + } + privileges = append(privileges, schemaPrivilege) + } + } } + + return &schema.User{ + User: []byte(u.Username), + Createdat: u.CreatedAt.String(), + Createdby: u.CreatedBy, + Permissions: permissions, + SqlPrivileges: privileges, + Active: u.Active, + }, nil } // ChangePassword ... @@ -385,9 +383,16 @@ func (s *ImmuServer) ChangePermission(ctx context.Context, r *schema.ChangePermi if len(r.Username) == 0 { return nil, status.Errorf(codes.InvalidArgument, "username can not be empty") } + if len(r.Database) == 0 { return nil, status.Errorf(codes.InvalidArgument, "database can not be empty") } + + _, err := s.dbList.GetByName(r.Database) + if r.Database != SystemDBName && err != nil { + return nil, status.Errorf(codes.InvalidArgument, "database does not exist") + } + if (r.Action != schema.PermissionAction_GRANT) && (r.Action != schema.PermissionAction_REVOKE) { return nil, status.Errorf(codes.InvalidArgument, "action not recognized") @@ -410,25 +415,25 @@ func (s *ImmuServer) ChangePermission(ctx context.Context, r *schema.ChangePermi } if r.Username == auth.SysAdminUsername { - return nil, status.Errorf(codes.InvalidArgument, "changing sysadmin permisions is not allowed") + return nil, status.Errorf(codes.InvalidArgument, "changing sysadmin permissions is not allowed") } if r.Database == SystemDBName && r.Permission == auth.PermissionRW { return nil, ErrPermissionDenied } - //check if user exists + // check if user exists targetUser, err := s.getUser(ctx, []byte(r.Username)) if err != nil { return nil, status.Errorf(codes.NotFound, "user %s not found", string(r.Username)) } - //target user should be active + // target user should be active if !targetUser.Active { return nil, status.Errorf(codes.FailedPrecondition, "user %s is not active", string(r.Username)) } - //check if requesting user has permission on this database + // check if requesting user has permission on this database if !user.IsSysAdmin { if !user.HasPermission(r.Database, auth.PermissionAdmin) { return nil, status.Errorf(codes.PermissionDenied, "you do not have permission on this database") @@ -450,7 +455,7 @@ func (s *ImmuServer) ChangePermission(ctx context.Context, r *schema.ChangePermi s.Logger.Infof("permissions of user %s for database %s was changed by user %s", targetUser.Username, r.Database, user.Username) - //remove user from loggedin users + // remove user from loggedin users s.removeUserFromLoginList(targetUser.Username) return new(empty.Empty), nil @@ -532,9 +537,20 @@ func (s *ImmuServer) insertNewUser(ctx context.Context, username []byte, plainPa return nil, nil, err } + sqlPrivileges := sql.DefaultSQLPrivilegesForPermission(permissionFromCode(permission)) // TODO: maybe move to auth package + privileges := make([]auth.SQLPrivilege, len(sqlPrivileges)) + for i, p := range sqlPrivileges { + privileges[i] = auth.SQLPrivilege{ + Database: database, + Privilege: string(p), + } + } + userdata.Active = true + userdata.HasPrivileges = true userdata.Username = string(username) userdata.Permissions = append(userdata.Permissions, auth.Permission{Permission: permission, Database: database}) + userdata.SQLPrivileges = privileges userdata.CreatedBy = createdBy userdata.CreatedAt = time.Now() @@ -651,3 +667,86 @@ func (s *ImmuServer) getLoggedInUserDataFromUsername(username string) (*auth.Use return userdata, nil } + +func (s *ImmuServer) ChangeSQLPrivileges(ctx context.Context, r *schema.ChangeSQLPrivilegesRequest) (*schema.ChangeSQLPrivilegesResponse, error) { + s.Logger.Debugf("ChangeSQLPrivileges %+v", r) + + if s.Options.GetMaintenance() { + return nil, ErrNotAllowedInMaintenanceMode + } + + // sanitize input + { + if len(r.Username) == 0 { + return nil, status.Errorf(codes.InvalidArgument, "username can not be empty") + } + if _, err := s.dbList.GetByName(r.Database); err != nil { + return nil, status.Errorf(codes.InvalidArgument, err.Error()) + } + if (r.Action != schema.PermissionAction_GRANT) && + (r.Action != schema.PermissionAction_REVOKE) { + return nil, status.Errorf(codes.InvalidArgument, "action not recognized") + } + } + + privileges := make([]string, len(r.Privileges)) + for i := range r.Privileges { + p := schema.SQLPrivilegeFromProto(r.Privileges[i]) + if p == "" { + return nil, status.Errorf(codes.InvalidArgument, "SQL privilege not recognized") + } + privileges[i] = string(p) + } + + _, user, err := s.getLoggedInUserdataFromCtx(ctx) + if err != nil { + return nil, err + } + + //do not allow to change own permissions, user can lock itsself out + if r.Username == user.Username { + return nil, status.Errorf(codes.InvalidArgument, "changing your own privileges is not allowed") + } + + if r.Username == auth.SysAdminUsername { + return nil, status.Errorf(codes.InvalidArgument, "changing sysadmin privileges is not allowed") + } + + // check if user exists + targetUser, err := s.getUser(ctx, []byte(r.Username)) + if err != nil { + return nil, status.Errorf(codes.NotFound, "user %s not found", string(r.Username)) + } + + // target user should be active + if !targetUser.Active { + return nil, status.Errorf(codes.FailedPrecondition, "user %s is not active", string(r.Username)) + } + + // check if requesting user has permission on this database + if !user.IsSysAdmin { + if !user.HasPermission(r.Database, auth.PermissionAdmin) { + return nil, status.Errorf(codes.PermissionDenied, "you do not have permission on this database") + } + } + + if r.Action == schema.PermissionAction_REVOKE { + targetUser.RevokeSQLPrivileges(r.Database, privileges) + } else { + targetUser.GrantSQLPrivileges(r.Database, privileges) + } + + targetUser.CreatedBy = user.Username + targetUser.CreatedAt = time.Now() + + if err := s.saveUser(ctx, targetUser); err != nil { + return nil, err + } + + s.Logger.Infof("permissions of user %s for database %s was changed by user %s", targetUser.Username, r.Database, user.Username) + + // remove user from loggedin users + s.removeUserFromLoginList(targetUser.Username) + + return &schema.ChangeSQLPrivilegesResponse{}, nil +} diff --git a/pkg/server/user_test.go b/pkg/server/user_test.go index 7e963d96dc..3f43ecf211 100644 --- a/pkg/server/user_test.go +++ b/pkg/server/user_test.go @@ -18,8 +18,10 @@ package server import ( "context" + "fmt" "testing" + "github.com/codenotary/immudb/embedded/sql" "github.com/codenotary/immudb/pkg/api/schema" "github.com/codenotary/immudb/pkg/auth" "github.com/codenotary/immudb/pkg/database" @@ -257,6 +259,123 @@ func TestServerUsermanagement(t *testing.T) { testServerListUsers(ctx, s, t) } +func TestServerCreateUser(t *testing.T) { + dir := t.TempDir() + + serverOptions := DefaultOptions(). + WithDir(dir). + WithMetricsServer(false). + WithAdminPassword(auth.SysAdminPassword) + + s := DefaultServer().WithOptions(serverOptions).(*ImmuServer) + + s.Initialize() + + ctx, err := loginAsUser(s, auth.SysAdminUsername, auth.SysAdminPassword) + require.NoError(t, err) + + newdb := &schema.DatabaseSettings{ + DatabaseName: testDatabase, + } + _, err = s.CreateDatabaseWith(ctx, newdb) + require.NoError(t, err) + + _, err = s.CreateUser(ctx, &schema.CreateUserRequest{ + User: testUsername, + Password: testPassword, + Database: testDatabase, + Permission: auth.PermissionR, + }) + require.NoError(t, err) + + _, err = s.ChangeSQLPrivileges(ctx, &schema.ChangeSQLPrivilegesRequest{ + Action: schema.PermissionAction_GRANT, + Username: string(testUsername), + Database: testDatabase, + Privileges: []schema.SQLPrivilege{schema.SQLPrivilege_UPDATE}, + }) + require.NoError(t, err) + + users, err := s.ListUsers(ctx, &emptypb.Empty{}) + require.NoError(t, err) + require.Len(t, users.Users, 2) + + u := users.Users[1] + require.Equal(t, string(u.User), string(testUsername)) + require.Equal(t, u.SqlPrivileges, []schema.SQLPrivilege{schema.SQLPrivilege_SELECT, schema.SQLPrivilege_UPDATE}) + + userCtx, err := loginAsUser(s, string(testUsername), string(testPassword)) + require.NoError(t, err) + + _, err = s.ChangeSQLPrivileges(userCtx, &schema.ChangeSQLPrivilegesRequest{ + Action: schema.PermissionAction_REVOKE, + Username: string(testUsername), + Database: testDatabase, + Privileges: []schema.SQLPrivilege{schema.SQLPrivilege_SELECT}, + }) + require.ErrorContains(t, err, "changing your own privileges is not allowed") + + _, err = s.ChangeSQLPrivileges(userCtx, &schema.ChangeSQLPrivilegesRequest{ + Action: schema.PermissionAction_REVOKE, + Username: auth.SysAdminUsername, + Database: testDatabase, + Privileges: []schema.SQLPrivilege{schema.SQLPrivilege_SELECT}, + }) + require.ErrorContains(t, err, "changing sysadmin privileges is not allowed") + + _, err = s.SQLExec(ctx, &schema.SQLExecRequest{Sql: fmt.Sprintf("REVOKE ALL PRIVILEGES ON DATABASE %s TO USER %s", testDatabase, string(testUsername))}) + require.NoError(t, err) + + _, err = s.ChangeSQLPrivileges(ctx, &schema.ChangeSQLPrivilegesRequest{ + Action: schema.PermissionAction_REVOKE, + Username: string(testUsername), + Database: testDatabase, + Privileges: []schema.SQLPrivilege{schema.SQLPrivilege_SELECT, schema.SQLPrivilege_UPDATE}, + }) + require.NoError(t, err) + + users, err = s.ListUsers(ctx, &emptypb.Empty{}) + require.NoError(t, err) + require.Len(t, users.Users, 2) + + u = users.Users[1] + require.Equal(t, string(u.User), string(testUsername)) + require.Empty(t, u.SqlPrivileges) + + userCtx, err = loginAsUser(s, string(testUsername), string(testPassword)) // should login again after chaing permissions + require.NoError(t, err) + + reply, err := s.UseDatabase(userCtx, &schema.Database{DatabaseName: testDatabase}) + require.NoError(t, err) + + md := metadata.Pairs("authorization", reply.Token) + userCtx = metadata.NewIncomingContext(context.Background(), md) + + _, err = s.UnarySQLQuery(userCtx, &schema.SQLQueryRequest{Sql: "SELECT * FROM mytable"}) + require.ErrorIs(t, err, sql.ErrAccessDenied) +} + +func TestUnmarshalUserWithNoPrivileges(t *testing.T) { + u, err := unmarshalSchemaUser([]byte(`{"hasPrivileges": false, "permissions": [{"permission": 1, "database": "immudb"}]}`)) + require.NoError(t, err) + require.Equal(t, u.SqlPrivileges, []schema.SQLPrivilege{schema.SQLPrivilege_SELECT}) +} + +func loginAsUser(s *ImmuServer, username, password string) (context.Context, error) { + r := &schema.LoginRequest{ + User: []byte(username), + Password: []byte(password), + } + ctx := context.Background() + lr, err := s.Login(ctx, r) + if err != nil { + return nil, err + } + + md := metadata.Pairs("authorization", lr.Token) + return metadata.NewIncomingContext(context.Background(), md), nil +} + func testServerCreateUser(ctx context.Context, s *ImmuServer, t *testing.T) { newUser := &schema.CreateUserRequest{ User: testUsername,