diff --git a/.gitignore b/.gitignore index 6877203d01..75afa11cbd 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,4 @@ bin .idea .vscode __debug_bin* -build \ No newline at end of file +build diff --git a/cmd/api-server/service/config_import.go b/cmd/api-server/service/config_import.go index 7326ee41b2..c42f3d7e07 100644 --- a/cmd/api-server/service/config_import.go +++ b/cmd/api-server/service/config_import.go @@ -64,8 +64,7 @@ type configImport struct { } // TemplateConfigFileImport Import template config file -// -//nolint:funlen +// nolint:funlen func (c *configImport) TemplateConfigFileImport(w http.ResponseWriter, r *http.Request) { kt := kit.MustGetKit(r.Context()) @@ -245,6 +244,8 @@ func (c *configImport) TemplateConfigFileImport(w http.ResponseWriter, r *http.R newItem.Privilege = data.GetTemplateRevision().GetSpec().GetPermission().GetPrivilege() newItem.User = data.GetTemplateRevision().GetSpec().GetPermission().GetUser() newItem.UserGroup = data.GetTemplateRevision().GetSpec().GetPermission().GetUserGroup() + newItem.Uid = data.GetTemplateRevision().GetSpec().GetPermission().GetUid() + newItem.Gid = data.GetTemplateRevision().GetSpec().GetPermission().GetGid() exist = append(exist, newItem) } } @@ -263,8 +264,7 @@ func (c *configImport) TemplateConfigFileImport(w http.ResponseWriter, r *http.R } // ConfigFileImport Import config file -// -//nolint:funlen +// nolint:funlen func (c *configImport) ConfigFileImport(w http.ResponseWriter, r *http.Request) { kt := kit.MustGetKit(r.Context()) @@ -465,6 +465,8 @@ func (c *configImport) ConfigFileImport(w http.ResponseWriter, r *http.Request) newItem.Privilege = config.GetSpec().GetPermission().GetPrivilege() newItem.User = config.GetSpec().GetPermission().GetUser() newItem.UserGroup = config.GetSpec().GetPermission().GetUserGroup() + newItem.Uid = config.GetSpec().GetPermission().GetUid() + newItem.Gid = config.GetSpec().GetPermission().GetGid() exist = append(exist, newItem) } } diff --git a/cmd/config-server/service/app_template_binding.go b/cmd/config-server/service/app_template_binding.go index 2416c06acf..ea896f4fa6 100644 --- a/cmd/config-server/service/app_template_binding.go +++ b/cmd/config-server/service/app_template_binding.go @@ -280,9 +280,6 @@ func (s *Service) ListAppBoundTmplRevisions(ctx context.Context, req *pbcs.ListA TemplateRevisionMemo: r.TemplateRevisionMemo, FileType: r.FileType, FileMode: r.FileMode, - User: r.User, - UserGroup: r.UserGroup, - Privilege: r.Privilege, Signature: r.Signature, ByteSize: r.ByteSize, Creator: r.Creator, @@ -290,6 +287,9 @@ func (s *Service) ListAppBoundTmplRevisions(ctx context.Context, req *pbcs.ListA FileState: r.FileState, Md5: r.Md5, IsConflict: r.IsConflict, + User: r.Permission.User, + UserGroup: r.Permission.UserGroup, + Privilege: r.Permission.Privilege, }) } if req.WithStatus { @@ -449,9 +449,9 @@ func (s *Service) ListReleasedAppBoundTmplRevisions(ctx context.Context, TemplateRevisionMemo: r.TemplateRevisionMemo, FileType: r.FileType, FileMode: r.FileMode, - User: r.User, - UserGroup: r.UserGroup, - Privilege: r.Privilege, + User: r.Permission.User, + UserGroup: r.Permission.UserGroup, + Privilege: r.Permission.Privilege, Signature: r.Signature, ByteSize: r.ByteSize, OriginSignature: r.OriginSignature, diff --git a/cmd/config-server/service/config_item.go b/cmd/config-server/service/config_item.go index b427d17eaf..86bb81a83d 100644 --- a/cmd/config-server/service/config_item.go +++ b/cmd/config-server/service/config_item.go @@ -67,6 +67,8 @@ func (s *Service) CreateConfigItem(ctx context.Context, req *pbcs.CreateConfigIt User: req.User, UserGroup: req.UserGroup, Privilege: req.Privilege, + Uid: req.Uid, + Gid: req.Gid, }, }, ContentSpec: &pbcontent.ContentSpec{ @@ -121,6 +123,8 @@ func (s *Service) BatchUpsertConfigItems(ctx context.Context, req *pbcs.BatchUps User: item.User, UserGroup: item.UserGroup, Privilege: item.Privilege, + Uid: item.Uid, + Gid: item.Gid, }, }, ContentSpec: &pbcontent.ContentSpec{ @@ -190,6 +194,8 @@ func (s *Service) UpdateConfigItem(ctx context.Context, req *pbcs.UpdateConfigIt User: req.User, UserGroup: req.UserGroup, Privilege: req.Privilege, + Uid: req.Uid, + Gid: req.Gid, }, }, } @@ -696,6 +702,7 @@ func (s *Service) CompareConfigItemConflicts(ctx context.Context, req *pbcs.Comp TemplateRevisionId: revision.TemplateRevisionId, IsLatest: revision.IsLatest, Variables: revision.GetVariables(), + Permission: revision.GetPermission(), }) } templateConfigs = append(templateConfigs, &pbcs.CompareConfigItemConflictsResp_TemplateConfig{ diff --git a/cmd/config-server/service/template.go b/cmd/config-server/service/template.go index a1c4903155..aabf0c5479 100644 --- a/cmd/config-server/service/template.go +++ b/cmd/config-server/service/template.go @@ -83,6 +83,8 @@ func (s *Service) CreateTemplate(ctx context.Context, req *pbcs.CreateTemplateRe User: req.User, UserGroup: req.UserGroup, Privilege: req.Privilege, + Uid: req.Uid, + Gid: req.Gid, }, ContentSpec: &pbcontent.ContentSpec{ Signature: req.Sign, @@ -529,6 +531,8 @@ func (s *Service) BatchUpsertTemplates(ctx context.Context, req *pbcs.BatchUpser User: item.User, UserGroup: item.UserGroup, Privilege: item.Privilege, + Uid: item.Uid, + Gid: item.Gid, }, ContentSpec: &pbcontent.ContentSpec{ Signature: item.Sign, @@ -544,7 +548,8 @@ func (s *Service) BatchUpsertTemplates(ctx context.Context, req *pbcs.BatchUpser }) } - in := &pbds.BatchUpsertTemplatesReq{Items: items, TemplateSetIds: req.GetTemplateSetIds(), BizId: req.GetBizId()} + in := &pbds.BatchUpsertTemplatesReq{Items: items, TemplateSetIds: req.GetTemplateSetIds(), BizId: req.GetBizId(), + TemplateSpaceId: req.TemplateSpaceId} data, err := s.client.DS.BatchUpsertTemplates(grpcKit.RpcCtx(), in) if err != nil { return nil, err @@ -582,6 +587,8 @@ func (s *Service) BatchUpdateTemplatePermissions(ctx context.Context, req *pbcs. TemplateSetId: req.TemplateSetId, ExclusionOperation: req.ExclusionOperation, NoSetSpecified: req.NoSetSpecified, + Uid: req.Uid, + Gid: req.Gid, }) if err != nil { diff --git a/cmd/config-server/service/template_revision.go b/cmd/config-server/service/template_revision.go index 932049cbe9..bf269e593f 100644 --- a/cmd/config-server/service/template_revision.go +++ b/cmd/config-server/service/template_revision.go @@ -171,7 +171,8 @@ func (s *Service) ListTemplateRevisionsByIDs(ctx context.Context, req *pbcs.List } r := &pbds.ListTemplateRevisionsByIDsReq{ - Ids: req.Ids, + Ids: req.Ids, + BizId: req.BizId, } rp, err := s.client.DS.ListTemplateRevisionsByIDs(grpcKit.RpcCtx(), r) @@ -254,6 +255,8 @@ func (s *Service) GetTemplateRevision(ctx context.Context, req *pbcs.GetTemplate CreateAt: tr.GetDetail().GetCreateAt(), Md5: tr.GetDetail().GetMd5(), IsLatest: tr.GetDetail().GetIsLatest(), + Uid: tr.Detail.Uid, + Gid: tr.Detail.Gid, }, }, nil } @@ -293,6 +296,8 @@ func (s *Service) UpdateTemplateRevision(ctx context.Context, req *pbcs.UpdateTe User: req.User, UserGroup: req.UserGroup, Privilege: req.Privilege, + Uid: req.Uid, + Gid: req.Gid, }, ContentSpec: &pbcontent.ContentSpec{ Signature: req.Sign, diff --git a/cmd/config-server/service/user_group_privilege.go b/cmd/config-server/service/user_group_privilege.go new file mode 100644 index 0000000000..870020dacc --- /dev/null +++ b/cmd/config-server/service/user_group_privilege.go @@ -0,0 +1,96 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package service + +import ( + "context" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/iam/meta" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" + pbcs "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/config-server" + pbds "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/data-service" +) + +// DeleteUserGroupPrivilege 删除用户组权限数据 +func (s *Service) DeleteUserGroupPrivilege(ctx context.Context, req *pbcs.DeleteUserPrivilegesReq) ( + *pbcs.DeleteUserPrivilegesResp, error) { + // FromGrpcContext used only to obtain Kit through grpc context. + kit := kit.FromGrpcContext(ctx) + + res := []*meta.ResourceAttribute{ + {Basic: meta.Basic{Type: meta.Biz, Action: meta.FindBusinessResource}, BizID: req.BizId}, + {Basic: meta.Basic{Type: meta.App, Action: meta.Delete, ResourceID: req.AppId}, BizID: req.BizId}, + } + // Authorize authorize if user has permission to the resources. + // If user is unauthorized, assign apply url and resources into error. + if err := s.authorizer.Authorize(kit, res...); err != nil { + return nil, err + } + + _, err := s.client.DS.DeleteUserGroupPrivilege(kit.RpcCtx(), &pbds.DeleteUserPrivilegesReq{ + Id: req.Id, + BizId: req.BizId, + AppId: req.AppId, + TemplateSpaceId: req.TemplateSpaceId, + }) + + if err != nil { + return nil, err + } + + return &pbcs.DeleteUserPrivilegesResp{}, nil +} + +// ListUserGroupPrivileges 获取用户组数据列表 +func (s *Service) ListUserGroupPrivileges(ctx context.Context, req *pbcs.ListUserPrivilegesReq) ( + *pbcs.ListUserPrivilegesResp, error) { + // FromGrpcContext used only to obtain Kit through grpc context. + kit := kit.FromGrpcContext(ctx) + + res := []*meta.ResourceAttribute{ + {Basic: meta.Basic{Type: meta.Biz, Action: meta.FindBusinessResource}, BizID: req.BizId}, + {Basic: meta.Basic{Type: meta.App, Action: meta.View, ResourceID: req.AppId}, BizID: req.BizId}, + } + // Authorize authorize if user has permission to the resources. + // If user is unauthorized, assign apply url and resources into error. + if err := s.authorizer.Authorize(kit, res...); err != nil { + return nil, err + } + + resp, err := s.client.DS.ListUserGroupPrivileges(kit.RpcCtx(), &pbds.ListUserPrivilegesReq{ + BizId: req.BizId, + AppId: req.AppId, + TemplateSpaceId: req.TemplateSpaceId, + Name: req.Name, + Start: req.Start, + Limit: req.Limit, + All: req.All, + }) + + if err != nil { + return nil, err + } + + items := make([]*pbcs.ListUserPrivilegesResp_Detail, 0, len(resp.GetDetails())) + for _, v := range resp.GetDetails() { + items = append(items, &pbcs.ListUserPrivilegesResp_Detail{ + Id: v.GetId(), + Name: v.GetName(), + PrivilegeType: v.GetPrivilegeType(), + ReadOnly: v.GetReadOnly(), + Pid: v.GetPid(), + }) + } + + return &pbcs.ListUserPrivilegesResp{Details: items, Count: resp.Count}, nil +} diff --git a/cmd/config-server/service/user_privilege.go b/cmd/config-server/service/user_privilege.go new file mode 100644 index 0000000000..938b35f1c0 --- /dev/null +++ b/cmd/config-server/service/user_privilege.go @@ -0,0 +1,96 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package service + +import ( + "context" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/iam/meta" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" + pbcs "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/config-server" + pbds "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/data-service" +) + +// DeleteUserPrivilege 删除用户权限 +func (s *Service) DeleteUserPrivilege(ctx context.Context, req *pbcs.DeleteUserPrivilegesReq) ( + *pbcs.DeleteUserPrivilegesResp, error) { + // FromGrpcContext used only to obtain Kit through grpc context. + kit := kit.FromGrpcContext(ctx) + + res := []*meta.ResourceAttribute{ + {Basic: meta.Basic{Type: meta.Biz, Action: meta.FindBusinessResource}, BizID: req.BizId}, + {Basic: meta.Basic{Type: meta.App, Action: meta.Delete, ResourceID: req.AppId}, BizID: req.BizId}, + } + // Authorize authorize if user has permission to the resources. + // If user is unauthorized, assign apply url and resources into error. + if err := s.authorizer.Authorize(kit, res...); err != nil { + return nil, err + } + + _, err := s.client.DS.DeleteUserPrivilege(kit.RpcCtx(), &pbds.DeleteUserPrivilegesReq{ + Id: req.Id, + BizId: req.BizId, + AppId: req.AppId, + TemplateSpaceId: req.TemplateSpaceId, + }) + + if err != nil { + return nil, err + } + + return &pbcs.DeleteUserPrivilegesResp{}, nil +} + +// ListUserPrivileges 获取用户权限 +func (s *Service) ListUserPrivileges(ctx context.Context, req *pbcs.ListUserPrivilegesReq) ( + *pbcs.ListUserPrivilegesResp, error) { + // FromGrpcContext used only to obtain Kit through grpc context. + kit := kit.FromGrpcContext(ctx) + + res := []*meta.ResourceAttribute{ + {Basic: meta.Basic{Type: meta.Biz, Action: meta.FindBusinessResource}, BizID: req.BizId}, + {Basic: meta.Basic{Type: meta.App, Action: meta.View, ResourceID: req.AppId}, BizID: req.BizId}, + } + // Authorize authorize if user has permission to the resources. + // If user is unauthorized, assign apply url and resources into error. + if err := s.authorizer.Authorize(kit, res...); err != nil { + return nil, err + } + + resp, err := s.client.DS.ListUserPrivileges(kit.RpcCtx(), &pbds.ListUserPrivilegesReq{ + BizId: req.BizId, + AppId: req.AppId, + TemplateSpaceId: req.TemplateSpaceId, + Name: req.Name, + Start: req.Start, + Limit: req.Limit, + All: req.All, + }) + + if err != nil { + return nil, err + } + + items := make([]*pbcs.ListUserPrivilegesResp_Detail, 0, len(resp.GetDetails())) + for _, v := range resp.GetDetails() { + items = append(items, &pbcs.ListUserPrivilegesResp_Detail{ + Id: v.GetId(), + Name: v.GetName(), + PrivilegeType: v.GetPrivilegeType(), + ReadOnly: v.GetReadOnly(), + Pid: v.Pid, + }) + } + + return &pbcs.ListUserPrivilegesResp{Details: items, Count: resp.Count}, nil +} diff --git a/cmd/data-service/db-migration/migrations/20240918110034_add_user_privilege.go b/cmd/data-service/db-migration/migrations/20240918110034_add_user_privilege.go new file mode 100644 index 0000000000..5af9a00e8d --- /dev/null +++ b/cmd/data-service/db-migration/migrations/20240918110034_add_user_privilege.go @@ -0,0 +1,229 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package migrations + +import ( + "time" + + "gorm.io/gorm" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/cmd/data-service/db-migration/migrator" +) + +func init() { + // add current migration to migrator + migrator.GetMigrator().AddMigration(&migrator.Migration{ + Version: "20240918110034", + Name: "20240918110034_add_user_privilege", + Mode: migrator.GormMode, + Up: mig20240918110034Up, + Down: mig20240918110034Down, + }) +} + +// mig20240918110034Up for up migration +// nolint:funlen +func mig20240918110034Up(tx *gorm.DB) error { + // UserPrivileges : user privileges + type UserPrivileges struct { + ID uint `gorm:"column:id;type:bigint(1) unsigned;primary_key"` + BizID uint `gorm:"type:bigint(1) unsigned not null;index:idx_bizID_appID,priority:1"` + AppID uint `gorm:"type:bigint(1) unsigned not null;index:idx_bizID_appID,priority:2"` + Uid uint `gorm:"column:uid;type:bigint(1) unsigned;default:0;NOT NULL"` + TemplateSpaceID uint `gorm:"column:template_space_id;type:bigint(1) unsigned;default:0;NOT NULL"` + User string `gorm:"column:user;type:varchar(64);NOT NULL"` + PrivilegeType string `gorm:"column:privilege_type;type:varchar(20);NOT NULL"` + ReadOnly uint `gorm:"column:read_only;type:tinyint(1) unsigned;default:0;NOT NULL"` + Creator string `gorm:"column:creator;type:varchar(64);NOT NULL"` + Reviser string `gorm:"column:reviser;type:varchar(64);NOT NULL"` + CreatedAt time.Time `gorm:"column:created_at;type:datetime(6);NOT NULL"` + UpdatedAt time.Time `gorm:"column:updated_at;type:datetime(6);NOT NULL"` + } + + // UserGroupPrivileges : user group privileges + type UserGroupPrivileges struct { + ID uint `gorm:"column:id;type:bigint(1) unsigned;primary_key"` + BizID uint `gorm:"type:bigint(1) unsigned not null;index:idx_bizID_appID,priority:1"` + AppID uint `gorm:"type:bigint(1) unsigned not null;index:idx_bizID_appID,priority:2"` + Gid uint `gorm:"column:gid;type:bigint(1) unsigned;default:0;NOT NULL"` + TemplateSpaceID uint `gorm:"column:template_space_id;type:bigint(1) unsigned;default:0;NOT NULL"` + UserGroup string `gorm:"column:user_group;type:varchar(64);NOT NULL"` + PrivilegeType string `gorm:"column:privilege_type;type:varchar(20);NOT NULL"` + ReadOnly uint `gorm:"column:read_only;type:tinyint(1) unsigned;default:0;NOT NULL"` + Creator string `gorm:"column:creator;type:varchar(64);NOT NULL"` + Reviser string `gorm:"column:reviser;type:varchar(64);NOT NULL"` + CreatedAt time.Time `gorm:"column:created_at;type:datetime(6);NOT NULL"` + UpdatedAt time.Time `gorm:"column:updated_at;type:datetime(6);NOT NULL"` + } + + // IDGenerators : ID生成器 + type IDGenerators struct { + ID uint `gorm:"type:bigint(1) unsigned not null;primaryKey"` + Resource string `gorm:"type:varchar(50) not null;uniqueIndex:idx_resource"` + MaxID uint `gorm:"type:bigint(1) unsigned not null"` + UpdatedAt time.Time `gorm:"type:datetime(6) not null"` + } + + if err := tx.Set("gorm:table_options", "ENGINE=InnoDB CHARSET=utf8mb4"). + AutoMigrate(&UserPrivileges{}, &UserGroupPrivileges{}); err != nil { + return err + } + + now := time.Now() + + // 新增默认数据 + tx.Create([]UserPrivileges{ + { + ID: 1, + BizID: 0, + AppID: 0, + TemplateSpaceID: 0, + Uid: 0, + User: "root", + PrivilegeType: "system", + ReadOnly: 1, + Creator: "system", + Reviser: "", + CreatedAt: now, + UpdatedAt: now, + }, + }) + + // 新增默认数据 + tx.Create([]UserGroupPrivileges{ + { + ID: 1, + BizID: 0, + AppID: 0, + TemplateSpaceID: 0, + Gid: 0, + UserGroup: "root", + PrivilegeType: "system", + ReadOnly: 1, + Creator: "system", + Reviser: "", + CreatedAt: now, + UpdatedAt: now, + }, + }) + + if result := tx.Create([]IDGenerators{ + {Resource: "user_privileges", MaxID: 1, UpdatedAt: now}, + {Resource: "user_group_privileges", MaxID: 1, UpdatedAt: now}, + }); result.Error != nil { + return result.Error + } + + // ReleasedAppTemplates : released_app_templates + type ReleasedAppTemplates struct { + Uid uint64 `gorm:"column:uid;type:bigint(1) unsigned;default:0;NOT NULL"` + Gid uint64 `gorm:"column:gid;type:bigint(1) unsigned;default:0;NOT NULL"` + } + + if !tx.Migrator().HasColumn(&ReleasedAppTemplates{}, "uid") { + if err := tx.Migrator().AddColumn(&ReleasedAppTemplates{}, "uid"); err != nil { + return err + } + } + + if !tx.Migrator().HasColumn(&ReleasedAppTemplates{}, "gid") { + if err := tx.Migrator().AddColumn(&ReleasedAppTemplates{}, "gid"); err != nil { + return err + } + } + + // ReleasedConfigItems : released_config_items + type ReleasedConfigItems struct { + Uid uint64 `gorm:"column:uid;type:bigint(1) unsigned;default:0;NOT NULL"` + Gid uint64 `gorm:"column:gid;type:bigint(1) unsigned;default:0;NOT NULL"` + } + + if !tx.Migrator().HasColumn(&ReleasedConfigItems{}, "uid") { + if err := tx.Migrator().AddColumn(&ReleasedConfigItems{}, "uid"); err != nil { + return err + } + } + + if !tx.Migrator().HasColumn(&ReleasedConfigItems{}, "gid") { + if err := tx.Migrator().AddColumn(&ReleasedConfigItems{}, "gid"); err != nil { + return err + } + } + + return nil +} + +// mig20240918110034Down for down migration +func mig20240918110034Down(tx *gorm.DB) error { + // IDGenerators : ID生成器 + type IDGenerators struct { + ID uint `gorm:"type:bigint(1) unsigned not null;primaryKey"` + Resource string `gorm:"type:varchar(50) not null;uniqueIndex:idx_resource"` + MaxID uint `gorm:"type:bigint(1) unsigned not null"` + UpdatedAt time.Time `gorm:"type:datetime(6) not null"` + } + + var resources = []string{ + "user_privileges", + "user_group_privileges", + } + if result := tx.Where("resource IN ?", resources).Delete(&IDGenerators{}); result.Error != nil { + return result.Error + } + + if err := tx.Migrator().DropTable("user_privileges"); err != nil { + return err + } + + if err := tx.Migrator().DropTable("user_group_privileges"); err != nil { + return err + } + + // ReleasedAppTemplates : released_app_templates + type ReleasedAppTemplates struct { + Uid uint64 `gorm:"column:uid;type:bigint(1) unsigned;default:0;NOT NULL"` + Gid uint64 `gorm:"column:gid;type:bigint(1) unsigned;default:0;NOT NULL"` + } + + if tx.Migrator().HasColumn(&ReleasedAppTemplates{}, "uid") { + if err := tx.Migrator().DropColumn(&ReleasedAppTemplates{}, "uid"); err != nil { + return err + } + } + + if tx.Migrator().HasColumn(&ReleasedAppTemplates{}, "gid") { + if err := tx.Migrator().DropColumn(&ReleasedAppTemplates{}, "gid"); err != nil { + return err + } + } + + // ReleasedConfigItems : released_config_items + type ReleasedConfigItems struct { + Uid uint64 `gorm:"column:uid;type:bigint(1) unsigned;default:0;NOT NULL"` + Gid uint64 `gorm:"column:gid;type:bigint(1) unsigned;default:0;NOT NULL"` + } + + if tx.Migrator().HasColumn(&ReleasedConfigItems{}, "uid") { + if err := tx.Migrator().DropColumn(&ReleasedConfigItems{}, "uid"); err != nil { + return err + } + } + + if tx.Migrator().HasColumn(&ReleasedConfigItems{}, "gid") { + if err := tx.Migrator().DropColumn(&ReleasedConfigItems{}, "gid"); err != nil { + return err + } + } + + return nil +} diff --git a/cmd/data-service/service/app_template_binding.go b/cmd/data-service/service/app_template_binding.go index d24bd5f71c..f6d04809c7 100644 --- a/cmd/data-service/service/app_template_binding.go +++ b/cmd/data-service/service/app_template_binding.go @@ -29,6 +29,7 @@ import ( "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/logs" pbatb "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/app-template-binding" pbbase "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/base" + pbci "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/config-item" pbrci "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/released-ci" pbds "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/data-service" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/search" @@ -168,11 +169,9 @@ func (s *Service) DeleteAppTemplateBinding(ctx context.Context, req *pbds.Delete } // ListAppBoundTmplRevisions list app bound template revisions. -// -//nolint:funlen,gocyclo +// nolint:funlen,gocyclo func (s *Service) ListAppBoundTmplRevisions(ctx context.Context, req *pbds.ListAppBoundTmplRevisionsReq) (*pbds.ListAppBoundTmplRevisionsResp, error) { - kt := kit.FromGrpcContext(ctx) // validate the page params @@ -238,7 +237,14 @@ func (s *Service) ListAppBoundTmplRevisions(ctx context.Context, logs.Errorf("list app bound template revisions failed err: %v, rid: %s", err, kt.Rid) return nil, err } - for _, t := range tmplRevisions { + + // 获取模板文件版本的权限 + data, err := s.listTplRevPerms(kt, kt.BizID, tmplRevisions) + if err != nil { + return nil, err + } + + for _, t := range data { tmplRevisionMap[t.ID] = t } @@ -261,14 +267,12 @@ func (s *Service) ListAppBoundTmplRevisions(ctx context.Context, TemplateRevisionMemo: d.Spec.RevisionMemo, FileType: string(d.Spec.FileType), FileMode: string(d.Spec.FileMode), - User: d.Spec.Permission.User, - UserGroup: d.Spec.Permission.UserGroup, - Privilege: d.Spec.Permission.Privilege, Signature: d.Spec.ContentSpec.Signature, Md5: d.Spec.ContentSpec.Md5, ByteSize: d.Spec.ContentSpec.ByteSize, Creator: d.Revision.Creator, CreateAt: d.Revision.CreatedAt.Format(time.RFC3339), + Permission: pbci.PbFilePermission(d.Spec.Permission), }) } } @@ -590,13 +594,13 @@ func (s *Service) getConflictDetailsOfATB(kt *kit.Kit, pbs *parsedBindings, tmpl // CascadeUpdateATB update app template binding in cascaded way. // Only called by bscp system itself, no need to validate the input, but need the uniqueness verification. /* -在模版/套餐有被服务引用的情况下,如下场景需要级联更新应用模版绑定数据: -1.对套餐添加/移出模板 (更新套餐接口、添加模版到套餐接口、从套餐移出模版接口) -2.删除套餐(删除套餐接口) -3.创建模版时指定了套餐(创建模版接口) -4.删除模版(删除模版接口、批量删除模版接口) -5.创建模版版本(创建模版版本接口) -6.删除模版版本(删除模版版本接口,暂不开放该接口) + 在模版/套餐有被服务引用的情况下,如下场景需要级联更新应用模版绑定数据: + 1.对套餐添加/移出模板 (更新套餐接口、添加模版到套餐接口、从套餐移出模版接口) + 2.删除套餐(删除套餐接口) + 3.创建模版时指定了套餐(创建模版接口) + 4.删除模版(删除模版接口、批量删除模版接口) + 5.创建模版版本(创建模版版本接口) + 6.删除模版版本(删除模版版本接口,暂不开放该接口) */ func (s *Service) CascadeUpdateATB(kt *kit.Kit, tx *gen.QueryTx, atb *table.AppTemplateBinding) error { if err := s.genFinalATBForCascade(kt, tx, atb); err != nil { @@ -1197,7 +1201,7 @@ func (s *Service) verifyTemplateSetAndRevisions(kit *kit.Kit, validatedTemplateS for _, v := range tId { if !existsTemplateIds[v] { return errors.New(i18n.T(kit, `the template file %s in the template set - %s has been removed. Please import the set again`, + %s has been removed. Please import the set again`, validatedTemplateSetNames[sId], templateNames[v])) } } @@ -1217,7 +1221,7 @@ func (s *Service) verifyTemplateSetAndRevisions(kit *kit.Kit, validatedTemplateS for _, v := range rId { if !existsRevisionsIds[v] { return errors.New(i18n.T(kit, `template version %s in template file %s - has been removed. Please import the set again`, + has been removed. Please import the set again`, revisionNames[v], templateNames[tId])) } } @@ -1233,7 +1237,7 @@ func (s *Service) verifyTemplateSetAndRevisions(kit *kit.Kit, validatedTemplateS continue } return errors.New(i18n.T(kit, `the version number %s in the template file %s is not the - latest version. Please import the set again`, + latest version. Please import the set again`, templateNames[v.Attachment.TemplateID], revisionNames[v.ID])) } diff --git a/cmd/data-service/service/app_template_variable.go b/cmd/data-service/service/app_template_variable.go index abec7a0f07..671cbf1451 100644 --- a/cmd/data-service/service/app_template_variable.go +++ b/cmd/data-service/service/app_template_variable.go @@ -126,9 +126,11 @@ func getTmplRevisionsFromReleased(releasedTmpls []*table.ReleasedAppTemplate) [] FileType: table.FileFormat(r.Spec.FileType), FileMode: table.FileMode(r.Spec.FileMode), Permission: &table.FilePermission{ - User: r.Spec.User, - UserGroup: r.Spec.UserGroup, - Privilege: r.Spec.Privilege, + User: r.Spec.Permission.User, + UserGroup: r.Spec.Permission.UserGroup, + Privilege: r.Spec.Permission.Privilege, + Uid: r.Spec.Permission.Uid, + Gid: r.Spec.Permission.Gid, }, ContentSpec: &table.ContentSpec{ Signature: r.Spec.OriginSignature, diff --git a/cmd/data-service/service/config_item.go b/cmd/data-service/service/config_item.go index 14d4417c1d..aa8e73b55d 100644 --- a/cmd/data-service/service/config_item.go +++ b/cmd/data-service/service/config_item.go @@ -44,6 +44,7 @@ import ( ) // CreateConfigItem create config item. +// nolint:funlen func (s *Service) CreateConfigItem(ctx context.Context, req *pbds.CreateConfigItemReq) (*pbds.CreateResp, error) { grpcKit := kit.FromGrpcContext(ctx) @@ -85,7 +86,40 @@ func (s *Service) CreateConfigItem(ctx context.Context, req *pbds.CreateConfigIt } return nil, e } - // 2. create content. + + userPrivilege := &table.UserPrivilege{ + Spec: &table.UserPrivilegeSpec{ + User: req.GetConfigItemSpec().Permission.User, + }, + Attachment: &table.UserPrivilegeAttachment{ + BizID: req.GetConfigItemAttachment().BizId, + AppID: req.GetConfigItemAttachment().AppId, + Uid: req.ConfigItemSpec.GetPermission().Uid, + }, + } + + userGroupPrivilege := &table.UserGroupPrivilege{ + Spec: &table.UserGroupPrivilegeSpec{ + UserGroup: req.GetConfigItemSpec().Permission.UserGroup, + }, + Attachment: &table.UserGroupPrivilegeAttachment{ + BizID: req.GetConfigItemAttachment().BizId, + AppID: req.GetConfigItemAttachment().AppId, + Gid: req.ConfigItemSpec.GetPermission().Gid, + }, + } + + // 2. 更新权限组 + err = s.upsertSinglePermissions(grpcKit, tx, req.ConfigItemAttachment.BizId, req.ConfigItemAttachment.AppId, 0, + userPrivilege, userGroupPrivilege, false) + if err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) + } + return nil, err + } + + // 4. create content. content := &table.Content{ Spec: req.ContentSpec.ContentSpec(), Attachment: &table.ContentAttachment{ @@ -105,7 +139,7 @@ func (s *Service) CreateConfigItem(ctx context.Context, req *pbds.CreateConfigIt } return nil, err } - // 3. create commit. + // 5. create commit. commit := &table.Commit{ Spec: &table.CommitSpec{ ContentID: contentID, @@ -135,8 +169,241 @@ func (s *Service) CreateConfigItem(ctx context.Context, req *pbds.CreateConfigIt return &pbds.CreateResp{Id: ciID}, nil } +// UpdateConfigItem update config item. +func (s *Service) UpdateConfigItem(ctx context.Context, req *pbds.UpdateConfigItemReq) ( + *pbbase.EmptyResp, error) { + grpcKit := kit.FromGrpcContext(ctx) + + ci := &table.ConfigItem{ + ID: req.Id, + Spec: req.Spec.ConfigItemSpec(), + Attachment: req.Attachment.ConfigItemAttachment(), + Revision: &table.Revision{ + Reviser: grpcKit.User, + }, + } + + tx := s.dao.GenQuery().Begin() + + // 1. 更新配置项 + if err := s.dao.ConfigItem().UpdateWithTx(grpcKit, tx, ci); err != nil { + logs.Errorf("update config item failed, err: %v, rid: %s", err, grpcKit.Rid) + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) + } + return nil, err + } + + userPrivilege := &table.UserPrivilege{ + Spec: &table.UserPrivilegeSpec{ + User: req.Spec.Permission.User, + }, + Attachment: &table.UserPrivilegeAttachment{ + BizID: req.Attachment.BizId, + AppID: req.Attachment.AppId, + Uid: req.Spec.Permission.Uid, + }, + } + + userGroupPrivilege := &table.UserGroupPrivilege{ + Spec: &table.UserGroupPrivilegeSpec{ + UserGroup: req.Spec.Permission.UserGroup, + }, + Attachment: &table.UserGroupPrivilegeAttachment{ + BizID: req.Attachment.BizId, + AppID: req.Attachment.AppId, + Gid: req.Spec.Permission.Gid, + }, + } + + // 2. 更新权限组 + err := s.upsertSinglePermissions(grpcKit, tx, req.Attachment.BizId, req.Attachment.AppId, 0, + userPrivilege, userGroupPrivilege, false) + if err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) + } + return nil, err + } + + if e := tx.Commit(); e != nil { + logs.Errorf("commit transaction failed, err: %v, rid: %s", e, grpcKit.Rid) + return nil, e + } + + return new(pbbase.EmptyResp), nil +} + +// DeleteConfigItem delete config item. +func (s *Service) DeleteConfigItem(ctx context.Context, req *pbds.DeleteConfigItemReq) (*pbbase.EmptyResp, error) { + grpcKit := kit.FromGrpcContext(ctx) + + ci := &table.ConfigItem{ + ID: req.Id, + Attachment: req.Attachment.ConfigItemAttachment(), + } + if err := s.dao.ConfigItem().Delete(grpcKit, ci); err != nil { + logs.Errorf("delete config item failed, err: %v, rid: %s", err, grpcKit.Rid) + return nil, err + } + + return new(pbbase.EmptyResp), nil +} + +// GetConfigItem get config item detail +func (s *Service) GetConfigItem(ctx context.Context, req *pbds.GetConfigItemReq) (*pbci.ConfigItem, error) { + + grpcKit := kit.FromGrpcContext(ctx) + configItem, err := s.dao.ConfigItem().Get(grpcKit, req.Id, req.BizId) + if err != nil { + logs.Errorf("get config item failed, err: %v, rid: %s", err, grpcKit.Rid) + return nil, err + } + + configItem, err = s.getConfigItemPerms(grpcKit, req.BizId, req.AppId, configItem) + if err != nil { + return nil, err + } + + resp := pbci.PbConfigItem(configItem, "") + return resp, nil +} + +// ListConfigItems list config items by query condition. +// nolint:funlen,gocyclo +func (s *Service) ListConfigItems(ctx context.Context, req *pbds.ListConfigItemsReq) (*pbds.ListConfigItemsResp, + error) { + grpcKit := kit.FromGrpcContext(ctx) + + // validate the page params + opt := &types.BasePage{Start: req.Start, Limit: uint(req.Limit), All: req.All} + if err := opt.Validate(types.DefaultPageOption); err != nil { + return nil, err + } + + // search all editing config items + details, err := s.dao.ConfigItem().ListAllByAppID(grpcKit, req.AppId, req.BizId) + if err != nil { + logs.Errorf("list editing config items failed, err: %v, rid: %s", err, grpcKit.Rid) + return nil, err + } + + // 处理配置项文件权限 + details, err = s.listConfigItemPerms(grpcKit, req.BizId, req.AppId, details) + if err != nil { + return nil, err + } + + configItems := make([]*pbci.ConfigItem, 0) + // if WithStatus is true, the config items includes the deleted ones and file state, else without these data + if req.WithStatus { + var fileReleased []*table.ReleasedConfigItem + fileReleased, err = s.dao.ReleasedCI().GetReleasedLately(grpcKit, req.BizId, req.AppId) + if err != nil { + logs.Errorf("get released failed, err: %v, rid: %s", err, grpcKit.Rid) + return nil, err + } + + var commits []*table.Commit + commits, err = s.dao.Commit().ListAppLatestCommits(grpcKit, req.BizId, req.AppId) + if err != nil { + logs.Errorf("get commit, err: %v, rid: %s", err, grpcKit.Rid) + return nil, err + } + configItems = pbrci.PbConfigItemState(details, fileReleased, commits, req.Status) + } else { + for _, ci := range details { + configItems = append(configItems, pbci.PbConfigItem(ci, "")) + } + } + + if err = s.setCommitSpecForCIs(grpcKit, configItems); err != nil { + logs.Errorf("set commit spec for config items failed, err: %v, rid: %s", err, grpcKit.Rid) + return nil, err + } + + existingPaths := []string{} + for _, v := range configItems { + if v.FileState != constant.FileStateDelete { + existingPaths = append(existingPaths, path.Join(v.Spec.Path, v.Spec.Name)) + } + } + + conflictNums, conflictPaths, err := s.compareTemplateConfConflicts(grpcKit, req.BizId, req.AppId, existingPaths) + if err != nil { + return nil, err + } + + for _, v := range configItems { + if v.FileState != constant.FileStateDelete { + v.IsConflict = conflictPaths[path.Join(v.Spec.Path, v.Spec.Name)] + } + } + + // search by logic + if req.SearchValue != "" { + var searcher search.Searcher + searcher, err = search.NewSearcher(req.SearchFields, req.SearchValue, search.ConfigItem) + if err != nil { + return nil, err + } + fields := searcher.SearchFields() + fieldsMap := make(map[string]bool) + for _, f := range fields { + fieldsMap[f] = true + } + fieldsMap["combinedPathName"] = true + cis := make([]*pbci.ConfigItem, 0) + for _, ci := range configItems { + combinedPathName := path.Join(ci.Spec.Path, ci.Spec.Name) + if (fieldsMap["combinedPathName"] && strings.Contains(combinedPathName, req.SearchValue)) || + (fieldsMap["memo"] && strings.Contains(ci.Spec.Memo, req.SearchValue)) || + (fieldsMap["creator"] && strings.Contains(ci.Revision.Creator, req.SearchValue)) || + (fieldsMap["reviser"] && strings.Contains(ci.Revision.Reviser, req.SearchValue)) { + cis = append(cis, ci) + } + } + configItems = cis + } + + // page by logic + var start, end uint32 = 0, uint32(len(configItems)) + if !req.All { + if req.Start < uint32(len(configItems)) { + start = req.Start + } + if req.Start+req.Limit < uint32(len(configItems)) { + end = req.Start + req.Limit + } else { + end = uint32(len(configItems)) + } + } + + // 如果有topID则按照topID排最前面 + sort.SliceStable(configItems, func(i, j int) bool { + iInTopID := tools.Contains(req.Ids, configItems[i].Id) + jInTopID := tools.Contains(req.Ids, configItems[j].Id) + if iInTopID && jInTopID { + return i < j + } + if iInTopID { + return true + } + if jInTopID { + return false + } + return i < j + }) + resp := &pbds.ListConfigItemsResp{ + Count: uint32(len(configItems)), + Details: configItems[start:end], + ConflictNumber: conflictNums, + } + return resp, nil +} + // BatchUpsertConfigItems batch upsert config items. -// nolint:funlen +// nolint:funlen,gocyclo func (s *Service) BatchUpsertConfigItems(ctx context.Context, req *pbds.BatchUpsertConfigItemsReq) ( *pbds.BatchUpsertConfigItemsResp, error) { grpcKit := kit.FromGrpcContext(ctx) @@ -146,7 +413,7 @@ func (s *Service) BatchUpsertConfigItems(ctx context.Context, req *pbds.BatchUps logs.Errorf("list editing config items failed, err: %v, rid: %s", err, grpcKit.Rid) return nil, err } - + userPrivileges, userGroupPrivileges := make([]*table.UserPrivilege, 0), make([]*table.UserGroupPrivilege, 0) file1, file2 := make([]tools.CIUniqueKey, 0), make([]tools.CIUniqueKey, 0) editingCIMap := make(map[string]*table.ConfigItem) newCIMap := make(map[string]*pbds.BatchUpsertConfigItemsReq_ConfigItem) @@ -159,6 +426,28 @@ func (s *Service) BatchUpsertConfigItems(ctx context.Context, req *pbds.BatchUps file2 = append(file2, tools.CIUniqueKey{ Name: item.GetConfigItemSpec().GetName(), Path: item.GetConfigItemSpec().GetPath(), }) + userPrivileges = append(userPrivileges, &table.UserPrivilege{ + Spec: &table.UserPrivilegeSpec{ + User: item.ConfigItemSpec.Permission.User, + PrivilegeType: table.PrivilegeTypeCustom, + }, + Attachment: &table.UserPrivilegeAttachment{ + BizID: req.BizId, + AppID: req.AppId, + Uid: item.GetConfigItemSpec().GetPermission().Uid, + }, + }) + userGroupPrivileges = append(userGroupPrivileges, &table.UserGroupPrivilege{ + Spec: &table.UserGroupPrivilegeSpec{ + UserGroup: item.ConfigItemSpec.Permission.UserGroup, + PrivilegeType: table.PrivilegeTypeCustom, + }, + Attachment: &table.UserGroupPrivilegeAttachment{ + BizID: req.BizId, + AppID: req.AppId, + Gid: item.GetConfigItemSpec().GetPermission().Gid, + }, + }) } if err = tools.DetectFilePathConflicts(grpcKit, file2, file1); err != nil { return nil, err @@ -258,6 +547,15 @@ func (s *Service) BatchUpsertConfigItems(ctx context.Context, req *pbds.BatchUps return nil, e } + // 8. 处理非模板配置权限 + if err = s.batcheUpsertPermissionGroup(grpcKit, tx, req.BizId, req.AppId, 0, userPrivileges, + userGroupPrivileges, false); err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) + } + return nil, err + } + if e := tx.Commit(); e != nil { logs.Errorf("commit transaction failed, err: %v, rid: %s", e, grpcKit.Rid) return nil, e @@ -266,1744 +564,1629 @@ func (s *Service) BatchUpsertConfigItems(ctx context.Context, req *pbds.BatchUps return &pbds.BatchUpsertConfigItemsResp{Ids: tools.MergeAndDeduplicate(createIds, updateIds)}, nil } -// 清空草稿区 -func (s *Service) clearDraftArea(kit *kit.Kit, tx *gen.QueryTx, bizID, appID uint32, - deleteConfigItemIDs []uint32, replaceAll bool) error { - if !replaceAll { - return nil - } +// 检测冲突,非模板配置之间对比、非模板配置对比套餐模板配置、空间套餐之间的对比 +// 1. 先把非配置模板 path+name 添加到 existingPaths 中 +// 2. 把所有关联的空间套餐配置都添加到 existingPaths 中 +func (s *Service) compareTemplateConfConflicts(grpcKit *kit.Kit, bizID, appID uint32, existingPaths []string) ( + uint32, map[string]bool, error) { - // 1. 删除模板绑定关系 - if err := s.dao.AppTemplateBinding().DeleteByAppIDWithTx(kit, tx, bizID, appID); err != nil { - if rErr := tx.Rollback(); rErr != nil { - logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kit.Rid) - } - return errf.Errorf(errf.DBOpFailed, - i18n.T(kit, "delete one app template binding instance by app id failed, err: %s", err)) + tmplRevisions, err := s.ListAppBoundTmplRevisions(grpcKit.RpcCtx(), &pbds.ListAppBoundTmplRevisionsReq{ + BizId: bizID, + AppId: appID, + All: true, + WithStatus: true, + }) + if err != nil { + return 0, nil, err } - // 2. 删除配置项数据 - if e := s.doBatchDeleteConfigItems(kit, tx, deleteConfigItemIDs, bizID, appID); e != nil { - if rErr := tx.Rollback(); rErr != nil { - logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kit.Rid) + for _, revision := range tmplRevisions.GetDetails() { + if revision.FileState != constant.FileStateDelete { + existingPaths = append(existingPaths, path.Join(revision.Path, revision.Name)) } - return errf.Errorf(errf.DBOpFailed, i18n.T(kit, "batch create contents failed, err: %s", e)) } - // 3. 删除变量数据 - if e := s.dao.AppTemplateVariable().DeleteWithTx(kit, tx, bizID, appID); e != nil { - if rErr := tx.Rollback(); rErr != nil { - logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kit.Rid) - } - return errf.Errorf(errf.DBOpFailed, - i18n.T(kit, "delete one app template variable failed, err: %s", e)) - } + conflictNums, conflictPaths := checkExistingPathConflict(existingPaths) - return nil + return conflictNums, conflictPaths, nil } -// 验证是否已超过服务限制 -// nolint:goconst -// currentBinding 表示当前未命名版本绑定的套餐数据 -// bindings 待提交的套餐数据 -// createConfigItemNum 待创建的配置项数量 -func (s *Service) verifyAppLimitHasBeenExceeded(kit *kit.Kit, tx *gen.QueryTx, bizID, appID uint32, - currentBinding *table.AppTemplateBinding, bindings []*pbds.BatchUpsertConfigItemsReq_TemplateBinding, - createConfigItemNum int) error { - - // 待提交的套餐数据 - betectedTemplateSetIDs := map[uint32]bool{} - templateSetIDs := []uint32{} - for _, v := range bindings { - templateSetIDs = append(templateSetIDs, v.GetTemplateBinding().GetTemplateSetId()) - betectedTemplateSetIDs[v.GetTemplateBinding().GetTemplateSetId()] = true +// setCommitSpecForCIs set commit spec for config items +func (s *Service) setCommitSpecForCIs(kt *kit.Kit, cis []*pbci.ConfigItem) error { + ids := make([]uint32, len(cis)) + for i, ci := range cis { + ids[i] = ci.Id } - // 从历史版本或者其他版本导入时关联的套餐 - templateSet, err := s.dao.TemplateSet().ListByIDs(kit, templateSetIDs) + commits, err := s.dao.Commit().BatchListLatestCommits(kt, kt.BizID, kt.AppID, ids) if err != nil { + logs.Errorf("batch list latest commits failed, err: %v, rid: %s", err, kt.Rid) return err } - historyTemplateSetNum := 0 - for _, v := range templateSet { - historyTemplateSetNum += len(v.Spec.TemplateIDs) - } - - // 当前未命名版本的关联套餐数,但不包含历史或其他历史版本套餐数 - currentTemplateSetNum := 0 - if currentBinding != nil { - for _, binding := range currentBinding.Spec.Bindings { - if !betectedTemplateSetIDs[binding.TemplateSetID] { - currentTemplateSetNum += len(binding.TemplateRevisions) - } - } + commitMap := make(map[uint32]*table.CommitSpec, len(commits)) + for _, c := range commits { + commitMap[c.Attachment.ConfigItemID] = c.Spec } - // 获取当前未命名版本配置项数量 - configItemCount, err := s.dao.ConfigItem().GetConfigItemCountWithTx(kit, tx, bizID, appID) - if err != nil { - return err + for _, ci := range cis { + ci.CommitSpec = pbcommit.PbCommitSpec(commitMap[ci.Id]) } - appConfigCnt := getAppConfigCnt(bizID) + return nil +} - app, err := s.dao.App().GetByID(kit, appID) - if err != nil { - return errf.Errorf(errf.AppNotExists, i18n.T(kit, "app %d not found", appID)) - } +// ListConfigItemCount list config items count. +func (s *Service) ListConfigItemCount(ctx context.Context, req *pbds.ListConfigItemCountReq) ( + *pbds.ListConfigItemCountResp, error) { - // 只有文件类型的才能绑定套餐 - if app.Spec.ConfigType != table.File { - return errf.Errorf(errf.DBOpFailed, i18n.T(kit, "app %s is not file type", app.Spec.Name)) - } + grpcKit := kit.FromGrpcContext(ctx) - // 非模板配置数+当前套餐配置数+历史套餐配置数+待创建的配置项数 - if int(configItemCount)+currentTemplateSetNum+historyTemplateSetNum+createConfigItemNum > appConfigCnt { - return errf.New(errf.InvalidParameter, - i18n.T(kit, "the total number of app %s config items(including template and non-template)"+ - "exceeded the limit %d", app.Spec.Name, appConfigCnt)) + appIDMap := make(map[uint32]uint32, len(req.AppId)) + for _, id := range req.AppId { + appIDMap[id] = id } - return nil -} - -// 检测变量 -func (s *Service) checkConfigItemVars(kt *kit.Kit, tx *gen.QueryTx, bizID, appID uint32, - variables []*pbtv.TemplateVariableSpec) (*table.AppTemplateVariable, error) { - - // 获取当前未命名版本中的变量 - currentVariable, err := s.dao.AppTemplateVariable().GetTemplateVariableWithTx(kt, tx, bizID, appID) - if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + count, err := s.dao.ConfigItem().GetCount(grpcKit, req.BizId, req.AppId) + if err != nil { + logs.Errorf("list config items failed, err: %v, rid: %s", err, grpcKit.Rid) return nil, err } - if len(variables) == 0 { - return currentVariable, nil + var appIds = []uint32{} + for _, detail := range count { + delete(appIDMap, detail.AppId) } - - res := &table.AppTemplateVariable{} - - currentTemplateVars := make(map[string]*table.TemplateVariableSpec, 0) - - if currentVariable != nil { - res.ID = currentVariable.ID - res.Attachment = currentVariable.Attachment - res.Revision = &table.Revision{ - Creator: currentVariable.Revision.Creator, - Reviser: kt.User, - CreatedAt: currentVariable.Revision.CreatedAt, - UpdatedAt: time.Now().UTC(), - } - - for _, v := range currentVariable.Spec.Variables { - currentTemplateVars[v.Name] = v - } - } else { - res.Attachment = &table.AppTemplateVariableAttachment{ - BizID: bizID, - AppID: appID, + if len(appIDMap) > 0 { + for _, appID := range appIDMap { + appIds = append(appIds, appID) } - res.Revision = &table.Revision{ - Creator: kt.User, - Reviser: kt.User, - CreatedAt: time.Now().UTC(), - UpdatedAt: time.Now().UTC(), + kvDetails, err := s.dao.Kv().GetCount(grpcKit, req.BizId, appIds) + if err != nil { + logs.Errorf("list kv failed, err: %v, rid: %s", err, grpcKit.Rid) + return nil, err } + count = append(count, kvDetails...) } - // 待提交的变量 - newVars := make(map[string]*table.TemplateVariableSpec, 0) - for _, vars := range variables { - newVars[vars.Name] = &table.TemplateVariableSpec{ - Name: vars.Name, - Type: table.VariableType(vars.Type), - DefaultVal: vars.DefaultVal, - Memo: vars.Memo, - } + resp := &pbds.ListConfigItemCountResp{ + Details: pbci.PbConfigItemCounts(count, req.AppId), } - mergeTemplateVars := mergeTemplateVariables(currentTemplateVars, newVars) + return resp, nil +} - variableMap := make([]*table.TemplateVariableSpec, 0) - for _, item := range mergeTemplateVars { - variableMap = append(variableMap, item) +// ListConfigItemByTuple 按照多个字段in查询 +func (s *Service) ListConfigItemByTuple(ctx context.Context, req *pbds.ListConfigItemByTupleReq) ( + *pbds.ListConfigItemByTupleResp, error) { + grpcKit := kit.FromGrpcContext(ctx) + data := [][]interface{}{} + var bizID, appID uint32 + for _, item := range req.Items { + data = append(data, []interface{}{item.BizId, item.AppId, item.Name, item.Path}) + bizID = item.BizId + appID = item.AppId + } + tuple, err := s.dao.ConfigItem().ListConfigItemByTuple(grpcKit, data) + if err != nil { + logs.Errorf("list config item by tuple failed, err: %v, rid: %s", err, grpcKit.Rid) + return nil, err } - res.Spec = &table.AppTemplateVariableSpec{ - Variables: variableMap, + tuple, err = s.listConfigItemPerms(grpcKit, bizID, appID, tuple) + if err != nil { + logs.Errorf("list config item by tuple failed, err: %v, rid: %s", err, grpcKit.Rid) + return nil, err } - return res, nil + configItems := []*pbci.ConfigItem{} + for _, item := range tuple { + configItems = append(configItems, pbci.PbConfigItem(item, "")) + } + resp := &pbds.ListConfigItemByTupleResp{ConfigItems: configItems} + return resp, nil } -func mergeTemplateVariables(map1, map2 map[string]*table.TemplateVariableSpec) map[string]*table.TemplateVariableSpec { - // 创建一个新map存储合并结果 - mergedMap := make(map[string]*table.TemplateVariableSpec) +// UnDeleteConfigItem 配置项未命名版本恢复 +// nolint:funlen +func (s *Service) UnDeleteConfigItem(ctx context.Context, req *pbds.UnDeleteConfigItemReq) (*pbbase.EmptyResp, error) { - // 先将第一组数据拷贝到合并结果中 - for k, v := range map1 { - mergedMap[k] = v + grpcKit := kit.FromGrpcContext(ctx) + // 判断是否需要恢复 + configItem, err := s.dao.ConfigItem().Get(grpcKit, req.GetId(), req.Attachment.BizId) + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + logs.Errorf("get config item failed, err: %v, rid: %s", err, grpcKit.Rid) + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(grpcKit, "get config item failed, err: %v", err)) } - - // 再将第二组数据拷贝到合并结果中,如果键相同则覆盖 - for k, v := range map2 { - mergedMap[k] = v + if configItem != nil && configItem.ID != 0 { + return nil, errors.New(i18n.T(grpcKit, "the data has not been deleted")) } - return mergedMap -} + // 获取该服务最新发布的 release_id + release, err := s.dao.Release().GetReleaseLately(grpcKit, req.Attachment.BizId, req.Attachment.AppId) + if err != nil { + return nil, errf.Errorf(errf.DBOpFailed, + i18n.T(grpcKit, "get the latest released version failed, err: %v", err)) + } -// 将当前模板与历史模板集合并 -func (s *Service) mergeCurrentWithHistoryTemplateSet(kit *kit.Kit, bizID, appID uint32, - currentBinding *table.AppTemplateBinding, bindings []*pbds.BatchUpsertConfigItemsReq_TemplateBinding) ( - *table.AppTemplateBinding, error) { + // 通过最新发布 release_id + config_item_id 获取需要恢复的数据 + releaseCi, err := s.dao.ReleasedCI().Get(grpcKit, req.Attachment.BizId, + release.Attachment.AppID, release.ID, req.GetId()) + if err != nil { + return nil, errf.Errorf(errf.DBOpFailed, + i18n.T(grpcKit, "get the published config failed, err: %v", err)) + } - if len(bindings) == 0 { - return currentBinding, nil + ci, err := s.dao.ConfigItem().GetByUniqueKey(grpcKit, req.Attachment.BizId, req.Attachment.AppId, + releaseCi.ConfigItemSpec.Name, releaseCi.ConfigItemSpec.Path) + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(grpcKit, "get config item failed, err: %v", err)) } - appTemplateBinding := &table.AppTemplateBinding{ - Spec: &table.AppTemplateBindingSpec{}, + newFiles := []tools.CIUniqueKey{{ + Name: releaseCi.ConfigItemSpec.Name, + Path: releaseCi.ConfigItemSpec.Path, + }} + + // 检测配置项路径冲突以及是否超出服务限制 + if err = s.checkRestorePrerequisites(grpcKit, req.Attachment.BizId, req.Attachment.AppId, + newFiles, ci); err != nil { + return nil, err } - // 当前未命名版本存在套餐关系时更新否则新增 - if currentBinding != nil { - appTemplateBinding.ID = currentBinding.ID - appTemplateBinding.Attachment = currentBinding.Attachment - appTemplateBinding.Revision = &table.Revision{ - Creator: currentBinding.Revision.Creator, - Reviser: kit.User, - CreatedAt: currentBinding.Revision.CreatedAt, - UpdatedAt: time.Now().UTC(), + commitID, contentID := []uint32{}, []uint32{} + tx := s.dao.GenQuery().Begin() + // 判断是不是新增的数据 + if ci != nil && ci.ID != 0 { + rci, errCi := s.dao.ReleasedCI().Get(grpcKit, req.Attachment.BizId, + release.Attachment.AppID, release.ID, ci.ID) + if errCi != nil && !errors.Is(errCi, gorm.ErrRecordNotFound) { + return nil, errf.Errorf(errf.DBOpFailed, + i18n.T(grpcKit, "get the published config failed, err: %v", errCi)) } - } else { - appTemplateBinding.Attachment = &table.AppTemplateBindingAttachment{ - BizID: bizID, - AppID: appID, + if rci != nil && rci.ID != 0 { + return nil, errors.New(i18n.T(grpcKit, + `recovery failed. A file with the same path exists and is not in a new state`)) } - appTemplateBinding.Revision = &table.Revision{ - Creator: kit.User, - Reviser: kit.User, - CreatedAt: time.Now().UTC(), - UpdatedAt: time.Now().UTC(), + if err = s.dao.ConfigItem().DeleteWithTx(grpcKit, tx, ci); err != nil { + logs.Errorf("recover config item failed, err: %v, rid: %s", err, grpcKit.Rid) + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) + } + return nil, errf.Errorf(errf.DBOpFailed, + i18n.T(grpcKit, "recover config item failed, err: %v", err)) } } - // 格式化待提交的数据把 pb 结构转换成 table 结构, 方便做对比 - templateSpaceIDs, templateSetIDs := []uint32{}, []uint32{} - templateRevisions := make(table.TemplateBindings, 0) - for _, v := range bindings { - templateSpaceIDs = append(templateSpaceIDs, v.GetTemplateSpaceId()) - templateSetIDs = append(templateSetIDs, v.GetTemplateBinding().GetTemplateSetId()) - revision := make([]*table.TemplateRevisionBinding, 0) - for _, binding := range v.GetTemplateBinding().GetTemplateRevisions() { - revision = append(revision, &table.TemplateRevisionBinding{ - TemplateID: binding.GetTemplateId(), - TemplateRevisionID: binding.GetTemplateRevisionId(), - IsLatest: binding.GetIsLatest(), - }) - } - templateRevisions = append(templateRevisions, &table.TemplateBinding{ - TemplateSetID: v.GetTemplateBinding().GetTemplateSetId(), - TemplateRevisions: revision, - }) + // 恢复到最新发布的版本,删除修改的数据 + // 获取大于最新发布版本的记录 + rc, err := s.dao.Commit().ListCommitsByGtID(grpcKit, releaseCi.CommitID, req.Attachment.BizId, + req.Attachment.AppId, req.Id) + if err != nil { + return nil, errf.Errorf(errf.DBOpFailed, + i18n.T(grpcKit, "get records greater than the latest released version failed, err: %v", err)) } - // 未命名版本有关联套餐时处理当前套餐和待提交套餐的数据,否则只处理待提交数据 - if currentBinding != nil { - templateSetIDsExist := make(map[uint32]bool) - for _, v := range currentBinding.Spec.Bindings { - templateSetIDsExist[v.TemplateSetID] = true - } - currentTemplateSetID := []uint32{} - for _, v := range templateRevisions { - if !templateSetIDsExist[v.TemplateSetID] { - currentTemplateSetID = append(currentTemplateSetID, v.TemplateSetID) - } - } - unBindingTemplateSets, err := s.getUnBindingTemplateSets(kit, currentTemplateSetID) - if err != nil { - return nil, err - } - currentBinding.Spec.Bindings = append(currentBinding.Spec.Bindings, unBindingTemplateSets...) - appTemplateBinding.Spec = mergeTemplateSets(templateRevisions, currentBinding.Spec.Bindings) - appTemplateBinding.Spec.TemplateSpaceIDs = tools.MergeAndDeduplicate(tools.RemoveDuplicates(templateSpaceIDs), - tools.RemoveDuplicates(currentBinding.Spec.TemplateSpaceIDs)) - } else { - // 获取待提交套餐下的当前套餐数据 - // 待提交版本以前关联的套餐数据可能被更新过 - unBindingTemplateSets, err := s.getUnBindingTemplateSets(kit, templateSetIDs) - if err != nil { - return nil, err - } - appTemplateBinding.Spec = mergeTemplateSets(templateRevisions, unBindingTemplateSets) - appTemplateBinding.Spec.TemplateSpaceIDs = tools.RemoveDuplicates(templateSpaceIDs) + for _, v := range rc { + commitID = append(commitID, v.ID) + contentID = append(contentID, v.Spec.ContentID) } - return appTemplateBinding, nil -} - -// 获取未关联的模板套餐 -func (s *Service) getUnBindingTemplateSets(kt *kit.Kit, templateSetID []uint32) (table.TemplateBindings, error) { - // 查询未关联的套餐 - templateSet, err := s.dao.TemplateSet().ListByIDs(kt, templateSetID) - if err != nil { - return nil, err + if err = s.dao.Commit().BatchDeleteWithTx(grpcKit, tx, commitID); err != nil { + logs.Errorf("undo commit failed, err: %v, rid: %s", err, grpcKit.Rid) + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) + } + return nil, errf.Errorf(errf.DBOpFailed, + i18n.T(grpcKit, "recover config item failed, err: %v", err)) } - unBindingTemplateSets := make(table.TemplateBindings, 0) - for _, v := range templateSet { - // 获取每个套餐下所有配置的最新版本 - tmplRevisions, err := s.dao.TemplateRevision(). - ListLatestRevisionsGroupByTemplateIds(kt, tools.RemoveDuplicates(v.Spec.TemplateIDs)) - if err != nil { - return nil, err + if err = s.dao.Content().BatchDeleteWithTx(grpcKit, tx, contentID); err != nil { + logs.Errorf("undo content failed, err: %v, rid: %s", err, grpcKit.Rid) + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) } - revisions := make([]*table.TemplateRevisionBinding, 0) - for _, revision := range tmplRevisions { - revisions = append(revisions, &table.TemplateRevisionBinding{ - TemplateID: revision.Attachment.TemplateID, - TemplateRevisionID: revision.ID, - IsLatest: true, - }) + return nil, errf.Errorf(errf.DBOpFailed, + i18n.T(grpcKit, "recover config item failed, err: %v", err)) + } + + data := &table.ConfigItem{ + ID: releaseCi.ConfigItemID, + Spec: releaseCi.ConfigItemSpec, + Attachment: releaseCi.Attachment, + Revision: releaseCi.Revision, + } + if err = s.dao.ConfigItem().RecoverConfigItem(grpcKit, tx, data); err != nil { + logs.Errorf("recover config item failed, err: %v, rid: %s", err, grpcKit.Rid) + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) } - unBindingTemplateSets = append(unBindingTemplateSets, &table.TemplateBinding{ - TemplateSetID: v.ID, - TemplateRevisions: revisions, - }) + return nil, errf.Errorf(errf.DBOpFailed, + i18n.T(grpcKit, "recover config item failed, err: %v", err)) + } + if e := tx.Commit(); e != nil { + logs.Errorf("commit transaction failed, err: %v, rid: %s", e, grpcKit.Rid) + return nil, errf.Errorf(errf.DBOpFailed, + i18n.T(grpcKit, "recover config item failed, err: %v", e)) } - return unBindingTemplateSets, nil + return new(pbbase.EmptyResp), nil } -// 把原有的模板空间、套餐、模板文件合并现有的数据 -func mergeTemplateSets(a, b table.TemplateBindings) *table.AppTemplateBindingSpec { - mergedMap := make(map[uint32]*table.TemplateBinding) +// 检测恢复配置文件的前置条件 +func (s *Service) checkRestorePrerequisites(kit *kit.Kit, bizID, appID uint32, newFiles []tools.CIUniqueKey, + ci *table.ConfigItem) error { - // 把所有的 a 元素添加到 mergedMap - for _, aItem := range a { - mergedMap[aItem.TemplateSetID] = aItem + // 获取指定服务下的配置项 + configs, err := s.dao.ConfigItem().ListAllByAppID(kit, appID, bizID) + if err != nil { + return err + } + existingFiles := []tools.CIUniqueKey{} + for _, v := range configs { + existingFiles = append(existingFiles, tools.CIUniqueKey{ + Name: v.Spec.Name, + Path: v.Spec.Path, + }) } - // 把元素 b 合并添加到 mergedMap - for _, bItem := range b { - if existing, exists := mergedMap[bItem.TemplateSetID]; exists { - // 合并 template revisions - revisionMap := make(map[uint32]*table.TemplateRevisionBinding) - for _, rev := range existing.TemplateRevisions { - revisionMap[rev.TemplateID] = rev - } - for _, rev := range bItem.TemplateRevisions { - if existingRev, exists := revisionMap[rev.TemplateID]; exists { - // 如果template_id存在,请检查is_latest - if existingRev.IsLatest { - if rev.IsLatest { - // 如果两者都是最新的,请比较TemplateRevisionID - if existingRev.TemplateRevisionID < rev.TemplateRevisionID { - revisionMap[rev.TemplateID] = rev - } - } - } else { - // 如果existingRev不是最新版本,请保持existingRev - revisionMap[rev.TemplateID] = existingRev - } - } else { - revisionMap[rev.TemplateID] = rev - } - } - // 将 map 转换回切片 - mergedRevisions := []*table.TemplateRevisionBinding{} - for _, rev := range revisionMap { - mergedRevisions = append(mergedRevisions, rev) - } - existing.TemplateRevisions = mergedRevisions - mergedMap[bItem.TemplateSetID] = existing - } else { - mergedMap[bItem.TemplateSetID] = bItem - } + // 检测文件冲突 + // /a 和 /a/1.txt这类的冲突 + if err = tools.DetectFilePathConflicts(kit, newFiles, existingFiles); err != nil { + return err } - // 将 map 转换回切片 - merged := []*table.TemplateBinding{} - for _, item := range mergedMap { - merged = append(merged, item) + // 获取当前服务配置项数+模板数量 + configItemCount, err := s.GetTemplateAndNonTemplateCICount(kit.RpcCtx(), + &pbds.GetTemplateAndNonTemplateCICountReq{ + BizId: bizID, + AppId: appID, + }) + if err != nil { + return err } - templateSetIDs, templateIDs, templateRevisionIDs, latestTemplateIDs := - []uint32{}, []uint32{}, []uint32{}, []uint32{} - for _, v := range merged { - templateSetIDs = append(templateSetIDs, v.TemplateSetID) - for _, d := range v.TemplateRevisions { - templateIDs = append(templateIDs, d.TemplateID) - templateRevisionIDs = append(templateRevisionIDs, d.TemplateRevisionID) - if d.IsLatest { - latestTemplateIDs = append(latestTemplateIDs, d.TemplateID) - } - } + totalConfigItemCount := int(configItemCount.GetConfigItemCount()) + + int(configItemCount.GetTemplateConfigItemCount()) + 1 + + if ci != nil && ci.ID != 0 { + totalConfigItemCount-- } - return &table.AppTemplateBindingSpec{ - TemplateSetIDs: tools.RemoveDuplicates(templateSetIDs), - TemplateIDs: tools.RemoveDuplicates(templateIDs), - TemplateRevisionIDs: tools.RemoveDuplicates(templateRevisionIDs), - LatestTemplateIDs: tools.RemoveDuplicates(latestTemplateIDs), - Bindings: merged, + appConfigCnt := getAppConfigCnt(bizID) + + if totalConfigItemCount > appConfigCnt { + return errf.New(errf.InvalidParameter, + i18n.T(kit, `the total number of config items(including template and non-template) + exceeded the limit %d`, appConfigCnt)) } + + return nil } -func (s *Service) checkConfigItems(kt *kit.Kit, req *pbds.BatchUpsertConfigItemsReq, - editingCIMap map[string]*table.ConfigItem, newCIMap map[string]*pbds.BatchUpsertConfigItemsReq_ConfigItem) ( - toCreate []*pbds.BatchUpsertConfigItemsReq_ConfigItem, toUpdateSpec []*pbds.BatchUpsertConfigItemsReq_ConfigItem, - toUpdateContent []*pbds.BatchUpsertConfigItemsReq_ConfigItem, toDelete []uint32, err error) { - // 1. list all config items' latest commit. - ids := make([]uint32, 0, len(editingCIMap)) - for _, ci := range editingCIMap { - ids = append(ids, ci.ID) - } - commits, err := s.dao.Commit().BatchListLatestCommits(kt, req.BizId, req.AppId, ids) - commitMap := make(map[uint32]*table.Commit) - for _, commit := range commits { - commitMap[commit.Attachment.ConfigItemID] = commit - } +// UndoConfigItem 撤消配置项 +func (s *Service) UndoConfigItem(ctx context.Context, req *pbds.UndoConfigItemReq) (*pbbase.EmptyResp, error) { + grpcKit := kit.FromGrpcContext(ctx) + + // 判断是否存在 + _, err := s.dao.ConfigItem().Get(grpcKit, req.GetId(), req.Attachment.BizId) if err != nil { - logs.Errorf("list latest commits failed, err: %v, rid: %s", err, kt.Rid) - return nil, nil, nil, nil, err - } - for _, item := range req.Items { - if editing, exists := editingCIMap[path.Join(item.ConfigItemSpec.Path, item.ConfigItemSpec.Name)]; exists { - // 2.1 if config item already exists, need compare and update. - specDiff, contentDiff, cErr := s.compareConfigItem(kt, item, editing, commitMap) - if cErr != nil { - logs.Errorf("compare config item failed, err: %v, rid: %s", err, kt.Rid) - return nil, nil, nil, nil, cErr - } - if specDiff || contentDiff { - toUpdateSpec = append(toUpdateSpec, item) - } - if contentDiff { - toUpdateContent = append(toUpdateContent, item) - } - } else { - // 2.2 if not exists, create new config item. - toCreate = append(toCreate, item) - } - } - // 3. delete config items not in batch upsert request. - for _, ci := range editingCIMap { - if newCIMap[path.Join(ci.Spec.Path, ci.Spec.Name)] == nil { - // if config item not in batch upsert request, delete it. - toDelete = append(toDelete, ci.ID) + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil, errors.New("data does not exist") } } - return //nolint -} -func (s *Service) doBatchCreateConfigItems(kt *kit.Kit, tx *gen.QueryTx, - toCreate []*pbds.BatchUpsertConfigItemsReq_ConfigItem, now time.Time, bizID, appID uint32) ([]uint32, error) { - createIds := []uint32{} - toCreateConfigItems := []*table.ConfigItem{} - for _, item := range toCreate { - ci := &table.ConfigItem{ - Spec: item.ConfigItemSpec.ConfigItemSpec(), - Attachment: item.ConfigItemAttachment.ConfigItemAttachment(), - Revision: &table.Revision{ - Creator: kt.User, - Reviser: kt.User, - CreatedAt: now, - UpdatedAt: now, - }, - } - toCreateConfigItems = append(toCreateConfigItems, ci) - } - if err := s.dao.ConfigItem().BatchCreateWithTx(kt, tx, bizID, appID, toCreateConfigItems); err != nil { - logs.Errorf("batch create config items failed, err: %v, rid: %s", err, kt.Rid) + // 获取该服务最新发布的 release_id + release, err := s.dao.Release().GetReleaseLately(grpcKit, req.Attachment.BizId, req.Attachment.AppId) + if err != nil { return nil, err } - toCreateContent := []*table.Content{} - for i, item := range toCreate { - createIds = append(createIds, toCreateConfigItems[i].ID) - toCreateContent = append(toCreateContent, &table.Content{ - Spec: item.GetContentSpec().ContentSpec(), - Attachment: &table.ContentAttachment{ - BizID: bizID, - AppID: appID, - ConfigItemID: toCreateConfigItems[i].ID, - }, - Revision: &table.CreatedRevision{ - Creator: kt.User, - }, - }) - } - if err := s.dao.Content().BatchCreateWithTx(kt, tx, toCreateContent); err != nil { - logs.Errorf("batch create config items failed, err: %v, rid: %s", err, kt.Rid) + // 通过最新发布 release_id + config_item_id 获取需要恢复的数据 + releaseCi, err := s.dao.ReleasedCI().Get(grpcKit, req.Attachment.BizId, + release.Attachment.AppID, release.ID, req.GetId()) + if err != nil { return nil, err } - toCreateCommit := []*table.Commit{} - for i := range toCreateContent { - toCreateCommit = append(toCreateCommit, &table.Commit{ - Spec: &table.CommitSpec{ - ContentID: toCreateContent[i].ID, - Content: toCreateContent[i].Spec, - }, - Attachment: &table.CommitAttachment{ - BizID: bizID, - AppID: appID, - ConfigItemID: toCreateConfigItems[i].ID, - }, - Revision: &table.CreatedRevision{ - Creator: kt.User, - }, - }) - } - if err := s.dao.Commit().BatchCreateWithTx(kt, tx, toCreateCommit); err != nil { - logs.Errorf("batch create commits failed, err: %v, rid: %s", err, kt.Rid) + + rc, err := s.dao.Commit().ListCommitsByGtID(grpcKit, releaseCi.CommitID, req.Attachment.BizId, + req.Attachment.AppId, req.Id) + if err != nil { return nil, err } - return createIds, nil -} + commitID := []uint32{} + contentID := []uint32{} + for _, v := range rc { + commitID = append(commitID, v.ID) + contentID = append(contentID, v.Spec.ContentID) + } -func (s *Service) doBatchUpdateConfigItemSpec(kt *kit.Kit, tx *gen.QueryTx, - toUpdate []*pbds.BatchUpsertConfigItemsReq_ConfigItem, now time.Time, _, _ uint32, - ciMap map[string]*table.ConfigItem) ([]uint32, error) { - updateIds := []uint32{} - configItems := []*table.ConfigItem{} - for _, item := range toUpdate { - ci := &table.ConfigItem{ - ID: ciMap[path.Join(item.ConfigItemSpec.Path, item.ConfigItemSpec.Name)].ID, - Spec: item.ConfigItemSpec.ConfigItemSpec(), - Attachment: item.ConfigItemAttachment.ConfigItemAttachment(), - Revision: &table.Revision{ - Creator: ciMap[path.Join(item.ConfigItemSpec.Path, item.ConfigItemSpec.Name)].Revision.Creator, - Reviser: kt.User, - CreatedAt: ciMap[path.Join(item.ConfigItemSpec.Path, item.ConfigItemSpec.Name)].Revision.CreatedAt, - UpdatedAt: now, - }, + tx := s.dao.GenQuery().Begin() + if err = s.dao.Commit().BatchDeleteWithTx(grpcKit, tx, commitID); err != nil { + logs.Errorf("undo commit failed, err: %v, rid: %s", err, grpcKit.Rid) + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) } - configItems = append(configItems, ci) - } - if err := s.dao.ConfigItem().BatchUpdateWithTx(kt, tx, configItems); err != nil { - logs.Errorf("batch update config items failed, err: %v, rid: %s", err, kt.Rid) return nil, err } - // 返回编辑ID - for _, item := range configItems { - updateIds = append(updateIds, item.ID) - } - return updateIds, nil -} - -func (s *Service) doBatchUpdateConfigItemContent(kt *kit.Kit, tx *gen.QueryTx, - toUpdate []*pbds.BatchUpsertConfigItemsReq_ConfigItem, now time.Time, - bizID, appID uint32, ciMap map[string]*table.ConfigItem) error { - toCreateContents := []*table.Content{} - for _, item := range toUpdate { - content := &table.Content{ - Spec: item.GetContentSpec().ContentSpec(), - Attachment: &table.ContentAttachment{ - BizID: bizID, - AppID: appID, - ConfigItemID: ciMap[path.Join(item.ConfigItemSpec.Path, item.ConfigItemSpec.Name)].ID, - }, - Revision: &table.CreatedRevision{ - Creator: kt.User, - CreatedAt: now, - }, + if err = s.dao.Content().BatchDeleteWithTx(grpcKit, tx, contentID); err != nil { + logs.Errorf("undo content failed, err: %v, rid: %s", err, grpcKit.Rid) + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) } - toCreateContents = append(toCreateContents, content) + return nil, err } - if err := s.dao.Content().BatchCreateWithTx(kt, tx, toCreateContents); err != nil { - logs.Errorf("batch create contents failed, err: %v, rid: %s", err, kt.Rid) - return err + data := &table.ConfigItem{ + ID: releaseCi.ConfigItemID, + Spec: releaseCi.ConfigItemSpec, + Attachment: releaseCi.Attachment, + Revision: releaseCi.Revision, } - toCreateCommits := []*table.Commit{} - for i, item := range toUpdate { - commit := &table.Commit{ - Spec: &table.CommitSpec{ - ContentID: toCreateContents[i].ID, - Content: item.ContentSpec.ContentSpec(), - }, - Attachment: &table.CommitAttachment{ - BizID: bizID, - AppID: appID, - ConfigItemID: ciMap[path.Join(item.ConfigItemSpec.Path, item.ConfigItemSpec.Name)].ID, - }, - Revision: &table.CreatedRevision{ - Creator: kt.User, - CreatedAt: now, - }, + + if err = s.dao.ConfigItem().UpdateWithTx(grpcKit, tx, data); err != nil { + logs.Errorf("recover config item failed, err: %v, rid: %s", err, grpcKit.Rid) + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) } - toCreateCommits = append(toCreateCommits, commit) + return nil, err } - if err := s.dao.Commit().BatchCreateWithTx(kt, tx, toCreateCommits); err != nil { - logs.Errorf("batch create commits failed, err: %v, rid: %s", err, kt.Rid) - return err + if e := tx.Commit(); e != nil { + logs.Errorf("commit transaction failed, err: %v, rid: %s", e, grpcKit.Rid) + return nil, e } - return nil -} -func (s *Service) doBatchDeleteConfigItems(kt *kit.Kit, tx *gen.QueryTx, toDelete []uint32, bizID, appID uint32) error { - if err := s.dao.ConfigItem().BatchDeleteWithTx(kt, tx, toDelete, bizID, appID); err != nil { - logs.Errorf("batch create contents failed, err: %v, rid: %s", err, kt.Rid) - return err - } - return nil + return new(pbbase.EmptyResp), nil } -// nolint: unused -func (s *Service) createNewConfigItem(kt *kit.Kit, tx *gen.QueryTx, bizID, appID uint32, - now time.Time, item *pbds.BatchUpsertConfigItemsReq_ConfigItem) error { - // 1. create config item. - ci := &table.ConfigItem{ - Spec: item.ConfigItemSpec.ConfigItemSpec(), - Attachment: item.ConfigItemAttachment.ConfigItemAttachment(), - Revision: &table.Revision{ - Creator: kt.User, - Reviser: kt.User, - CreatedAt: now, - UpdatedAt: now, - }, +// CompareConfigItemConflicts compare config item version conflicts +func (s *Service) CompareConfigItemConflicts(ctx context.Context, req *pbds.CompareConfigItemConflictsReq) ( + *pbds.CompareConfigItemConflictsResp, error) { + grpcKit := kit.FromGrpcContext(ctx) + + nonTemplateConfig, err := s.handleNonTemplateConfig(grpcKit, req.GetBizId(), req.GetAppId(), + req.GetOtherAppId(), req.GetReleaseId()) + if err != nil { + return nil, err } - ciID, err := s.dao.ConfigItem().CreateWithTx(kt, tx, ci) + + templateConfig, err := s.handleTemplateConfig(grpcKit, req.GetBizId(), req.GetAppId(), + req.GetOtherAppId(), req.GetReleaseId()) if err != nil { - logs.Errorf("create config item failed, err: %v, rid: %s", err, kt.Rid) - return err + return nil, err } - // 2. create content. - content := &table.Content{ - Spec: item.ContentSpec.ContentSpec(), - Attachment: &table.ContentAttachment{ - BizID: bizID, - AppID: appID, - ConfigItemID: ciID, - }, - Revision: &table.CreatedRevision{ - Creator: kt.User, - }, - } - contentID, err := s.dao.Content().CreateWithTx(kt, tx, content) - if err != nil { - logs.Errorf("create content failed, err: %v, rid: %s", err, kt.Rid) - return err - } - // 3. create commit. - commit := &table.Commit{ - Spec: &table.CommitSpec{ - ContentID: contentID, - Content: content.Spec, - }, - Attachment: &table.CommitAttachment{ - BizID: bizID, - AppID: appID, - ConfigItemID: ciID, - }, - Revision: &table.CreatedRevision{ - Creator: kt.User, - }, - } - _, err = s.dao.Commit().CreateWithTx(kt, tx, commit) - if err != nil { - logs.Errorf("create commit failed, err: %v, rid: %s", err, kt.Rid) - return err - } - return nil -} -// compareConfigItem compare config item -// return specDiff, contentDiff, error -func (s *Service) compareConfigItem(_ *kit.Kit, new *pbds.BatchUpsertConfigItemsReq_ConfigItem, - editing *table.ConfigItem, commitMap map[uint32]*table.Commit) (specDiff bool, contentDiff bool, err error) { - // 1. compare config item spec. - if !reflect.DeepEqual(new.ConfigItemSpec.ConfigItemSpec(), editing.Spec) { - specDiff = true - } - // 2. compare content. - // 2.1 get latest commit. - commit, exists := commitMap[editing.ID] - if !exists { - // ! config item should have at least one commit. - logs.Errorf("[SHOULD-NOT-HAPPEN] latest commit for config item %d not found", editing.ID) - return false, false, fmt.Errorf("[SHOULD-NOT-HAPPEN] latest commit for config item %d not found", editing.ID) - } - // 2.2 compare content spec. - if new.ContentSpec.Signature != commit.Spec.Content.Signature { - contentDiff = true - } - return //nolint + return &pbds.CompareConfigItemConflictsResp{ + NonTemplateConfigs: nonTemplateConfig, + TemplateConfigs: templateConfig, + }, nil } -// UpdateConfigItem update config item. -func (s *Service) UpdateConfigItem(ctx context.Context, req *pbds.UpdateConfigItemReq) ( - *pbbase.EmptyResp, error) { +// 处理非模板配置 +func (s *Service) handleNonTemplateConfig(grpcKit *kit.Kit, bizID, appID, otherAppId, releaseId uint32) ( + []*pbds.CompareConfigItemConflictsResp_NonTemplateConfig, error) { - grpcKit := kit.FromGrpcContext(ctx) + nonTemplateConfigs := make([]*pbds.CompareConfigItemConflictsResp_NonTemplateConfig, 0) - ci := &table.ConfigItem{ - ID: req.Id, - Spec: req.Spec.ConfigItemSpec(), - Attachment: req.Attachment.ConfigItemAttachment(), - Revision: &table.Revision{ - Reviser: grpcKit.User, - }, - } - if err := s.dao.ConfigItem().Update(grpcKit, ci); err != nil { - logs.Errorf("update config item failed, err: %v, rid: %s", err, grpcKit.Rid) + // 获取未命名版本配置文件 + ci, err := s.dao.ConfigItem().ListAllByAppID(grpcKit, appID, bizID) + if err != nil { + logs.Errorf("list config items failed, err: %v, rid: %s", err, grpcKit.Rid) return nil, err } - return new(pbbase.EmptyResp), nil -} - -// DeleteConfigItem delete config item. -func (s *Service) DeleteConfigItem(ctx context.Context, req *pbds.DeleteConfigItemReq) (*pbbase.EmptyResp, error) { - grpcKit := kit.FromGrpcContext(ctx) - - ci := &table.ConfigItem{ - ID: req.Id, - Attachment: req.Attachment.ConfigItemAttachment(), + conflicts := make(map[string]bool) + for _, v := range ci { + conflicts[path.Join(v.Spec.Path, v.Spec.Name)] = true } - if err := s.dao.ConfigItem().Delete(grpcKit, ci); err != nil { - logs.Errorf("delete config item failed, err: %v, rid: %s", err, grpcKit.Rid) + + // 获取已发布版本的配置文件 + rci, count, err := s.dao.ReleasedCI().List(grpcKit, bizID, otherAppId, releaseId, nil, &types.BasePage{ + All: true, + }, "") + if err != nil { + logs.Errorf("list released config items failed, err: %v, rid: %s", err, grpcKit.Rid) return nil, err } - return new(pbbase.EmptyResp), nil -} + if count == 0 { + return nonTemplateConfigs, nil + } -// GetConfigItem get config item detail -func (s *Service) GetConfigItem(ctx context.Context, req *pbds.GetConfigItemReq) (*pbci.ConfigItem, error) { + configItems := make(map[string]bool) + for _, v := range rci { + configItems[path.Join(v.ConfigItemSpec.Path, v.ConfigItemSpec.Name)] = true + } - grpcKit := kit.FromGrpcContext(ctx) - configItem, err := s.dao.ConfigItem().Get(grpcKit, req.Id, req.BizId) + vars, err := s.getReleasedNonTemplateConfigVariables(grpcKit, bizID, otherAppId, releaseId) if err != nil { - logs.Errorf("get config item failed, err: %v, rid: %s", err, grpcKit.Rid) return nil, err } - resp := pbci.PbConfigItem(configItem, "") - return resp, nil + + for _, v := range rci { + nonTemplateConfigs = append(nonTemplateConfigs, &pbds.CompareConfigItemConflictsResp_NonTemplateConfig{ + Id: v.ConfigItemID, + ConfigItemSpec: &pbci.ConfigItemSpec{ + Name: v.ConfigItemSpec.Name, + Path: v.ConfigItemSpec.Path, + FileType: string(v.ConfigItemSpec.FileType), + FileMode: string(v.ConfigItemSpec.FileMode), + Memo: v.ConfigItemSpec.Memo, + Permission: &pbci.FilePermission{ + User: v.ConfigItemSpec.Permission.User, + UserGroup: v.ConfigItemSpec.Permission.UserGroup, + Privilege: v.ConfigItemSpec.Permission.Privilege, + Uid: v.ConfigItemSpec.Permission.Uid, + Gid: v.ConfigItemSpec.Permission.Gid, + }, + }, + Variables: vars[path.Join(v.ConfigItemSpec.Path, v.ConfigItemSpec.Name)], + IsExist: conflicts[path.Join(v.ConfigItemSpec.Path, v.ConfigItemSpec.Name)], + Signature: v.CommitSpec.Content.OriginSignature, + ByteSize: v.CommitSpec.Content.OriginByteSize, + Md5: v.CommitSpec.Content.Md5, + }) + } + + return nonTemplateConfigs, nil } -// ListConfigItems list config items by query condition. -// nolint:funlen,gocyclo -func (s *Service) ListConfigItems(ctx context.Context, req *pbds.ListConfigItemsReq) (*pbds.ListConfigItemsResp, - error) { - grpcKit := kit.FromGrpcContext(ctx) +// 处理模板套餐配置 +// nolint:funlen +func (s *Service) handleTemplateConfig(grpcKit *kit.Kit, bizID, appID, otherAppId, releaseId uint32) ( + []*pbds.CompareConfigItemConflictsResp_TemplateConfig, error) { + templateConfigs := make([]*pbds.CompareConfigItemConflictsResp_TemplateConfig, 0) - // validate the page params - opt := &types.BasePage{Start: req.Start, Limit: uint(req.Limit), All: req.All} - if err := opt.Validate(types.DefaultPageOption); err != nil { + // 获取已发布版本的空间、套餐、配置文件 + rp, count, err := s.dao.ReleasedAppTemplate().List(grpcKit, bizID, otherAppId, releaseId, nil, &types.BasePage{ + All: true, + }, "") + if err != nil { + logs.Errorf("list released app template revisions failed, err: %v, rid: %s", err, grpcKit.Rid) return nil, err } - // search all editing config items - details, err := s.dao.ConfigItem().ListAllByAppID(grpcKit, req.AppId, req.BizId) + if count == 0 { + return templateConfigs, nil + } + + noNamespacePackage, err := s.getConfigTemplateSet(grpcKit, bizID, appID) if err != nil { - logs.Errorf("list editing config items failed, err: %v, rid: %s", err, grpcKit.Rid) return nil, err } - configItems := make([]*pbci.ConfigItem, 0) - // if WithStatus is true, the config items includes the deleted ones and file state, else without these data - if req.WithStatus { - var fileReleased []*table.ReleasedConfigItem - fileReleased, err = s.dao.ReleasedCI().GetReleasedLately(grpcKit, req.BizId, req.AppId) - if err != nil { - logs.Errorf("get released failed, err: %v, rid: %s", err, grpcKit.Rid) - return nil, err - } - var commits []*table.Commit - commits, err = s.dao.Commit().ListAppLatestCommits(grpcKit, req.BizId, req.AppId) - if err != nil { - logs.Errorf("get commit, err: %v, rid: %s", err, grpcKit.Rid) - return nil, err + releaseTemplateSpaceIds, releaseTemplateSetIds, releaseTemplateIds := []uint32{}, []uint32{}, []uint32{} + releaseTemplateSpaceIdsExist, releaseTemplateSetIdsExist := make(map[uint32]bool), make(map[uint32]bool) + tmplSetMap := make(map[uint32][]*table.ReleasedAppTemplate) + for _, v := range rp { + tmplSetMap[v.Spec.TemplateSetID] = append(tmplSetMap[v.Spec.TemplateSetID], v) + if !releaseTemplateSpaceIdsExist[v.Spec.TemplateSpaceID] { + releaseTemplateSpaceIds = append(releaseTemplateSpaceIds, v.Spec.TemplateSpaceID) + releaseTemplateSpaceIdsExist[v.Spec.TemplateSpaceID] = true } - configItems = pbrci.PbConfigItemState(details, fileReleased, commits, req.Status) - } else { - for _, ci := range details { - configItems = append(configItems, pbci.PbConfigItem(ci, "")) + if !releaseTemplateSetIdsExist[v.Spec.TemplateSetID] { + releaseTemplateSetIds = append(releaseTemplateSetIds, v.Spec.TemplateSetID) + releaseTemplateSetIdsExist[v.Spec.TemplateSetID] = true } + releaseTemplateIds = append(releaseTemplateIds, v.Spec.TemplateID) } - if err = s.setCommitSpecForCIs(grpcKit, configItems); err != nil { - logs.Errorf("set commit spec for config items failed, err: %v, rid: %s", err, grpcKit.Rid) + templateSpaceExist, templateSetExist, currentSpaceSetTemplateExist, templateExist, templateSetTemplateExist, err := + s.getTemplateSpaceSetfile(grpcKit, releaseTemplateSpaceIds, releaseTemplateSetIds, releaseTemplateIds) + if err != nil { return nil, err } - existingPaths := []string{} - for _, v := range configItems { - if v.FileState != constant.FileStateDelete { - existingPaths = append(existingPaths, path.Join(v.Spec.Path, v.Spec.Name)) + nonExistentTemplateIds := make(map[uint32]bool) + for _, v := range releaseTemplateIds { + if !templateExist[v] { + nonExistentTemplateIds[v] = true } } - conflictNums, conflictPaths, err := s.compareTemplateConfConflicts(grpcKit, req.BizId, req.AppId, existingPaths) + vars, err := s.getReleasedTemplateConfigVariables(grpcKit, bizID, otherAppId, releaseId, nonExistentTemplateIds) if err != nil { return nil, err } - for _, v := range configItems { - if v.FileState != constant.FileStateDelete { - v.IsConflict = conflictPaths[path.Join(v.Spec.Path, v.Spec.Name)] + for id, revisions := range tmplSetMap { + group := &pbds.CompareConfigItemConflictsResp_TemplateConfig{ + TemplateSpaceId: revisions[0].Spec.TemplateSpaceID, + TemplateSpaceName: revisions[0].Spec.TemplateSpaceName, + TemplateSetId: id, + TemplateSetName: revisions[0].Spec.TemplateSetName, + TemplateSpaceExist: templateSpaceExist[revisions[0].Spec.TemplateSpaceID], + TemplateSetExist: templateSetExist[id], + IsExist: noNamespacePackage[fmt.Sprintf("%d-%d", revisions[0].Spec.TemplateSpaceID, id)], + TemplateSetIsEmpty: templateSetTemplateExist[id], + } + for _, r := range revisions { + // 历史套餐模板文件被删除了 + if !templateExist[r.Spec.TemplateID] { + continue + } + // 历史套餐模板不在现有套餐模板中, 被移走了 + if !currentSpaceSetTemplateExist[fmt.Sprintf("%d-%d-%d", r.Spec.TemplateSpaceID, + r.Spec.TemplateSetID, r.Spec.TemplateID)] { + continue + } + group.TemplateRevisions = append(group.TemplateRevisions, + &pbds.CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail{ + TemplateId: r.Spec.TemplateID, + TemplateRevisionId: r.Spec.TemplateRevisionID, + IsLatest: r.Spec.IsLatest, + Variables: vars[path.Join(r.Spec.Path, r.Spec.Name)], + }) } + templateConfigs = append(templateConfigs, group) } - // search by logic - if req.SearchValue != "" { - var searcher search.Searcher - searcher, err = search.NewSearcher(req.SearchFields, req.SearchValue, search.ConfigItem) - if err != nil { - return nil, err - } - fields := searcher.SearchFields() - fieldsMap := make(map[string]bool) - for _, f := range fields { - fieldsMap[f] = true - } - fieldsMap["combinedPathName"] = true - cis := make([]*pbci.ConfigItem, 0) - for _, ci := range configItems { - combinedPathName := path.Join(ci.Spec.Path, ci.Spec.Name) - if (fieldsMap["combinedPathName"] && strings.Contains(combinedPathName, req.SearchValue)) || - (fieldsMap["memo"] && strings.Contains(ci.Spec.Memo, req.SearchValue)) || - (fieldsMap["creator"] && strings.Contains(ci.Revision.Creator, req.SearchValue)) || - (fieldsMap["reviser"] && strings.Contains(ci.Revision.Reviser, req.SearchValue)) { - cis = append(cis, ci) - } - } - configItems = cis + // 返回模板版本权限 + templateConfigs, err = s.handleTplRevPerms(grpcKit, bizID, templateConfigs) + if err != nil { + return nil, err } - // page by logic - var start, end uint32 = 0, uint32(len(configItems)) - if !req.All { - if req.Start < uint32(len(configItems)) { - start = req.Start - } - if req.Start+req.Limit < uint32(len(configItems)) { - end = req.Start + req.Limit - } else { - end = uint32(len(configItems)) - } - } + return templateConfigs, nil +} - // 如果有topID则按照topID排最前面 - sort.SliceStable(configItems, func(i, j int) bool { - iInTopID := tools.Contains(req.Ids, configItems[i].Id) - jInTopID := tools.Contains(req.Ids, configItems[j].Id) - if iInTopID && jInTopID { - return i < j - } - if iInTopID { - return true - } - if jInTopID { - return false +// 获取模板版本权限 +func (s *Service) handleTplRevPerms(kit *kit.Kit, bizID uint32, + templateRevisions []*pbds.CompareConfigItemConflictsResp_TemplateConfig) ( + []*pbds.CompareConfigItemConflictsResp_TemplateConfig, error) { + + templateRevisionID := []uint32{} + // 查询模板版本 + for _, revision := range templateRevisions { + for _, v := range revision.TemplateRevisions { + templateRevisionID = append(templateRevisionID, v.TemplateRevisionId) } - return i < j - }) - resp := &pbds.ListConfigItemsResp{ - Count: uint32(len(configItems)), - Details: configItems[start:end], - ConflictNumber: conflictNums, } - return resp, nil -} - -// 检测冲突,非模板配置之间对比、非模板配置对比套餐模板配置、空间套餐之间的对比 -// 1. 先把非配置模板 path+name 添加到 existingPaths 中 -// 2. 把所有关联的空间套餐配置都添加到 existingPaths 中 -func (s *Service) compareTemplateConfConflicts(grpcKit *kit.Kit, bizID, appID uint32, existingPaths []string) ( - uint32, map[string]bool, error) { + templateRevisionID = tools.RemoveDuplicates(templateRevisionID) + revisions, err := s.dao.TemplateRevision().ListByIDs(kit, templateRevisionID) + if err != nil { + return nil, err + } - tmplRevisions, err := s.ListAppBoundTmplRevisions(grpcKit.RpcCtx(), &pbds.ListAppBoundTmplRevisionsReq{ - BizId: bizID, - AppId: appID, - All: true, - WithStatus: true, - }) + revisions, err = s.listTplRevPerms(kit, bizID, revisions) if err != nil { - return 0, nil, err + return nil, err } - for _, revision := range tmplRevisions.GetDetails() { - if revision.FileState != constant.FileStateDelete { - existingPaths = append(existingPaths, path.Join(revision.Path, revision.Name)) + perms := map[uint32]*pbci.FilePermission{} + for _, v := range revisions { + perms[v.ID] = &pbci.FilePermission{ + User: v.Spec.Permission.User, + UserGroup: v.Spec.Permission.UserGroup, + Uid: v.Spec.Permission.Uid, + Gid: v.Spec.Permission.Gid, } } - conflictNums, conflictPaths := checkExistingPathConflict(existingPaths) + for _, revision := range templateRevisions { + for _, v := range revision.TemplateRevisions { + v.Permission = perms[v.TemplateRevisionId] + } + } - return conflictNums, conflictPaths, nil + return templateRevisions, nil } -// setCommitSpecForCIs set commit spec for config items -func (s *Service) setCommitSpecForCIs(kt *kit.Kit, cis []*pbci.ConfigItem) error { - ids := make([]uint32, len(cis)) - for i, ci := range cis { - ids[i] = ci.Id +// 返回空间、套餐、模板配置数据 +func (s *Service) getTemplateSpaceSetfile(grpcKit *kit.Kit, templateSpaceIds, templateSetIds, templateIds []uint32) ( + map[uint32]bool, map[uint32]bool, map[string]bool, map[uint32]bool, map[uint32]bool, error) { + // 获取空间 + templateSpace, err := s.dao.TemplateSpace().ListByIDs(grpcKit, templateSpaceIds) + if err != nil { + return nil, nil, nil, nil, nil, err + } + templateSpaceExist := make(map[uint32]bool) + for _, v := range templateSpace { + templateSpaceExist[v.ID] = true } - commits, err := s.dao.Commit().BatchListLatestCommits(kt, kt.BizID, kt.AppID, ids) + // 获取套餐 + templateSet, err := s.dao.TemplateSet().ListByIDs(grpcKit, templateSetIds) if err != nil { - logs.Errorf("batch list latest commits failed, err: %v, rid: %s", err, kt.Rid) - return err + return nil, nil, nil, nil, nil, err } - commitMap := make(map[uint32]*table.CommitSpec, len(commits)) - for _, c := range commits { - commitMap[c.Attachment.ConfigItemID] = c.Spec + templateSetExist := make(map[uint32]bool) + currentSpaceSetTemplateExist := make(map[string]bool) + templateSetTemplateExist := make(map[uint32]bool) + for _, v := range templateSet { + templateSetTemplateExist[v.ID] = false + if len(v.Spec.TemplateIDs) == 0 { + templateSetTemplateExist[v.ID] = true + } + templateSetExist[v.ID] = true + for _, tid := range v.Spec.TemplateIDs { + currentSpaceSetTemplateExist[fmt.Sprintf("%d-%d-%d", v.Attachment.TemplateSpaceID, v.ID, tid)] = true + } } - for _, ci := range cis { - ci.CommitSpec = pbcommit.PbCommitSpec(commitMap[ci.Id]) + // 获取模板 + template, err := s.dao.Template().ListByIDs(grpcKit, templateIds) + if err != nil { + return nil, nil, nil, nil, nil, err + } + templateExist := make(map[uint32]bool) + for _, v := range template { + templateExist[v.ID] = true } - return nil + return templateSpaceExist, templateSetExist, currentSpaceSetTemplateExist, templateExist, templateSetTemplateExist, nil } -// ListConfigItemCount list config items count. -func (s *Service) ListConfigItemCount(ctx context.Context, req *pbds.ListConfigItemCountReq) ( - *pbds.ListConfigItemCountResp, error) { +// 获取未命名版本的模板套餐 +func (s *Service) getConfigTemplateSet(grpcKit *kit.Kit, bizID, appID uint32) ( + map[string]bool, error) { - grpcKit := kit.FromGrpcContext(ctx) + noNamespacePackage := make(map[string]bool) - appIDMap := make(map[uint32]uint32, len(req.AppId)) - for _, id := range req.AppId { - appIDMap[id] = id + tmplSetInfo, count, err := s.dao.AppTemplateBinding().List(grpcKit, bizID, appID, &types.BasePage{All: true}) + if err != nil { + return nil, err } - count, err := s.dao.ConfigItem().GetCount(grpcKit, req.BizId, req.AppId) + if count == 0 { + return noNamespacePackage, nil + } + + tmplSets, err := s.dao.TemplateSet().ListByIDs(grpcKit, tmplSetInfo[0].Spec.TemplateSetIDs) if err != nil { - logs.Errorf("list config items failed, err: %v, rid: %s", err, grpcKit.Rid) + logs.Errorf("list template sets failed, err: %v, rid: %s", err, grpcKit.Rid) return nil, err } - var appIds = []uint32{} - for _, detail := range count { - delete(appIDMap, detail.AppId) + tmplSetMap := make(map[uint32]*table.TemplateSet) + tmplSpaceIDs := make([]uint32, 0) + for _, ts := range tmplSets { + tmplSetMap[ts.ID] = ts + tmplSpaceIDs = append(tmplSpaceIDs, ts.Attachment.TemplateSpaceID) } - if len(appIDMap) > 0 { - for _, appID := range appIDMap { - appIds = append(appIds, appID) - } - kvDetails, err := s.dao.Kv().GetCount(grpcKit, req.BizId, appIds) - if err != nil { - logs.Errorf("list kv failed, err: %v, rid: %s", err, grpcKit.Rid) - return nil, err + tmplSpaceIDs = tools.RemoveDuplicates(tmplSpaceIDs) + + // template space details + tmplSpaces, err := s.dao.TemplateSpace().ListByIDs(grpcKit, tmplSpaceIDs) + if err != nil { + logs.Errorf("list template spaces failed, err: %v, rid: %s", err, grpcKit.Rid) + return nil, err + } + tmplSpaceMap := make(map[uint32]*table.TemplateSpace) + for _, ts := range tmplSpaces { + tmplSpaceMap[ts.ID] = ts + } + + details := make([]*pbtset.TemplateSetBriefInfo, len(tmplSets)) + for idx, t := range tmplSets { + details[idx] = &pbtset.TemplateSetBriefInfo{ + TemplateSpaceId: t.Attachment.TemplateSpaceID, + TemplateSpaceName: tmplSpaceMap[t.Attachment.TemplateSpaceID].Spec.Name, + TemplateSetId: t.ID, + TemplateSetName: tmplSetMap[t.ID].Spec.Name, } - count = append(count, kvDetails...) } - resp := &pbds.ListConfigItemCountResp{ - Details: pbci.PbConfigItemCounts(count, req.AppId), + for _, tmplSet := range details { + noNamespacePackage[fmt.Sprintf("%d-%d", tmplSet.TemplateSpaceId, tmplSet.TemplateSetId)] = true } - return resp, nil + return noNamespacePackage, nil } -// ListConfigItemByTuple 按照多个字段in查询 -func (s *Service) ListConfigItemByTuple(ctx context.Context, req *pbds.ListConfigItemByTupleReq) ( - *pbds.ListConfigItemByTupleResp, error) { - grpcKit := kit.FromGrpcContext(ctx) - data := [][]interface{}{} - for _, item := range req.Items { - data = append(data, []interface{}{item.BizId, item.AppId, item.Name, item.Path}) - } - tuple, err := s.dao.ConfigItem().ListConfigItemByTuple(grpcKit, data) +// 获取已发布的模板配置变量 +func (s *Service) getReleasedTemplateConfigVariables(grpcKit *kit.Kit, bizID, otherAppId, releaseId uint32, + templateIds map[uint32]bool) (map[string][]*pbtv.TemplateVariableSpec, error) { + varsMap := make(map[string][]*pbtv.TemplateVariableSpec, 0) + + releasedTmpls, count, err := s.dao.ReleasedAppTemplate().List(grpcKit, bizID, otherAppId, releaseId, + nil, &types.BasePage{All: true}, "") if err != nil { - logs.Errorf("list config item by tuple failed, err: %v, rid: %s", err, grpcKit.Rid) + logs.Errorf("list released app templates failed, err: %v, rid: %s", err, grpcKit.Rid) return nil, err } - configItems := []*pbci.ConfigItem{} - for _, item := range tuple { - configItems = append(configItems, pbci.PbConfigItem(item, "")) - } - resp := &pbds.ListConfigItemByTupleResp{ConfigItems: configItems} - return resp, nil -} - -// UnDeleteConfigItem 配置项未命名版本恢复 -// nolint:funlen -func (s *Service) UnDeleteConfigItem(ctx context.Context, req *pbds.UnDeleteConfigItemReq) (*pbbase.EmptyResp, error) { - grpcKit := kit.FromGrpcContext(ctx) - // 判断是否需要恢复 - configItem, err := s.dao.ConfigItem().Get(grpcKit, req.GetId(), req.Attachment.BizId) - if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { - logs.Errorf("get config item failed, err: %v, rid: %s", err, grpcKit.Rid) - return nil, errf.Errorf(errf.DBOpFailed, i18n.T(grpcKit, "get config item failed, err: %v", err)) - } - if configItem != nil && configItem.ID != 0 { - return nil, errors.New(i18n.T(grpcKit, "the data has not been deleted")) + if count == 0 { + return varsMap, nil } - // 获取该服务最新发布的 release_id - release, err := s.dao.Release().GetReleaseLately(grpcKit, req.Attachment.BizId, req.Attachment.AppId) - if err != nil { - return nil, errf.Errorf(errf.DBOpFailed, - i18n.T(grpcKit, "get the latest released version failed, err: %v", err)) + tmplRevisions := getTmplRevisionsFromReleased(releasedTmpls) + tmplRevisions = filterSizeForTmplRevisions(tmplRevisions) + + newTmplRevisions := make([]*table.TemplateRevision, 0) + for _, v := range tmplRevisions { + if templateIds[v.Attachment.TemplateID] { + continue + } + newTmplRevisions = append(newTmplRevisions, v) } - // 通过最新发布 release_id + config_item_id 获取需要恢复的数据 - releaseCi, err := s.dao.ReleasedCI().Get(grpcKit, req.Attachment.BizId, - release.Attachment.AppID, release.ID, req.GetId()) + refs, err := s.getVariableReferences(grpcKit, newTmplRevisions, nil) if err != nil { - return nil, errf.Errorf(errf.DBOpFailed, - i18n.T(grpcKit, "get the published config failed, err: %v", err)) + logs.Errorf("get variable references failed, err: %v, rid: %s", err, grpcKit.Rid) + return nil, err } - ci, err := s.dao.ConfigItem().GetByUniqueKey(grpcKit, req.Attachment.BizId, req.Attachment.AppId, - releaseCi.ConfigItemSpec.Name, releaseCi.ConfigItemSpec.Path) - if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { - return nil, errf.Errorf(errf.DBOpFailed, i18n.T(grpcKit, "get config item failed, err: %v", err)) + resfMap := make(map[string][]string, 0) + for _, v := range refs { + for _, ref := range v.GetReferences() { + filePath := path.Join(ref.Path, ref.Name) + resfMap[filePath] = append(resfMap[filePath], v.GetVariableName()) + } } - newFiles := []tools.CIUniqueKey{{ - Name: releaseCi.ConfigItemSpec.Name, - Path: releaseCi.ConfigItemSpec.Path, - }} - - // 检测配置项路径冲突以及是否超出服务限制 - if err = s.checkRestorePrerequisites(grpcKit, req.Attachment.BizId, req.Attachment.AppId, - newFiles, ci); err != nil { + vars, err := s.dao.ReleasedAppTemplateVariable().ListVariables(grpcKit, bizID, otherAppId, releaseId) + if err != nil { + logs.Errorf("list released app template variables failed, err: %v, rid: %s", err, grpcKit.Rid) return nil, err } - commitID, contentID := []uint32{}, []uint32{} - tx := s.dao.GenQuery().Begin() - // 判断是不是新增的数据 - if ci != nil && ci.ID != 0 { - rci, errCi := s.dao.ReleasedCI().Get(grpcKit, req.Attachment.BizId, - release.Attachment.AppID, release.ID, ci.ID) - if errCi != nil && !errors.Is(errCi, gorm.ErrRecordNotFound) { - return nil, errf.Errorf(errf.DBOpFailed, - i18n.T(grpcKit, "get the published config failed, err: %v", errCi)) - } - if rci != nil && rci.ID != 0 { - return nil, errors.New(i18n.T(grpcKit, - `recovery failed. A file with the same path exists and is not in a new state`)) - } - if err = s.dao.ConfigItem().DeleteWithTx(grpcKit, tx, ci); err != nil { - logs.Errorf("recover config item failed, err: %v, rid: %s", err, grpcKit.Rid) - if rErr := tx.Rollback(); rErr != nil { - logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) + for _, v := range vars { + for key, name := range resfMap { + for _, n := range name { + if v.Name == n { + varsMap[key] = append(varsMap[key], &pbtv.TemplateVariableSpec{ + Name: n, Type: string(v.Type), DefaultVal: v.DefaultVal, Memo: v.Memo, + }) + } } - return nil, errf.Errorf(errf.DBOpFailed, - i18n.T(grpcKit, "recover config item failed, err: %v", err)) } } - // 恢复到最新发布的版本,删除修改的数据 - // 获取大于最新发布版本的记录 - rc, err := s.dao.Commit().ListCommitsByGtID(grpcKit, releaseCi.CommitID, req.Attachment.BizId, - req.Attachment.AppId, req.Id) + return varsMap, nil +} + +// 获取已发布的非配置配置变量 +func (s *Service) getReleasedNonTemplateConfigVariables(grpcKit *kit.Kit, bizID, otherAppId, releaseId uint32) ( + map[string][]*pbtv.TemplateVariableSpec, error) { + varsMap := make(map[string][]*pbtv.TemplateVariableSpec, 0) + + releasedCIs, _, err := s.dao.ReleasedCI().List(grpcKit, bizID, otherAppId, releaseId, nil, + &types.BasePage{All: true}, "") if err != nil { - return nil, errf.Errorf(errf.DBOpFailed, - i18n.T(grpcKit, "get records greater than the latest released version failed, err: %v", err)) + logs.Errorf("list released config items failed, err: %v, rid: %s", err, grpcKit.Rid) + return nil, err } + cis := getPbConfigItemsFromReleased(releasedCIs) + cis = filterSizeForConfigItems(cis) - for _, v := range rc { - commitID = append(commitID, v.ID) - contentID = append(contentID, v.Spec.ContentID) + refs, err := s.getVariableReferences(grpcKit, nil, cis) + if err != nil { + logs.Errorf("get variable references failed, err: %v, rid: %s", err, grpcKit.Rid) + return nil, err } - if err = s.dao.Commit().BatchDeleteWithTx(grpcKit, tx, commitID); err != nil { - logs.Errorf("undo commit failed, err: %v, rid: %s", err, grpcKit.Rid) - if rErr := tx.Rollback(); rErr != nil { - logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) + resfMap := make(map[string][]string, 0) + for _, v := range refs { + for _, ref := range v.GetReferences() { + filePath := path.Join(ref.Path, ref.Name) + resfMap[filePath] = append(resfMap[filePath], v.GetVariableName()) } - return nil, errf.Errorf(errf.DBOpFailed, - i18n.T(grpcKit, "recover config item failed, err: %v", err)) } - if err = s.dao.Content().BatchDeleteWithTx(grpcKit, tx, contentID); err != nil { - logs.Errorf("undo content failed, err: %v, rid: %s", err, grpcKit.Rid) - if rErr := tx.Rollback(); rErr != nil { - logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) - } - return nil, errf.Errorf(errf.DBOpFailed, - i18n.T(grpcKit, "recover config item failed, err: %v", err)) + vars, err := s.dao.ReleasedAppTemplateVariable().ListVariables(grpcKit, bizID, otherAppId, releaseId) + if err != nil { + logs.Errorf("list released app template variables failed, err: %v, rid: %s", err, grpcKit.Rid) + return nil, err } - data := &table.ConfigItem{ - ID: releaseCi.ConfigItemID, - Spec: releaseCi.ConfigItemSpec, - Attachment: releaseCi.Attachment, - Revision: releaseCi.Revision, - } - if err = s.dao.ConfigItem().RecoverConfigItem(grpcKit, tx, data); err != nil { - logs.Errorf("recover config item failed, err: %v, rid: %s", err, grpcKit.Rid) - if rErr := tx.Rollback(); rErr != nil { - logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) + for _, v := range vars { + for key, name := range resfMap { + for _, n := range name { + if v.Name == n { + varsMap[key] = append(varsMap[key], &pbtv.TemplateVariableSpec{ + Name: n, Type: string(v.Type), DefaultVal: v.DefaultVal, Memo: v.Memo, + }) + } + } } - return nil, errf.Errorf(errf.DBOpFailed, - i18n.T(grpcKit, "recover config item failed, err: %v", err)) - } - if e := tx.Commit(); e != nil { - logs.Errorf("commit transaction failed, err: %v, rid: %s", e, grpcKit.Rid) - return nil, errf.Errorf(errf.DBOpFailed, - i18n.T(grpcKit, "recover config item failed, err: %v", e)) } - return new(pbbase.EmptyResp), nil + return varsMap, nil } -// 检测恢复配置文件的前置条件 -func (s *Service) checkRestorePrerequisites(kit *kit.Kit, bizID, appID uint32, newFiles []tools.CIUniqueKey, - ci *table.ConfigItem) error { - - // 获取指定服务下的配置项 - configs, err := s.dao.ConfigItem().ListAllByAppID(kit, appID, bizID) - if err != nil { - return err - } - existingFiles := []tools.CIUniqueKey{} - for _, v := range configs { - existingFiles = append(existingFiles, tools.CIUniqueKey{ - Name: v.Spec.Name, - Path: v.Spec.Path, - }) - } - - // 检测文件冲突 - // /a 和 /a/1.txt这类的冲突 - if err = tools.DetectFilePathConflicts(kit, newFiles, existingFiles); err != nil { - return err - } +// GetTemplateAndNonTemplateCICount 获取模板和非模板配置项数量 +func (s *Service) GetTemplateAndNonTemplateCICount(ctx context.Context, req *pbds.GetTemplateAndNonTemplateCICountReq) ( + *pbds.GetTemplateAndNonTemplateCICountResp, error) { + kt := kit.FromGrpcContext(ctx) - // 获取当前服务配置项数+模板数量 - configItemCount, err := s.GetTemplateAndNonTemplateCICount(kit.RpcCtx(), - &pbds.GetTemplateAndNonTemplateCICountReq{ - BizId: bizID, - AppId: appID, - }) + count, err := s.dao.ConfigItem().GetConfigItemCount(kt, req.BizId, req.AppId) if err != nil { - return err + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kt, "obtain the number of configuration items")) } - totalConfigItemCount := int(configItemCount.GetConfigItemCount()) + - int(configItemCount.GetTemplateConfigItemCount()) + 1 - - if ci != nil && ci.ID != 0 { - totalConfigItemCount-- + binding, err := s.dao.AppTemplateBinding().GetAppTemplateBindingByAppID(kt, req.BizId, req.AppId) + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kt, + "get template binding relationships through business and service IDs failed, err: %s", err)) } - - appConfigCnt := getAppConfigCnt(bizID) - - if totalConfigItemCount > appConfigCnt { - return errf.New(errf.InvalidParameter, - i18n.T(kit, `the total number of config items(including template and non-template) - exceeded the limit %d`, appConfigCnt)) + templateConfigItemCount := 0 + if binding != nil { + for _, binding := range binding.Spec.Bindings { + templateConfigItemCount += len(binding.TemplateRevisions) + } } - return nil + return &pbds.GetTemplateAndNonTemplateCICountResp{ + ConfigItemCount: uint64(count), + TemplateConfigItemCount: uint64(templateConfigItemCount), + }, nil } -// UndoConfigItem 撤消配置项 -func (s *Service) UndoConfigItem(ctx context.Context, req *pbds.UndoConfigItemReq) (*pbbase.EmptyResp, error) { - grpcKit := kit.FromGrpcContext(ctx) +// RemoveAppBoundTmplSet 移除服务绑定的套餐 +func (s *Service) RemoveAppBoundTmplSet(ctx context.Context, req *pbds.RemoveAppBoundTmplSetReq) ( + *pbbase.EmptyResp, error) { - // 判断是否存在 - _, err := s.dao.ConfigItem().Get(grpcKit, req.GetId(), req.Attachment.BizId) + kit := kit.FromGrpcContext(ctx) + + // 1. 查询该服务下的引用套餐 + binding, err := s.dao.AppTemplateBinding().GetAppTemplateBindingByAppID(kit, req.BizId, req.AppId) if err != nil { - if errors.Is(err, gorm.ErrRecordNotFound) { - return nil, errors.New("data does not exist") - } + return nil, errf.Errorf(errf.DBOpFailed, + i18n.T(kit, "get reference template set under this app failed, err: %s", err)) } - // 获取该服务最新发布的 release_id - release, err := s.dao.Release().GetReleaseLately(grpcKit, req.Attachment.BizId, req.Attachment.AppId) - if err != nil { - return nil, err + specBindings := make([]*table.TemplateBinding, 0, len(binding.Spec.Bindings)) + for _, spec := range binding.Spec.Bindings { + revisions := make([]*table.TemplateRevisionBinding, 0) + // 只需移除指定的模板套餐 + if spec.TemplateSetID == req.TemplateSetId { + continue + } + revisions = append(revisions, spec.TemplateRevisions...) + specBinding := &table.TemplateBinding{ + TemplateSetID: spec.TemplateSetID, + TemplateRevisions: revisions, + } + specBindings = append(specBindings, specBinding) } - // 通过最新发布 release_id + config_item_id 获取需要恢复的数据 - releaseCi, err := s.dao.ReleasedCI().Get(grpcKit, req.Attachment.BizId, - release.Attachment.AppID, release.ID, req.GetId()) - if err != nil { - return nil, err + templateIDs, latestTemplateIDs, templateRevisionIDs, templateSetIDs := + []uint32{}, []uint32{}, []uint32{}, []uint32{} + for _, specBinding := range specBindings { + for _, v := range specBinding.TemplateRevisions { + templateIDs = append(templateIDs, v.TemplateID) + if v.IsLatest { + latestTemplateIDs = append(latestTemplateIDs, v.TemplateID) + } + templateRevisionIDs = append(templateRevisionIDs, v.TemplateRevisionID) + } + templateSetIDs = append(templateSetIDs, specBinding.TemplateSetID) } - rc, err := s.dao.Commit().ListCommitsByGtID(grpcKit, releaseCi.CommitID, req.Attachment.BizId, - req.Attachment.AppId, req.Id) + // 根据套餐id获取空间id + templateSets, err := s.dao.TemplateSet().ListByIDs(kit, templateSetIDs) if err != nil { - return nil, err + return nil, errf.Errorf(errf.DBOpFailed, + i18n.T(kit, "list template sets by template set ids failed, err: %s", err)) } - commitID := []uint32{} - contentID := []uint32{} - for _, v := range rc { - commitID = append(commitID, v.ID) - contentID = append(contentID, v.Spec.ContentID) + templateSpaceIDs := []uint32{} + for _, v := range templateSets { + templateSpaceIDs = append(templateSpaceIDs, v.Attachment.TemplateSpaceID) } - tx := s.dao.GenQuery().Begin() - if err = s.dao.Commit().BatchDeleteWithTx(grpcKit, tx, commitID); err != nil { - logs.Errorf("undo commit failed, err: %v, rid: %s", err, grpcKit.Rid) - if rErr := tx.Rollback(); rErr != nil { - logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) - } - return nil, err + appTemplateBinding := &table.AppTemplateBinding{ + ID: binding.ID, + Spec: &table.AppTemplateBindingSpec{ + TemplateSpaceIDs: templateSpaceIDs, + TemplateSetIDs: templateSetIDs, + TemplateIDs: tools.RemoveDuplicates(templateIDs), + TemplateRevisionIDs: tools.RemoveDuplicates(templateRevisionIDs), + LatestTemplateIDs: tools.RemoveDuplicates(latestTemplateIDs), + Bindings: specBindings, + }, + Attachment: binding.Attachment, + Revision: &table.Revision{ + Creator: binding.Revision.Creator, + Reviser: kit.User, + CreatedAt: binding.Revision.CreatedAt, + UpdatedAt: time.Now().UTC(), + }, } - if err = s.dao.Content().BatchDeleteWithTx(grpcKit, tx, contentID); err != nil { - logs.Errorf("undo content failed, err: %v, rid: %s", err, grpcKit.Rid) - if rErr := tx.Rollback(); rErr != nil { - logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) - } - return nil, err + if err = s.dao.AppTemplateBinding().Update(kit, appTemplateBinding); err != nil { + return nil, errf.Errorf(errf.DBOpFailed, + i18n.T(kit, "remove the template set bound to the app failed, err: %s", err)) } - data := &table.ConfigItem{ - ID: releaseCi.ConfigItemID, - Spec: releaseCi.ConfigItemSpec, - Attachment: releaseCi.Attachment, - Revision: releaseCi.Revision, - } + return &pbbase.EmptyResp{}, nil +} - if err = s.dao.ConfigItem().UpdateWithTx(grpcKit, tx, data); err != nil { - logs.Errorf("recover config item failed, err: %v, rid: %s", err, grpcKit.Rid) - if rErr := tx.Rollback(); rErr != nil { - logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, grpcKit.Rid) +// checkExistingPathConflict Check existing path collections for conflicts. +func checkExistingPathConflict(existing []string) (uint32, map[string]bool) { + conflictPaths := make(map[string]bool, len(existing)) + var conflictNums uint32 + conflictMap := make(map[string]bool, 0) + // 遍历每一个路径 + for i := 0; i < len(existing); i++ { + // 检查当前路径与后续路径之间是否存在冲突 + for j := i + 1; j < len(existing); j++ { + if strings.HasPrefix(existing[j]+"/", existing[i]+"/") || strings.HasPrefix(existing[i]+"/", existing[j]+"/") { + // 相等也算冲突 + if len(existing[j]) == len(existing[i]) { + conflictNums++ + } else if len(existing[j]) < len(existing[i]) { + conflictMap[existing[j]] = true + } else { + conflictMap[existing[i]] = true + } + + conflictPaths[existing[i]] = true + conflictPaths[existing[j]] = true + } } - return nil, err - } - if e := tx.Commit(); e != nil { - logs.Errorf("commit transaction failed, err: %v, rid: %s", e, grpcKit.Rid) - return nil, e } - return new(pbbase.EmptyResp), nil + return uint32(len(conflictMap)) + conflictNums, conflictPaths } -// CompareConfigItemConflicts compare config item version conflicts -func (s *Service) CompareConfigItemConflicts(ctx context.Context, req *pbds.CompareConfigItemConflictsReq) ( - *pbds.CompareConfigItemConflictsResp, error) { - grpcKit := kit.FromGrpcContext(ctx) +// 清空草稿区 +func (s *Service) clearDraftArea(kit *kit.Kit, tx *gen.QueryTx, bizID, appID uint32, + deleteConfigItemIDs []uint32, replaceAll bool) error { + if !replaceAll { + return nil + } - nonTemplateConfig, err := s.handleNonTemplateConfig(grpcKit, req.GetBizId(), req.GetAppId(), - req.GetOtherAppId(), req.GetReleaseId()) - if err != nil { - return nil, err + // 1. 删除模板绑定关系 + if err := s.dao.AppTemplateBinding().DeleteByAppIDWithTx(kit, tx, bizID, appID); err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kit.Rid) + } + return errf.Errorf(errf.DBOpFailed, + i18n.T(kit, "delete one app template binding instance by app id failed, err: %s", err)) } - templateConfig, err := s.handleTemplateConfig(grpcKit, req.GetBizId(), req.GetAppId(), - req.GetOtherAppId(), req.GetReleaseId()) - if err != nil { - return nil, err + // 2. 删除配置项数据 + if e := s.doBatchDeleteConfigItems(kit, tx, deleteConfigItemIDs, bizID, appID); e != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kit.Rid) + } + return errf.Errorf(errf.DBOpFailed, i18n.T(kit, "batch create contents failed, err: %s", e)) } - return &pbds.CompareConfigItemConflictsResp{ - NonTemplateConfigs: nonTemplateConfig, - TemplateConfigs: templateConfig, - }, nil + // 3. 删除变量数据 + if e := s.dao.AppTemplateVariable().DeleteWithTx(kit, tx, bizID, appID); e != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kit.Rid) + } + return errf.Errorf(errf.DBOpFailed, + i18n.T(kit, "delete one app template variable failed, err: %s", e)) + } + + return nil } -// 处理非模板配置 -func (s *Service) handleNonTemplateConfig(grpcKit *kit.Kit, bizID, appID, otherAppId, releaseId uint32) ( - []*pbds.CompareConfigItemConflictsResp_NonTemplateConfig, error) { +// 验证是否已超过服务限制 +// nolint:goconst +// currentBinding 表示当前未命名版本绑定的套餐数据 +// bindings 待提交的套餐数据 +// createConfigItemNum 待创建的配置项数量 +func (s *Service) verifyAppLimitHasBeenExceeded(kit *kit.Kit, tx *gen.QueryTx, bizID, appID uint32, + currentBinding *table.AppTemplateBinding, bindings []*pbds.BatchUpsertConfigItemsReq_TemplateBinding, + createConfigItemNum int) error { - nonTemplateConfigs := make([]*pbds.CompareConfigItemConflictsResp_NonTemplateConfig, 0) + // 待提交的套餐数据 + betectedTemplateSetIDs := map[uint32]bool{} + templateSetIDs := []uint32{} + for _, v := range bindings { + templateSetIDs = append(templateSetIDs, v.GetTemplateBinding().GetTemplateSetId()) + betectedTemplateSetIDs[v.GetTemplateBinding().GetTemplateSetId()] = true + } - // 获取未命名版本配置文件 - ci, err := s.dao.ConfigItem().ListAllByAppID(grpcKit, appID, bizID) + // 从历史版本或者其他版本导入时关联的套餐 + templateSet, err := s.dao.TemplateSet().ListByIDs(kit, templateSetIDs) if err != nil { - logs.Errorf("list config items failed, err: %v, rid: %s", err, grpcKit.Rid) - return nil, err + return err + } + historyTemplateSetNum := 0 + for _, v := range templateSet { + historyTemplateSetNum += len(v.Spec.TemplateIDs) } - conflicts := make(map[string]bool) - for _, v := range ci { - conflicts[path.Join(v.Spec.Path, v.Spec.Name)] = true + // 当前未命名版本的关联套餐数,但不包含历史或其他历史版本套餐数 + currentTemplateSetNum := 0 + if currentBinding != nil { + for _, binding := range currentBinding.Spec.Bindings { + if !betectedTemplateSetIDs[binding.TemplateSetID] { + currentTemplateSetNum += len(binding.TemplateRevisions) + } + } } - // 获取已发布版本的配置文件 - rci, count, err := s.dao.ReleasedCI().List(grpcKit, bizID, otherAppId, releaseId, nil, &types.BasePage{ - All: true, - }, "") + // 获取当前未命名版本配置项数量 + configItemCount, err := s.dao.ConfigItem().GetConfigItemCountWithTx(kit, tx, bizID, appID) if err != nil { - logs.Errorf("list released config items failed, err: %v, rid: %s", err, grpcKit.Rid) - return nil, err + return err } - if count == 0 { - return nonTemplateConfigs, nil - } + appConfigCnt := getAppConfigCnt(bizID) - configItems := make(map[string]bool) - for _, v := range rci { - configItems[path.Join(v.ConfigItemSpec.Path, v.ConfigItemSpec.Name)] = true + app, err := s.dao.App().GetByID(kit, appID) + if err != nil { + return errf.Errorf(errf.AppNotExists, i18n.T(kit, "app %d not found", appID)) } - vars, err := s.getReleasedNonTemplateConfigVariables(grpcKit, bizID, otherAppId, releaseId) - if err != nil { - return nil, err + // 只有文件类型的才能绑定套餐 + if app.Spec.ConfigType != table.File { + return errf.Errorf(errf.DBOpFailed, i18n.T(kit, "app %s is not file type", app.Spec.Name)) } - for _, v := range rci { - nonTemplateConfigs = append(nonTemplateConfigs, &pbds.CompareConfigItemConflictsResp_NonTemplateConfig{ - Id: v.ConfigItemID, - ConfigItemSpec: &pbci.ConfigItemSpec{ - Name: v.ConfigItemSpec.Name, - Path: v.ConfigItemSpec.Path, - FileType: string(v.ConfigItemSpec.FileType), - FileMode: string(v.ConfigItemSpec.FileMode), - Memo: v.ConfigItemSpec.Memo, - Permission: &pbci.FilePermission{ - User: v.ConfigItemSpec.Permission.User, - UserGroup: v.ConfigItemSpec.Permission.UserGroup, - Privilege: v.ConfigItemSpec.Permission.Privilege, - }, - }, - Variables: vars[path.Join(v.ConfigItemSpec.Path, v.ConfigItemSpec.Name)], - IsExist: conflicts[path.Join(v.ConfigItemSpec.Path, v.ConfigItemSpec.Name)], - Signature: v.CommitSpec.Content.OriginSignature, - ByteSize: v.CommitSpec.Content.OriginByteSize, - Md5: v.CommitSpec.Content.Md5, - }) + // 非模板配置数+当前套餐配置数+历史套餐配置数+待创建的配置项数 + if int(configItemCount)+currentTemplateSetNum+historyTemplateSetNum+createConfigItemNum > appConfigCnt { + return errf.New(errf.InvalidParameter, + i18n.T(kit, "the total number of app %s config items(including template and non-template)"+ + "exceeded the limit %d", app.Spec.Name, appConfigCnt)) } - return nonTemplateConfigs, nil + return nil } -// 处理模板套餐配置 -func (s *Service) handleTemplateConfig(grpcKit *kit.Kit, bizID, appID, otherAppId, releaseId uint32) ( - []*pbds.CompareConfigItemConflictsResp_TemplateConfig, error) { - templateConfigs := make([]*pbds.CompareConfigItemConflictsResp_TemplateConfig, 0) +// 检测变量 +func (s *Service) checkConfigItemVars(kt *kit.Kit, tx *gen.QueryTx, bizID, appID uint32, + variables []*pbtv.TemplateVariableSpec) (*table.AppTemplateVariable, error) { - // 获取已发布版本的空间、套餐、配置文件 - rp, count, err := s.dao.ReleasedAppTemplate().List(grpcKit, bizID, otherAppId, releaseId, nil, &types.BasePage{ - All: true, - }, "") - if err != nil { - logs.Errorf("list released app template revisions failed, err: %v, rid: %s", err, grpcKit.Rid) + // 获取当前未命名版本中的变量 + currentVariable, err := s.dao.AppTemplateVariable().GetTemplateVariableWithTx(kt, tx, bizID, appID) + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { return nil, err } - if count == 0 { - return templateConfigs, nil - } - noNamespacePackage, err := s.getConfigTemplateSet(grpcKit, bizID, appID) - if err != nil { - return nil, err + if len(variables) == 0 { + return currentVariable, nil } - releaseTemplateSpaceIds, releaseTemplateSetIds, releaseTemplateIds := []uint32{}, []uint32{}, []uint32{} - releaseTemplateSpaceIdsExist, releaseTemplateSetIdsExist := make(map[uint32]bool), make(map[uint32]bool) - tmplSetMap := make(map[uint32][]*table.ReleasedAppTemplate) - for _, v := range rp { - tmplSetMap[v.Spec.TemplateSetID] = append(tmplSetMap[v.Spec.TemplateSetID], v) - if !releaseTemplateSpaceIdsExist[v.Spec.TemplateSpaceID] { - releaseTemplateSpaceIds = append(releaseTemplateSpaceIds, v.Spec.TemplateSpaceID) - releaseTemplateSpaceIdsExist[v.Spec.TemplateSpaceID] = true - } - if !releaseTemplateSetIdsExist[v.Spec.TemplateSetID] { - releaseTemplateSetIds = append(releaseTemplateSetIds, v.Spec.TemplateSetID) - releaseTemplateSetIdsExist[v.Spec.TemplateSetID] = true - } - releaseTemplateIds = append(releaseTemplateIds, v.Spec.TemplateID) - } + res := &table.AppTemplateVariable{} - templateSpaceExist, templateSetExist, currentSpaceSetTemplateExist, templateExist, templateSetTemplateExist, err := - s.getTemplateSpaceSetfile(grpcKit, releaseTemplateSpaceIds, releaseTemplateSetIds, releaseTemplateIds) - if err != nil { - return nil, err - } + currentTemplateVars := make(map[string]*table.TemplateVariableSpec, 0) - nonExistentTemplateIds := make(map[uint32]bool) - for _, v := range releaseTemplateIds { - if !templateExist[v] { - nonExistentTemplateIds[v] = true + if currentVariable != nil { + res.ID = currentVariable.ID + res.Attachment = currentVariable.Attachment + res.Revision = &table.Revision{ + Creator: currentVariable.Revision.Creator, + Reviser: kt.User, + CreatedAt: currentVariable.Revision.CreatedAt, + UpdatedAt: time.Now().UTC(), } - } - - vars, err := s.getReleasedTemplateConfigVariables(grpcKit, bizID, otherAppId, releaseId, nonExistentTemplateIds) - if err != nil { - return nil, err - } - for id, revisions := range tmplSetMap { - group := &pbds.CompareConfigItemConflictsResp_TemplateConfig{ - TemplateSpaceId: revisions[0].Spec.TemplateSpaceID, - TemplateSpaceName: revisions[0].Spec.TemplateSpaceName, - TemplateSetId: id, - TemplateSetName: revisions[0].Spec.TemplateSetName, - TemplateSpaceExist: templateSpaceExist[revisions[0].Spec.TemplateSpaceID], - TemplateSetExist: templateSetExist[id], - IsExist: noNamespacePackage[fmt.Sprintf("%d-%d", revisions[0].Spec.TemplateSpaceID, id)], - TemplateSetIsEmpty: templateSetTemplateExist[id], + for _, v := range currentVariable.Spec.Variables { + currentTemplateVars[v.Name] = v } - for _, r := range revisions { - // 历史套餐模板文件被删除了 - if !templateExist[r.Spec.TemplateID] { - continue - } - // 历史套餐模板不在现有套餐模板中, 被移走了 - if !currentSpaceSetTemplateExist[fmt.Sprintf("%d-%d-%d", r.Spec.TemplateSpaceID, - r.Spec.TemplateSetID, r.Spec.TemplateID)] { - continue - } - group.TemplateRevisions = append(group.TemplateRevisions, - &pbds.CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail{ - TemplateId: r.Spec.TemplateID, - TemplateRevisionId: r.Spec.TemplateRevisionID, - IsLatest: r.Spec.IsLatest, - Variables: vars[path.Join(r.Spec.Path, r.Spec.Name)], - }) + } else { + res.Attachment = &table.AppTemplateVariableAttachment{ + BizID: bizID, + AppID: appID, + } + res.Revision = &table.Revision{ + Creator: kt.User, + Reviser: kt.User, + CreatedAt: time.Now().UTC(), + UpdatedAt: time.Now().UTC(), } - templateConfigs = append(templateConfigs, group) - } - - return templateConfigs, nil -} - -// 返回空间、套餐、模板配置数据 -func (s *Service) getTemplateSpaceSetfile(grpcKit *kit.Kit, templateSpaceIds, templateSetIds, templateIds []uint32) ( - map[uint32]bool, map[uint32]bool, map[string]bool, map[uint32]bool, map[uint32]bool, error) { - // 获取空间 - templateSpace, err := s.dao.TemplateSpace().ListByIDs(grpcKit, templateSpaceIds) - if err != nil { - return nil, nil, nil, nil, nil, err - } - templateSpaceExist := make(map[uint32]bool) - for _, v := range templateSpace { - templateSpaceExist[v.ID] = true } - // 获取套餐 - templateSet, err := s.dao.TemplateSet().ListByIDs(grpcKit, templateSetIds) - if err != nil { - return nil, nil, nil, nil, nil, err - } - templateSetExist := make(map[uint32]bool) - currentSpaceSetTemplateExist := make(map[string]bool) - templateSetTemplateExist := make(map[uint32]bool) - for _, v := range templateSet { - templateSetTemplateExist[v.ID] = false - if len(v.Spec.TemplateIDs) == 0 { - templateSetTemplateExist[v.ID] = true - } - templateSetExist[v.ID] = true - for _, tid := range v.Spec.TemplateIDs { - currentSpaceSetTemplateExist[fmt.Sprintf("%d-%d-%d", v.Attachment.TemplateSpaceID, v.ID, tid)] = true + // 待提交的变量 + newVars := make(map[string]*table.TemplateVariableSpec, 0) + for _, vars := range variables { + newVars[vars.Name] = &table.TemplateVariableSpec{ + Name: vars.Name, + Type: table.VariableType(vars.Type), + DefaultVal: vars.DefaultVal, + Memo: vars.Memo, } } - // 获取模板 - template, err := s.dao.Template().ListByIDs(grpcKit, templateIds) - if err != nil { - return nil, nil, nil, nil, nil, err + mergeTemplateVars := mergeTemplateVariables(currentTemplateVars, newVars) + + variableMap := make([]*table.TemplateVariableSpec, 0) + for _, item := range mergeTemplateVars { + variableMap = append(variableMap, item) } - templateExist := make(map[uint32]bool) - for _, v := range template { - templateExist[v.ID] = true + + res.Spec = &table.AppTemplateVariableSpec{ + Variables: variableMap, } - return templateSpaceExist, templateSetExist, currentSpaceSetTemplateExist, templateExist, templateSetTemplateExist, nil + return res, nil } -// 获取未命名版本的模板套餐 -func (s *Service) getConfigTemplateSet(grpcKit *kit.Kit, bizID, appID uint32) ( - map[string]bool, error) { - - noNamespacePackage := make(map[string]bool) +func mergeTemplateVariables(map1, map2 map[string]*table.TemplateVariableSpec) map[string]*table.TemplateVariableSpec { + // 创建一个新map存储合并结果 + mergedMap := make(map[string]*table.TemplateVariableSpec) - tmplSetInfo, count, err := s.dao.AppTemplateBinding().List(grpcKit, bizID, appID, &types.BasePage{All: true}) - if err != nil { - return nil, err + // 先将第一组数据拷贝到合并结果中 + for k, v := range map1 { + mergedMap[k] = v } - if count == 0 { - return noNamespacePackage, nil + // 再将第二组数据拷贝到合并结果中,如果键相同则覆盖 + for k, v := range map2 { + mergedMap[k] = v } - tmplSets, err := s.dao.TemplateSet().ListByIDs(grpcKit, tmplSetInfo[0].Spec.TemplateSetIDs) - if err != nil { - logs.Errorf("list template sets failed, err: %v, rid: %s", err, grpcKit.Rid) - return nil, err - } + return mergedMap +} - tmplSetMap := make(map[uint32]*table.TemplateSet) - tmplSpaceIDs := make([]uint32, 0) - for _, ts := range tmplSets { - tmplSetMap[ts.ID] = ts - tmplSpaceIDs = append(tmplSpaceIDs, ts.Attachment.TemplateSpaceID) +// 将当前模板与历史模板集合并 +func (s *Service) mergeCurrentWithHistoryTemplateSet(kit *kit.Kit, bizID, appID uint32, + currentBinding *table.AppTemplateBinding, bindings []*pbds.BatchUpsertConfigItemsReq_TemplateBinding) ( + *table.AppTemplateBinding, error) { + + if len(bindings) == 0 { + return currentBinding, nil } - tmplSpaceIDs = tools.RemoveDuplicates(tmplSpaceIDs) - // template space details - tmplSpaces, err := s.dao.TemplateSpace().ListByIDs(grpcKit, tmplSpaceIDs) - if err != nil { - logs.Errorf("list template spaces failed, err: %v, rid: %s", err, grpcKit.Rid) - return nil, err + appTemplateBinding := &table.AppTemplateBinding{ + Spec: &table.AppTemplateBindingSpec{}, } - tmplSpaceMap := make(map[uint32]*table.TemplateSpace) - for _, ts := range tmplSpaces { - tmplSpaceMap[ts.ID] = ts + + // 当前未命名版本存在套餐关系时更新否则新增 + if currentBinding != nil { + appTemplateBinding.ID = currentBinding.ID + appTemplateBinding.Attachment = currentBinding.Attachment + appTemplateBinding.Revision = &table.Revision{ + Creator: currentBinding.Revision.Creator, + Reviser: kit.User, + CreatedAt: currentBinding.Revision.CreatedAt, + UpdatedAt: time.Now().UTC(), + } + } else { + appTemplateBinding.Attachment = &table.AppTemplateBindingAttachment{ + BizID: bizID, + AppID: appID, + } + appTemplateBinding.Revision = &table.Revision{ + Creator: kit.User, + Reviser: kit.User, + CreatedAt: time.Now().UTC(), + UpdatedAt: time.Now().UTC(), + } } - details := make([]*pbtset.TemplateSetBriefInfo, len(tmplSets)) - for idx, t := range tmplSets { - details[idx] = &pbtset.TemplateSetBriefInfo{ - TemplateSpaceId: t.Attachment.TemplateSpaceID, - TemplateSpaceName: tmplSpaceMap[t.Attachment.TemplateSpaceID].Spec.Name, - TemplateSetId: t.ID, - TemplateSetName: tmplSetMap[t.ID].Spec.Name, + // 格式化待提交的数据把 pb 结构转换成 table 结构, 方便做对比 + templateSpaceIDs, templateSetIDs := []uint32{}, []uint32{} + templateRevisions := make(table.TemplateBindings, 0) + for _, v := range bindings { + templateSpaceIDs = append(templateSpaceIDs, v.GetTemplateSpaceId()) + templateSetIDs = append(templateSetIDs, v.GetTemplateBinding().GetTemplateSetId()) + revision := make([]*table.TemplateRevisionBinding, 0) + for _, binding := range v.GetTemplateBinding().GetTemplateRevisions() { + revision = append(revision, &table.TemplateRevisionBinding{ + TemplateID: binding.GetTemplateId(), + TemplateRevisionID: binding.GetTemplateRevisionId(), + IsLatest: binding.GetIsLatest(), + }) } + templateRevisions = append(templateRevisions, &table.TemplateBinding{ + TemplateSetID: v.GetTemplateBinding().GetTemplateSetId(), + TemplateRevisions: revision, + }) } - for _, tmplSet := range details { - noNamespacePackage[fmt.Sprintf("%d-%d", tmplSet.TemplateSpaceId, tmplSet.TemplateSetId)] = true + // 未命名版本有关联套餐时处理当前套餐和待提交套餐的数据,否则只处理待提交数据 + if currentBinding != nil { + templateSetIDsExist := make(map[uint32]bool) + for _, v := range currentBinding.Spec.Bindings { + templateSetIDsExist[v.TemplateSetID] = true + } + currentTemplateSetID := []uint32{} + for _, v := range templateRevisions { + if !templateSetIDsExist[v.TemplateSetID] { + currentTemplateSetID = append(currentTemplateSetID, v.TemplateSetID) + } + } + unBindingTemplateSets, err := s.getUnBindingTemplateSets(kit, currentTemplateSetID) + if err != nil { + return nil, err + } + currentBinding.Spec.Bindings = append(currentBinding.Spec.Bindings, unBindingTemplateSets...) + appTemplateBinding.Spec = mergeTemplateSets(templateRevisions, currentBinding.Spec.Bindings) + appTemplateBinding.Spec.TemplateSpaceIDs = tools.MergeAndDeduplicate(tools.RemoveDuplicates(templateSpaceIDs), + tools.RemoveDuplicates(currentBinding.Spec.TemplateSpaceIDs)) + } else { + // 获取待提交套餐下的当前套餐数据 + // 待提交版本以前关联的套餐数据可能被更新过 + unBindingTemplateSets, err := s.getUnBindingTemplateSets(kit, templateSetIDs) + if err != nil { + return nil, err + } + appTemplateBinding.Spec = mergeTemplateSets(templateRevisions, unBindingTemplateSets) + appTemplateBinding.Spec.TemplateSpaceIDs = tools.RemoveDuplicates(templateSpaceIDs) } - return noNamespacePackage, nil + return appTemplateBinding, nil } -// 获取已发布的模板配置变量 -func (s *Service) getReleasedTemplateConfigVariables(grpcKit *kit.Kit, bizID, otherAppId, releaseId uint32, - templateIds map[uint32]bool) (map[string][]*pbtv.TemplateVariableSpec, error) { - varsMap := make(map[string][]*pbtv.TemplateVariableSpec, 0) - - releasedTmpls, count, err := s.dao.ReleasedAppTemplate().List(grpcKit, bizID, otherAppId, releaseId, - nil, &types.BasePage{All: true}, "") +// 获取未关联的模板套餐 +func (s *Service) getUnBindingTemplateSets(kt *kit.Kit, templateSetID []uint32) (table.TemplateBindings, error) { + // 查询未关联的套餐 + templateSet, err := s.dao.TemplateSet().ListByIDs(kt, templateSetID) if err != nil { - logs.Errorf("list released app templates failed, err: %v, rid: %s", err, grpcKit.Rid) return nil, err } - if count == 0 { - return varsMap, nil - } - - tmplRevisions := getTmplRevisionsFromReleased(releasedTmpls) - tmplRevisions = filterSizeForTmplRevisions(tmplRevisions) - - newTmplRevisions := make([]*table.TemplateRevision, 0) - for _, v := range tmplRevisions { - if templateIds[v.Attachment.TemplateID] { - continue + unBindingTemplateSets := make(table.TemplateBindings, 0) + for _, v := range templateSet { + // 获取每个套餐下所有配置的最新版本 + tmplRevisions, err := s.dao.TemplateRevision(). + ListLatestRevisionsGroupByTemplateIds(kt, tools.RemoveDuplicates(v.Spec.TemplateIDs)) + if err != nil { + return nil, err } - newTmplRevisions = append(newTmplRevisions, v) + revisions := make([]*table.TemplateRevisionBinding, 0) + for _, revision := range tmplRevisions { + revisions = append(revisions, &table.TemplateRevisionBinding{ + TemplateID: revision.Attachment.TemplateID, + TemplateRevisionID: revision.ID, + IsLatest: true, + }) + } + unBindingTemplateSets = append(unBindingTemplateSets, &table.TemplateBinding{ + TemplateSetID: v.ID, + TemplateRevisions: revisions, + }) } - refs, err := s.getVariableReferences(grpcKit, newTmplRevisions, nil) - if err != nil { - logs.Errorf("get variable references failed, err: %v, rid: %s", err, grpcKit.Rid) - return nil, err + return unBindingTemplateSets, nil +} + +// 把原有的模板空间、套餐、模板文件合并现有的数据 +func mergeTemplateSets(a, b table.TemplateBindings) *table.AppTemplateBindingSpec { + mergedMap := make(map[uint32]*table.TemplateBinding) + + // 把所有的 a 元素添加到 mergedMap + for _, aItem := range a { + mergedMap[aItem.TemplateSetID] = aItem } - resfMap := make(map[string][]string, 0) - for _, v := range refs { - for _, ref := range v.GetReferences() { - filePath := path.Join(ref.Path, ref.Name) - resfMap[filePath] = append(resfMap[filePath], v.GetVariableName()) + // 把元素 b 合并添加到 mergedMap + for _, bItem := range b { + if existing, exists := mergedMap[bItem.TemplateSetID]; exists { + // 合并 template revisions + revisionMap := make(map[uint32]*table.TemplateRevisionBinding) + for _, rev := range existing.TemplateRevisions { + revisionMap[rev.TemplateID] = rev + } + for _, rev := range bItem.TemplateRevisions { + if existingRev, exists := revisionMap[rev.TemplateID]; exists { + // 如果template_id存在,请检查is_latest + if existingRev.IsLatest { + if rev.IsLatest { + // 如果两者都是最新的,请比较TemplateRevisionID + if existingRev.TemplateRevisionID < rev.TemplateRevisionID { + revisionMap[rev.TemplateID] = rev + } + } + } else { + // 如果existingRev不是最新版本,请保持existingRev + revisionMap[rev.TemplateID] = existingRev + } + } else { + revisionMap[rev.TemplateID] = rev + } + } + // 将 map 转换回切片 + mergedRevisions := []*table.TemplateRevisionBinding{} + for _, rev := range revisionMap { + mergedRevisions = append(mergedRevisions, rev) + } + existing.TemplateRevisions = mergedRevisions + mergedMap[bItem.TemplateSetID] = existing + } else { + mergedMap[bItem.TemplateSetID] = bItem } } - vars, err := s.dao.ReleasedAppTemplateVariable().ListVariables(grpcKit, bizID, otherAppId, releaseId) - if err != nil { - logs.Errorf("list released app template variables failed, err: %v, rid: %s", err, grpcKit.Rid) - return nil, err + // 将 map 转换回切片 + merged := []*table.TemplateBinding{} + for _, item := range mergedMap { + merged = append(merged, item) } - for _, v := range vars { - for key, name := range resfMap { - for _, n := range name { - if v.Name == n { - varsMap[key] = append(varsMap[key], &pbtv.TemplateVariableSpec{ - Name: n, Type: string(v.Type), DefaultVal: v.DefaultVal, Memo: v.Memo, - }) - } + templateSetIDs, templateIDs, templateRevisionIDs, latestTemplateIDs := + []uint32{}, []uint32{}, []uint32{}, []uint32{} + for _, v := range merged { + templateSetIDs = append(templateSetIDs, v.TemplateSetID) + for _, d := range v.TemplateRevisions { + templateIDs = append(templateIDs, d.TemplateID) + templateRevisionIDs = append(templateRevisionIDs, d.TemplateRevisionID) + if d.IsLatest { + latestTemplateIDs = append(latestTemplateIDs, d.TemplateID) } } } - return varsMap, nil + return &table.AppTemplateBindingSpec{ + TemplateSetIDs: tools.RemoveDuplicates(templateSetIDs), + TemplateIDs: tools.RemoveDuplicates(templateIDs), + TemplateRevisionIDs: tools.RemoveDuplicates(templateRevisionIDs), + LatestTemplateIDs: tools.RemoveDuplicates(latestTemplateIDs), + Bindings: merged, + } } -// 获取已发布的非配置配置变量 -func (s *Service) getReleasedNonTemplateConfigVariables(grpcKit *kit.Kit, bizID, otherAppId, releaseId uint32) ( - map[string][]*pbtv.TemplateVariableSpec, error) { - varsMap := make(map[string][]*pbtv.TemplateVariableSpec, 0) - - releasedCIs, _, err := s.dao.ReleasedCI().List(grpcKit, bizID, otherAppId, releaseId, nil, - &types.BasePage{All: true}, "") - if err != nil { - logs.Errorf("list released config items failed, err: %v, rid: %s", err, grpcKit.Rid) - return nil, err +func (s *Service) checkConfigItems(kt *kit.Kit, req *pbds.BatchUpsertConfigItemsReq, + editingCIMap map[string]*table.ConfigItem, newCIMap map[string]*pbds.BatchUpsertConfigItemsReq_ConfigItem) ( + toCreate []*pbds.BatchUpsertConfigItemsReq_ConfigItem, toUpdateSpec []*pbds.BatchUpsertConfigItemsReq_ConfigItem, + toUpdateContent []*pbds.BatchUpsertConfigItemsReq_ConfigItem, toDelete []uint32, err error) { + // 1. list all config items' latest commit. + ids := make([]uint32, 0, len(editingCIMap)) + for _, ci := range editingCIMap { + ids = append(ids, ci.ID) + } + commits, err := s.dao.Commit().BatchListLatestCommits(kt, req.BizId, req.AppId, ids) + commitMap := make(map[uint32]*table.Commit) + for _, commit := range commits { + commitMap[commit.Attachment.ConfigItemID] = commit } - cis := getPbConfigItemsFromReleased(releasedCIs) - cis = filterSizeForConfigItems(cis) - - refs, err := s.getVariableReferences(grpcKit, nil, cis) if err != nil { - logs.Errorf("get variable references failed, err: %v, rid: %s", err, grpcKit.Rid) - return nil, err + logs.Errorf("list latest commits failed, err: %v, rid: %s", err, kt.Rid) + return nil, nil, nil, nil, err } - - resfMap := make(map[string][]string, 0) - for _, v := range refs { - for _, ref := range v.GetReferences() { - filePath := path.Join(ref.Path, ref.Name) - resfMap[filePath] = append(resfMap[filePath], v.GetVariableName()) + for _, item := range req.Items { + if editing, exists := editingCIMap[path.Join(item.ConfigItemSpec.Path, item.ConfigItemSpec.Name)]; exists { + // 2.1 if config item already exists, need compare and update. + specDiff, contentDiff, cErr := s.compareConfigItem(kt, item, editing, commitMap) + if cErr != nil { + logs.Errorf("compare config item failed, err: %v, rid: %s", err, kt.Rid) + return nil, nil, nil, nil, cErr + } + if specDiff || contentDiff { + toUpdateSpec = append(toUpdateSpec, item) + } + if contentDiff { + toUpdateContent = append(toUpdateContent, item) + } + } else { + // 2.2 if not exists, create new config item. + toCreate = append(toCreate, item) + } + } + // 3. delete config items not in batch upsert request. + for _, ci := range editingCIMap { + if newCIMap[path.Join(ci.Spec.Path, ci.Spec.Name)] == nil { + // if config item not in batch upsert request, delete it. + toDelete = append(toDelete, ci.ID) } } + return //nolint +} - vars, err := s.dao.ReleasedAppTemplateVariable().ListVariables(grpcKit, bizID, otherAppId, releaseId) - if err != nil { - logs.Errorf("list released app template variables failed, err: %v, rid: %s", err, grpcKit.Rid) +func (s *Service) doBatchCreateConfigItems(kt *kit.Kit, tx *gen.QueryTx, + toCreate []*pbds.BatchUpsertConfigItemsReq_ConfigItem, now time.Time, bizID, appID uint32) ([]uint32, error) { + createIds := []uint32{} + toCreateConfigItems := []*table.ConfigItem{} + for _, item := range toCreate { + ci := &table.ConfigItem{ + Spec: item.ConfigItemSpec.ConfigItemSpec(), + Attachment: item.ConfigItemAttachment.ConfigItemAttachment(), + Revision: &table.Revision{ + Creator: kt.User, + Reviser: kt.User, + CreatedAt: now, + UpdatedAt: now, + }, + } + toCreateConfigItems = append(toCreateConfigItems, ci) + } + if err := s.dao.ConfigItem().BatchCreateWithTx(kt, tx, bizID, appID, toCreateConfigItems); err != nil { + logs.Errorf("batch create config items failed, err: %v, rid: %s", err, kt.Rid) return nil, err } + toCreateContent := []*table.Content{} + for i, item := range toCreate { + createIds = append(createIds, toCreateConfigItems[i].ID) + toCreateContent = append(toCreateContent, &table.Content{ + Spec: item.GetContentSpec().ContentSpec(), + Attachment: &table.ContentAttachment{ + BizID: bizID, + AppID: appID, + ConfigItemID: toCreateConfigItems[i].ID, + }, + Revision: &table.CreatedRevision{ + Creator: kt.User, + }, + }) + } - for _, v := range vars { - for key, name := range resfMap { - for _, n := range name { - if v.Name == n { - varsMap[key] = append(varsMap[key], &pbtv.TemplateVariableSpec{ - Name: n, Type: string(v.Type), DefaultVal: v.DefaultVal, Memo: v.Memo, - }) - } - } - } + if err := s.dao.Content().BatchCreateWithTx(kt, tx, toCreateContent); err != nil { + logs.Errorf("batch create config items failed, err: %v, rid: %s", err, kt.Rid) + return nil, err + } + toCreateCommit := []*table.Commit{} + for i := range toCreateContent { + toCreateCommit = append(toCreateCommit, &table.Commit{ + Spec: &table.CommitSpec{ + ContentID: toCreateContent[i].ID, + Content: toCreateContent[i].Spec, + }, + Attachment: &table.CommitAttachment{ + BizID: bizID, + AppID: appID, + ConfigItemID: toCreateConfigItems[i].ID, + }, + Revision: &table.CreatedRevision{ + Creator: kt.User, + }, + }) + } + if err := s.dao.Commit().BatchCreateWithTx(kt, tx, toCreateCommit); err != nil { + logs.Errorf("batch create commits failed, err: %v, rid: %s", err, kt.Rid) + return nil, err } - return varsMap, nil + return createIds, nil } -// GetTemplateAndNonTemplateCICount 获取模板和非模板配置项数量 -func (s *Service) GetTemplateAndNonTemplateCICount(ctx context.Context, req *pbds.GetTemplateAndNonTemplateCICountReq) ( - *pbds.GetTemplateAndNonTemplateCICountResp, error) { - kt := kit.FromGrpcContext(ctx) - - count, err := s.dao.ConfigItem().GetConfigItemCount(kt, req.BizId, req.AppId) - if err != nil { - return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kt, "obtain the number of configuration items")) +func (s *Service) doBatchUpdateConfigItemSpec(kt *kit.Kit, tx *gen.QueryTx, + toUpdate []*pbds.BatchUpsertConfigItemsReq_ConfigItem, now time.Time, _, _ uint32, + ciMap map[string]*table.ConfigItem) ([]uint32, error) { + updateIds := []uint32{} + configItems := []*table.ConfigItem{} + for _, item := range toUpdate { + ci := &table.ConfigItem{ + ID: ciMap[path.Join(item.ConfigItemSpec.Path, item.ConfigItemSpec.Name)].ID, + Spec: item.ConfigItemSpec.ConfigItemSpec(), + Attachment: item.ConfigItemAttachment.ConfigItemAttachment(), + Revision: &table.Revision{ + Creator: ciMap[path.Join(item.ConfigItemSpec.Path, item.ConfigItemSpec.Name)].Revision.Creator, + Reviser: kt.User, + CreatedAt: ciMap[path.Join(item.ConfigItemSpec.Path, item.ConfigItemSpec.Name)].Revision.CreatedAt, + UpdatedAt: now, + }, + } + configItems = append(configItems, ci) } - - binding, err := s.dao.AppTemplateBinding().GetAppTemplateBindingByAppID(kt, req.BizId, req.AppId) - if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { - return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kt, - "get template binding relationships through business and service IDs failed, err: %s", err)) + if err := s.dao.ConfigItem().BatchUpdateWithTx(kt, tx, configItems); err != nil { + logs.Errorf("batch update config items failed, err: %v, rid: %s", err, kt.Rid) + return nil, err } - templateConfigItemCount := 0 - if binding != nil { - for _, binding := range binding.Spec.Bindings { - templateConfigItemCount += len(binding.TemplateRevisions) - } + // 返回编辑ID + for _, item := range configItems { + updateIds = append(updateIds, item.ID) } - return &pbds.GetTemplateAndNonTemplateCICountResp{ - ConfigItemCount: uint64(count), - TemplateConfigItemCount: uint64(templateConfigItemCount), - }, nil + return updateIds, nil } -// RemoveAppBoundTmplSet 移除服务绑定的套餐 -func (s *Service) RemoveAppBoundTmplSet(ctx context.Context, req *pbds.RemoveAppBoundTmplSetReq) ( - *pbbase.EmptyResp, error) { - - kit := kit.FromGrpcContext(ctx) - - // 1. 查询该服务下的引用套餐 - binding, err := s.dao.AppTemplateBinding().GetAppTemplateBindingByAppID(kit, req.BizId, req.AppId) - if err != nil { - return nil, errf.Errorf(errf.DBOpFailed, - i18n.T(kit, "get reference template set under this app failed, err: %s", err)) +func (s *Service) doBatchUpdateConfigItemContent(kt *kit.Kit, tx *gen.QueryTx, + toUpdate []*pbds.BatchUpsertConfigItemsReq_ConfigItem, now time.Time, + bizID, appID uint32, ciMap map[string]*table.ConfigItem) error { + toCreateContents := []*table.Content{} + for _, item := range toUpdate { + content := &table.Content{ + Spec: item.GetContentSpec().ContentSpec(), + Attachment: &table.ContentAttachment{ + BizID: bizID, + AppID: appID, + ConfigItemID: ciMap[path.Join(item.ConfigItemSpec.Path, item.ConfigItemSpec.Name)].ID, + }, + Revision: &table.CreatedRevision{ + Creator: kt.User, + CreatedAt: now, + }, + } + toCreateContents = append(toCreateContents, content) } - specBindings := make([]*table.TemplateBinding, 0, len(binding.Spec.Bindings)) - for _, spec := range binding.Spec.Bindings { - revisions := make([]*table.TemplateRevisionBinding, 0) - // 只需移除指定的模板套餐 - if spec.TemplateSetID == req.TemplateSetId { - continue - } - revisions = append(revisions, spec.TemplateRevisions...) - specBinding := &table.TemplateBinding{ - TemplateSetID: spec.TemplateSetID, - TemplateRevisions: revisions, + if err := s.dao.Content().BatchCreateWithTx(kt, tx, toCreateContents); err != nil { + logs.Errorf("batch create contents failed, err: %v, rid: %s", err, kt.Rid) + return err + } + toCreateCommits := []*table.Commit{} + for i, item := range toUpdate { + commit := &table.Commit{ + Spec: &table.CommitSpec{ + ContentID: toCreateContents[i].ID, + Content: item.ContentSpec.ContentSpec(), + }, + Attachment: &table.CommitAttachment{ + BizID: bizID, + AppID: appID, + ConfigItemID: ciMap[path.Join(item.ConfigItemSpec.Path, item.ConfigItemSpec.Name)].ID, + }, + Revision: &table.CreatedRevision{ + Creator: kt.User, + CreatedAt: now, + }, } - specBindings = append(specBindings, specBinding) + toCreateCommits = append(toCreateCommits, commit) + } + if err := s.dao.Commit().BatchCreateWithTx(kt, tx, toCreateCommits); err != nil { + logs.Errorf("batch create commits failed, err: %v, rid: %s", err, kt.Rid) + return err } + return nil +} - templateIDs, latestTemplateIDs, templateRevisionIDs, templateSetIDs := - []uint32{}, []uint32{}, []uint32{}, []uint32{} - for _, specBinding := range specBindings { - for _, v := range specBinding.TemplateRevisions { - templateIDs = append(templateIDs, v.TemplateID) - if v.IsLatest { - latestTemplateIDs = append(latestTemplateIDs, v.TemplateID) - } - templateRevisionIDs = append(templateRevisionIDs, v.TemplateRevisionID) - } - templateSetIDs = append(templateSetIDs, specBinding.TemplateSetID) +func (s *Service) doBatchDeleteConfigItems(kt *kit.Kit, tx *gen.QueryTx, toDelete []uint32, bizID, appID uint32) error { + if err := s.dao.ConfigItem().BatchDeleteWithTx(kt, tx, toDelete, bizID, appID); err != nil { + logs.Errorf("batch create contents failed, err: %v, rid: %s", err, kt.Rid) + return err } + return nil +} - // 根据套餐id获取空间id - templateSets, err := s.dao.TemplateSet().ListByIDs(kit, templateSetIDs) +// nolint: unused +func (s *Service) createNewConfigItem(kt *kit.Kit, tx *gen.QueryTx, bizID, appID uint32, + now time.Time, item *pbds.BatchUpsertConfigItemsReq_ConfigItem) error { + // 1. create config item. + ci := &table.ConfigItem{ + Spec: item.ConfigItemSpec.ConfigItemSpec(), + Attachment: item.ConfigItemAttachment.ConfigItemAttachment(), + Revision: &table.Revision{ + Creator: kt.User, + Reviser: kt.User, + CreatedAt: now, + UpdatedAt: now, + }, + } + ciID, err := s.dao.ConfigItem().CreateWithTx(kt, tx, ci) if err != nil { - return nil, errf.Errorf(errf.DBOpFailed, - i18n.T(kit, "list template sets by template set ids failed, err: %s", err)) + logs.Errorf("create config item failed, err: %v, rid: %s", err, kt.Rid) + return err } - - templateSpaceIDs := []uint32{} - for _, v := range templateSets { - templateSpaceIDs = append(templateSpaceIDs, v.Attachment.TemplateSpaceID) + // 2. create content. + content := &table.Content{ + Spec: item.ContentSpec.ContentSpec(), + Attachment: &table.ContentAttachment{ + BizID: bizID, + AppID: appID, + ConfigItemID: ciID, + }, + Revision: &table.CreatedRevision{ + Creator: kt.User, + }, } - - appTemplateBinding := &table.AppTemplateBinding{ - ID: binding.ID, - Spec: &table.AppTemplateBindingSpec{ - TemplateSpaceIDs: templateSpaceIDs, - TemplateSetIDs: templateSetIDs, - TemplateIDs: tools.RemoveDuplicates(templateIDs), - TemplateRevisionIDs: tools.RemoveDuplicates(templateRevisionIDs), - LatestTemplateIDs: tools.RemoveDuplicates(latestTemplateIDs), - Bindings: specBindings, + contentID, err := s.dao.Content().CreateWithTx(kt, tx, content) + if err != nil { + logs.Errorf("create content failed, err: %v, rid: %s", err, kt.Rid) + return err + } + // 3. create commit. + commit := &table.Commit{ + Spec: &table.CommitSpec{ + ContentID: contentID, + Content: content.Spec, }, - Attachment: binding.Attachment, - Revision: &table.Revision{ - Creator: binding.Revision.Creator, - Reviser: kit.User, - CreatedAt: binding.Revision.CreatedAt, - UpdatedAt: time.Now().UTC(), + Attachment: &table.CommitAttachment{ + BizID: bizID, + AppID: appID, + ConfigItemID: ciID, + }, + Revision: &table.CreatedRevision{ + Creator: kt.User, }, } - - if err = s.dao.AppTemplateBinding().Update(kit, appTemplateBinding); err != nil { - return nil, errf.Errorf(errf.DBOpFailed, - i18n.T(kit, "remove the template set bound to the app failed, err: %s", err)) + _, err = s.dao.Commit().CreateWithTx(kt, tx, commit) + if err != nil { + logs.Errorf("create commit failed, err: %v, rid: %s", err, kt.Rid) + return err } - - return &pbbase.EmptyResp{}, nil + return nil } -// checkExistingPathConflict Check existing path collections for conflicts. -func checkExistingPathConflict(existing []string) (uint32, map[string]bool) { - conflictPaths := make(map[string]bool, len(existing)) - var conflictNums uint32 - conflictMap := make(map[string]bool, 0) - // 遍历每一个路径 - for i := 0; i < len(existing); i++ { - // 检查当前路径与后续路径之间是否存在冲突 - for j := i + 1; j < len(existing); j++ { - if strings.HasPrefix(existing[j]+"/", existing[i]+"/") || strings.HasPrefix(existing[i]+"/", existing[j]+"/") { - // 相等也算冲突 - if len(existing[j]) == len(existing[i]) { - conflictNums++ - } else if len(existing[j]) < len(existing[i]) { - conflictMap[existing[j]] = true - } else { - conflictMap[existing[i]] = true - } - - conflictPaths[existing[i]] = true - conflictPaths[existing[j]] = true - } - } +// compareConfigItem compare config item +// return specDiff, contentDiff, error +func (s *Service) compareConfigItem(_ *kit.Kit, new *pbds.BatchUpsertConfigItemsReq_ConfigItem, + editing *table.ConfigItem, commitMap map[uint32]*table.Commit) (specDiff bool, contentDiff bool, err error) { + // 1. compare config item spec. + if !reflect.DeepEqual(new.ConfigItemSpec.ConfigItemSpec(), editing.Spec) { + specDiff = true } - - return uint32(len(conflictMap)) + conflictNums, conflictPaths + // 2. compare content. + // 2.1 get latest commit. + commit, exists := commitMap[editing.ID] + if !exists { + // ! config item should have at least one commit. + logs.Errorf("[SHOULD-NOT-HAPPEN] latest commit for config item %d not found", editing.ID) + return false, false, fmt.Errorf("[SHOULD-NOT-HAPPEN] latest commit for config item %d not found", editing.ID) + } + // 2.2 compare content spec. + if new.ContentSpec.Signature != commit.Spec.Content.Signature { + contentDiff = true + } + return //nolint } diff --git a/cmd/data-service/service/release.go b/cmd/data-service/service/release.go index 1661fc4a4b..c7b3a52cd3 100644 --- a/cmd/data-service/service/release.go +++ b/cmd/data-service/service/release.go @@ -134,6 +134,19 @@ func (s *Service) CreateRelease(ctx context.Context, req *pbds.CreateReleaseReq) return nil, errors.New("app config items is empty") } + // 检测权限组是否存在冲突 + var configItem []*table.ConfigItem + for _, v := range cis { + configItem = append(configItem, &table.ConfigItem{ + ID: v.Id, + Spec: v.Spec.ConfigItemSpec(), + Attachment: v.GetAttachment().ConfigItemAttachment(), + }) + } + if err = checkTplNonTplPerms(grpcKit, configItem, tmplRevisions); err != nil { + return nil, err + } + // 3: do template and non-template config item related operations for create release. if err = s.doConfigItemOperations(grpcKit, req.Variables, tx, release.ID, tmplRevisions, cis); err != nil { if rErr := tx.Rollback(); rErr != nil { @@ -162,13 +175,13 @@ func (s *Service) CreateRelease(ctx context.Context, req *pbds.CreateReleaseReq) // doConfigItemOperations do config item related operations for create release. /* -1.下载服务的所有模版和非模版配置文件内容,提取服务模版变量 -2.获取入参变量和业务变量,判断是否缺少变量,缺少则报错 -3.使用变量渲染模版和非模版配置文件,上传渲染后的内容 -4.创建已生成版本服务的模版和非模版配置项 -5.创建已生成版本服务的服务模版详情 -6.创建已生成版本服务的模版变量 -7.将当前使用变量更新到未命名版本的服务模版变量 + 1.下载服务的所有模版和非模版配置文件内容,提取服务模版变量 + 2.获取入参变量和业务变量,判断是否缺少变量,缺少则报错 + 3.使用变量渲染模版和非模版配置文件,上传渲染后的内容 + 4.创建已生成版本服务的模版和非模版配置项 + 5.创建已生成版本服务的服务模版详情 + 6.创建已生成版本服务的模版变量 + 7.将当前使用变量更新到未命名版本的服务模版变量 */ //nolint:funlen func (s *Service) doConfigItemOperations(kt *kit.Kit, variables []*pbtv.TemplateVariableSpec, @@ -462,6 +475,8 @@ func (s *Service) createReleasedRenderedCIs(kt *kit.Kit, tx *gen.QueryTx, releas User: ci.Spec.Permission.User, UserGroup: ci.Spec.Permission.UserGroup, Privilege: ci.Spec.Permission.Privilege, + Uid: ci.Spec.Permission.Uid, + Gid: ci.Spec.Permission.Gid, }, }, Attachment: &table.ConfigItemAttachment{ @@ -536,14 +551,18 @@ func (s *Service) createReleasedAppTemplates(kt *kit.Kit, tx *gen.QueryTx, relea TemplateRevisionMemo: r.TemplateRevisionMemo, FileType: r.FileType, FileMode: r.FileMode, - User: r.User, - UserGroup: r.UserGroup, - Privilege: r.Privilege, - Signature: signatureMap[r.TemplateRevisionId], - ByteSize: byteSizeMap[r.TemplateRevisionId], - OriginSignature: r.Signature, - OriginByteSize: r.ByteSize, - Md5: md5Map[r.TemplateRevisionId], + Permission: &table.FilePermission{ + User: r.Permission.User, + UserGroup: r.Permission.UserGroup, + Privilege: r.Permission.Privilege, + Uid: r.Permission.Uid, + Gid: r.Permission.Gid, + }, + Signature: signatureMap[r.TemplateRevisionId], + ByteSize: byteSizeMap[r.TemplateRevisionId], + OriginSignature: r.Signature, + OriginByteSize: r.ByteSize, + Md5: md5Map[r.TemplateRevisionId], }, Attachment: &table.ReleasedAppTemplateAttachment{ BizID: kt.BizID, diff --git a/cmd/data-service/service/template.go b/cmd/data-service/service/template.go index bbdd8dd216..43a33fb7f4 100644 --- a/cmd/data-service/service/template.go +++ b/cmd/data-service/service/template.go @@ -40,8 +40,7 @@ import ( ) // CreateTemplate create template. -// -//nolint:funlen +// nolint:funlen func (s *Service) CreateTemplate(ctx context.Context, req *pbds.CreateTemplateReq) (*pbds.CreateResp, error) { kt := kit.FromGrpcContext(ctx) @@ -120,6 +119,38 @@ func (s *Service) CreateTemplate(ctx context.Context, req *pbds.CreateTemplateRe return nil, err } + userPrivilege := &table.UserPrivilege{ + Spec: &table.UserPrivilegeSpec{ + User: req.GetTrSpec().Permission.User, + }, + Attachment: &table.UserPrivilegeAttachment{ + BizID: req.GetAttachment().BizId, + TemplateSpaceID: req.GetAttachment().TemplateSpaceId, + Uid: req.GetTrSpec().GetPermission().Uid, + }, + } + + userGroupPrivilege := &table.UserGroupPrivilege{ + Spec: &table.UserGroupPrivilegeSpec{ + UserGroup: req.GetTrSpec().Permission.UserGroup, + }, + Attachment: &table.UserGroupPrivilegeAttachment{ + BizID: req.GetAttachment().BizId, + TemplateSpaceID: req.GetAttachment().TemplateSpaceId, + Gid: req.GetTrSpec().GetPermission().GetGid(), + }, + } + + // 2. 更新权限组 + err = s.upsertSinglePermissions(kt, tx, req.Attachment.BizId, 0, req.Attachment.TemplateSpaceId, + userPrivilege, userGroupPrivilege, true) + if err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) + } + return nil, err + } + // 6. create template revision spec := req.TrSpec.TemplateRevisionSpec() // if no revision name is specified, generate it by system @@ -891,6 +922,7 @@ func (s *Service) BatchUpsertTemplates(ctx context.Context, req *pbds.BatchUpser // 2. 过滤出创建和更新的数据 createData, updateData := make([]*pbds.BatchUpsertTemplatesReq_Item, 0), make([]*pbds.BatchUpsertTemplatesReq_Item, 0) updateIds := []uint32{} + userPrivileges, userGroupPrivileges := make([]*table.UserPrivilege, 0), make([]*table.UserGroupPrivilege, 0) for _, item := range req.Items { if item.GetTemplate().GetId() != 0 { updateIds = append(updateIds, item.GetTemplate().GetId()) @@ -898,6 +930,28 @@ func (s *Service) BatchUpsertTemplates(ctx context.Context, req *pbds.BatchUpser } else { createData = append(createData, item) } + userPrivileges = append(userPrivileges, &table.UserPrivilege{ + Spec: &table.UserPrivilegeSpec{ + User: item.TemplateRevision.Spec.Permission.User, + PrivilegeType: table.PrivilegeTypeCustom, + }, + Attachment: &table.UserPrivilegeAttachment{ + BizID: req.BizId, + TemplateSpaceID: req.TemplateSpaceId, + Uid: item.GetTemplateRevision().GetSpec().GetPermission().Uid, + }, + }) + userGroupPrivileges = append(userGroupPrivileges, &table.UserGroupPrivilege{ + Spec: &table.UserGroupPrivilegeSpec{ + UserGroup: item.TemplateRevision.Spec.Permission.UserGroup, + PrivilegeType: table.PrivilegeTypeCustom, + }, + Attachment: &table.UserGroupPrivilegeAttachment{ + BizID: req.BizId, + TemplateSpaceID: req.TemplateSpaceId, + Gid: item.GetTemplateRevision().GetSpec().GetPermission().Gid, + }, + }) } now := time.Now().UTC() @@ -992,6 +1046,15 @@ func (s *Service) BatchUpsertTemplates(ctx context.Context, req *pbds.BatchUpser return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kt, "batch add templates to template sets failed, err: %s", err)) } + // 11. 处理模板权限组 + if err := s.batcheUpsertPermissionGroup(kt, tx, req.BizId, 0, req.TemplateSpaceId, userPrivileges, + userGroupPrivileges, true); err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) + } + return nil, err + } + if err := tx.Commit(); err != nil { logs.Errorf("commit transaction failed, err: %v, rid: %s", err, kt.Rid) return nil, err @@ -1179,6 +1242,7 @@ func (s *Service) BatchUpdateTemplatePermissions(ctx context.Context, req *pbds. } tx := s.dao.GenQuery().Begin() + if err := s.dao.TemplateRevision().BatchCreateWithTx(kt, tx, toCreate); err != nil { if rErr := tx.Rollback(); rErr != nil { logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) @@ -1187,6 +1251,35 @@ func (s *Service) BatchUpdateTemplatePermissions(ctx context.Context, req *pbds. i18n.T(kt, fmt.Sprintf("batch update of template permissions failed, err: %s", err.Error()))) } + userPrivilege := &table.UserPrivilege{ + Spec: &table.UserPrivilegeSpec{ + User: req.User, + }, + Attachment: &table.UserPrivilegeAttachment{ + BizID: req.BizId, + TemplateSpaceID: req.TemplateSpaceId, + Uid: req.Uid, + }, + } + + userGroupPrivilege := &table.UserGroupPrivilege{ + Spec: &table.UserGroupPrivilegeSpec{ + UserGroup: req.UserGroup, + }, + Attachment: &table.UserGroupPrivilegeAttachment{ + BizID: req.BizId, + TemplateSpaceID: req.TemplateSpaceId, + Gid: req.Gid, + }, + } + + // 更新权限组 + err = s.upsertSinglePermissions(kt, tx, req.BizId, 0, req.TemplateSpaceId, + userPrivilege, userGroupPrivilege, true) + if err != nil { + return nil, err + } + ids := []uint32{} templateIdsMap := []uint32{} templateRevisionID := map[uint32]uint32{} diff --git a/cmd/data-service/service/template_revision.go b/cmd/data-service/service/template_revision.go index db1fc8ad3e..dc59e11a1e 100644 --- a/cmd/data-service/service/template_revision.go +++ b/cmd/data-service/service/template_revision.go @@ -119,16 +119,21 @@ func (s *Service) ListTemplateRevisions(ctx context.Context, } details, count, err := s.dao.TemplateRevision().List(kt, req.BizId, req.TemplateId, searcher, opt) - if err != nil { logs.Errorf("list template revisions failed, err: %v, rid: %s", err, kt.Rid) return nil, err } + details, err = s.listTplRevPerms(kt, req.BizId, details) + if err != nil { + return nil, err + } + resp := &pbds.ListTemplateRevisionsResp{ Count: uint32(count), Details: pbtr.PbTemplateRevisions(details), } + return resp, nil } @@ -164,6 +169,11 @@ func (s *Service) ListTemplateRevisionsByIDs(ctx context.Context, req *pbds.List return nil, err } + details, err = s.listTplRevPerms(kt, req.BizId, details) + if err != nil { + return nil, err + } + resp := &pbds.ListTemplateRevisionsByIDsResp{ Details: pbtr.PbTemplateRevisions(details), } @@ -286,6 +296,11 @@ func (s *Service) GetTemplateRevision(ctx context.Context, req *pbds.GetTemplate return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kt, fmt.Sprintf("get template revision failed, err: %v", err))) } + revision, err = s.getTplRevPerm(kt, req.BizId, revision) + if err != nil { + return nil, err + } + return &pbds.GetTemplateRevisionResp{ Detail: &pbds.GetTemplateRevisionResp_TemplateRevision{ TemplateId: revision.Attachment.TemplateID, @@ -305,11 +320,14 @@ func (s *Service) GetTemplateRevision(ctx context.Context, req *pbds.GetTemplate CreateAt: revision.Revision.CreatedAt.Format(time.RFC3339), Md5: revision.Spec.ContentSpec.Md5, IsLatest: isLatest, + Uid: revision.Spec.Permission.Uid, + Gid: revision.Spec.Permission.Gid, }, }, nil } // UpdateTemplateRevision implements pbds.DataServer. +// nolint:funlen func (s *Service) UpdateTemplateRevision(ctx context.Context, req *pbds.UpdateTemplateRevisionReq) ( *pbds.CreateResp, error) { kt := kit.FromGrpcContext(ctx) @@ -385,6 +403,38 @@ func (s *Service) UpdateTemplateRevision(ctx context.Context, req *pbds.UpdateTe return nil, err } + userPrivilege := &table.UserPrivilege{ + Spec: &table.UserPrivilegeSpec{ + User: req.GetSpec().Permission.User, + }, + Attachment: &table.UserPrivilegeAttachment{ + BizID: req.GetAttachment().BizId, + TemplateSpaceID: req.Attachment.TemplateSpaceId, + Uid: req.GetSpec().GetPermission().GetUid(), + }, + } + + userGroupPrivilege := &table.UserGroupPrivilege{ + Spec: &table.UserGroupPrivilegeSpec{ + UserGroup: req.GetSpec().Permission.UserGroup, + }, + Attachment: &table.UserGroupPrivilegeAttachment{ + BizID: req.GetAttachment().BizId, + TemplateSpaceID: req.Attachment.TemplateSpaceId, + Gid: req.GetSpec().GetPermission().GetGid(), + }, + } + + // 2. 更新权限组 + err = s.upsertSinglePermissions(kt, tx, req.Attachment.BizId, 0, req.Attachment.TemplateSpaceId, + userPrivilege, userGroupPrivilege, true) + if err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) + } + return nil, err + } + if e := tx.Commit(); e != nil { logs.Errorf("commit transaction failed, err: %v, rid: %s", e, kt.Rid) return nil, e diff --git a/cmd/data-service/service/upload_download.go b/cmd/data-service/service/upload_download.go index c94a776674..9594a9f572 100644 --- a/cmd/data-service/service/upload_download.go +++ b/cmd/data-service/service/upload_download.go @@ -68,6 +68,12 @@ func (s *Service) getAppTmplRevisions(kt *kit.Kit) ([]*table.TemplateRevision, e return nil, err } + // 返回模板文件版本的权限 + tmplRevisions, err = s.listTplRevPerms(kt, kt.BizID, tmplRevisions) + if err != nil { + return nil, err + } + return tmplRevisions, nil } diff --git a/cmd/data-service/service/user_group_privilege.go b/cmd/data-service/service/user_group_privilege.go new file mode 100644 index 0000000000..00604638dd --- /dev/null +++ b/cmd/data-service/service/user_group_privilege.go @@ -0,0 +1,237 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package service + +import ( + "context" + "errors" + + "gorm.io/gorm" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/criteria/errf" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/gen" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/i18n" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/logs" + pbbase "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/base" + pbds "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/data-service" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/types" +) + +// ListUserGroupPrivileges 获取用户组权限数据 +func (s *Service) ListUserGroupPrivileges(ctx context.Context, req *pbds.ListUserPrivilegesReq) ( + *pbds.ListUserPrivilegesResp, error) { + kit := kit.FromGrpcContext(ctx) + + opt := &types.BasePage{Start: req.Start, Limit: uint(req.Limit), All: req.All} + if err := opt.Validate(types.DefaultPageOption); err != nil { + return nil, err + } + + data, count, err := s.dao.UserGroupPrivilege().List(kit, req.BizId, req.AppId, req.TemplateSpaceId, req.Name, opt) + if err != nil { + return nil, err + } + + item := make([]*pbds.ListUserPrivilegesResp_Detail, 0, len(data)) + + for _, v := range data { + item = append(item, &pbds.ListUserPrivilegesResp_Detail{ + Id: v.ID, + Name: v.Spec.UserGroup, + PrivilegeType: string(v.Spec.PrivilegeType), + ReadOnly: v.Spec.ReadOnly, + Pid: v.Attachment.Gid, + }) + } + + return &pbds.ListUserPrivilegesResp{Count: uint32(count), Details: item}, nil +} + +// DeleteUserGroupPrivilege 删除用户组权限数据 +func (s *Service) DeleteUserGroupPrivilege(ctx context.Context, req *pbds.DeleteUserPrivilegesReq) ( + *pbbase.EmptyResp, error) { + kit := kit.FromGrpcContext(ctx) + + // 获取删除的数据 + item, err := s.dao.UserGroupPrivilege().GetUserGroupPrivilege(kit, req.BizId, req.AppId, req.TemplateSpaceId, req.Id) + if err != nil { + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "get user group privilege failed, err: %v", err)) + } + + if item.Spec.ReadOnly { + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "this user group has read-only privilege")) + } + + tx := s.dao.GenQuery().Begin() + + if err = s.dao.UserGroupPrivilege().DeleteWithTx(kit, tx, item); err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kit.Rid) + } + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "delete user group privilege failed, err: %v", err)) + } + + if req.TemplateSpaceId != 0 && req.AppId == 0 { + // 删除模板版本中对应的用户权限 + err = s.dao.TemplateRevision().UpdateGroupPrivilegesWithTx(kit, tx, req.BizId, + req.TemplateSpaceId, item.Spec.UserGroup, "") + if err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kit.Rid) + } + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "delete user privilege failed, err: %v", err)) + } + } + + if req.TemplateSpaceId == 0 && req.AppId != 0 { + // 删除未命名版本中对应的用户权限 + err = s.dao.ConfigItem().UpdateUserGroupPrivilegesWithTx(kit, tx, req.BizId, + req.AppId, item.Spec.UserGroup, "") + if err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kit.Rid) + } + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "delete user group privilege failed, err: %v", err)) + } + } + + if err = tx.Commit(); err != nil { + logs.Errorf("commit transaction failed, err: %v, rid: %s", err, kit.Rid) + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "delete user group privilege failed, err: %v", err)) + } + + return &pbbase.EmptyResp{}, nil +} + +// batcheUpsertUserGroupPrivileges 批量创建或更新用户组权限 +func (s *Service) batcheUpsertUserGroupPrivileges(kit *kit.Kit, tx *gen.QueryTx, bizID, appID, templateSpaceID uint32, + userGroupPrivileges []*table.UserGroupPrivilege, isTemplate bool) error { + + // 创建两个 map 来追踪 gid -> user group 和 user group -> gid 的唯一性 + // 验证提交的权限数据存在唯一性 + userGroups, gids := make(map[uint32]string), make(map[string]uint32) + for _, v := range userGroupPrivileges { + if user, exists := userGroups[v.Attachment.Gid]; exists && user != v.Spec.UserGroup { + return errors.New(i18n.T(kit, "different user group have the same GID, %s", v.Spec.UserGroup)) + } + + if uid, exists := gids[v.Spec.UserGroup]; exists && uid != v.Attachment.Gid { + return errors.New(i18n.T(kit, "different GID have the same user group, %s", v.Spec.UserGroup)) + } + + userGroups[v.Attachment.Gid] = v.Spec.UserGroup + gids[v.Spec.UserGroup] = v.Attachment.Gid + if err := s.handleUserGroupPrivilege(kit, tx, bizID, appID, templateSpaceID, v, isTemplate); err != nil { + return err + } + } + + return nil +} + +// 获取并处理 UserPrivilege 数据 +// nolint:goconst +func (s *Service) handleUserGroupPrivilege(kit *kit.Kit, tx *gen.QueryTx, bizID, appID, templateSpaceID uint32, + data *table.UserGroupPrivilege, isTemplate bool) error { + + if (data.Spec.UserGroup == "" || data.Spec.UserGroup == "root") && data.Attachment.Gid == 0 { + return nil + } + + // 验证 root 和 uid + if err := validateUserGroupAndGID(kit, data); err != nil { + return err + } + + existingGID, err := s.dao.UserGroupPrivilege().GetUserGroupPrivilegeByGid(kit, tx, bizID, appID, + templateSpaceID, data.Attachment.Gid) + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + return errf.Errorf(errf.DBOpFailed, i18n.T(kit, "create or update user group privilege failed, err: %v", err)) + } + + existingUserGroup, err := s.dao.UserGroupPrivilege().GetUserGroupPrivilegeByUserGroup(kit, tx, bizID, appID, + templateSpaceID, data.Spec.UserGroup) + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + return errf.Errorf(errf.DBOpFailed, i18n.T(kit, "create or update user group privilege failed, err: %v", err)) + } + + // gid 和 user group 都不存在新增数据 + if existingGID == nil && existingUserGroup == nil { + data.Spec.PrivilegeType = table.PrivilegeTypeCustom + data.Revision = &table.Revision{Creator: kit.User} + if _, err := s.dao.UserGroupPrivilege().CreateWithTx(kit, tx, data); err != nil { + return errf.Errorf(errf.DBOpFailed, i18n.T(kit, "create or update user group privilege failed, err: %v", err)) + } + return nil + } + + // gid 和 user group 都存在,且两者数据都相等的情况是不需要处理的 + if existingGID != nil && existingUserGroup != nil && existingGID.Attachment.Gid == existingUserGroup.Attachment.Gid && + existingGID.Spec.UserGroup == existingUserGroup.Spec.UserGroup { + return nil + } + + // gid 和 user group 都存在,但不相等 + if existingGID != nil && existingUserGroup != nil && existingGID.Attachment.Gid != existingUserGroup.Attachment.Gid && + existingGID.Spec.UserGroup != existingUserGroup.Spec.UserGroup { + return errf.Errorf(errf.DBOpFailed, i18n.T(kit, "the user group or GID already exists, userGroup: %s, gid: %d", + data.Spec.UserGroup, data.Attachment.Gid)) + } + + return s.upsertUserGroupPrivilege(kit, tx, bizID, appID, templateSpaceID, data, + existingGID, existingUserGroup, isTemplate) +} + +// upsertUserGroupPrivilege 创建或更新用户组的数据 +// 判断模板和非模板文件,更新对应的表数据 +func (s *Service) upsertUserGroupPrivilege(kit *kit.Kit, tx *gen.QueryTx, bizID, appID, templateSpaceID uint32, + data *table.UserGroupPrivilege, existingGID, existingUserGroup *table.UserGroupPrivilege, isTemplate bool) error { + + data.Revision = &table.Revision{Reviser: kit.User} + + if existingGID == nil { + return s.dao.UserGroupPrivilege().UpdateWithTx(kit, tx, existingUserGroup.ID, data) + } + + if existingUserGroup == nil { + if err := s.dao.UserGroupPrivilege().UpdateWithTx(kit, tx, existingGID.ID, data); err != nil { + return err + } + if isTemplate { + return s.dao.TemplateRevision().UpdateGroupPrivilegesWithTx(kit, tx, bizID, templateSpaceID, + existingGID.Spec.UserGroup, data.Spec.UserGroup) + } + return s.dao.ConfigItem().UpdateUserGroupPrivilegesWithTx(kit, tx, bizID, appID, existingGID.Spec.UserGroup, + data.Spec.UserGroup) + } + + return nil +} + +// 校验 user group 和 GID 逻辑 +func validateUserGroupAndGID(kit *kit.Kit, userGroupPrivilege *table.UserGroupPrivilege) error { + + // 检查 user group 是否为 root 且 gid 是否为 0 + if userGroupPrivilege.Spec.UserGroup == "root" && userGroupPrivilege.Attachment.Gid != 0 { + return errors.New(i18n.T(kit, "user group is root but GID is not 0")) + } + + // 检查 gid 是否为 0 且 user group 是否为 root + if userGroupPrivilege.Spec.UserGroup != "root" && userGroupPrivilege.Attachment.Gid == 0 { + return errors.New(i18n.T(kit, "GID is 0 but user group is not root")) + } + + return nil +} diff --git a/cmd/data-service/service/user_privilege.go b/cmd/data-service/service/user_privilege.go new file mode 100644 index 0000000000..c4d458160a --- /dev/null +++ b/cmd/data-service/service/user_privilege.go @@ -0,0 +1,551 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package service + +import ( + "context" + "errors" + "fmt" + "path" + + "gorm.io/gorm" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/criteria/errf" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/gen" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/i18n" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/logs" + pbbase "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/base" + pbds "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/data-service" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/types" +) + +// ListUserPrivileges 获取用户权限 +func (s *Service) ListUserPrivileges(ctx context.Context, req *pbds.ListUserPrivilegesReq) ( + *pbds.ListUserPrivilegesResp, error) { + kit := kit.FromGrpcContext(ctx) + + opt := &types.BasePage{Start: req.Start, Limit: uint(req.Limit), All: req.All} + if err := opt.Validate(types.DefaultPageOption); err != nil { + return nil, err + } + + data, count, err := s.dao.UserPrivilege().List(kit, req.BizId, req.AppId, req.TemplateSpaceId, req.Name, opt) + if err != nil { + return nil, err + } + + item := make([]*pbds.ListUserPrivilegesResp_Detail, 0, len(data)) + + for _, v := range data { + item = append(item, &pbds.ListUserPrivilegesResp_Detail{ + Id: v.ID, + Name: v.Spec.User, + PrivilegeType: string(v.Spec.PrivilegeType), + ReadOnly: v.Spec.ReadOnly, + Pid: v.Attachment.Uid, + }) + } + + return &pbds.ListUserPrivilegesResp{Count: uint32(count), Details: item}, nil +} + +// DeleteUserPrivilege 删除用户权限 +func (s *Service) DeleteUserPrivilege(ctx context.Context, req *pbds.DeleteUserPrivilegesReq) ( + *pbbase.EmptyResp, error) { + kit := kit.FromGrpcContext(ctx) + + // 获取删除的数据 + item, err := s.dao.UserPrivilege().GetUserPrivilege(kit, req.BizId, req.AppId, req.TemplateSpaceId, req.Id) + if err != nil { + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "get user privilege failed, err: %v", err)) + } + + if item.Spec.ReadOnly { + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "this user has read-only privilege")) + } + + tx := s.dao.GenQuery().Begin() + + if err = s.dao.UserPrivilege().DeleteWithTx(kit, tx, item); err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kit.Rid) + } + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "delete user privilege failed, err: %v", err)) + } + + if req.TemplateSpaceId != 0 && req.AppId == 0 { + // 删除模板版本中对应的用户权限 + err = s.dao.TemplateRevision().UpdateUserPrivilegesWithTx(kit, tx, req.BizId, + req.TemplateSpaceId, item.Spec.User, "") + if err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kit.Rid) + } + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "delete user privilege failed, err: %v", err)) + } + } + + if req.TemplateSpaceId == 0 && req.AppId != 0 { + // 删除未命名版本中对应的用户权限 + err = s.dao.ConfigItem().UpdateUserPrivilegesWithTx(kit, tx, req.BizId, + req.AppId, item.Spec.User, "") + if err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kit.Rid) + } + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "delete user privilege failed, err: %v", err)) + } + } + + if err = tx.Commit(); err != nil { + logs.Errorf("commit transaction failed, err: %v, rid: %s", err, kit.Rid) + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "delete user privilege failed, err: %v", err)) + } + + return &pbbase.EmptyResp{}, nil +} + +// batcheUpsertPermissionGroup 批量创建或更新权限组(包含用户和用户组) +func (s *Service) batcheUpsertPermissionGroup(kt *kit.Kit, tx *gen.QueryTx, bizID, appID, templateSpaceID uint32, + userPrivileges []*table.UserPrivilege, userGroupPrivileges []*table.UserGroupPrivilege, isTemplate bool) error { + + // 处理用户权限 + err := s.batcheUpsertUserPrivileges(kt, tx, bizID, appID, templateSpaceID, userPrivileges, isTemplate) + if err != nil { + return err + } + + // 处理用户组权限 + err = s.batcheUpsertUserGroupPrivileges(kt, tx, bizID, appID, templateSpaceID, userGroupPrivileges, isTemplate) + if err != nil { + return err + } + + return nil +} + +// upsertSinglePermissions 创建或更新单个权限(用户和用户组) +func (s *Service) upsertSinglePermissions(kit *kit.Kit, tx *gen.QueryTx, bizID, appID, templateSpaceID uint32, + userPrivilege *table.UserPrivilege, userGroupPrivilege *table.UserGroupPrivilege, isTemplate bool) error { + + // 更新用户权限 + err := s.handleUserPrivilege(kit, tx, bizID, appID, templateSpaceID, userPrivilege, isTemplate) + if err != nil { + return err + } + + // 更新用户组权限 + err = s.handleUserGroupPrivilege(kit, tx, bizID, appID, templateSpaceID, userGroupPrivilege, isTemplate) + if err != nil { + return err + } + + return nil +} + +// batcheUpsertUserPrivileges 批量创建或更新用户(只有用户) +func (s *Service) batcheUpsertUserPrivileges(kit *kit.Kit, tx *gen.QueryTx, bizID, appID, templateSpaceID uint32, + userPrivileges []*table.UserPrivilege, isTemplate bool) error { + // 创建两个 map 来追踪 uid -> user 和 user -> uid 的唯一性 + // 验证提交的权限数据存在唯一性 + users, uids := make(map[uint32]string), make(map[string]uint32) + for _, v := range userPrivileges { + // 不同的用户存在相同的uid + if user, exists := users[v.Attachment.Uid]; exists && user != v.Spec.User { + return errors.New(i18n.T(kit, "different user have the same UID, %s", v.Spec.User)) + } + + // 不同的uid存在相同的用户 + if uid, exists := uids[v.Spec.User]; exists && uid != v.Attachment.Uid { + return errors.New(i18n.T(kit, "different UID have the same user, %s", v.Spec.User)) + } + + users[v.Attachment.Uid] = v.Spec.User + uids[v.Spec.User] = v.Attachment.Uid + if err := s.handleUserPrivilege(kit, tx, bizID, appID, templateSpaceID, v, isTemplate); err != nil { + return err + } + } + + return nil +} + +// 获取配置项权限列表 +func (s *Service) listConfigItemPerms(kit *kit.Kit, bizID, appID uint32, + data []*table.ConfigItem) ([]*table.ConfigItem, error) { + + for _, v := range data { + permissions, err := s.getConfigItemPerms(kit, bizID, appID, v) + if err != nil { + return nil, err + } + v.Spec.Permission.Uid = permissions.Spec.Permission.Uid + v.Spec.Permission.Gid = permissions.Spec.Permission.Gid + } + + return data, nil +} + +// 获取单个配置项权限 +func (s *Service) getConfigItemPerms(kit *kit.Kit, bizID, appID uint32, + data *table.ConfigItem) (*table.ConfigItem, error) { + + // 查询对应服务下的所有权限 + userPrivileges, err := s.dao.UserPrivilege().ListUserPrivileges(kit, bizID, appID, 0) + if err != nil { + return data, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "get permissions under the app failed, err: %v", err)) + } + + userPrivilegesMap := map[string]uint32{} + for _, v := range userPrivileges { + userPrivilegesMap[v.User] = v.Uid + } + + userGroupPrivileges, err := s.dao.UserGroupPrivilege().ListUserGroupPrivileges(kit, bizID, appID, 0) + if err != nil { + return data, errf.Errorf(errf.DBOpFailed, + i18n.T(kit, "get user group permissions under the app failed, err: %v", err)) + } + + userGroupPrivilegesMap := map[string]uint32{} + for _, v := range userGroupPrivileges { + userGroupPrivilegesMap[v.UserGroup] = v.Gid + } + + data.Spec.Permission.Uid = userPrivilegesMap[data.Spec.Permission.User] + data.Spec.Permission.Gid = userGroupPrivilegesMap[data.Spec.Permission.UserGroup] + + return data, nil +} + +// 获取并处理 UserPrivilege 数据 +func (s *Service) handleUserPrivilege(kit *kit.Kit, tx *gen.QueryTx, bizID, appID, templateSpaceID uint32, + data *table.UserPrivilege, isTemplate bool) error { + + if (data.Spec.User == "" || data.Spec.User == "root") && data.Attachment.Uid == 0 { + return nil + } + + // 验证 user 和 uid + if err := validateUserAndUid(kit, data); err != nil { + return err + } + + existingUID, err := s.dao.UserPrivilege().GetUserPrivilegeByUid(kit, tx, bizID, appID, templateSpaceID, + data.Attachment.Uid) + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + return errf.Errorf(errf.DBOpFailed, i18n.T(kit, "create or update user privilege failed, err: %v", err)) + } + + existingUser, err := s.dao.UserPrivilege().GetUserPrivilegeByUser(kit, tx, bizID, appID, templateSpaceID, + data.Spec.User) + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + return errf.Errorf(errf.DBOpFailed, i18n.T(kit, "create or update user privilege failed, err: %v", err)) + } + + // uid 和 user 都不存在新增数据 + if existingUID == nil && existingUser == nil { + data.Spec.PrivilegeType = table.PrivilegeTypeCustom + data.Revision = &table.Revision{Creator: kit.User} + if _, err := s.dao.UserPrivilege().CreateWithTx(kit, tx, data); err != nil { + return errf.Errorf(errf.DBOpFailed, i18n.T(kit, "create or update user privilege failed, err: %v", err)) + } + return nil + } + + // 如果用户和 UID 相等,则无需处理 + if existingUID != nil && existingUser != nil && existingUID.Attachment.Uid == existingUser.Attachment.Uid && + existingUID.Spec.User == existingUser.Spec.User { + return nil + } + + // 如果用户或 UID 存在冲突 + if existingUID != nil && existingUser != nil && existingUID.Attachment.Uid != existingUser.Attachment.Uid && + existingUID.Spec.User != existingUser.Spec.User { + return errf.Errorf(errf.DBOpFailed, + i18n.T(kit, "the user or UID already exists, user: %s, uid: %d", data.Spec.User, data.Attachment.Uid)) + } + + return s.upsertUserPrivilege(kit, tx, bizID, appID, templateSpaceID, data, existingUID, existingUser, isTemplate) +} + +// upsertUserPrivilege 更新用户权限数据 +// 判断模板和非模板文件,更新对应的表数据 +func (s *Service) upsertUserPrivilege(kit *kit.Kit, tx *gen.QueryTx, bizID, appID, templateSpaceID uint32, + data *table.UserPrivilege, existingUID, existingUser *table.UserPrivilege, isTemplate bool) error { + + data.Revision = &table.Revision{Reviser: kit.User} + + if existingUID == nil { + return s.dao.UserPrivilege().UpdateWithTx(kit, tx, existingUser.ID, data) + } + + if existingUser == nil { + if err := s.dao.UserPrivilege().UpdateWithTx(kit, tx, existingUID.ID, data); err != nil { + return err + } + if isTemplate { + return s.dao.TemplateRevision().UpdateUserPrivilegesWithTx(kit, tx, bizID, + templateSpaceID, existingUID.Spec.User, data.Spec.User) + } + return s.dao.ConfigItem().UpdateUserPrivilegesWithTx(kit, tx, bizID, appID, existingUID.Spec.User, data.Spec.User) + } + + return nil +} + +// 校验 root 和 UID 逻辑 +func validateUserAndUid(kit *kit.Kit, data *table.UserPrivilege) error { + if data.Spec.User == "root" && data.Attachment.Uid != 0 { + return errors.New(i18n.T(kit, "user is root but UID is not 0")) + } + if data.Spec.User != "root" && data.Attachment.Uid == 0 { + return errors.New(i18n.T(kit, "UID is 0 but user is not root")) + } + return nil +} + +// handleTplRevPerms 获取模板版本权限列表 +func (s *Service) listTplRevPerms(kit *kit.Kit, bizID uint32, + tmplRevisions []*table.TemplateRevision) ([]*table.TemplateRevision, error) { + + templateSpaceIDs := []uint32{} + for _, v := range tmplRevisions { + templateSpaceIDs = append(templateSpaceIDs, v.Attachment.TemplateSpaceID) + } + + // 根据空间ID获取用户 + userPrivileges, err := s.dao.UserPrivilege().ListUserPrivsBySpaceIDs(kit, bizID, templateSpaceIDs) + if err != nil { + return tmplRevisions, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "get permissions under the app failed, err: %v", err)) + } + + // 初始化模板空间用户权限的 map + templateSpaceUserPrivs := make(map[uint32]map[string]uint32) + + for _, v := range userPrivileges { + // 检查并初始化内部 map + if templateSpaceUserPrivs[v.TemplateSpaceID] == nil { + templateSpaceUserPrivs[v.TemplateSpaceID] = make(map[string]uint32) + } + // 将用户和 UID 添加到内部 map 中 + templateSpaceUserPrivs[v.TemplateSpaceID][v.User] = v.Uid + } + + // 根据空间ID获取用户组 + userGroupPrivileges, err := s.dao.UserGroupPrivilege().ListGroupPrivsBySpaceIDs(kit, bizID, templateSpaceIDs) + if err != nil { + return tmplRevisions, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "get permissions under the app failed, err: %v", err)) + } + + // 初始化模板空间用户权限的 map + templateSpaceGroupPrivs := make(map[uint32]map[string]uint32) + + for _, v := range userGroupPrivileges { + // 检查并初始化内部 map + if templateSpaceGroupPrivs[v.TemplateSpaceID] == nil { + templateSpaceGroupPrivs[v.TemplateSpaceID] = make(map[string]uint32) + } + // 将用户和 GID 添加到内部 map 中 + templateSpaceGroupPrivs[v.TemplateSpaceID][v.UserGroup] = v.Gid + } + + for _, v := range tmplRevisions { + v.Spec.Permission.Uid = templateSpaceUserPrivs[v.Attachment.TemplateSpaceID][v.Spec.Permission.User] + v.Spec.Permission.Gid = templateSpaceGroupPrivs[v.Attachment.TemplateSpaceID][v.Spec.Permission.UserGroup] + } + + return tmplRevisions, nil +} + +// handleSingleTplRevPerm 获取模板版本权限 +func (s *Service) getTplRevPerm(kit *kit.Kit, bizID uint32, + tmplRevisions *table.TemplateRevision) (*table.TemplateRevision, error) { + if tmplRevisions == nil { + return nil, nil + } + + // 根据空间ID获取用户 + userPrivileges, err := s.dao.UserPrivilege().ListUserPrivsBySpaceIDs(kit, bizID, + []uint32{tmplRevisions.Attachment.TemplateSpaceID}) + if err != nil { + return tmplRevisions, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "get permissions under the app failed, err: %v", err)) + } + + // 根据空间ID获取用户组 + userGroupPrivileges, err := s.dao.UserGroupPrivilege().ListGroupPrivsBySpaceIDs(kit, bizID, + []uint32{tmplRevisions.Attachment.TemplateSpaceID}) + if err != nil { + return tmplRevisions, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "get permissions under the app failed, err: %v", err)) + } + + if len(userPrivileges) == 0 && len(userGroupPrivileges) == 0 { + return tmplRevisions, nil + } + + userPrivilegesMap, userGroupPrivilegesMap := map[string]uint32{}, map[string]uint32{} + for _, v := range userPrivileges { + userPrivilegesMap[v.User] = v.Uid + } + + for _, v := range userGroupPrivileges { + userGroupPrivilegesMap[v.UserGroup] = v.Gid + } + + tmplRevisions.Spec.Permission.Uid = userPrivilegesMap[tmplRevisions.Spec.Permission.User] + tmplRevisions.Spec.Permission.Gid = userPrivilegesMap[tmplRevisions.Spec.Permission.UserGroup] + + return tmplRevisions, nil +} + +// checkTplNonTplPerms 检测模板和非模板之间的权限 +func checkTplNonTplPerms(kit *kit.Kit, configItem []*table.ConfigItem, tmplRevisions []*table.TemplateRevision) error { + + var items []types.FileGroupPrivilege + + collectItems := func(name, path string, uid uint32, user string, gid uint32, userGroup string, + templateSpaceID uint32) { + items = append(items, types.FileGroupPrivilege{ + Name: name, + Path: path, + TemplateSpaceID: templateSpaceID, + Uid: uid, + User: user, + Gid: gid, + UserGroup: userGroup, + }) + } + + for _, v := range configItem { + collectItems(v.Spec.Name, v.Spec.Path, v.Spec.Permission.Uid, v.Spec.Permission.User, + v.Spec.Permission.Gid, v.Spec.Permission.UserGroup, 0) + } + for _, v := range tmplRevisions { + collectItems(v.Spec.Name, v.Spec.Path, v.Spec.Permission.Uid, v.Spec.Permission.User, + v.Spec.Permission.Gid, v.Spec.Permission.UserGroup, v.Attachment.TemplateSpaceID) + } + + if len(items) > 0 { + uidToItem, userToItem := make(map[uint32]types.FileGroupPrivilege), make(map[string]types.FileGroupPrivilege) + gidToItem, userGroupToItem := make(map[uint32]types.FileGroupPrivilege), make(map[string]types.FileGroupPrivilege) + + for _, v := range items { + // 检查 root 权限 + if err := checkRootUser(kit, v.User, v.Uid, v.UserGroup, v.Gid); err != nil { + return err + } + + // 检查 UID 和 User 唯一性 + if err := checkUIDUserUniqueness(kit, v, uidToItem, userToItem); err != nil { + return err + } + + // 检查 GID 和 UserGroup 唯一性 + if err := checkGIDUserGroupUniqueness(kit, v, gidToItem, userGroupToItem); err != nil { + return err + } + } + } + + return nil +} + +// 封装检查 UID 和 User 唯一性的逻辑,并生成冲突提示 +func checkUIDUserUniqueness(kit *kit.Kit, v types.FileGroupPrivilege, uidToItem map[uint32]types.FileGroupPrivilege, + userToItem map[string]types.FileGroupPrivilege) error { + privilegeType := "user" + // 检查 UID 的唯一性 + if existingItem, exists := uidToItem[v.Uid]; exists && existingItem.User != v.User { + // 生成冲突提示信息 + return createConflictError(kit, existingItem, v, privilegeType) + } + + // 检查用户的唯一性 + if existingItem, exists := userToItem[v.User]; exists && existingItem.Uid != v.Uid { + // 生成冲突提示信息 + return createConflictError(kit, existingItem, v, privilegeType) + } + + // 如果没有冲突,记录当前项 + uidToItem[v.Uid] = v + userToItem[v.User] = v + + return nil +} + +// 封装检查 GID 和 UserGroup 唯一性的逻辑,并生成冲突提示 +func checkGIDUserGroupUniqueness(kit *kit.Kit, v types.FileGroupPrivilege, + gidToItem map[uint32]types.FileGroupPrivilege, userGroupToItem map[string]types.FileGroupPrivilege) error { + + privilegeType := "user group" + // 检查 UID 的唯一性 + if existingItem, exists := gidToItem[v.Gid]; exists && existingItem.UserGroup != v.UserGroup { + // 生成冲突提示信息 + return createConflictError(kit, existingItem, v, privilegeType) + } + + // 检查用户的唯一性 + if existingItem, exists := userGroupToItem[v.UserGroup]; exists && existingItem.Gid != v.Gid { + // 生成冲突提示信息 + return createConflictError(kit, existingItem, v, privilegeType) + } + // 如果没有冲突,记录当前项 + gidToItem[v.Gid] = v + userGroupToItem[v.UserGroup] = v + + return nil +} + +// 生成冲突提示的函数 +func createConflictError(kit *kit.Kit, item1, item2 types.FileGroupPrivilege, privilegeType string) error { + // 基础的冲突提示 + conflictMsg := fmt.Sprintf("file %s and file %s have %s permission conflicts", + path.Join(item1.Path, item1.Name), path.Join(item2.Path, item2.Name), privilegeType) + + // 如果其中任一文件存在 TemplateSpaceID,则需要在提示中包含该信息 + // TODO 是否判断那个空间下的文件错误 + // if item1.TemplateSpaceID != 0 || item2.TemplateSpaceID != 0 { + // return errors.New(i18n.T(kit, "TemplateSpaceID involved: %d, %d. "+conflictMsg, + // item1.TemplateSpaceID, item2.TemplateSpaceID)) + // } + + // 返回标准冲突提示 + return errors.New(i18n.T(kit, conflictMsg)) +} + +// 检查 root 权限的逻辑 +func checkRootUser(kit *kit.Kit, user string, uid uint32, userGroup string, gid uint32) error { + // 定义一个检查函数 + check := func(name string, id uint32) error { + if name == "root" && id == 0 { + return nil + } + if name == "root" && id != 0 { + return errors.New(i18n.T(kit, "%s is root but ID is not 0", name)) + } + if name != "root" && id == 0 { + return errors.New(i18n.T(kit, "ID is 0 but %s is not root", name)) + } + return nil + } + + // 检查 user 和 uid + if err := check(user, uid); err != nil { + return err + } + + // 检查 userGroup 和 gid + return check(userGroup, gid) +} diff --git a/cmd/feed-server/bll/eventc/scheduler.go b/cmd/feed-server/bll/eventc/scheduler.go index d23cffa0f5..b40de3a05d 100644 --- a/cmd/feed-server/bll/eventc/scheduler.go +++ b/cmd/feed-server/bll/eventc/scheduler.go @@ -357,6 +357,8 @@ func (sch *Scheduler) buildEvent(inst *sfs.InstanceSpec, ciList []*types.Release User: cis.Permission.User, UserGroup: cis.Permission.UserGroup, Privilege: cis.Permission.Privilege, + Uid: cis.Permission.Uid, + Gid: cis.Permission.Gid, }, }, ConfigItemAttachment: &pbci.ConfigItemAttachment{ diff --git a/cmd/feed-server/bll/release/release.go b/cmd/feed-server/bll/release/release.go index 516111d167..3eaccad8e7 100644 --- a/cmd/feed-server/bll/release/release.go +++ b/cmd/feed-server/bll/release/release.go @@ -127,6 +127,8 @@ func (rs *ReleasedService) ListAppLatestReleaseMeta(kt *kit.Kit, opts *types.App User: one.ConfigItemSpec.Permission.User, UserGroup: one.ConfigItemSpec.Permission.UserGroup, Privilege: one.ConfigItemSpec.Permission.Privilege, + Uid: one.ConfigItemSpec.Permission.Uid, + Gid: one.ConfigItemSpec.Permission.Gid, }, }, ConfigItemAttachment: &pbci.ConfigItemAttachment{ diff --git a/cmd/feed-server/bll/release/watch.go b/cmd/feed-server/bll/release/watch.go index 517dccb477..bb82e8b233 100644 --- a/cmd/feed-server/bll/release/watch.go +++ b/cmd/feed-server/bll/release/watch.go @@ -125,7 +125,6 @@ func (wh *watchHandler) eventReceiver(event *eventc.Event, sn uint64) bool { wh.im.Meta.Fingerprint, err, rid) return false } - wm := &pbfs.FeedWatchMessage{ ApiVersion: sfs.CurrentAPIVersion, Rid: rid, diff --git a/pkg/dal/dao/config_item.go b/pkg/dal/dao/config_item.go index 87d43ba859..f28e4279a6 100644 --- a/pkg/dal/dao/config_item.go +++ b/pkg/dal/dao/config_item.go @@ -70,6 +70,11 @@ type ConfigItem interface { ListConfigItemCount(kit *kit.Kit, bizID uint32, appID []uint32) ([]types.ListConfigItemCount, error) // GetConfigItemCount 获取配置项数量带有事务 GetConfigItemCountWithTx(kit *kit.Kit, tx *gen.QueryTx, bizID uint32, appID uint32) (int64, error) + // UpdateUserPrivilegesWithTx 更新指定用户权限的配置项 (只是更新了user这个字段数据) + UpdateUserPrivilegesWithTx(kit *kit.Kit, tx *gen.QueryTx, bizID, appID uint32, user, newUser string) error + // UpdateUserGroupPrivilegesWithTx 更新指定用户组权限的配置项 (只是更新了user_group这个字段数据) + UpdateUserGroupPrivilegesWithTx(kit *kit.Kit, tx *gen.QueryTx, bizID, appID uint32, + userGroup, newUserGroup string) error } var _ ConfigItem = new(configItemDao) @@ -81,6 +86,30 @@ type configItemDao struct { lock LockDao } +// UpdateUserGroupPrivilegesWithTx implements ConfigItem. +func (dao *configItemDao) UpdateUserGroupPrivilegesWithTx(kit *kit.Kit, tx *gen.QueryTx, bizID uint32, + appID uint32, userGroup string, newUserGroup string) error { + m := tx.ConfigItem + + _, err := tx.ConfigItem.WithContext(kit.Ctx). + Where(m.BizID.Eq(bizID), m.AppID.Eq(appID), m.UserGroup.Eq(userGroup)). + Update(m.UserGroup, newUserGroup) + + return err +} + +// UpdateUserPrivilegesWithTx implements ConfigItem. +func (dao *configItemDao) UpdateUserPrivilegesWithTx(kit *kit.Kit, tx *gen.QueryTx, bizID uint32, + appID uint32, user, newUser string) error { + m := tx.ConfigItem + + _, err := tx.ConfigItem.WithContext(kit.Ctx). + Where(m.BizID.Eq(bizID), m.AppID.Eq(appID), m.User.Eq(user)). + Update(m.User, newUser) + + return err +} + // GetConfigItemCountWithTx 获取配置项数量带有事务 func (dao *configItemDao) GetConfigItemCountWithTx(kit *kit.Kit, tx *gen.QueryTx, bizID uint32, appID uint32) (int64, error) { @@ -189,7 +218,8 @@ func (dao *configItemDao) RecoverConfigItem(kit *kit.Kit, tx *gen.QueryTx, ci *t ad := dao.auditDao.DecoratorV2(kit, ci.Attachment.BizID).PrepareCreate(ci) - if err := tx.ConfigItem.WithContext(kit.Ctx).Create(ci); err != nil { + m := dao.genQ.ConfigItem + if err := tx.ConfigItem.WithContext(kit.Ctx).Omit(m.Uid, m.Gid).Create(ci); err != nil { return err } @@ -234,7 +264,8 @@ func (dao *configItemDao) CreateWithTx(kit *kit.Kit, tx *gen.QueryTx, ci *table. ci.ID = id ad := dao.auditDao.DecoratorV2(kit, ci.Attachment.BizID).PrepareCreate(ci) - if err := tx.ConfigItem.WithContext(kit.Ctx).Create(ci); err != nil { + m := dao.genQ.ConfigItem + if err := tx.ConfigItem.WithContext(kit.Ctx).Omit(m.Uid, m.Gid).Create(ci); err != nil { return 0, err } @@ -264,7 +295,8 @@ func (dao *configItemDao) BatchCreateWithTx(kit *kit.Kit, tx *gen.QueryTx, } configItem.ID = ids[i] } - if err := tx.ConfigItem.WithContext(kit.Ctx).CreateInBatches(configItems, 500); err != nil { + m := dao.genQ.ConfigItem + if err := tx.ConfigItem.WithContext(kit.Ctx).Omit(m.Uid, m.Gid).CreateInBatches(configItems, 500); err != nil { return err } return nil @@ -307,7 +339,7 @@ func (dao *configItemDao) Update(kit *kit.Kit, ci *table.ConfigItem) error { updateTx := func(tx *gen.Query) error { q = tx.ConfigItem.WithContext(kit.Ctx) - if _, err = q.Omit(m.ID, m.BizID, m.AppID). + if _, err = q.Omit(m.ID, m.BizID, m.AppID, m.Uid, m.Gid). Where(m.ID.Eq(ci.ID), m.BizID.Eq(ci.Attachment.BizID)).Updates(ci); err != nil { return err } @@ -334,7 +366,9 @@ func (dao *configItemDao) BatchUpdateWithTx(kit *kit.Kit, tx *gen.QueryTx, confi if len(configItems) == 0 { return nil } - if err := tx.ConfigItem.WithContext(kit.Ctx).Save(configItems...); err != nil { + + m := dao.genQ.ConfigItem + if err := tx.ConfigItem.WithContext(kit.Ctx).Omit(m.Uid, m.Gid).Save(configItems...); err != nil { return err } return nil diff --git a/pkg/dal/dao/dao.go b/pkg/dal/dao/dao.go index 14aaa965b1..b7008f077f 100644 --- a/pkg/dal/dao/dao.go +++ b/pkg/dal/dao/dao.go @@ -70,6 +70,8 @@ type Set interface { Client() Client ClientEvent() ClientEvent ClientQuery() ClientQuery + UserPrivilege() UserPrivilege + UserGroupPrivilege() UserGroupPrivilege } // NewDaoSet create the DAO set instance. @@ -489,3 +491,21 @@ func (s *set) ClientQuery() ClientQuery { genQ: s.genQ, } } + +// UserPrivilege implements Set. +func (s *set) UserPrivilege() UserPrivilege { + return &userPrivilegeDao{ + idGen: s.idGen, + auditDao: s.auditDao, + genQ: s.genQ, + } +} + +// UserGroupPrivilege implements Set. +func (s *set) UserGroupPrivilege() UserGroupPrivilege { + return &userGroupPrivilegeDao{ + idGen: s.idGen, + auditDao: s.auditDao, + genQ: s.genQ, + } +} diff --git a/pkg/dal/dao/template_revision.go b/pkg/dal/dao/template_revision.go index 7e9192845a..8343fe8068 100644 --- a/pkg/dal/dao/template_revision.go +++ b/pkg/dal/dao/template_revision.go @@ -63,6 +63,12 @@ type TemplateRevision interface { templateIDs []uint32) ([]*table.TemplateRevision, error) // ListAllCISigns lists all template ci of one biz, no need care about apps for the unbound template ci ListAllCISigns(kit *kit.Kit, bizID uint32) ([]string, error) + // UpdateUserPrivilegesWithTx 更新指定用户权限的配置项 (只是更新了user这个字段数据) + UpdateUserPrivilegesWithTx(kit *kit.Kit, tx *gen.QueryTx, bizID, templateSpaceID uint32, + user, newUser string) error + // UpdateGroupPrivilegesWithTx 更新指定用户组权限的配置项 (只是更新了user_group这个字段数据) + UpdateGroupPrivilegesWithTx(kit *kit.Kit, tx *gen.QueryTx, bizID, templateSpaceID uint32, + userGroup, newUserGroup string) error } var _ TemplateRevision = new(templateRevisionDao) @@ -73,6 +79,30 @@ type templateRevisionDao struct { auditDao AuditDao } +// UpdateGroupPrivilegesWithTx implements TemplateRevision. +func (dao *templateRevisionDao) UpdateGroupPrivilegesWithTx(kit *kit.Kit, tx *gen.QueryTx, bizID uint32, + templateSpaceID uint32, userGroup string, newUserGroup string) error { + m := tx.TemplateRevision + + _, err := tx.TemplateRevision.WithContext(kit.Ctx). + Where(m.BizID.Eq(bizID), m.TemplateSpaceID.Eq(templateSpaceID), m.UserGroup.Eq(userGroup)). + Update(m.UserGroup, newUserGroup) + + return err +} + +// UpdateUserPrivilegesWithTx implements TemplateRevision. +func (dao *templateRevisionDao) UpdateUserPrivilegesWithTx(kit *kit.Kit, tx *gen.QueryTx, bizID uint32, + templateSpaceID uint32, user string, newUser string) error { + m := tx.TemplateRevision + + _, err := tx.TemplateRevision.WithContext(kit.Ctx). + Where(m.BizID.Eq(bizID), m.TemplateSpaceID.Eq(templateSpaceID), m.User.Eq(user)). + Update(m.User, newUser) + + return err +} + // ListLatestGroupByTemplateIdsWithTx Lists the latest version groups by template ids with transaction. func (dao *templateRevisionDao) ListLatestGroupByTemplateIdsWithTx(kit *kit.Kit, tx *gen.QueryTx, bizID uint32, templateIDs []uint32) ([]*table.TemplateRevision, error) { @@ -133,11 +163,11 @@ func (dao *templateRevisionDao) Create(kit *kit.Kit, g *table.TemplateRevision) g.ID = id ad := dao.auditDao.DecoratorV2(kit, g.Attachment.BizID).PrepareCreate(g) - + m := dao.genQ.TemplateRevision // 多个使用事务处理 createTx := func(tx *gen.Query) error { q := tx.TemplateRevision.WithContext(kit.Ctx) - if err := q.Create(g); err != nil { + if err := q.Omit(m.Uid, m.Gid).Create(g); err != nil { return err } @@ -166,9 +196,9 @@ func (dao *templateRevisionDao) CreateWithTx(kit *kit.Kit, tx *gen.QueryTx, g *t return 0, err } g.ID = id - + m := dao.genQ.TemplateRevision q := tx.TemplateRevision.WithContext(kit.Ctx) - if err := q.Create(g); err != nil { + if err := q.Omit(m.Uid, m.Gid).Create(g); err != nil { return 0, err } @@ -331,7 +361,8 @@ func (dao *templateRevisionDao) BatchCreateWithTx(kit *kit.Kit, tx *gen.QueryTx, } item.ID = ids[i] } - return tx.Query.TemplateRevision.WithContext(kit.Ctx).CreateInBatches(revisions, 200) + m := dao.genQ.TemplateRevision + return tx.Query.TemplateRevision.WithContext(kit.Ctx).Omit(m.Uid, m.Gid).CreateInBatches(revisions, 200) } // ListLatestRevisionsGroupByTemplateIds Lists the latest version groups by template ids diff --git a/pkg/dal/dao/user_group_privilege.go b/pkg/dal/dao/user_group_privilege.go new file mode 100644 index 0000000000..0146e4314f --- /dev/null +++ b/pkg/dal/dao/user_group_privilege.go @@ -0,0 +1,189 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package dao + +import ( + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/criteria/errf" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/gen" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/i18n" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/types" +) + +// UserGroupPrivilege supplies all the user privileges related operations. +type UserGroupPrivilege interface { + // CreateWithTx create one user privileges instance with transaction. + CreateWithTx(kit *kit.Kit, tx *gen.QueryTx, data *table.UserGroupPrivilege) (uint32, error) + // UpdateWithTx Update one user privileges instance with transaction. + UpdateWithTx(kit *kit.Kit, tx *gen.QueryTx, id uint32, data *table.UserGroupPrivilege) error + // GetUserGroupPrivilegeByGid 通过用户组名获取用户组数据 + GetUserGroupPrivilegeByUserGroup(kit *kit.Kit, tx *gen.QueryTx, bizID, appID, + templateSpaceID uint32, name string) (*table.UserGroupPrivilege, error) + // GetUserGroupPrivilegeByGid 通过gid获取用户组数据 + GetUserGroupPrivilegeByGid(kit *kit.Kit, tx *gen.QueryTx, bizID, appID, templateSpaceID, gid uint32) ( + *table.UserGroupPrivilege, error) + // List 获取用户组数据列表 + List(kit *kit.Kit, bizID, appID, templateSpaceID uint32, name string, + opt *types.BasePage) ([]*table.UserGroupPrivilege, int64, error) + // GetUserGroupPrivilege 获取用户组权限数据 + GetUserGroupPrivilege(kit *kit.Kit, bizID, appID, templateSpaceID, id uint32) (*table.UserGroupPrivilege, error) + // DeleteWithTx delete one user group privileges instance with transaction. + DeleteWithTx(kit *kit.Kit, tx *gen.QueryTx, data *table.UserGroupPrivilege) error + // ListUserPrivileges xxx + ListUserGroupPrivileges(kit *kit.Kit, bizID, appID, templateSpaceID uint32) ([]types.UserGroupPrivilege, error) + ListGroupPrivsBySpaceIDs(kit *kit.Kit, bizID uint32, templateSpaceID []uint32) ([]types.UserGroupPrivilege, error) +} + +var _ UserGroupPrivilege = new(userGroupPrivilegeDao) + +type userGroupPrivilegeDao struct { + genQ *gen.Query + idGen IDGenInterface + auditDao AuditDao +} + +// ListGroupPrivsBySpaceIDs implements UserGroupPrivilege. +func (dao *userGroupPrivilegeDao) ListGroupPrivsBySpaceIDs(kit *kit.Kit, bizID uint32, templateSpaceID []uint32) ( + []types.UserGroupPrivilege, error) { + m := dao.genQ.UserGroupPrivilege + + var userGroupPrivileges []types.UserGroupPrivilege + + err := dao.genQ.UserGroupPrivilege.WithContext(kit.Ctx). + Where(m.BizID.Eq(bizID), m.TemplateSpaceID.In(templateSpaceID...)). + Or(m.PrivilegeType.Eq(table.System)). + Scan(&userGroupPrivileges) + if err != nil { + return nil, err + } + + return userGroupPrivileges, nil +} + +// ListUserGroupPrivileges implements UserGroupPrivilege. +func (dao *userGroupPrivilegeDao) ListUserGroupPrivileges(kit *kit.Kit, bizID uint32, appID uint32, + templateSpaceID uint32) ([]types.UserGroupPrivilege, error) { + m := dao.genQ.UserGroupPrivilege + + var userGroupPrivileges []types.UserGroupPrivilege + + err := dao.genQ.UserGroupPrivilege.WithContext(kit.Ctx).Where(m.BizID.Eq(bizID), + m.AppID.Eq(appID), m.TemplateSpaceID.Eq(templateSpaceID)).Scan(&userGroupPrivileges) + if err != nil { + return nil, err + } + + return userGroupPrivileges, nil +} + +// DeleteWithTx implements UserGroupPrivilege. +func (dao *userGroupPrivilegeDao) DeleteWithTx(kit *kit.Kit, tx *gen.QueryTx, + data *table.UserGroupPrivilege) error { + m := tx.UserGroupPrivilege + + _, err := tx.UserGroupPrivilege.WithContext(kit.Ctx). + Where(m.ID.Eq(data.ID), m.BizID.Eq(data.Attachment.BizID), m.AppID.Eq(data.Attachment.AppID), + m.TemplateSpaceID.Eq(data.Attachment.TemplateSpaceID)). + Delete(data) + + return err +} + +// GetUserGroupPrivilege implements UserGroupPrivilege. +func (dao *userGroupPrivilegeDao) GetUserGroupPrivilege(kit *kit.Kit, bizID uint32, appID uint32, + templateSpaceID uint32, id uint32) (*table.UserGroupPrivilege, error) { + m := dao.genQ.UserGroupPrivilege + + return dao.genQ.UserGroupPrivilege.WithContext(kit.Ctx).Where(m.ID.Eq(id), m.BizID.Eq(bizID), + m.AppID.Eq(appID), m.TemplateSpaceID.Eq(templateSpaceID)).Take() +} + +// GetUserGroupPrivilegeByGid implements UserGroupPrivilege. +func (dao *userGroupPrivilegeDao) GetUserGroupPrivilegeByGid(kit *kit.Kit, tx *gen.QueryTx, bizID uint32, + appID uint32, templateSpaceID uint32, gid uint32) (*table.UserGroupPrivilege, error) { + m := dao.genQ.UserGroupPrivilege + + return tx.UserGroupPrivilege.WithContext(kit.Ctx).Where(m.BizID.Eq(bizID), + m.AppID.Eq(appID), m.TemplateSpaceID.Eq(templateSpaceID), m.Gid.Eq(gid)).Take() +} + +// GetUserGroupPrivilegeByUserGroup implements UserGroupPrivilege. +func (dao *userGroupPrivilegeDao) GetUserGroupPrivilegeByUserGroup(kit *kit.Kit, tx *gen.QueryTx, bizID uint32, + appID uint32, templateSpaceID uint32, name string) (*table.UserGroupPrivilege, error) { + m := dao.genQ.UserGroupPrivilege + + return tx.UserGroupPrivilege.WithContext(kit.Ctx).Where(m.BizID.Eq(bizID), + m.AppID.Eq(appID), m.TemplateSpaceID.Eq(templateSpaceID), m.UserGroup.Eq(name)).Take() +} + +// ListUserGroupPrivileges implements UserPrivilege. +func (dao *userGroupPrivilegeDao) List(kit *kit.Kit, bizID uint32, appID, templateSpaceID uint32, + name string, opt *types.BasePage) ([]*table.UserGroupPrivilege, int64, error) { + + m := dao.genQ.UserGroupPrivilege + q := dao.genQ.UserGroupPrivilege.WithContext(kit.Ctx). + Where(m.BizID.Eq(bizID), m.AppID.Eq(appID), m.TemplateSpaceID.Eq(templateSpaceID)). + Or(m.PrivilegeType.Eq(table.System)) + + if name != "" { + q = q.Where(m.UserGroup.Like("%" + name + "%")) + } + + if opt.All { + result, err := q.Find() + if err != nil { + return nil, 0, err + } + return result, int64(len(result)), err + } + + return q.FindByPage(opt.Offset(), opt.LimitInt()) +} + +// CreateWithTx implements UserPrivilege. +func (dao *userGroupPrivilegeDao) CreateWithTx(kit *kit.Kit, tx *gen.QueryTx, + data *table.UserGroupPrivilege) (uint32, error) { + + if data == nil { + return 0, errf.ErrInvalidArgF(kit) + } + + // generate an user privilege id and update to user privilege. + id, err := dao.idGen.One(kit, table.UserPrivilegeTable) + if err != nil { + return 0, err + } + + data.ID = id + + if err := tx.UserGroupPrivilege.WithContext(kit.Ctx).Create(data); err != nil { + return 0, errf.Errorf(errf.DBOpFailed, i18n.T(kit, "create user group permissions failed, err: %v", err)) + } + + return data.ID, nil +} + +// UpdateWithTx implements UserPrivilege. +func (dao *userGroupPrivilegeDao) UpdateWithTx(kit *kit.Kit, tx *gen.QueryTx, id uint32, + data *table.UserGroupPrivilege) error { + + m := dao.genQ.UserGroupPrivilege + + _, err := tx.UserGroupPrivilege.WithContext(kit.Ctx).Where(m.ID.Eq(id)).Updates(data) + if err != nil { + return errf.Errorf(errf.DBOpFailed, i18n.T(kit, "update user group permissions failed, err: %v", err)) + } + + return nil +} diff --git a/pkg/dal/dao/user_privilege.go b/pkg/dal/dao/user_privilege.go new file mode 100644 index 0000000000..b269d2f212 --- /dev/null +++ b/pkg/dal/dao/user_privilege.go @@ -0,0 +1,184 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package dao + +import ( + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/criteria/errf" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/gen" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/types" +) + +// UserPrivilege supplies all the user privileges related operations. +type UserPrivilege interface { + // CreateWithTx create one user privileges instance with transaction. + CreateWithTx(kit *kit.Kit, tx *gen.QueryTx, userPrivilege *table.UserPrivilege) (uint32, error) + // UpdateWithTx Update one user privileges instance with transaction. + UpdateWithTx(kit *kit.Kit, tx *gen.QueryTx, id uint32, userPrivilege *table.UserPrivilege) error + // List user privileges with options. + List(kit *kit.Kit, bizID, appID, templateSpaceID uint32, name string, + opt *types.BasePage) ([]*table.UserPrivilege, int64, error) + GetUserPrivilegeByUser(kit *kit.Kit, tx *gen.QueryTx, bizID, appID, templateSpaceID uint32, name string) ( + *table.UserPrivilege, error) + GetUserPrivilegeByUid(kit *kit.Kit, tx *gen.QueryTx, bizID, appID, templateSpaceID, uid uint32) ( + *table.UserPrivilege, error) + GetUserPrivilege(kit *kit.Kit, bizID, appID, templateSpaceID, id uint32) (*table.UserPrivilege, error) + // DeleteWithTx delete one user privileges instance with transaction. + DeleteWithTx(kit *kit.Kit, tx *gen.QueryTx, data *table.UserPrivilege) error + // ListUserPrivileges xxx + ListUserPrivileges(kit *kit.Kit, bizID, appID, templateSpaceID uint32) ([]types.UserPrivilege, error) + // ListUserPrivsBySpaceIDs xxx + ListUserPrivsBySpaceIDs(kit *kit.Kit, bizID uint32, templateSpaceIDs []uint32) ([]types.UserPrivilege, error) +} + +var _ UserPrivilege = new(userPrivilegeDao) + +type userPrivilegeDao struct { + genQ *gen.Query + idGen IDGenInterface + auditDao AuditDao +} + +// ListUserPrivsBySpaceIDs implements UserPrivilege. +func (dao *userPrivilegeDao) ListUserPrivsBySpaceIDs(kit *kit.Kit, bizID uint32, + templateSpaceIDs []uint32) ([]types.UserPrivilege, error) { + m := dao.genQ.UserPrivilege + var userPrivileges []types.UserPrivilege + + err := dao.genQ.UserPrivilege.WithContext(kit.Ctx).Where(m.BizID.Eq(bizID), + m.TemplateSpaceID.In(templateSpaceIDs...)).Or(m.PrivilegeType.Eq(table.System)).Scan(&userPrivileges) + if err != nil { + return nil, err + } + + return userPrivileges, nil +} + +// ListUserPrivileges implements UserPrivilege. +func (dao *userPrivilegeDao) ListUserPrivileges(kit *kit.Kit, bizID uint32, appID uint32, + templateSpaceID uint32) ([]types.UserPrivilege, error) { + m := dao.genQ.UserPrivilege + + var userPrivileges []types.UserPrivilege + + err := dao.genQ.UserPrivilege.WithContext(kit.Ctx).Where(m.BizID.Eq(bizID), + m.AppID.Eq(appID), m.TemplateSpaceID.Eq(templateSpaceID)).Scan(&userPrivileges) + if err != nil { + return nil, err + } + + return userPrivileges, nil +} + +// DeleteWithTx implements UserPrivilege. +func (dao *userPrivilegeDao) DeleteWithTx(kit *kit.Kit, tx *gen.QueryTx, data *table.UserPrivilege) error { + + m := tx.UserPrivilege + + _, err := tx.UserPrivilege.WithContext(kit.Ctx). + Where(m.ID.Eq(data.ID), m.BizID.Eq(data.Attachment.BizID), m.AppID.Eq(data.Attachment.AppID), + m.TemplateSpaceID.Eq(data.Attachment.TemplateSpaceID)). + Delete(data) + + return err +} + +// GetUserPrivilege implements UserPrivilege. +func (dao *userPrivilegeDao) GetUserPrivilege(kit *kit.Kit, bizID uint32, appID uint32, + templateSpaceID, id uint32) (*table.UserPrivilege, error) { + m := dao.genQ.UserPrivilege + + return dao.genQ.UserPrivilege.WithContext(kit.Ctx).Where(m.ID.Eq(id), m.BizID.Eq(bizID), + m.AppID.Eq(appID), m.TemplateSpaceID.Eq(templateSpaceID)).Take() +} + +// GetUserPrivilegeByUid implements UserPrivilege. +func (dao *userPrivilegeDao) GetUserPrivilegeByUid(kit *kit.Kit, tx *gen.QueryTx, bizID uint32, appID uint32, + templateSpaceID uint32, uid uint32) (*table.UserPrivilege, error) { + m := dao.genQ.UserPrivilege + + return tx.UserPrivilege.WithContext(kit.Ctx).Where(m.BizID.Eq(bizID), m.AppID.Eq(appID), + m.TemplateSpaceID.Eq(templateSpaceID), m.Uid.Eq(uid)).Take() +} + +// GetUserPrivilegeByUser implements UserPrivilege. +func (dao *userPrivilegeDao) GetUserPrivilegeByUser(kit *kit.Kit, tx *gen.QueryTx, bizID uint32, appID uint32, + templateSpaceID uint32, name string) (*table.UserPrivilege, error) { + + m := dao.genQ.UserPrivilege + + return tx.UserPrivilege.WithContext(kit.Ctx).Where(m.BizID.Eq(bizID), + m.AppID.Eq(appID), m.TemplateSpaceID.Eq(templateSpaceID), m.User.Eq(name)).Take() +} + +// ListUserGroupPrivileges implements UserPrivilege. +func (dao *userPrivilegeDao) List(kit *kit.Kit, bizID uint32, appID, templateSpaceID uint32, + name string, opt *types.BasePage) ([]*table.UserPrivilege, int64, error) { + + m := dao.genQ.UserPrivilege + q := dao.genQ.UserPrivilege.WithContext(kit.Ctx). + Where(m.BizID.Eq(bizID), m.AppID.Eq(appID), m.TemplateSpaceID.Eq(templateSpaceID)). + Or(m.PrivilegeType.Eq(table.System)) + + if name != "" { + q = q.Where(m.User.Like("%" + name + "%")) + } + + if opt.All { + result, err := q.Find() + if err != nil { + return nil, 0, err + } + return result, int64(len(result)), err + } + + return q.FindByPage(opt.Offset(), opt.LimitInt()) +} + +// CreateWithTx implements UserPrivilege. +func (dao *userPrivilegeDao) CreateWithTx(kit *kit.Kit, tx *gen.QueryTx, + userPrivilege *table.UserPrivilege) (uint32, error) { + + if userPrivilege == nil { + return 0, errf.ErrInvalidArgF(kit) + } + + // generate an user privilege id and update to user privilege. + id, err := dao.idGen.One(kit, table.UserPrivilegeTable) + if err != nil { + return 0, err + } + + userPrivilege.ID = id + + if err := tx.UserPrivilege.WithContext(kit.Ctx).Create(userPrivilege); err != nil { + return 0, err + } + + return userPrivilege.ID, nil +} + +// UpdateWithTx implements UserPrivilege. +func (dao *userPrivilegeDao) UpdateWithTx(kit *kit.Kit, tx *gen.QueryTx, id uint32, + userPrivilege *table.UserPrivilege) error { + + m := dao.genQ.UserPrivilege + + _, err := tx.UserPrivilege.WithContext(kit.Ctx).Where(m.ID.Eq(id)).Updates(userPrivilege) + if err != nil { + return err + } + + return nil +} diff --git a/pkg/dal/gen/config_items.gen.go b/pkg/dal/gen/config_items.gen.go index 73f004c529..48670162be 100644 --- a/pkg/dal/gen/config_items.gen.go +++ b/pkg/dal/gen/config_items.gen.go @@ -36,6 +36,8 @@ func newConfigItem(db *gorm.DB, opts ...gen.DOOption) configItem { _configItem.User = field.NewString(tableName, "user") _configItem.UserGroup = field.NewString(tableName, "user_group") _configItem.Privilege = field.NewString(tableName, "privilege") + _configItem.Uid = field.NewUint32(tableName, "uid") + _configItem.Gid = field.NewUint32(tableName, "gid") _configItem.BizID = field.NewUint32(tableName, "biz_id") _configItem.AppID = field.NewUint32(tableName, "app_id") _configItem.Creator = field.NewString(tableName, "creator") @@ -61,6 +63,8 @@ type configItem struct { User field.String UserGroup field.String Privilege field.String + Uid field.Uint32 + Gid field.Uint32 BizID field.Uint32 AppID field.Uint32 Creator field.String @@ -92,6 +96,8 @@ func (c *configItem) updateTableName(table string) *configItem { c.User = field.NewString(table, "user") c.UserGroup = field.NewString(table, "user_group") c.Privilege = field.NewString(table, "privilege") + c.Uid = field.NewUint32(table, "uid") + c.Gid = field.NewUint32(table, "gid") c.BizID = field.NewUint32(table, "biz_id") c.AppID = field.NewUint32(table, "app_id") c.Creator = field.NewString(table, "creator") @@ -124,7 +130,7 @@ func (c *configItem) GetFieldByName(fieldName string) (field.OrderExpr, bool) { } func (c *configItem) fillFieldMap() { - c.fieldMap = make(map[string]field.Expr, 15) + c.fieldMap = make(map[string]field.Expr, 17) c.fieldMap["id"] = c.ID c.fieldMap["name"] = c.Name c.fieldMap["path"] = c.Path @@ -134,6 +140,8 @@ func (c *configItem) fillFieldMap() { c.fieldMap["user"] = c.User c.fieldMap["user_group"] = c.UserGroup c.fieldMap["privilege"] = c.Privilege + c.fieldMap["uid"] = c.Uid + c.fieldMap["gid"] = c.Gid c.fieldMap["biz_id"] = c.BizID c.fieldMap["app_id"] = c.AppID c.fieldMap["creator"] = c.Creator diff --git a/pkg/dal/gen/gen.go b/pkg/dal/gen/gen.go index f6bffa9017..110da8c46e 100644 --- a/pkg/dal/gen/gen.go +++ b/pkg/dal/gen/gen.go @@ -51,6 +51,8 @@ var ( TemplateSet *templateSet TemplateSpace *templateSpace TemplateVariable *templateVariable + UserGroupPrivilege *userGroupPrivilege + UserPrivilege *userPrivilege ) func SetDefault(db *gorm.DB, opts ...gen.DOOption) { @@ -89,6 +91,8 @@ func SetDefault(db *gorm.DB, opts ...gen.DOOption) { TemplateSet = &Q.TemplateSet TemplateSpace = &Q.TemplateSpace TemplateVariable = &Q.TemplateVariable + UserGroupPrivilege = &Q.UserGroupPrivilege + UserPrivilege = &Q.UserPrivilege } func Use(db *gorm.DB, opts ...gen.DOOption) *Query { @@ -128,6 +132,8 @@ func Use(db *gorm.DB, opts ...gen.DOOption) *Query { TemplateSet: newTemplateSet(db, opts...), TemplateSpace: newTemplateSpace(db, opts...), TemplateVariable: newTemplateVariable(db, opts...), + UserGroupPrivilege: newUserGroupPrivilege(db, opts...), + UserPrivilege: newUserPrivilege(db, opts...), } } @@ -168,6 +174,8 @@ type Query struct { TemplateSet templateSet TemplateSpace templateSpace TemplateVariable templateVariable + UserGroupPrivilege userGroupPrivilege + UserPrivilege userPrivilege } func (q *Query) Available() bool { return q.db != nil } @@ -209,6 +217,8 @@ func (q *Query) clone(db *gorm.DB) *Query { TemplateSet: q.TemplateSet.clone(db), TemplateSpace: q.TemplateSpace.clone(db), TemplateVariable: q.TemplateVariable.clone(db), + UserGroupPrivilege: q.UserGroupPrivilege.clone(db), + UserPrivilege: q.UserPrivilege.clone(db), } } @@ -257,6 +267,8 @@ func (q *Query) ReplaceDB(db *gorm.DB) *Query { TemplateSet: q.TemplateSet.replaceDB(db), TemplateSpace: q.TemplateSpace.replaceDB(db), TemplateVariable: q.TemplateVariable.replaceDB(db), + UserGroupPrivilege: q.UserGroupPrivilege.replaceDB(db), + UserPrivilege: q.UserPrivilege.replaceDB(db), } } @@ -295,6 +307,8 @@ type queryCtx struct { TemplateSet ITemplateSetDo TemplateSpace ITemplateSpaceDo TemplateVariable ITemplateVariableDo + UserGroupPrivilege IUserGroupPrivilegeDo + UserPrivilege IUserPrivilegeDo } func (q *Query) WithContext(ctx context.Context) *queryCtx { @@ -333,6 +347,8 @@ func (q *Query) WithContext(ctx context.Context) *queryCtx { TemplateSet: q.TemplateSet.WithContext(ctx), TemplateSpace: q.TemplateSpace.WithContext(ctx), TemplateVariable: q.TemplateVariable.WithContext(ctx), + UserGroupPrivilege: q.UserGroupPrivilege.WithContext(ctx), + UserPrivilege: q.UserPrivilege.WithContext(ctx), } } diff --git a/pkg/dal/gen/released_app_templates.gen.go b/pkg/dal/gen/released_app_templates.gen.go index e3fd4642d7..cbb4056117 100644 --- a/pkg/dal/gen/released_app_templates.gen.go +++ b/pkg/dal/gen/released_app_templates.gen.go @@ -42,14 +42,16 @@ func newReleasedAppTemplate(db *gorm.DB, opts ...gen.DOOption) releasedAppTempla _releasedAppTemplate.TemplateRevisionMemo = field.NewString(tableName, "template_revision_memo") _releasedAppTemplate.FileType = field.NewString(tableName, "file_type") _releasedAppTemplate.FileMode = field.NewString(tableName, "file_mode") - _releasedAppTemplate.User = field.NewString(tableName, "user") - _releasedAppTemplate.UserGroup = field.NewString(tableName, "user_group") - _releasedAppTemplate.Privilege = field.NewString(tableName, "privilege") _releasedAppTemplate.Signature = field.NewString(tableName, "signature") _releasedAppTemplate.ByteSize = field.NewUint64(tableName, "byte_size") _releasedAppTemplate.OriginSignature = field.NewString(tableName, "origin_signature") _releasedAppTemplate.OriginByteSize = field.NewUint64(tableName, "origin_byte_size") _releasedAppTemplate.Md5 = field.NewString(tableName, "md5") + _releasedAppTemplate.User = field.NewString(tableName, "user") + _releasedAppTemplate.UserGroup = field.NewString(tableName, "user_group") + _releasedAppTemplate.Privilege = field.NewString(tableName, "privilege") + _releasedAppTemplate.Uid = field.NewUint32(tableName, "uid") + _releasedAppTemplate.Gid = field.NewUint32(tableName, "gid") _releasedAppTemplate.BizID = field.NewUint32(tableName, "biz_id") _releasedAppTemplate.AppID = field.NewUint32(tableName, "app_id") _releasedAppTemplate.Creator = field.NewString(tableName, "creator") @@ -81,14 +83,16 @@ type releasedAppTemplate struct { TemplateRevisionMemo field.String FileType field.String FileMode field.String - User field.String - UserGroup field.String - Privilege field.String Signature field.String ByteSize field.Uint64 OriginSignature field.String OriginByteSize field.Uint64 Md5 field.String + User field.String + UserGroup field.String + Privilege field.String + Uid field.Uint32 + Gid field.Uint32 BizID field.Uint32 AppID field.Uint32 Creator field.String @@ -126,14 +130,16 @@ func (r *releasedAppTemplate) updateTableName(table string) *releasedAppTemplate r.TemplateRevisionMemo = field.NewString(table, "template_revision_memo") r.FileType = field.NewString(table, "file_type") r.FileMode = field.NewString(table, "file_mode") - r.User = field.NewString(table, "user") - r.UserGroup = field.NewString(table, "user_group") - r.Privilege = field.NewString(table, "privilege") r.Signature = field.NewString(table, "signature") r.ByteSize = field.NewUint64(table, "byte_size") r.OriginSignature = field.NewString(table, "origin_signature") r.OriginByteSize = field.NewUint64(table, "origin_byte_size") r.Md5 = field.NewString(table, "md5") + r.User = field.NewString(table, "user") + r.UserGroup = field.NewString(table, "user_group") + r.Privilege = field.NewString(table, "privilege") + r.Uid = field.NewUint32(table, "uid") + r.Gid = field.NewUint32(table, "gid") r.BizID = field.NewUint32(table, "biz_id") r.AppID = field.NewUint32(table, "app_id") r.Creator = field.NewString(table, "creator") @@ -168,7 +174,7 @@ func (r *releasedAppTemplate) GetFieldByName(fieldName string) (field.OrderExpr, } func (r *releasedAppTemplate) fillFieldMap() { - r.fieldMap = make(map[string]field.Expr, 29) + r.fieldMap = make(map[string]field.Expr, 31) r.fieldMap["id"] = r.ID r.fieldMap["release_id"] = r.ReleaseID r.fieldMap["template_space_id"] = r.TemplateSpaceID @@ -184,14 +190,16 @@ func (r *releasedAppTemplate) fillFieldMap() { r.fieldMap["template_revision_memo"] = r.TemplateRevisionMemo r.fieldMap["file_type"] = r.FileType r.fieldMap["file_mode"] = r.FileMode - r.fieldMap["user"] = r.User - r.fieldMap["user_group"] = r.UserGroup - r.fieldMap["privilege"] = r.Privilege r.fieldMap["signature"] = r.Signature r.fieldMap["byte_size"] = r.ByteSize r.fieldMap["origin_signature"] = r.OriginSignature r.fieldMap["origin_byte_size"] = r.OriginByteSize r.fieldMap["md5"] = r.Md5 + r.fieldMap["user"] = r.User + r.fieldMap["user_group"] = r.UserGroup + r.fieldMap["privilege"] = r.Privilege + r.fieldMap["uid"] = r.Uid + r.fieldMap["gid"] = r.Gid r.fieldMap["biz_id"] = r.BizID r.fieldMap["app_id"] = r.AppID r.fieldMap["creator"] = r.Creator diff --git a/pkg/dal/gen/released_config_items.gen.go b/pkg/dal/gen/released_config_items.gen.go index 5e53830d86..9d9fd96a39 100644 --- a/pkg/dal/gen/released_config_items.gen.go +++ b/pkg/dal/gen/released_config_items.gen.go @@ -45,6 +45,8 @@ func newReleasedConfigItem(db *gorm.DB, opts ...gen.DOOption) releasedConfigItem _releasedConfigItem.User = field.NewString(tableName, "user") _releasedConfigItem.UserGroup = field.NewString(tableName, "user_group") _releasedConfigItem.Privilege = field.NewString(tableName, "privilege") + _releasedConfigItem.Uid = field.NewUint32(tableName, "uid") + _releasedConfigItem.Gid = field.NewUint32(tableName, "gid") _releasedConfigItem.BizID = field.NewUint32(tableName, "biz_id") _releasedConfigItem.AppID = field.NewUint32(tableName, "app_id") _releasedConfigItem.Creator = field.NewString(tableName, "creator") @@ -79,6 +81,8 @@ type releasedConfigItem struct { User field.String UserGroup field.String Privilege field.String + Uid field.Uint32 + Gid field.Uint32 BizID field.Uint32 AppID field.Uint32 Creator field.String @@ -119,6 +123,8 @@ func (r *releasedConfigItem) updateTableName(table string) *releasedConfigItem { r.User = field.NewString(table, "user") r.UserGroup = field.NewString(table, "user_group") r.Privilege = field.NewString(table, "privilege") + r.Uid = field.NewUint32(table, "uid") + r.Gid = field.NewUint32(table, "gid") r.BizID = field.NewUint32(table, "biz_id") r.AppID = field.NewUint32(table, "app_id") r.Creator = field.NewString(table, "creator") @@ -153,7 +159,7 @@ func (r *releasedConfigItem) GetFieldByName(fieldName string) (field.OrderExpr, } func (r *releasedConfigItem) fillFieldMap() { - r.fieldMap = make(map[string]field.Expr, 24) + r.fieldMap = make(map[string]field.Expr, 26) r.fieldMap["id"] = r.ID r.fieldMap["release_id"] = r.ReleaseID r.fieldMap["commit_id"] = r.CommitID @@ -172,6 +178,8 @@ func (r *releasedConfigItem) fillFieldMap() { r.fieldMap["user"] = r.User r.fieldMap["user_group"] = r.UserGroup r.fieldMap["privilege"] = r.Privilege + r.fieldMap["uid"] = r.Uid + r.fieldMap["gid"] = r.Gid r.fieldMap["biz_id"] = r.BizID r.fieldMap["app_id"] = r.AppID r.fieldMap["creator"] = r.Creator diff --git a/pkg/dal/gen/template_revisions.gen.go b/pkg/dal/gen/template_revisions.gen.go index 8cb7cd29ac..7ae78e6934 100644 --- a/pkg/dal/gen/template_revisions.gen.go +++ b/pkg/dal/gen/template_revisions.gen.go @@ -37,6 +37,8 @@ func newTemplateRevision(db *gorm.DB, opts ...gen.DOOption) templateRevision { _templateRevision.User = field.NewString(tableName, "user") _templateRevision.UserGroup = field.NewString(tableName, "user_group") _templateRevision.Privilege = field.NewString(tableName, "privilege") + _templateRevision.Uid = field.NewUint32(tableName, "uid") + _templateRevision.Gid = field.NewUint32(tableName, "gid") _templateRevision.Signature = field.NewString(tableName, "signature") _templateRevision.ByteSize = field.NewUint64(tableName, "byte_size") _templateRevision.Md5 = field.NewString(tableName, "md5") @@ -65,6 +67,8 @@ type templateRevision struct { User field.String UserGroup field.String Privilege field.String + Uid field.Uint32 + Gid field.Uint32 Signature field.String ByteSize field.Uint64 Md5 field.String @@ -99,6 +103,8 @@ func (t *templateRevision) updateTableName(table string) *templateRevision { t.User = field.NewString(table, "user") t.UserGroup = field.NewString(table, "user_group") t.Privilege = field.NewString(table, "privilege") + t.Uid = field.NewUint32(table, "uid") + t.Gid = field.NewUint32(table, "gid") t.Signature = field.NewString(table, "signature") t.ByteSize = field.NewUint64(table, "byte_size") t.Md5 = field.NewString(table, "md5") @@ -135,7 +141,7 @@ func (t *templateRevision) GetFieldByName(fieldName string) (field.OrderExpr, bo } func (t *templateRevision) fillFieldMap() { - t.fieldMap = make(map[string]field.Expr, 18) + t.fieldMap = make(map[string]field.Expr, 20) t.fieldMap["id"] = t.ID t.fieldMap["revision_name"] = t.RevisionName t.fieldMap["revision_memo"] = t.RevisionMemo @@ -146,6 +152,8 @@ func (t *templateRevision) fillFieldMap() { t.fieldMap["user"] = t.User t.fieldMap["user_group"] = t.UserGroup t.fieldMap["privilege"] = t.Privilege + t.fieldMap["uid"] = t.Uid + t.fieldMap["gid"] = t.Gid t.fieldMap["signature"] = t.Signature t.fieldMap["byte_size"] = t.ByteSize t.fieldMap["md5"] = t.Md5 diff --git a/pkg/dal/gen/user_group_privileges.gen.go b/pkg/dal/gen/user_group_privileges.gen.go new file mode 100644 index 0000000000..d9b99ccf5a --- /dev/null +++ b/pkg/dal/gen/user_group_privileges.gen.go @@ -0,0 +1,436 @@ +// Code generated by gorm.io/gen. DO NOT EDIT. +// Code generated by gorm.io/gen. DO NOT EDIT. +// Code generated by gorm.io/gen. DO NOT EDIT. + +package gen + +import ( + "context" + + "gorm.io/gorm" + "gorm.io/gorm/clause" + "gorm.io/gorm/schema" + + "gorm.io/gen" + "gorm.io/gen/field" + + "gorm.io/plugin/dbresolver" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" +) + +func newUserGroupPrivilege(db *gorm.DB, opts ...gen.DOOption) userGroupPrivilege { + _userGroupPrivilege := userGroupPrivilege{} + + _userGroupPrivilege.userGroupPrivilegeDo.UseDB(db, opts...) + _userGroupPrivilege.userGroupPrivilegeDo.UseModel(&table.UserGroupPrivilege{}) + + tableName := _userGroupPrivilege.userGroupPrivilegeDo.TableName() + _userGroupPrivilege.ALL = field.NewAsterisk(tableName) + _userGroupPrivilege.ID = field.NewUint32(tableName, "id") + _userGroupPrivilege.UserGroup = field.NewString(tableName, "user_group") + _userGroupPrivilege.PrivilegeType = field.NewString(tableName, "privilege_type") + _userGroupPrivilege.ReadOnly = field.NewBool(tableName, "read_only") + _userGroupPrivilege.BizID = field.NewUint32(tableName, "biz_id") + _userGroupPrivilege.AppID = field.NewUint32(tableName, "app_id") + _userGroupPrivilege.Gid = field.NewUint32(tableName, "gid") + _userGroupPrivilege.TemplateSpaceID = field.NewUint32(tableName, "template_space_id") + _userGroupPrivilege.Creator = field.NewString(tableName, "creator") + _userGroupPrivilege.Reviser = field.NewString(tableName, "reviser") + _userGroupPrivilege.CreatedAt = field.NewTime(tableName, "created_at") + _userGroupPrivilege.UpdatedAt = field.NewTime(tableName, "updated_at") + + _userGroupPrivilege.fillFieldMap() + + return _userGroupPrivilege +} + +type userGroupPrivilege struct { + userGroupPrivilegeDo userGroupPrivilegeDo + + ALL field.Asterisk + ID field.Uint32 + UserGroup field.String + PrivilegeType field.String + ReadOnly field.Bool + BizID field.Uint32 + AppID field.Uint32 + Gid field.Uint32 + TemplateSpaceID field.Uint32 + Creator field.String + Reviser field.String + CreatedAt field.Time + UpdatedAt field.Time + + fieldMap map[string]field.Expr +} + +func (u userGroupPrivilege) Table(newTableName string) *userGroupPrivilege { + u.userGroupPrivilegeDo.UseTable(newTableName) + return u.updateTableName(newTableName) +} + +func (u userGroupPrivilege) As(alias string) *userGroupPrivilege { + u.userGroupPrivilegeDo.DO = *(u.userGroupPrivilegeDo.As(alias).(*gen.DO)) + return u.updateTableName(alias) +} + +func (u *userGroupPrivilege) updateTableName(table string) *userGroupPrivilege { + u.ALL = field.NewAsterisk(table) + u.ID = field.NewUint32(table, "id") + u.UserGroup = field.NewString(table, "user_group") + u.PrivilegeType = field.NewString(table, "privilege_type") + u.ReadOnly = field.NewBool(table, "read_only") + u.BizID = field.NewUint32(table, "biz_id") + u.AppID = field.NewUint32(table, "app_id") + u.Gid = field.NewUint32(table, "gid") + u.TemplateSpaceID = field.NewUint32(table, "template_space_id") + u.Creator = field.NewString(table, "creator") + u.Reviser = field.NewString(table, "reviser") + u.CreatedAt = field.NewTime(table, "created_at") + u.UpdatedAt = field.NewTime(table, "updated_at") + + u.fillFieldMap() + + return u +} + +func (u *userGroupPrivilege) WithContext(ctx context.Context) IUserGroupPrivilegeDo { + return u.userGroupPrivilegeDo.WithContext(ctx) +} + +func (u userGroupPrivilege) TableName() string { return u.userGroupPrivilegeDo.TableName() } + +func (u userGroupPrivilege) Alias() string { return u.userGroupPrivilegeDo.Alias() } + +func (u userGroupPrivilege) Columns(cols ...field.Expr) gen.Columns { + return u.userGroupPrivilegeDo.Columns(cols...) +} + +func (u *userGroupPrivilege) GetFieldByName(fieldName string) (field.OrderExpr, bool) { + _f, ok := u.fieldMap[fieldName] + if !ok || _f == nil { + return nil, false + } + _oe, ok := _f.(field.OrderExpr) + return _oe, ok +} + +func (u *userGroupPrivilege) fillFieldMap() { + u.fieldMap = make(map[string]field.Expr, 12) + u.fieldMap["id"] = u.ID + u.fieldMap["user_group"] = u.UserGroup + u.fieldMap["privilege_type"] = u.PrivilegeType + u.fieldMap["read_only"] = u.ReadOnly + u.fieldMap["biz_id"] = u.BizID + u.fieldMap["app_id"] = u.AppID + u.fieldMap["gid"] = u.Gid + u.fieldMap["template_space_id"] = u.TemplateSpaceID + u.fieldMap["creator"] = u.Creator + u.fieldMap["reviser"] = u.Reviser + u.fieldMap["created_at"] = u.CreatedAt + u.fieldMap["updated_at"] = u.UpdatedAt +} + +func (u userGroupPrivilege) clone(db *gorm.DB) userGroupPrivilege { + u.userGroupPrivilegeDo.ReplaceConnPool(db.Statement.ConnPool) + return u +} + +func (u userGroupPrivilege) replaceDB(db *gorm.DB) userGroupPrivilege { + u.userGroupPrivilegeDo.ReplaceDB(db) + return u +} + +type userGroupPrivilegeDo struct{ gen.DO } + +type IUserGroupPrivilegeDo interface { + gen.SubQuery + Debug() IUserGroupPrivilegeDo + WithContext(ctx context.Context) IUserGroupPrivilegeDo + WithResult(fc func(tx gen.Dao)) gen.ResultInfo + ReplaceDB(db *gorm.DB) + ReadDB() IUserGroupPrivilegeDo + WriteDB() IUserGroupPrivilegeDo + As(alias string) gen.Dao + Session(config *gorm.Session) IUserGroupPrivilegeDo + Columns(cols ...field.Expr) gen.Columns + Clauses(conds ...clause.Expression) IUserGroupPrivilegeDo + Not(conds ...gen.Condition) IUserGroupPrivilegeDo + Or(conds ...gen.Condition) IUserGroupPrivilegeDo + Select(conds ...field.Expr) IUserGroupPrivilegeDo + Where(conds ...gen.Condition) IUserGroupPrivilegeDo + Order(conds ...field.Expr) IUserGroupPrivilegeDo + Distinct(cols ...field.Expr) IUserGroupPrivilegeDo + Omit(cols ...field.Expr) IUserGroupPrivilegeDo + Join(table schema.Tabler, on ...field.Expr) IUserGroupPrivilegeDo + LeftJoin(table schema.Tabler, on ...field.Expr) IUserGroupPrivilegeDo + RightJoin(table schema.Tabler, on ...field.Expr) IUserGroupPrivilegeDo + Group(cols ...field.Expr) IUserGroupPrivilegeDo + Having(conds ...gen.Condition) IUserGroupPrivilegeDo + Limit(limit int) IUserGroupPrivilegeDo + Offset(offset int) IUserGroupPrivilegeDo + Count() (count int64, err error) + Scopes(funcs ...func(gen.Dao) gen.Dao) IUserGroupPrivilegeDo + Unscoped() IUserGroupPrivilegeDo + Create(values ...*table.UserGroupPrivilege) error + CreateInBatches(values []*table.UserGroupPrivilege, batchSize int) error + Save(values ...*table.UserGroupPrivilege) error + First() (*table.UserGroupPrivilege, error) + Take() (*table.UserGroupPrivilege, error) + Last() (*table.UserGroupPrivilege, error) + Find() ([]*table.UserGroupPrivilege, error) + FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*table.UserGroupPrivilege, err error) + FindInBatches(result *[]*table.UserGroupPrivilege, batchSize int, fc func(tx gen.Dao, batch int) error) error + Pluck(column field.Expr, dest interface{}) error + Delete(...*table.UserGroupPrivilege) (info gen.ResultInfo, err error) + Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error) + UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error) + Updates(value interface{}) (info gen.ResultInfo, err error) + UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error) + UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error) + UpdateColumns(value interface{}) (info gen.ResultInfo, err error) + UpdateFrom(q gen.SubQuery) gen.Dao + Attrs(attrs ...field.AssignExpr) IUserGroupPrivilegeDo + Assign(attrs ...field.AssignExpr) IUserGroupPrivilegeDo + Joins(fields ...field.RelationField) IUserGroupPrivilegeDo + Preload(fields ...field.RelationField) IUserGroupPrivilegeDo + FirstOrInit() (*table.UserGroupPrivilege, error) + FirstOrCreate() (*table.UserGroupPrivilege, error) + FindByPage(offset int, limit int) (result []*table.UserGroupPrivilege, count int64, err error) + ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Scan(result interface{}) (err error) + Returning(value interface{}, columns ...string) IUserGroupPrivilegeDo + UnderlyingDB() *gorm.DB + schema.Tabler +} + +func (u userGroupPrivilegeDo) Debug() IUserGroupPrivilegeDo { + return u.withDO(u.DO.Debug()) +} + +func (u userGroupPrivilegeDo) WithContext(ctx context.Context) IUserGroupPrivilegeDo { + return u.withDO(u.DO.WithContext(ctx)) +} + +func (u userGroupPrivilegeDo) ReadDB() IUserGroupPrivilegeDo { + return u.Clauses(dbresolver.Read) +} + +func (u userGroupPrivilegeDo) WriteDB() IUserGroupPrivilegeDo { + return u.Clauses(dbresolver.Write) +} + +func (u userGroupPrivilegeDo) Session(config *gorm.Session) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Session(config)) +} + +func (u userGroupPrivilegeDo) Clauses(conds ...clause.Expression) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Clauses(conds...)) +} + +func (u userGroupPrivilegeDo) Returning(value interface{}, columns ...string) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Returning(value, columns...)) +} + +func (u userGroupPrivilegeDo) Not(conds ...gen.Condition) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Not(conds...)) +} + +func (u userGroupPrivilegeDo) Or(conds ...gen.Condition) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Or(conds...)) +} + +func (u userGroupPrivilegeDo) Select(conds ...field.Expr) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Select(conds...)) +} + +func (u userGroupPrivilegeDo) Where(conds ...gen.Condition) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Where(conds...)) +} + +func (u userGroupPrivilegeDo) Order(conds ...field.Expr) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Order(conds...)) +} + +func (u userGroupPrivilegeDo) Distinct(cols ...field.Expr) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Distinct(cols...)) +} + +func (u userGroupPrivilegeDo) Omit(cols ...field.Expr) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Omit(cols...)) +} + +func (u userGroupPrivilegeDo) Join(table schema.Tabler, on ...field.Expr) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Join(table, on...)) +} + +func (u userGroupPrivilegeDo) LeftJoin(table schema.Tabler, on ...field.Expr) IUserGroupPrivilegeDo { + return u.withDO(u.DO.LeftJoin(table, on...)) +} + +func (u userGroupPrivilegeDo) RightJoin(table schema.Tabler, on ...field.Expr) IUserGroupPrivilegeDo { + return u.withDO(u.DO.RightJoin(table, on...)) +} + +func (u userGroupPrivilegeDo) Group(cols ...field.Expr) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Group(cols...)) +} + +func (u userGroupPrivilegeDo) Having(conds ...gen.Condition) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Having(conds...)) +} + +func (u userGroupPrivilegeDo) Limit(limit int) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Limit(limit)) +} + +func (u userGroupPrivilegeDo) Offset(offset int) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Offset(offset)) +} + +func (u userGroupPrivilegeDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Scopes(funcs...)) +} + +func (u userGroupPrivilegeDo) Unscoped() IUserGroupPrivilegeDo { + return u.withDO(u.DO.Unscoped()) +} + +func (u userGroupPrivilegeDo) Create(values ...*table.UserGroupPrivilege) error { + if len(values) == 0 { + return nil + } + return u.DO.Create(values) +} + +func (u userGroupPrivilegeDo) CreateInBatches(values []*table.UserGroupPrivilege, batchSize int) error { + return u.DO.CreateInBatches(values, batchSize) +} + +// Save : !!! underlying implementation is different with GORM +// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values) +func (u userGroupPrivilegeDo) Save(values ...*table.UserGroupPrivilege) error { + if len(values) == 0 { + return nil + } + return u.DO.Save(values) +} + +func (u userGroupPrivilegeDo) First() (*table.UserGroupPrivilege, error) { + if result, err := u.DO.First(); err != nil { + return nil, err + } else { + return result.(*table.UserGroupPrivilege), nil + } +} + +func (u userGroupPrivilegeDo) Take() (*table.UserGroupPrivilege, error) { + if result, err := u.DO.Take(); err != nil { + return nil, err + } else { + return result.(*table.UserGroupPrivilege), nil + } +} + +func (u userGroupPrivilegeDo) Last() (*table.UserGroupPrivilege, error) { + if result, err := u.DO.Last(); err != nil { + return nil, err + } else { + return result.(*table.UserGroupPrivilege), nil + } +} + +func (u userGroupPrivilegeDo) Find() ([]*table.UserGroupPrivilege, error) { + result, err := u.DO.Find() + return result.([]*table.UserGroupPrivilege), err +} + +func (u userGroupPrivilegeDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*table.UserGroupPrivilege, err error) { + buf := make([]*table.UserGroupPrivilege, 0, batchSize) + err = u.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error { + defer func() { results = append(results, buf...) }() + return fc(tx, batch) + }) + return results, err +} + +func (u userGroupPrivilegeDo) FindInBatches(result *[]*table.UserGroupPrivilege, batchSize int, fc func(tx gen.Dao, batch int) error) error { + return u.DO.FindInBatches(result, batchSize, fc) +} + +func (u userGroupPrivilegeDo) Attrs(attrs ...field.AssignExpr) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Attrs(attrs...)) +} + +func (u userGroupPrivilegeDo) Assign(attrs ...field.AssignExpr) IUserGroupPrivilegeDo { + return u.withDO(u.DO.Assign(attrs...)) +} + +func (u userGroupPrivilegeDo) Joins(fields ...field.RelationField) IUserGroupPrivilegeDo { + for _, _f := range fields { + u = *u.withDO(u.DO.Joins(_f)) + } + return &u +} + +func (u userGroupPrivilegeDo) Preload(fields ...field.RelationField) IUserGroupPrivilegeDo { + for _, _f := range fields { + u = *u.withDO(u.DO.Preload(_f)) + } + return &u +} + +func (u userGroupPrivilegeDo) FirstOrInit() (*table.UserGroupPrivilege, error) { + if result, err := u.DO.FirstOrInit(); err != nil { + return nil, err + } else { + return result.(*table.UserGroupPrivilege), nil + } +} + +func (u userGroupPrivilegeDo) FirstOrCreate() (*table.UserGroupPrivilege, error) { + if result, err := u.DO.FirstOrCreate(); err != nil { + return nil, err + } else { + return result.(*table.UserGroupPrivilege), nil + } +} + +func (u userGroupPrivilegeDo) FindByPage(offset int, limit int) (result []*table.UserGroupPrivilege, count int64, err error) { + result, err = u.Offset(offset).Limit(limit).Find() + if err != nil { + return + } + + if size := len(result); 0 < limit && 0 < size && size < limit { + count = int64(size + offset) + return + } + + count, err = u.Offset(-1).Limit(-1).Count() + return +} + +func (u userGroupPrivilegeDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) { + count, err = u.Count() + if err != nil { + return + } + + err = u.Offset(offset).Limit(limit).Scan(result) + return +} + +func (u userGroupPrivilegeDo) Scan(result interface{}) (err error) { + return u.DO.Scan(result) +} + +func (u userGroupPrivilegeDo) Delete(models ...*table.UserGroupPrivilege) (result gen.ResultInfo, err error) { + return u.DO.Delete(models) +} + +func (u *userGroupPrivilegeDo) withDO(do gen.Dao) *userGroupPrivilegeDo { + u.DO = *do.(*gen.DO) + return u +} diff --git a/pkg/dal/gen/user_privileges.gen.go b/pkg/dal/gen/user_privileges.gen.go new file mode 100644 index 0000000000..35b2d50aab --- /dev/null +++ b/pkg/dal/gen/user_privileges.gen.go @@ -0,0 +1,436 @@ +// Code generated by gorm.io/gen. DO NOT EDIT. +// Code generated by gorm.io/gen. DO NOT EDIT. +// Code generated by gorm.io/gen. DO NOT EDIT. + +package gen + +import ( + "context" + + "gorm.io/gorm" + "gorm.io/gorm/clause" + "gorm.io/gorm/schema" + + "gorm.io/gen" + "gorm.io/gen/field" + + "gorm.io/plugin/dbresolver" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" +) + +func newUserPrivilege(db *gorm.DB, opts ...gen.DOOption) userPrivilege { + _userPrivilege := userPrivilege{} + + _userPrivilege.userPrivilegeDo.UseDB(db, opts...) + _userPrivilege.userPrivilegeDo.UseModel(&table.UserPrivilege{}) + + tableName := _userPrivilege.userPrivilegeDo.TableName() + _userPrivilege.ALL = field.NewAsterisk(tableName) + _userPrivilege.ID = field.NewUint32(tableName, "id") + _userPrivilege.User = field.NewString(tableName, "user") + _userPrivilege.PrivilegeType = field.NewString(tableName, "privilege_type") + _userPrivilege.ReadOnly = field.NewBool(tableName, "read_only") + _userPrivilege.BizID = field.NewUint32(tableName, "biz_id") + _userPrivilege.AppID = field.NewUint32(tableName, "app_id") + _userPrivilege.Uid = field.NewUint32(tableName, "uid") + _userPrivilege.TemplateSpaceID = field.NewUint32(tableName, "template_space_id") + _userPrivilege.Creator = field.NewString(tableName, "creator") + _userPrivilege.Reviser = field.NewString(tableName, "reviser") + _userPrivilege.CreatedAt = field.NewTime(tableName, "created_at") + _userPrivilege.UpdatedAt = field.NewTime(tableName, "updated_at") + + _userPrivilege.fillFieldMap() + + return _userPrivilege +} + +type userPrivilege struct { + userPrivilegeDo userPrivilegeDo + + ALL field.Asterisk + ID field.Uint32 + User field.String + PrivilegeType field.String + ReadOnly field.Bool + BizID field.Uint32 + AppID field.Uint32 + Uid field.Uint32 + TemplateSpaceID field.Uint32 + Creator field.String + Reviser field.String + CreatedAt field.Time + UpdatedAt field.Time + + fieldMap map[string]field.Expr +} + +func (u userPrivilege) Table(newTableName string) *userPrivilege { + u.userPrivilegeDo.UseTable(newTableName) + return u.updateTableName(newTableName) +} + +func (u userPrivilege) As(alias string) *userPrivilege { + u.userPrivilegeDo.DO = *(u.userPrivilegeDo.As(alias).(*gen.DO)) + return u.updateTableName(alias) +} + +func (u *userPrivilege) updateTableName(table string) *userPrivilege { + u.ALL = field.NewAsterisk(table) + u.ID = field.NewUint32(table, "id") + u.User = field.NewString(table, "user") + u.PrivilegeType = field.NewString(table, "privilege_type") + u.ReadOnly = field.NewBool(table, "read_only") + u.BizID = field.NewUint32(table, "biz_id") + u.AppID = field.NewUint32(table, "app_id") + u.Uid = field.NewUint32(table, "uid") + u.TemplateSpaceID = field.NewUint32(table, "template_space_id") + u.Creator = field.NewString(table, "creator") + u.Reviser = field.NewString(table, "reviser") + u.CreatedAt = field.NewTime(table, "created_at") + u.UpdatedAt = field.NewTime(table, "updated_at") + + u.fillFieldMap() + + return u +} + +func (u *userPrivilege) WithContext(ctx context.Context) IUserPrivilegeDo { + return u.userPrivilegeDo.WithContext(ctx) +} + +func (u userPrivilege) TableName() string { return u.userPrivilegeDo.TableName() } + +func (u userPrivilege) Alias() string { return u.userPrivilegeDo.Alias() } + +func (u userPrivilege) Columns(cols ...field.Expr) gen.Columns { + return u.userPrivilegeDo.Columns(cols...) +} + +func (u *userPrivilege) GetFieldByName(fieldName string) (field.OrderExpr, bool) { + _f, ok := u.fieldMap[fieldName] + if !ok || _f == nil { + return nil, false + } + _oe, ok := _f.(field.OrderExpr) + return _oe, ok +} + +func (u *userPrivilege) fillFieldMap() { + u.fieldMap = make(map[string]field.Expr, 12) + u.fieldMap["id"] = u.ID + u.fieldMap["user"] = u.User + u.fieldMap["privilege_type"] = u.PrivilegeType + u.fieldMap["read_only"] = u.ReadOnly + u.fieldMap["biz_id"] = u.BizID + u.fieldMap["app_id"] = u.AppID + u.fieldMap["uid"] = u.Uid + u.fieldMap["template_space_id"] = u.TemplateSpaceID + u.fieldMap["creator"] = u.Creator + u.fieldMap["reviser"] = u.Reviser + u.fieldMap["created_at"] = u.CreatedAt + u.fieldMap["updated_at"] = u.UpdatedAt +} + +func (u userPrivilege) clone(db *gorm.DB) userPrivilege { + u.userPrivilegeDo.ReplaceConnPool(db.Statement.ConnPool) + return u +} + +func (u userPrivilege) replaceDB(db *gorm.DB) userPrivilege { + u.userPrivilegeDo.ReplaceDB(db) + return u +} + +type userPrivilegeDo struct{ gen.DO } + +type IUserPrivilegeDo interface { + gen.SubQuery + Debug() IUserPrivilegeDo + WithContext(ctx context.Context) IUserPrivilegeDo + WithResult(fc func(tx gen.Dao)) gen.ResultInfo + ReplaceDB(db *gorm.DB) + ReadDB() IUserPrivilegeDo + WriteDB() IUserPrivilegeDo + As(alias string) gen.Dao + Session(config *gorm.Session) IUserPrivilegeDo + Columns(cols ...field.Expr) gen.Columns + Clauses(conds ...clause.Expression) IUserPrivilegeDo + Not(conds ...gen.Condition) IUserPrivilegeDo + Or(conds ...gen.Condition) IUserPrivilegeDo + Select(conds ...field.Expr) IUserPrivilegeDo + Where(conds ...gen.Condition) IUserPrivilegeDo + Order(conds ...field.Expr) IUserPrivilegeDo + Distinct(cols ...field.Expr) IUserPrivilegeDo + Omit(cols ...field.Expr) IUserPrivilegeDo + Join(table schema.Tabler, on ...field.Expr) IUserPrivilegeDo + LeftJoin(table schema.Tabler, on ...field.Expr) IUserPrivilegeDo + RightJoin(table schema.Tabler, on ...field.Expr) IUserPrivilegeDo + Group(cols ...field.Expr) IUserPrivilegeDo + Having(conds ...gen.Condition) IUserPrivilegeDo + Limit(limit int) IUserPrivilegeDo + Offset(offset int) IUserPrivilegeDo + Count() (count int64, err error) + Scopes(funcs ...func(gen.Dao) gen.Dao) IUserPrivilegeDo + Unscoped() IUserPrivilegeDo + Create(values ...*table.UserPrivilege) error + CreateInBatches(values []*table.UserPrivilege, batchSize int) error + Save(values ...*table.UserPrivilege) error + First() (*table.UserPrivilege, error) + Take() (*table.UserPrivilege, error) + Last() (*table.UserPrivilege, error) + Find() ([]*table.UserPrivilege, error) + FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*table.UserPrivilege, err error) + FindInBatches(result *[]*table.UserPrivilege, batchSize int, fc func(tx gen.Dao, batch int) error) error + Pluck(column field.Expr, dest interface{}) error + Delete(...*table.UserPrivilege) (info gen.ResultInfo, err error) + Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error) + UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error) + Updates(value interface{}) (info gen.ResultInfo, err error) + UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error) + UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error) + UpdateColumns(value interface{}) (info gen.ResultInfo, err error) + UpdateFrom(q gen.SubQuery) gen.Dao + Attrs(attrs ...field.AssignExpr) IUserPrivilegeDo + Assign(attrs ...field.AssignExpr) IUserPrivilegeDo + Joins(fields ...field.RelationField) IUserPrivilegeDo + Preload(fields ...field.RelationField) IUserPrivilegeDo + FirstOrInit() (*table.UserPrivilege, error) + FirstOrCreate() (*table.UserPrivilege, error) + FindByPage(offset int, limit int) (result []*table.UserPrivilege, count int64, err error) + ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Scan(result interface{}) (err error) + Returning(value interface{}, columns ...string) IUserPrivilegeDo + UnderlyingDB() *gorm.DB + schema.Tabler +} + +func (u userPrivilegeDo) Debug() IUserPrivilegeDo { + return u.withDO(u.DO.Debug()) +} + +func (u userPrivilegeDo) WithContext(ctx context.Context) IUserPrivilegeDo { + return u.withDO(u.DO.WithContext(ctx)) +} + +func (u userPrivilegeDo) ReadDB() IUserPrivilegeDo { + return u.Clauses(dbresolver.Read) +} + +func (u userPrivilegeDo) WriteDB() IUserPrivilegeDo { + return u.Clauses(dbresolver.Write) +} + +func (u userPrivilegeDo) Session(config *gorm.Session) IUserPrivilegeDo { + return u.withDO(u.DO.Session(config)) +} + +func (u userPrivilegeDo) Clauses(conds ...clause.Expression) IUserPrivilegeDo { + return u.withDO(u.DO.Clauses(conds...)) +} + +func (u userPrivilegeDo) Returning(value interface{}, columns ...string) IUserPrivilegeDo { + return u.withDO(u.DO.Returning(value, columns...)) +} + +func (u userPrivilegeDo) Not(conds ...gen.Condition) IUserPrivilegeDo { + return u.withDO(u.DO.Not(conds...)) +} + +func (u userPrivilegeDo) Or(conds ...gen.Condition) IUserPrivilegeDo { + return u.withDO(u.DO.Or(conds...)) +} + +func (u userPrivilegeDo) Select(conds ...field.Expr) IUserPrivilegeDo { + return u.withDO(u.DO.Select(conds...)) +} + +func (u userPrivilegeDo) Where(conds ...gen.Condition) IUserPrivilegeDo { + return u.withDO(u.DO.Where(conds...)) +} + +func (u userPrivilegeDo) Order(conds ...field.Expr) IUserPrivilegeDo { + return u.withDO(u.DO.Order(conds...)) +} + +func (u userPrivilegeDo) Distinct(cols ...field.Expr) IUserPrivilegeDo { + return u.withDO(u.DO.Distinct(cols...)) +} + +func (u userPrivilegeDo) Omit(cols ...field.Expr) IUserPrivilegeDo { + return u.withDO(u.DO.Omit(cols...)) +} + +func (u userPrivilegeDo) Join(table schema.Tabler, on ...field.Expr) IUserPrivilegeDo { + return u.withDO(u.DO.Join(table, on...)) +} + +func (u userPrivilegeDo) LeftJoin(table schema.Tabler, on ...field.Expr) IUserPrivilegeDo { + return u.withDO(u.DO.LeftJoin(table, on...)) +} + +func (u userPrivilegeDo) RightJoin(table schema.Tabler, on ...field.Expr) IUserPrivilegeDo { + return u.withDO(u.DO.RightJoin(table, on...)) +} + +func (u userPrivilegeDo) Group(cols ...field.Expr) IUserPrivilegeDo { + return u.withDO(u.DO.Group(cols...)) +} + +func (u userPrivilegeDo) Having(conds ...gen.Condition) IUserPrivilegeDo { + return u.withDO(u.DO.Having(conds...)) +} + +func (u userPrivilegeDo) Limit(limit int) IUserPrivilegeDo { + return u.withDO(u.DO.Limit(limit)) +} + +func (u userPrivilegeDo) Offset(offset int) IUserPrivilegeDo { + return u.withDO(u.DO.Offset(offset)) +} + +func (u userPrivilegeDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IUserPrivilegeDo { + return u.withDO(u.DO.Scopes(funcs...)) +} + +func (u userPrivilegeDo) Unscoped() IUserPrivilegeDo { + return u.withDO(u.DO.Unscoped()) +} + +func (u userPrivilegeDo) Create(values ...*table.UserPrivilege) error { + if len(values) == 0 { + return nil + } + return u.DO.Create(values) +} + +func (u userPrivilegeDo) CreateInBatches(values []*table.UserPrivilege, batchSize int) error { + return u.DO.CreateInBatches(values, batchSize) +} + +// Save : !!! underlying implementation is different with GORM +// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values) +func (u userPrivilegeDo) Save(values ...*table.UserPrivilege) error { + if len(values) == 0 { + return nil + } + return u.DO.Save(values) +} + +func (u userPrivilegeDo) First() (*table.UserPrivilege, error) { + if result, err := u.DO.First(); err != nil { + return nil, err + } else { + return result.(*table.UserPrivilege), nil + } +} + +func (u userPrivilegeDo) Take() (*table.UserPrivilege, error) { + if result, err := u.DO.Take(); err != nil { + return nil, err + } else { + return result.(*table.UserPrivilege), nil + } +} + +func (u userPrivilegeDo) Last() (*table.UserPrivilege, error) { + if result, err := u.DO.Last(); err != nil { + return nil, err + } else { + return result.(*table.UserPrivilege), nil + } +} + +func (u userPrivilegeDo) Find() ([]*table.UserPrivilege, error) { + result, err := u.DO.Find() + return result.([]*table.UserPrivilege), err +} + +func (u userPrivilegeDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*table.UserPrivilege, err error) { + buf := make([]*table.UserPrivilege, 0, batchSize) + err = u.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error { + defer func() { results = append(results, buf...) }() + return fc(tx, batch) + }) + return results, err +} + +func (u userPrivilegeDo) FindInBatches(result *[]*table.UserPrivilege, batchSize int, fc func(tx gen.Dao, batch int) error) error { + return u.DO.FindInBatches(result, batchSize, fc) +} + +func (u userPrivilegeDo) Attrs(attrs ...field.AssignExpr) IUserPrivilegeDo { + return u.withDO(u.DO.Attrs(attrs...)) +} + +func (u userPrivilegeDo) Assign(attrs ...field.AssignExpr) IUserPrivilegeDo { + return u.withDO(u.DO.Assign(attrs...)) +} + +func (u userPrivilegeDo) Joins(fields ...field.RelationField) IUserPrivilegeDo { + for _, _f := range fields { + u = *u.withDO(u.DO.Joins(_f)) + } + return &u +} + +func (u userPrivilegeDo) Preload(fields ...field.RelationField) IUserPrivilegeDo { + for _, _f := range fields { + u = *u.withDO(u.DO.Preload(_f)) + } + return &u +} + +func (u userPrivilegeDo) FirstOrInit() (*table.UserPrivilege, error) { + if result, err := u.DO.FirstOrInit(); err != nil { + return nil, err + } else { + return result.(*table.UserPrivilege), nil + } +} + +func (u userPrivilegeDo) FirstOrCreate() (*table.UserPrivilege, error) { + if result, err := u.DO.FirstOrCreate(); err != nil { + return nil, err + } else { + return result.(*table.UserPrivilege), nil + } +} + +func (u userPrivilegeDo) FindByPage(offset int, limit int) (result []*table.UserPrivilege, count int64, err error) { + result, err = u.Offset(offset).Limit(limit).Find() + if err != nil { + return + } + + if size := len(result); 0 < limit && 0 < size && size < limit { + count = int64(size + offset) + return + } + + count, err = u.Offset(-1).Limit(-1).Count() + return +} + +func (u userPrivilegeDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) { + count, err = u.Count() + if err != nil { + return + } + + err = u.Offset(offset).Limit(limit).Scan(result) + return +} + +func (u userPrivilegeDo) Scan(result interface{}) (err error) { + return u.DO.Scan(result) +} + +func (u userPrivilegeDo) Delete(models ...*table.UserPrivilege) (result gen.ResultInfo, err error) { + return u.DO.Delete(models) +} + +func (u *userPrivilegeDo) withDO(do gen.Dao) *userPrivilegeDo { + u.DO = *do.(*gen.DO) + return u +} diff --git a/pkg/dal/table/config_item.go b/pkg/dal/table/config_item.go index c728578249..b2e613f393 100644 --- a/pkg/dal/table/config_item.go +++ b/pkg/dal/table/config_item.go @@ -381,6 +381,8 @@ type FilePermission struct { UserGroup string `db:"user_group" json:"user_group" gorm:"column:user_group"` // config file's privilege Privilege string `db:"privilege" json:"privilege" gorm:"column:privilege"` + Uid uint32 `db:"uid" json:"uid" gorm:"column:uid"` + Gid uint32 `db:"gid" json:"gid" gorm:"column:gid"` } const ( diff --git a/pkg/dal/table/released_app_template.go b/pkg/dal/table/released_app_template.go index c4bd79b5ce..b3f07f15a7 100644 --- a/pkg/dal/table/released_app_template.go +++ b/pkg/dal/table/released_app_template.go @@ -113,15 +113,14 @@ type ReleasedAppTemplateSpec struct { TemplateRevisionMemo string `json:"template_revision_memo" gorm:"column:template_revision_memo"` FileType string `json:"file_type" gorm:"column:file_type"` FileMode string `json:"file_mode" gorm:"column:file_mode"` - User string `json:"user" gorm:"column:user"` - UserGroup string `json:"user_group" gorm:"column:user_group"` - Privilege string `json:"privilege" gorm:"column:privilege"` Signature string `json:"signature" gorm:"column:signature"` ByteSize uint64 `json:"byte_size" gorm:"column:byte_size"` OriginSignature string `json:"origin_signature" gorm:"column:origin_signature"` OriginByteSize uint64 `json:"origin_byte_size" gorm:"column:origin_byte_size"` // Md5 hashed by rendered content Md5 string `json:"md5" gorm:"column:md5"` + // KV类型,不能有Permission + Permission *FilePermission `db:"permission" json:"permission" gorm:"embedded"` } // ValidateCreate validate ReleasedAppTemplate spec when it is created. diff --git a/pkg/dal/table/table.go b/pkg/dal/table/table.go index 83bff273d3..ed32874fc3 100644 --- a/pkg/dal/table/table.go +++ b/pkg/dal/table/table.go @@ -251,6 +251,10 @@ const ( ClientTable Name = "clients" // ClientEventTable is client_events table's name ClientEventTable Name = "client_events" + // UserPrivilegeTable is user_privileges table's name + UserPrivilegeTable Name = "user_privileges" + // UserGroupPrivilegeTable is user_group_privileges table's name + UserGroupPrivilegeTable Name = "user_group_privileges" ) // RevisionColumns defines all the Revision table's columns. diff --git a/pkg/dal/table/user_group_privilege.go b/pkg/dal/table/user_group_privilege.go new file mode 100644 index 0000000000..9f57d11454 --- /dev/null +++ b/pkg/dal/table/user_group_privilege.go @@ -0,0 +1,83 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package table + +import ( + "fmt" +) + +// UserGroupPrivilege 用户组权限 +type UserGroupPrivilege struct { + ID uint32 `json:"id" gorm:"primaryKey"` + Spec *UserGroupPrivilegeSpec `json:"spec" gorm:"embedded"` + Attachment *UserGroupPrivilegeAttachment `json:"attachment" gorm:"embedded"` + Revision *Revision `json:"revision" gorm:"embedded"` +} + +// TableName is the user_group_privilege's database table name. +func (u *UserGroupPrivilege) TableName() string { + return "user_group_privileges" +} + +// AppID AuditRes interface +func (u *UserGroupPrivilege) AppID() uint32 { + return 0 +} + +// ResID AuditRes interface +func (u *UserGroupPrivilege) ResID() uint32 { + return u.ID +} + +// ResType AuditRes interface +func (u *UserGroupPrivilege) ResType() string { + return "user_group_privileges" +} + +// UserGroupPrivilegeSpec 用户权限组 +type UserGroupPrivilegeSpec struct { + UserGroup string `gorm:"column:user_group" json:"user_group"` + PrivilegeType PrivilegeType `gorm:"column:privilege_type" json:"privilege_type"` // 权限类型:system、custom + ReadOnly bool `gorm:"column:read_only" json:"read_only"` // 只读 +} + +// UserGroupPrivilegeAttachment 用户组附加结构体 +type UserGroupPrivilegeAttachment struct { + BizID uint32 `gorm:"column:biz_id" json:"biz_id"` + AppID uint32 `gorm:"column:app_id" json:"app_id"` + Gid uint32 `gorm:"column:gid" json:"gid"` + TemplateSpaceID uint32 `gorm:"column:template_space_id" json:"template_space_id"` +} + +// PrivilegeType defines the type of a system or a custom. +type PrivilegeType string + +const ( + // PrivilegeTypeSystem is the type of system privilege + PrivilegeTypeSystem PrivilegeType = "system" + + // PrivilegeTypeCustom is the type for custom privilege + PrivilegeTypeCustom PrivilegeType = "custom" +) + +// Validate the privilege type is valid or not. +func (pt PrivilegeType) Validate() error { + switch pt { + case PrivilegeTypeSystem: + case PrivilegeTypeCustom: + default: + return fmt.Errorf("unknown %s privilege type", pt) + } + + return nil +} diff --git a/pkg/dal/table/user_privilege.go b/pkg/dal/table/user_privilege.go new file mode 100644 index 0000000000..47869d3396 --- /dev/null +++ b/pkg/dal/table/user_privilege.go @@ -0,0 +1,56 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package table + +// UserPrivilege 用户权限 +type UserPrivilege struct { + ID uint32 `json:"id" gorm:"primaryKey"` + Spec *UserPrivilegeSpec `json:"spec" gorm:"embedded"` + Attachment *UserPrivilegeAttachment `json:"attachment" gorm:"embedded"` + Revision *Revision `json:"revision" gorm:"embedded"` +} + +// TableName is the user_privilege's database table name. +func (u *UserPrivilege) TableName() string { + return "user_privileges" +} + +// AppID AuditRes interface +func (u *UserPrivilege) AppID() uint32 { + return 0 +} + +// ResID AuditRes interface +func (u *UserPrivilege) ResID() uint32 { + return u.ID +} + +// ResType AuditRes interface +func (u *UserPrivilege) ResType() string { + return "user_privileges" +} + +// UserPrivilegeSpec 用户权限组 +type UserPrivilegeSpec struct { + User string `gorm:"column:user" json:"user"` + PrivilegeType PrivilegeType `gorm:"column:privilege_type" json:"privilege_type"` // 权限类型:system、custom + ReadOnly bool `gorm:"column:read_only" json:"read_only"` // 只读 +} + +// UserPrivilegeAttachment xxx +type UserPrivilegeAttachment struct { + BizID uint32 `gorm:"column:biz_id" json:"biz_id"` + AppID uint32 `gorm:"column:app_id" json:"app_id"` + Uid uint32 `gorm:"column:uid" json:"uid"` + TemplateSpaceID uint32 `gorm:"column:template_space_id" json:"template_space_id"` +} diff --git a/pkg/protocol/config-server/config_service.pb.go b/pkg/protocol/config-server/config_service.pb.go index 527397370e..df70d71e52 100644 --- a/pkg/protocol/config-server/config_service.pb.go +++ b/pkg/protocol/config-server/config_service.pb.go @@ -1762,6 +1762,8 @@ type CreateConfigItemReq struct { Privilege string `protobuf:"bytes,10,opt,name=privilege,proto3" json:"privilege,omitempty"` Sign string `protobuf:"bytes,11,opt,name=sign,proto3" json:"sign,omitempty"` ByteSize uint64 `protobuf:"varint,12,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` + Uid uint32 `protobuf:"varint,13,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint32 `protobuf:"varint,14,opt,name=gid,proto3" json:"gid,omitempty"` } func (x *CreateConfigItemReq) Reset() { @@ -1880,6 +1882,20 @@ func (x *CreateConfigItemReq) GetByteSize() uint64 { return 0 } +func (x *CreateConfigItemReq) GetUid() uint32 { + if x != nil { + return x.Uid + } + return 0 +} + +func (x *CreateConfigItemReq) GetGid() uint32 { + if x != nil { + return x.Gid + } + return 0 +} + type BatchUpsertConfigItemsReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2081,6 +2097,8 @@ type UpdateConfigItemReq struct { Privilege string `protobuf:"bytes,11,opt,name=privilege,proto3" json:"privilege,omitempty"` Sign string `protobuf:"bytes,12,opt,name=sign,proto3" json:"sign,omitempty"` ByteSize uint64 `protobuf:"varint,13,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` + Uid uint32 `protobuf:"varint,14,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint32 `protobuf:"varint,15,opt,name=gid,proto3" json:"gid,omitempty"` } func (x *UpdateConfigItemReq) Reset() { @@ -2206,6 +2224,20 @@ func (x *UpdateConfigItemReq) GetByteSize() uint64 { return 0 } +func (x *UpdateConfigItemReq) GetUid() uint32 { + if x != nil { + return x.Uid + } + return 0 +} + +func (x *UpdateConfigItemReq) GetGid() uint32 { + if x != nil { + return x.Gid + } + return 0 +} + type UpdateConfigItemResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7351,6 +7383,8 @@ type CreateTemplateReq struct { Sign string `protobuf:"bytes,13,opt,name=sign,proto3" json:"sign,omitempty"` ByteSize uint64 `protobuf:"varint,14,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` TemplateSetIds []uint32 `protobuf:"varint,15,rep,packed,name=template_set_ids,json=templateSetIds,proto3" json:"template_set_ids,omitempty"` + Uid uint32 `protobuf:"varint,16,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint32 `protobuf:"varint,17,opt,name=gid,proto3" json:"gid,omitempty"` } func (x *CreateTemplateReq) Reset() { @@ -7490,6 +7524,20 @@ func (x *CreateTemplateReq) GetTemplateSetIds() []uint32 { return nil } +func (x *CreateTemplateReq) GetUid() uint32 { + if x != nil { + return x.Uid + } + return 0 +} + +func (x *CreateTemplateReq) GetGid() uint32 { + if x != nil { + return x.Gid + } + return 0 +} + type CreateTemplateResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -8163,6 +8211,8 @@ type BatchUpdateTemplatePermissionsReq struct { TemplateSetId uint32 `protobuf:"varint,8,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` // 套餐ID, 具体操作的哪个套餐 NoSetSpecified bool `protobuf:"varint,9,opt,name=no_set_specified,json=noSetSpecified,proto3" json:"no_set_specified,omitempty"` // 是否未指定套餐, 区分全部套餐和未指定套餐 TemplateSpaceId uint32 `protobuf:"varint,10,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` // 模板空间ID + Uid uint32 `protobuf:"varint,11,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint32 `protobuf:"varint,12,opt,name=gid,proto3" json:"gid,omitempty"` } func (x *BatchUpdateTemplatePermissionsReq) Reset() { @@ -8267,6 +8317,20 @@ func (x *BatchUpdateTemplatePermissionsReq) GetTemplateSpaceId() uint32 { return 0 } +func (x *BatchUpdateTemplatePermissionsReq) GetUid() uint32 { + if x != nil { + return x.Uid + } + return 0 +} + +func (x *BatchUpdateTemplatePermissionsReq) GetGid() uint32 { + if x != nil { + return x.Gid + } + return 0 +} + type BatchUpdateTemplatePermissionsResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -9382,6 +9446,8 @@ type UpdateTemplateRevisionReq struct { Sign string `protobuf:"bytes,13,opt,name=sign,proto3" json:"sign,omitempty"` ByteSize uint64 `protobuf:"varint,14,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` TemplateRevisionId uint32 `protobuf:"varint,15,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` + Uid uint32 `protobuf:"varint,16,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint32 `protobuf:"varint,17,opt,name=gid,proto3" json:"gid,omitempty"` } func (x *UpdateTemplateRevisionReq) Reset() { @@ -9521,6 +9587,20 @@ func (x *UpdateTemplateRevisionReq) GetTemplateRevisionId() uint32 { return 0 } +func (x *UpdateTemplateRevisionReq) GetUid() uint32 { + if x != nil { + return x.Uid + } + return 0 +} + +func (x *UpdateTemplateRevisionReq) GetGid() uint32 { + if x != nil { + return x.Gid + } + return 0 +} + type UpdateTemplateRevisionResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -19462,17 +19542,23 @@ func (x *GetTemplateAndNonTemplateCICountResp) GetTemplateConfigItemCount() uint return 0 } -type CredentialScopePreviewResp_Detail struct { +type CreateUserPrivilegesReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` + AppId uint32 `protobuf:"varint,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + Uid uint32 `protobuf:"varint,3,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint32 `protobuf:"varint,4,opt,name=gid,proto3" json:"gid,omitempty"` + User string `protobuf:"bytes,5,opt,name=user,proto3" json:"user,omitempty"` + UserGroup string `protobuf:"bytes,6,opt,name=user_group,json=userGroup,proto3" json:"user_group,omitempty"` + PrivilegeType string `protobuf:"bytes,7,opt,name=privilege_type,json=privilegeType,proto3" json:"privilege_type,omitempty"` // 权限类型:system、custom + ReadOnly bool `protobuf:"varint,8,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` // 只读 } -func (x *CredentialScopePreviewResp_Detail) Reset() { - *x = CredentialScopePreviewResp_Detail{} +func (x *CreateUserPrivilegesReq) Reset() { + *x = CreateUserPrivilegesReq{} if protoimpl.UnsafeEnabled { mi := &file_config_service_proto_msgTypes[308] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -19480,13 +19566,13 @@ func (x *CredentialScopePreviewResp_Detail) Reset() { } } -func (x *CredentialScopePreviewResp_Detail) String() string { +func (x *CreateUserPrivilegesReq) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CredentialScopePreviewResp_Detail) ProtoMessage() {} +func (*CreateUserPrivilegesReq) ProtoMessage() {} -func (x *CredentialScopePreviewResp_Detail) ProtoReflect() protoreflect.Message { +func (x *CreateUserPrivilegesReq) ProtoReflect() protoreflect.Message { mi := &file_config_service_proto_msgTypes[308] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -19498,47 +19584,77 @@ func (x *CredentialScopePreviewResp_Detail) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use CredentialScopePreviewResp_Detail.ProtoReflect.Descriptor instead. -func (*CredentialScopePreviewResp_Detail) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{3, 0} +// Deprecated: Use CreateUserPrivilegesReq.ProtoReflect.Descriptor instead. +func (*CreateUserPrivilegesReq) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{308} } -func (x *CredentialScopePreviewResp_Detail) GetName() string { +func (x *CreateUserPrivilegesReq) GetBizId() uint32 { if x != nil { - return x.Name + return x.BizId + } + return 0 +} + +func (x *CreateUserPrivilegesReq) GetAppId() uint32 { + if x != nil { + return x.AppId + } + return 0 +} + +func (x *CreateUserPrivilegesReq) GetUid() uint32 { + if x != nil { + return x.Uid + } + return 0 +} + +func (x *CreateUserPrivilegesReq) GetGid() uint32 { + if x != nil { + return x.Gid + } + return 0 +} + +func (x *CreateUserPrivilegesReq) GetUser() string { + if x != nil { + return x.User } return "" } -func (x *CredentialScopePreviewResp_Detail) GetPath() string { +func (x *CreateUserPrivilegesReq) GetUserGroup() string { if x != nil { - return x.Path + return x.UserGroup } return "" } -type BatchUpsertConfigItemsReq_ConfigItem struct { +func (x *CreateUserPrivilegesReq) GetPrivilegeType() string { + if x != nil { + return x.PrivilegeType + } + return "" +} + +func (x *CreateUserPrivilegesReq) GetReadOnly() bool { + if x != nil { + return x.ReadOnly + } + return false +} + +type CreateUserPrivilegesResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` - FileType string `protobuf:"bytes,3,opt,name=file_type,json=fileType,proto3" json:"file_type,omitempty"` // file_type is enum type, source resource reference: - // pkg/dal/table/config_item.go - FileMode string `protobuf:"bytes,4,opt,name=file_mode,json=fileMode,proto3" json:"file_mode,omitempty"` // file_mode is enum type, source resource reference: - // pkg/dal/table/config_item.go - Memo string `protobuf:"bytes,5,opt,name=memo,proto3" json:"memo,omitempty"` - User string `protobuf:"bytes,6,opt,name=user,proto3" json:"user,omitempty"` - UserGroup string `protobuf:"bytes,7,opt,name=user_group,json=userGroup,proto3" json:"user_group,omitempty"` - Privilege string `protobuf:"bytes,8,opt,name=privilege,proto3" json:"privilege,omitempty"` - Sign string `protobuf:"bytes,9,opt,name=sign,proto3" json:"sign,omitempty"` - ByteSize uint64 `protobuf:"varint,10,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` - Md5 string `protobuf:"bytes,11,opt,name=md5,proto3" json:"md5,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` } -func (x *BatchUpsertConfigItemsReq_ConfigItem) Reset() { - *x = BatchUpsertConfigItemsReq_ConfigItem{} +func (x *CreateUserPrivilegesResp) Reset() { + *x = CreateUserPrivilegesResp{} if protoimpl.UnsafeEnabled { mi := &file_config_service_proto_msgTypes[309] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -19546,13 +19662,13 @@ func (x *BatchUpsertConfigItemsReq_ConfigItem) Reset() { } } -func (x *BatchUpsertConfigItemsReq_ConfigItem) String() string { +func (x *CreateUserPrivilegesResp) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BatchUpsertConfigItemsReq_ConfigItem) ProtoMessage() {} +func (*CreateUserPrivilegesResp) ProtoMessage() {} -func (x *BatchUpsertConfigItemsReq_ConfigItem) ProtoReflect() protoreflect.Message { +func (x *CreateUserPrivilegesResp) ProtoReflect() protoreflect.Message { mi := &file_config_service_proto_msgTypes[309] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -19564,114 +19680,139 @@ func (x *BatchUpsertConfigItemsReq_ConfigItem) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use BatchUpsertConfigItemsReq_ConfigItem.ProtoReflect.Descriptor instead. -func (*BatchUpsertConfigItemsReq_ConfigItem) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{29, 0} +// Deprecated: Use CreateUserPrivilegesResp.ProtoReflect.Descriptor instead. +func (*CreateUserPrivilegesResp) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{309} } -func (x *BatchUpsertConfigItemsReq_ConfigItem) GetName() string { +func (x *CreateUserPrivilegesResp) GetId() uint32 { if x != nil { - return x.Name + return x.Id } - return "" + return 0 } -func (x *BatchUpsertConfigItemsReq_ConfigItem) GetPath() string { - if x != nil { - return x.Path - } - return "" +type ListUserPrivilegesReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` + AppId uint32 `protobuf:"varint,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + TemplateSpaceId uint32 `protobuf:"varint,3,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` + Start uint32 `protobuf:"varint,4,opt,name=start,proto3" json:"start,omitempty"` + Limit uint32 `protobuf:"varint,5,opt,name=limit,proto3" json:"limit,omitempty"` + All bool `protobuf:"varint,6,opt,name=all,proto3" json:"all,omitempty"` + Name string `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"` // 名称 } -func (x *BatchUpsertConfigItemsReq_ConfigItem) GetFileType() string { - if x != nil { - return x.FileType +func (x *ListUserPrivilegesReq) Reset() { + *x = ListUserPrivilegesReq{} + if protoimpl.UnsafeEnabled { + mi := &file_config_service_proto_msgTypes[310] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (x *BatchUpsertConfigItemsReq_ConfigItem) GetFileMode() string { - if x != nil { - return x.FileMode +func (x *ListUserPrivilegesReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListUserPrivilegesReq) ProtoMessage() {} + +func (x *ListUserPrivilegesReq) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[310] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *BatchUpsertConfigItemsReq_ConfigItem) GetMemo() string { +// Deprecated: Use ListUserPrivilegesReq.ProtoReflect.Descriptor instead. +func (*ListUserPrivilegesReq) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{310} +} + +func (x *ListUserPrivilegesReq) GetBizId() uint32 { if x != nil { - return x.Memo + return x.BizId } - return "" + return 0 } -func (x *BatchUpsertConfigItemsReq_ConfigItem) GetUser() string { +func (x *ListUserPrivilegesReq) GetAppId() uint32 { if x != nil { - return x.User + return x.AppId } - return "" + return 0 } -func (x *BatchUpsertConfigItemsReq_ConfigItem) GetUserGroup() string { +func (x *ListUserPrivilegesReq) GetTemplateSpaceId() uint32 { if x != nil { - return x.UserGroup + return x.TemplateSpaceId } - return "" + return 0 } -func (x *BatchUpsertConfigItemsReq_ConfigItem) GetPrivilege() string { +func (x *ListUserPrivilegesReq) GetStart() uint32 { if x != nil { - return x.Privilege + return x.Start } - return "" + return 0 } -func (x *BatchUpsertConfigItemsReq_ConfigItem) GetSign() string { +func (x *ListUserPrivilegesReq) GetLimit() uint32 { if x != nil { - return x.Sign + return x.Limit } - return "" + return 0 } -func (x *BatchUpsertConfigItemsReq_ConfigItem) GetByteSize() uint64 { +func (x *ListUserPrivilegesReq) GetAll() bool { if x != nil { - return x.ByteSize + return x.All } - return 0 + return false } -func (x *BatchUpsertConfigItemsReq_ConfigItem) GetMd5() string { +func (x *ListUserPrivilegesReq) GetName() string { if x != nil { - return x.Md5 + return x.Name } return "" } -type BatchUpsertConfigItemsReq_TemplateBinding struct { +type ListUserPrivilegesResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TemplateSpaceId uint32 `protobuf:"varint,1,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` - TemplateBinding *app_template_binding.TemplateBinding `protobuf:"bytes,2,opt,name=template_binding,json=templateBinding,proto3" json:"template_binding,omitempty"` + Count uint32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` + Details []*ListUserPrivilegesResp_Detail `protobuf:"bytes,2,rep,name=details,proto3" json:"details,omitempty"` } -func (x *BatchUpsertConfigItemsReq_TemplateBinding) Reset() { - *x = BatchUpsertConfigItemsReq_TemplateBinding{} +func (x *ListUserPrivilegesResp) Reset() { + *x = ListUserPrivilegesResp{} if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[310] + mi := &file_config_service_proto_msgTypes[311] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *BatchUpsertConfigItemsReq_TemplateBinding) String() string { +func (x *ListUserPrivilegesResp) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BatchUpsertConfigItemsReq_TemplateBinding) ProtoMessage() {} +func (*ListUserPrivilegesResp) ProtoMessage() {} -func (x *BatchUpsertConfigItemsReq_TemplateBinding) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[310] +func (x *ListUserPrivilegesResp) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[311] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19682,51 +19823,53 @@ func (x *BatchUpsertConfigItemsReq_TemplateBinding) ProtoReflect() protoreflect. return mi.MessageOf(x) } -// Deprecated: Use BatchUpsertConfigItemsReq_TemplateBinding.ProtoReflect.Descriptor instead. -func (*BatchUpsertConfigItemsReq_TemplateBinding) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{29, 1} +// Deprecated: Use ListUserPrivilegesResp.ProtoReflect.Descriptor instead. +func (*ListUserPrivilegesResp) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{311} } -func (x *BatchUpsertConfigItemsReq_TemplateBinding) GetTemplateSpaceId() uint32 { +func (x *ListUserPrivilegesResp) GetCount() uint32 { if x != nil { - return x.TemplateSpaceId + return x.Count } return 0 } -func (x *BatchUpsertConfigItemsReq_TemplateBinding) GetTemplateBinding() *app_template_binding.TemplateBinding { +func (x *ListUserPrivilegesResp) GetDetails() []*ListUserPrivilegesResp_Detail { if x != nil { - return x.TemplateBinding + return x.Details } return nil } -type ListConfigItemByTupleReq_Item struct { +type DeleteUserPrivilegesReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + BizId uint32 `protobuf:"varint,2,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` + AppId uint32 `protobuf:"varint,3,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + TemplateSpaceId uint32 `protobuf:"varint,4,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` } -func (x *ListConfigItemByTupleReq_Item) Reset() { - *x = ListConfigItemByTupleReq_Item{} +func (x *DeleteUserPrivilegesReq) Reset() { + *x = DeleteUserPrivilegesReq{} if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[311] + mi := &file_config_service_proto_msgTypes[312] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ListConfigItemByTupleReq_Item) String() string { +func (x *DeleteUserPrivilegesReq) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListConfigItemByTupleReq_Item) ProtoMessage() {} +func (*DeleteUserPrivilegesReq) ProtoMessage() {} -func (x *ListConfigItemByTupleReq_Item) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[311] +func (x *DeleteUserPrivilegesReq) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[312] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19737,53 +19880,62 @@ func (x *ListConfigItemByTupleReq_Item) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListConfigItemByTupleReq_Item.ProtoReflect.Descriptor instead. -func (*ListConfigItemByTupleReq_Item) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{52, 0} +// Deprecated: Use DeleteUserPrivilegesReq.ProtoReflect.Descriptor instead. +func (*DeleteUserPrivilegesReq) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{312} } -func (x *ListConfigItemByTupleReq_Item) GetName() string { +func (x *DeleteUserPrivilegesReq) GetId() uint32 { if x != nil { - return x.Name + return x.Id } - return "" + return 0 } -func (x *ListConfigItemByTupleReq_Item) GetPath() string { +func (x *DeleteUserPrivilegesReq) GetBizId() uint32 { if x != nil { - return x.Path + return x.BizId } - return "" + return 0 } -type ListHooksResp_Detail struct { +func (x *DeleteUserPrivilegesReq) GetAppId() uint32 { + if x != nil { + return x.AppId + } + return 0 +} + +func (x *DeleteUserPrivilegesReq) GetTemplateSpaceId() uint32 { + if x != nil { + return x.TemplateSpaceId + } + return 0 +} + +type DeleteUserPrivilegesResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - Hook *hook.Hook `protobuf:"bytes,1,opt,name=hook,proto3" json:"hook,omitempty"` - BoundNum uint32 `protobuf:"varint,2,opt,name=bound_num,json=boundNum,proto3" json:"bound_num,omitempty"` - ConfirmDelete bool `protobuf:"varint,3,opt,name=confirm_delete,json=confirmDelete,proto3" json:"confirm_delete,omitempty"` - PublishedRevisionId uint32 `protobuf:"varint,4,opt,name=published_revision_id,json=publishedRevisionId,proto3" json:"published_revision_id,omitempty"` } -func (x *ListHooksResp_Detail) Reset() { - *x = ListHooksResp_Detail{} +func (x *DeleteUserPrivilegesResp) Reset() { + *x = DeleteUserPrivilegesResp{} if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[312] + mi := &file_config_service_proto_msgTypes[313] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ListHooksResp_Detail) String() string { +func (x *DeleteUserPrivilegesResp) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListHooksResp_Detail) ProtoMessage() {} +func (*DeleteUserPrivilegesResp) ProtoMessage() {} -func (x *ListHooksResp_Detail) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[312] +func (x *DeleteUserPrivilegesResp) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[313] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19794,66 +19946,37 @@ func (x *ListHooksResp_Detail) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListHooksResp_Detail.ProtoReflect.Descriptor instead. -func (*ListHooksResp_Detail) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{82, 0} -} - -func (x *ListHooksResp_Detail) GetHook() *hook.Hook { - if x != nil { - return x.Hook - } - return nil -} - -func (x *ListHooksResp_Detail) GetBoundNum() uint32 { - if x != nil { - return x.BoundNum - } - return 0 -} - -func (x *ListHooksResp_Detail) GetConfirmDelete() bool { - if x != nil { - return x.ConfirmDelete - } - return false -} - -func (x *ListHooksResp_Detail) GetPublishedRevisionId() uint32 { - if x != nil { - return x.PublishedRevisionId - } - return 0 +// Deprecated: Use DeleteUserPrivilegesResp.ProtoReflect.Descriptor instead. +func (*DeleteUserPrivilegesResp) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{313} } -type ListHookRevisionsResp_ListHookRevisionsData struct { +type CredentialScopePreviewResp_Detail struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - HookRevision *hook_revision.HookRevision `protobuf:"bytes,1,opt,name=hook_revision,json=hookRevision,proto3" json:"hook_revision,omitempty"` - BoundNum uint32 `protobuf:"varint,2,opt,name=bound_num,json=boundNum,proto3" json:"bound_num,omitempty"` - ConfirmDelete bool `protobuf:"varint,3,opt,name=confirm_delete,json=confirmDelete,proto3" json:"confirm_delete,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` } -func (x *ListHookRevisionsResp_ListHookRevisionsData) Reset() { - *x = ListHookRevisionsResp_ListHookRevisionsData{} +func (x *CredentialScopePreviewResp_Detail) Reset() { + *x = CredentialScopePreviewResp_Detail{} if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[313] + mi := &file_config_service_proto_msgTypes[314] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ListHookRevisionsResp_ListHookRevisionsData) String() string { +func (x *CredentialScopePreviewResp_Detail) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListHookRevisionsResp_ListHookRevisionsData) ProtoMessage() {} +func (*CredentialScopePreviewResp_Detail) ProtoMessage() {} -func (x *ListHookRevisionsResp_ListHookRevisionsData) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[313] +func (x *CredentialScopePreviewResp_Detail) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[314] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19864,57 +19987,64 @@ func (x *ListHookRevisionsResp_ListHookRevisionsData) ProtoReflect() protoreflec return mi.MessageOf(x) } -// Deprecated: Use ListHookRevisionsResp_ListHookRevisionsData.ProtoReflect.Descriptor instead. -func (*ListHookRevisionsResp_ListHookRevisionsData) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{88, 0} -} - -func (x *ListHookRevisionsResp_ListHookRevisionsData) GetHookRevision() *hook_revision.HookRevision { - if x != nil { - return x.HookRevision - } - return nil +// Deprecated: Use CredentialScopePreviewResp_Detail.ProtoReflect.Descriptor instead. +func (*CredentialScopePreviewResp_Detail) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{3, 0} } -func (x *ListHookRevisionsResp_ListHookRevisionsData) GetBoundNum() uint32 { +func (x *CredentialScopePreviewResp_Detail) GetName() string { if x != nil { - return x.BoundNum + return x.Name } - return 0 + return "" } -func (x *ListHookRevisionsResp_ListHookRevisionsData) GetConfirmDelete() bool { +func (x *CredentialScopePreviewResp_Detail) GetPath() string { if x != nil { - return x.ConfirmDelete + return x.Path } - return false + return "" } -type GetHookInfoSpec_Releases struct { +type BatchUpsertConfigItemsReq_ConfigItem struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - NotReleaseId uint32 `protobuf:"varint,1,opt,name=not_release_id,json=notReleaseId,proto3" json:"not_release_id,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + FileType string `protobuf:"bytes,3,opt,name=file_type,json=fileType,proto3" json:"file_type,omitempty"` // file_type is enum type, source resource reference: + // pkg/dal/table/config_item.go + FileMode string `protobuf:"bytes,4,opt,name=file_mode,json=fileMode,proto3" json:"file_mode,omitempty"` // file_mode is enum type, source resource reference: + // pkg/dal/table/config_item.go + Memo string `protobuf:"bytes,5,opt,name=memo,proto3" json:"memo,omitempty"` + User string `protobuf:"bytes,6,opt,name=user,proto3" json:"user,omitempty"` + UserGroup string `protobuf:"bytes,7,opt,name=user_group,json=userGroup,proto3" json:"user_group,omitempty"` + Privilege string `protobuf:"bytes,8,opt,name=privilege,proto3" json:"privilege,omitempty"` + Sign string `protobuf:"bytes,9,opt,name=sign,proto3" json:"sign,omitempty"` + ByteSize uint64 `protobuf:"varint,10,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` + Md5 string `protobuf:"bytes,11,opt,name=md5,proto3" json:"md5,omitempty"` + Uid uint32 `protobuf:"varint,12,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint32 `protobuf:"varint,13,opt,name=gid,proto3" json:"gid,omitempty"` } -func (x *GetHookInfoSpec_Releases) Reset() { - *x = GetHookInfoSpec_Releases{} +func (x *BatchUpsertConfigItemsReq_ConfigItem) Reset() { + *x = BatchUpsertConfigItemsReq_ConfigItem{} if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[314] + mi := &file_config_service_proto_msgTypes[315] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetHookInfoSpec_Releases) String() string { +func (x *BatchUpsertConfigItemsReq_ConfigItem) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetHookInfoSpec_Releases) ProtoMessage() {} +func (*BatchUpsertConfigItemsReq_ConfigItem) ProtoMessage() {} -func (x *GetHookInfoSpec_Releases) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[314] +func (x *BatchUpsertConfigItemsReq_ConfigItem) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[315] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19925,138 +20055,113 @@ func (x *GetHookInfoSpec_Releases) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetHookInfoSpec_Releases.ProtoReflect.Descriptor instead. -func (*GetHookInfoSpec_Releases) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{95, 0} +// Deprecated: Use BatchUpsertConfigItemsReq_ConfigItem.ProtoReflect.Descriptor instead. +func (*BatchUpsertConfigItemsReq_ConfigItem) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{29, 0} } -func (x *GetHookInfoSpec_Releases) GetNotReleaseId() uint32 { +func (x *BatchUpsertConfigItemsReq_ConfigItem) GetName() string { if x != nil { - return x.NotReleaseId + return x.Name } - return 0 -} - -type ListHookRevisionReferencesResp_Detail struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RevisionId uint32 `protobuf:"varint,1,opt,name=revision_id,json=revisionId,proto3" json:"revision_id,omitempty"` - RevisionName string `protobuf:"bytes,2,opt,name=revision_name,json=revisionName,proto3" json:"revision_name,omitempty"` - AppId uint32 `protobuf:"varint,3,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` - AppName string `protobuf:"bytes,4,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` - ReleaseId uint32 `protobuf:"varint,5,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"` - ReleaseName string `protobuf:"bytes,6,opt,name=release_name,json=releaseName,proto3" json:"release_name,omitempty"` - Type string `protobuf:"bytes,7,opt,name=type,proto3" json:"type,omitempty"` - Deprecated bool `protobuf:"varint,8,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + return "" } -func (x *ListHookRevisionReferencesResp_Detail) Reset() { - *x = ListHookRevisionReferencesResp_Detail{} - if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[315] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *BatchUpsertConfigItemsReq_ConfigItem) GetPath() string { + if x != nil { + return x.Path } + return "" } -func (x *ListHookRevisionReferencesResp_Detail) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *BatchUpsertConfigItemsReq_ConfigItem) GetFileType() string { + if x != nil { + return x.FileType + } + return "" } -func (*ListHookRevisionReferencesResp_Detail) ProtoMessage() {} - -func (x *ListHookRevisionReferencesResp_Detail) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[315] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *BatchUpsertConfigItemsReq_ConfigItem) GetFileMode() string { + if x != nil { + return x.FileMode } - return mi.MessageOf(x) + return "" } -// Deprecated: Use ListHookRevisionReferencesResp_Detail.ProtoReflect.Descriptor instead. -func (*ListHookRevisionReferencesResp_Detail) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{100, 0} +func (x *BatchUpsertConfigItemsReq_ConfigItem) GetMemo() string { + if x != nil { + return x.Memo + } + return "" } -func (x *ListHookRevisionReferencesResp_Detail) GetRevisionId() uint32 { +func (x *BatchUpsertConfigItemsReq_ConfigItem) GetUser() string { if x != nil { - return x.RevisionId + return x.User } - return 0 + return "" } -func (x *ListHookRevisionReferencesResp_Detail) GetRevisionName() string { +func (x *BatchUpsertConfigItemsReq_ConfigItem) GetUserGroup() string { if x != nil { - return x.RevisionName + return x.UserGroup } return "" } -func (x *ListHookRevisionReferencesResp_Detail) GetAppId() uint32 { +func (x *BatchUpsertConfigItemsReq_ConfigItem) GetPrivilege() string { if x != nil { - return x.AppId + return x.Privilege } - return 0 + return "" } -func (x *ListHookRevisionReferencesResp_Detail) GetAppName() string { +func (x *BatchUpsertConfigItemsReq_ConfigItem) GetSign() string { if x != nil { - return x.AppName + return x.Sign } return "" } -func (x *ListHookRevisionReferencesResp_Detail) GetReleaseId() uint32 { +func (x *BatchUpsertConfigItemsReq_ConfigItem) GetByteSize() uint64 { if x != nil { - return x.ReleaseId + return x.ByteSize } return 0 } -func (x *ListHookRevisionReferencesResp_Detail) GetReleaseName() string { +func (x *BatchUpsertConfigItemsReq_ConfigItem) GetMd5() string { if x != nil { - return x.ReleaseName + return x.Md5 } return "" } -func (x *ListHookRevisionReferencesResp_Detail) GetType() string { +func (x *BatchUpsertConfigItemsReq_ConfigItem) GetUid() uint32 { if x != nil { - return x.Type + return x.Uid } - return "" + return 0 } -func (x *ListHookRevisionReferencesResp_Detail) GetDeprecated() bool { +func (x *BatchUpsertConfigItemsReq_ConfigItem) GetGid() uint32 { if x != nil { - return x.Deprecated + return x.Gid } - return false + return 0 } -type ListHookReferencesResp_Detail struct { +type BatchUpsertConfigItemsReq_TemplateBinding struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - HookRevisionId uint32 `protobuf:"varint,1,opt,name=hook_revision_id,json=hookRevisionId,proto3" json:"hook_revision_id,omitempty"` - HookRevisionName string `protobuf:"bytes,2,opt,name=hook_revision_name,json=hookRevisionName,proto3" json:"hook_revision_name,omitempty"` - AppId uint32 `protobuf:"varint,3,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` - AppName string `protobuf:"bytes,4,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` - ReleaseId uint32 `protobuf:"varint,5,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"` - ReleaseName string `protobuf:"bytes,6,opt,name=release_name,json=releaseName,proto3" json:"release_name,omitempty"` - Type string `protobuf:"bytes,7,opt,name=type,proto3" json:"type,omitempty"` - Deprecated bool `protobuf:"varint,8,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + TemplateSpaceId uint32 `protobuf:"varint,1,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` + TemplateBinding *app_template_binding.TemplateBinding `protobuf:"bytes,2,opt,name=template_binding,json=templateBinding,proto3" json:"template_binding,omitempty"` } -func (x *ListHookReferencesResp_Detail) Reset() { - *x = ListHookReferencesResp_Detail{} +func (x *BatchUpsertConfigItemsReq_TemplateBinding) Reset() { + *x = BatchUpsertConfigItemsReq_TemplateBinding{} if protoimpl.UnsafeEnabled { mi := &file_config_service_proto_msgTypes[316] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -20064,13 +20169,13 @@ func (x *ListHookReferencesResp_Detail) Reset() { } } -func (x *ListHookReferencesResp_Detail) String() string { +func (x *BatchUpsertConfigItemsReq_TemplateBinding) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListHookReferencesResp_Detail) ProtoMessage() {} +func (*BatchUpsertConfigItemsReq_TemplateBinding) ProtoMessage() {} -func (x *ListHookReferencesResp_Detail) ProtoReflect() protoreflect.Message { +func (x *BatchUpsertConfigItemsReq_TemplateBinding) ProtoReflect() protoreflect.Message { mi := &file_config_service_proto_msgTypes[316] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -20082,97 +20187,108 @@ func (x *ListHookReferencesResp_Detail) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListHookReferencesResp_Detail.ProtoReflect.Descriptor instead. -func (*ListHookReferencesResp_Detail) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{102, 0} +// Deprecated: Use BatchUpsertConfigItemsReq_TemplateBinding.ProtoReflect.Descriptor instead. +func (*BatchUpsertConfigItemsReq_TemplateBinding) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{29, 1} } -func (x *ListHookReferencesResp_Detail) GetHookRevisionId() uint32 { +func (x *BatchUpsertConfigItemsReq_TemplateBinding) GetTemplateSpaceId() uint32 { if x != nil { - return x.HookRevisionId + return x.TemplateSpaceId } return 0 } -func (x *ListHookReferencesResp_Detail) GetHookRevisionName() string { +func (x *BatchUpsertConfigItemsReq_TemplateBinding) GetTemplateBinding() *app_template_binding.TemplateBinding { if x != nil { - return x.HookRevisionName + return x.TemplateBinding } - return "" + return nil } -func (x *ListHookReferencesResp_Detail) GetAppId() uint32 { - if x != nil { - return x.AppId - } - return 0 +type ListConfigItemByTupleReq_Item struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` } -func (x *ListHookReferencesResp_Detail) GetAppName() string { - if x != nil { - return x.AppName +func (x *ListConfigItemByTupleReq_Item) Reset() { + *x = ListConfigItemByTupleReq_Item{} + if protoimpl.UnsafeEnabled { + mi := &file_config_service_proto_msgTypes[317] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (x *ListHookReferencesResp_Detail) GetReleaseId() uint32 { - if x != nil { - return x.ReleaseId - } - return 0 +func (x *ListConfigItemByTupleReq_Item) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *ListHookReferencesResp_Detail) GetReleaseName() string { - if x != nil { - return x.ReleaseName +func (*ListConfigItemByTupleReq_Item) ProtoMessage() {} + +func (x *ListConfigItemByTupleReq_Item) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[317] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *ListHookReferencesResp_Detail) GetType() string { +// Deprecated: Use ListConfigItemByTupleReq_Item.ProtoReflect.Descriptor instead. +func (*ListConfigItemByTupleReq_Item) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{52, 0} +} + +func (x *ListConfigItemByTupleReq_Item) GetName() string { if x != nil { - return x.Type + return x.Name } return "" } -func (x *ListHookReferencesResp_Detail) GetDeprecated() bool { +func (x *ListConfigItemByTupleReq_Item) GetPath() string { if x != nil { - return x.Deprecated + return x.Path } - return false + return "" } -type GetReleaseHookResp_Hook struct { +type ListHooksResp_Detail struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - HookId uint32 `protobuf:"varint,1,opt,name=hook_id,json=hookId,proto3" json:"hook_id,omitempty"` - HookName string `protobuf:"bytes,2,opt,name=hook_name,json=hookName,proto3" json:"hook_name,omitempty"` - HookRevisionId uint32 `protobuf:"varint,3,opt,name=hook_revision_id,json=hookRevisionId,proto3" json:"hook_revision_id,omitempty"` - HookRevisionName string `protobuf:"bytes,4,opt,name=hook_revision_name,json=hookRevisionName,proto3" json:"hook_revision_name,omitempty"` - Type string `protobuf:"bytes,5,opt,name=type,proto3" json:"type,omitempty"` - Content string `protobuf:"bytes,7,opt,name=content,proto3" json:"content,omitempty"` + Hook *hook.Hook `protobuf:"bytes,1,opt,name=hook,proto3" json:"hook,omitempty"` + BoundNum uint32 `protobuf:"varint,2,opt,name=bound_num,json=boundNum,proto3" json:"bound_num,omitempty"` + ConfirmDelete bool `protobuf:"varint,3,opt,name=confirm_delete,json=confirmDelete,proto3" json:"confirm_delete,omitempty"` + PublishedRevisionId uint32 `protobuf:"varint,4,opt,name=published_revision_id,json=publishedRevisionId,proto3" json:"published_revision_id,omitempty"` } -func (x *GetReleaseHookResp_Hook) Reset() { - *x = GetReleaseHookResp_Hook{} +func (x *ListHooksResp_Detail) Reset() { + *x = ListHooksResp_Detail{} if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[317] + mi := &file_config_service_proto_msgTypes[318] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetReleaseHookResp_Hook) String() string { +func (x *ListHooksResp_Detail) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetReleaseHookResp_Hook) ProtoMessage() {} +func (*ListHooksResp_Detail) ProtoMessage() {} -func (x *GetReleaseHookResp_Hook) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[317] +func (x *ListHooksResp_Detail) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[318] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20183,91 +20299,66 @@ func (x *GetReleaseHookResp_Hook) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetReleaseHookResp_Hook.ProtoReflect.Descriptor instead. -func (*GetReleaseHookResp_Hook) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{104, 0} -} - -func (x *GetReleaseHookResp_Hook) GetHookId() uint32 { - if x != nil { - return x.HookId - } - return 0 +// Deprecated: Use ListHooksResp_Detail.ProtoReflect.Descriptor instead. +func (*ListHooksResp_Detail) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{82, 0} } -func (x *GetReleaseHookResp_Hook) GetHookName() string { +func (x *ListHooksResp_Detail) GetHook() *hook.Hook { if x != nil { - return x.HookName + return x.Hook } - return "" + return nil } -func (x *GetReleaseHookResp_Hook) GetHookRevisionId() uint32 { +func (x *ListHooksResp_Detail) GetBoundNum() uint32 { if x != nil { - return x.HookRevisionId + return x.BoundNum } return 0 } -func (x *GetReleaseHookResp_Hook) GetHookRevisionName() string { - if x != nil { - return x.HookRevisionName - } - return "" -} - -func (x *GetReleaseHookResp_Hook) GetType() string { +func (x *ListHooksResp_Detail) GetConfirmDelete() bool { if x != nil { - return x.Type + return x.ConfirmDelete } - return "" + return false } -func (x *GetReleaseHookResp_Hook) GetContent() string { +func (x *ListHooksResp_Detail) GetPublishedRevisionId() uint32 { if x != nil { - return x.Content + return x.PublishedRevisionId } - return "" + return 0 } -type BatchUpsertTemplatesReq_Item struct { +type ListHookRevisionsResp_ListHookRevisionsData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` - FileType string `protobuf:"bytes,4,opt,name=file_type,json=fileType,proto3" json:"file_type,omitempty"` // file_type is enum type, source resource reference: - // pkg/dal/table/config_item.go - FileMode string `protobuf:"bytes,5,opt,name=file_mode,json=fileMode,proto3" json:"file_mode,omitempty"` // file_mode is enum type, source resource reference: - // pkg/dal/table/config_item.go - Memo string `protobuf:"bytes,6,opt,name=memo,proto3" json:"memo,omitempty"` - User string `protobuf:"bytes,7,opt,name=user,proto3" json:"user,omitempty"` - UserGroup string `protobuf:"bytes,8,opt,name=user_group,json=userGroup,proto3" json:"user_group,omitempty"` - Privilege string `protobuf:"bytes,9,opt,name=privilege,proto3" json:"privilege,omitempty"` - Sign string `protobuf:"bytes,10,opt,name=sign,proto3" json:"sign,omitempty"` - ByteSize uint64 `protobuf:"varint,11,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` - Md5 string `protobuf:"bytes,12,opt,name=md5,proto3" json:"md5,omitempty"` + HookRevision *hook_revision.HookRevision `protobuf:"bytes,1,opt,name=hook_revision,json=hookRevision,proto3" json:"hook_revision,omitempty"` + BoundNum uint32 `protobuf:"varint,2,opt,name=bound_num,json=boundNum,proto3" json:"bound_num,omitempty"` + ConfirmDelete bool `protobuf:"varint,3,opt,name=confirm_delete,json=confirmDelete,proto3" json:"confirm_delete,omitempty"` } -func (x *BatchUpsertTemplatesReq_Item) Reset() { - *x = BatchUpsertTemplatesReq_Item{} +func (x *ListHookRevisionsResp_ListHookRevisionsData) Reset() { + *x = ListHookRevisionsResp_ListHookRevisionsData{} if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[318] + mi := &file_config_service_proto_msgTypes[319] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *BatchUpsertTemplatesReq_Item) String() string { +func (x *ListHookRevisionsResp_ListHookRevisionsData) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BatchUpsertTemplatesReq_Item) ProtoMessage() {} +func (*ListHookRevisionsResp_ListHookRevisionsData) ProtoMessage() {} -func (x *BatchUpsertTemplatesReq_Item) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[318] +func (x *ListHookRevisionsResp_ListHookRevisionsData) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[319] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20278,121 +20369,111 @@ func (x *BatchUpsertTemplatesReq_Item) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BatchUpsertTemplatesReq_Item.ProtoReflect.Descriptor instead. -func (*BatchUpsertTemplatesReq_Item) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{128, 0} +// Deprecated: Use ListHookRevisionsResp_ListHookRevisionsData.ProtoReflect.Descriptor instead. +func (*ListHookRevisionsResp_ListHookRevisionsData) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{88, 0} } -func (x *BatchUpsertTemplatesReq_Item) GetId() uint32 { +func (x *ListHookRevisionsResp_ListHookRevisionsData) GetHookRevision() *hook_revision.HookRevision { if x != nil { - return x.Id + return x.HookRevision } - return 0 + return nil } -func (x *BatchUpsertTemplatesReq_Item) GetName() string { +func (x *ListHookRevisionsResp_ListHookRevisionsData) GetBoundNum() uint32 { if x != nil { - return x.Name + return x.BoundNum } - return "" + return 0 } -func (x *BatchUpsertTemplatesReq_Item) GetPath() string { +func (x *ListHookRevisionsResp_ListHookRevisionsData) GetConfirmDelete() bool { if x != nil { - return x.Path + return x.ConfirmDelete } - return "" + return false } -func (x *BatchUpsertTemplatesReq_Item) GetFileType() string { - if x != nil { - return x.FileType - } - return "" +type GetHookInfoSpec_Releases struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NotReleaseId uint32 `protobuf:"varint,1,opt,name=not_release_id,json=notReleaseId,proto3" json:"not_release_id,omitempty"` } -func (x *BatchUpsertTemplatesReq_Item) GetFileMode() string { - if x != nil { - return x.FileMode +func (x *GetHookInfoSpec_Releases) Reset() { + *x = GetHookInfoSpec_Releases{} + if protoimpl.UnsafeEnabled { + mi := &file_config_service_proto_msgTypes[320] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (x *BatchUpsertTemplatesReq_Item) GetMemo() string { - if x != nil { - return x.Memo - } - return "" +func (x *GetHookInfoSpec_Releases) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *BatchUpsertTemplatesReq_Item) GetUser() string { - if x != nil { - return x.User +func (*GetHookInfoSpec_Releases) ProtoMessage() {} + +func (x *GetHookInfoSpec_Releases) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[320] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *BatchUpsertTemplatesReq_Item) GetUserGroup() string { - if x != nil { - return x.UserGroup - } - return "" +// Deprecated: Use GetHookInfoSpec_Releases.ProtoReflect.Descriptor instead. +func (*GetHookInfoSpec_Releases) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{95, 0} } -func (x *BatchUpsertTemplatesReq_Item) GetPrivilege() string { +func (x *GetHookInfoSpec_Releases) GetNotReleaseId() uint32 { if x != nil { - return x.Privilege - } - return "" -} - -func (x *BatchUpsertTemplatesReq_Item) GetSign() string { - if x != nil { - return x.Sign - } - return "" -} - -func (x *BatchUpsertTemplatesReq_Item) GetByteSize() uint64 { - if x != nil { - return x.ByteSize + return x.NotReleaseId } return 0 } -func (x *BatchUpsertTemplatesReq_Item) GetMd5() string { - if x != nil { - return x.Md5 - } - return "" -} - -type ListTemplateByTupleReq_Item struct { +type ListHookRevisionReferencesResp_Detail struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + RevisionId uint32 `protobuf:"varint,1,opt,name=revision_id,json=revisionId,proto3" json:"revision_id,omitempty"` + RevisionName string `protobuf:"bytes,2,opt,name=revision_name,json=revisionName,proto3" json:"revision_name,omitempty"` + AppId uint32 `protobuf:"varint,3,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + AppName string `protobuf:"bytes,4,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` + ReleaseId uint32 `protobuf:"varint,5,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"` + ReleaseName string `protobuf:"bytes,6,opt,name=release_name,json=releaseName,proto3" json:"release_name,omitempty"` + Type string `protobuf:"bytes,7,opt,name=type,proto3" json:"type,omitempty"` + Deprecated bool `protobuf:"varint,8,opt,name=deprecated,proto3" json:"deprecated,omitempty"` } -func (x *ListTemplateByTupleReq_Item) Reset() { - *x = ListTemplateByTupleReq_Item{} +func (x *ListHookRevisionReferencesResp_Detail) Reset() { + *x = ListHookRevisionReferencesResp_Detail{} if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[319] + mi := &file_config_service_proto_msgTypes[321] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ListTemplateByTupleReq_Item) String() string { +func (x *ListHookRevisionReferencesResp_Detail) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListTemplateByTupleReq_Item) ProtoMessage() {} +func (*ListHookRevisionReferencesResp_Detail) ProtoMessage() {} -func (x *ListTemplateByTupleReq_Item) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[319] +func (x *ListHookRevisionReferencesResp_Detail) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[321] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20403,161 +20484,84 @@ func (x *ListTemplateByTupleReq_Item) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListTemplateByTupleReq_Item.ProtoReflect.Descriptor instead. -func (*ListTemplateByTupleReq_Item) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{138, 0} +// Deprecated: Use ListHookRevisionReferencesResp_Detail.ProtoReflect.Descriptor instead. +func (*ListHookRevisionReferencesResp_Detail) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{100, 0} } -func (x *ListTemplateByTupleReq_Item) GetName() string { +func (x *ListHookRevisionReferencesResp_Detail) GetRevisionId() uint32 { if x != nil { - return x.Name + return x.RevisionId } - return "" + return 0 } -func (x *ListTemplateByTupleReq_Item) GetPath() string { +func (x *ListHookRevisionReferencesResp_Detail) GetRevisionName() string { if x != nil { - return x.Path + return x.RevisionName } return "" } -type ListTemplateByTupleResp_Item struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Template *template.Template `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` - TemplateRevision *template_revision.TemplateRevision `protobuf:"bytes,2,opt,name=template_revision,json=templateRevision,proto3" json:"template_revision,omitempty"` -} - -func (x *ListTemplateByTupleResp_Item) Reset() { - *x = ListTemplateByTupleResp_Item{} - if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[320] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListTemplateByTupleResp_Item) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListTemplateByTupleResp_Item) ProtoMessage() {} - -func (x *ListTemplateByTupleResp_Item) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[320] - 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 ListTemplateByTupleResp_Item.ProtoReflect.Descriptor instead. -func (*ListTemplateByTupleResp_Item) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{139, 0} -} - -func (x *ListTemplateByTupleResp_Item) GetTemplate() *template.Template { +func (x *ListHookRevisionReferencesResp_Detail) GetAppId() uint32 { if x != nil { - return x.Template + return x.AppId } - return nil + return 0 } -func (x *ListTemplateByTupleResp_Item) GetTemplateRevision() *template_revision.TemplateRevision { +func (x *ListHookRevisionReferencesResp_Detail) GetAppName() string { if x != nil { - return x.TemplateRevision + return x.AppName } - return nil -} - -type ListTemplateSetsAndRevisionsResp_Detail struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Template *template.Template `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` - TemplateRevision []*template_revision.TemplateRevision `protobuf:"bytes,2,rep,name=template_revision,json=templateRevision,proto3" json:"template_revision,omitempty"` + return "" } -func (x *ListTemplateSetsAndRevisionsResp_Detail) Reset() { - *x = ListTemplateSetsAndRevisionsResp_Detail{} - if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[321] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ListHookRevisionReferencesResp_Detail) GetReleaseId() uint32 { + if x != nil { + return x.ReleaseId } + return 0 } -func (x *ListTemplateSetsAndRevisionsResp_Detail) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListTemplateSetsAndRevisionsResp_Detail) ProtoMessage() {} - -func (x *ListTemplateSetsAndRevisionsResp_Detail) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[321] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ListHookRevisionReferencesResp_Detail) GetReleaseName() string { + if x != nil { + return x.ReleaseName } - return mi.MessageOf(x) -} - -// Deprecated: Use ListTemplateSetsAndRevisionsResp_Detail.ProtoReflect.Descriptor instead. -func (*ListTemplateSetsAndRevisionsResp_Detail) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{144, 0} + return "" } -func (x *ListTemplateSetsAndRevisionsResp_Detail) GetTemplate() *template.Template { +func (x *ListHookRevisionReferencesResp_Detail) GetType() string { if x != nil { - return x.Template + return x.Type } - return nil + return "" } -func (x *ListTemplateSetsAndRevisionsResp_Detail) GetTemplateRevision() []*template_revision.TemplateRevision { +func (x *ListHookRevisionReferencesResp_Detail) GetDeprecated() bool { if x != nil { - return x.TemplateRevision + return x.Deprecated } - return nil + return false } -type GetTemplateRevisionResp_TemplateRevision struct { +type ListHookReferencesResp_Detail struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TemplateId uint32 `protobuf:"varint,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` - TemplateRevisionId uint32 `protobuf:"varint,4,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` - TemplateRevisionName string `protobuf:"bytes,5,opt,name=template_revision_name,json=templateRevisionName,proto3" json:"template_revision_name,omitempty"` - TemplateRevisionMemo string `protobuf:"bytes,6,opt,name=template_revision_memo,json=templateRevisionMemo,proto3" json:"template_revision_memo,omitempty"` - FileType string `protobuf:"bytes,7,opt,name=file_type,json=fileType,proto3" json:"file_type,omitempty"` - FileMode string `protobuf:"bytes,8,opt,name=file_mode,json=fileMode,proto3" json:"file_mode,omitempty"` - User string `protobuf:"bytes,9,opt,name=user,proto3" json:"user,omitempty"` - UserGroup string `protobuf:"bytes,10,opt,name=user_group,json=userGroup,proto3" json:"user_group,omitempty"` - Privilege string `protobuf:"bytes,11,opt,name=privilege,proto3" json:"privilege,omitempty"` - Signature string `protobuf:"bytes,12,opt,name=signature,proto3" json:"signature,omitempty"` - ByteSize uint64 `protobuf:"varint,13,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` - Creator string `protobuf:"bytes,14,opt,name=creator,proto3" json:"creator,omitempty"` - CreateAt string `protobuf:"bytes,15,opt,name=create_at,json=createAt,proto3" json:"create_at,omitempty"` - Md5 string `protobuf:"bytes,16,opt,name=md5,proto3" json:"md5,omitempty"` - IsLatest bool `protobuf:"varint,17,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"` + HookRevisionId uint32 `protobuf:"varint,1,opt,name=hook_revision_id,json=hookRevisionId,proto3" json:"hook_revision_id,omitempty"` + HookRevisionName string `protobuf:"bytes,2,opt,name=hook_revision_name,json=hookRevisionName,proto3" json:"hook_revision_name,omitempty"` + AppId uint32 `protobuf:"varint,3,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + AppName string `protobuf:"bytes,4,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` + ReleaseId uint32 `protobuf:"varint,5,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"` + ReleaseName string `protobuf:"bytes,6,opt,name=release_name,json=releaseName,proto3" json:"release_name,omitempty"` + Type string `protobuf:"bytes,7,opt,name=type,proto3" json:"type,omitempty"` + Deprecated bool `protobuf:"varint,8,opt,name=deprecated,proto3" json:"deprecated,omitempty"` } -func (x *GetTemplateRevisionResp_TemplateRevision) Reset() { - *x = GetTemplateRevisionResp_TemplateRevision{} +func (x *ListHookReferencesResp_Detail) Reset() { + *x = ListHookReferencesResp_Detail{} if protoimpl.UnsafeEnabled { mi := &file_config_service_proto_msgTypes[322] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -20565,13 +20569,13 @@ func (x *GetTemplateRevisionResp_TemplateRevision) Reset() { } } -func (x *GetTemplateRevisionResp_TemplateRevision) String() string { +func (x *ListHookReferencesResp_Detail) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetTemplateRevisionResp_TemplateRevision) ProtoMessage() {} +func (*ListHookReferencesResp_Detail) ProtoMessage() {} -func (x *GetTemplateRevisionResp_TemplateRevision) ProtoReflect() protoreflect.Message { +func (x *ListHookReferencesResp_Detail) ProtoReflect() protoreflect.Message { mi := &file_config_service_proto_msgTypes[322] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -20583,159 +20587,194 @@ func (x *GetTemplateRevisionResp_TemplateRevision) ProtoReflect() protoreflect.M return mi.MessageOf(x) } -// Deprecated: Use GetTemplateRevisionResp_TemplateRevision.ProtoReflect.Descriptor instead. -func (*GetTemplateRevisionResp_TemplateRevision) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{152, 0} +// Deprecated: Use ListHookReferencesResp_Detail.ProtoReflect.Descriptor instead. +func (*ListHookReferencesResp_Detail) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{102, 0} } -func (x *GetTemplateRevisionResp_TemplateRevision) GetTemplateId() uint32 { +func (x *ListHookReferencesResp_Detail) GetHookRevisionId() uint32 { if x != nil { - return x.TemplateId + return x.HookRevisionId } return 0 } -func (x *GetTemplateRevisionResp_TemplateRevision) GetName() string { +func (x *ListHookReferencesResp_Detail) GetHookRevisionName() string { if x != nil { - return x.Name + return x.HookRevisionName } return "" } -func (x *GetTemplateRevisionResp_TemplateRevision) GetPath() string { +func (x *ListHookReferencesResp_Detail) GetAppId() uint32 { if x != nil { - return x.Path + return x.AppId } - return "" + return 0 } -func (x *GetTemplateRevisionResp_TemplateRevision) GetTemplateRevisionId() uint32 { +func (x *ListHookReferencesResp_Detail) GetAppName() string { if x != nil { - return x.TemplateRevisionId + return x.AppName } - return 0 + return "" } -func (x *GetTemplateRevisionResp_TemplateRevision) GetTemplateRevisionName() string { +func (x *ListHookReferencesResp_Detail) GetReleaseId() uint32 { if x != nil { - return x.TemplateRevisionName + return x.ReleaseId } - return "" + return 0 } -func (x *GetTemplateRevisionResp_TemplateRevision) GetTemplateRevisionMemo() string { +func (x *ListHookReferencesResp_Detail) GetReleaseName() string { if x != nil { - return x.TemplateRevisionMemo + return x.ReleaseName } return "" } -func (x *GetTemplateRevisionResp_TemplateRevision) GetFileType() string { +func (x *ListHookReferencesResp_Detail) GetType() string { if x != nil { - return x.FileType + return x.Type } return "" } -func (x *GetTemplateRevisionResp_TemplateRevision) GetFileMode() string { +func (x *ListHookReferencesResp_Detail) GetDeprecated() bool { if x != nil { - return x.FileMode + return x.Deprecated } - return "" + return false } -func (x *GetTemplateRevisionResp_TemplateRevision) GetUser() string { - if x != nil { - return x.User +type GetReleaseHookResp_Hook struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + HookId uint32 `protobuf:"varint,1,opt,name=hook_id,json=hookId,proto3" json:"hook_id,omitempty"` + HookName string `protobuf:"bytes,2,opt,name=hook_name,json=hookName,proto3" json:"hook_name,omitempty"` + HookRevisionId uint32 `protobuf:"varint,3,opt,name=hook_revision_id,json=hookRevisionId,proto3" json:"hook_revision_id,omitempty"` + HookRevisionName string `protobuf:"bytes,4,opt,name=hook_revision_name,json=hookRevisionName,proto3" json:"hook_revision_name,omitempty"` + Type string `protobuf:"bytes,5,opt,name=type,proto3" json:"type,omitempty"` + Content string `protobuf:"bytes,7,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *GetReleaseHookResp_Hook) Reset() { + *x = GetReleaseHookResp_Hook{} + if protoimpl.UnsafeEnabled { + mi := &file_config_service_proto_msgTypes[323] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (x *GetTemplateRevisionResp_TemplateRevision) GetUserGroup() string { - if x != nil { - return x.UserGroup +func (x *GetReleaseHookResp_Hook) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetReleaseHookResp_Hook) ProtoMessage() {} + +func (x *GetReleaseHookResp_Hook) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[323] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *GetTemplateRevisionResp_TemplateRevision) GetPrivilege() string { +// Deprecated: Use GetReleaseHookResp_Hook.ProtoReflect.Descriptor instead. +func (*GetReleaseHookResp_Hook) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{104, 0} +} + +func (x *GetReleaseHookResp_Hook) GetHookId() uint32 { if x != nil { - return x.Privilege + return x.HookId } - return "" + return 0 } -func (x *GetTemplateRevisionResp_TemplateRevision) GetSignature() string { +func (x *GetReleaseHookResp_Hook) GetHookName() string { if x != nil { - return x.Signature + return x.HookName } return "" } -func (x *GetTemplateRevisionResp_TemplateRevision) GetByteSize() uint64 { +func (x *GetReleaseHookResp_Hook) GetHookRevisionId() uint32 { if x != nil { - return x.ByteSize + return x.HookRevisionId } return 0 } -func (x *GetTemplateRevisionResp_TemplateRevision) GetCreator() string { +func (x *GetReleaseHookResp_Hook) GetHookRevisionName() string { if x != nil { - return x.Creator + return x.HookRevisionName } return "" } -func (x *GetTemplateRevisionResp_TemplateRevision) GetCreateAt() string { +func (x *GetReleaseHookResp_Hook) GetType() string { if x != nil { - return x.CreateAt + return x.Type } return "" } -func (x *GetTemplateRevisionResp_TemplateRevision) GetMd5() string { +func (x *GetReleaseHookResp_Hook) GetContent() string { if x != nil { - return x.Md5 + return x.Content } return "" } -func (x *GetTemplateRevisionResp_TemplateRevision) GetIsLatest() bool { - if x != nil { - return x.IsLatest - } - return false -} - -type ImportFromTemplateSetToAppReq_Binding struct { +type BatchUpsertTemplatesReq_Item struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TemplateSetId uint32 `protobuf:"varint,1,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` - TemplateSpaceId uint32 `protobuf:"varint,2,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` - TemplateSpaceName string `protobuf:"bytes,3,opt,name=template_space_name,json=templateSpaceName,proto3" json:"template_space_name,omitempty"` - TemplateSetName string `protobuf:"bytes,4,opt,name=template_set_name,json=templateSetName,proto3" json:"template_set_name,omitempty"` - TemplateRevisions []*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding `protobuf:"bytes,5,rep,name=template_revisions,json=templateRevisions,proto3" json:"template_revisions,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` + FileType string `protobuf:"bytes,4,opt,name=file_type,json=fileType,proto3" json:"file_type,omitempty"` // file_type is enum type, source resource reference: + // pkg/dal/table/config_item.go + FileMode string `protobuf:"bytes,5,opt,name=file_mode,json=fileMode,proto3" json:"file_mode,omitempty"` // file_mode is enum type, source resource reference: + // pkg/dal/table/config_item.go + Memo string `protobuf:"bytes,6,opt,name=memo,proto3" json:"memo,omitempty"` + User string `protobuf:"bytes,7,opt,name=user,proto3" json:"user,omitempty"` + UserGroup string `protobuf:"bytes,8,opt,name=user_group,json=userGroup,proto3" json:"user_group,omitempty"` + Privilege string `protobuf:"bytes,9,opt,name=privilege,proto3" json:"privilege,omitempty"` + Sign string `protobuf:"bytes,10,opt,name=sign,proto3" json:"sign,omitempty"` + ByteSize uint64 `protobuf:"varint,11,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` + Md5 string `protobuf:"bytes,12,opt,name=md5,proto3" json:"md5,omitempty"` + Uid uint32 `protobuf:"varint,13,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint32 `protobuf:"varint,14,opt,name=gid,proto3" json:"gid,omitempty"` } -func (x *ImportFromTemplateSetToAppReq_Binding) Reset() { - *x = ImportFromTemplateSetToAppReq_Binding{} +func (x *BatchUpsertTemplatesReq_Item) Reset() { + *x = BatchUpsertTemplatesReq_Item{} if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[323] + mi := &file_config_service_proto_msgTypes[324] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ImportFromTemplateSetToAppReq_Binding) String() string { +func (x *BatchUpsertTemplatesReq_Item) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ImportFromTemplateSetToAppReq_Binding) ProtoMessage() {} +func (*BatchUpsertTemplatesReq_Item) ProtoMessage() {} -func (x *ImportFromTemplateSetToAppReq_Binding) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[323] +func (x *BatchUpsertTemplatesReq_Item) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[324] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20746,136 +20785,120 @@ func (x *ImportFromTemplateSetToAppReq_Binding) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use ImportFromTemplateSetToAppReq_Binding.ProtoReflect.Descriptor instead. -func (*ImportFromTemplateSetToAppReq_Binding) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{195, 0} +// Deprecated: Use BatchUpsertTemplatesReq_Item.ProtoReflect.Descriptor instead. +func (*BatchUpsertTemplatesReq_Item) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{128, 0} } -func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateSetId() uint32 { +func (x *BatchUpsertTemplatesReq_Item) GetId() uint32 { if x != nil { - return x.TemplateSetId + return x.Id } return 0 } -func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateSpaceId() uint32 { +func (x *BatchUpsertTemplatesReq_Item) GetName() string { if x != nil { - return x.TemplateSpaceId + return x.Name } - return 0 + return "" } -func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateSpaceName() string { +func (x *BatchUpsertTemplatesReq_Item) GetPath() string { if x != nil { - return x.TemplateSpaceName + return x.Path } return "" } -func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateSetName() string { +func (x *BatchUpsertTemplatesReq_Item) GetFileType() string { if x != nil { - return x.TemplateSetName + return x.FileType } return "" } -func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateRevisions() []*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding { +func (x *BatchUpsertTemplatesReq_Item) GetFileMode() string { if x != nil { - return x.TemplateRevisions + return x.FileMode } - return nil -} - -type ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TemplateId uint32 `protobuf:"varint,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` - TemplateRevisionId uint32 `protobuf:"varint,2,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` - IsLatest bool `protobuf:"varint,3,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"` - TemplateName string `protobuf:"bytes,4,opt,name=template_name,json=templateName,proto3" json:"template_name,omitempty"` - TemplateRevisionName string `protobuf:"bytes,5,opt,name=template_revision_name,json=templateRevisionName,proto3" json:"template_revision_name,omitempty"` + return "" } -func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) Reset() { - *x = ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding{} - if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[324] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *BatchUpsertTemplatesReq_Item) GetMemo() string { + if x != nil { + return x.Memo } + return "" } -func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *BatchUpsertTemplatesReq_Item) GetUser() string { + if x != nil { + return x.User + } + return "" } -func (*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) ProtoMessage() {} - -func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[324] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *BatchUpsertTemplatesReq_Item) GetUserGroup() string { + if x != nil { + return x.UserGroup } - return mi.MessageOf(x) + return "" } -// Deprecated: Use ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding.ProtoReflect.Descriptor instead. -func (*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{195, 0, 0} +func (x *BatchUpsertTemplatesReq_Item) GetPrivilege() string { + if x != nil { + return x.Privilege + } + return "" } -func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetTemplateId() uint32 { +func (x *BatchUpsertTemplatesReq_Item) GetSign() string { if x != nil { - return x.TemplateId + return x.Sign } - return 0 + return "" } -func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetTemplateRevisionId() uint32 { +func (x *BatchUpsertTemplatesReq_Item) GetByteSize() uint64 { if x != nil { - return x.TemplateRevisionId + return x.ByteSize } return 0 } -func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetIsLatest() bool { +func (x *BatchUpsertTemplatesReq_Item) GetMd5() string { if x != nil { - return x.IsLatest + return x.Md5 } - return false + return "" } -func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetTemplateName() string { +func (x *BatchUpsertTemplatesReq_Item) GetUid() uint32 { if x != nil { - return x.TemplateName + return x.Uid } - return "" + return 0 } -func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetTemplateRevisionName() string { +func (x *BatchUpsertTemplatesReq_Item) GetGid() uint32 { if x != nil { - return x.TemplateRevisionName + return x.Gid } - return "" + return 0 } -type CheckTemplateSetReferencesAppsReq_Item struct { +type ListTemplateByTupleReq_Item struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` } -func (x *CheckTemplateSetReferencesAppsReq_Item) Reset() { - *x = CheckTemplateSetReferencesAppsReq_Item{} +func (x *ListTemplateByTupleReq_Item) Reset() { + *x = ListTemplateByTupleReq_Item{} if protoimpl.UnsafeEnabled { mi := &file_config_service_proto_msgTypes[325] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -20883,13 +20906,13 @@ func (x *CheckTemplateSetReferencesAppsReq_Item) Reset() { } } -func (x *CheckTemplateSetReferencesAppsReq_Item) String() string { +func (x *ListTemplateByTupleReq_Item) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CheckTemplateSetReferencesAppsReq_Item) ProtoMessage() {} +func (*ListTemplateByTupleReq_Item) ProtoMessage() {} -func (x *CheckTemplateSetReferencesAppsReq_Item) ProtoReflect() protoreflect.Message { +func (x *ListTemplateByTupleReq_Item) ProtoReflect() protoreflect.Message { mi := &file_config_service_proto_msgTypes[325] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -20901,42 +20924,36 @@ func (x *CheckTemplateSetReferencesAppsReq_Item) ProtoReflect() protoreflect.Mes return mi.MessageOf(x) } -// Deprecated: Use CheckTemplateSetReferencesAppsReq_Item.ProtoReflect.Descriptor instead. -func (*CheckTemplateSetReferencesAppsReq_Item) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{219, 0} +// Deprecated: Use ListTemplateByTupleReq_Item.ProtoReflect.Descriptor instead. +func (*ListTemplateByTupleReq_Item) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{138, 0} } -func (x *CheckTemplateSetReferencesAppsReq_Item) GetId() uint32 { +func (x *ListTemplateByTupleReq_Item) GetName() string { if x != nil { - return x.Id + return x.Name } - return 0 + return "" } -func (x *CheckTemplateSetReferencesAppsReq_Item) GetName() string { +func (x *ListTemplateByTupleReq_Item) GetPath() string { if x != nil { - return x.Name + return x.Path } return "" } -type CheckTemplateSetReferencesAppsResp_Item struct { +type ListTemplateByTupleResp_Item struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TemplateSetId uint32 `protobuf:"varint,1,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` - TemplateSetName string `protobuf:"bytes,2,opt,name=template_set_name,json=templateSetName,proto3" json:"template_set_name,omitempty"` - AppId uint32 `protobuf:"varint,3,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` - AppName string `protobuf:"bytes,4,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` - AppExceedsLimit bool `protobuf:"varint,5,opt,name=app_exceeds_limit,json=appExceedsLimit,proto3" json:"app_exceeds_limit,omitempty"` - TemplateSetExceedsLimit bool `protobuf:"varint,6,opt,name=template_set_exceeds_limit,json=templateSetExceedsLimit,proto3" json:"template_set_exceeds_limit,omitempty"` - AppExceedsQuantity uint32 `protobuf:"varint,7,opt,name=app_exceeds_quantity,json=appExceedsQuantity,proto3" json:"app_exceeds_quantity,omitempty"` - TemplateSetExceedsQuantity uint32 `protobuf:"varint,8,opt,name=template_set_exceeds_quantity,json=templateSetExceedsQuantity,proto3" json:"template_set_exceeds_quantity,omitempty"` + Template *template.Template `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` + TemplateRevision *template_revision.TemplateRevision `protobuf:"bytes,2,opt,name=template_revision,json=templateRevision,proto3" json:"template_revision,omitempty"` } -func (x *CheckTemplateSetReferencesAppsResp_Item) Reset() { - *x = CheckTemplateSetReferencesAppsResp_Item{} +func (x *ListTemplateByTupleResp_Item) Reset() { + *x = ListTemplateByTupleResp_Item{} if protoimpl.UnsafeEnabled { mi := &file_config_service_proto_msgTypes[326] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -20944,13 +20961,13 @@ func (x *CheckTemplateSetReferencesAppsResp_Item) Reset() { } } -func (x *CheckTemplateSetReferencesAppsResp_Item) String() string { +func (x *ListTemplateByTupleResp_Item) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CheckTemplateSetReferencesAppsResp_Item) ProtoMessage() {} +func (*ListTemplateByTupleResp_Item) ProtoMessage() {} -func (x *CheckTemplateSetReferencesAppsResp_Item) ProtoReflect() protoreflect.Message { +func (x *ListTemplateByTupleResp_Item) ProtoReflect() protoreflect.Message { mi := &file_config_service_proto_msgTypes[326] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -20962,98 +20979,123 @@ func (x *CheckTemplateSetReferencesAppsResp_Item) ProtoReflect() protoreflect.Me return mi.MessageOf(x) } -// Deprecated: Use CheckTemplateSetReferencesAppsResp_Item.ProtoReflect.Descriptor instead. -func (*CheckTemplateSetReferencesAppsResp_Item) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{220, 0} +// Deprecated: Use ListTemplateByTupleResp_Item.ProtoReflect.Descriptor instead. +func (*ListTemplateByTupleResp_Item) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{139, 0} } -func (x *CheckTemplateSetReferencesAppsResp_Item) GetTemplateSetId() uint32 { +func (x *ListTemplateByTupleResp_Item) GetTemplate() *template.Template { if x != nil { - return x.TemplateSetId + return x.Template } - return 0 + return nil } -func (x *CheckTemplateSetReferencesAppsResp_Item) GetTemplateSetName() string { +func (x *ListTemplateByTupleResp_Item) GetTemplateRevision() *template_revision.TemplateRevision { if x != nil { - return x.TemplateSetName + return x.TemplateRevision } - return "" + return nil } -func (x *CheckTemplateSetReferencesAppsResp_Item) GetAppId() uint32 { - if x != nil { - return x.AppId - } - return 0 +type ListTemplateSetsAndRevisionsResp_Detail struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Template *template.Template `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` + TemplateRevision []*template_revision.TemplateRevision `protobuf:"bytes,2,rep,name=template_revision,json=templateRevision,proto3" json:"template_revision,omitempty"` } -func (x *CheckTemplateSetReferencesAppsResp_Item) GetAppName() string { - if x != nil { - return x.AppName +func (x *ListTemplateSetsAndRevisionsResp_Detail) Reset() { + *x = ListTemplateSetsAndRevisionsResp_Detail{} + if protoimpl.UnsafeEnabled { + mi := &file_config_service_proto_msgTypes[327] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (x *CheckTemplateSetReferencesAppsResp_Item) GetAppExceedsLimit() bool { - if x != nil { - return x.AppExceedsLimit - } - return false +func (x *ListTemplateSetsAndRevisionsResp_Detail) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *CheckTemplateSetReferencesAppsResp_Item) GetTemplateSetExceedsLimit() bool { - if x != nil { - return x.TemplateSetExceedsLimit +func (*ListTemplateSetsAndRevisionsResp_Detail) ProtoMessage() {} + +func (x *ListTemplateSetsAndRevisionsResp_Detail) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[327] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return false + return mi.MessageOf(x) } -func (x *CheckTemplateSetReferencesAppsResp_Item) GetAppExceedsQuantity() uint32 { +// Deprecated: Use ListTemplateSetsAndRevisionsResp_Detail.ProtoReflect.Descriptor instead. +func (*ListTemplateSetsAndRevisionsResp_Detail) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{144, 0} +} + +func (x *ListTemplateSetsAndRevisionsResp_Detail) GetTemplate() *template.Template { if x != nil { - return x.AppExceedsQuantity + return x.Template } - return 0 + return nil } -func (x *CheckTemplateSetReferencesAppsResp_Item) GetTemplateSetExceedsQuantity() uint32 { +func (x *ListTemplateSetsAndRevisionsResp_Detail) GetTemplateRevision() []*template_revision.TemplateRevision { if x != nil { - return x.TemplateSetExceedsQuantity + return x.TemplateRevision } - return 0 + return nil } -type ListAllGroupsResp_ListAllGroupsData struct { +type GetTemplateRevisionResp_TemplateRevision struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Public bool `protobuf:"varint,3,opt,name=public,proto3" json:"public,omitempty"` - BindApps []*ListAllGroupsResp_ListAllGroupsData_BindApp `protobuf:"bytes,4,rep,name=bind_apps,json=bindApps,proto3" json:"bind_apps,omitempty"` - Selector *structpb.Struct `protobuf:"bytes,5,opt,name=selector,proto3" json:"selector,omitempty"` - ReleasedAppsNum uint32 `protobuf:"varint,6,opt,name=released_apps_num,json=releasedAppsNum,proto3" json:"released_apps_num,omitempty"` - Edited bool `protobuf:"varint,7,opt,name=edited,proto3" json:"edited,omitempty"` + TemplateId uint32 `protobuf:"varint,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` + TemplateRevisionId uint32 `protobuf:"varint,4,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` + TemplateRevisionName string `protobuf:"bytes,5,opt,name=template_revision_name,json=templateRevisionName,proto3" json:"template_revision_name,omitempty"` + TemplateRevisionMemo string `protobuf:"bytes,6,opt,name=template_revision_memo,json=templateRevisionMemo,proto3" json:"template_revision_memo,omitempty"` + FileType string `protobuf:"bytes,7,opt,name=file_type,json=fileType,proto3" json:"file_type,omitempty"` + FileMode string `protobuf:"bytes,8,opt,name=file_mode,json=fileMode,proto3" json:"file_mode,omitempty"` + User string `protobuf:"bytes,9,opt,name=user,proto3" json:"user,omitempty"` + UserGroup string `protobuf:"bytes,10,opt,name=user_group,json=userGroup,proto3" json:"user_group,omitempty"` + Privilege string `protobuf:"bytes,11,opt,name=privilege,proto3" json:"privilege,omitempty"` + Signature string `protobuf:"bytes,12,opt,name=signature,proto3" json:"signature,omitempty"` + ByteSize uint64 `protobuf:"varint,13,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` + Creator string `protobuf:"bytes,14,opt,name=creator,proto3" json:"creator,omitempty"` + CreateAt string `protobuf:"bytes,15,opt,name=create_at,json=createAt,proto3" json:"create_at,omitempty"` + Md5 string `protobuf:"bytes,16,opt,name=md5,proto3" json:"md5,omitempty"` + IsLatest bool `protobuf:"varint,17,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"` + Uid uint32 `protobuf:"varint,18,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint32 `protobuf:"varint,19,opt,name=gid,proto3" json:"gid,omitempty"` } -func (x *ListAllGroupsResp_ListAllGroupsData) Reset() { - *x = ListAllGroupsResp_ListAllGroupsData{} +func (x *GetTemplateRevisionResp_TemplateRevision) Reset() { + *x = GetTemplateRevisionResp_TemplateRevision{} if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[327] + mi := &file_config_service_proto_msgTypes[328] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ListAllGroupsResp_ListAllGroupsData) String() string { +func (x *GetTemplateRevisionResp_TemplateRevision) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListAllGroupsResp_ListAllGroupsData) ProtoMessage() {} +func (*GetTemplateRevisionResp_TemplateRevision) ProtoMessage() {} -func (x *ListAllGroupsResp_ListAllGroupsData) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[327] +func (x *GetTemplateRevisionResp_TemplateRevision) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[328] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21064,131 +21106,158 @@ func (x *ListAllGroupsResp_ListAllGroupsData) ProtoReflect() protoreflect.Messag return mi.MessageOf(x) } -// Deprecated: Use ListAllGroupsResp_ListAllGroupsData.ProtoReflect.Descriptor instead. -func (*ListAllGroupsResp_ListAllGroupsData) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{254, 0} +// Deprecated: Use GetTemplateRevisionResp_TemplateRevision.ProtoReflect.Descriptor instead. +func (*GetTemplateRevisionResp_TemplateRevision) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{152, 0} } -func (x *ListAllGroupsResp_ListAllGroupsData) GetId() uint32 { +func (x *GetTemplateRevisionResp_TemplateRevision) GetTemplateId() uint32 { if x != nil { - return x.Id + return x.TemplateId } return 0 } -func (x *ListAllGroupsResp_ListAllGroupsData) GetName() string { +func (x *GetTemplateRevisionResp_TemplateRevision) GetName() string { if x != nil { return x.Name } return "" } -func (x *ListAllGroupsResp_ListAllGroupsData) GetPublic() bool { +func (x *GetTemplateRevisionResp_TemplateRevision) GetPath() string { if x != nil { - return x.Public + return x.Path } - return false + return "" } -func (x *ListAllGroupsResp_ListAllGroupsData) GetBindApps() []*ListAllGroupsResp_ListAllGroupsData_BindApp { +func (x *GetTemplateRevisionResp_TemplateRevision) GetTemplateRevisionId() uint32 { if x != nil { - return x.BindApps + return x.TemplateRevisionId } - return nil + return 0 } -func (x *ListAllGroupsResp_ListAllGroupsData) GetSelector() *structpb.Struct { +func (x *GetTemplateRevisionResp_TemplateRevision) GetTemplateRevisionName() string { if x != nil { - return x.Selector + return x.TemplateRevisionName } - return nil + return "" } -func (x *ListAllGroupsResp_ListAllGroupsData) GetReleasedAppsNum() uint32 { +func (x *GetTemplateRevisionResp_TemplateRevision) GetTemplateRevisionMemo() string { if x != nil { - return x.ReleasedAppsNum + return x.TemplateRevisionMemo } - return 0 + return "" } -func (x *ListAllGroupsResp_ListAllGroupsData) GetEdited() bool { +func (x *GetTemplateRevisionResp_TemplateRevision) GetFileType() string { if x != nil { - return x.Edited + return x.FileType } - return false + return "" } -type ListAllGroupsResp_ListAllGroupsData_BindApp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` +func (x *GetTemplateRevisionResp_TemplateRevision) GetFileMode() string { + if x != nil { + return x.FileMode + } + return "" } -func (x *ListAllGroupsResp_ListAllGroupsData_BindApp) Reset() { - *x = ListAllGroupsResp_ListAllGroupsData_BindApp{} - if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[328] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *GetTemplateRevisionResp_TemplateRevision) GetUser() string { + if x != nil { + return x.User } + return "" } -func (x *ListAllGroupsResp_ListAllGroupsData_BindApp) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *GetTemplateRevisionResp_TemplateRevision) GetUserGroup() string { + if x != nil { + return x.UserGroup + } + return "" } -func (*ListAllGroupsResp_ListAllGroupsData_BindApp) ProtoMessage() {} - -func (x *ListAllGroupsResp_ListAllGroupsData_BindApp) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[328] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *GetTemplateRevisionResp_TemplateRevision) GetPrivilege() string { + if x != nil { + return x.Privilege } - return mi.MessageOf(x) + return "" } -// Deprecated: Use ListAllGroupsResp_ListAllGroupsData_BindApp.ProtoReflect.Descriptor instead. -func (*ListAllGroupsResp_ListAllGroupsData_BindApp) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{254, 0, 0} +func (x *GetTemplateRevisionResp_TemplateRevision) GetSignature() string { + if x != nil { + return x.Signature + } + return "" } -func (x *ListAllGroupsResp_ListAllGroupsData_BindApp) GetId() uint32 { +func (x *GetTemplateRevisionResp_TemplateRevision) GetByteSize() uint64 { if x != nil { - return x.Id + return x.ByteSize } return 0 } -func (x *ListAllGroupsResp_ListAllGroupsData_BindApp) GetName() string { +func (x *GetTemplateRevisionResp_TemplateRevision) GetCreator() string { if x != nil { - return x.Name + return x.Creator } return "" } -type ListAppGroupsResp_ListAppGroupsData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *GetTemplateRevisionResp_TemplateRevision) GetCreateAt() string { + if x != nil { + return x.CreateAt + } + return "" +} - GroupId uint32 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - GroupName string `protobuf:"bytes,2,opt,name=group_name,json=groupName,proto3" json:"group_name,omitempty"` - ReleaseId uint32 `protobuf:"varint,3,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"` - ReleaseName string `protobuf:"bytes,4,opt,name=release_name,json=releaseName,proto3" json:"release_name,omitempty"` - OldSelector *structpb.Struct `protobuf:"bytes,5,opt,name=old_selector,json=oldSelector,proto3" json:"old_selector,omitempty"` - NewSelector *structpb.Struct `protobuf:"bytes,6,opt,name=new_selector,json=newSelector,proto3" json:"new_selector,omitempty"` - Edited bool `protobuf:"varint,7,opt,name=edited,proto3" json:"edited,omitempty"` +func (x *GetTemplateRevisionResp_TemplateRevision) GetMd5() string { + if x != nil { + return x.Md5 + } + return "" } -func (x *ListAppGroupsResp_ListAppGroupsData) Reset() { - *x = ListAppGroupsResp_ListAppGroupsData{} +func (x *GetTemplateRevisionResp_TemplateRevision) GetIsLatest() bool { + if x != nil { + return x.IsLatest + } + return false +} + +func (x *GetTemplateRevisionResp_TemplateRevision) GetUid() uint32 { + if x != nil { + return x.Uid + } + return 0 +} + +func (x *GetTemplateRevisionResp_TemplateRevision) GetGid() uint32 { + if x != nil { + return x.Gid + } + return 0 +} + +type ImportFromTemplateSetToAppReq_Binding struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TemplateSetId uint32 `protobuf:"varint,1,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` + TemplateSpaceId uint32 `protobuf:"varint,2,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` + TemplateSpaceName string `protobuf:"bytes,3,opt,name=template_space_name,json=templateSpaceName,proto3" json:"template_space_name,omitempty"` + TemplateSetName string `protobuf:"bytes,4,opt,name=template_set_name,json=templateSetName,proto3" json:"template_set_name,omitempty"` + TemplateRevisions []*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding `protobuf:"bytes,5,rep,name=template_revisions,json=templateRevisions,proto3" json:"template_revisions,omitempty"` +} + +func (x *ImportFromTemplateSetToAppReq_Binding) Reset() { + *x = ImportFromTemplateSetToAppReq_Binding{} if protoimpl.UnsafeEnabled { mi := &file_config_service_proto_msgTypes[329] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -21196,13 +21265,13 @@ func (x *ListAppGroupsResp_ListAppGroupsData) Reset() { } } -func (x *ListAppGroupsResp_ListAppGroupsData) String() string { +func (x *ImportFromTemplateSetToAppReq_Binding) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListAppGroupsResp_ListAppGroupsData) ProtoMessage() {} +func (*ImportFromTemplateSetToAppReq_Binding) ProtoMessage() {} -func (x *ListAppGroupsResp_ListAppGroupsData) ProtoReflect() protoreflect.Message { +func (x *ImportFromTemplateSetToAppReq_Binding) ProtoReflect() protoreflect.Message { mi := &file_config_service_proto_msgTypes[329] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -21214,74 +21283,60 @@ func (x *ListAppGroupsResp_ListAppGroupsData) ProtoReflect() protoreflect.Messag return mi.MessageOf(x) } -// Deprecated: Use ListAppGroupsResp_ListAppGroupsData.ProtoReflect.Descriptor instead. -func (*ListAppGroupsResp_ListAppGroupsData) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{256, 0} +// Deprecated: Use ImportFromTemplateSetToAppReq_Binding.ProtoReflect.Descriptor instead. +func (*ImportFromTemplateSetToAppReq_Binding) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{195, 0} } -func (x *ListAppGroupsResp_ListAppGroupsData) GetGroupId() uint32 { +func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateSetId() uint32 { if x != nil { - return x.GroupId + return x.TemplateSetId } return 0 } -func (x *ListAppGroupsResp_ListAppGroupsData) GetGroupName() string { - if x != nil { - return x.GroupName - } - return "" -} - -func (x *ListAppGroupsResp_ListAppGroupsData) GetReleaseId() uint32 { +func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateSpaceId() uint32 { if x != nil { - return x.ReleaseId + return x.TemplateSpaceId } return 0 } -func (x *ListAppGroupsResp_ListAppGroupsData) GetReleaseName() string { +func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateSpaceName() string { if x != nil { - return x.ReleaseName + return x.TemplateSpaceName } return "" } -func (x *ListAppGroupsResp_ListAppGroupsData) GetOldSelector() *structpb.Struct { +func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateSetName() string { if x != nil { - return x.OldSelector + return x.TemplateSetName } - return nil + return "" } -func (x *ListAppGroupsResp_ListAppGroupsData) GetNewSelector() *structpb.Struct { +func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateRevisions() []*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding { if x != nil { - return x.NewSelector + return x.TemplateRevisions } return nil } -func (x *ListAppGroupsResp_ListAppGroupsData) GetEdited() bool { - if x != nil { - return x.Edited - } - return false -} - -type ListGroupReleasedAppsResp_ListGroupReleasedAppsData struct { +type ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - AppId uint32 `protobuf:"varint,1,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` - AppName string `protobuf:"bytes,2,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` - ReleaseId uint32 `protobuf:"varint,3,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"` - ReleaseName string `protobuf:"bytes,4,opt,name=release_name,json=releaseName,proto3" json:"release_name,omitempty"` - Edited bool `protobuf:"varint,5,opt,name=edited,proto3" json:"edited,omitempty"` + TemplateId uint32 `protobuf:"varint,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + TemplateRevisionId uint32 `protobuf:"varint,2,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` + IsLatest bool `protobuf:"varint,3,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"` + TemplateName string `protobuf:"bytes,4,opt,name=template_name,json=templateName,proto3" json:"template_name,omitempty"` + TemplateRevisionName string `protobuf:"bytes,5,opt,name=template_revision_name,json=templateRevisionName,proto3" json:"template_revision_name,omitempty"` } -func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) Reset() { - *x = ListGroupReleasedAppsResp_ListGroupReleasedAppsData{} +func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) Reset() { + *x = ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding{} if protoimpl.UnsafeEnabled { mi := &file_config_service_proto_msgTypes[330] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -21289,13 +21344,13 @@ func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) Reset() { } } -func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) String() string { +func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListGroupReleasedAppsResp_ListGroupReleasedAppsData) ProtoMessage() {} +func (*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) ProtoMessage() {} -func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) ProtoReflect() protoreflect.Message { +func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) ProtoReflect() protoreflect.Message { mi := &file_config_service_proto_msgTypes[330] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -21307,61 +21362,57 @@ func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) ProtoReflect() pro return mi.MessageOf(x) } -// Deprecated: Use ListGroupReleasedAppsResp_ListGroupReleasedAppsData.ProtoReflect.Descriptor instead. -func (*ListGroupReleasedAppsResp_ListGroupReleasedAppsData) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{258, 0} +// Deprecated: Use ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding.ProtoReflect.Descriptor instead. +func (*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{195, 0, 0} } -func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetAppId() uint32 { +func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetTemplateId() uint32 { if x != nil { - return x.AppId + return x.TemplateId } return 0 } -func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetAppName() string { +func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetTemplateRevisionId() uint32 { if x != nil { - return x.AppName + return x.TemplateRevisionId } - return "" + return 0 } -func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetReleaseId() uint32 { +func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetIsLatest() bool { if x != nil { - return x.ReleaseId + return x.IsLatest } - return 0 + return false } -func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetReleaseName() string { +func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetTemplateName() string { if x != nil { - return x.ReleaseName + return x.TemplateName } return "" } -func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetEdited() bool { +func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetTemplateRevisionName() string { if x != nil { - return x.Edited + return x.TemplateRevisionName } - return false + return "" } -type BatchUpsertKvsReq_Kv struct { +type CheckTemplateSetReferencesAppsReq_Item struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - KvType string `protobuf:"bytes,2,opt,name=kv_type,json=kvType,proto3" json:"kv_type,omitempty"` - Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` - Memo string `protobuf:"bytes,4,opt,name=memo,proto3" json:"memo,omitempty"` - SecretType string `protobuf:"bytes,5,opt,name=secret_type,json=secretType,proto3" json:"secret_type,omitempty"` - SecretHidden bool `protobuf:"varint,6,opt,name=secret_hidden,json=secretHidden,proto3" json:"secret_hidden,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` } -func (x *BatchUpsertKvsReq_Kv) Reset() { - *x = BatchUpsertKvsReq_Kv{} +func (x *CheckTemplateSetReferencesAppsReq_Item) Reset() { + *x = CheckTemplateSetReferencesAppsReq_Item{} if protoimpl.UnsafeEnabled { mi := &file_config_service_proto_msgTypes[331] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -21369,13 +21420,13 @@ func (x *BatchUpsertKvsReq_Kv) Reset() { } } -func (x *BatchUpsertKvsReq_Kv) String() string { +func (x *CheckTemplateSetReferencesAppsReq_Item) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BatchUpsertKvsReq_Kv) ProtoMessage() {} +func (*CheckTemplateSetReferencesAppsReq_Item) ProtoMessage() {} -func (x *BatchUpsertKvsReq_Kv) ProtoReflect() protoreflect.Message { +func (x *CheckTemplateSetReferencesAppsReq_Item) ProtoReflect() protoreflect.Message { mi := &file_config_service_proto_msgTypes[331] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -21387,64 +21438,42 @@ func (x *BatchUpsertKvsReq_Kv) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BatchUpsertKvsReq_Kv.ProtoReflect.Descriptor instead. -func (*BatchUpsertKvsReq_Kv) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{275, 0} -} - -func (x *BatchUpsertKvsReq_Kv) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *BatchUpsertKvsReq_Kv) GetKvType() string { - if x != nil { - return x.KvType - } - return "" -} - -func (x *BatchUpsertKvsReq_Kv) GetValue() string { - if x != nil { - return x.Value - } - return "" +// Deprecated: Use CheckTemplateSetReferencesAppsReq_Item.ProtoReflect.Descriptor instead. +func (*CheckTemplateSetReferencesAppsReq_Item) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{219, 0} } -func (x *BatchUpsertKvsReq_Kv) GetMemo() string { +func (x *CheckTemplateSetReferencesAppsReq_Item) GetId() uint32 { if x != nil { - return x.Memo + return x.Id } - return "" + return 0 } -func (x *BatchUpsertKvsReq_Kv) GetSecretType() string { +func (x *CheckTemplateSetReferencesAppsReq_Item) GetName() string { if x != nil { - return x.SecretType + return x.Name } return "" } -func (x *BatchUpsertKvsReq_Kv) GetSecretHidden() bool { - if x != nil { - return x.SecretHidden - } - return false -} - -type ListClientsReq_Order struct { +type CheckTemplateSetReferencesAppsResp_Item struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Desc string `protobuf:"bytes,1,opt,name=desc,proto3" json:"desc,omitempty"` - Asc string `protobuf:"bytes,2,opt,name=asc,proto3" json:"asc,omitempty"` + TemplateSetId uint32 `protobuf:"varint,1,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` + TemplateSetName string `protobuf:"bytes,2,opt,name=template_set_name,json=templateSetName,proto3" json:"template_set_name,omitempty"` + AppId uint32 `protobuf:"varint,3,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + AppName string `protobuf:"bytes,4,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` + AppExceedsLimit bool `protobuf:"varint,5,opt,name=app_exceeds_limit,json=appExceedsLimit,proto3" json:"app_exceeds_limit,omitempty"` + TemplateSetExceedsLimit bool `protobuf:"varint,6,opt,name=template_set_exceeds_limit,json=templateSetExceedsLimit,proto3" json:"template_set_exceeds_limit,omitempty"` + AppExceedsQuantity uint32 `protobuf:"varint,7,opt,name=app_exceeds_quantity,json=appExceedsQuantity,proto3" json:"app_exceeds_quantity,omitempty"` + TemplateSetExceedsQuantity uint32 `protobuf:"varint,8,opt,name=template_set_exceeds_quantity,json=templateSetExceedsQuantity,proto3" json:"template_set_exceeds_quantity,omitempty"` } -func (x *ListClientsReq_Order) Reset() { - *x = ListClientsReq_Order{} +func (x *CheckTemplateSetReferencesAppsResp_Item) Reset() { + *x = CheckTemplateSetReferencesAppsResp_Item{} if protoimpl.UnsafeEnabled { mi := &file_config_service_proto_msgTypes[332] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -21452,13 +21481,13 @@ func (x *ListClientsReq_Order) Reset() { } } -func (x *ListClientsReq_Order) String() string { +func (x *CheckTemplateSetReferencesAppsResp_Item) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListClientsReq_Order) ProtoMessage() {} +func (*CheckTemplateSetReferencesAppsResp_Item) ProtoMessage() {} -func (x *ListClientsReq_Order) ProtoReflect() protoreflect.Message { +func (x *CheckTemplateSetReferencesAppsResp_Item) ProtoReflect() protoreflect.Message { mi := &file_config_service_proto_msgTypes[332] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -21470,39 +21499,83 @@ func (x *ListClientsReq_Order) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListClientsReq_Order.ProtoReflect.Descriptor instead. -func (*ListClientsReq_Order) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{285, 0} +// Deprecated: Use CheckTemplateSetReferencesAppsResp_Item.ProtoReflect.Descriptor instead. +func (*CheckTemplateSetReferencesAppsResp_Item) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{220, 0} } -func (x *ListClientsReq_Order) GetDesc() string { +func (x *CheckTemplateSetReferencesAppsResp_Item) GetTemplateSetId() uint32 { if x != nil { - return x.Desc + return x.TemplateSetId } - return "" + return 0 } -func (x *ListClientsReq_Order) GetAsc() string { +func (x *CheckTemplateSetReferencesAppsResp_Item) GetTemplateSetName() string { if x != nil { - return x.Asc + return x.TemplateSetName } return "" } -type ListClientsResp_Item struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *CheckTemplateSetReferencesAppsResp_Item) GetAppId() uint32 { + if x != nil { + return x.AppId + } + return 0 +} - Client *client.Client `protobuf:"bytes,1,opt,name=client,proto3" json:"client,omitempty"` - CpuUsageStr string `protobuf:"bytes,2,opt,name=cpu_usage_str,json=cpuUsageStr,proto3" json:"cpu_usage_str,omitempty"` - CpuMaxUsageStr string `protobuf:"bytes,3,opt,name=cpu_max_usage_str,json=cpuMaxUsageStr,proto3" json:"cpu_max_usage_str,omitempty"` - MemoryUsageStr string `protobuf:"bytes,4,opt,name=memory_usage_str,json=memoryUsageStr,proto3" json:"memory_usage_str,omitempty"` - MemoryMaxUsageStr string `protobuf:"bytes,5,opt,name=memory_max_usage_str,json=memoryMaxUsageStr,proto3" json:"memory_max_usage_str,omitempty"` +func (x *CheckTemplateSetReferencesAppsResp_Item) GetAppName() string { + if x != nil { + return x.AppName + } + return "" } -func (x *ListClientsResp_Item) Reset() { - *x = ListClientsResp_Item{} +func (x *CheckTemplateSetReferencesAppsResp_Item) GetAppExceedsLimit() bool { + if x != nil { + return x.AppExceedsLimit + } + return false +} + +func (x *CheckTemplateSetReferencesAppsResp_Item) GetTemplateSetExceedsLimit() bool { + if x != nil { + return x.TemplateSetExceedsLimit + } + return false +} + +func (x *CheckTemplateSetReferencesAppsResp_Item) GetAppExceedsQuantity() uint32 { + if x != nil { + return x.AppExceedsQuantity + } + return 0 +} + +func (x *CheckTemplateSetReferencesAppsResp_Item) GetTemplateSetExceedsQuantity() uint32 { + if x != nil { + return x.TemplateSetExceedsQuantity + } + return 0 +} + +type ListAllGroupsResp_ListAllGroupsData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Public bool `protobuf:"varint,3,opt,name=public,proto3" json:"public,omitempty"` + BindApps []*ListAllGroupsResp_ListAllGroupsData_BindApp `protobuf:"bytes,4,rep,name=bind_apps,json=bindApps,proto3" json:"bind_apps,omitempty"` + Selector *structpb.Struct `protobuf:"bytes,5,opt,name=selector,proto3" json:"selector,omitempty"` + ReleasedAppsNum uint32 `protobuf:"varint,6,opt,name=released_apps_num,json=releasedAppsNum,proto3" json:"released_apps_num,omitempty"` + Edited bool `protobuf:"varint,7,opt,name=edited,proto3" json:"edited,omitempty"` +} + +func (x *ListAllGroupsResp_ListAllGroupsData) Reset() { + *x = ListAllGroupsResp_ListAllGroupsData{} if protoimpl.UnsafeEnabled { mi := &file_config_service_proto_msgTypes[333] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -21510,13 +21583,13 @@ func (x *ListClientsResp_Item) Reset() { } } -func (x *ListClientsResp_Item) String() string { +func (x *ListAllGroupsResp_ListAllGroupsData) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListClientsResp_Item) ProtoMessage() {} +func (*ListAllGroupsResp_ListAllGroupsData) ProtoMessage() {} -func (x *ListClientsResp_Item) ProtoReflect() protoreflect.Message { +func (x *ListAllGroupsResp_ListAllGroupsData) ProtoReflect() protoreflect.Message { mi := &file_config_service_proto_msgTypes[333] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -21528,57 +21601,71 @@ func (x *ListClientsResp_Item) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListClientsResp_Item.ProtoReflect.Descriptor instead. -func (*ListClientsResp_Item) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{286, 0} +// Deprecated: Use ListAllGroupsResp_ListAllGroupsData.ProtoReflect.Descriptor instead. +func (*ListAllGroupsResp_ListAllGroupsData) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{254, 0} } -func (x *ListClientsResp_Item) GetClient() *client.Client { +func (x *ListAllGroupsResp_ListAllGroupsData) GetId() uint32 { if x != nil { - return x.Client + return x.Id } - return nil + return 0 } -func (x *ListClientsResp_Item) GetCpuUsageStr() string { +func (x *ListAllGroupsResp_ListAllGroupsData) GetName() string { if x != nil { - return x.CpuUsageStr + return x.Name } return "" } -func (x *ListClientsResp_Item) GetCpuMaxUsageStr() string { +func (x *ListAllGroupsResp_ListAllGroupsData) GetPublic() bool { if x != nil { - return x.CpuMaxUsageStr + return x.Public } - return "" + return false } -func (x *ListClientsResp_Item) GetMemoryUsageStr() string { +func (x *ListAllGroupsResp_ListAllGroupsData) GetBindApps() []*ListAllGroupsResp_ListAllGroupsData_BindApp { if x != nil { - return x.MemoryUsageStr + return x.BindApps } - return "" + return nil } -func (x *ListClientsResp_Item) GetMemoryMaxUsageStr() string { +func (x *ListAllGroupsResp_ListAllGroupsData) GetSelector() *structpb.Struct { if x != nil { - return x.MemoryMaxUsageStr + return x.Selector } - return "" + return nil } -type ListClientEventsReq_Order struct { +func (x *ListAllGroupsResp_ListAllGroupsData) GetReleasedAppsNum() uint32 { + if x != nil { + return x.ReleasedAppsNum + } + return 0 +} + +func (x *ListAllGroupsResp_ListAllGroupsData) GetEdited() bool { + if x != nil { + return x.Edited + } + return false +} + +type ListAllGroupsResp_ListAllGroupsData_BindApp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Desc string `protobuf:"bytes,1,opt,name=desc,proto3" json:"desc,omitempty"` - Asc string `protobuf:"bytes,2,opt,name=asc,proto3" json:"asc,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` } -func (x *ListClientEventsReq_Order) Reset() { - *x = ListClientEventsReq_Order{} +func (x *ListAllGroupsResp_ListAllGroupsData_BindApp) Reset() { + *x = ListAllGroupsResp_ListAllGroupsData_BindApp{} if protoimpl.UnsafeEnabled { mi := &file_config_service_proto_msgTypes[334] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -21586,13 +21673,13 @@ func (x *ListClientEventsReq_Order) Reset() { } } -func (x *ListClientEventsReq_Order) String() string { +func (x *ListAllGroupsResp_ListAllGroupsData_BindApp) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListClientEventsReq_Order) ProtoMessage() {} +func (*ListAllGroupsResp_ListAllGroupsData_BindApp) ProtoMessage() {} -func (x *ListClientEventsReq_Order) ProtoReflect() protoreflect.Message { +func (x *ListAllGroupsResp_ListAllGroupsData_BindApp) ProtoReflect() protoreflect.Message { mi := &file_config_service_proto_msgTypes[334] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -21604,41 +21691,41 @@ func (x *ListClientEventsReq_Order) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListClientEventsReq_Order.ProtoReflect.Descriptor instead. -func (*ListClientEventsReq_Order) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{287, 0} +// Deprecated: Use ListAllGroupsResp_ListAllGroupsData_BindApp.ProtoReflect.Descriptor instead. +func (*ListAllGroupsResp_ListAllGroupsData_BindApp) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{254, 0, 0} } -func (x *ListClientEventsReq_Order) GetDesc() string { +func (x *ListAllGroupsResp_ListAllGroupsData_BindApp) GetId() uint32 { if x != nil { - return x.Desc + return x.Id } - return "" + return 0 } -func (x *ListClientEventsReq_Order) GetAsc() string { +func (x *ListAllGroupsResp_ListAllGroupsData_BindApp) GetName() string { if x != nil { - return x.Asc + return x.Name } return "" } -type CompareConfigItemConflictsResp_NonTemplateConfig struct { +type ListAppGroupsResp_ListAppGroupsData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - ConfigItemSpec *config_item.ConfigItemSpec `protobuf:"bytes,2,opt,name=config_item_spec,json=configItemSpec,proto3" json:"config_item_spec,omitempty"` - Variables []*template_variable.TemplateVariableSpec `protobuf:"bytes,3,rep,name=variables,proto3" json:"variables,omitempty"` - IsExist bool `protobuf:"varint,4,opt,name=is_exist,json=isExist,proto3" json:"is_exist,omitempty"` - Signature string `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` - ByteSize uint64 `protobuf:"varint,6,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` - Md5 string `protobuf:"bytes,7,opt,name=md5,proto3" json:"md5,omitempty"` + GroupId uint32 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + GroupName string `protobuf:"bytes,2,opt,name=group_name,json=groupName,proto3" json:"group_name,omitempty"` + ReleaseId uint32 `protobuf:"varint,3,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"` + ReleaseName string `protobuf:"bytes,4,opt,name=release_name,json=releaseName,proto3" json:"release_name,omitempty"` + OldSelector *structpb.Struct `protobuf:"bytes,5,opt,name=old_selector,json=oldSelector,proto3" json:"old_selector,omitempty"` + NewSelector *structpb.Struct `protobuf:"bytes,6,opt,name=new_selector,json=newSelector,proto3" json:"new_selector,omitempty"` + Edited bool `protobuf:"varint,7,opt,name=edited,proto3" json:"edited,omitempty"` } -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) Reset() { - *x = CompareConfigItemConflictsResp_NonTemplateConfig{} +func (x *ListAppGroupsResp_ListAppGroupsData) Reset() { + *x = ListAppGroupsResp_ListAppGroupsData{} if protoimpl.UnsafeEnabled { mi := &file_config_service_proto_msgTypes[335] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -21646,13 +21733,13 @@ func (x *CompareConfigItemConflictsResp_NonTemplateConfig) Reset() { } } -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) String() string { +func (x *ListAppGroupsResp_ListAppGroupsData) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CompareConfigItemConflictsResp_NonTemplateConfig) ProtoMessage() {} +func (*ListAppGroupsResp_ListAppGroupsData) ProtoMessage() {} -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) ProtoReflect() protoreflect.Message { +func (x *ListAppGroupsResp_ListAppGroupsData) ProtoReflect() protoreflect.Message { mi := &file_config_service_proto_msgTypes[335] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -21664,78 +21751,74 @@ func (x *CompareConfigItemConflictsResp_NonTemplateConfig) ProtoReflect() protor return mi.MessageOf(x) } -// Deprecated: Use CompareConfigItemConflictsResp_NonTemplateConfig.ProtoReflect.Descriptor instead. -func (*CompareConfigItemConflictsResp_NonTemplateConfig) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{303, 0} +// Deprecated: Use ListAppGroupsResp_ListAppGroupsData.ProtoReflect.Descriptor instead. +func (*ListAppGroupsResp_ListAppGroupsData) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{256, 0} } -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetId() uint32 { +func (x *ListAppGroupsResp_ListAppGroupsData) GetGroupId() uint32 { if x != nil { - return x.Id + return x.GroupId } return 0 } -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetConfigItemSpec() *config_item.ConfigItemSpec { +func (x *ListAppGroupsResp_ListAppGroupsData) GetGroupName() string { if x != nil { - return x.ConfigItemSpec + return x.GroupName } - return nil + return "" } -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetVariables() []*template_variable.TemplateVariableSpec { +func (x *ListAppGroupsResp_ListAppGroupsData) GetReleaseId() uint32 { if x != nil { - return x.Variables + return x.ReleaseId } - return nil + return 0 } -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetIsExist() bool { +func (x *ListAppGroupsResp_ListAppGroupsData) GetReleaseName() string { if x != nil { - return x.IsExist + return x.ReleaseName } - return false + return "" } -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetSignature() string { +func (x *ListAppGroupsResp_ListAppGroupsData) GetOldSelector() *structpb.Struct { if x != nil { - return x.Signature + return x.OldSelector } - return "" + return nil } -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetByteSize() uint64 { +func (x *ListAppGroupsResp_ListAppGroupsData) GetNewSelector() *structpb.Struct { if x != nil { - return x.ByteSize + return x.NewSelector } - return 0 + return nil } -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetMd5() string { +func (x *ListAppGroupsResp_ListAppGroupsData) GetEdited() bool { if x != nil { - return x.Md5 + return x.Edited } - return "" + return false } -type CompareConfigItemConflictsResp_TemplateConfig struct { +type ListGroupReleasedAppsResp_ListGroupReleasedAppsData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TemplateSpaceId uint32 `protobuf:"varint,1,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` - TemplateSpaceName string `protobuf:"bytes,2,opt,name=template_space_name,json=templateSpaceName,proto3" json:"template_space_name,omitempty"` - TemplateSetId uint32 `protobuf:"varint,3,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` - TemplateSetName string `protobuf:"bytes,4,opt,name=template_set_name,json=templateSetName,proto3" json:"template_set_name,omitempty"` - IsExist bool `protobuf:"varint,5,opt,name=is_exist,json=isExist,proto3" json:"is_exist,omitempty"` - TemplateRevisions []*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail `protobuf:"bytes,6,rep,name=template_revisions,json=templateRevisions,proto3" json:"template_revisions,omitempty"` - TemplateSpaceExist bool `protobuf:"varint,7,opt,name=template_space_exist,json=templateSpaceExist,proto3" json:"template_space_exist,omitempty"` - TemplateSetExist bool `protobuf:"varint,8,opt,name=template_set_exist,json=templateSetExist,proto3" json:"template_set_exist,omitempty"` - TemplateSetIsEmpty bool `protobuf:"varint,9,opt,name=template_set_is_empty,json=templateSetIsEmpty,proto3" json:"template_set_is_empty,omitempty"` + AppId uint32 `protobuf:"varint,1,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + AppName string `protobuf:"bytes,2,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` + ReleaseId uint32 `protobuf:"varint,3,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"` + ReleaseName string `protobuf:"bytes,4,opt,name=release_name,json=releaseName,proto3" json:"release_name,omitempty"` + Edited bool `protobuf:"varint,5,opt,name=edited,proto3" json:"edited,omitempty"` } -func (x *CompareConfigItemConflictsResp_TemplateConfig) Reset() { - *x = CompareConfigItemConflictsResp_TemplateConfig{} +func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) Reset() { + *x = ListGroupReleasedAppsResp_ListGroupReleasedAppsData{} if protoimpl.UnsafeEnabled { mi := &file_config_service_proto_msgTypes[336] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -21743,13 +21826,13 @@ func (x *CompareConfigItemConflictsResp_TemplateConfig) Reset() { } } -func (x *CompareConfigItemConflictsResp_TemplateConfig) String() string { +func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CompareConfigItemConflictsResp_TemplateConfig) ProtoMessage() {} +func (*ListGroupReleasedAppsResp_ListGroupReleasedAppsData) ProtoMessage() {} -func (x *CompareConfigItemConflictsResp_TemplateConfig) ProtoReflect() protoreflect.Message { +func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) ProtoReflect() protoreflect.Message { mi := &file_config_service_proto_msgTypes[336] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -21761,102 +21844,159 @@ func (x *CompareConfigItemConflictsResp_TemplateConfig) ProtoReflect() protorefl return mi.MessageOf(x) } -// Deprecated: Use CompareConfigItemConflictsResp_TemplateConfig.ProtoReflect.Descriptor instead. -func (*CompareConfigItemConflictsResp_TemplateConfig) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{303, 1} +// Deprecated: Use ListGroupReleasedAppsResp_ListGroupReleasedAppsData.ProtoReflect.Descriptor instead. +func (*ListGroupReleasedAppsResp_ListGroupReleasedAppsData) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{258, 0} } -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSpaceId() uint32 { +func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetAppId() uint32 { if x != nil { - return x.TemplateSpaceId + return x.AppId } return 0 } -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSpaceName() string { +func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetAppName() string { if x != nil { - return x.TemplateSpaceName + return x.AppName } return "" } -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSetId() uint32 { +func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetReleaseId() uint32 { if x != nil { - return x.TemplateSetId + return x.ReleaseId } return 0 } -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSetName() string { +func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetReleaseName() string { if x != nil { - return x.TemplateSetName + return x.ReleaseName } return "" } -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetIsExist() bool { +func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetEdited() bool { if x != nil { - return x.IsExist + return x.Edited } return false } -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateRevisions() []*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail { +type BatchUpsertKvsReq_Kv struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + KvType string `protobuf:"bytes,2,opt,name=kv_type,json=kvType,proto3" json:"kv_type,omitempty"` + Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + Memo string `protobuf:"bytes,4,opt,name=memo,proto3" json:"memo,omitempty"` + SecretType string `protobuf:"bytes,5,opt,name=secret_type,json=secretType,proto3" json:"secret_type,omitempty"` + SecretHidden bool `protobuf:"varint,6,opt,name=secret_hidden,json=secretHidden,proto3" json:"secret_hidden,omitempty"` +} + +func (x *BatchUpsertKvsReq_Kv) Reset() { + *x = BatchUpsertKvsReq_Kv{} + if protoimpl.UnsafeEnabled { + mi := &file_config_service_proto_msgTypes[337] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BatchUpsertKvsReq_Kv) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchUpsertKvsReq_Kv) ProtoMessage() {} + +func (x *BatchUpsertKvsReq_Kv) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[337] + 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 BatchUpsertKvsReq_Kv.ProtoReflect.Descriptor instead. +func (*BatchUpsertKvsReq_Kv) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{275, 0} +} + +func (x *BatchUpsertKvsReq_Kv) GetKey() string { if x != nil { - return x.TemplateRevisions + return x.Key } - return nil + return "" } -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSpaceExist() bool { +func (x *BatchUpsertKvsReq_Kv) GetKvType() string { if x != nil { - return x.TemplateSpaceExist + return x.KvType } - return false + return "" } -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSetExist() bool { +func (x *BatchUpsertKvsReq_Kv) GetValue() string { if x != nil { - return x.TemplateSetExist + return x.Value } - return false + return "" } -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSetIsEmpty() bool { +func (x *BatchUpsertKvsReq_Kv) GetMemo() string { if x != nil { - return x.TemplateSetIsEmpty + return x.Memo + } + return "" +} + +func (x *BatchUpsertKvsReq_Kv) GetSecretType() string { + if x != nil { + return x.SecretType + } + return "" +} + +func (x *BatchUpsertKvsReq_Kv) GetSecretHidden() bool { + if x != nil { + return x.SecretHidden } return false } -type CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail struct { +type ListClientsReq_Order struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TemplateId uint32 `protobuf:"varint,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` - TemplateRevisionId uint32 `protobuf:"varint,2,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` - IsLatest bool `protobuf:"varint,3,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"` - Variables []*template_variable.TemplateVariableSpec `protobuf:"bytes,5,rep,name=variables,proto3" json:"variables,omitempty"` + Desc string `protobuf:"bytes,1,opt,name=desc,proto3" json:"desc,omitempty"` + Asc string `protobuf:"bytes,2,opt,name=asc,proto3" json:"asc,omitempty"` } -func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) Reset() { - *x = CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail{} +func (x *ListClientsReq_Order) Reset() { + *x = ListClientsReq_Order{} if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[337] + mi := &file_config_service_proto_msgTypes[338] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) String() string { +func (x *ListClientsReq_Order) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) ProtoMessage() {} +func (*ListClientsReq_Order) ProtoMessage() {} -func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[337] +func (x *ListClientsReq_Order) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[338] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21867,69 +22007,54 @@ func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) P return mi.MessageOf(x) } -// Deprecated: Use CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail.ProtoReflect.Descriptor instead. -func (*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{303, 1, 0} -} - -func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetTemplateId() uint32 { - if x != nil { - return x.TemplateId - } - return 0 -} - -func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetTemplateRevisionId() uint32 { - if x != nil { - return x.TemplateRevisionId - } - return 0 +// Deprecated: Use ListClientsReq_Order.ProtoReflect.Descriptor instead. +func (*ListClientsReq_Order) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{285, 0} } -func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetIsLatest() bool { +func (x *ListClientsReq_Order) GetDesc() string { if x != nil { - return x.IsLatest + return x.Desc } - return false + return "" } -func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetVariables() []*template_variable.TemplateVariableSpec { +func (x *ListClientsReq_Order) GetAsc() string { if x != nil { - return x.Variables + return x.Asc } - return nil + return "" } -type CompareKvConflictsResp_Kv struct { +type ListClientsResp_Item struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - KvType string `protobuf:"bytes,2,opt,name=kv_type,json=kvType,proto3" json:"kv_type,omitempty"` - Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` - Memo string `protobuf:"bytes,4,opt,name=memo,proto3" json:"memo,omitempty"` - SecretType string `protobuf:"bytes,5,opt,name=secret_type,json=secretType,proto3" json:"secret_type,omitempty"` - SecretHidden bool `protobuf:"varint,6,opt,name=secret_hidden,json=secretHidden,proto3" json:"secret_hidden,omitempty"` + Client *client.Client `protobuf:"bytes,1,opt,name=client,proto3" json:"client,omitempty"` + CpuUsageStr string `protobuf:"bytes,2,opt,name=cpu_usage_str,json=cpuUsageStr,proto3" json:"cpu_usage_str,omitempty"` + CpuMaxUsageStr string `protobuf:"bytes,3,opt,name=cpu_max_usage_str,json=cpuMaxUsageStr,proto3" json:"cpu_max_usage_str,omitempty"` + MemoryUsageStr string `protobuf:"bytes,4,opt,name=memory_usage_str,json=memoryUsageStr,proto3" json:"memory_usage_str,omitempty"` + MemoryMaxUsageStr string `protobuf:"bytes,5,opt,name=memory_max_usage_str,json=memoryMaxUsageStr,proto3" json:"memory_max_usage_str,omitempty"` } -func (x *CompareKvConflictsResp_Kv) Reset() { - *x = CompareKvConflictsResp_Kv{} +func (x *ListClientsResp_Item) Reset() { + *x = ListClientsResp_Item{} if protoimpl.UnsafeEnabled { - mi := &file_config_service_proto_msgTypes[338] + mi := &file_config_service_proto_msgTypes[339] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CompareKvConflictsResp_Kv) String() string { +func (x *ListClientsResp_Item) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CompareKvConflictsResp_Kv) ProtoMessage() {} +func (*ListClientsResp_Item) ProtoMessage() {} -func (x *CompareKvConflictsResp_Kv) ProtoReflect() protoreflect.Message { - mi := &file_config_service_proto_msgTypes[338] +func (x *ListClientsResp_Item) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[339] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21940,59 +22065,558 @@ func (x *CompareKvConflictsResp_Kv) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CompareKvConflictsResp_Kv.ProtoReflect.Descriptor instead. -func (*CompareKvConflictsResp_Kv) Descriptor() ([]byte, []int) { - return file_config_service_proto_rawDescGZIP(), []int{305, 0} +// Deprecated: Use ListClientsResp_Item.ProtoReflect.Descriptor instead. +func (*ListClientsResp_Item) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{286, 0} } -func (x *CompareKvConflictsResp_Kv) GetKey() string { +func (x *ListClientsResp_Item) GetClient() *client.Client { if x != nil { - return x.Key + return x.Client + } + return nil +} + +func (x *ListClientsResp_Item) GetCpuUsageStr() string { + if x != nil { + return x.CpuUsageStr } return "" } -func (x *CompareKvConflictsResp_Kv) GetKvType() string { +func (x *ListClientsResp_Item) GetCpuMaxUsageStr() string { if x != nil { - return x.KvType + return x.CpuMaxUsageStr } return "" } -func (x *CompareKvConflictsResp_Kv) GetValue() string { +func (x *ListClientsResp_Item) GetMemoryUsageStr() string { if x != nil { - return x.Value + return x.MemoryUsageStr } return "" } -func (x *CompareKvConflictsResp_Kv) GetMemo() string { +func (x *ListClientsResp_Item) GetMemoryMaxUsageStr() string { if x != nil { - return x.Memo + return x.MemoryMaxUsageStr } return "" } -func (x *CompareKvConflictsResp_Kv) GetSecretType() string { +type ListClientEventsReq_Order struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Desc string `protobuf:"bytes,1,opt,name=desc,proto3" json:"desc,omitempty"` + Asc string `protobuf:"bytes,2,opt,name=asc,proto3" json:"asc,omitempty"` +} + +func (x *ListClientEventsReq_Order) Reset() { + *x = ListClientEventsReq_Order{} + if protoimpl.UnsafeEnabled { + mi := &file_config_service_proto_msgTypes[340] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListClientEventsReq_Order) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListClientEventsReq_Order) ProtoMessage() {} + +func (x *ListClientEventsReq_Order) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[340] + 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 ListClientEventsReq_Order.ProtoReflect.Descriptor instead. +func (*ListClientEventsReq_Order) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{287, 0} +} + +func (x *ListClientEventsReq_Order) GetDesc() string { if x != nil { - return x.SecretType + return x.Desc } return "" } -func (x *CompareKvConflictsResp_Kv) GetSecretHidden() bool { +func (x *ListClientEventsReq_Order) GetAsc() string { if x != nil { - return x.SecretHidden + return x.Asc } - return false + return "" } -var File_config_service_proto protoreflect.FileDescriptor +type CompareConfigItemConflictsResp_NonTemplateConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -var file_config_service_proto_rawDesc = []byte{ - 0x0a, 0x14, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x70, 0x62, 0x63, 0x73, 0x1a, 0x1f, 0x70, 0x6b, - 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + ConfigItemSpec *config_item.ConfigItemSpec `protobuf:"bytes,2,opt,name=config_item_spec,json=configItemSpec,proto3" json:"config_item_spec,omitempty"` + Variables []*template_variable.TemplateVariableSpec `protobuf:"bytes,3,rep,name=variables,proto3" json:"variables,omitempty"` + IsExist bool `protobuf:"varint,4,opt,name=is_exist,json=isExist,proto3" json:"is_exist,omitempty"` + Signature string `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` + ByteSize uint64 `protobuf:"varint,6,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` + Md5 string `protobuf:"bytes,7,opt,name=md5,proto3" json:"md5,omitempty"` +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) Reset() { + *x = CompareConfigItemConflictsResp_NonTemplateConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_config_service_proto_msgTypes[341] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompareConfigItemConflictsResp_NonTemplateConfig) ProtoMessage() {} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[341] + 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 CompareConfigItemConflictsResp_NonTemplateConfig.ProtoReflect.Descriptor instead. +func (*CompareConfigItemConflictsResp_NonTemplateConfig) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{303, 0} +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetConfigItemSpec() *config_item.ConfigItemSpec { + if x != nil { + return x.ConfigItemSpec + } + return nil +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetVariables() []*template_variable.TemplateVariableSpec { + if x != nil { + return x.Variables + } + return nil +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetIsExist() bool { + if x != nil { + return x.IsExist + } + return false +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetSignature() string { + if x != nil { + return x.Signature + } + return "" +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetByteSize() uint64 { + if x != nil { + return x.ByteSize + } + return 0 +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetMd5() string { + if x != nil { + return x.Md5 + } + return "" +} + +type CompareConfigItemConflictsResp_TemplateConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TemplateSpaceId uint32 `protobuf:"varint,1,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` + TemplateSpaceName string `protobuf:"bytes,2,opt,name=template_space_name,json=templateSpaceName,proto3" json:"template_space_name,omitempty"` + TemplateSetId uint32 `protobuf:"varint,3,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` + TemplateSetName string `protobuf:"bytes,4,opt,name=template_set_name,json=templateSetName,proto3" json:"template_set_name,omitempty"` + IsExist bool `protobuf:"varint,5,opt,name=is_exist,json=isExist,proto3" json:"is_exist,omitempty"` + TemplateRevisions []*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail `protobuf:"bytes,6,rep,name=template_revisions,json=templateRevisions,proto3" json:"template_revisions,omitempty"` + TemplateSpaceExist bool `protobuf:"varint,7,opt,name=template_space_exist,json=templateSpaceExist,proto3" json:"template_space_exist,omitempty"` + TemplateSetExist bool `protobuf:"varint,8,opt,name=template_set_exist,json=templateSetExist,proto3" json:"template_set_exist,omitempty"` + TemplateSetIsEmpty bool `protobuf:"varint,9,opt,name=template_set_is_empty,json=templateSetIsEmpty,proto3" json:"template_set_is_empty,omitempty"` +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) Reset() { + *x = CompareConfigItemConflictsResp_TemplateConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_config_service_proto_msgTypes[342] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompareConfigItemConflictsResp_TemplateConfig) ProtoMessage() {} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[342] + 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 CompareConfigItemConflictsResp_TemplateConfig.ProtoReflect.Descriptor instead. +func (*CompareConfigItemConflictsResp_TemplateConfig) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{303, 1} +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSpaceId() uint32 { + if x != nil { + return x.TemplateSpaceId + } + return 0 +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSpaceName() string { + if x != nil { + return x.TemplateSpaceName + } + return "" +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSetId() uint32 { + if x != nil { + return x.TemplateSetId + } + return 0 +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSetName() string { + if x != nil { + return x.TemplateSetName + } + return "" +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetIsExist() bool { + if x != nil { + return x.IsExist + } + return false +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateRevisions() []*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail { + if x != nil { + return x.TemplateRevisions + } + return nil +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSpaceExist() bool { + if x != nil { + return x.TemplateSpaceExist + } + return false +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSetExist() bool { + if x != nil { + return x.TemplateSetExist + } + return false +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSetIsEmpty() bool { + if x != nil { + return x.TemplateSetIsEmpty + } + return false +} + +type CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TemplateId uint32 `protobuf:"varint,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + TemplateRevisionId uint32 `protobuf:"varint,2,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` + IsLatest bool `protobuf:"varint,3,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"` + Variables []*template_variable.TemplateVariableSpec `protobuf:"bytes,5,rep,name=variables,proto3" json:"variables,omitempty"` + Permission *config_item.FilePermission `protobuf:"bytes,6,opt,name=permission,proto3" json:"permission,omitempty"` +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) Reset() { + *x = CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail{} + if protoimpl.UnsafeEnabled { + mi := &file_config_service_proto_msgTypes[343] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) ProtoMessage() {} + +func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[343] + 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 CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail.ProtoReflect.Descriptor instead. +func (*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{303, 1, 0} +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetTemplateId() uint32 { + if x != nil { + return x.TemplateId + } + return 0 +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetTemplateRevisionId() uint32 { + if x != nil { + return x.TemplateRevisionId + } + return 0 +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetIsLatest() bool { + if x != nil { + return x.IsLatest + } + return false +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetVariables() []*template_variable.TemplateVariableSpec { + if x != nil { + return x.Variables + } + return nil +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetPermission() *config_item.FilePermission { + if x != nil { + return x.Permission + } + return nil +} + +type CompareKvConflictsResp_Kv struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + KvType string `protobuf:"bytes,2,opt,name=kv_type,json=kvType,proto3" json:"kv_type,omitempty"` + Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + Memo string `protobuf:"bytes,4,opt,name=memo,proto3" json:"memo,omitempty"` + SecretType string `protobuf:"bytes,5,opt,name=secret_type,json=secretType,proto3" json:"secret_type,omitempty"` + SecretHidden bool `protobuf:"varint,6,opt,name=secret_hidden,json=secretHidden,proto3" json:"secret_hidden,omitempty"` +} + +func (x *CompareKvConflictsResp_Kv) Reset() { + *x = CompareKvConflictsResp_Kv{} + if protoimpl.UnsafeEnabled { + mi := &file_config_service_proto_msgTypes[344] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CompareKvConflictsResp_Kv) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompareKvConflictsResp_Kv) ProtoMessage() {} + +func (x *CompareKvConflictsResp_Kv) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[344] + 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 CompareKvConflictsResp_Kv.ProtoReflect.Descriptor instead. +func (*CompareKvConflictsResp_Kv) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{305, 0} +} + +func (x *CompareKvConflictsResp_Kv) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *CompareKvConflictsResp_Kv) GetKvType() string { + if x != nil { + return x.KvType + } + return "" +} + +func (x *CompareKvConflictsResp_Kv) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +func (x *CompareKvConflictsResp_Kv) GetMemo() string { + if x != nil { + return x.Memo + } + return "" +} + +func (x *CompareKvConflictsResp_Kv) GetSecretType() string { + if x != nil { + return x.SecretType + } + return "" +} + +func (x *CompareKvConflictsResp_Kv) GetSecretHidden() bool { + if x != nil { + return x.SecretHidden + } + return false +} + +type ListUserPrivilegesResp_Detail struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + PrivilegeType string `protobuf:"bytes,3,opt,name=privilege_type,json=privilegeType,proto3" json:"privilege_type,omitempty"` + ReadOnly bool `protobuf:"varint,4,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` + Pid uint32 `protobuf:"varint,5,opt,name=pid,proto3" json:"pid,omitempty"` // 权限ID +} + +func (x *ListUserPrivilegesResp_Detail) Reset() { + *x = ListUserPrivilegesResp_Detail{} + if protoimpl.UnsafeEnabled { + mi := &file_config_service_proto_msgTypes[345] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListUserPrivilegesResp_Detail) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListUserPrivilegesResp_Detail) ProtoMessage() {} + +func (x *ListUserPrivilegesResp_Detail) ProtoReflect() protoreflect.Message { + mi := &file_config_service_proto_msgTypes[345] + 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 ListUserPrivilegesResp_Detail.ProtoReflect.Descriptor instead. +func (*ListUserPrivilegesResp_Detail) Descriptor() ([]byte, []int) { + return file_config_service_proto_rawDescGZIP(), []int{311, 0} +} + +func (x *ListUserPrivilegesResp_Detail) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ListUserPrivilegesResp_Detail) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ListUserPrivilegesResp_Detail) GetPrivilegeType() string { + if x != nil { + return x.PrivilegeType + } + return "" +} + +func (x *ListUserPrivilegesResp_Detail) GetReadOnly() bool { + if x != nil { + return x.ReadOnly + } + return false +} + +func (x *ListUserPrivilegesResp_Detail) GetPid() uint32 { + if x != nil { + return x.Pid + } + return 0 +} + +var File_config_service_proto protoreflect.FileDescriptor + +var file_config_service_proto_rawDesc = []byte{ + 0x0a, 0x14, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x70, 0x62, 0x63, 0x73, 0x1a, 0x1f, 0x70, 0x6b, + 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x41, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x62, 0x69, @@ -22237,7 +22861,7 @@ var file_config_service_proto_rawDesc = []byte{ 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, 0x70, 0x70, 0x52, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xbb, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xdf, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, @@ -22257,697 +22881,706 @@ var file_config_service_proto_rawDesc = []byte{ 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, - 0x69, 0x7a, 0x65, 0x22, 0xcf, 0x05, 0x0a, 0x19, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, - 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, - 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, - 0x40, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x2e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x6c, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x41, - 0x6c, 0x6c, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, - 0x63, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x4b, 0x0a, 0x08, - 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x2e, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, - 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0x96, 0x02, 0x0a, 0x0a, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, - 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x12, - 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, - 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, - 0x69, 0x67, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, - 0x64, 0x35, 0x1a, 0x80, 0x01, 0x0a, 0x0f, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x49, 0x64, 0x12, 0x41, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, - 0x62, 0x61, 0x74, 0x62, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x0a, 0x1a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, - 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x26, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0xcb, 0x02, - 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x03, 0x67, 0x69, 0x64, 0x22, 0xf3, 0x05, 0x0a, 0x19, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, + 0x70, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, + 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, + 0x52, 0x65, 0x71, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, + 0x5f, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, + 0x61, 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, + 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x12, 0x4b, 0x0a, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, + 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, + 0x52, 0x65, 0x71, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x52, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0xba, 0x02, + 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, + 0x6d, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6d, 0x64, 0x35, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x67, 0x69, 0x64, 0x1a, 0x80, 0x01, 0x0a, 0x0f, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, + 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x10, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x0a, + 0x1a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x69, + 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x26, 0x0a, + 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0xef, 0x02, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, + 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, + 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x03, 0x67, 0x69, 0x64, 0x22, 0x16, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x53, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, + 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, + 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, + 0x70, 0x70, 0x49, 0x64, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x55, 0x0a, 0x15, + 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, - 0x70, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x66, - 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, - 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, - 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, - 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, - 0x67, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x12, 0x1b, - 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x53, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x55, 0x0a, 0x15, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, - 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x55, 0x6e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x5c, 0x0a, 0x1a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, - 0x63, 0x0a, 0x1b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x25, - 0x0a, 0x0e, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, - 0x75, 0x6c, 0x49, 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, - 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x49, 0x64, 0x73, 0x22, 0x51, 0x0a, 0x11, 0x55, 0x6e, 0x64, 0x6f, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, - 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x6e, 0x64, 0x6f, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x66, 0x0a, - 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, - 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, - 0x24, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, - 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0x78, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x0b, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, - 0x6d, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x30, 0x0a, - 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, - 0x8d, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x70, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5c, 0x0a, + 0x1a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, + 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x63, 0x0a, 0x1b, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x75, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x49, 0x64, + 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x49, 0x64, 0x73, + 0x22, 0x51, 0x0a, 0x11, 0x55, 0x6e, 0x64, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, + 0x70, 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x6e, 0x64, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x66, 0x0a, 0x10, 0x47, 0x65, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x64, 0x22, 0x78, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, + 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0a, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x30, 0x0a, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x8d, 0x01, 0x0a, 0x18, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, + 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, + 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0x57, 0x0a, 0x19, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x70, 0x62, 0x72, 0x63, 0x69, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x74, 0x65, 0x6d, 0x22, 0x93, 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, + 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, + 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, + 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, + 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x13, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x69, + 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, + 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x63, + 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xef, 0x01, + 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, - 0x57, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0b, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x72, 0x63, 0x69, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0a, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x93, 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x12, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, + 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, + 0x68, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, + 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x72, 0x63, 0x69, 0x2e, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, + 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x46, 0x0a, 0x16, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, + 0x64, 0x22, 0x4f, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, + 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x70, 0x62, 0x63, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, + 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x22, 0xb3, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x23, 0x0a, - 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, - 0x69, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x80, - 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, - 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x66, - 0x6c, 0x69, 0x63, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x22, 0xef, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, - 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, - 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, - 0x61, 0x6c, 0x6c, 0x22, 0x68, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x72, 0x63, - 0x69, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x46, 0x0a, - 0x16, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, - 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x05, - 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x4f, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x07, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xb3, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x39, 0x0a, + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x2e, 0x49, 0x74, 0x65, + 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x2e, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x47, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2a, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x22, 0x71, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, + 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, + 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x22, 0x36, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x12, 0x21, 0x0a, 0x02, 0x6b, 0x76, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x72, 0x6b, 0x76, 0x2e, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x02, 0x6b, 0x76, 0x22, 0x93, 0x02, 0x0a, + 0x12, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, - 0x64, 0x12, 0x39, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, - 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x2e, 0x0a, 0x04, - 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x47, 0x0a, 0x19, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, - 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2a, 0x0a, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x63, - 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x71, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, - 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x36, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x12, 0x21, 0x0a, - 0x02, 0x6b, 0x76, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x72, 0x6b, - 0x76, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x02, 0x6b, 0x76, - 0x22, 0x93, 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x64, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, - 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, - 0x6c, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x73, 0x6f, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x58, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, - 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x72, 0x6b, 0x76, 0x2e, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x22, 0x85, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, - 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, 0x68, 0x6f, - 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x72, 0x65, - 0x48, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x68, - 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, - 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0x16, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x22, 0xa2, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, - 0x70, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x38, 0x0a, 0x09, 0x76, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x23, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x57, 0x0a, 0x13, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, + 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x17, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x06, 0x6b, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x22, 0x58, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x64, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x2b, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x70, 0x62, 0x72, 0x6b, 0x76, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x64, 0x4b, 0x76, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x85, 0x01, 0x0a, + 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, + 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x72, 0x65, 0x48, 0x6f, 0x6f, 0x6b, + 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, + 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x48, 0x6f, + 0x6f, 0x6b, 0x49, 0x64, 0x22, 0x16, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa2, 0x01, 0x0a, + 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x22, 0x2c, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x65, - 0x78, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x65, 0x78, 0x69, 0x73, - 0x74, 0x22, 0xbb, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, - 0x70, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, - 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, - 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x22, - 0x56, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, - 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0x5c, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, - 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x62, 0x0a, - 0x13, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, - 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, - 0x64, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x64, 0x0a, 0x15, 0x55, 0x6e, 0x44, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, - 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, - 0x18, 0x0a, 0x16, 0x55, 0x6e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5f, 0x0a, 0x10, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, + 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x22, 0x23, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x57, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x13, 0x0a, 0x11, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, - 0xb5, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, + 0x2c, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x69, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x65, 0x78, 0x69, 0x73, 0x74, 0x22, 0xbb, 0x01, + 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x55, 0x0a, 0x0d, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, - 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, - 0x22, 0x10, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x84, 0x01, 0x0a, 0x12, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, - 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x67, 0x0a, 0x0d, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, - 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, - 0x6d, 0x6f, 0x22, 0x10, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x22, 0xd9, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, - 0x6b, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, - 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x74, 0x54, 0x61, 0x67, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6f, 0x70, 0x5f, 0x69, - 0x64, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x49, 0x64, 0x73, - 0x22, 0xa9, 0x02, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x27, - 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0xa2, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x12, 0x20, 0x0a, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x04, - 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x6e, 0x75, - 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x75, - 0x6d, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x5f, 0x64, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x65, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x28, 0x0a, 0x0f, - 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x22, 0x43, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, - 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2f, 0x0a, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x62, - 0x68, 0x6f, 0x6f, 0x6b, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, - 0x67, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x15, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, - 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x28, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, - 0x64, 0x22, 0xb9, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x91, 0x02, - 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4b, 0x0a, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x94, 0x01, 0x0a, 0x15, 0x4c, - 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x37, 0x0a, 0x0d, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, - 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x0c, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, - 0x09, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x08, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x22, 0x7e, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, + 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, + 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x64, + 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x22, 0x56, 0x0a, 0x10, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x22, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0a, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, - 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, - 0x65, 0x22, 0x18, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x69, 0x0a, 0x16, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, - 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x19, 0x0a, 0x17, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x3c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, - 0xae, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x29, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x49, 0x6e, 0x66, 0x6f, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x70, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x41, 0x74, 0x74, 0x61, - 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0xcf, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x49, 0x6e, 0x66, 0x6f, - 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5c, 0x0a, 0x0d, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, + 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x62, 0x0a, 0x13, 0x44, 0x65, 0x70, + 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, + 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x16, 0x0a, + 0x14, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x64, 0x0a, 0x15, 0x55, 0x6e, 0x44, 0x65, 0x70, 0x72, 0x65, + 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, + 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x55, + 0x6e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5f, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, + 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x13, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0xb5, 0x01, 0x0a, 0x0d, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x3a, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, - 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, - 0x1a, 0x30, 0x0a, 0x08, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0e, - 0x6e, 0x6f, 0x74, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x49, 0x64, 0x22, 0x65, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, - 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xaa, 0x01, 0x0a, 0x15, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, - 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, - 0x6b, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x18, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x22, 0xba, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, - 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, - 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x22, 0xf6, 0x02, - 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0xf6, 0x01, - 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x15, - 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, - 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, - 0x61, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, - 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x22, 0x91, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x48, - 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x22, 0xf8, 0x02, 0x0a, 0x16, 0x4c, - 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x88, 0x02, 0x0a, 0x06, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x28, 0x0a, 0x10, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0e, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x2c, 0x0a, 0x12, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x68, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x0a, - 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, - 0x70, 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x21, - 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, - 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, - 0x63, 0x61, 0x74, 0x65, 0x64, 0x22, 0x60, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0xcf, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, - 0x0a, 0x08, 0x70, 0x72, 0x65, 0x5f, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, - 0x07, 0x70, 0x72, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x3a, 0x0a, 0x09, 0x70, 0x6f, 0x73, 0x74, - 0x5f, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, - 0x48, 0x6f, 0x6f, 0x6b, 0x1a, 0xc2, 0x01, 0x0a, 0x04, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, - 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, - 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x6f, 0x6b, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x68, - 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, - 0x12, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x68, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x57, 0x0a, 0x16, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, - 0x6d, 0x6f, 0x22, 0x29, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x6f, 0x0a, - 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, - 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, - 0x6d, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x19, - 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5b, 0x0a, 0x16, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0x19, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x22, 0xb4, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, + 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x23, + 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, + 0x61, 0x6d, 0x65, 0x22, 0x20, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x55, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, + 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, + 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x10, 0x0a, 0x0e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x84, + 0x01, 0x0a, 0x12, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, + 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x14, + 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, + 0x6f, 0x72, 0x63, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x67, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, + 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, + 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, + 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x10, + 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x22, 0xd9, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, + 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x10, + 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, + 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x74, 0x54, 0x61, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, + 0x65, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x4b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6f, 0x70, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x49, 0x64, 0x73, 0x22, 0xa9, 0x02, 0x0a, + 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, + 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, + 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x1a, 0xa2, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x20, + 0x0a, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, + 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x68, 0x6f, 0x6f, 0x6b, + 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x08, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x25, 0x0a, + 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, + 0x64, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x13, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x28, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, + 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, - 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x5d, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x74, 0x73, - 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x35, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x6c, - 0x6c, 0x42, 0x69, 0x7a, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x73, 0x22, 0x32, - 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, - 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, + 0x49, 0x64, 0x22, 0x43, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2f, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x68, 0x6f, 0x6f, 0x6b, + 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x73, 0x52, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x22, 0x28, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0xb9, 0x01, + 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, + 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, + 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, + 0x61, 0x6c, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x91, 0x02, 0x0a, 0x15, 0x4c, 0x69, + 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x94, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x37, 0x0a, 0x0d, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x68, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x22, 0x7e, 0x0a, + 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, + 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, + 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x18, 0x0a, + 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x69, 0x0a, 0x16, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x73, 0x68, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x22, 0x19, 0x0a, 0x17, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x48, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3c, 0x0a, + 0x0a, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, - 0x49, 0x64, 0x22, 0x2c, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, - 0x22, 0x41, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, - 0x69, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, - 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xc2, 0x03, - 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0xae, 0x01, 0x0a, 0x0b, + 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x70, 0x65, 0x63, + 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x68, + 0x6f, 0x6f, 0x6b, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2c, + 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xcf, 0x01, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x70, 0x65, 0x63, + 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, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, + 0x12, 0x3a, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, + 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x73, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x1a, 0x30, 0x0a, 0x08, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x5f, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x65, + 0x0a, 0x12, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, + 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, + 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xaa, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, + 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, + 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, + 0x6d, 0x6f, 0x22, 0x18, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xba, 0x01, 0x0a, + 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, + 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x22, 0xf6, 0x02, 0x0a, 0x1e, 0x4c, 0x69, + 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0xf6, 0x01, 0x0a, 0x06, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, + 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, + 0x65, 0x64, 0x22, 0x91, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, + 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x22, 0xf8, 0x02, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x88, 0x02, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x12, 0x28, 0x0a, 0x10, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x68, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x68, + 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, + 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, + 0x64, 0x22, 0x60, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, + 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, + 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x49, 0x64, 0x22, 0xcf, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x08, 0x70, 0x72, + 0x65, 0x5f, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, + 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x07, 0x70, 0x72, 0x65, + 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x3a, 0x0a, 0x09, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x68, 0x6f, 0x6f, + 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, + 0x1a, 0xc2, 0x01, 0x0a, 0x04, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, + 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, + 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x6f, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x28, 0x0a, 0x10, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x68, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x68, 0x6f, 0x6f, + 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x57, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, + 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, + 0x6d, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x29, + 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x6f, 0x0a, 0x16, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, - 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, - 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, - 0x6d, 0x6f, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1b, 0x0a, 0x09, - 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, - 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, - 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, - 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x62, - 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0f, 0x20, 0x03, - 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, - 0x64, 0x73, 0x22, 0x24, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, + 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x19, 0x0a, 0x17, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5b, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, + 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x49, 0x64, 0x22, 0x19, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0xb4, 0x01, + 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x23, + 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x5d, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, + 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x2e, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x22, 0x35, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x69, 0x7a, + 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0d, 0x52, 0x06, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x73, 0x22, 0x32, 0x0a, 0x19, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x22, 0x2c, + 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, + 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x41, 0x0a, 0x16, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x79, + 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, + 0x48, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, + 0x74, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xe6, 0x03, 0x0a, 0x11, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, + 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, + 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x23, + 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, + 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x75, 0x69, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x67, + 0x69, 0x64, 0x22, 0x24, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x8b, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, @@ -23005,7 +23638,7 @@ var file_config_service_proto_rawDesc = []byte{ 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x22, 0xe3, 0x03, 0x0a, 0x17, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, + 0x22, 0x87, 0x04, 0x0a, 0x17, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, @@ -23017,7 +23650,7 @@ var file_config_service_proto_rawDesc = []byte{ 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, - 0x49, 0x64, 0x73, 0x1a, 0xa0, 0x02, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, + 0x49, 0x64, 0x73, 0x1a, 0xc4, 0x02, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, @@ -23035,308 +23668,317 @@ var file_config_service_proto_rawDesc = []byte{ 0x09, 0x52, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6d, 0x64, 0x35, 0x22, 0x2c, 0x0a, 0x18, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, - 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, - 0x03, 0x69, 0x64, 0x73, 0x22, 0xf6, 0x02, 0x0a, 0x21, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, + 0x09, 0x52, 0x03, 0x6d, 0x64, 0x35, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x67, 0x69, 0x64, 0x22, 0x2c, 0x0a, 0x18, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x9a, 0x03, 0x0a, 0x21, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, + 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, + 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x70, 0x70, 0x49, + 0x64, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6e, + 0x6f, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6e, 0x6f, 0x53, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, + 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, + 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x03, 0x67, 0x69, 0x64, 0x22, 0x36, 0x0a, 0x22, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x49, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, - 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, - 0x6c, 0x65, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x70, 0x70, 0x49, 0x64, 0x73, 0x12, 0x2f, - 0x0a, 0x13, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x6f, 0x5f, 0x73, 0x65, - 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0e, 0x6e, 0x6f, 0x53, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0x36, 0x0a, - 0x22, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, - 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0xaa, 0x02, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x54, 0x6d, 0x70, - 0x6c, 0x73, 0x54, 0x6f, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, - 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, - 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, - 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x6f, 0x5f, 0x73, - 0x65, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0e, 0x6e, 0x6f, 0x53, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x54, 0x6f, - 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x87, 0x02, 0x0a, - 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x46, 0x72, 0x6f, 0x6d, - 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, - 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x28, - 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, - 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x65, - 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, - 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, - 0x6e, 0x6f, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6e, 0x6f, 0x53, 0x65, 0x74, 0x53, 0x70, 0x65, - 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x22, 0x40, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x22, 0xe3, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0xc4, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x69, + 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0xaa, 0x02, + 0x0a, 0x15, 0x41, 0x64, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x54, 0x6f, 0x54, 0x6d, 0x70, 0x6c, + 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, + 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, + 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x28, 0x0a, + 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x63, 0x6c, 0x75, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, + 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x6f, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6e, 0x6f, 0x53, 0x65, + 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x41, 0x64, + 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x54, 0x6f, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x87, 0x02, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, + 0x6d, 0x70, 0x6c, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, - 0x52, 0x65, 0x71, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, - 0x2e, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, - 0xd2, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, - 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x7d, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x30, 0x0a, - 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, - 0x43, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, - 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x61, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x9a, 0x02, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, - 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, - 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x5e, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, - 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, - 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x22, 0x60, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x26, - 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x22, 0xec, 0x01, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x47, 0x0a, 0x07, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x7f, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x30, - 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, + 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, + 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x49, 0x64, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x6f, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x73, + 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, + 0x6e, 0x6f, 0x53, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x22, 0x40, + 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, + 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, + 0x22, 0x48, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xe3, 0x01, 0x0a, 0x18, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x42, + 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, + 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, + 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, + 0x22, 0xc4, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, + 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x37, + 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x2e, 0x49, 0x74, 0x65, 0x6d, + 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x2e, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0xd2, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x7d, 0x0a, + 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x30, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x08, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x61, 0x0a, 0x19, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x12, 0x43, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, - 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xad, 0x03, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, - 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, - 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, - 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, - 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, - 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, - 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, - 0x65, 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, - 0x6c, 0x65, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x2c, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x22, 0xdf, 0x03, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, - 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, - 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, - 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, - 0x69, 0x7a, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x2c, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x22, 0x84, 0x02, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, - 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, + 0x9a, 0x02, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, + 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, + 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x63, 0x0a, 0x19, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, - 0x75, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, + 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x5e, 0x0a, 0x16, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x60, 0x0a, 0x1f, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, + 0x41, 0x6e, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, + 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x22, 0xec, + 0x01, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x47, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x7f, 0x0a, 0x06, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x30, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x08, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xad, 0x03, + 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, + 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, + 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, + 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, + 0x73, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, + 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, + 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x73, 0x69, 0x67, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x67, 0x6e, + 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x2c, 0x0a, + 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x83, 0x04, 0x0a, 0x19, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, - 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, - 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x89, 0x05, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x46, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x1a, 0xa5, 0x04, 0x0a, 0x10, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, + 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, + 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, + 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, + 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, + 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, + 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, + 0x67, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x12, 0x1b, + 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, + 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x67, 0x69, + 0x64, 0x22, 0x2c, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, + 0x84, 0x02, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, + 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x34, 0x0a, 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, - 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x5f, 0x61, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x41, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6d, 0x64, 0x35, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, - 0x73, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, - 0x73, 0x74, 0x22, 0xb1, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x63, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, + 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x75, 0x0a, 0x16, 0x47, + 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, + 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0xad, 0x05, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, + 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x06, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x1a, 0xc9, 0x04, 0x0a, 0x10, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x16, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, + 0x6d, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x75, 0x73, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, + 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, + 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, + 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, + 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x64, + 0x35, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x11, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x75, 0x69, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x67, + 0x69, 0x64, 0x22, 0xb1, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, @@ -24583,7 +25225,7 @@ var file_config_service_proto_rawDesc = []byte{ 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x49, 0x64, 0x22, 0xa3, 0x09, 0x0a, 0x1e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, + 0x70, 0x70, 0x49, 0x64, 0x22, 0xd9, 0x09, 0x0a, 0x1e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x68, 0x0a, 0x14, 0x6e, 0x6f, 0x6e, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, @@ -24614,7 +25256,7 @@ var file_config_service_proto_rawDesc = []byte{ 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x64, 0x35, 0x1a, 0xae, 0x05, 0x0a, 0x0e, 0x54, 0x65, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x64, 0x35, 0x1a, 0xe4, 0x05, 0x0a, 0x0e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, @@ -24645,7 +25287,7 @@ var file_config_service_proto_rawDesc = []byte{ 0x73, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x73, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x73, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0xc2, 0x01, 0x0a, 0x16, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0xf8, 0x01, 0x0a, 0x16, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, @@ -24657,1768 +25299,1866 @@ var file_config_service_proto_rawDesc = []byte{ 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x15, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, - 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, - 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x49, 0x64, 0x22, 0xaf, 0x02, 0x0a, 0x16, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, - 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x35, - 0x0a, 0x05, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, - 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4b, 0x76, 0x52, 0x05, - 0x65, 0x78, 0x69, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x09, 0x6e, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x69, - 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4b, 0x76, 0x52, 0x08, 0x6e, 0x6f, 0x6e, 0x45, 0x78, - 0x69, 0x73, 0x74, 0x1a, 0x9f, 0x01, 0x0a, 0x02, 0x4b, 0x76, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, - 0x6b, 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, - 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, - 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, - 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65, - 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x48, - 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x53, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x43, 0x49, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, - 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x8f, 0x01, 0x0a, 0x24, 0x47, + 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x65, + 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0x86, 0x01, 0x0a, 0x15, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, + 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, + 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6f, 0x74, 0x68, 0x65, 0x72, + 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6f, + 0x74, 0x68, 0x65, 0x72, 0x41, 0x70, 0x70, 0x49, 0x64, 0x22, 0xaf, 0x02, 0x0a, 0x16, 0x43, 0x6f, + 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x35, 0x0a, 0x05, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, + 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x2e, 0x4b, 0x76, 0x52, 0x05, 0x65, 0x78, 0x69, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x09, 0x6e, + 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, + 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4b, 0x76, 0x52, + 0x08, 0x6e, 0x6f, 0x6e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x1a, 0x9f, 0x01, 0x0a, 0x02, 0x4b, 0x76, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x53, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x49, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, - 0x65, 0x6d, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x3b, 0x0a, 0x1a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x17, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x82, 0xd6, 0x01, - 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6e, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x41, 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, 0x38, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, + 0x22, 0x8f, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x49, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x1a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x17, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x22, 0xe2, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, + 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x67, 0x69, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x69, + 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, + 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, + 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x2a, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x02, 0x69, 0x64, 0x22, 0xc3, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, + 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xf2, 0x01, 0x0a, 0x16, 0x4c, 0x69, + 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, + 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x82, 0x01, 0x0a, 0x06, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x70, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x83, + 0x01, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, + 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, + 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, + 0x63, 0x65, 0x49, 0x64, 0x22, 0x1a, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, + 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x32, 0x80, 0xdb, 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6e, 0x0a, 0x09, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x71, 0x0a, 0x09, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x0a, 0x2e, + 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, 0x70, 0x70, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x3e, 0x3a, 0x01, 0x2a, 0x1a, 0x39, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2f, + 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, + 0x77, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, + 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, + 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x2a, 0x39, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x58, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, + 0x70, 0x70, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, + 0x52, 0x65, 0x71, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, 0x70, 0x70, 0x22, + 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x12, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, + 0x64, 0x7d, 0x12, 0x71, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, + 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, + 0x70, 0x2e, 0x41, 0x70, 0x70, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x12, 0x36, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, + 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x63, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, + 0x73, 0x52, 0x65, 0x73, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x12, 0x7c, 0x0a, 0x13, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x42, 0x79, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, + 0x74, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, + 0x73, 0x42, 0x79, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, + 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x71, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x41, 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, - 0x70, 0x2e, 0x41, 0x70, 0x70, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x3a, 0x01, 0x2a, - 0x1a, 0x39, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x2f, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x77, 0x0a, 0x09, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x2a, 0x39, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x58, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x12, 0x0f, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, - 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, 0x70, 0x70, 0x22, 0x31, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2b, 0x12, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x71, - 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x15, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x79, 0x4e, 0x61, - 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, 0x70, - 0x70, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x12, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x12, 0x63, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, - 0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, - 0x73, 0x52, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x28, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x12, 0x7c, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, - 0x70, 0x73, 0x42, 0x79, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x42, 0x79, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x61, 0x70, 0x70, - 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, - 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x58, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x3a, 0x01, 0x2a, 0x22, 0x4d, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x16, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, - 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, - 0x3a, 0x01, 0x2a, 0x1a, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0xb7, 0x01, 0x0a, 0x10, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, - 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, - 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x66, 0x3a, - 0x01, 0x2a, 0x1a, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x19, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x58, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x3a, 0x01, 0x2a, 0x22, + 0x4d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, + 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9e, + 0x01, 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x3b, 0x3a, 0x01, 0x2a, 0x1a, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, + 0xb7, 0x01, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x74, 0x65, 0x6d, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, + 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6c, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x66, 0x3a, 0x01, 0x2a, 0x1a, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, - 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, - 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xb4, 0x01, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x69, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x63, 0x2a, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x6d, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, + 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xb4, 0x01, 0x0a, 0x10, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x19, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x69, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x63, 0x2a, 0x61, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, - 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, - 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa1, 0x01, 0x0a, - 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x3a, 0x01, 0x2a, 0x22, 0x43, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x12, 0xbc, 0x01, 0x0a, 0x12, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, - 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, - 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, + 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, + 0x12, 0xa1, 0x01, 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, + 0x70, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x3a, 0x01, 0x2a, 0x22, + 0x43, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, + 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x12, 0xbc, 0x01, 0x0a, 0x12, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1b, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x65, 0x22, 0x63, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, + 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, + 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x7d, 0x12, 0xb5, 0x01, 0x0a, 0x17, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x6e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, + 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x65, 0x22, 0x63, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, 0x6e, 0x64, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, + 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x6e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x55, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x3a, 0x01, 0x2a, 0x22, + 0x4a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0xb5, 0x01, 0x0a, 0x17, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x20, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x55, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x3a, 0x01, 0x2a, 0x22, 0x4a, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, - 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x75, - 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x55, 0x6e, 0x64, 0x6f, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, - 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x67, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x61, 0x22, 0x5f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, 0x6e, 0x64, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x62, 0x61, 0x74, + 0x63, 0x68, 0x5f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xac, 0x01, 0x0a, 0x0e, + 0x55, 0x6e, 0x64, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x17, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, + 0x6e, 0x64, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x61, 0x22, 0x5f, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, 0x6e, 0x64, 0x6f, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, - 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, - 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x91, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, - 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x49, 0x12, 0x47, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, - 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xbf, 0x01, 0x0a, 0x15, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, - 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, - 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5f, 0x12, 0x5d, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, - 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, - 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x89, 0x01, 0x0a, - 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, - 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x3a, 0x01, 0x2a, - 0x22, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, - 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0xb4, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, - 0x74, 0x65, 0x6d, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x4e, 0x12, 0x4c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, + 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x91, 0x01, 0x0a, 0x0d, 0x47, + 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x12, 0x47, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x7b, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xbf, + 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x5f, 0x12, 0x5d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, - 0x8f, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, - 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x3a, 0x01, 0x2a, 0x22, - 0x30, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x12, 0xa1, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x1e, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, - 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, - 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x22, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2f, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, - 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, - 0x12, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x7d, + 0x12, 0x89, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, + 0x74, 0x65, 0x6d, 0x73, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x19, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x3b, 0x3a, 0x01, 0x2a, 0x22, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0xb4, 0x01, 0x0a, + 0x17, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x54, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x12, 0x4c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x12, 0x8f, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, + 0x3a, 0x01, 0x2a, 0x22, 0x30, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa1, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, + 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, + 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x22, 0x3c, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x2f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x0d, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x12, 0x16, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, + 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x51, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x12, + 0x93, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, + 0x4b, 0x76, 0x73, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x64, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, + 0x12, 0x43, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x12, 0x93, 0x01, 0x0a, 0x0f, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x73, 0x12, - 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x64, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x4b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, - 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, - 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x3a, 0x01, 0x2a, 0x1a, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, - 0x12, 0x92, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x3a, 0x01, 0x2a, 0x22, 0x45, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2f, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, - 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x79, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, - 0x12, 0x97, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, - 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, - 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x12, 0x4c, 0x2f, 0x61, + 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x6f, + 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x3a, 0x01, 0x2a, 0x1a, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, - 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x7e, 0x0a, 0x0a, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, - 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9c, 0x01, 0x0a, 0x10, 0x44, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, - 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x1a, 0x49, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, - 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, - 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x12, 0xa7, 0x01, 0x0a, 0x12, 0x55, 0x6e, - 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x56, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x50, 0x3a, 0x01, 0x2a, 0x1a, 0x4b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x6e, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, - 0x61, 0x74, 0x65, 0x12, 0x89, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x2a, 0x3f, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, - 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, - 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0x96, 0x01, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4b, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x65, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x3a, 0x01, 0x2a, 0x22, 0x21, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, - 0x6c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x13, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, - 0x2a, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x68, + 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x92, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x17, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x3a, + 0x01, 0x2a, 0x22, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, + 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x79, 0x0a, 0x0c, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, + 0x12, 0x32, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, + 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x73, 0x12, 0x97, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, + 0x65, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, + 0x12, 0x4c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, + 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x73, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x2f, + 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x7e, + 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x13, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, + 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, + 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, + 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9c, + 0x01, 0x0a, 0x10, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, + 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1a, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x4b, 0x1a, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x12, 0xa7, 0x01, + 0x0a, 0x12, 0x55, 0x6e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, + 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, + 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, 0x70, 0x72, 0x65, + 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x56, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x3a, 0x01, 0x2a, 0x1a, 0x4b, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, + 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x6e, 0x64, 0x65, + 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x12, 0x89, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, + 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x41, 0x2a, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, + 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x4b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x65, 0x0a, 0x0a, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, + 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x3a, 0x01, 0x2a, + 0x22, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, - 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x7d, 0x0a, - 0x0f, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, - 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x3a, 0x01, 0x2a, 0x22, 0x2e, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, - 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x6f, 0x0a, 0x0a, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, - 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, - 0x1a, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x6f, 0x6b, 0x73, 0x12, 0x6c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, + 0x6b, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x33, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2d, 0x2a, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, + 0x7d, 0x12, 0x7d, 0x0a, 0x0f, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x15, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x3a, 0x01, 0x2a, + 0x22, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, - 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x5f, 0x0a, - 0x09, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x13, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x12, 0x21, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x6c, - 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x73, 0x12, 0x15, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, - 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x2d, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x12, 0x63, 0x0a, 0x07, - 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, - 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x33, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6f, 0x6b, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x12, 0x6f, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x13, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x30, 0x3a, 0x01, 0x2a, 0x1a, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, - 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, + 0x7d, 0x12, 0x5f, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x12, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, + 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x12, + 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, + 0x6b, 0x73, 0x12, 0x6c, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, + 0x67, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, + 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x74, 0x61, 0x67, 0x73, + 0x12, 0x63, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x10, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, + 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x3a, + 0x01, 0x2a, 0x22, 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x90, + 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x42, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0xa1, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x3a, 0x01, 0x2a, 0x22, 0x3a, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, - 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, - 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, - 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x90, 0x01, 0x0a, 0x11, 0x4c, - 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x3c, 0x12, 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, - 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, - 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xa1, 0x01, - 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, - 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x2a, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x7d, 0x12, 0xac, 0x01, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x48, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x58, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x1a, 0x50, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x2a, 0x48, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, + 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xac, 0x01, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, + 0x68, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x48, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x58, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x52, 0x1a, 0x50, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, + 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x12, 0x91, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x12, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x12, 0x91, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, - 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x12, - 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x12, 0x48, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, - 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa4, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, - 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x3a, 0x01, - 0x2a, 0x1a, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, - 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, - 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x8f, 0x01, 0x0a, 0x12, - 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, - 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, - 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x12, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa4, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x4d, 0x3a, 0x01, 0x2a, 0x1a, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0xc4, 0x01, - 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x55, 0x12, - 0x53, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, - 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, - 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x73, 0x12, 0x92, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, - 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x47, 0x12, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x8a, 0x01, 0x0a, 0x13, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x36, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, + 0x8f, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x12, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x9b, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x41, 0x2a, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, + 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x12, 0xc4, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x12, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5b, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x55, 0x12, 0x53, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x92, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4d, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x12, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x8a, 0x01, + 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, + 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x9b, 0x01, 0x0a, 0x13, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, + 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x2a, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4a, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x3a, 0x01, 0x2a, 0x1a, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x84, 0x01, 0x0a, 0x12, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, + 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x33, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x70, + 0x12, 0x79, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x69, 0x7a, 0x73, 0x4f, 0x66, + 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x62, + 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x69, 0x7a, 0x73, 0x4f, 0x66, + 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x2b, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x69, 0x7a, 0x73, 0x12, 0x8e, 0x01, 0x0a, 0x16, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x6d, 0x70, + 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x6d, 0x70, 0x6c, + 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x96, 0x01, 0x0a, + 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, + 0x79, 0x49, 0x44, 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, + 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x3a, 0x01, 0x2a, 0x22, 0x37, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, + 0x79, 0x5f, 0x69, 0x64, 0x73, 0x12, 0x99, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x54, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x4e, 0x3a, 0x01, 0x2a, 0x22, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x12, 0xa4, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x59, 0x2a, + 0x57, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa5, 0x01, 0x0a, 0x13, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x51, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x2a, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x12, 0xa7, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4a, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x44, 0x3a, 0x01, 0x2a, 0x1a, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x84, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x70, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x62, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5c, 0x3a, 0x01, + 0x2a, 0x1a, 0x57, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x0d, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, - 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x79, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x69, 0x7a, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, - 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x69, 0x7a, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, - 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x25, 0x12, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x62, 0x69, 0x7a, 0x73, 0x12, 0x8e, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, - 0x22, 0x26, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x96, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, - 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, - 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x42, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x3a, 0x01, 0x2a, 0x22, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x59, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x53, 0x3a, 0x01, 0x2a, 0x22, 0x4e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x69, 0x64, - 0x73, 0x12, 0x99, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x3a, - 0x01, 0x2a, 0x22, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0xa4, 0x01, - 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x5f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x59, 0x2a, 0x57, 0x2f, 0x61, 0x70, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0xc2, 0x01, 0x0a, 0x14, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, + 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, + 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x65, 0x3a, 0x01, 0x2a, 0x22, 0x60, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa5, 0x01, 0x0a, 0x13, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x4b, 0x2a, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x75, 0x70, 0x73, + 0x65, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x8e, 0x02, + 0x0a, 0x1e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x98, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x91, 0x01, 0x3a, 0x01, 0x2a, + 0x22, 0x8b, 0x01, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0xa7, 0x01, 0x0a, - 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, - 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x62, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5c, 0x3a, 0x01, 0x2a, 0x1a, 0x57, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, - 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x59, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x53, 0x3a, 0x01, 0x2a, 0x22, 0x4e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, - 0x6c, 0x69, 0x73, 0x74, 0x12, 0xc2, 0x01, 0x0a, 0x14, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x1d, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x65, 0x3a, 0x01, 0x2a, 0x22, 0x60, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x5f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x8e, 0x02, 0x0a, 0x1e, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x98, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x91, 0x01, 0x3a, 0x01, 0x2a, 0x22, 0x8b, 0x01, 0x2f, + 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x2f, + 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, + 0x68, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xdb, + 0x01, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x54, 0x6f, 0x54, 0x6d, 0x70, + 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x41, 0x64, 0x64, + 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x54, 0x6f, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x6d, 0x70, + 0x6c, 0x73, 0x54, 0x6f, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x89, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x82, 0x01, 0x3a, 0x01, 0x2a, 0x22, 0x7d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x5f, 0x70, - 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xdb, 0x01, 0x0a, 0x12, 0x41, - 0x64, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x54, 0x6f, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, - 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x6d, 0x70, 0x6c, - 0x73, 0x54, 0x6f, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x54, 0x6f, - 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x89, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x82, 0x01, 0x3a, 0x01, 0x2a, 0x22, 0x7d, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x2f, 0x61, 0x64, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x12, 0xc2, 0x01, 0x0a, 0x17, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x6d, 0x70, 0x6c, - 0x53, 0x65, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x6d, 0x70, 0x6c, 0x53, - 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x68, 0x3a, 0x01, 0x2a, 0x22, 0x63, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x12, 0x8d, 0x01, - 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, - 0x79, 0x49, 0x44, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, - 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x01, 0x2a, 0x22, 0x31, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x69, 0x64, 0x73, 0x12, 0xba, 0x01, - 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x4e, - 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x22, 0x60, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5a, - 0x12, 0x58, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, - 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0xae, 0x01, 0x0a, 0x13, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, - 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, - 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, 0x3a, 0x01, 0x2a, 0x22, 0x4f, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x12, 0xc5, 0x01, 0x0a, 0x12, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, - 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, - 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, - 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, - 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x74, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x6e, 0x3a, 0x01, 0x2a, 0x22, 0x69, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x12, 0xc5, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x56, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x12, 0x4e, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xd2, 0x01, 0x0a, 0x16, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x75, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x6f, 0x3a, 0x01, 0x2a, 0x22, 0x6a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x61, 0x64, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x12, 0xc2, 0x01, 0x0a, + 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x46, 0x72, 0x6f, 0x6d, + 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x54, + 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x68, 0x3a, 0x01, 0x2a, 0x22, 0x63, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x66, + 0x72, 0x6f, 0x6d, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, + 0x73, 0x12, 0x8d, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, + 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x01, 0x2a, 0x22, 0x31, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, + 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x69, 0x64, + 0x73, 0x12, 0xba, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1e, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x4e, 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x4e, 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x22, 0x60, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x5a, 0x12, 0x58, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, - 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0xd2, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x75, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6f, 0x3a, 0x01, 0x2a, 0x1a, 0x6a, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xcc, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, - 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6c, 0x12, 0x6a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0xae, + 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, + 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, 0x3a, 0x01, 0x2a, 0x22, 0x4f, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, + 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x12, + 0xc5, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, + 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6e, 0x3a, 0x01, 0x2a, 0x22, 0x69, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0xc5, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, + 0x41, 0x6e, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x26, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x56, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x12, + 0x4e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0xd2, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x75, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x6f, 0x3a, 0x01, 0x2a, 0x22, 0x6a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xa2, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x48, 0x12, 0x46, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xd2, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x75, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6f, 0x3a, 0x01, 0x2a, 0x1a, 0x6a, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, + 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xae, 0x01, 0x0a, 0x1a, 0x4c, 0x69, + 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xcc, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x3a, 0x01, 0x2a, 0x22, 0x3a, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, - 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, - 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x69, 0x64, 0x73, 0x12, 0xc9, 0x01, 0x0a, 0x1e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x12, 0x27, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, - 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x3a, 0x01, 0x2a, 0x22, 0x49, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x12, 0xa6, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x70, + 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6c, 0x12, 0x6a, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xa2, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1d, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4e, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x12, 0x46, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xae, 0x01, + 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x23, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, + 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x3a, + 0x01, 0x2a, 0x22, 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x69, 0x64, 0x73, 0x12, 0xc9, + 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, + 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, + 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, + 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x3a, 0x01, 0x2a, 0x22, + 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x12, 0xa6, 0x01, 0x0a, 0x11, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, + 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x58, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x3a, 0x01, 0x2a, - 0x22, 0x4d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x12, - 0xb5, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, + 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x58, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x52, 0x3a, 0x01, 0x2a, 0x22, 0x4d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x65, 0x74, 0x73, 0x12, 0xb5, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x67, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x61, 0x2a, 0x5f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xb8, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x12, 0x1a, 0x2e, + 0x73, 0x70, 0x22, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x61, 0x2a, 0x5f, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xb8, 0x01, 0x0a, 0x11, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x64, 0x3a, 0x01, - 0x2a, 0x1a, 0x5f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, - 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, - 0x64, 0x7d, 0x12, 0xa0, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x55, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x12, 0x4d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6a, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x64, 0x3a, 0x01, 0x2a, 0x1a, 0x5f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa0, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x55, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x12, 0x4d, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x12, 0x93, 0x01, 0x0a, 0x13, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, + 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3f, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x65, 0x74, 0x73, 0x12, 0x93, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, - 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x12, 0x1c, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x39, 0x12, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x15, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, - 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, - 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, - 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x3a, 0x01, - 0x2a, 0x22, 0x35, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x6c, 0x69, 0x73, - 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x69, 0x64, 0x73, 0x12, 0x8f, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x12, 0x1a, + 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x12, + 0x9a, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, + 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, + 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x3a, 0x3a, 0x01, 0x2a, 0x22, 0x35, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, + 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x69, 0x64, 0x73, 0x12, 0x8f, 0x01, 0x0a, + 0x11, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, + 0x69, 0x7a, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, + 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, - 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, - 0x42, 0x69, 0x7a, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x12, - 0x39, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, - 0x61, 0x6c, 0x6c, 0x5f, 0x6f, 0x66, 0x5f, 0x62, 0x69, 0x7a, 0x12, 0xa9, 0x01, 0x0a, 0x18, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x3b, 0x12, 0x39, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x6c, + 0x69, 0x73, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x6f, 0x66, 0x5f, 0x62, 0x69, 0x7a, 0x12, 0xa9, + 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x22, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x3a, 0x01, 0x2a, 0x22, 0x3b, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, + 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, + 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xb3, 0x01, 0x0a, 0x18, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x22, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x46, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x3a, 0x01, 0x2a, 0x22, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xb3, 0x01, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x4a, 0x2a, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x50, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x2a, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x7d, + 0x12, 0xb6, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, + 0x1a, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, + 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x3a, 0x01, 0x2a, 0x1a, + 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, + 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x62, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x17, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x3d, 0x12, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, - 0x7b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xb6, 0x01, 0x0a, - 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x22, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x3a, 0x01, 0x2a, 0x1a, 0x48, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, - 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, + 0xaa, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, + 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xaa, 0x01, 0x0a, 0x19, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, - 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, - 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xd8, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, + 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xd8, 0x01, 0x0a, + 0x21, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x2a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, + 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2b, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5a, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x54, 0x12, 0x52, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xe9, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, + 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, 0x12, - 0x52, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, - 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0xe9, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x1a, 0x29, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x71, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x6b, 0x12, 0x69, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0xd2, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x66, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x60, 0x3a, 0x01, 0x2a, 0x1a, 0x5b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xbb, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, - 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, - 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, - 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x5e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x58, 0x2a, 0x56, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, - 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, - 0x74, 0x73, 0x12, 0xaa, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x2a, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x2f, 0x7b, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0xb5, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x20, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x55, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x3a, 0x01, 0x2a, 0x22, 0x4a, 0x2f, 0x61, 0x70, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6b, 0x12, 0x69, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x7d, 0x12, 0xd2, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, + 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, + 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x66, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x60, 0x3a, 0x01, 0x2a, 0x1a, 0x5b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, - 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0xc3, 0x01, 0x0a, 0x1a, 0x49, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x74, 0x54, 0x6f, 0x41, 0x70, 0x70, 0x12, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x49, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x74, 0x54, 0x6f, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, 0x3a, 0x01, 0x2a, 0x22, 0x4f, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x12, 0xb5, 0x01, - 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5b, 0x3a, 0x01, 0x2a, 0x22, 0x56, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, - 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0xef, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, - 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x82, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7c, 0x3a, 0x01, 0x2a, 0x22, 0x77, + 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xbb, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, + 0x65, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x58, 0x2a, 0x56, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, - 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0xc2, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, - 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5f, 0x3a, 0x01, 0x2a, - 0x22, 0x5a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0xdc, 0x01, 0x0a, - 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, - 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, - 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x22, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x73, 0x12, 0x71, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, - 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xd4, 0x01, 0x0a, 0x16, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, - 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, - 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x77, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x71, 0x12, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, + 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x62, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x12, 0xaa, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, + 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, + 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, + 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x2a, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, + 0x74, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, + 0x69, 0x64, 0x7d, 0x12, 0xb5, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, + 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, + 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x55, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x3a, 0x01, 0x2a, 0x22, + 0x4a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, + 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x6c, 0x69, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0xc3, 0x01, 0x0a, 0x1a, + 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x41, 0x70, 0x70, 0x12, 0x23, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, + 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x6f, + 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x41, 0x70, + 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, 0x3a, 0x01, 0x2a, + 0x22, 0x4f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, + 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x69, 0x6d, + 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, + 0x74, 0x12, 0xb5, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5b, 0x3a, 0x01, + 0x2a, 0x22, 0x56, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x12, 0xd4, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x1e, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7a, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x12, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0xef, 0x01, 0x0a, 0x1b, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x25, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x82, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7c, 0x3a, + 0x01, 0x2a, 0x22, 0x77, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0xc2, 0x01, 0x0a, 0x16, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x5f, 0x3a, 0x01, 0x2a, 0x22, 0x5a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x65, 0x74, 0x73, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x12, 0xdc, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x21, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, + 0x1a, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x73, 0x12, 0x71, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x75, 0x6e, 0x6e, 0x61, + 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, + 0xd4, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, + 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, + 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x77, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x12, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, - 0x74, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xd5, 0x01, 0x0a, 0x1a, 0x4c, 0x69, - 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, - 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, - 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x66, 0x12, 0x64, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x12, 0xa1, 0x02, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, - 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x29, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, - 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, - 0x71, 0x1a, 0x2a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, - 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, - 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa5, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x9e, 0x01, 0x12, 0x9b, 0x01, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x5f, 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x99, 0x02, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, - 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, - 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, - 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, - 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, - 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa3, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x9c, 0x01, 0x12, 0x99, 0x01, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x12, 0xee, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, - 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, - 0x73, 0x12, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, - 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, - 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x81, - 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7b, 0x12, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x75, - 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x12, 0xea, 0x01, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, - 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x29, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, - 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6f, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x69, 0x12, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x75, 0x6e, 0x6e, 0x61, - 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, - 0xf0, 0x01, 0x0a, 0x1e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x70, - 0x70, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x75, 0x3a, 0x01, 0x2a, - 0x22, 0x70, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x65, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x5f, 0x61, 0x70, - 0x70, 0x73, 0x12, 0xe5, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, - 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, - 0x12, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, - 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, - 0x73, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, - 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x79, 0x12, 0x77, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, - 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, - 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xf6, 0x01, 0x0a, 0x1e, 0x4c, - 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x27, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, - 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, - 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7a, 0x12, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xd4, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, + 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x7a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x12, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, - 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1f, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x3a, 0x01, 0x2a, 0x22, 0x2e, 0x2f, 0x61, + 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xd5, 0x01, + 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, + 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x23, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, + 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, + 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, + 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x66, 0x12, + 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xa1, 0x02, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, + 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, + 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x29, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, + 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x22, 0xa5, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x9e, 0x01, 0x12, 0x9b, 0x01, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0xaa, 0x01, 0x0a, - 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x47, 0x2a, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x1b, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x69, 0x7a, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x3a, 0x01, 0x2a, 0x22, 0x3b, 0x2f, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, + 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x99, 0x02, 0x0a, 0x1e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x27, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, + 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, + 0xa3, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x9c, 0x01, 0x12, 0x99, 0x01, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xee, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, + 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, + 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, + 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x81, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7b, 0x12, 0x79, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x5f, 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xea, 0x01, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x29, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, + 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x69, 0x12, 0x67, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, + 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x12, 0xf0, 0x01, 0x0a, 0x1e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x28, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7b, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x75, 0x3a, 0x01, 0x2a, 0x22, 0x70, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x65, 0x74, 0x73, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x12, 0xe5, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, + 0x41, 0x70, 0x70, 0x73, 0x12, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, + 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x79, 0x12, 0x77, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xf6, + 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, 0x70, + 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, + 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, + 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7a, 0x12, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x62, 0x61, - 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xad, 0x01, 0x0a, 0x16, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, - 0x3a, 0x01, 0x2a, 0x1a, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x90, 0x01, 0x0a, 0x15, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x5f, 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x12, 0x2e, 0x2f, + 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x3a, 0x01, 0x2a, + 0x22, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x12, 0xaa, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4d, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x2a, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01, + 0x0a, 0x1b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x20, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x42, 0x69, 0x7a, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x3a, 0x01, + 0x2a, 0x22, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xad, + 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x4a, 0x3a, 0x01, 0x2a, 0x1a, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x90, + 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x30, 0x12, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x12, 0xa0, 0x01, 0x0a, 0x17, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x3a, 0x01, 0x2a, 0x22, 0x35, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0xa0, 0x01, - 0x0a, 0x17, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x40, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x3a, 0x01, 0x2a, 0x22, 0x35, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x12, 0xac, 0x01, 0x0a, 0x17, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, - 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, - 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, - 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x12, 0x44, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6d, + 0x70, 0x6f, 0x72, 0x74, 0x12, 0xac, 0x01, 0x0a, 0x17, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, + 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, + 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, + 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x12, 0x44, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, + 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, + 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, + 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x12, 0xac, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, + 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x12, 0x1f, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, + 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x4f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x12, 0x47, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, - 0xac, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x12, 0x47, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0xda, - 0x01, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, - 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, - 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, - 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5f, 0x12, 0x5d, 0x2f, 0x61, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x12, 0xda, 0x01, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x66, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5f, + 0x12, 0x5d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, + 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, + 0xa4, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, + 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x1a, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x9b, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, + 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, + 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1e, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, + 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x44, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x12, 0xc9, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, + 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, 0x12, 0x52, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0xa4, 0x01, 0x0a, 0x16, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x41, 0x3a, 0x01, 0x2a, 0x1a, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x12, 0x9b, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, - 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x3e, 0x12, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x12, 0xc9, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x12, 0x25, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, - 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, 0x12, 0x52, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x12, 0x69, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, + 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, 0x2d, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x22, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x71, 0x0a, 0x0b, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, + 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x2a, + 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x88, + 0x01, 0x0a, 0x11, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3a, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x3a, 0x01, 0x2a, 0x22, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x0b, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, - 0x3a, 0x01, 0x2a, 0x22, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x71, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x2a, 0x2d, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, - 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x88, 0x01, 0x0a, 0x11, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x34, 0x3a, 0x01, 0x2a, 0x22, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x74, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x1a, 0x2d, 0x2f, 0x61, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x62, 0x61, 0x74, + 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x74, 0x0a, 0x0b, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x15, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, + 0x1a, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, + 0x6c, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x7a, 0x0a, + 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x16, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x9d, 0x01, 0x0a, 0x15, 0x4c, 0x69, + 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, + 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x6c, 0x0a, 0x0d, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x16, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x2a, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x7a, 0x0a, 0x0d, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, - 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x38, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x9d, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, - 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, - 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, - 0x5f, 0x61, 0x70, 0x70, 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, - 0x71, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x22, 0x51, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x42, 0x4b, 0x41, 0x50, 0x49, - 0x47, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xb1, 0x01, 0x0a, 0x07, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x12, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, - 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x22, 0x80, 0x01, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, - 0x42, 0x4b, 0x41, 0x50, 0x49, 0x47, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6b, 0x3a, 0x01, 0x2a, - 0x22, 0x66, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, - 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, - 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x90, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, 0x6e, 0x64, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, 0x6e, 0x64, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3c, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x01, 0x2a, 0x22, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x81, 0x01, 0x0a, 0x11, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, - 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x0e, 0x47, 0x65, + 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x51, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x42, + 0x4b, 0x41, 0x50, 0x49, 0x47, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xb1, 0x01, 0x0a, 0x07, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x22, 0x80, 0x01, 0xfa, 0xd2, 0xe4, 0x93, + 0x02, 0x09, 0x12, 0x07, 0x42, 0x4b, 0x41, 0x50, 0x49, 0x47, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x6b, 0x3a, 0x01, 0x2a, 0x22, 0x66, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x74, 0x72, 0x61, + 0x74, 0x65, 0x67, 0x79, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x2f, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x2f, + 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x90, 0x01, 0x0a, + 0x19, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x41, 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x22, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x41, 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x11, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x01, 0x2a, 0x22, 0x31, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, + 0x81, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, + 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x22, 0x35, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x73, 0x12, 0x7a, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, + 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x32, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, - 0x7a, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x73, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, - 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x7e, 0x0a, 0x10, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, - 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, - 0x2a, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x81, 0x01, 0x0a, 0x10, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x2e, 0x3a, 0x01, 0x2a, 0x1a, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x7e, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x31, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2b, 0x2a, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, - 0x9d, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, - 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x12, 0x41, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, - 0x9f, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, - 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, - 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x48, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x12, - 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x63, 0x6f, 0x70, 0x65, - 0x73, 0x12, 0xa4, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x1e, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4a, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x44, 0x3a, 0x01, 0x2a, 0x1a, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x9c, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, 0x72, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, 0x72, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2f, - 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x6b, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x4b, 0x76, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x81, 0x01, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, + 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x34, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x3a, 0x01, 0x2a, 0x1a, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x12, 0x9d, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, + 0x12, 0x41, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x7b, 0x63, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x12, 0x9f, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x48, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x42, 0x12, 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x7b, + 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0xa4, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, + 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x71, 0x1a, + 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x4a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x3a, 0x01, 0x2a, 0x1a, 0x3f, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x9c, 0x01, 0x0a, + 0x16, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, + 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, 0x72, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, + 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x39, 0x12, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x73, 0x63, + 0x6f, 0x70, 0x65, 0x2f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x6b, 0x0a, 0x08, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x38, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x12, 0x71, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x4b, 0x76, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3e, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x38, 0x3a, 0x01, 0x2a, 0x1a, 0x33, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x12, 0x6d, 0x0a, 0x07, 0x4c, + 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3d, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x37, 0x3a, 0x01, 0x2a, 0x22, 0x32, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x6d, 0x0a, 0x08, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3a, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x2a, 0x32, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x6b, 0x76, 0x73, 0x12, 0x71, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x76, - 0x12, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x76, - 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x3a, - 0x01, 0x2a, 0x1a, 0x33, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, - 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x12, 0x6d, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x4b, - 0x76, 0x73, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, - 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x3a, - 0x01, 0x2a, 0x22, 0x32, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, - 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x6d, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4b, 0x76, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x34, 0x2a, 0x32, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, - 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8f, 0x01, 0x0a, 0x0d, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x3a, 0x01, 0x2a, 0x22, 0x3a, 0x2f, 0x61, 0x70, + 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8f, 0x01, 0x0a, 0x0d, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x20, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, + 0x70, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x3a, 0x01, 0x2a, 0x22, + 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, + 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x62, + 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x7d, 0x0a, 0x0e, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x12, 0x17, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, + 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x1a, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, - 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x7d, 0x0a, 0x0e, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, - 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x38, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x1a, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x12, 0x7d, 0x0a, 0x0a, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x4b, 0x76, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x22, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x2f, 0x75, 0x6e, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x0f, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, - 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, - 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x22, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x75, - 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x6d, 0x0a, 0x06, 0x55, 0x6e, 0x64, 0x6f, 0x4b, - 0x76, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x52, - 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x22, 0x38, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, - 0x7d, 0x2f, 0x75, 0x6e, 0x64, 0x6f, 0x12, 0x7e, 0x0a, 0x09, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x4b, 0x76, 0x73, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x49, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x48, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x42, 0x3a, 0x01, 0x2a, 0x22, 0x3d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x7d, 0x2f, - 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x78, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x01, 0x2a, 0x22, 0x31, 0x2f, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x12, 0x7d, 0x0a, 0x0a, 0x55, 0x6e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x22, 0x3c, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, + 0x2f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x0f, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x18, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x22, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, - 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x99, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4e, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x48, 0x3a, 0x01, 0x2a, 0x22, 0x43, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x2f, 0x7b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x81, 0x01, 0x0a, - 0x0c, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x15, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x74, 0x72, - 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x42, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x3c, 0x3a, 0x01, 0x2a, 0x22, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x74, 0x72, 0x79, - 0x12, 0x8a, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3f, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x12, 0x90, 0x01, - 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, - 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x42, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x3c, 0x3a, 0x01, 0x2a, 0x22, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, - 0x12, 0x95, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, + 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x62, 0x61, 0x74, + 0x63, 0x68, 0x5f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x6d, 0x0a, 0x06, 0x55, + 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x64, + 0x6f, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, + 0x64, 0x6f, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, + 0x22, 0x38, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, + 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, + 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x2f, 0x75, 0x6e, 0x64, 0x6f, 0x12, 0x7e, 0x0a, 0x09, 0x49, 0x6d, + 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x49, + 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x48, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x3a, 0x01, 0x2a, 0x22, 0x3d, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x7d, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x78, 0x0a, 0x0b, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x01, + 0x2a, 0x22, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, + 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x99, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x3a, 0x01, 0x2a, 0x22, 0x43, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, + 0x12, 0x81, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x73, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x3a, 0x01, 0x2a, 0x22, 0x37, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x72, + 0x65, 0x74, 0x72, 0x79, 0x12, 0x8a, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x73, 0x12, 0x90, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x3a, 0x01, 0x2a, 0x22, 0x37, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x73, 0x12, 0x95, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x1a, 0x3c, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, - 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x2a, - 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, - 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa3, 0x01, - 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, - 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x12, 0x44, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, - 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, - 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x65, 0x78, 0x69, - 0x73, 0x74, 0x73, 0x12, 0xab, 0x01, 0x0a, 0x1d, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x56, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x50, 0x3a, 0x01, 0x2a, 0x22, 0x4b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, - 0x73, 0x12, 0xa3, 0x01, 0x0a, 0x19, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x6c, 0x6c, - 0x54, 0x72, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, - 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x3a, 0x01, 0x2a, 0x22, 0x47, + 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x1a, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x73, 0x2f, 0x70, 0x75, 0x6c, 0x6c, 0x5f, 0x74, 0x72, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, + 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1b, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x44, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x3e, 0x2a, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x46, 0x12, 0x44, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, + 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0xab, 0x01, 0x0a, 0x1d, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x56, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x3a, 0x01, 0x2a, 0x22, 0x4b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, + 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0xa3, 0x01, 0x0a, 0x19, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x50, 0x75, 0x6c, 0x6c, 0x54, 0x72, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x3a, + 0x01, 0x2a, 0x22, 0x47, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x75, 0x6c, 0x6c, 0x5f, 0x74, 0x72, 0x65, 0x6e, 0x64, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x14, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, + 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, + 0x3a, 0x01, 0x2a, 0x22, 0x41, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x15, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x3a, 0x01, 0x2a, 0x22, - 0x41, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x72, 0x75, 0x63, 0x74, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x3a, 0x01, 0x2a, 0x22, + 0x42, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x73, 0x2f, 0x70, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, - 0x63, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x15, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, - 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x3a, 0x01, 0x2a, 0x22, 0x42, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, - 0xa4, 0x01, 0x0a, 0x1a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, - 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x3a, 0x01, 0x2a, 0x22, 0x47, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, - 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, - 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, - 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x9e, 0x01, 0x0a, 0x17, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, + 0x74, 0x73, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x12, 0xa4, 0x01, 0x0a, 0x1a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x4f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x3a, 0x01, - 0x2a, 0x22, 0x44, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x3a, 0x01, + 0x2a, 0x22, 0x47, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0xb3, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x6e, 0x64, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x9e, 0x01, 0x0a, 0x17, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x4f, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x49, 0x3a, 0x01, 0x2a, 0x22, 0x44, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0xb3, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, - 0x6e, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, - 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, - 0x3a, 0x01, 0x2a, 0x22, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x5f, 0x61, 0x6e, - 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xa5, 0x01, - 0x0a, 0x1a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, - 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x2e, 0x70, - 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x3a, 0x01, 0x2a, 0x22, 0x48, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x73, - 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0xb9, 0x01, 0x0a, 0x1a, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, - 0x69, 0x63, 0x74, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, - 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, - 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, - 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x12, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x6e, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x41, 0x6e, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x53, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x4d, 0x3a, 0x01, 0x2a, 0x22, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2f, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, - 0x73, 0x12, 0x98, 0x01, 0x0a, 0x12, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, - 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x61, 0x70, + 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0xa5, 0x01, 0x0a, 0x1a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x63, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x3a, 0x01, 0x2a, 0x22, + 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, + 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x73, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x5f, 0x66, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0xb9, 0x01, 0x0a, 0x1a, 0x43, 0x6f, + 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, + 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x12, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0xc2, 0x01, 0x0a, - 0x20, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x4e, - 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x49, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x29, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x43, 0x49, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, - 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x49, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, - 0x12, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x1a, 0x0f, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x42, 0x4b, 0x41, 0x50, 0x49, - 0x47, 0x57, 0x42, 0x59, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, - 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, - 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3b, 0x70, 0x62, 0x63, 0x73, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x12, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, + 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, + 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, + 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, + 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, + 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, + 0x12, 0xc2, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x49, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x29, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x49, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x1a, 0x2a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x43, 0x49, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x92, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x12, + 0x39, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, + 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x12, 0x9c, 0x01, 0x0a, 0x13, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, + 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x2a, 0x3e, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9d, 0x01, 0x0a, 0x17, 0x4c, 0x69, + 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x72, 0x69, 0x76, 0x69, + 0x6c, 0x65, 0x67, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x70, + 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x12, 0xa7, 0x01, 0x0a, 0x18, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x72, 0x69, + 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x2a, 0x44, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, + 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, + 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x1a, 0x0f, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x42, 0x4b, 0x41, + 0x50, 0x49, 0x47, 0x57, 0x42, 0x59, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, + 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, + 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3b, 0x70, 0x62, 0x63, 0x73, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -26433,7 +27173,7 @@ func file_config_service_proto_rawDescGZIP() []byte { return file_config_service_proto_rawDescData } -var file_config_service_proto_msgTypes = make([]protoimpl.MessageInfo, 339) +var file_config_service_proto_msgTypes = make([]protoimpl.MessageInfo, 346) var file_config_service_proto_goTypes = []interface{}{ (*UpdateCredentialScopeReq)(nil), // 0: pbcs.UpdateCredentialScopeReq (*UpdateCredentialScopeResp)(nil), // 1: pbcs.UpdateCredentialScopeResp @@ -26743,552 +27483,570 @@ var file_config_service_proto_goTypes = []interface{}{ (*CompareKvConflictsResp)(nil), // 305: pbcs.CompareKvConflictsResp (*GetTemplateAndNonTemplateCICountReq)(nil), // 306: pbcs.GetTemplateAndNonTemplateCICountReq (*GetTemplateAndNonTemplateCICountResp)(nil), // 307: pbcs.GetTemplateAndNonTemplateCICountResp - (*CredentialScopePreviewResp_Detail)(nil), // 308: pbcs.CredentialScopePreviewResp.Detail - (*BatchUpsertConfigItemsReq_ConfigItem)(nil), // 309: pbcs.BatchUpsertConfigItemsReq.ConfigItem - (*BatchUpsertConfigItemsReq_TemplateBinding)(nil), // 310: pbcs.BatchUpsertConfigItemsReq.TemplateBinding - (*ListConfigItemByTupleReq_Item)(nil), // 311: pbcs.ListConfigItemByTupleReq.Item - (*ListHooksResp_Detail)(nil), // 312: pbcs.ListHooksResp.Detail - (*ListHookRevisionsResp_ListHookRevisionsData)(nil), // 313: pbcs.ListHookRevisionsResp.ListHookRevisionsData - (*GetHookInfoSpec_Releases)(nil), // 314: pbcs.GetHookInfoSpec.Releases - (*ListHookRevisionReferencesResp_Detail)(nil), // 315: pbcs.ListHookRevisionReferencesResp.Detail - (*ListHookReferencesResp_Detail)(nil), // 316: pbcs.ListHookReferencesResp.Detail - (*GetReleaseHookResp_Hook)(nil), // 317: pbcs.GetReleaseHookResp.Hook - (*BatchUpsertTemplatesReq_Item)(nil), // 318: pbcs.BatchUpsertTemplatesReq.Item - (*ListTemplateByTupleReq_Item)(nil), // 319: pbcs.ListTemplateByTupleReq.Item - (*ListTemplateByTupleResp_Item)(nil), // 320: pbcs.ListTemplateByTupleResp.Item - (*ListTemplateSetsAndRevisionsResp_Detail)(nil), // 321: pbcs.ListTemplateSetsAndRevisionsResp.Detail - (*GetTemplateRevisionResp_TemplateRevision)(nil), // 322: pbcs.GetTemplateRevisionResp.TemplateRevision - (*ImportFromTemplateSetToAppReq_Binding)(nil), // 323: pbcs.ImportFromTemplateSetToAppReq.Binding - (*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding)(nil), // 324: pbcs.ImportFromTemplateSetToAppReq.Binding.TemplateRevisionBinding - (*CheckTemplateSetReferencesAppsReq_Item)(nil), // 325: pbcs.CheckTemplateSetReferencesAppsReq.Item - (*CheckTemplateSetReferencesAppsResp_Item)(nil), // 326: pbcs.CheckTemplateSetReferencesAppsResp.Item - (*ListAllGroupsResp_ListAllGroupsData)(nil), // 327: pbcs.ListAllGroupsResp.ListAllGroupsData - (*ListAllGroupsResp_ListAllGroupsData_BindApp)(nil), // 328: pbcs.ListAllGroupsResp.ListAllGroupsData.BindApp - (*ListAppGroupsResp_ListAppGroupsData)(nil), // 329: pbcs.ListAppGroupsResp.ListAppGroupsData - (*ListGroupReleasedAppsResp_ListGroupReleasedAppsData)(nil), // 330: pbcs.ListGroupReleasedAppsResp.ListGroupReleasedAppsData - (*BatchUpsertKvsReq_Kv)(nil), // 331: pbcs.BatchUpsertKvsReq.Kv - (*ListClientsReq_Order)(nil), // 332: pbcs.ListClientsReq.Order - (*ListClientsResp_Item)(nil), // 333: pbcs.ListClientsResp.Item - (*ListClientEventsReq_Order)(nil), // 334: pbcs.ListClientEventsReq.Order - (*CompareConfigItemConflictsResp_NonTemplateConfig)(nil), // 335: pbcs.CompareConfigItemConflictsResp.NonTemplateConfig - (*CompareConfigItemConflictsResp_TemplateConfig)(nil), // 336: pbcs.CompareConfigItemConflictsResp.TemplateConfig - (*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail)(nil), // 337: pbcs.CompareConfigItemConflictsResp.TemplateConfig.TemplateRevisionDetail - (*CompareKvConflictsResp_Kv)(nil), // 338: pbcs.CompareKvConflictsResp.Kv - (*credential_scope.CredentialScopeSpec)(nil), // 339: pbcrs.CredentialScopeSpec - (*credential_scope.UpdateScopeSpec)(nil), // 340: pbcrs.UpdateScopeSpec - (*credential_scope.CredentialScopeList)(nil), // 341: pbcrs.CredentialScopeList - (*credential.CredentialList)(nil), // 342: pbcredential.CredentialList - (*app.App)(nil), // 343: pbapp.App - (*template_variable.TemplateVariableSpec)(nil), // 344: pbtv.TemplateVariableSpec - (*config_item.ConfigItem)(nil), // 345: pbci.ConfigItem - (*content.ContentSpec)(nil), // 346: pbcontent.ContentSpec - (*released_ci.ReleasedConfigItem)(nil), // 347: pbrci.ReleasedConfigItem - (*config_item.ListConfigItemCounts)(nil), // 348: pbci.ListConfigItemCounts - (*released_kv.ReleasedKv)(nil), // 349: pbrkv.ReleasedKv - (*release.Release)(nil), // 350: pbrelease.Release - (*hook.CountHookTags)(nil), // 351: pbhook.CountHookTags - (*hook.HookAttachment)(nil), // 352: pbhook.HookAttachment - (*base.Revision)(nil), // 353: pbbase.Revision - (*template_space.TemplateSpace)(nil), // 354: pbts.TemplateSpace - (*template.Template)(nil), // 355: pbtemplate.Template - (*template_revision.TemplateRevision)(nil), // 356: pbtr.TemplateRevision - (*template_revision.TemplateRevisionNamesDetail)(nil), // 357: pbtr.TemplateRevisionNamesDetail - (*template_set.TemplateSet)(nil), // 358: pbtset.TemplateSet - (*template_set.TemplateSetOfBizDetail)(nil), // 359: pbtset.TemplateSetOfBizDetail - (*app_template_binding.TemplateBinding)(nil), // 360: pbatb.TemplateBinding - (*app_template_binding.AppTemplateBinding)(nil), // 361: pbatb.AppTemplateBinding - (*app_template_binding.AppBoundTmplRevisionGroupBySet)(nil), // 362: pbatb.AppBoundTmplRevisionGroupBySet - (*app_template_binding.ReleasedAppBoundTmplRevisionGroupBySet)(nil), // 363: pbatb.ReleasedAppBoundTmplRevisionGroupBySet - (*app_template_binding.ReleasedAppBoundTmplRevision)(nil), // 364: pbatb.ReleasedAppBoundTmplRevision - (*app_template_binding.Conflict)(nil), // 365: pbatb.Conflict - (*template_binding_relation.TemplateBoundCounts)(nil), // 366: pbtbr.TemplateBoundCounts - (*template_binding_relation.TemplateRevisionBoundCounts)(nil), // 367: pbtbr.TemplateRevisionBoundCounts - (*template_binding_relation.TemplateSetBoundCounts)(nil), // 368: pbtbr.TemplateSetBoundCounts - (*template_binding_relation.TemplateBoundUnnamedAppDetail)(nil), // 369: pbtbr.TemplateBoundUnnamedAppDetail - (*template_binding_relation.TemplateBoundNamedAppDetail)(nil), // 370: pbtbr.TemplateBoundNamedAppDetail - (*template_binding_relation.TemplateBoundTemplateSetDetail)(nil), // 371: pbtbr.TemplateBoundTemplateSetDetail - (*template_binding_relation.MultiTemplateBoundTemplateSetDetail)(nil), // 372: pbtbr.MultiTemplateBoundTemplateSetDetail - (*template_binding_relation.TemplateRevisionBoundUnnamedAppDetail)(nil), // 373: pbtbr.TemplateRevisionBoundUnnamedAppDetail - (*template_binding_relation.TemplateRevisionBoundNamedAppDetail)(nil), // 374: pbtbr.TemplateRevisionBoundNamedAppDetail - (*template_binding_relation.TemplateSetBoundUnnamedAppDetail)(nil), // 375: pbtbr.TemplateSetBoundUnnamedAppDetail - (*template_binding_relation.MultiTemplateSetBoundUnnamedAppDetail)(nil), // 376: pbtbr.MultiTemplateSetBoundUnnamedAppDetail - (*template_binding_relation.TemplateSetBoundNamedAppDetail)(nil), // 377: pbtbr.TemplateSetBoundNamedAppDetail - (*template_binding_relation.LatestTemplateBoundUnnamedAppDetail)(nil), // 378: pbtbr.LatestTemplateBoundUnnamedAppDetail - (*template_variable.TemplateVariable)(nil), // 379: pbtv.TemplateVariable - (*app_template_variable.AppTemplateVariableReference)(nil), // 380: pbatv.AppTemplateVariableReference - (*structpb.Struct)(nil), // 381: google.protobuf.Struct - (*kv.Kv)(nil), // 382: pbkv.Kv - (*client.ClientQueryCondition)(nil), // 383: pbclient.ClientQueryCondition - (*client_event.ClientEvent)(nil), // 384: pbce.ClientEvent - (*client_query.ClientQuery)(nil), // 385: pbcq.ClientQuery - (*hook.Hook)(nil), // 386: pbhook.Hook - (*hook_revision.HookRevision)(nil), // 387: pbhr.HookRevision - (*client.Client)(nil), // 388: pbclient.Client - (*config_item.ConfigItemSpec)(nil), // 389: pbci.ConfigItemSpec - (*base.EmptyReq)(nil), // 390: pbbase.EmptyReq - (*client.ClientCommonReq)(nil), // 391: pbclient.ClientCommonReq - (*group.Group)(nil), // 392: pbgroup.Group + (*CreateUserPrivilegesReq)(nil), // 308: pbcs.CreateUserPrivilegesReq + (*CreateUserPrivilegesResp)(nil), // 309: pbcs.CreateUserPrivilegesResp + (*ListUserPrivilegesReq)(nil), // 310: pbcs.ListUserPrivilegesReq + (*ListUserPrivilegesResp)(nil), // 311: pbcs.ListUserPrivilegesResp + (*DeleteUserPrivilegesReq)(nil), // 312: pbcs.DeleteUserPrivilegesReq + (*DeleteUserPrivilegesResp)(nil), // 313: pbcs.DeleteUserPrivilegesResp + (*CredentialScopePreviewResp_Detail)(nil), // 314: pbcs.CredentialScopePreviewResp.Detail + (*BatchUpsertConfigItemsReq_ConfigItem)(nil), // 315: pbcs.BatchUpsertConfigItemsReq.ConfigItem + (*BatchUpsertConfigItemsReq_TemplateBinding)(nil), // 316: pbcs.BatchUpsertConfigItemsReq.TemplateBinding + (*ListConfigItemByTupleReq_Item)(nil), // 317: pbcs.ListConfigItemByTupleReq.Item + (*ListHooksResp_Detail)(nil), // 318: pbcs.ListHooksResp.Detail + (*ListHookRevisionsResp_ListHookRevisionsData)(nil), // 319: pbcs.ListHookRevisionsResp.ListHookRevisionsData + (*GetHookInfoSpec_Releases)(nil), // 320: pbcs.GetHookInfoSpec.Releases + (*ListHookRevisionReferencesResp_Detail)(nil), // 321: pbcs.ListHookRevisionReferencesResp.Detail + (*ListHookReferencesResp_Detail)(nil), // 322: pbcs.ListHookReferencesResp.Detail + (*GetReleaseHookResp_Hook)(nil), // 323: pbcs.GetReleaseHookResp.Hook + (*BatchUpsertTemplatesReq_Item)(nil), // 324: pbcs.BatchUpsertTemplatesReq.Item + (*ListTemplateByTupleReq_Item)(nil), // 325: pbcs.ListTemplateByTupleReq.Item + (*ListTemplateByTupleResp_Item)(nil), // 326: pbcs.ListTemplateByTupleResp.Item + (*ListTemplateSetsAndRevisionsResp_Detail)(nil), // 327: pbcs.ListTemplateSetsAndRevisionsResp.Detail + (*GetTemplateRevisionResp_TemplateRevision)(nil), // 328: pbcs.GetTemplateRevisionResp.TemplateRevision + (*ImportFromTemplateSetToAppReq_Binding)(nil), // 329: pbcs.ImportFromTemplateSetToAppReq.Binding + (*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding)(nil), // 330: pbcs.ImportFromTemplateSetToAppReq.Binding.TemplateRevisionBinding + (*CheckTemplateSetReferencesAppsReq_Item)(nil), // 331: pbcs.CheckTemplateSetReferencesAppsReq.Item + (*CheckTemplateSetReferencesAppsResp_Item)(nil), // 332: pbcs.CheckTemplateSetReferencesAppsResp.Item + (*ListAllGroupsResp_ListAllGroupsData)(nil), // 333: pbcs.ListAllGroupsResp.ListAllGroupsData + (*ListAllGroupsResp_ListAllGroupsData_BindApp)(nil), // 334: pbcs.ListAllGroupsResp.ListAllGroupsData.BindApp + (*ListAppGroupsResp_ListAppGroupsData)(nil), // 335: pbcs.ListAppGroupsResp.ListAppGroupsData + (*ListGroupReleasedAppsResp_ListGroupReleasedAppsData)(nil), // 336: pbcs.ListGroupReleasedAppsResp.ListGroupReleasedAppsData + (*BatchUpsertKvsReq_Kv)(nil), // 337: pbcs.BatchUpsertKvsReq.Kv + (*ListClientsReq_Order)(nil), // 338: pbcs.ListClientsReq.Order + (*ListClientsResp_Item)(nil), // 339: pbcs.ListClientsResp.Item + (*ListClientEventsReq_Order)(nil), // 340: pbcs.ListClientEventsReq.Order + (*CompareConfigItemConflictsResp_NonTemplateConfig)(nil), // 341: pbcs.CompareConfigItemConflictsResp.NonTemplateConfig + (*CompareConfigItemConflictsResp_TemplateConfig)(nil), // 342: pbcs.CompareConfigItemConflictsResp.TemplateConfig + (*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail)(nil), // 343: pbcs.CompareConfigItemConflictsResp.TemplateConfig.TemplateRevisionDetail + (*CompareKvConflictsResp_Kv)(nil), // 344: pbcs.CompareKvConflictsResp.Kv + (*ListUserPrivilegesResp_Detail)(nil), // 345: pbcs.ListUserPrivilegesResp.Detail + (*credential_scope.CredentialScopeSpec)(nil), // 346: pbcrs.CredentialScopeSpec + (*credential_scope.UpdateScopeSpec)(nil), // 347: pbcrs.UpdateScopeSpec + (*credential_scope.CredentialScopeList)(nil), // 348: pbcrs.CredentialScopeList + (*credential.CredentialList)(nil), // 349: pbcredential.CredentialList + (*app.App)(nil), // 350: pbapp.App + (*template_variable.TemplateVariableSpec)(nil), // 351: pbtv.TemplateVariableSpec + (*config_item.ConfigItem)(nil), // 352: pbci.ConfigItem + (*content.ContentSpec)(nil), // 353: pbcontent.ContentSpec + (*released_ci.ReleasedConfigItem)(nil), // 354: pbrci.ReleasedConfigItem + (*config_item.ListConfigItemCounts)(nil), // 355: pbci.ListConfigItemCounts + (*released_kv.ReleasedKv)(nil), // 356: pbrkv.ReleasedKv + (*release.Release)(nil), // 357: pbrelease.Release + (*hook.CountHookTags)(nil), // 358: pbhook.CountHookTags + (*hook.HookAttachment)(nil), // 359: pbhook.HookAttachment + (*base.Revision)(nil), // 360: pbbase.Revision + (*template_space.TemplateSpace)(nil), // 361: pbts.TemplateSpace + (*template.Template)(nil), // 362: pbtemplate.Template + (*template_revision.TemplateRevision)(nil), // 363: pbtr.TemplateRevision + (*template_revision.TemplateRevisionNamesDetail)(nil), // 364: pbtr.TemplateRevisionNamesDetail + (*template_set.TemplateSet)(nil), // 365: pbtset.TemplateSet + (*template_set.TemplateSetOfBizDetail)(nil), // 366: pbtset.TemplateSetOfBizDetail + (*app_template_binding.TemplateBinding)(nil), // 367: pbatb.TemplateBinding + (*app_template_binding.AppTemplateBinding)(nil), // 368: pbatb.AppTemplateBinding + (*app_template_binding.AppBoundTmplRevisionGroupBySet)(nil), // 369: pbatb.AppBoundTmplRevisionGroupBySet + (*app_template_binding.ReleasedAppBoundTmplRevisionGroupBySet)(nil), // 370: pbatb.ReleasedAppBoundTmplRevisionGroupBySet + (*app_template_binding.ReleasedAppBoundTmplRevision)(nil), // 371: pbatb.ReleasedAppBoundTmplRevision + (*app_template_binding.Conflict)(nil), // 372: pbatb.Conflict + (*template_binding_relation.TemplateBoundCounts)(nil), // 373: pbtbr.TemplateBoundCounts + (*template_binding_relation.TemplateRevisionBoundCounts)(nil), // 374: pbtbr.TemplateRevisionBoundCounts + (*template_binding_relation.TemplateSetBoundCounts)(nil), // 375: pbtbr.TemplateSetBoundCounts + (*template_binding_relation.TemplateBoundUnnamedAppDetail)(nil), // 376: pbtbr.TemplateBoundUnnamedAppDetail + (*template_binding_relation.TemplateBoundNamedAppDetail)(nil), // 377: pbtbr.TemplateBoundNamedAppDetail + (*template_binding_relation.TemplateBoundTemplateSetDetail)(nil), // 378: pbtbr.TemplateBoundTemplateSetDetail + (*template_binding_relation.MultiTemplateBoundTemplateSetDetail)(nil), // 379: pbtbr.MultiTemplateBoundTemplateSetDetail + (*template_binding_relation.TemplateRevisionBoundUnnamedAppDetail)(nil), // 380: pbtbr.TemplateRevisionBoundUnnamedAppDetail + (*template_binding_relation.TemplateRevisionBoundNamedAppDetail)(nil), // 381: pbtbr.TemplateRevisionBoundNamedAppDetail + (*template_binding_relation.TemplateSetBoundUnnamedAppDetail)(nil), // 382: pbtbr.TemplateSetBoundUnnamedAppDetail + (*template_binding_relation.MultiTemplateSetBoundUnnamedAppDetail)(nil), // 383: pbtbr.MultiTemplateSetBoundUnnamedAppDetail + (*template_binding_relation.TemplateSetBoundNamedAppDetail)(nil), // 384: pbtbr.TemplateSetBoundNamedAppDetail + (*template_binding_relation.LatestTemplateBoundUnnamedAppDetail)(nil), // 385: pbtbr.LatestTemplateBoundUnnamedAppDetail + (*template_variable.TemplateVariable)(nil), // 386: pbtv.TemplateVariable + (*app_template_variable.AppTemplateVariableReference)(nil), // 387: pbatv.AppTemplateVariableReference + (*structpb.Struct)(nil), // 388: google.protobuf.Struct + (*kv.Kv)(nil), // 389: pbkv.Kv + (*client.ClientQueryCondition)(nil), // 390: pbclient.ClientQueryCondition + (*client_event.ClientEvent)(nil), // 391: pbce.ClientEvent + (*client_query.ClientQuery)(nil), // 392: pbcq.ClientQuery + (*hook.Hook)(nil), // 393: pbhook.Hook + (*hook_revision.HookRevision)(nil), // 394: pbhr.HookRevision + (*client.Client)(nil), // 395: pbclient.Client + (*config_item.ConfigItemSpec)(nil), // 396: pbci.ConfigItemSpec + (*config_item.FilePermission)(nil), // 397: pbci.FilePermission + (*base.EmptyReq)(nil), // 398: pbbase.EmptyReq + (*client.ClientCommonReq)(nil), // 399: pbclient.ClientCommonReq + (*group.Group)(nil), // 400: pbgroup.Group } var file_config_service_proto_depIdxs = []int32{ - 339, // 0: pbcs.UpdateCredentialScopeReq.add_scope:type_name -> pbcrs.CredentialScopeSpec - 340, // 1: pbcs.UpdateCredentialScopeReq.alter_scope:type_name -> pbcrs.UpdateScopeSpec - 308, // 2: pbcs.CredentialScopePreviewResp.details:type_name -> pbcs.CredentialScopePreviewResp.Detail - 341, // 3: pbcs.ListCredentialScopesResp.details:type_name -> pbcrs.CredentialScopeList - 342, // 4: pbcs.ListCredentialsResp.details:type_name -> pbcredential.CredentialList - 343, // 5: pbcs.ListAppsResp.details:type_name -> pbapp.App - 309, // 6: pbcs.BatchUpsertConfigItemsReq.items:type_name -> pbcs.BatchUpsertConfigItemsReq.ConfigItem - 344, // 7: pbcs.BatchUpsertConfigItemsReq.variables:type_name -> pbtv.TemplateVariableSpec - 310, // 8: pbcs.BatchUpsertConfigItemsReq.bindings:type_name -> pbcs.BatchUpsertConfigItemsReq.TemplateBinding - 345, // 9: pbcs.GetConfigItemResp.config_item:type_name -> pbci.ConfigItem - 346, // 10: pbcs.GetConfigItemResp.content:type_name -> pbcontent.ContentSpec - 347, // 11: pbcs.GetReleasedConfigItemResp.config_item:type_name -> pbrci.ReleasedConfigItem - 345, // 12: pbcs.ListConfigItemsResp.details:type_name -> pbci.ConfigItem - 347, // 13: pbcs.ListReleasedConfigItemsResp.details:type_name -> pbrci.ReleasedConfigItem - 348, // 14: pbcs.ListConfigItemCountResp.details:type_name -> pbci.ListConfigItemCounts - 311, // 15: pbcs.ListConfigItemByTupleReq.items:type_name -> pbcs.ListConfigItemByTupleReq.Item - 345, // 16: pbcs.ListConfigItemByTupleResp.details:type_name -> pbci.ConfigItem - 349, // 17: pbcs.GetReleasedKvResp.kv:type_name -> pbrkv.ReleasedKv - 349, // 18: pbcs.ListReleasedKvsResp.details:type_name -> pbrkv.ReleasedKv - 344, // 19: pbcs.CreateReleaseReq.variables:type_name -> pbtv.TemplateVariableSpec - 350, // 20: pbcs.ListReleasesResp.details:type_name -> pbrelease.Release - 312, // 21: pbcs.ListHooksResp.details:type_name -> pbcs.ListHooksResp.Detail - 351, // 22: pbcs.ListHookTagsResp.details:type_name -> pbhook.CountHookTags - 313, // 23: pbcs.ListHookRevisionsResp.details:type_name -> pbcs.ListHookRevisionsResp.ListHookRevisionsData + 346, // 0: pbcs.UpdateCredentialScopeReq.add_scope:type_name -> pbcrs.CredentialScopeSpec + 347, // 1: pbcs.UpdateCredentialScopeReq.alter_scope:type_name -> pbcrs.UpdateScopeSpec + 314, // 2: pbcs.CredentialScopePreviewResp.details:type_name -> pbcs.CredentialScopePreviewResp.Detail + 348, // 3: pbcs.ListCredentialScopesResp.details:type_name -> pbcrs.CredentialScopeList + 349, // 4: pbcs.ListCredentialsResp.details:type_name -> pbcredential.CredentialList + 350, // 5: pbcs.ListAppsResp.details:type_name -> pbapp.App + 315, // 6: pbcs.BatchUpsertConfigItemsReq.items:type_name -> pbcs.BatchUpsertConfigItemsReq.ConfigItem + 351, // 7: pbcs.BatchUpsertConfigItemsReq.variables:type_name -> pbtv.TemplateVariableSpec + 316, // 8: pbcs.BatchUpsertConfigItemsReq.bindings:type_name -> pbcs.BatchUpsertConfigItemsReq.TemplateBinding + 352, // 9: pbcs.GetConfigItemResp.config_item:type_name -> pbci.ConfigItem + 353, // 10: pbcs.GetConfigItemResp.content:type_name -> pbcontent.ContentSpec + 354, // 11: pbcs.GetReleasedConfigItemResp.config_item:type_name -> pbrci.ReleasedConfigItem + 352, // 12: pbcs.ListConfigItemsResp.details:type_name -> pbci.ConfigItem + 354, // 13: pbcs.ListReleasedConfigItemsResp.details:type_name -> pbrci.ReleasedConfigItem + 355, // 14: pbcs.ListConfigItemCountResp.details:type_name -> pbci.ListConfigItemCounts + 317, // 15: pbcs.ListConfigItemByTupleReq.items:type_name -> pbcs.ListConfigItemByTupleReq.Item + 352, // 16: pbcs.ListConfigItemByTupleResp.details:type_name -> pbci.ConfigItem + 356, // 17: pbcs.GetReleasedKvResp.kv:type_name -> pbrkv.ReleasedKv + 356, // 18: pbcs.ListReleasedKvsResp.details:type_name -> pbrkv.ReleasedKv + 351, // 19: pbcs.CreateReleaseReq.variables:type_name -> pbtv.TemplateVariableSpec + 357, // 20: pbcs.ListReleasesResp.details:type_name -> pbrelease.Release + 318, // 21: pbcs.ListHooksResp.details:type_name -> pbcs.ListHooksResp.Detail + 358, // 22: pbcs.ListHookTagsResp.details:type_name -> pbhook.CountHookTags + 319, // 23: pbcs.ListHookRevisionsResp.details:type_name -> pbcs.ListHookRevisionsResp.ListHookRevisionsData 95, // 24: pbcs.GetHookResp.spec:type_name -> pbcs.GetHookInfoSpec - 352, // 25: pbcs.GetHookResp.attachment:type_name -> pbhook.HookAttachment - 353, // 26: pbcs.GetHookResp.revision:type_name -> pbbase.Revision - 314, // 27: pbcs.GetHookInfoSpec.releases:type_name -> pbcs.GetHookInfoSpec.Releases - 315, // 28: pbcs.ListHookRevisionReferencesResp.details:type_name -> pbcs.ListHookRevisionReferencesResp.Detail - 316, // 29: pbcs.ListHookReferencesResp.details:type_name -> pbcs.ListHookReferencesResp.Detail - 317, // 30: pbcs.GetReleaseHookResp.pre_hook:type_name -> pbcs.GetReleaseHookResp.Hook - 317, // 31: pbcs.GetReleaseHookResp.post_hook:type_name -> pbcs.GetReleaseHookResp.Hook - 354, // 32: pbcs.ListTemplateSpacesResp.details:type_name -> pbts.TemplateSpace - 354, // 33: pbcs.ListTmplSpacesByIDsResp.details:type_name -> pbts.TemplateSpace - 355, // 34: pbcs.ListTemplatesResp.details:type_name -> pbtemplate.Template - 318, // 35: pbcs.BatchUpsertTemplatesReq.items:type_name -> pbcs.BatchUpsertTemplatesReq.Item - 355, // 36: pbcs.ListTemplatesByIDsResp.details:type_name -> pbtemplate.Template - 319, // 37: pbcs.ListTemplateByTupleReq.items:type_name -> pbcs.ListTemplateByTupleReq.Item - 320, // 38: pbcs.ListTemplateByTupleResp.items:type_name -> pbcs.ListTemplateByTupleResp.Item - 355, // 39: pbcs.ListTemplatesNotBoundResp.details:type_name -> pbtemplate.Template - 355, // 40: pbcs.ListTmplsOfTmplSetResp.details:type_name -> pbtemplate.Template - 321, // 41: pbcs.ListTemplateSetsAndRevisionsResp.details:type_name -> pbcs.ListTemplateSetsAndRevisionsResp.Detail - 356, // 42: pbcs.ListTemplateRevisionsResp.details:type_name -> pbtr.TemplateRevision - 322, // 43: pbcs.GetTemplateRevisionResp.detail:type_name -> pbcs.GetTemplateRevisionResp.TemplateRevision - 356, // 44: pbcs.ListTemplateRevisionsByIDsResp.details:type_name -> pbtr.TemplateRevision - 357, // 45: pbcs.ListTmplRevisionNamesByTmplIDsResp.details:type_name -> pbtr.TemplateRevisionNamesDetail - 358, // 46: pbcs.ListTemplateSetsResp.details:type_name -> pbtset.TemplateSet - 358, // 47: pbcs.ListAppTemplateSetsResp.details:type_name -> pbtset.TemplateSet - 358, // 48: pbcs.ListTemplateSetsByIDsResp.details:type_name -> pbtset.TemplateSet - 359, // 49: pbcs.ListTmplSetsOfBizResp.details:type_name -> pbtset.TemplateSetOfBizDetail - 360, // 50: pbcs.CreateAppTemplateBindingReq.bindings:type_name -> pbatb.TemplateBinding - 360, // 51: pbcs.UpdateAppTemplateBindingReq.bindings:type_name -> pbatb.TemplateBinding - 361, // 52: pbcs.ListAppTemplateBindingsResp.details:type_name -> pbatb.AppTemplateBinding - 362, // 53: pbcs.ListAppBoundTmplRevisionsResp.details:type_name -> pbatb.AppBoundTmplRevisionGroupBySet - 363, // 54: pbcs.ListReleasedAppBoundTmplRevisionsResp.details:type_name -> pbatb.ReleasedAppBoundTmplRevisionGroupBySet - 364, // 55: pbcs.GetReleasedAppBoundTmplRevisionResp.detail:type_name -> pbatb.ReleasedAppBoundTmplRevision - 360, // 56: pbcs.UpdateAppBoundTmplRevisionsReq.bindings:type_name -> pbatb.TemplateBinding - 360, // 57: pbcs.CheckAppTemplateBindingReq.bindings:type_name -> pbatb.TemplateBinding - 365, // 58: pbcs.CheckAppTemplateBindingResp.details:type_name -> pbatb.Conflict - 323, // 59: pbcs.ImportFromTemplateSetToAppReq.bindings:type_name -> pbcs.ImportFromTemplateSetToAppReq.Binding - 366, // 60: pbcs.ListTmplBoundCountsResp.details:type_name -> pbtbr.TemplateBoundCounts - 367, // 61: pbcs.ListTmplRevisionBoundCountsResp.details:type_name -> pbtbr.TemplateRevisionBoundCounts - 368, // 62: pbcs.ListTmplSetBoundCountsResp.details:type_name -> pbtbr.TemplateSetBoundCounts - 369, // 63: pbcs.ListTmplBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateBoundUnnamedAppDetail - 370, // 64: pbcs.ListTmplBoundNamedAppsResp.details:type_name -> pbtbr.TemplateBoundNamedAppDetail - 371, // 65: pbcs.ListTmplBoundTmplSetsResp.details:type_name -> pbtbr.TemplateBoundTemplateSetDetail - 372, // 66: pbcs.ListMultiTmplBoundTmplSetsResp.details:type_name -> pbtbr.MultiTemplateBoundTemplateSetDetail - 373, // 67: pbcs.ListTmplRevisionBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateRevisionBoundUnnamedAppDetail - 374, // 68: pbcs.ListTmplRevisionBoundNamedAppsResp.details:type_name -> pbtbr.TemplateRevisionBoundNamedAppDetail - 375, // 69: pbcs.ListTmplSetBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateSetBoundUnnamedAppDetail - 376, // 70: pbcs.ListMultiTmplSetBoundUnnamedAppsResp.details:type_name -> pbtbr.MultiTemplateSetBoundUnnamedAppDetail - 325, // 71: pbcs.CheckTemplateSetReferencesAppsReq.items:type_name -> pbcs.CheckTemplateSetReferencesAppsReq.Item - 326, // 72: pbcs.CheckTemplateSetReferencesAppsResp.items:type_name -> pbcs.CheckTemplateSetReferencesAppsResp.Item - 377, // 73: pbcs.ListTmplSetBoundNamedAppsResp.details:type_name -> pbtbr.TemplateSetBoundNamedAppDetail - 378, // 74: pbcs.ListLatestTmplBoundUnnamedAppsResp.details:type_name -> pbtbr.LatestTemplateBoundUnnamedAppDetail - 379, // 75: pbcs.ListTemplateVariablesResp.details:type_name -> pbtv.TemplateVariable - 380, // 76: pbcs.GetAppTmplVariableRefsResp.details:type_name -> pbatv.AppTemplateVariableReference - 380, // 77: pbcs.GetReleasedAppTmplVariableRefsResp.details:type_name -> pbatv.AppTemplateVariableReference - 344, // 78: pbcs.UpdateAppTmplVariablesReq.variables:type_name -> pbtv.TemplateVariableSpec - 344, // 79: pbcs.ListAppTmplVariablesResp.details:type_name -> pbtv.TemplateVariableSpec - 344, // 80: pbcs.ListReleasedAppTmplVariablesResp.details:type_name -> pbtv.TemplateVariableSpec - 381, // 81: pbcs.CreateGroupReq.selector:type_name -> google.protobuf.Struct - 381, // 82: pbcs.UpdateGroupReq.selector:type_name -> google.protobuf.Struct - 327, // 83: pbcs.ListAllGroupsResp.details:type_name -> pbcs.ListAllGroupsResp.ListAllGroupsData - 329, // 84: pbcs.ListAppGroupsResp.details:type_name -> pbcs.ListAppGroupsResp.ListAppGroupsData - 330, // 85: pbcs.ListGroupReleasedAppsResp.details:type_name -> pbcs.ListGroupReleasedAppsResp.ListGroupReleasedAppsData - 381, // 86: pbcs.PublishReq.labels:type_name -> google.protobuf.Struct - 344, // 87: pbcs.GenerateReleaseAndPublishReq.variables:type_name -> pbtv.TemplateVariableSpec - 381, // 88: pbcs.GenerateReleaseAndPublishReq.labels:type_name -> google.protobuf.Struct - 382, // 89: pbcs.ListKvsResp.details:type_name -> pbkv.Kv - 331, // 90: pbcs.BatchUpsertKvsReq.kvs:type_name -> pbcs.BatchUpsertKvsReq.Kv - 332, // 91: pbcs.ListClientsReq.order:type_name -> pbcs.ListClientsReq.Order - 383, // 92: pbcs.ListClientsReq.search:type_name -> pbclient.ClientQueryCondition - 333, // 93: pbcs.ListClientsResp.details:type_name -> pbcs.ListClientsResp.Item - 334, // 94: pbcs.ListClientEventsReq.order:type_name -> pbcs.ListClientEventsReq.Order - 384, // 95: pbcs.ListClientEventsResp.details:type_name -> pbce.ClientEvent - 385, // 96: pbcs.ListClientQuerysResp.details:type_name -> pbcq.ClientQuery - 381, // 97: pbcs.CreateClientQueryReq.search_condition:type_name -> google.protobuf.Struct - 381, // 98: pbcs.UpdateClientQueryReq.search_condition:type_name -> google.protobuf.Struct - 335, // 99: pbcs.CompareConfigItemConflictsResp.non_template_configs:type_name -> pbcs.CompareConfigItemConflictsResp.NonTemplateConfig - 336, // 100: pbcs.CompareConfigItemConflictsResp.template_configs:type_name -> pbcs.CompareConfigItemConflictsResp.TemplateConfig - 338, // 101: pbcs.CompareKvConflictsResp.exist:type_name -> pbcs.CompareKvConflictsResp.Kv - 338, // 102: pbcs.CompareKvConflictsResp.non_exist:type_name -> pbcs.CompareKvConflictsResp.Kv - 360, // 103: pbcs.BatchUpsertConfigItemsReq.TemplateBinding.template_binding:type_name -> pbatb.TemplateBinding - 386, // 104: pbcs.ListHooksResp.Detail.hook:type_name -> pbhook.Hook - 387, // 105: pbcs.ListHookRevisionsResp.ListHookRevisionsData.hook_revision:type_name -> pbhr.HookRevision - 355, // 106: pbcs.ListTemplateByTupleResp.Item.template:type_name -> pbtemplate.Template - 356, // 107: pbcs.ListTemplateByTupleResp.Item.template_revision:type_name -> pbtr.TemplateRevision - 355, // 108: pbcs.ListTemplateSetsAndRevisionsResp.Detail.template:type_name -> pbtemplate.Template - 356, // 109: pbcs.ListTemplateSetsAndRevisionsResp.Detail.template_revision:type_name -> pbtr.TemplateRevision - 324, // 110: pbcs.ImportFromTemplateSetToAppReq.Binding.template_revisions:type_name -> pbcs.ImportFromTemplateSetToAppReq.Binding.TemplateRevisionBinding - 328, // 111: pbcs.ListAllGroupsResp.ListAllGroupsData.bind_apps:type_name -> pbcs.ListAllGroupsResp.ListAllGroupsData.BindApp - 381, // 112: pbcs.ListAllGroupsResp.ListAllGroupsData.selector:type_name -> google.protobuf.Struct - 381, // 113: pbcs.ListAppGroupsResp.ListAppGroupsData.old_selector:type_name -> google.protobuf.Struct - 381, // 114: pbcs.ListAppGroupsResp.ListAppGroupsData.new_selector:type_name -> google.protobuf.Struct - 388, // 115: pbcs.ListClientsResp.Item.client:type_name -> pbclient.Client - 389, // 116: pbcs.CompareConfigItemConflictsResp.NonTemplateConfig.config_item_spec:type_name -> pbci.ConfigItemSpec - 344, // 117: pbcs.CompareConfigItemConflictsResp.NonTemplateConfig.variables:type_name -> pbtv.TemplateVariableSpec - 337, // 118: pbcs.CompareConfigItemConflictsResp.TemplateConfig.template_revisions:type_name -> pbcs.CompareConfigItemConflictsResp.TemplateConfig.TemplateRevisionDetail - 344, // 119: pbcs.CompareConfigItemConflictsResp.TemplateConfig.TemplateRevisionDetail.variables:type_name -> pbtv.TemplateVariableSpec - 18, // 120: pbcs.Config.CreateApp:input_type -> pbcs.CreateAppReq - 20, // 121: pbcs.Config.UpdateApp:input_type -> pbcs.UpdateAppReq - 21, // 122: pbcs.Config.DeleteApp:input_type -> pbcs.DeleteAppReq - 23, // 123: pbcs.Config.GetApp:input_type -> pbcs.GetAppReq - 24, // 124: pbcs.Config.GetAppByName:input_type -> pbcs.GetAppByNameReq - 25, // 125: pbcs.Config.ListAppsRest:input_type -> pbcs.ListAppsRestReq - 26, // 126: pbcs.Config.ListAppsBySpaceRest:input_type -> pbcs.ListAppsBySpaceRestReq - 28, // 127: pbcs.Config.CreateConfigItem:input_type -> pbcs.CreateConfigItemReq - 29, // 128: pbcs.Config.BatchUpsertConfigItems:input_type -> pbcs.BatchUpsertConfigItemsReq - 32, // 129: pbcs.Config.UpdateConfigItem:input_type -> pbcs.UpdateConfigItemReq - 34, // 130: pbcs.Config.DeleteConfigItem:input_type -> pbcs.DeleteConfigItemReq - 273, // 131: pbcs.Config.BatchDeleteConfigItems:input_type -> pbcs.BatchDeleteAppResourcesReq - 36, // 132: pbcs.Config.UnDeleteConfigItem:input_type -> pbcs.UnDeleteConfigItemReq - 38, // 133: pbcs.Config.BatchUnDeleteConfigItem:input_type -> pbcs.BatchUnDeleteConfigItemReq - 40, // 134: pbcs.Config.UndoConfigItem:input_type -> pbcs.UndoConfigItemReq - 42, // 135: pbcs.Config.GetConfigItem:input_type -> pbcs.GetConfigItemReq - 44, // 136: pbcs.Config.GetReleasedConfigItem:input_type -> pbcs.GetReleasedConfigItemReq - 46, // 137: pbcs.Config.ListConfigItems:input_type -> pbcs.ListConfigItemsReq - 48, // 138: pbcs.Config.ListReleasedConfigItems:input_type -> pbcs.ListReleasedConfigItemsReq - 50, // 139: pbcs.Config.ListConfigItemCount:input_type -> pbcs.ListConfigItemCountReq - 52, // 140: pbcs.Config.ListConfigItemByTuple:input_type -> pbcs.ListConfigItemByTupleReq - 54, // 141: pbcs.Config.GetReleasedKv:input_type -> pbcs.GetReleasedKvReq - 56, // 142: pbcs.Config.ListReleasedKvs:input_type -> pbcs.ListReleasedKvsReq - 58, // 143: pbcs.Config.UpdateConfigHook:input_type -> pbcs.UpdateConfigHookReq - 60, // 144: pbcs.Config.CreateRelease:input_type -> pbcs.CreateReleaseReq - 64, // 145: pbcs.Config.ListReleases:input_type -> pbcs.ListReleasesReq - 66, // 146: pbcs.Config.GetReleaseByName:input_type -> pbcs.GetReleaseByNameReq - 67, // 147: pbcs.Config.GetRelease:input_type -> pbcs.GetReleaseReq - 68, // 148: pbcs.Config.DeprecateRelease:input_type -> pbcs.DeprecateReleaseReq - 70, // 149: pbcs.Config.UnDeprecateRelease:input_type -> pbcs.UnDeprecateReleaseReq - 72, // 150: pbcs.Config.DeleteRelease:input_type -> pbcs.DeleteReleaseReq - 62, // 151: pbcs.Config.CheckReleaseName:input_type -> pbcs.CheckReleaseNameReq - 74, // 152: pbcs.Config.CreateHook:input_type -> pbcs.CreateHookReq - 76, // 153: pbcs.Config.DeleteHook:input_type -> pbcs.DeleteHookReq - 78, // 154: pbcs.Config.BatchDeleteHook:input_type -> pbcs.BatchDeleteHookReq - 79, // 155: pbcs.Config.UpdateHook:input_type -> pbcs.UpdateHookReq - 81, // 156: pbcs.Config.ListHooks:input_type -> pbcs.ListHooksReq - 83, // 157: pbcs.Config.ListHookTags:input_type -> pbcs.ListHookTagsReq - 93, // 158: pbcs.Config.GetHook:input_type -> pbcs.GetHookReq - 85, // 159: pbcs.Config.CreateHookRevision:input_type -> pbcs.CreateHookRevisionReq - 87, // 160: pbcs.Config.ListHookRevisions:input_type -> pbcs.ListHookRevisionsReq - 89, // 161: pbcs.Config.DeleteHookRevision:input_type -> pbcs.DeleteHookRevisionReq - 91, // 162: pbcs.Config.PublishHookRevision:input_type -> pbcs.PublishHookRevisionReq - 96, // 163: pbcs.Config.GetHookRevision:input_type -> pbcs.GetHookRevisionReq - 97, // 164: pbcs.Config.UpdateHookRevision:input_type -> pbcs.UpdateHookRevisionReq - 101, // 165: pbcs.Config.ListHookReferences:input_type -> pbcs.ListHookReferencesReq - 99, // 166: pbcs.Config.ListHookRevisionReferences:input_type -> pbcs.ListHookRevisionReferencesReq - 103, // 167: pbcs.Config.GetReleaseHook:input_type -> pbcs.GetReleaseHookReq - 105, // 168: pbcs.Config.CreateTemplateSpace:input_type -> pbcs.CreateTemplateSpaceReq - 109, // 169: pbcs.Config.DeleteTemplateSpace:input_type -> pbcs.DeleteTemplateSpaceReq - 107, // 170: pbcs.Config.UpdateTemplateSpace:input_type -> pbcs.UpdateTemplateSpaceReq - 111, // 171: pbcs.Config.ListTemplateSpaces:input_type -> pbcs.ListTemplateSpacesReq - 390, // 172: pbcs.Config.GetAllBizsOfTmplSpaces:input_type -> pbbase.EmptyReq - 114, // 173: pbcs.Config.CreateDefaultTmplSpace:input_type -> pbcs.CreateDefaultTmplSpaceReq - 116, // 174: pbcs.Config.ListTmplSpacesByIDs:input_type -> pbcs.ListTmplSpacesByIDsReq - 118, // 175: pbcs.Config.CreateTemplate:input_type -> pbcs.CreateTemplateReq - 122, // 176: pbcs.Config.DeleteTemplate:input_type -> pbcs.DeleteTemplateReq - 124, // 177: pbcs.Config.BatchDeleteTemplate:input_type -> pbcs.BatchDeleteTemplateReq - 120, // 178: pbcs.Config.UpdateTemplate:input_type -> pbcs.UpdateTemplateReq - 126, // 179: pbcs.Config.ListTemplates:input_type -> pbcs.ListTemplatesReq - 128, // 180: pbcs.Config.BatchUpsertTemplates:input_type -> pbcs.BatchUpsertTemplatesReq - 130, // 181: pbcs.Config.BatchUpdateTemplatePermissions:input_type -> pbcs.BatchUpdateTemplatePermissionsReq - 132, // 182: pbcs.Config.AddTmplsToTmplSets:input_type -> pbcs.AddTmplsToTmplSetsReq - 134, // 183: pbcs.Config.DeleteTmplsFromTmplSets:input_type -> pbcs.DeleteTmplsFromTmplSetsReq - 135, // 184: pbcs.Config.ListTemplatesByIDs:input_type -> pbcs.ListTemplatesByIDsReq - 137, // 185: pbcs.Config.ListTemplatesNotBound:input_type -> pbcs.ListTemplatesNotBoundReq - 138, // 186: pbcs.Config.ListTemplateByTuple:input_type -> pbcs.ListTemplateByTupleReq - 141, // 187: pbcs.Config.ListTmplsOfTmplSet:input_type -> pbcs.ListTmplsOfTmplSetReq - 143, // 188: pbcs.Config.ListTemplateSetsAndRevisions:input_type -> pbcs.ListTemplateSetsAndRevisionsReq - 145, // 189: pbcs.Config.CreateTemplateRevision:input_type -> pbcs.CreateTemplateRevisionReq - 147, // 190: pbcs.Config.UpdateTemplateRevision:input_type -> pbcs.UpdateTemplateRevisionReq - 149, // 191: pbcs.Config.ListTemplateRevisions:input_type -> pbcs.ListTemplateRevisionsReq - 151, // 192: pbcs.Config.GetTemplateRevision:input_type -> pbcs.GetTemplateRevisionReq - 155, // 193: pbcs.Config.ListTemplateRevisionsByIDs:input_type -> pbcs.ListTemplateRevisionsByIDsReq - 157, // 194: pbcs.Config.ListTmplRevisionNamesByTmplIDs:input_type -> pbcs.ListTmplRevisionNamesByTmplIDsReq - 159, // 195: pbcs.Config.CreateTemplateSet:input_type -> pbcs.CreateTemplateSetReq - 163, // 196: pbcs.Config.DeleteTemplateSet:input_type -> pbcs.DeleteTemplateSetReq - 161, // 197: pbcs.Config.UpdateTemplateSet:input_type -> pbcs.UpdateTemplateSetReq - 165, // 198: pbcs.Config.ListTemplateSets:input_type -> pbcs.ListTemplateSetsReq - 167, // 199: pbcs.Config.ListAppTemplateSets:input_type -> pbcs.ListAppTemplateSetsReq - 169, // 200: pbcs.Config.ListTemplateSetsByIDs:input_type -> pbcs.ListTemplateSetsByIDsReq - 171, // 201: pbcs.Config.ListTmplSetsOfBiz:input_type -> pbcs.ListTmplSetsOfBizReq - 173, // 202: pbcs.Config.CreateAppTemplateBinding:input_type -> pbcs.CreateAppTemplateBindingReq - 177, // 203: pbcs.Config.DeleteAppTemplateBinding:input_type -> pbcs.DeleteAppTemplateBindingReq - 175, // 204: pbcs.Config.UpdateAppTemplateBinding:input_type -> pbcs.UpdateAppTemplateBindingReq - 179, // 205: pbcs.Config.ListAppTemplateBindings:input_type -> pbcs.ListAppTemplateBindingsReq - 181, // 206: pbcs.Config.ListAppBoundTmplRevisions:input_type -> pbcs.ListAppBoundTmplRevisionsReq - 183, // 207: pbcs.Config.ListReleasedAppBoundTmplRevisions:input_type -> pbcs.ListReleasedAppBoundTmplRevisionsReq - 185, // 208: pbcs.Config.GetReleasedAppBoundTmplRevision:input_type -> pbcs.GetReleasedAppBoundTmplRevisionReq - 187, // 209: pbcs.Config.UpdateAppBoundTmplRevisions:input_type -> pbcs.UpdateAppBoundTmplRevisionsReq - 189, // 210: pbcs.Config.DeleteAppBoundTmplSets:input_type -> pbcs.DeleteAppBoundTmplSetsReq - 191, // 211: pbcs.Config.RemoveAppBoundTmplSet:input_type -> pbcs.RemoveAppBoundTmplSetReq - 193, // 212: pbcs.Config.CheckAppTemplateBinding:input_type -> pbcs.CheckAppTemplateBindingReq - 195, // 213: pbcs.Config.ImportFromTemplateSetToApp:input_type -> pbcs.ImportFromTemplateSetToAppReq - 197, // 214: pbcs.Config.ListTmplBoundCounts:input_type -> pbcs.ListTmplBoundCountsReq - 199, // 215: pbcs.Config.ListTmplRevisionBoundCounts:input_type -> pbcs.ListTmplRevisionBoundCountsReq - 201, // 216: pbcs.Config.ListTmplSetBoundCounts:input_type -> pbcs.ListTmplSetBoundCountsReq - 203, // 217: pbcs.Config.ListTmplBoundUnnamedApps:input_type -> pbcs.ListTmplBoundUnnamedAppsReq - 205, // 218: pbcs.Config.ListTmplBoundNamedApps:input_type -> pbcs.ListTmplBoundNamedAppsReq - 207, // 219: pbcs.Config.ListTmplBoundTmplSets:input_type -> pbcs.ListTmplBoundTmplSetsReq - 209, // 220: pbcs.Config.ListMultiTmplBoundTmplSets:input_type -> pbcs.ListMultiTmplBoundTmplSetsReq - 211, // 221: pbcs.Config.ListTmplRevisionBoundUnnamedApps:input_type -> pbcs.ListTmplRevisionBoundUnnamedAppsReq - 213, // 222: pbcs.Config.ListTmplRevisionBoundNamedApps:input_type -> pbcs.ListTmplRevisionBoundNamedAppsReq - 215, // 223: pbcs.Config.ListTmplSetBoundUnnamedApps:input_type -> pbcs.ListTmplSetBoundUnnamedAppsReq - 217, // 224: pbcs.Config.ListMultiTmplSetBoundUnnamedApps:input_type -> pbcs.ListMultiTmplSetBoundUnnamedAppsReq - 219, // 225: pbcs.Config.CheckTemplateSetReferencesApps:input_type -> pbcs.CheckTemplateSetReferencesAppsReq - 221, // 226: pbcs.Config.ListTmplSetBoundNamedApps:input_type -> pbcs.ListTmplSetBoundNamedAppsReq - 223, // 227: pbcs.Config.ListLatestTmplBoundUnnamedApps:input_type -> pbcs.ListLatestTmplBoundUnnamedAppsReq - 225, // 228: pbcs.Config.CreateTemplateVariable:input_type -> pbcs.CreateTemplateVariableReq - 229, // 229: pbcs.Config.DeleteTemplateVariable:input_type -> pbcs.DeleteTemplateVariableReq - 272, // 230: pbcs.Config.BatchDeleteTemplateVariable:input_type -> pbcs.BatchDeleteBizResourcesReq - 227, // 231: pbcs.Config.UpdateTemplateVariable:input_type -> pbcs.UpdateTemplateVariableReq - 231, // 232: pbcs.Config.ListTemplateVariables:input_type -> pbcs.ListTemplateVariablesReq - 233, // 233: pbcs.Config.ImportTemplateVariables:input_type -> pbcs.ImportTemplateVariablesReq - 235, // 234: pbcs.Config.ExtractAppTmplVariables:input_type -> pbcs.ExtractAppTmplVariablesReq - 237, // 235: pbcs.Config.GetAppTmplVariableRefs:input_type -> pbcs.GetAppTmplVariableRefsReq - 239, // 236: pbcs.Config.GetReleasedAppTmplVariableRefs:input_type -> pbcs.GetReleasedAppTmplVariableRefsReq - 241, // 237: pbcs.Config.UpdateAppTmplVariables:input_type -> pbcs.UpdateAppTmplVariablesReq - 243, // 238: pbcs.Config.ListAppTmplVariables:input_type -> pbcs.ListAppTmplVariablesReq - 245, // 239: pbcs.Config.ListReleasedAppTmplVariables:input_type -> pbcs.ListReleasedAppTmplVariablesReq - 247, // 240: pbcs.Config.CreateGroup:input_type -> pbcs.CreateGroupReq - 251, // 241: pbcs.Config.DeleteGroup:input_type -> pbcs.DeleteGroupReq - 272, // 242: pbcs.Config.BatchDeleteGroups:input_type -> pbcs.BatchDeleteBizResourcesReq - 249, // 243: pbcs.Config.UpdateGroup:input_type -> pbcs.UpdateGroupReq - 253, // 244: pbcs.Config.ListAllGroups:input_type -> pbcs.ListAllGroupsReq - 255, // 245: pbcs.Config.ListAppGroups:input_type -> pbcs.ListAppGroupsReq - 257, // 246: pbcs.Config.ListGroupReleasedApps:input_type -> pbcs.ListGroupReleasedAppsReq - 259, // 247: pbcs.Config.GetGroupByName:input_type -> pbcs.GetGroupByNameReq - 260, // 248: pbcs.Config.Publish:input_type -> pbcs.PublishReq - 261, // 249: pbcs.Config.GenerateReleaseAndPublish:input_type -> pbcs.GenerateReleaseAndPublishReq - 16, // 250: pbcs.Config.CreateCredentials:input_type -> pbcs.CreateCredentialReq - 14, // 251: pbcs.Config.ListCredentials:input_type -> pbcs.ListCredentialsReq - 8, // 252: pbcs.Config.DeleteCredential:input_type -> pbcs.DeleteCredentialsReq - 10, // 253: pbcs.Config.UpdateCredential:input_type -> pbcs.UpdateCredentialsReq - 12, // 254: pbcs.Config.CheckCredentialName:input_type -> pbcs.CheckCredentialNameReq - 4, // 255: pbcs.Config.ListCredentialScopes:input_type -> pbcs.ListCredentialScopesReq - 0, // 256: pbcs.Config.UpdateCredentialScope:input_type -> pbcs.UpdateCredentialScopeReq - 2, // 257: pbcs.Config.CredentialScopePreview:input_type -> pbcs.CredentialScopePreviewReq - 264, // 258: pbcs.Config.CreateKv:input_type -> pbcs.CreateKvReq - 266, // 259: pbcs.Config.UpdateKv:input_type -> pbcs.UpdateKvReq - 268, // 260: pbcs.Config.ListKvs:input_type -> pbcs.ListKvsReq - 270, // 261: pbcs.Config.DeleteKv:input_type -> pbcs.DeleteKvReq - 273, // 262: pbcs.Config.BatchDeleteKv:input_type -> pbcs.BatchDeleteAppResourcesReq - 275, // 263: pbcs.Config.BatchUpsertKvs:input_type -> pbcs.BatchUpsertKvsReq - 277, // 264: pbcs.Config.UnDeleteKv:input_type -> pbcs.UnDeleteKvReq - 279, // 265: pbcs.Config.BatchUnDeleteKv:input_type -> pbcs.BatchUnDeleteKvReq - 281, // 266: pbcs.Config.UndoKv:input_type -> pbcs.UndoKvReq - 283, // 267: pbcs.Config.ImportKvs:input_type -> pbcs.ImportKvsReq - 285, // 268: pbcs.Config.ListClients:input_type -> pbcs.ListClientsReq - 287, // 269: pbcs.Config.ListClientEvents:input_type -> pbcs.ListClientEventsReq - 289, // 270: pbcs.Config.RetryClients:input_type -> pbcs.RetryClientsReq - 291, // 271: pbcs.Config.ListClientQuerys:input_type -> pbcs.ListClientQuerysReq - 293, // 272: pbcs.Config.CreateClientQuery:input_type -> pbcs.CreateClientQueryReq - 295, // 273: pbcs.Config.UpdateClientQuery:input_type -> pbcs.UpdateClientQueryReq - 297, // 274: pbcs.Config.DeleteClientQuery:input_type -> pbcs.DeleteClientQueryReq - 299, // 275: pbcs.Config.CheckClientQueryName:input_type -> pbcs.CheckClientQueryNameReq - 391, // 276: pbcs.Config.ClientConfigVersionStatistics:input_type -> pbclient.ClientCommonReq - 391, // 277: pbcs.Config.ClientPullTrendStatistics:input_type -> pbclient.ClientCommonReq - 391, // 278: pbcs.Config.ClientPullStatistics:input_type -> pbclient.ClientCommonReq - 391, // 279: pbcs.Config.ClientLabelStatistics:input_type -> pbclient.ClientCommonReq - 391, // 280: pbcs.Config.ClientAnnotationStatistics:input_type -> pbclient.ClientCommonReq - 391, // 281: pbcs.Config.ClientVersionStatistics:input_type -> pbclient.ClientCommonReq - 301, // 282: pbcs.Config.ListClientLabelAndAnnotation:input_type -> pbcs.ListClientLabelAndAnnotationReq - 391, // 283: pbcs.Config.ClientSpecificFailedReason:input_type -> pbclient.ClientCommonReq - 302, // 284: pbcs.Config.CompareConfigItemConflicts:input_type -> pbcs.CompareConfigItemConflictsReq - 304, // 285: pbcs.Config.CompareKvConflicts:input_type -> pbcs.CompareKvConflictsReq - 306, // 286: pbcs.Config.GetTemplateAndNonTemplateCICount:input_type -> pbcs.GetTemplateAndNonTemplateCICountReq - 19, // 287: pbcs.Config.CreateApp:output_type -> pbcs.CreateAppResp - 343, // 288: pbcs.Config.UpdateApp:output_type -> pbapp.App - 22, // 289: pbcs.Config.DeleteApp:output_type -> pbcs.DeleteAppResp - 343, // 290: pbcs.Config.GetApp:output_type -> pbapp.App - 343, // 291: pbcs.Config.GetAppByName:output_type -> pbapp.App - 27, // 292: pbcs.Config.ListAppsRest:output_type -> pbcs.ListAppsResp - 27, // 293: pbcs.Config.ListAppsBySpaceRest:output_type -> pbcs.ListAppsResp - 31, // 294: pbcs.Config.CreateConfigItem:output_type -> pbcs.CreateConfigItemResp - 30, // 295: pbcs.Config.BatchUpsertConfigItems:output_type -> pbcs.BatchUpsertConfigItemsResp - 33, // 296: pbcs.Config.UpdateConfigItem:output_type -> pbcs.UpdateConfigItemResp - 35, // 297: pbcs.Config.DeleteConfigItem:output_type -> pbcs.DeleteConfigItemResp - 274, // 298: pbcs.Config.BatchDeleteConfigItems:output_type -> pbcs.BatchDeleteResp - 37, // 299: pbcs.Config.UnDeleteConfigItem:output_type -> pbcs.UnDeleteConfigItemResp - 39, // 300: pbcs.Config.BatchUnDeleteConfigItem:output_type -> pbcs.BatchUnDeleteConfigItemResp - 41, // 301: pbcs.Config.UndoConfigItem:output_type -> pbcs.UndoConfigItemResp - 43, // 302: pbcs.Config.GetConfigItem:output_type -> pbcs.GetConfigItemResp - 45, // 303: pbcs.Config.GetReleasedConfigItem:output_type -> pbcs.GetReleasedConfigItemResp - 47, // 304: pbcs.Config.ListConfigItems:output_type -> pbcs.ListConfigItemsResp - 49, // 305: pbcs.Config.ListReleasedConfigItems:output_type -> pbcs.ListReleasedConfigItemsResp - 51, // 306: pbcs.Config.ListConfigItemCount:output_type -> pbcs.ListConfigItemCountResp - 53, // 307: pbcs.Config.ListConfigItemByTuple:output_type -> pbcs.ListConfigItemByTupleResp - 55, // 308: pbcs.Config.GetReleasedKv:output_type -> pbcs.GetReleasedKvResp - 57, // 309: pbcs.Config.ListReleasedKvs:output_type -> pbcs.ListReleasedKvsResp - 59, // 310: pbcs.Config.UpdateConfigHook:output_type -> pbcs.UpdateConfigHookResp - 61, // 311: pbcs.Config.CreateRelease:output_type -> pbcs.CreateReleaseResp - 65, // 312: pbcs.Config.ListReleases:output_type -> pbcs.ListReleasesResp - 350, // 313: pbcs.Config.GetReleaseByName:output_type -> pbrelease.Release - 350, // 314: pbcs.Config.GetRelease:output_type -> pbrelease.Release - 69, // 315: pbcs.Config.DeprecateRelease:output_type -> pbcs.DeprecateReleaseResp - 71, // 316: pbcs.Config.UnDeprecateRelease:output_type -> pbcs.UnDeprecateReleaseResp - 73, // 317: pbcs.Config.DeleteRelease:output_type -> pbcs.DeleteReleaseResp - 63, // 318: pbcs.Config.CheckReleaseName:output_type -> pbcs.CheckReleaseNameResp - 75, // 319: pbcs.Config.CreateHook:output_type -> pbcs.CreateHookResp - 77, // 320: pbcs.Config.DeleteHook:output_type -> pbcs.DeleteHookResp - 274, // 321: pbcs.Config.BatchDeleteHook:output_type -> pbcs.BatchDeleteResp - 80, // 322: pbcs.Config.UpdateHook:output_type -> pbcs.UpdateHookResp - 82, // 323: pbcs.Config.ListHooks:output_type -> pbcs.ListHooksResp - 84, // 324: pbcs.Config.ListHookTags:output_type -> pbcs.ListHookTagsResp - 94, // 325: pbcs.Config.GetHook:output_type -> pbcs.GetHookResp - 86, // 326: pbcs.Config.CreateHookRevision:output_type -> pbcs.CreateHookRevisionResp - 88, // 327: pbcs.Config.ListHookRevisions:output_type -> pbcs.ListHookRevisionsResp - 90, // 328: pbcs.Config.DeleteHookRevision:output_type -> pbcs.DeleteHookRevisionResp - 92, // 329: pbcs.Config.PublishHookRevision:output_type -> pbcs.PublishHookRevisionResp - 387, // 330: pbcs.Config.GetHookRevision:output_type -> pbhr.HookRevision - 98, // 331: pbcs.Config.UpdateHookRevision:output_type -> pbcs.UpdateHookRevisionResp - 102, // 332: pbcs.Config.ListHookReferences:output_type -> pbcs.ListHookReferencesResp - 100, // 333: pbcs.Config.ListHookRevisionReferences:output_type -> pbcs.ListHookRevisionReferencesResp - 104, // 334: pbcs.Config.GetReleaseHook:output_type -> pbcs.GetReleaseHookResp - 106, // 335: pbcs.Config.CreateTemplateSpace:output_type -> pbcs.CreateTemplateSpaceResp - 110, // 336: pbcs.Config.DeleteTemplateSpace:output_type -> pbcs.DeleteTemplateSpaceResp - 108, // 337: pbcs.Config.UpdateTemplateSpace:output_type -> pbcs.UpdateTemplateSpaceResp - 112, // 338: pbcs.Config.ListTemplateSpaces:output_type -> pbcs.ListTemplateSpacesResp - 113, // 339: pbcs.Config.GetAllBizsOfTmplSpaces:output_type -> pbcs.GetAllBizsOfTmplSpacesResp - 115, // 340: pbcs.Config.CreateDefaultTmplSpace:output_type -> pbcs.CreateDefaultTmplSpaceResp - 117, // 341: pbcs.Config.ListTmplSpacesByIDs:output_type -> pbcs.ListTmplSpacesByIDsResp - 119, // 342: pbcs.Config.CreateTemplate:output_type -> pbcs.CreateTemplateResp - 123, // 343: pbcs.Config.DeleteTemplate:output_type -> pbcs.DeleteTemplateResp - 125, // 344: pbcs.Config.BatchDeleteTemplate:output_type -> pbcs.BatchDeleteTemplateResp - 121, // 345: pbcs.Config.UpdateTemplate:output_type -> pbcs.UpdateTemplateResp - 127, // 346: pbcs.Config.ListTemplates:output_type -> pbcs.ListTemplatesResp - 129, // 347: pbcs.Config.BatchUpsertTemplates:output_type -> pbcs.BatchUpsertTemplatesResp - 131, // 348: pbcs.Config.BatchUpdateTemplatePermissions:output_type -> pbcs.BatchUpdateTemplatePermissionsResp - 133, // 349: pbcs.Config.AddTmplsToTmplSets:output_type -> pbcs.AddTmplsToTmplSetsResp - 274, // 350: pbcs.Config.DeleteTmplsFromTmplSets:output_type -> pbcs.BatchDeleteResp - 136, // 351: pbcs.Config.ListTemplatesByIDs:output_type -> pbcs.ListTemplatesByIDsResp - 140, // 352: pbcs.Config.ListTemplatesNotBound:output_type -> pbcs.ListTemplatesNotBoundResp - 139, // 353: pbcs.Config.ListTemplateByTuple:output_type -> pbcs.ListTemplateByTupleResp - 142, // 354: pbcs.Config.ListTmplsOfTmplSet:output_type -> pbcs.ListTmplsOfTmplSetResp - 144, // 355: pbcs.Config.ListTemplateSetsAndRevisions:output_type -> pbcs.ListTemplateSetsAndRevisionsResp - 146, // 356: pbcs.Config.CreateTemplateRevision:output_type -> pbcs.CreateTemplateRevisionResp - 148, // 357: pbcs.Config.UpdateTemplateRevision:output_type -> pbcs.UpdateTemplateRevisionResp - 150, // 358: pbcs.Config.ListTemplateRevisions:output_type -> pbcs.ListTemplateRevisionsResp - 152, // 359: pbcs.Config.GetTemplateRevision:output_type -> pbcs.GetTemplateRevisionResp - 156, // 360: pbcs.Config.ListTemplateRevisionsByIDs:output_type -> pbcs.ListTemplateRevisionsByIDsResp - 158, // 361: pbcs.Config.ListTmplRevisionNamesByTmplIDs:output_type -> pbcs.ListTmplRevisionNamesByTmplIDsResp - 160, // 362: pbcs.Config.CreateTemplateSet:output_type -> pbcs.CreateTemplateSetResp - 164, // 363: pbcs.Config.DeleteTemplateSet:output_type -> pbcs.DeleteTemplateSetResp - 162, // 364: pbcs.Config.UpdateTemplateSet:output_type -> pbcs.UpdateTemplateSetResp - 166, // 365: pbcs.Config.ListTemplateSets:output_type -> pbcs.ListTemplateSetsResp - 168, // 366: pbcs.Config.ListAppTemplateSets:output_type -> pbcs.ListAppTemplateSetsResp - 170, // 367: pbcs.Config.ListTemplateSetsByIDs:output_type -> pbcs.ListTemplateSetsByIDsResp - 172, // 368: pbcs.Config.ListTmplSetsOfBiz:output_type -> pbcs.ListTmplSetsOfBizResp - 174, // 369: pbcs.Config.CreateAppTemplateBinding:output_type -> pbcs.CreateAppTemplateBindingResp - 178, // 370: pbcs.Config.DeleteAppTemplateBinding:output_type -> pbcs.DeleteAppTemplateBindingResp - 176, // 371: pbcs.Config.UpdateAppTemplateBinding:output_type -> pbcs.UpdateAppTemplateBindingResp - 180, // 372: pbcs.Config.ListAppTemplateBindings:output_type -> pbcs.ListAppTemplateBindingsResp - 182, // 373: pbcs.Config.ListAppBoundTmplRevisions:output_type -> pbcs.ListAppBoundTmplRevisionsResp - 184, // 374: pbcs.Config.ListReleasedAppBoundTmplRevisions:output_type -> pbcs.ListReleasedAppBoundTmplRevisionsResp - 186, // 375: pbcs.Config.GetReleasedAppBoundTmplRevision:output_type -> pbcs.GetReleasedAppBoundTmplRevisionResp - 188, // 376: pbcs.Config.UpdateAppBoundTmplRevisions:output_type -> pbcs.UpdateAppBoundTmplRevisionsResp - 190, // 377: pbcs.Config.DeleteAppBoundTmplSets:output_type -> pbcs.DeleteAppBoundTmplSetsResp - 192, // 378: pbcs.Config.RemoveAppBoundTmplSet:output_type -> pbcs.RemoveAppBoundTmplSetResp - 194, // 379: pbcs.Config.CheckAppTemplateBinding:output_type -> pbcs.CheckAppTemplateBindingResp - 196, // 380: pbcs.Config.ImportFromTemplateSetToApp:output_type -> pbcs.ImportFromTemplateSetToAppResp - 198, // 381: pbcs.Config.ListTmplBoundCounts:output_type -> pbcs.ListTmplBoundCountsResp - 200, // 382: pbcs.Config.ListTmplRevisionBoundCounts:output_type -> pbcs.ListTmplRevisionBoundCountsResp - 202, // 383: pbcs.Config.ListTmplSetBoundCounts:output_type -> pbcs.ListTmplSetBoundCountsResp - 204, // 384: pbcs.Config.ListTmplBoundUnnamedApps:output_type -> pbcs.ListTmplBoundUnnamedAppsResp - 206, // 385: pbcs.Config.ListTmplBoundNamedApps:output_type -> pbcs.ListTmplBoundNamedAppsResp - 208, // 386: pbcs.Config.ListTmplBoundTmplSets:output_type -> pbcs.ListTmplBoundTmplSetsResp - 210, // 387: pbcs.Config.ListMultiTmplBoundTmplSets:output_type -> pbcs.ListMultiTmplBoundTmplSetsResp - 212, // 388: pbcs.Config.ListTmplRevisionBoundUnnamedApps:output_type -> pbcs.ListTmplRevisionBoundUnnamedAppsResp - 214, // 389: pbcs.Config.ListTmplRevisionBoundNamedApps:output_type -> pbcs.ListTmplRevisionBoundNamedAppsResp - 216, // 390: pbcs.Config.ListTmplSetBoundUnnamedApps:output_type -> pbcs.ListTmplSetBoundUnnamedAppsResp - 218, // 391: pbcs.Config.ListMultiTmplSetBoundUnnamedApps:output_type -> pbcs.ListMultiTmplSetBoundUnnamedAppsResp - 220, // 392: pbcs.Config.CheckTemplateSetReferencesApps:output_type -> pbcs.CheckTemplateSetReferencesAppsResp - 222, // 393: pbcs.Config.ListTmplSetBoundNamedApps:output_type -> pbcs.ListTmplSetBoundNamedAppsResp - 224, // 394: pbcs.Config.ListLatestTmplBoundUnnamedApps:output_type -> pbcs.ListLatestTmplBoundUnnamedAppsResp - 226, // 395: pbcs.Config.CreateTemplateVariable:output_type -> pbcs.CreateTemplateVariableResp - 230, // 396: pbcs.Config.DeleteTemplateVariable:output_type -> pbcs.DeleteTemplateVariableResp - 274, // 397: pbcs.Config.BatchDeleteTemplateVariable:output_type -> pbcs.BatchDeleteResp - 228, // 398: pbcs.Config.UpdateTemplateVariable:output_type -> pbcs.UpdateTemplateVariableResp - 232, // 399: pbcs.Config.ListTemplateVariables:output_type -> pbcs.ListTemplateVariablesResp - 234, // 400: pbcs.Config.ImportTemplateVariables:output_type -> pbcs.ImportTemplateVariablesResp - 236, // 401: pbcs.Config.ExtractAppTmplVariables:output_type -> pbcs.ExtractAppTmplVariablesResp - 238, // 402: pbcs.Config.GetAppTmplVariableRefs:output_type -> pbcs.GetAppTmplVariableRefsResp - 240, // 403: pbcs.Config.GetReleasedAppTmplVariableRefs:output_type -> pbcs.GetReleasedAppTmplVariableRefsResp - 242, // 404: pbcs.Config.UpdateAppTmplVariables:output_type -> pbcs.UpdateAppTmplVariablesResp - 244, // 405: pbcs.Config.ListAppTmplVariables:output_type -> pbcs.ListAppTmplVariablesResp - 246, // 406: pbcs.Config.ListReleasedAppTmplVariables:output_type -> pbcs.ListReleasedAppTmplVariablesResp - 248, // 407: pbcs.Config.CreateGroup:output_type -> pbcs.CreateGroupResp - 252, // 408: pbcs.Config.DeleteGroup:output_type -> pbcs.DeleteGroupResp - 274, // 409: pbcs.Config.BatchDeleteGroups:output_type -> pbcs.BatchDeleteResp - 250, // 410: pbcs.Config.UpdateGroup:output_type -> pbcs.UpdateGroupResp - 254, // 411: pbcs.Config.ListAllGroups:output_type -> pbcs.ListAllGroupsResp - 256, // 412: pbcs.Config.ListAppGroups:output_type -> pbcs.ListAppGroupsResp - 258, // 413: pbcs.Config.ListGroupReleasedApps:output_type -> pbcs.ListGroupReleasedAppsResp - 392, // 414: pbcs.Config.GetGroupByName:output_type -> pbgroup.Group - 263, // 415: pbcs.Config.Publish:output_type -> pbcs.PublishResp - 263, // 416: pbcs.Config.GenerateReleaseAndPublish:output_type -> pbcs.PublishResp - 17, // 417: pbcs.Config.CreateCredentials:output_type -> pbcs.CreateCredentialResp - 15, // 418: pbcs.Config.ListCredentials:output_type -> pbcs.ListCredentialsResp - 9, // 419: pbcs.Config.DeleteCredential:output_type -> pbcs.DeleteCredentialsResp - 11, // 420: pbcs.Config.UpdateCredential:output_type -> pbcs.UpdateCredentialsResp - 13, // 421: pbcs.Config.CheckCredentialName:output_type -> pbcs.CheckCredentialNameResp - 5, // 422: pbcs.Config.ListCredentialScopes:output_type -> pbcs.ListCredentialScopesResp - 1, // 423: pbcs.Config.UpdateCredentialScope:output_type -> pbcs.UpdateCredentialScopeResp - 3, // 424: pbcs.Config.CredentialScopePreview:output_type -> pbcs.CredentialScopePreviewResp - 265, // 425: pbcs.Config.CreateKv:output_type -> pbcs.CreateKvResp - 267, // 426: pbcs.Config.UpdateKv:output_type -> pbcs.UpdateKvResp - 269, // 427: pbcs.Config.ListKvs:output_type -> pbcs.ListKvsResp - 271, // 428: pbcs.Config.DeleteKv:output_type -> pbcs.DeleteKvResp - 274, // 429: pbcs.Config.BatchDeleteKv:output_type -> pbcs.BatchDeleteResp - 276, // 430: pbcs.Config.BatchUpsertKvs:output_type -> pbcs.BatchUpsertKvsResp - 278, // 431: pbcs.Config.UnDeleteKv:output_type -> pbcs.UnDeleteKvResp - 280, // 432: pbcs.Config.BatchUnDeleteKv:output_type -> pbcs.BatchUnDeleteKvResp - 282, // 433: pbcs.Config.UndoKv:output_type -> pbcs.UndoKvResp - 284, // 434: pbcs.Config.ImportKvs:output_type -> pbcs.ImportKvsResp - 286, // 435: pbcs.Config.ListClients:output_type -> pbcs.ListClientsResp - 288, // 436: pbcs.Config.ListClientEvents:output_type -> pbcs.ListClientEventsResp - 290, // 437: pbcs.Config.RetryClients:output_type -> pbcs.RetryClientsResp - 292, // 438: pbcs.Config.ListClientQuerys:output_type -> pbcs.ListClientQuerysResp - 294, // 439: pbcs.Config.CreateClientQuery:output_type -> pbcs.CreateClientQueryResp - 296, // 440: pbcs.Config.UpdateClientQuery:output_type -> pbcs.UpdateClientQueryResp - 298, // 441: pbcs.Config.DeleteClientQuery:output_type -> pbcs.DeleteClientQueryResp - 300, // 442: pbcs.Config.CheckClientQueryName:output_type -> pbcs.CheckClientQueryNameResp - 381, // 443: pbcs.Config.ClientConfigVersionStatistics:output_type -> google.protobuf.Struct - 381, // 444: pbcs.Config.ClientPullTrendStatistics:output_type -> google.protobuf.Struct - 381, // 445: pbcs.Config.ClientPullStatistics:output_type -> google.protobuf.Struct - 381, // 446: pbcs.Config.ClientLabelStatistics:output_type -> google.protobuf.Struct - 381, // 447: pbcs.Config.ClientAnnotationStatistics:output_type -> google.protobuf.Struct - 381, // 448: pbcs.Config.ClientVersionStatistics:output_type -> google.protobuf.Struct - 381, // 449: pbcs.Config.ListClientLabelAndAnnotation:output_type -> google.protobuf.Struct - 381, // 450: pbcs.Config.ClientSpecificFailedReason:output_type -> google.protobuf.Struct - 303, // 451: pbcs.Config.CompareConfigItemConflicts:output_type -> pbcs.CompareConfigItemConflictsResp - 305, // 452: pbcs.Config.CompareKvConflicts:output_type -> pbcs.CompareKvConflictsResp - 307, // 453: pbcs.Config.GetTemplateAndNonTemplateCICount:output_type -> pbcs.GetTemplateAndNonTemplateCICountResp - 287, // [287:454] is the sub-list for method output_type - 120, // [120:287] is the sub-list for method input_type - 120, // [120:120] is the sub-list for extension type_name - 120, // [120:120] is the sub-list for extension extendee - 0, // [0:120] is the sub-list for field type_name + 359, // 25: pbcs.GetHookResp.attachment:type_name -> pbhook.HookAttachment + 360, // 26: pbcs.GetHookResp.revision:type_name -> pbbase.Revision + 320, // 27: pbcs.GetHookInfoSpec.releases:type_name -> pbcs.GetHookInfoSpec.Releases + 321, // 28: pbcs.ListHookRevisionReferencesResp.details:type_name -> pbcs.ListHookRevisionReferencesResp.Detail + 322, // 29: pbcs.ListHookReferencesResp.details:type_name -> pbcs.ListHookReferencesResp.Detail + 323, // 30: pbcs.GetReleaseHookResp.pre_hook:type_name -> pbcs.GetReleaseHookResp.Hook + 323, // 31: pbcs.GetReleaseHookResp.post_hook:type_name -> pbcs.GetReleaseHookResp.Hook + 361, // 32: pbcs.ListTemplateSpacesResp.details:type_name -> pbts.TemplateSpace + 361, // 33: pbcs.ListTmplSpacesByIDsResp.details:type_name -> pbts.TemplateSpace + 362, // 34: pbcs.ListTemplatesResp.details:type_name -> pbtemplate.Template + 324, // 35: pbcs.BatchUpsertTemplatesReq.items:type_name -> pbcs.BatchUpsertTemplatesReq.Item + 362, // 36: pbcs.ListTemplatesByIDsResp.details:type_name -> pbtemplate.Template + 325, // 37: pbcs.ListTemplateByTupleReq.items:type_name -> pbcs.ListTemplateByTupleReq.Item + 326, // 38: pbcs.ListTemplateByTupleResp.items:type_name -> pbcs.ListTemplateByTupleResp.Item + 362, // 39: pbcs.ListTemplatesNotBoundResp.details:type_name -> pbtemplate.Template + 362, // 40: pbcs.ListTmplsOfTmplSetResp.details:type_name -> pbtemplate.Template + 327, // 41: pbcs.ListTemplateSetsAndRevisionsResp.details:type_name -> pbcs.ListTemplateSetsAndRevisionsResp.Detail + 363, // 42: pbcs.ListTemplateRevisionsResp.details:type_name -> pbtr.TemplateRevision + 328, // 43: pbcs.GetTemplateRevisionResp.detail:type_name -> pbcs.GetTemplateRevisionResp.TemplateRevision + 363, // 44: pbcs.ListTemplateRevisionsByIDsResp.details:type_name -> pbtr.TemplateRevision + 364, // 45: pbcs.ListTmplRevisionNamesByTmplIDsResp.details:type_name -> pbtr.TemplateRevisionNamesDetail + 365, // 46: pbcs.ListTemplateSetsResp.details:type_name -> pbtset.TemplateSet + 365, // 47: pbcs.ListAppTemplateSetsResp.details:type_name -> pbtset.TemplateSet + 365, // 48: pbcs.ListTemplateSetsByIDsResp.details:type_name -> pbtset.TemplateSet + 366, // 49: pbcs.ListTmplSetsOfBizResp.details:type_name -> pbtset.TemplateSetOfBizDetail + 367, // 50: pbcs.CreateAppTemplateBindingReq.bindings:type_name -> pbatb.TemplateBinding + 367, // 51: pbcs.UpdateAppTemplateBindingReq.bindings:type_name -> pbatb.TemplateBinding + 368, // 52: pbcs.ListAppTemplateBindingsResp.details:type_name -> pbatb.AppTemplateBinding + 369, // 53: pbcs.ListAppBoundTmplRevisionsResp.details:type_name -> pbatb.AppBoundTmplRevisionGroupBySet + 370, // 54: pbcs.ListReleasedAppBoundTmplRevisionsResp.details:type_name -> pbatb.ReleasedAppBoundTmplRevisionGroupBySet + 371, // 55: pbcs.GetReleasedAppBoundTmplRevisionResp.detail:type_name -> pbatb.ReleasedAppBoundTmplRevision + 367, // 56: pbcs.UpdateAppBoundTmplRevisionsReq.bindings:type_name -> pbatb.TemplateBinding + 367, // 57: pbcs.CheckAppTemplateBindingReq.bindings:type_name -> pbatb.TemplateBinding + 372, // 58: pbcs.CheckAppTemplateBindingResp.details:type_name -> pbatb.Conflict + 329, // 59: pbcs.ImportFromTemplateSetToAppReq.bindings:type_name -> pbcs.ImportFromTemplateSetToAppReq.Binding + 373, // 60: pbcs.ListTmplBoundCountsResp.details:type_name -> pbtbr.TemplateBoundCounts + 374, // 61: pbcs.ListTmplRevisionBoundCountsResp.details:type_name -> pbtbr.TemplateRevisionBoundCounts + 375, // 62: pbcs.ListTmplSetBoundCountsResp.details:type_name -> pbtbr.TemplateSetBoundCounts + 376, // 63: pbcs.ListTmplBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateBoundUnnamedAppDetail + 377, // 64: pbcs.ListTmplBoundNamedAppsResp.details:type_name -> pbtbr.TemplateBoundNamedAppDetail + 378, // 65: pbcs.ListTmplBoundTmplSetsResp.details:type_name -> pbtbr.TemplateBoundTemplateSetDetail + 379, // 66: pbcs.ListMultiTmplBoundTmplSetsResp.details:type_name -> pbtbr.MultiTemplateBoundTemplateSetDetail + 380, // 67: pbcs.ListTmplRevisionBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateRevisionBoundUnnamedAppDetail + 381, // 68: pbcs.ListTmplRevisionBoundNamedAppsResp.details:type_name -> pbtbr.TemplateRevisionBoundNamedAppDetail + 382, // 69: pbcs.ListTmplSetBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateSetBoundUnnamedAppDetail + 383, // 70: pbcs.ListMultiTmplSetBoundUnnamedAppsResp.details:type_name -> pbtbr.MultiTemplateSetBoundUnnamedAppDetail + 331, // 71: pbcs.CheckTemplateSetReferencesAppsReq.items:type_name -> pbcs.CheckTemplateSetReferencesAppsReq.Item + 332, // 72: pbcs.CheckTemplateSetReferencesAppsResp.items:type_name -> pbcs.CheckTemplateSetReferencesAppsResp.Item + 384, // 73: pbcs.ListTmplSetBoundNamedAppsResp.details:type_name -> pbtbr.TemplateSetBoundNamedAppDetail + 385, // 74: pbcs.ListLatestTmplBoundUnnamedAppsResp.details:type_name -> pbtbr.LatestTemplateBoundUnnamedAppDetail + 386, // 75: pbcs.ListTemplateVariablesResp.details:type_name -> pbtv.TemplateVariable + 387, // 76: pbcs.GetAppTmplVariableRefsResp.details:type_name -> pbatv.AppTemplateVariableReference + 387, // 77: pbcs.GetReleasedAppTmplVariableRefsResp.details:type_name -> pbatv.AppTemplateVariableReference + 351, // 78: pbcs.UpdateAppTmplVariablesReq.variables:type_name -> pbtv.TemplateVariableSpec + 351, // 79: pbcs.ListAppTmplVariablesResp.details:type_name -> pbtv.TemplateVariableSpec + 351, // 80: pbcs.ListReleasedAppTmplVariablesResp.details:type_name -> pbtv.TemplateVariableSpec + 388, // 81: pbcs.CreateGroupReq.selector:type_name -> google.protobuf.Struct + 388, // 82: pbcs.UpdateGroupReq.selector:type_name -> google.protobuf.Struct + 333, // 83: pbcs.ListAllGroupsResp.details:type_name -> pbcs.ListAllGroupsResp.ListAllGroupsData + 335, // 84: pbcs.ListAppGroupsResp.details:type_name -> pbcs.ListAppGroupsResp.ListAppGroupsData + 336, // 85: pbcs.ListGroupReleasedAppsResp.details:type_name -> pbcs.ListGroupReleasedAppsResp.ListGroupReleasedAppsData + 388, // 86: pbcs.PublishReq.labels:type_name -> google.protobuf.Struct + 351, // 87: pbcs.GenerateReleaseAndPublishReq.variables:type_name -> pbtv.TemplateVariableSpec + 388, // 88: pbcs.GenerateReleaseAndPublishReq.labels:type_name -> google.protobuf.Struct + 389, // 89: pbcs.ListKvsResp.details:type_name -> pbkv.Kv + 337, // 90: pbcs.BatchUpsertKvsReq.kvs:type_name -> pbcs.BatchUpsertKvsReq.Kv + 338, // 91: pbcs.ListClientsReq.order:type_name -> pbcs.ListClientsReq.Order + 390, // 92: pbcs.ListClientsReq.search:type_name -> pbclient.ClientQueryCondition + 339, // 93: pbcs.ListClientsResp.details:type_name -> pbcs.ListClientsResp.Item + 340, // 94: pbcs.ListClientEventsReq.order:type_name -> pbcs.ListClientEventsReq.Order + 391, // 95: pbcs.ListClientEventsResp.details:type_name -> pbce.ClientEvent + 392, // 96: pbcs.ListClientQuerysResp.details:type_name -> pbcq.ClientQuery + 388, // 97: pbcs.CreateClientQueryReq.search_condition:type_name -> google.protobuf.Struct + 388, // 98: pbcs.UpdateClientQueryReq.search_condition:type_name -> google.protobuf.Struct + 341, // 99: pbcs.CompareConfigItemConflictsResp.non_template_configs:type_name -> pbcs.CompareConfigItemConflictsResp.NonTemplateConfig + 342, // 100: pbcs.CompareConfigItemConflictsResp.template_configs:type_name -> pbcs.CompareConfigItemConflictsResp.TemplateConfig + 344, // 101: pbcs.CompareKvConflictsResp.exist:type_name -> pbcs.CompareKvConflictsResp.Kv + 344, // 102: pbcs.CompareKvConflictsResp.non_exist:type_name -> pbcs.CompareKvConflictsResp.Kv + 345, // 103: pbcs.ListUserPrivilegesResp.details:type_name -> pbcs.ListUserPrivilegesResp.Detail + 367, // 104: pbcs.BatchUpsertConfigItemsReq.TemplateBinding.template_binding:type_name -> pbatb.TemplateBinding + 393, // 105: pbcs.ListHooksResp.Detail.hook:type_name -> pbhook.Hook + 394, // 106: pbcs.ListHookRevisionsResp.ListHookRevisionsData.hook_revision:type_name -> pbhr.HookRevision + 362, // 107: pbcs.ListTemplateByTupleResp.Item.template:type_name -> pbtemplate.Template + 363, // 108: pbcs.ListTemplateByTupleResp.Item.template_revision:type_name -> pbtr.TemplateRevision + 362, // 109: pbcs.ListTemplateSetsAndRevisionsResp.Detail.template:type_name -> pbtemplate.Template + 363, // 110: pbcs.ListTemplateSetsAndRevisionsResp.Detail.template_revision:type_name -> pbtr.TemplateRevision + 330, // 111: pbcs.ImportFromTemplateSetToAppReq.Binding.template_revisions:type_name -> pbcs.ImportFromTemplateSetToAppReq.Binding.TemplateRevisionBinding + 334, // 112: pbcs.ListAllGroupsResp.ListAllGroupsData.bind_apps:type_name -> pbcs.ListAllGroupsResp.ListAllGroupsData.BindApp + 388, // 113: pbcs.ListAllGroupsResp.ListAllGroupsData.selector:type_name -> google.protobuf.Struct + 388, // 114: pbcs.ListAppGroupsResp.ListAppGroupsData.old_selector:type_name -> google.protobuf.Struct + 388, // 115: pbcs.ListAppGroupsResp.ListAppGroupsData.new_selector:type_name -> google.protobuf.Struct + 395, // 116: pbcs.ListClientsResp.Item.client:type_name -> pbclient.Client + 396, // 117: pbcs.CompareConfigItemConflictsResp.NonTemplateConfig.config_item_spec:type_name -> pbci.ConfigItemSpec + 351, // 118: pbcs.CompareConfigItemConflictsResp.NonTemplateConfig.variables:type_name -> pbtv.TemplateVariableSpec + 343, // 119: pbcs.CompareConfigItemConflictsResp.TemplateConfig.template_revisions:type_name -> pbcs.CompareConfigItemConflictsResp.TemplateConfig.TemplateRevisionDetail + 351, // 120: pbcs.CompareConfigItemConflictsResp.TemplateConfig.TemplateRevisionDetail.variables:type_name -> pbtv.TemplateVariableSpec + 397, // 121: pbcs.CompareConfigItemConflictsResp.TemplateConfig.TemplateRevisionDetail.permission:type_name -> pbci.FilePermission + 18, // 122: pbcs.Config.CreateApp:input_type -> pbcs.CreateAppReq + 20, // 123: pbcs.Config.UpdateApp:input_type -> pbcs.UpdateAppReq + 21, // 124: pbcs.Config.DeleteApp:input_type -> pbcs.DeleteAppReq + 23, // 125: pbcs.Config.GetApp:input_type -> pbcs.GetAppReq + 24, // 126: pbcs.Config.GetAppByName:input_type -> pbcs.GetAppByNameReq + 25, // 127: pbcs.Config.ListAppsRest:input_type -> pbcs.ListAppsRestReq + 26, // 128: pbcs.Config.ListAppsBySpaceRest:input_type -> pbcs.ListAppsBySpaceRestReq + 28, // 129: pbcs.Config.CreateConfigItem:input_type -> pbcs.CreateConfigItemReq + 29, // 130: pbcs.Config.BatchUpsertConfigItems:input_type -> pbcs.BatchUpsertConfigItemsReq + 32, // 131: pbcs.Config.UpdateConfigItem:input_type -> pbcs.UpdateConfigItemReq + 34, // 132: pbcs.Config.DeleteConfigItem:input_type -> pbcs.DeleteConfigItemReq + 273, // 133: pbcs.Config.BatchDeleteConfigItems:input_type -> pbcs.BatchDeleteAppResourcesReq + 36, // 134: pbcs.Config.UnDeleteConfigItem:input_type -> pbcs.UnDeleteConfigItemReq + 38, // 135: pbcs.Config.BatchUnDeleteConfigItem:input_type -> pbcs.BatchUnDeleteConfigItemReq + 40, // 136: pbcs.Config.UndoConfigItem:input_type -> pbcs.UndoConfigItemReq + 42, // 137: pbcs.Config.GetConfigItem:input_type -> pbcs.GetConfigItemReq + 44, // 138: pbcs.Config.GetReleasedConfigItem:input_type -> pbcs.GetReleasedConfigItemReq + 46, // 139: pbcs.Config.ListConfigItems:input_type -> pbcs.ListConfigItemsReq + 48, // 140: pbcs.Config.ListReleasedConfigItems:input_type -> pbcs.ListReleasedConfigItemsReq + 50, // 141: pbcs.Config.ListConfigItemCount:input_type -> pbcs.ListConfigItemCountReq + 52, // 142: pbcs.Config.ListConfigItemByTuple:input_type -> pbcs.ListConfigItemByTupleReq + 54, // 143: pbcs.Config.GetReleasedKv:input_type -> pbcs.GetReleasedKvReq + 56, // 144: pbcs.Config.ListReleasedKvs:input_type -> pbcs.ListReleasedKvsReq + 58, // 145: pbcs.Config.UpdateConfigHook:input_type -> pbcs.UpdateConfigHookReq + 60, // 146: pbcs.Config.CreateRelease:input_type -> pbcs.CreateReleaseReq + 64, // 147: pbcs.Config.ListReleases:input_type -> pbcs.ListReleasesReq + 66, // 148: pbcs.Config.GetReleaseByName:input_type -> pbcs.GetReleaseByNameReq + 67, // 149: pbcs.Config.GetRelease:input_type -> pbcs.GetReleaseReq + 68, // 150: pbcs.Config.DeprecateRelease:input_type -> pbcs.DeprecateReleaseReq + 70, // 151: pbcs.Config.UnDeprecateRelease:input_type -> pbcs.UnDeprecateReleaseReq + 72, // 152: pbcs.Config.DeleteRelease:input_type -> pbcs.DeleteReleaseReq + 62, // 153: pbcs.Config.CheckReleaseName:input_type -> pbcs.CheckReleaseNameReq + 74, // 154: pbcs.Config.CreateHook:input_type -> pbcs.CreateHookReq + 76, // 155: pbcs.Config.DeleteHook:input_type -> pbcs.DeleteHookReq + 78, // 156: pbcs.Config.BatchDeleteHook:input_type -> pbcs.BatchDeleteHookReq + 79, // 157: pbcs.Config.UpdateHook:input_type -> pbcs.UpdateHookReq + 81, // 158: pbcs.Config.ListHooks:input_type -> pbcs.ListHooksReq + 83, // 159: pbcs.Config.ListHookTags:input_type -> pbcs.ListHookTagsReq + 93, // 160: pbcs.Config.GetHook:input_type -> pbcs.GetHookReq + 85, // 161: pbcs.Config.CreateHookRevision:input_type -> pbcs.CreateHookRevisionReq + 87, // 162: pbcs.Config.ListHookRevisions:input_type -> pbcs.ListHookRevisionsReq + 89, // 163: pbcs.Config.DeleteHookRevision:input_type -> pbcs.DeleteHookRevisionReq + 91, // 164: pbcs.Config.PublishHookRevision:input_type -> pbcs.PublishHookRevisionReq + 96, // 165: pbcs.Config.GetHookRevision:input_type -> pbcs.GetHookRevisionReq + 97, // 166: pbcs.Config.UpdateHookRevision:input_type -> pbcs.UpdateHookRevisionReq + 101, // 167: pbcs.Config.ListHookReferences:input_type -> pbcs.ListHookReferencesReq + 99, // 168: pbcs.Config.ListHookRevisionReferences:input_type -> pbcs.ListHookRevisionReferencesReq + 103, // 169: pbcs.Config.GetReleaseHook:input_type -> pbcs.GetReleaseHookReq + 105, // 170: pbcs.Config.CreateTemplateSpace:input_type -> pbcs.CreateTemplateSpaceReq + 109, // 171: pbcs.Config.DeleteTemplateSpace:input_type -> pbcs.DeleteTemplateSpaceReq + 107, // 172: pbcs.Config.UpdateTemplateSpace:input_type -> pbcs.UpdateTemplateSpaceReq + 111, // 173: pbcs.Config.ListTemplateSpaces:input_type -> pbcs.ListTemplateSpacesReq + 398, // 174: pbcs.Config.GetAllBizsOfTmplSpaces:input_type -> pbbase.EmptyReq + 114, // 175: pbcs.Config.CreateDefaultTmplSpace:input_type -> pbcs.CreateDefaultTmplSpaceReq + 116, // 176: pbcs.Config.ListTmplSpacesByIDs:input_type -> pbcs.ListTmplSpacesByIDsReq + 118, // 177: pbcs.Config.CreateTemplate:input_type -> pbcs.CreateTemplateReq + 122, // 178: pbcs.Config.DeleteTemplate:input_type -> pbcs.DeleteTemplateReq + 124, // 179: pbcs.Config.BatchDeleteTemplate:input_type -> pbcs.BatchDeleteTemplateReq + 120, // 180: pbcs.Config.UpdateTemplate:input_type -> pbcs.UpdateTemplateReq + 126, // 181: pbcs.Config.ListTemplates:input_type -> pbcs.ListTemplatesReq + 128, // 182: pbcs.Config.BatchUpsertTemplates:input_type -> pbcs.BatchUpsertTemplatesReq + 130, // 183: pbcs.Config.BatchUpdateTemplatePermissions:input_type -> pbcs.BatchUpdateTemplatePermissionsReq + 132, // 184: pbcs.Config.AddTmplsToTmplSets:input_type -> pbcs.AddTmplsToTmplSetsReq + 134, // 185: pbcs.Config.DeleteTmplsFromTmplSets:input_type -> pbcs.DeleteTmplsFromTmplSetsReq + 135, // 186: pbcs.Config.ListTemplatesByIDs:input_type -> pbcs.ListTemplatesByIDsReq + 137, // 187: pbcs.Config.ListTemplatesNotBound:input_type -> pbcs.ListTemplatesNotBoundReq + 138, // 188: pbcs.Config.ListTemplateByTuple:input_type -> pbcs.ListTemplateByTupleReq + 141, // 189: pbcs.Config.ListTmplsOfTmplSet:input_type -> pbcs.ListTmplsOfTmplSetReq + 143, // 190: pbcs.Config.ListTemplateSetsAndRevisions:input_type -> pbcs.ListTemplateSetsAndRevisionsReq + 145, // 191: pbcs.Config.CreateTemplateRevision:input_type -> pbcs.CreateTemplateRevisionReq + 147, // 192: pbcs.Config.UpdateTemplateRevision:input_type -> pbcs.UpdateTemplateRevisionReq + 149, // 193: pbcs.Config.ListTemplateRevisions:input_type -> pbcs.ListTemplateRevisionsReq + 151, // 194: pbcs.Config.GetTemplateRevision:input_type -> pbcs.GetTemplateRevisionReq + 155, // 195: pbcs.Config.ListTemplateRevisionsByIDs:input_type -> pbcs.ListTemplateRevisionsByIDsReq + 157, // 196: pbcs.Config.ListTmplRevisionNamesByTmplIDs:input_type -> pbcs.ListTmplRevisionNamesByTmplIDsReq + 159, // 197: pbcs.Config.CreateTemplateSet:input_type -> pbcs.CreateTemplateSetReq + 163, // 198: pbcs.Config.DeleteTemplateSet:input_type -> pbcs.DeleteTemplateSetReq + 161, // 199: pbcs.Config.UpdateTemplateSet:input_type -> pbcs.UpdateTemplateSetReq + 165, // 200: pbcs.Config.ListTemplateSets:input_type -> pbcs.ListTemplateSetsReq + 167, // 201: pbcs.Config.ListAppTemplateSets:input_type -> pbcs.ListAppTemplateSetsReq + 169, // 202: pbcs.Config.ListTemplateSetsByIDs:input_type -> pbcs.ListTemplateSetsByIDsReq + 171, // 203: pbcs.Config.ListTmplSetsOfBiz:input_type -> pbcs.ListTmplSetsOfBizReq + 173, // 204: pbcs.Config.CreateAppTemplateBinding:input_type -> pbcs.CreateAppTemplateBindingReq + 177, // 205: pbcs.Config.DeleteAppTemplateBinding:input_type -> pbcs.DeleteAppTemplateBindingReq + 175, // 206: pbcs.Config.UpdateAppTemplateBinding:input_type -> pbcs.UpdateAppTemplateBindingReq + 179, // 207: pbcs.Config.ListAppTemplateBindings:input_type -> pbcs.ListAppTemplateBindingsReq + 181, // 208: pbcs.Config.ListAppBoundTmplRevisions:input_type -> pbcs.ListAppBoundTmplRevisionsReq + 183, // 209: pbcs.Config.ListReleasedAppBoundTmplRevisions:input_type -> pbcs.ListReleasedAppBoundTmplRevisionsReq + 185, // 210: pbcs.Config.GetReleasedAppBoundTmplRevision:input_type -> pbcs.GetReleasedAppBoundTmplRevisionReq + 187, // 211: pbcs.Config.UpdateAppBoundTmplRevisions:input_type -> pbcs.UpdateAppBoundTmplRevisionsReq + 189, // 212: pbcs.Config.DeleteAppBoundTmplSets:input_type -> pbcs.DeleteAppBoundTmplSetsReq + 191, // 213: pbcs.Config.RemoveAppBoundTmplSet:input_type -> pbcs.RemoveAppBoundTmplSetReq + 193, // 214: pbcs.Config.CheckAppTemplateBinding:input_type -> pbcs.CheckAppTemplateBindingReq + 195, // 215: pbcs.Config.ImportFromTemplateSetToApp:input_type -> pbcs.ImportFromTemplateSetToAppReq + 197, // 216: pbcs.Config.ListTmplBoundCounts:input_type -> pbcs.ListTmplBoundCountsReq + 199, // 217: pbcs.Config.ListTmplRevisionBoundCounts:input_type -> pbcs.ListTmplRevisionBoundCountsReq + 201, // 218: pbcs.Config.ListTmplSetBoundCounts:input_type -> pbcs.ListTmplSetBoundCountsReq + 203, // 219: pbcs.Config.ListTmplBoundUnnamedApps:input_type -> pbcs.ListTmplBoundUnnamedAppsReq + 205, // 220: pbcs.Config.ListTmplBoundNamedApps:input_type -> pbcs.ListTmplBoundNamedAppsReq + 207, // 221: pbcs.Config.ListTmplBoundTmplSets:input_type -> pbcs.ListTmplBoundTmplSetsReq + 209, // 222: pbcs.Config.ListMultiTmplBoundTmplSets:input_type -> pbcs.ListMultiTmplBoundTmplSetsReq + 211, // 223: pbcs.Config.ListTmplRevisionBoundUnnamedApps:input_type -> pbcs.ListTmplRevisionBoundUnnamedAppsReq + 213, // 224: pbcs.Config.ListTmplRevisionBoundNamedApps:input_type -> pbcs.ListTmplRevisionBoundNamedAppsReq + 215, // 225: pbcs.Config.ListTmplSetBoundUnnamedApps:input_type -> pbcs.ListTmplSetBoundUnnamedAppsReq + 217, // 226: pbcs.Config.ListMultiTmplSetBoundUnnamedApps:input_type -> pbcs.ListMultiTmplSetBoundUnnamedAppsReq + 219, // 227: pbcs.Config.CheckTemplateSetReferencesApps:input_type -> pbcs.CheckTemplateSetReferencesAppsReq + 221, // 228: pbcs.Config.ListTmplSetBoundNamedApps:input_type -> pbcs.ListTmplSetBoundNamedAppsReq + 223, // 229: pbcs.Config.ListLatestTmplBoundUnnamedApps:input_type -> pbcs.ListLatestTmplBoundUnnamedAppsReq + 225, // 230: pbcs.Config.CreateTemplateVariable:input_type -> pbcs.CreateTemplateVariableReq + 229, // 231: pbcs.Config.DeleteTemplateVariable:input_type -> pbcs.DeleteTemplateVariableReq + 272, // 232: pbcs.Config.BatchDeleteTemplateVariable:input_type -> pbcs.BatchDeleteBizResourcesReq + 227, // 233: pbcs.Config.UpdateTemplateVariable:input_type -> pbcs.UpdateTemplateVariableReq + 231, // 234: pbcs.Config.ListTemplateVariables:input_type -> pbcs.ListTemplateVariablesReq + 233, // 235: pbcs.Config.ImportTemplateVariables:input_type -> pbcs.ImportTemplateVariablesReq + 235, // 236: pbcs.Config.ExtractAppTmplVariables:input_type -> pbcs.ExtractAppTmplVariablesReq + 237, // 237: pbcs.Config.GetAppTmplVariableRefs:input_type -> pbcs.GetAppTmplVariableRefsReq + 239, // 238: pbcs.Config.GetReleasedAppTmplVariableRefs:input_type -> pbcs.GetReleasedAppTmplVariableRefsReq + 241, // 239: pbcs.Config.UpdateAppTmplVariables:input_type -> pbcs.UpdateAppTmplVariablesReq + 243, // 240: pbcs.Config.ListAppTmplVariables:input_type -> pbcs.ListAppTmplVariablesReq + 245, // 241: pbcs.Config.ListReleasedAppTmplVariables:input_type -> pbcs.ListReleasedAppTmplVariablesReq + 247, // 242: pbcs.Config.CreateGroup:input_type -> pbcs.CreateGroupReq + 251, // 243: pbcs.Config.DeleteGroup:input_type -> pbcs.DeleteGroupReq + 272, // 244: pbcs.Config.BatchDeleteGroups:input_type -> pbcs.BatchDeleteBizResourcesReq + 249, // 245: pbcs.Config.UpdateGroup:input_type -> pbcs.UpdateGroupReq + 253, // 246: pbcs.Config.ListAllGroups:input_type -> pbcs.ListAllGroupsReq + 255, // 247: pbcs.Config.ListAppGroups:input_type -> pbcs.ListAppGroupsReq + 257, // 248: pbcs.Config.ListGroupReleasedApps:input_type -> pbcs.ListGroupReleasedAppsReq + 259, // 249: pbcs.Config.GetGroupByName:input_type -> pbcs.GetGroupByNameReq + 260, // 250: pbcs.Config.Publish:input_type -> pbcs.PublishReq + 261, // 251: pbcs.Config.GenerateReleaseAndPublish:input_type -> pbcs.GenerateReleaseAndPublishReq + 16, // 252: pbcs.Config.CreateCredentials:input_type -> pbcs.CreateCredentialReq + 14, // 253: pbcs.Config.ListCredentials:input_type -> pbcs.ListCredentialsReq + 8, // 254: pbcs.Config.DeleteCredential:input_type -> pbcs.DeleteCredentialsReq + 10, // 255: pbcs.Config.UpdateCredential:input_type -> pbcs.UpdateCredentialsReq + 12, // 256: pbcs.Config.CheckCredentialName:input_type -> pbcs.CheckCredentialNameReq + 4, // 257: pbcs.Config.ListCredentialScopes:input_type -> pbcs.ListCredentialScopesReq + 0, // 258: pbcs.Config.UpdateCredentialScope:input_type -> pbcs.UpdateCredentialScopeReq + 2, // 259: pbcs.Config.CredentialScopePreview:input_type -> pbcs.CredentialScopePreviewReq + 264, // 260: pbcs.Config.CreateKv:input_type -> pbcs.CreateKvReq + 266, // 261: pbcs.Config.UpdateKv:input_type -> pbcs.UpdateKvReq + 268, // 262: pbcs.Config.ListKvs:input_type -> pbcs.ListKvsReq + 270, // 263: pbcs.Config.DeleteKv:input_type -> pbcs.DeleteKvReq + 273, // 264: pbcs.Config.BatchDeleteKv:input_type -> pbcs.BatchDeleteAppResourcesReq + 275, // 265: pbcs.Config.BatchUpsertKvs:input_type -> pbcs.BatchUpsertKvsReq + 277, // 266: pbcs.Config.UnDeleteKv:input_type -> pbcs.UnDeleteKvReq + 279, // 267: pbcs.Config.BatchUnDeleteKv:input_type -> pbcs.BatchUnDeleteKvReq + 281, // 268: pbcs.Config.UndoKv:input_type -> pbcs.UndoKvReq + 283, // 269: pbcs.Config.ImportKvs:input_type -> pbcs.ImportKvsReq + 285, // 270: pbcs.Config.ListClients:input_type -> pbcs.ListClientsReq + 287, // 271: pbcs.Config.ListClientEvents:input_type -> pbcs.ListClientEventsReq + 289, // 272: pbcs.Config.RetryClients:input_type -> pbcs.RetryClientsReq + 291, // 273: pbcs.Config.ListClientQuerys:input_type -> pbcs.ListClientQuerysReq + 293, // 274: pbcs.Config.CreateClientQuery:input_type -> pbcs.CreateClientQueryReq + 295, // 275: pbcs.Config.UpdateClientQuery:input_type -> pbcs.UpdateClientQueryReq + 297, // 276: pbcs.Config.DeleteClientQuery:input_type -> pbcs.DeleteClientQueryReq + 299, // 277: pbcs.Config.CheckClientQueryName:input_type -> pbcs.CheckClientQueryNameReq + 399, // 278: pbcs.Config.ClientConfigVersionStatistics:input_type -> pbclient.ClientCommonReq + 399, // 279: pbcs.Config.ClientPullTrendStatistics:input_type -> pbclient.ClientCommonReq + 399, // 280: pbcs.Config.ClientPullStatistics:input_type -> pbclient.ClientCommonReq + 399, // 281: pbcs.Config.ClientLabelStatistics:input_type -> pbclient.ClientCommonReq + 399, // 282: pbcs.Config.ClientAnnotationStatistics:input_type -> pbclient.ClientCommonReq + 399, // 283: pbcs.Config.ClientVersionStatistics:input_type -> pbclient.ClientCommonReq + 301, // 284: pbcs.Config.ListClientLabelAndAnnotation:input_type -> pbcs.ListClientLabelAndAnnotationReq + 399, // 285: pbcs.Config.ClientSpecificFailedReason:input_type -> pbclient.ClientCommonReq + 302, // 286: pbcs.Config.CompareConfigItemConflicts:input_type -> pbcs.CompareConfigItemConflictsReq + 304, // 287: pbcs.Config.CompareKvConflicts:input_type -> pbcs.CompareKvConflictsReq + 306, // 288: pbcs.Config.GetTemplateAndNonTemplateCICount:input_type -> pbcs.GetTemplateAndNonTemplateCICountReq + 310, // 289: pbcs.Config.ListUserPrivileges:input_type -> pbcs.ListUserPrivilegesReq + 312, // 290: pbcs.Config.DeleteUserPrivilege:input_type -> pbcs.DeleteUserPrivilegesReq + 310, // 291: pbcs.Config.ListUserGroupPrivileges:input_type -> pbcs.ListUserPrivilegesReq + 312, // 292: pbcs.Config.DeleteUserGroupPrivilege:input_type -> pbcs.DeleteUserPrivilegesReq + 19, // 293: pbcs.Config.CreateApp:output_type -> pbcs.CreateAppResp + 350, // 294: pbcs.Config.UpdateApp:output_type -> pbapp.App + 22, // 295: pbcs.Config.DeleteApp:output_type -> pbcs.DeleteAppResp + 350, // 296: pbcs.Config.GetApp:output_type -> pbapp.App + 350, // 297: pbcs.Config.GetAppByName:output_type -> pbapp.App + 27, // 298: pbcs.Config.ListAppsRest:output_type -> pbcs.ListAppsResp + 27, // 299: pbcs.Config.ListAppsBySpaceRest:output_type -> pbcs.ListAppsResp + 31, // 300: pbcs.Config.CreateConfigItem:output_type -> pbcs.CreateConfigItemResp + 30, // 301: pbcs.Config.BatchUpsertConfigItems:output_type -> pbcs.BatchUpsertConfigItemsResp + 33, // 302: pbcs.Config.UpdateConfigItem:output_type -> pbcs.UpdateConfigItemResp + 35, // 303: pbcs.Config.DeleteConfigItem:output_type -> pbcs.DeleteConfigItemResp + 274, // 304: pbcs.Config.BatchDeleteConfigItems:output_type -> pbcs.BatchDeleteResp + 37, // 305: pbcs.Config.UnDeleteConfigItem:output_type -> pbcs.UnDeleteConfigItemResp + 39, // 306: pbcs.Config.BatchUnDeleteConfigItem:output_type -> pbcs.BatchUnDeleteConfigItemResp + 41, // 307: pbcs.Config.UndoConfigItem:output_type -> pbcs.UndoConfigItemResp + 43, // 308: pbcs.Config.GetConfigItem:output_type -> pbcs.GetConfigItemResp + 45, // 309: pbcs.Config.GetReleasedConfigItem:output_type -> pbcs.GetReleasedConfigItemResp + 47, // 310: pbcs.Config.ListConfigItems:output_type -> pbcs.ListConfigItemsResp + 49, // 311: pbcs.Config.ListReleasedConfigItems:output_type -> pbcs.ListReleasedConfigItemsResp + 51, // 312: pbcs.Config.ListConfigItemCount:output_type -> pbcs.ListConfigItemCountResp + 53, // 313: pbcs.Config.ListConfigItemByTuple:output_type -> pbcs.ListConfigItemByTupleResp + 55, // 314: pbcs.Config.GetReleasedKv:output_type -> pbcs.GetReleasedKvResp + 57, // 315: pbcs.Config.ListReleasedKvs:output_type -> pbcs.ListReleasedKvsResp + 59, // 316: pbcs.Config.UpdateConfigHook:output_type -> pbcs.UpdateConfigHookResp + 61, // 317: pbcs.Config.CreateRelease:output_type -> pbcs.CreateReleaseResp + 65, // 318: pbcs.Config.ListReleases:output_type -> pbcs.ListReleasesResp + 357, // 319: pbcs.Config.GetReleaseByName:output_type -> pbrelease.Release + 357, // 320: pbcs.Config.GetRelease:output_type -> pbrelease.Release + 69, // 321: pbcs.Config.DeprecateRelease:output_type -> pbcs.DeprecateReleaseResp + 71, // 322: pbcs.Config.UnDeprecateRelease:output_type -> pbcs.UnDeprecateReleaseResp + 73, // 323: pbcs.Config.DeleteRelease:output_type -> pbcs.DeleteReleaseResp + 63, // 324: pbcs.Config.CheckReleaseName:output_type -> pbcs.CheckReleaseNameResp + 75, // 325: pbcs.Config.CreateHook:output_type -> pbcs.CreateHookResp + 77, // 326: pbcs.Config.DeleteHook:output_type -> pbcs.DeleteHookResp + 274, // 327: pbcs.Config.BatchDeleteHook:output_type -> pbcs.BatchDeleteResp + 80, // 328: pbcs.Config.UpdateHook:output_type -> pbcs.UpdateHookResp + 82, // 329: pbcs.Config.ListHooks:output_type -> pbcs.ListHooksResp + 84, // 330: pbcs.Config.ListHookTags:output_type -> pbcs.ListHookTagsResp + 94, // 331: pbcs.Config.GetHook:output_type -> pbcs.GetHookResp + 86, // 332: pbcs.Config.CreateHookRevision:output_type -> pbcs.CreateHookRevisionResp + 88, // 333: pbcs.Config.ListHookRevisions:output_type -> pbcs.ListHookRevisionsResp + 90, // 334: pbcs.Config.DeleteHookRevision:output_type -> pbcs.DeleteHookRevisionResp + 92, // 335: pbcs.Config.PublishHookRevision:output_type -> pbcs.PublishHookRevisionResp + 394, // 336: pbcs.Config.GetHookRevision:output_type -> pbhr.HookRevision + 98, // 337: pbcs.Config.UpdateHookRevision:output_type -> pbcs.UpdateHookRevisionResp + 102, // 338: pbcs.Config.ListHookReferences:output_type -> pbcs.ListHookReferencesResp + 100, // 339: pbcs.Config.ListHookRevisionReferences:output_type -> pbcs.ListHookRevisionReferencesResp + 104, // 340: pbcs.Config.GetReleaseHook:output_type -> pbcs.GetReleaseHookResp + 106, // 341: pbcs.Config.CreateTemplateSpace:output_type -> pbcs.CreateTemplateSpaceResp + 110, // 342: pbcs.Config.DeleteTemplateSpace:output_type -> pbcs.DeleteTemplateSpaceResp + 108, // 343: pbcs.Config.UpdateTemplateSpace:output_type -> pbcs.UpdateTemplateSpaceResp + 112, // 344: pbcs.Config.ListTemplateSpaces:output_type -> pbcs.ListTemplateSpacesResp + 113, // 345: pbcs.Config.GetAllBizsOfTmplSpaces:output_type -> pbcs.GetAllBizsOfTmplSpacesResp + 115, // 346: pbcs.Config.CreateDefaultTmplSpace:output_type -> pbcs.CreateDefaultTmplSpaceResp + 117, // 347: pbcs.Config.ListTmplSpacesByIDs:output_type -> pbcs.ListTmplSpacesByIDsResp + 119, // 348: pbcs.Config.CreateTemplate:output_type -> pbcs.CreateTemplateResp + 123, // 349: pbcs.Config.DeleteTemplate:output_type -> pbcs.DeleteTemplateResp + 125, // 350: pbcs.Config.BatchDeleteTemplate:output_type -> pbcs.BatchDeleteTemplateResp + 121, // 351: pbcs.Config.UpdateTemplate:output_type -> pbcs.UpdateTemplateResp + 127, // 352: pbcs.Config.ListTemplates:output_type -> pbcs.ListTemplatesResp + 129, // 353: pbcs.Config.BatchUpsertTemplates:output_type -> pbcs.BatchUpsertTemplatesResp + 131, // 354: pbcs.Config.BatchUpdateTemplatePermissions:output_type -> pbcs.BatchUpdateTemplatePermissionsResp + 133, // 355: pbcs.Config.AddTmplsToTmplSets:output_type -> pbcs.AddTmplsToTmplSetsResp + 274, // 356: pbcs.Config.DeleteTmplsFromTmplSets:output_type -> pbcs.BatchDeleteResp + 136, // 357: pbcs.Config.ListTemplatesByIDs:output_type -> pbcs.ListTemplatesByIDsResp + 140, // 358: pbcs.Config.ListTemplatesNotBound:output_type -> pbcs.ListTemplatesNotBoundResp + 139, // 359: pbcs.Config.ListTemplateByTuple:output_type -> pbcs.ListTemplateByTupleResp + 142, // 360: pbcs.Config.ListTmplsOfTmplSet:output_type -> pbcs.ListTmplsOfTmplSetResp + 144, // 361: pbcs.Config.ListTemplateSetsAndRevisions:output_type -> pbcs.ListTemplateSetsAndRevisionsResp + 146, // 362: pbcs.Config.CreateTemplateRevision:output_type -> pbcs.CreateTemplateRevisionResp + 148, // 363: pbcs.Config.UpdateTemplateRevision:output_type -> pbcs.UpdateTemplateRevisionResp + 150, // 364: pbcs.Config.ListTemplateRevisions:output_type -> pbcs.ListTemplateRevisionsResp + 152, // 365: pbcs.Config.GetTemplateRevision:output_type -> pbcs.GetTemplateRevisionResp + 156, // 366: pbcs.Config.ListTemplateRevisionsByIDs:output_type -> pbcs.ListTemplateRevisionsByIDsResp + 158, // 367: pbcs.Config.ListTmplRevisionNamesByTmplIDs:output_type -> pbcs.ListTmplRevisionNamesByTmplIDsResp + 160, // 368: pbcs.Config.CreateTemplateSet:output_type -> pbcs.CreateTemplateSetResp + 164, // 369: pbcs.Config.DeleteTemplateSet:output_type -> pbcs.DeleteTemplateSetResp + 162, // 370: pbcs.Config.UpdateTemplateSet:output_type -> pbcs.UpdateTemplateSetResp + 166, // 371: pbcs.Config.ListTemplateSets:output_type -> pbcs.ListTemplateSetsResp + 168, // 372: pbcs.Config.ListAppTemplateSets:output_type -> pbcs.ListAppTemplateSetsResp + 170, // 373: pbcs.Config.ListTemplateSetsByIDs:output_type -> pbcs.ListTemplateSetsByIDsResp + 172, // 374: pbcs.Config.ListTmplSetsOfBiz:output_type -> pbcs.ListTmplSetsOfBizResp + 174, // 375: pbcs.Config.CreateAppTemplateBinding:output_type -> pbcs.CreateAppTemplateBindingResp + 178, // 376: pbcs.Config.DeleteAppTemplateBinding:output_type -> pbcs.DeleteAppTemplateBindingResp + 176, // 377: pbcs.Config.UpdateAppTemplateBinding:output_type -> pbcs.UpdateAppTemplateBindingResp + 180, // 378: pbcs.Config.ListAppTemplateBindings:output_type -> pbcs.ListAppTemplateBindingsResp + 182, // 379: pbcs.Config.ListAppBoundTmplRevisions:output_type -> pbcs.ListAppBoundTmplRevisionsResp + 184, // 380: pbcs.Config.ListReleasedAppBoundTmplRevisions:output_type -> pbcs.ListReleasedAppBoundTmplRevisionsResp + 186, // 381: pbcs.Config.GetReleasedAppBoundTmplRevision:output_type -> pbcs.GetReleasedAppBoundTmplRevisionResp + 188, // 382: pbcs.Config.UpdateAppBoundTmplRevisions:output_type -> pbcs.UpdateAppBoundTmplRevisionsResp + 190, // 383: pbcs.Config.DeleteAppBoundTmplSets:output_type -> pbcs.DeleteAppBoundTmplSetsResp + 192, // 384: pbcs.Config.RemoveAppBoundTmplSet:output_type -> pbcs.RemoveAppBoundTmplSetResp + 194, // 385: pbcs.Config.CheckAppTemplateBinding:output_type -> pbcs.CheckAppTemplateBindingResp + 196, // 386: pbcs.Config.ImportFromTemplateSetToApp:output_type -> pbcs.ImportFromTemplateSetToAppResp + 198, // 387: pbcs.Config.ListTmplBoundCounts:output_type -> pbcs.ListTmplBoundCountsResp + 200, // 388: pbcs.Config.ListTmplRevisionBoundCounts:output_type -> pbcs.ListTmplRevisionBoundCountsResp + 202, // 389: pbcs.Config.ListTmplSetBoundCounts:output_type -> pbcs.ListTmplSetBoundCountsResp + 204, // 390: pbcs.Config.ListTmplBoundUnnamedApps:output_type -> pbcs.ListTmplBoundUnnamedAppsResp + 206, // 391: pbcs.Config.ListTmplBoundNamedApps:output_type -> pbcs.ListTmplBoundNamedAppsResp + 208, // 392: pbcs.Config.ListTmplBoundTmplSets:output_type -> pbcs.ListTmplBoundTmplSetsResp + 210, // 393: pbcs.Config.ListMultiTmplBoundTmplSets:output_type -> pbcs.ListMultiTmplBoundTmplSetsResp + 212, // 394: pbcs.Config.ListTmplRevisionBoundUnnamedApps:output_type -> pbcs.ListTmplRevisionBoundUnnamedAppsResp + 214, // 395: pbcs.Config.ListTmplRevisionBoundNamedApps:output_type -> pbcs.ListTmplRevisionBoundNamedAppsResp + 216, // 396: pbcs.Config.ListTmplSetBoundUnnamedApps:output_type -> pbcs.ListTmplSetBoundUnnamedAppsResp + 218, // 397: pbcs.Config.ListMultiTmplSetBoundUnnamedApps:output_type -> pbcs.ListMultiTmplSetBoundUnnamedAppsResp + 220, // 398: pbcs.Config.CheckTemplateSetReferencesApps:output_type -> pbcs.CheckTemplateSetReferencesAppsResp + 222, // 399: pbcs.Config.ListTmplSetBoundNamedApps:output_type -> pbcs.ListTmplSetBoundNamedAppsResp + 224, // 400: pbcs.Config.ListLatestTmplBoundUnnamedApps:output_type -> pbcs.ListLatestTmplBoundUnnamedAppsResp + 226, // 401: pbcs.Config.CreateTemplateVariable:output_type -> pbcs.CreateTemplateVariableResp + 230, // 402: pbcs.Config.DeleteTemplateVariable:output_type -> pbcs.DeleteTemplateVariableResp + 274, // 403: pbcs.Config.BatchDeleteTemplateVariable:output_type -> pbcs.BatchDeleteResp + 228, // 404: pbcs.Config.UpdateTemplateVariable:output_type -> pbcs.UpdateTemplateVariableResp + 232, // 405: pbcs.Config.ListTemplateVariables:output_type -> pbcs.ListTemplateVariablesResp + 234, // 406: pbcs.Config.ImportTemplateVariables:output_type -> pbcs.ImportTemplateVariablesResp + 236, // 407: pbcs.Config.ExtractAppTmplVariables:output_type -> pbcs.ExtractAppTmplVariablesResp + 238, // 408: pbcs.Config.GetAppTmplVariableRefs:output_type -> pbcs.GetAppTmplVariableRefsResp + 240, // 409: pbcs.Config.GetReleasedAppTmplVariableRefs:output_type -> pbcs.GetReleasedAppTmplVariableRefsResp + 242, // 410: pbcs.Config.UpdateAppTmplVariables:output_type -> pbcs.UpdateAppTmplVariablesResp + 244, // 411: pbcs.Config.ListAppTmplVariables:output_type -> pbcs.ListAppTmplVariablesResp + 246, // 412: pbcs.Config.ListReleasedAppTmplVariables:output_type -> pbcs.ListReleasedAppTmplVariablesResp + 248, // 413: pbcs.Config.CreateGroup:output_type -> pbcs.CreateGroupResp + 252, // 414: pbcs.Config.DeleteGroup:output_type -> pbcs.DeleteGroupResp + 274, // 415: pbcs.Config.BatchDeleteGroups:output_type -> pbcs.BatchDeleteResp + 250, // 416: pbcs.Config.UpdateGroup:output_type -> pbcs.UpdateGroupResp + 254, // 417: pbcs.Config.ListAllGroups:output_type -> pbcs.ListAllGroupsResp + 256, // 418: pbcs.Config.ListAppGroups:output_type -> pbcs.ListAppGroupsResp + 258, // 419: pbcs.Config.ListGroupReleasedApps:output_type -> pbcs.ListGroupReleasedAppsResp + 400, // 420: pbcs.Config.GetGroupByName:output_type -> pbgroup.Group + 263, // 421: pbcs.Config.Publish:output_type -> pbcs.PublishResp + 263, // 422: pbcs.Config.GenerateReleaseAndPublish:output_type -> pbcs.PublishResp + 17, // 423: pbcs.Config.CreateCredentials:output_type -> pbcs.CreateCredentialResp + 15, // 424: pbcs.Config.ListCredentials:output_type -> pbcs.ListCredentialsResp + 9, // 425: pbcs.Config.DeleteCredential:output_type -> pbcs.DeleteCredentialsResp + 11, // 426: pbcs.Config.UpdateCredential:output_type -> pbcs.UpdateCredentialsResp + 13, // 427: pbcs.Config.CheckCredentialName:output_type -> pbcs.CheckCredentialNameResp + 5, // 428: pbcs.Config.ListCredentialScopes:output_type -> pbcs.ListCredentialScopesResp + 1, // 429: pbcs.Config.UpdateCredentialScope:output_type -> pbcs.UpdateCredentialScopeResp + 3, // 430: pbcs.Config.CredentialScopePreview:output_type -> pbcs.CredentialScopePreviewResp + 265, // 431: pbcs.Config.CreateKv:output_type -> pbcs.CreateKvResp + 267, // 432: pbcs.Config.UpdateKv:output_type -> pbcs.UpdateKvResp + 269, // 433: pbcs.Config.ListKvs:output_type -> pbcs.ListKvsResp + 271, // 434: pbcs.Config.DeleteKv:output_type -> pbcs.DeleteKvResp + 274, // 435: pbcs.Config.BatchDeleteKv:output_type -> pbcs.BatchDeleteResp + 276, // 436: pbcs.Config.BatchUpsertKvs:output_type -> pbcs.BatchUpsertKvsResp + 278, // 437: pbcs.Config.UnDeleteKv:output_type -> pbcs.UnDeleteKvResp + 280, // 438: pbcs.Config.BatchUnDeleteKv:output_type -> pbcs.BatchUnDeleteKvResp + 282, // 439: pbcs.Config.UndoKv:output_type -> pbcs.UndoKvResp + 284, // 440: pbcs.Config.ImportKvs:output_type -> pbcs.ImportKvsResp + 286, // 441: pbcs.Config.ListClients:output_type -> pbcs.ListClientsResp + 288, // 442: pbcs.Config.ListClientEvents:output_type -> pbcs.ListClientEventsResp + 290, // 443: pbcs.Config.RetryClients:output_type -> pbcs.RetryClientsResp + 292, // 444: pbcs.Config.ListClientQuerys:output_type -> pbcs.ListClientQuerysResp + 294, // 445: pbcs.Config.CreateClientQuery:output_type -> pbcs.CreateClientQueryResp + 296, // 446: pbcs.Config.UpdateClientQuery:output_type -> pbcs.UpdateClientQueryResp + 298, // 447: pbcs.Config.DeleteClientQuery:output_type -> pbcs.DeleteClientQueryResp + 300, // 448: pbcs.Config.CheckClientQueryName:output_type -> pbcs.CheckClientQueryNameResp + 388, // 449: pbcs.Config.ClientConfigVersionStatistics:output_type -> google.protobuf.Struct + 388, // 450: pbcs.Config.ClientPullTrendStatistics:output_type -> google.protobuf.Struct + 388, // 451: pbcs.Config.ClientPullStatistics:output_type -> google.protobuf.Struct + 388, // 452: pbcs.Config.ClientLabelStatistics:output_type -> google.protobuf.Struct + 388, // 453: pbcs.Config.ClientAnnotationStatistics:output_type -> google.protobuf.Struct + 388, // 454: pbcs.Config.ClientVersionStatistics:output_type -> google.protobuf.Struct + 388, // 455: pbcs.Config.ListClientLabelAndAnnotation:output_type -> google.protobuf.Struct + 388, // 456: pbcs.Config.ClientSpecificFailedReason:output_type -> google.protobuf.Struct + 303, // 457: pbcs.Config.CompareConfigItemConflicts:output_type -> pbcs.CompareConfigItemConflictsResp + 305, // 458: pbcs.Config.CompareKvConflicts:output_type -> pbcs.CompareKvConflictsResp + 307, // 459: pbcs.Config.GetTemplateAndNonTemplateCICount:output_type -> pbcs.GetTemplateAndNonTemplateCICountResp + 311, // 460: pbcs.Config.ListUserPrivileges:output_type -> pbcs.ListUserPrivilegesResp + 313, // 461: pbcs.Config.DeleteUserPrivilege:output_type -> pbcs.DeleteUserPrivilegesResp + 311, // 462: pbcs.Config.ListUserGroupPrivileges:output_type -> pbcs.ListUserPrivilegesResp + 313, // 463: pbcs.Config.DeleteUserGroupPrivilege:output_type -> pbcs.DeleteUserPrivilegesResp + 293, // [293:464] is the sub-list for method output_type + 122, // [122:293] is the sub-list for method input_type + 122, // [122:122] is the sub-list for extension type_name + 122, // [122:122] is the sub-list for extension extendee + 0, // [0:122] is the sub-list for field type_name } func init() { file_config_service_proto_init() } @@ -30994,7 +31752,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[308].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CredentialScopePreviewResp_Detail); i { + switch v := v.(*CreateUserPrivilegesReq); i { case 0: return &v.state case 1: @@ -31006,7 +31764,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[309].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchUpsertConfigItemsReq_ConfigItem); i { + switch v := v.(*CreateUserPrivilegesResp); i { case 0: return &v.state case 1: @@ -31018,7 +31776,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[310].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchUpsertConfigItemsReq_TemplateBinding); i { + switch v := v.(*ListUserPrivilegesReq); i { case 0: return &v.state case 1: @@ -31030,7 +31788,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[311].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListConfigItemByTupleReq_Item); i { + switch v := v.(*ListUserPrivilegesResp); i { case 0: return &v.state case 1: @@ -31042,7 +31800,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[312].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHooksResp_Detail); i { + switch v := v.(*DeleteUserPrivilegesReq); i { case 0: return &v.state case 1: @@ -31054,7 +31812,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[313].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHookRevisionsResp_ListHookRevisionsData); i { + switch v := v.(*DeleteUserPrivilegesResp); i { case 0: return &v.state case 1: @@ -31066,7 +31824,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[314].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetHookInfoSpec_Releases); i { + switch v := v.(*CredentialScopePreviewResp_Detail); i { case 0: return &v.state case 1: @@ -31078,7 +31836,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[315].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHookRevisionReferencesResp_Detail); i { + switch v := v.(*BatchUpsertConfigItemsReq_ConfigItem); i { case 0: return &v.state case 1: @@ -31090,7 +31848,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[316].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHookReferencesResp_Detail); i { + switch v := v.(*BatchUpsertConfigItemsReq_TemplateBinding); i { case 0: return &v.state case 1: @@ -31102,7 +31860,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[317].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetReleaseHookResp_Hook); i { + switch v := v.(*ListConfigItemByTupleReq_Item); i { case 0: return &v.state case 1: @@ -31114,7 +31872,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[318].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchUpsertTemplatesReq_Item); i { + switch v := v.(*ListHooksResp_Detail); i { case 0: return &v.state case 1: @@ -31126,7 +31884,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[319].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplateByTupleReq_Item); i { + switch v := v.(*ListHookRevisionsResp_ListHookRevisionsData); i { case 0: return &v.state case 1: @@ -31138,7 +31896,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[320].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplateByTupleResp_Item); i { + switch v := v.(*GetHookInfoSpec_Releases); i { case 0: return &v.state case 1: @@ -31150,7 +31908,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[321].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplateSetsAndRevisionsResp_Detail); i { + switch v := v.(*ListHookRevisionReferencesResp_Detail); i { case 0: return &v.state case 1: @@ -31162,7 +31920,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[322].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTemplateRevisionResp_TemplateRevision); i { + switch v := v.(*ListHookReferencesResp_Detail); i { case 0: return &v.state case 1: @@ -31174,7 +31932,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[323].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ImportFromTemplateSetToAppReq_Binding); i { + switch v := v.(*GetReleaseHookResp_Hook); i { case 0: return &v.state case 1: @@ -31186,7 +31944,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[324].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding); i { + switch v := v.(*BatchUpsertTemplatesReq_Item); i { case 0: return &v.state case 1: @@ -31198,7 +31956,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[325].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckTemplateSetReferencesAppsReq_Item); i { + switch v := v.(*ListTemplateByTupleReq_Item); i { case 0: return &v.state case 1: @@ -31210,7 +31968,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[326].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckTemplateSetReferencesAppsResp_Item); i { + switch v := v.(*ListTemplateByTupleResp_Item); i { case 0: return &v.state case 1: @@ -31222,7 +31980,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[327].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAllGroupsResp_ListAllGroupsData); i { + switch v := v.(*ListTemplateSetsAndRevisionsResp_Detail); i { case 0: return &v.state case 1: @@ -31234,7 +31992,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[328].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAllGroupsResp_ListAllGroupsData_BindApp); i { + switch v := v.(*GetTemplateRevisionResp_TemplateRevision); i { case 0: return &v.state case 1: @@ -31246,7 +32004,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[329].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAppGroupsResp_ListAppGroupsData); i { + switch v := v.(*ImportFromTemplateSetToAppReq_Binding); i { case 0: return &v.state case 1: @@ -31258,7 +32016,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[330].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListGroupReleasedAppsResp_ListGroupReleasedAppsData); i { + switch v := v.(*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding); i { case 0: return &v.state case 1: @@ -31270,7 +32028,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[331].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchUpsertKvsReq_Kv); i { + switch v := v.(*CheckTemplateSetReferencesAppsReq_Item); i { case 0: return &v.state case 1: @@ -31282,7 +32040,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[332].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListClientsReq_Order); i { + switch v := v.(*CheckTemplateSetReferencesAppsResp_Item); i { case 0: return &v.state case 1: @@ -31294,7 +32052,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[333].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListClientsResp_Item); i { + switch v := v.(*ListAllGroupsResp_ListAllGroupsData); i { case 0: return &v.state case 1: @@ -31306,7 +32064,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[334].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListClientEventsReq_Order); i { + switch v := v.(*ListAllGroupsResp_ListAllGroupsData_BindApp); i { case 0: return &v.state case 1: @@ -31318,7 +32076,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[335].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CompareConfigItemConflictsResp_NonTemplateConfig); i { + switch v := v.(*ListAppGroupsResp_ListAppGroupsData); i { case 0: return &v.state case 1: @@ -31330,7 +32088,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[336].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CompareConfigItemConflictsResp_TemplateConfig); i { + switch v := v.(*ListGroupReleasedAppsResp_ListGroupReleasedAppsData); i { case 0: return &v.state case 1: @@ -31342,7 +32100,7 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[337].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail); i { + switch v := v.(*BatchUpsertKvsReq_Kv); i { case 0: return &v.state case 1: @@ -31354,6 +32112,78 @@ func file_config_service_proto_init() { } } file_config_service_proto_msgTypes[338].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListClientsReq_Order); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_config_service_proto_msgTypes[339].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListClientsResp_Item); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_config_service_proto_msgTypes[340].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListClientEventsReq_Order); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_config_service_proto_msgTypes[341].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CompareConfigItemConflictsResp_NonTemplateConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_config_service_proto_msgTypes[342].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CompareConfigItemConflictsResp_TemplateConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_config_service_proto_msgTypes[343].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_config_service_proto_msgTypes[344].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CompareKvConflictsResp_Kv); i { case 0: return &v.state @@ -31365,6 +32195,18 @@ func file_config_service_proto_init() { return nil } } + file_config_service_proto_msgTypes[345].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListUserPrivilegesResp_Detail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_config_service_proto_msgTypes[14].OneofWrappers = []interface{}{} type x struct{} @@ -31373,7 +32215,7 @@ func file_config_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_config_service_proto_rawDesc, NumEnums: 0, - NumMessages: 339, + NumMessages: 346, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/protocol/config-server/config_service.pb.gw.go b/pkg/protocol/config-server/config_service.pb.gw.go index 2e71992a14..418d5fa7ad 100644 --- a/pkg/protocol/config-server/config_service.pb.gw.go +++ b/pkg/protocol/config-server/config_service.pb.gw.go @@ -14719,6 +14719,406 @@ func local_request_Config_GetTemplateAndNonTemplateCICount_0(ctx context.Context } +var ( + filter_Config_ListUserPrivileges_0 = &utilities.DoubleArray{Encoding: map[string]int{"biz_id": 0, "bizId": 1, "app_id": 2, "appId": 3}, Base: []int{1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 2, 3, 4, 5}} +) + +func request_Config_ListUserPrivileges_0(ctx context.Context, marshaler runtime.Marshaler, client ConfigClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListUserPrivilegesReq + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["biz_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "biz_id") + } + + protoReq.BizId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "biz_id", err) + } + + val, ok = pathParams["app_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "app_id") + } + + protoReq.AppId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "app_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Config_ListUserPrivileges_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListUserPrivileges(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Config_ListUserPrivileges_0(ctx context.Context, marshaler runtime.Marshaler, server ConfigServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListUserPrivilegesReq + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["biz_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "biz_id") + } + + protoReq.BizId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "biz_id", err) + } + + val, ok = pathParams["app_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "app_id") + } + + protoReq.AppId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "app_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Config_ListUserPrivileges_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListUserPrivileges(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Config_DeleteUserPrivilege_0 = &utilities.DoubleArray{Encoding: map[string]int{"biz_id": 0, "bizId": 1, "app_id": 2, "appId": 3, "id": 4}, Base: []int{1, 1, 2, 3, 4, 6, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 6}} +) + +func request_Config_DeleteUserPrivilege_0(ctx context.Context, marshaler runtime.Marshaler, client ConfigClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteUserPrivilegesReq + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["biz_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "biz_id") + } + + protoReq.BizId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "biz_id", err) + } + + val, ok = pathParams["app_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "app_id") + } + + protoReq.AppId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "app_id", err) + } + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Config_DeleteUserPrivilege_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.DeleteUserPrivilege(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Config_DeleteUserPrivilege_0(ctx context.Context, marshaler runtime.Marshaler, server ConfigServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteUserPrivilegesReq + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["biz_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "biz_id") + } + + protoReq.BizId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "biz_id", err) + } + + val, ok = pathParams["app_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "app_id") + } + + protoReq.AppId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "app_id", err) + } + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Config_DeleteUserPrivilege_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.DeleteUserPrivilege(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Config_ListUserGroupPrivileges_0 = &utilities.DoubleArray{Encoding: map[string]int{"biz_id": 0, "bizId": 1, "app_id": 2, "appId": 3}, Base: []int{1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 2, 3, 4, 5}} +) + +func request_Config_ListUserGroupPrivileges_0(ctx context.Context, marshaler runtime.Marshaler, client ConfigClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListUserPrivilegesReq + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["biz_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "biz_id") + } + + protoReq.BizId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "biz_id", err) + } + + val, ok = pathParams["app_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "app_id") + } + + protoReq.AppId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "app_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Config_ListUserGroupPrivileges_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListUserGroupPrivileges(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Config_ListUserGroupPrivileges_0(ctx context.Context, marshaler runtime.Marshaler, server ConfigServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListUserPrivilegesReq + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["biz_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "biz_id") + } + + protoReq.BizId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "biz_id", err) + } + + val, ok = pathParams["app_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "app_id") + } + + protoReq.AppId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "app_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Config_ListUserGroupPrivileges_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListUserGroupPrivileges(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Config_DeleteUserGroupPrivilege_0 = &utilities.DoubleArray{Encoding: map[string]int{"biz_id": 0, "bizId": 1, "app_id": 2, "appId": 3, "id": 4}, Base: []int{1, 1, 2, 3, 4, 6, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 6}} +) + +func request_Config_DeleteUserGroupPrivilege_0(ctx context.Context, marshaler runtime.Marshaler, client ConfigClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteUserPrivilegesReq + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["biz_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "biz_id") + } + + protoReq.BizId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "biz_id", err) + } + + val, ok = pathParams["app_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "app_id") + } + + protoReq.AppId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "app_id", err) + } + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Config_DeleteUserGroupPrivilege_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.DeleteUserGroupPrivilege(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Config_DeleteUserGroupPrivilege_0(ctx context.Context, marshaler runtime.Marshaler, server ConfigServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteUserPrivilegesReq + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["biz_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "biz_id") + } + + protoReq.BizId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "biz_id", err) + } + + val, ok = pathParams["app_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "app_id") + } + + protoReq.AppId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "app_id", err) + } + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Config_DeleteUserGroupPrivilege_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.DeleteUserGroupPrivilege(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterConfigHandlerServer registers the http handlers for service Config to "mux". // UnaryRPC :call ConfigServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -18900,6 +19300,106 @@ func RegisterConfigHandlerServer(ctx context.Context, mux *runtime.ServeMux, ser }) + mux.Handle("GET", pattern_Config_ListUserPrivileges_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) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pbcs.Config/ListUserPrivileges", runtime.WithHTTPPathPattern("/api/v1/config/biz/{biz_id}/apps/{app_id}/user_privileges")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Config_ListUserPrivileges_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Config_ListUserPrivileges_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Config_DeleteUserPrivilege_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) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pbcs.Config/DeleteUserPrivilege", runtime.WithHTTPPathPattern("/api/v1/config/biz/{biz_id}/apps/{app_id}/user_privileges/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Config_DeleteUserPrivilege_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Config_DeleteUserPrivilege_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Config_ListUserGroupPrivileges_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) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pbcs.Config/ListUserGroupPrivileges", runtime.WithHTTPPathPattern("/api/v1/config/biz/{biz_id}/apps/{app_id}/user_group_privileges")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Config_ListUserGroupPrivileges_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Config_ListUserGroupPrivileges_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Config_DeleteUserGroupPrivilege_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) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pbcs.Config/DeleteUserGroupPrivilege", runtime.WithHTTPPathPattern("/api/v1/config/biz/{biz_id}/apps/{app_id}/user_group_privileges/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Config_DeleteUserGroupPrivilege_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Config_DeleteUserGroupPrivilege_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -22615,6 +23115,94 @@ func RegisterConfigHandlerClient(ctx context.Context, mux *runtime.ServeMux, cli }) + mux.Handle("GET", pattern_Config_ListUserPrivileges_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) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/pbcs.Config/ListUserPrivileges", runtime.WithHTTPPathPattern("/api/v1/config/biz/{biz_id}/apps/{app_id}/user_privileges")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Config_ListUserPrivileges_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Config_ListUserPrivileges_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Config_DeleteUserPrivilege_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) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/pbcs.Config/DeleteUserPrivilege", runtime.WithHTTPPathPattern("/api/v1/config/biz/{biz_id}/apps/{app_id}/user_privileges/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Config_DeleteUserPrivilege_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Config_DeleteUserPrivilege_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Config_ListUserGroupPrivileges_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) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/pbcs.Config/ListUserGroupPrivileges", runtime.WithHTTPPathPattern("/api/v1/config/biz/{biz_id}/apps/{app_id}/user_group_privileges")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Config_ListUserGroupPrivileges_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Config_ListUserGroupPrivileges_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Config_DeleteUserGroupPrivilege_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) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/pbcs.Config/DeleteUserGroupPrivilege", runtime.WithHTTPPathPattern("/api/v1/config/biz/{biz_id}/apps/{app_id}/user_group_privileges/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Config_DeleteUserGroupPrivilege_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Config_DeleteUserGroupPrivilege_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -22952,6 +23540,14 @@ var ( pattern_Config_CompareKvConflicts_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 2, 8}, []string{"api", "v1", "config", "biz", "biz_id", "apps", "app_id", "kvs", "compare_conflicts"}, "")) pattern_Config_GetTemplateAndNonTemplateCICount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6, 2, 7}, []string{"api", "v1", "config", "biz_id", "apps", "app_id", "config_items", "count"}, "")) + + pattern_Config_ListUserPrivileges_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7}, []string{"api", "v1", "config", "biz", "biz_id", "apps", "app_id", "user_privileges"}, "")) + + pattern_Config_DeleteUserPrivilege_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "config", "biz", "biz_id", "apps", "app_id", "user_privileges", "id"}, "")) + + pattern_Config_ListUserGroupPrivileges_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7}, []string{"api", "v1", "config", "biz", "biz_id", "apps", "app_id", "user_group_privileges"}, "")) + + pattern_Config_DeleteUserGroupPrivilege_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "config", "biz", "biz_id", "apps", "app_id", "user_group_privileges", "id"}, "")) ) var ( @@ -23288,4 +23884,12 @@ var ( forward_Config_CompareKvConflicts_0 = runtime.ForwardResponseMessage forward_Config_GetTemplateAndNonTemplateCICount_0 = runtime.ForwardResponseMessage + + forward_Config_ListUserPrivileges_0 = runtime.ForwardResponseMessage + + forward_Config_DeleteUserPrivilege_0 = runtime.ForwardResponseMessage + + forward_Config_ListUserGroupPrivileges_0 = runtime.ForwardResponseMessage + + forward_Config_DeleteUserGroupPrivilege_0 = runtime.ForwardResponseMessage ) diff --git a/pkg/protocol/config-server/config_service.proto b/pkg/protocol/config-server/config_service.proto index 02ef4e2f0c..e487b75517 100644 --- a/pkg/protocol/config-server/config_service.proto +++ b/pkg/protocol/config-server/config_service.proto @@ -1083,6 +1083,30 @@ option (google.api.http) = { get: "/api/v1/config/biz_id/{biz_id}/apps/{app_id}/config_items/count" }; } + + // user privileges related interface + rpc ListUserPrivileges(ListUserPrivilegesReq) returns (ListUserPrivilegesResp) { + option (google.api.http) = { + get: "/api/v1/config/biz/{biz_id}/apps/{app_id}/user_privileges" + }; + }; + rpc DeleteUserPrivilege(DeleteUserPrivilegesReq) returns (DeleteUserPrivilegesResp) { + option (google.api.http) = { + delete: "/api/v1/config/biz/{biz_id}/apps/{app_id}/user_privileges/{id}" + }; + }; + + // user group privileges related interface + rpc ListUserGroupPrivileges(ListUserPrivilegesReq) returns (ListUserPrivilegesResp) { + option (google.api.http) = { + get: "/api/v1/config/biz/{biz_id}/apps/{app_id}/user_group_privileges" + }; + }; + rpc DeleteUserGroupPrivilege(DeleteUserPrivilegesReq) returns (DeleteUserPrivilegesResp) { + option (google.api.http) = { + delete: "/api/v1/config/biz/{biz_id}/apps/{app_id}/user_group_privileges/{id}" + }; + }; } message UpdateCredentialScopeReq { @@ -1260,6 +1284,8 @@ message CreateConfigItemReq { string privilege = 10; string sign = 11; uint64 byte_size = 12; + uint32 uid = 13; + uint32 gid = 14; } message BatchUpsertConfigItemsReq { @@ -1277,6 +1303,8 @@ message BatchUpsertConfigItemsReq { string sign = 9; uint64 byte_size = 10; string md5 = 11; + uint32 uid = 12; + uint32 gid = 13; } uint32 biz_id = 1; uint32 app_id = 2; @@ -1314,6 +1342,8 @@ message UpdateConfigItemReq { string privilege = 11; string sign = 12; uint64 byte_size = 13; + uint32 uid = 14; + uint32 gid = 15; } message UpdateConfigItemResp {} @@ -1847,6 +1877,8 @@ message CreateTemplateReq { string sign = 13; uint64 byte_size = 14; repeated uint32 template_set_ids = 15; + uint32 uid = 16; + uint32 gid = 17; } message CreateTemplateResp { @@ -1913,6 +1945,8 @@ message BatchUpsertTemplatesReq { string sign = 10; uint64 byte_size = 11; string md5 = 12; + uint32 uid = 13; + uint32 gid = 14; } uint32 biz_id = 1; uint32 template_space_id = 2; @@ -1935,6 +1969,8 @@ message BatchUpdateTemplatePermissionsReq { uint32 template_set_id = 8; // 套餐ID, 具体操作的哪个套餐 bool no_set_specified = 9; // 是否未指定套餐, 区分全部套餐和未指定套餐 uint32 template_space_id = 10; // 模板空间ID + uint32 uid = 11; + uint32 gid = 12; } message BatchUpdateTemplatePermissionsResp { @@ -2071,6 +2107,8 @@ message UpdateTemplateRevisionReq { string sign = 13; uint64 byte_size = 14; uint32 template_revision_id = 15; + uint32 uid = 16; + uint32 gid = 17; } message UpdateTemplateRevisionResp { @@ -2118,6 +2156,8 @@ message GetTemplateRevisionResp { string create_at = 15; string md5 = 16; bool is_latest = 17; + uint32 uid = 18; + uint32 gid = 19; } TemplateRevision detail = 1; } @@ -3087,6 +3127,7 @@ message CompareConfigItemConflictsResp { uint32 template_revision_id = 2; bool is_latest = 3; repeated pbtv.TemplateVariableSpec variables = 5; + pbci.FilePermission permission = 6; } uint32 template_space_id = 1; string template_space_name = 2; @@ -3130,4 +3171,50 @@ message GetTemplateAndNonTemplateCICountReq { message GetTemplateAndNonTemplateCICountResp { uint64 config_item_count = 1; uint64 template_config_item_count = 2; -} \ No newline at end of file +} + +message CreateUserPrivilegesReq { + uint32 biz_id = 1; + uint32 app_id = 2; + uint32 uid = 3; + uint32 gid = 4; + string user = 5; + string user_group = 6; + string privilege_type = 7; // 权限类型:system、custom + bool read_only = 8; // 只读 +} + +message CreateUserPrivilegesResp { + uint32 id = 1; +} + +message ListUserPrivilegesReq { + uint32 biz_id = 1; + uint32 app_id = 2; + uint32 template_space_id = 3; + uint32 start = 4; + uint32 limit = 5; + bool all = 6; + string name = 7; // 名称 +} + +message ListUserPrivilegesResp { + message Detail { + uint32 id = 1; + string name = 2; + string privilege_type = 3; + bool read_only = 4; + uint32 pid = 5; // 权限ID + } + uint32 count = 1; + repeated Detail details = 2; +} + +message DeleteUserPrivilegesReq { + uint32 id = 1; + uint32 biz_id = 2; + uint32 app_id = 3; + uint32 template_space_id = 4; +} + +message DeleteUserPrivilegesResp {} \ No newline at end of file diff --git a/pkg/protocol/config-server/config_service_grpc.pb.go b/pkg/protocol/config-server/config_service_grpc.pb.go index 110686a8d5..cffd097126 100644 --- a/pkg/protocol/config-server/config_service_grpc.pb.go +++ b/pkg/protocol/config-server/config_service_grpc.pb.go @@ -193,6 +193,10 @@ const ( Config_CompareConfigItemConflicts_FullMethodName = "/pbcs.Config/CompareConfigItemConflicts" Config_CompareKvConflicts_FullMethodName = "/pbcs.Config/CompareKvConflicts" Config_GetTemplateAndNonTemplateCICount_FullMethodName = "/pbcs.Config/GetTemplateAndNonTemplateCICount" + Config_ListUserPrivileges_FullMethodName = "/pbcs.Config/ListUserPrivileges" + Config_DeleteUserPrivilege_FullMethodName = "/pbcs.Config/DeleteUserPrivilege" + Config_ListUserGroupPrivileges_FullMethodName = "/pbcs.Config/ListUserGroupPrivileges" + Config_DeleteUserGroupPrivilege_FullMethodName = "/pbcs.Config/DeleteUserGroupPrivilege" ) // ConfigClient is the client API for Config service. @@ -278,14 +282,14 @@ type ConfigClient interface { ListTemplateRevisions(ctx context.Context, in *ListTemplateRevisionsReq, opts ...grpc.CallOption) (*ListTemplateRevisionsResp, error) GetTemplateRevision(ctx context.Context, in *GetTemplateRevisionReq, opts ...grpc.CallOption) (*GetTemplateRevisionResp, error) // 暂时不对外开发(删除模版后,服务引用的latest版本会回退到上一个老版本) - // rpc DeleteTemplateRevision(DeleteTemplateRevisionReq) returns - // (DeleteTemplateRevisionResp) { + //rpc DeleteTemplateRevision(DeleteTemplateRevisionReq) returns + //(DeleteTemplateRevisionResp) { // - // option (google.api.http) = { - // delete : - // "/api/v1/config/biz/{biz_id}/template_spaces/{template_space_id}/templates/{template_id}/template_revisions/{template_revision_id}" - // }; - // } + //option (google.api.http) = { + //delete : + //"/api/v1/config/biz/{biz_id}/template_spaces/{template_space_id}/templates/{template_id}/template_revisions/{template_revision_id}" + //}; + //} ListTemplateRevisionsByIDs(ctx context.Context, in *ListTemplateRevisionsByIDsReq, opts ...grpc.CallOption) (*ListTemplateRevisionsByIDsResp, error) ListTmplRevisionNamesByTmplIDs(ctx context.Context, in *ListTmplRevisionNamesByTmplIDsReq, opts ...grpc.CallOption) (*ListTmplRevisionNamesByTmplIDsResp, error) CreateTemplateSet(ctx context.Context, in *CreateTemplateSetReq, opts ...grpc.CallOption) (*CreateTemplateSetResp, error) @@ -384,6 +388,12 @@ type ConfigClient interface { CompareKvConflicts(ctx context.Context, in *CompareKvConflictsReq, opts ...grpc.CallOption) (*CompareKvConflictsResp, error) // 获取模板和非模板配置项数量 GetTemplateAndNonTemplateCICount(ctx context.Context, in *GetTemplateAndNonTemplateCICountReq, opts ...grpc.CallOption) (*GetTemplateAndNonTemplateCICountResp, error) + // user privileges related interface + ListUserPrivileges(ctx context.Context, in *ListUserPrivilegesReq, opts ...grpc.CallOption) (*ListUserPrivilegesResp, error) + DeleteUserPrivilege(ctx context.Context, in *DeleteUserPrivilegesReq, opts ...grpc.CallOption) (*DeleteUserPrivilegesResp, error) + // user group privileges related interface + ListUserGroupPrivileges(ctx context.Context, in *ListUserPrivilegesReq, opts ...grpc.CallOption) (*ListUserPrivilegesResp, error) + DeleteUserGroupPrivilege(ctx context.Context, in *DeleteUserPrivilegesReq, opts ...grpc.CallOption) (*DeleteUserPrivilegesResp, error) } type configClient struct { @@ -1897,6 +1907,42 @@ func (c *configClient) GetTemplateAndNonTemplateCICount(ctx context.Context, in return out, nil } +func (c *configClient) ListUserPrivileges(ctx context.Context, in *ListUserPrivilegesReq, opts ...grpc.CallOption) (*ListUserPrivilegesResp, error) { + out := new(ListUserPrivilegesResp) + err := c.cc.Invoke(ctx, Config_ListUserPrivileges_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *configClient) DeleteUserPrivilege(ctx context.Context, in *DeleteUserPrivilegesReq, opts ...grpc.CallOption) (*DeleteUserPrivilegesResp, error) { + out := new(DeleteUserPrivilegesResp) + err := c.cc.Invoke(ctx, Config_DeleteUserPrivilege_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *configClient) ListUserGroupPrivileges(ctx context.Context, in *ListUserPrivilegesReq, opts ...grpc.CallOption) (*ListUserPrivilegesResp, error) { + out := new(ListUserPrivilegesResp) + err := c.cc.Invoke(ctx, Config_ListUserGroupPrivileges_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *configClient) DeleteUserGroupPrivilege(ctx context.Context, in *DeleteUserPrivilegesReq, opts ...grpc.CallOption) (*DeleteUserPrivilegesResp, error) { + out := new(DeleteUserPrivilegesResp) + err := c.cc.Invoke(ctx, Config_DeleteUserGroupPrivilege_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ConfigServer is the server API for Config service. // All implementations should embed UnimplementedConfigServer // for forward compatibility @@ -1980,14 +2026,14 @@ type ConfigServer interface { ListTemplateRevisions(context.Context, *ListTemplateRevisionsReq) (*ListTemplateRevisionsResp, error) GetTemplateRevision(context.Context, *GetTemplateRevisionReq) (*GetTemplateRevisionResp, error) // 暂时不对外开发(删除模版后,服务引用的latest版本会回退到上一个老版本) - // rpc DeleteTemplateRevision(DeleteTemplateRevisionReq) returns - // (DeleteTemplateRevisionResp) { + //rpc DeleteTemplateRevision(DeleteTemplateRevisionReq) returns + //(DeleteTemplateRevisionResp) { // - // option (google.api.http) = { - // delete : - // "/api/v1/config/biz/{biz_id}/template_spaces/{template_space_id}/templates/{template_id}/template_revisions/{template_revision_id}" - // }; - // } + //option (google.api.http) = { + //delete : + //"/api/v1/config/biz/{biz_id}/template_spaces/{template_space_id}/templates/{template_id}/template_revisions/{template_revision_id}" + //}; + //} ListTemplateRevisionsByIDs(context.Context, *ListTemplateRevisionsByIDsReq) (*ListTemplateRevisionsByIDsResp, error) ListTmplRevisionNamesByTmplIDs(context.Context, *ListTmplRevisionNamesByTmplIDsReq) (*ListTmplRevisionNamesByTmplIDsResp, error) CreateTemplateSet(context.Context, *CreateTemplateSetReq) (*CreateTemplateSetResp, error) @@ -2086,6 +2132,12 @@ type ConfigServer interface { CompareKvConflicts(context.Context, *CompareKvConflictsReq) (*CompareKvConflictsResp, error) // 获取模板和非模板配置项数量 GetTemplateAndNonTemplateCICount(context.Context, *GetTemplateAndNonTemplateCICountReq) (*GetTemplateAndNonTemplateCICountResp, error) + // user privileges related interface + ListUserPrivileges(context.Context, *ListUserPrivilegesReq) (*ListUserPrivilegesResp, error) + DeleteUserPrivilege(context.Context, *DeleteUserPrivilegesReq) (*DeleteUserPrivilegesResp, error) + // user group privileges related interface + ListUserGroupPrivileges(context.Context, *ListUserPrivilegesReq) (*ListUserPrivilegesResp, error) + DeleteUserGroupPrivilege(context.Context, *DeleteUserPrivilegesReq) (*DeleteUserPrivilegesResp, error) } // UnimplementedConfigServer should be embedded to have forward compatible implementations. @@ -2593,6 +2645,18 @@ func (UnimplementedConfigServer) CompareKvConflicts(context.Context, *CompareKvC func (UnimplementedConfigServer) GetTemplateAndNonTemplateCICount(context.Context, *GetTemplateAndNonTemplateCICountReq) (*GetTemplateAndNonTemplateCICountResp, error) { return nil, status.Errorf(codes.Unimplemented, "method GetTemplateAndNonTemplateCICount not implemented") } +func (UnimplementedConfigServer) ListUserPrivileges(context.Context, *ListUserPrivilegesReq) (*ListUserPrivilegesResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListUserPrivileges not implemented") +} +func (UnimplementedConfigServer) DeleteUserPrivilege(context.Context, *DeleteUserPrivilegesReq) (*DeleteUserPrivilegesResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteUserPrivilege not implemented") +} +func (UnimplementedConfigServer) ListUserGroupPrivileges(context.Context, *ListUserPrivilegesReq) (*ListUserPrivilegesResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListUserGroupPrivileges not implemented") +} +func (UnimplementedConfigServer) DeleteUserGroupPrivilege(context.Context, *DeleteUserPrivilegesReq) (*DeleteUserPrivilegesResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteUserGroupPrivilege not implemented") +} // UnsafeConfigServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to ConfigServer will @@ -5611,6 +5675,78 @@ func _Config_GetTemplateAndNonTemplateCICount_Handler(srv interface{}, ctx conte return interceptor(ctx, in, info, handler) } +func _Config_ListUserPrivileges_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListUserPrivilegesReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ConfigServer).ListUserPrivileges(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Config_ListUserPrivileges_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ConfigServer).ListUserPrivileges(ctx, req.(*ListUserPrivilegesReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _Config_DeleteUserPrivilege_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteUserPrivilegesReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ConfigServer).DeleteUserPrivilege(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Config_DeleteUserPrivilege_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ConfigServer).DeleteUserPrivilege(ctx, req.(*DeleteUserPrivilegesReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _Config_ListUserGroupPrivileges_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListUserPrivilegesReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ConfigServer).ListUserGroupPrivileges(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Config_ListUserGroupPrivileges_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ConfigServer).ListUserGroupPrivileges(ctx, req.(*ListUserPrivilegesReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _Config_DeleteUserGroupPrivilege_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteUserPrivilegesReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ConfigServer).DeleteUserGroupPrivilege(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Config_DeleteUserGroupPrivilege_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ConfigServer).DeleteUserGroupPrivilege(ctx, req.(*DeleteUserPrivilegesReq)) + } + return interceptor(ctx, in, info, handler) +} + // Config_ServiceDesc is the grpc.ServiceDesc for Config service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -6286,6 +6422,22 @@ var Config_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetTemplateAndNonTemplateCICount", Handler: _Config_GetTemplateAndNonTemplateCICount_Handler, }, + { + MethodName: "ListUserPrivileges", + Handler: _Config_ListUserPrivileges_Handler, + }, + { + MethodName: "DeleteUserPrivilege", + Handler: _Config_DeleteUserPrivilege_Handler, + }, + { + MethodName: "ListUserGroupPrivileges", + Handler: _Config_ListUserGroupPrivileges_Handler, + }, + { + MethodName: "DeleteUserGroupPrivilege", + Handler: _Config_DeleteUserGroupPrivilege_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "config_service.proto", diff --git a/pkg/protocol/core/Makefile b/pkg/protocol/core/Makefile index f73cabc0ad..5eaae76ba7 100644 --- a/pkg/protocol/core/Makefile +++ b/pkg/protocol/core/Makefile @@ -26,6 +26,7 @@ all: @cd client && make @cd client-event && make @cd client-query && make + @cd user-privilege && make clean: @cd base && make clean @@ -55,3 +56,4 @@ clean: @cd client && make clean @cd client-event && make clean @cd client-query && make clean + @cd user-privilege && make clean diff --git a/pkg/protocol/core/app-template-binding/app_template_binding.pb.go b/pkg/protocol/core/app-template-binding/app_template_binding.pb.go index beddd8972a..e69c7e2a59 100644 --- a/pkg/protocol/core/app-template-binding/app_template_binding.pb.go +++ b/pkg/protocol/core/app-template-binding/app_template_binding.pb.go @@ -8,6 +8,7 @@ package pbatb import ( base "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/base" + config_item "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/config-item" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -522,29 +523,27 @@ type AppBoundTmplRevision struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TemplateSpaceId uint32 `protobuf:"varint,1,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` - TemplateSpaceName string `protobuf:"bytes,2,opt,name=template_space_name,json=templateSpaceName,proto3" json:"template_space_name,omitempty"` - TemplateSetId uint32 `protobuf:"varint,3,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` - TemplateSetName string `protobuf:"bytes,4,opt,name=template_set_name,json=templateSetName,proto3" json:"template_set_name,omitempty"` - TemplateId uint32 `protobuf:"varint,5,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` - Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` - Path string `protobuf:"bytes,7,opt,name=path,proto3" json:"path,omitempty"` - TemplateRevisionId uint32 `protobuf:"varint,8,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` - IsLatest bool `protobuf:"varint,9,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"` - TemplateRevisionName string `protobuf:"bytes,10,opt,name=template_revision_name,json=templateRevisionName,proto3" json:"template_revision_name,omitempty"` - TemplateRevisionMemo string `protobuf:"bytes,11,opt,name=template_revision_memo,json=templateRevisionMemo,proto3" json:"template_revision_memo,omitempty"` - FileType string `protobuf:"bytes,12,opt,name=file_type,json=fileType,proto3" json:"file_type,omitempty"` - FileMode string `protobuf:"bytes,13,opt,name=file_mode,json=fileMode,proto3" json:"file_mode,omitempty"` - User string `protobuf:"bytes,14,opt,name=user,proto3" json:"user,omitempty"` - UserGroup string `protobuf:"bytes,15,opt,name=user_group,json=userGroup,proto3" json:"user_group,omitempty"` - Privilege string `protobuf:"bytes,16,opt,name=privilege,proto3" json:"privilege,omitempty"` - Signature string `protobuf:"bytes,17,opt,name=signature,proto3" json:"signature,omitempty"` - ByteSize uint64 `protobuf:"varint,18,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` - Creator string `protobuf:"bytes,19,opt,name=creator,proto3" json:"creator,omitempty"` - CreateAt string `protobuf:"bytes,20,opt,name=create_at,json=createAt,proto3" json:"create_at,omitempty"` - FileState string `protobuf:"bytes,21,opt,name=file_state,json=fileState,proto3" json:"file_state,omitempty"` - Md5 string `protobuf:"bytes,22,opt,name=md5,proto3" json:"md5,omitempty"` - IsConflict bool `protobuf:"varint,23,opt,name=is_conflict,json=isConflict,proto3" json:"is_conflict,omitempty"` + TemplateSpaceId uint32 `protobuf:"varint,1,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` + TemplateSpaceName string `protobuf:"bytes,2,opt,name=template_space_name,json=templateSpaceName,proto3" json:"template_space_name,omitempty"` + TemplateSetId uint32 `protobuf:"varint,3,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` + TemplateSetName string `protobuf:"bytes,4,opt,name=template_set_name,json=templateSetName,proto3" json:"template_set_name,omitempty"` + TemplateId uint32 `protobuf:"varint,5,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` + Path string `protobuf:"bytes,7,opt,name=path,proto3" json:"path,omitempty"` + TemplateRevisionId uint32 `protobuf:"varint,8,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` + IsLatest bool `protobuf:"varint,9,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"` + TemplateRevisionName string `protobuf:"bytes,10,opt,name=template_revision_name,json=templateRevisionName,proto3" json:"template_revision_name,omitempty"` + TemplateRevisionMemo string `protobuf:"bytes,11,opt,name=template_revision_memo,json=templateRevisionMemo,proto3" json:"template_revision_memo,omitempty"` + FileType string `protobuf:"bytes,12,opt,name=file_type,json=fileType,proto3" json:"file_type,omitempty"` + FileMode string `protobuf:"bytes,13,opt,name=file_mode,json=fileMode,proto3" json:"file_mode,omitempty"` + Signature string `protobuf:"bytes,14,opt,name=signature,proto3" json:"signature,omitempty"` + ByteSize uint64 `protobuf:"varint,15,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` + Creator string `protobuf:"bytes,16,opt,name=creator,proto3" json:"creator,omitempty"` + CreateAt string `protobuf:"bytes,17,opt,name=create_at,json=createAt,proto3" json:"create_at,omitempty"` + FileState string `protobuf:"bytes,18,opt,name=file_state,json=fileState,proto3" json:"file_state,omitempty"` + Md5 string `protobuf:"bytes,19,opt,name=md5,proto3" json:"md5,omitempty"` + IsConflict bool `protobuf:"varint,20,opt,name=is_conflict,json=isConflict,proto3" json:"is_conflict,omitempty"` + Permission *config_item.FilePermission `protobuf:"bytes,21,opt,name=permission,proto3" json:"permission,omitempty"` } func (x *AppBoundTmplRevision) Reset() { @@ -670,27 +669,6 @@ func (x *AppBoundTmplRevision) GetFileMode() string { return "" } -func (x *AppBoundTmplRevision) GetUser() string { - if x != nil { - return x.User - } - return "" -} - -func (x *AppBoundTmplRevision) GetUserGroup() string { - if x != nil { - return x.UserGroup - } - return "" -} - -func (x *AppBoundTmplRevision) GetPrivilege() string { - if x != nil { - return x.Privilege - } - return "" -} - func (x *AppBoundTmplRevision) GetSignature() string { if x != nil { return x.Signature @@ -740,37 +718,42 @@ func (x *AppBoundTmplRevision) GetIsConflict() bool { return false } +func (x *AppBoundTmplRevision) GetPermission() *config_item.FilePermission { + if x != nil { + return x.Permission + } + return nil +} + // ReleasedAppBoundTmplRevision is released app bound template revision type ReleasedAppBoundTmplRevision struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TemplateSpaceId uint32 `protobuf:"varint,1,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` - TemplateSpaceName string `protobuf:"bytes,2,opt,name=template_space_name,json=templateSpaceName,proto3" json:"template_space_name,omitempty"` - TemplateSetId uint32 `protobuf:"varint,3,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` - TemplateSetName string `protobuf:"bytes,4,opt,name=template_set_name,json=templateSetName,proto3" json:"template_set_name,omitempty"` - TemplateId uint32 `protobuf:"varint,5,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` - Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` - Path string `protobuf:"bytes,7,opt,name=path,proto3" json:"path,omitempty"` - TemplateRevisionId uint32 `protobuf:"varint,8,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` - IsLatest bool `protobuf:"varint,9,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"` - TemplateRevisionName string `protobuf:"bytes,10,opt,name=template_revision_name,json=templateRevisionName,proto3" json:"template_revision_name,omitempty"` - TemplateRevisionMemo string `protobuf:"bytes,11,opt,name=template_revision_memo,json=templateRevisionMemo,proto3" json:"template_revision_memo,omitempty"` - FileType string `protobuf:"bytes,12,opt,name=file_type,json=fileType,proto3" json:"file_type,omitempty"` - FileMode string `protobuf:"bytes,13,opt,name=file_mode,json=fileMode,proto3" json:"file_mode,omitempty"` - User string `protobuf:"bytes,14,opt,name=user,proto3" json:"user,omitempty"` - UserGroup string `protobuf:"bytes,15,opt,name=user_group,json=userGroup,proto3" json:"user_group,omitempty"` - Privilege string `protobuf:"bytes,16,opt,name=privilege,proto3" json:"privilege,omitempty"` - Signature string `protobuf:"bytes,17,opt,name=signature,proto3" json:"signature,omitempty"` - ByteSize uint64 `protobuf:"varint,18,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` - OriginSignature string `protobuf:"bytes,19,opt,name=origin_signature,json=originSignature,proto3" json:"origin_signature,omitempty"` - OriginByteSize uint64 `protobuf:"varint,20,opt,name=origin_byte_size,json=originByteSize,proto3" json:"origin_byte_size,omitempty"` - Creator string `protobuf:"bytes,21,opt,name=creator,proto3" json:"creator,omitempty"` - Reviser string `protobuf:"bytes,22,opt,name=reviser,proto3" json:"reviser,omitempty"` - CreateAt string `protobuf:"bytes,23,opt,name=create_at,json=createAt,proto3" json:"create_at,omitempty"` - UpdateAt string `protobuf:"bytes,24,opt,name=update_at,json=updateAt,proto3" json:"update_at,omitempty"` - Md5 string `protobuf:"bytes,25,opt,name=md5,proto3" json:"md5,omitempty"` + TemplateSpaceId uint32 `protobuf:"varint,1,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` + TemplateSpaceName string `protobuf:"bytes,2,opt,name=template_space_name,json=templateSpaceName,proto3" json:"template_space_name,omitempty"` + TemplateSetId uint32 `protobuf:"varint,3,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` + TemplateSetName string `protobuf:"bytes,4,opt,name=template_set_name,json=templateSetName,proto3" json:"template_set_name,omitempty"` + TemplateId uint32 `protobuf:"varint,5,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` + Path string `protobuf:"bytes,7,opt,name=path,proto3" json:"path,omitempty"` + TemplateRevisionId uint32 `protobuf:"varint,8,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` + IsLatest bool `protobuf:"varint,9,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"` + TemplateRevisionName string `protobuf:"bytes,10,opt,name=template_revision_name,json=templateRevisionName,proto3" json:"template_revision_name,omitempty"` + TemplateRevisionMemo string `protobuf:"bytes,11,opt,name=template_revision_memo,json=templateRevisionMemo,proto3" json:"template_revision_memo,omitempty"` + FileType string `protobuf:"bytes,12,opt,name=file_type,json=fileType,proto3" json:"file_type,omitempty"` + FileMode string `protobuf:"bytes,13,opt,name=file_mode,json=fileMode,proto3" json:"file_mode,omitempty"` + Signature string `protobuf:"bytes,14,opt,name=signature,proto3" json:"signature,omitempty"` + ByteSize uint64 `protobuf:"varint,15,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` + OriginSignature string `protobuf:"bytes,16,opt,name=origin_signature,json=originSignature,proto3" json:"origin_signature,omitempty"` + OriginByteSize uint64 `protobuf:"varint,17,opt,name=origin_byte_size,json=originByteSize,proto3" json:"origin_byte_size,omitempty"` + Creator string `protobuf:"bytes,18,opt,name=creator,proto3" json:"creator,omitempty"` + Reviser string `protobuf:"bytes,19,opt,name=reviser,proto3" json:"reviser,omitempty"` + CreateAt string `protobuf:"bytes,20,opt,name=create_at,json=createAt,proto3" json:"create_at,omitempty"` + UpdateAt string `protobuf:"bytes,21,opt,name=update_at,json=updateAt,proto3" json:"update_at,omitempty"` + Md5 string `protobuf:"bytes,22,opt,name=md5,proto3" json:"md5,omitempty"` + Permission *config_item.FilePermission `protobuf:"bytes,23,opt,name=permission,proto3" json:"permission,omitempty"` } func (x *ReleasedAppBoundTmplRevision) Reset() { @@ -896,27 +879,6 @@ func (x *ReleasedAppBoundTmplRevision) GetFileMode() string { return "" } -func (x *ReleasedAppBoundTmplRevision) GetUser() string { - if x != nil { - return x.User - } - return "" -} - -func (x *ReleasedAppBoundTmplRevision) GetUserGroup() string { - if x != nil { - return x.UserGroup - } - return "" -} - -func (x *ReleasedAppBoundTmplRevision) GetPrivilege() string { - if x != nil { - return x.Privilege - } - return "" -} - func (x *ReleasedAppBoundTmplRevision) GetSignature() string { if x != nil { return x.Signature @@ -980,6 +942,13 @@ func (x *ReleasedAppBoundTmplRevision) GetMd5() string { return "" } +func (x *ReleasedAppBoundTmplRevision) GetPermission() *config_item.FilePermission { + if x != nil { + return x.Permission + } + return nil +} + // Conflict is the conflict when app binds templates type Conflict struct { state protoimpl.MessageState @@ -1457,63 +1426,238 @@ var file_app_template_binding_proto_rawDesc = []byte{ 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70, 0x62, 0x61, 0x74, 0x62, 0x1a, 0x21, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x62, 0x61, 0x73, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xca, 0x01, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x31, 0x0a, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, - 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, - 0x12, 0x43, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2d, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, + 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xca, 0x01, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x31, + 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, + 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, + 0x63, 0x12, 0x43, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, + 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, + 0x65, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xab, 0x02, 0x0a, 0x16, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x2c, 0x0a, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x10, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x28, 0x0a, + 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2e, + 0x0a, 0x13, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x11, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x32, + 0x0a, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x73, 0x22, 0x88, 0x01, 0x0a, 0x0f, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x4d, + 0x0a, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x61, + 0x74, 0x62, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x89, 0x01, + 0x0a, 0x17, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, + 0x69, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x1c, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, - 0x2e, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0xab, 0x02, 0x0a, 0x16, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2c, - 0x0a, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x10, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x28, 0x0a, 0x10, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2e, 0x0a, - 0x13, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x11, 0x6c, 0x61, 0x74, 0x65, - 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x32, 0x0a, - 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x22, 0x88, 0x01, 0x0a, 0x0f, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x4d, 0x0a, - 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x61, 0x74, - 0x62, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x89, 0x01, 0x0a, - 0x17, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, + 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0xaf, 0x07, 0x0a, 0x1e, 0x41, 0x70, 0x70, 0x42, + 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x53, 0x65, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, + 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x2a, + 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x6d, 0x0a, 0x12, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, + 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x53, 0x65, 0x74, 0x2e, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xed, 0x04, 0x0a, 0x18, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x34, + 0x0a, 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, + 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, + 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, + 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, + 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, + 0x6c, 0x65, 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x6c, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x64, 0x35, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x63, + 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, + 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x22, 0x8b, 0x08, 0x0a, 0x26, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, + 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, + 0x79, 0x53, 0x65, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, + 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x75, 0x0a, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x46, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x53, 0x65, 0x74, 0x2e, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xb9, 0x05, 0x0a, 0x18, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, + 0x12, 0x34, 0x0a, 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1b, 0x0a, 0x09, + 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, + 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, + 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x72, + 0x69, 0x67, 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x28, 0x0a, + 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x42, + 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x6f, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x69, 0x73, 0x65, 0x72, 0x18, 0x12, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x76, 0x69, 0x73, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x15, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6d, 0x64, 0x35, 0x22, 0xfe, 0x05, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x42, + 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, - 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x1c, 0x41, 0x70, 0x70, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, - 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0xaf, 0x07, 0x0a, 0x1e, 0x41, 0x70, 0x70, 0x42, 0x6f, - 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x53, 0x65, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, + 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, + 0x0a, 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09, + 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x6f, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, + 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x64, + 0x35, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, + 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, + 0x63, 0x74, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x46, 0x69, + 0x6c, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x65, + 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xd2, 0x06, 0x0a, 0x1c, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, + 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, @@ -1524,240 +1668,65 @@ var file_app_template_binding_proto_rawDesc = []byte{ 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x6d, 0x0a, 0x12, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, - 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x53, 0x65, 0x74, 0x2e, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xed, 0x04, 0x0a, 0x18, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, - 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x30, - 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, - 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, - 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, - 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, - 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, - 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, - 0x65, 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, - 0x6c, 0x65, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x12, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6d, 0x64, 0x35, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x22, 0x8b, 0x08, 0x0a, 0x26, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, - 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, - 0x53, 0x65, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, - 0x2e, 0x0a, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x75, 0x0a, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x46, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x53, 0x65, 0x74, 0x2e, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xb9, 0x05, 0x0a, 0x18, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, - 0x34, 0x0a, 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x66, - 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, - 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, - 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, - 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x28, 0x0a, 0x10, - 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x42, 0x79, - 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, - 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, - 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x69, 0x73, 0x65, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x72, 0x65, 0x76, 0x69, 0x73, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x5f, 0x61, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x41, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x15, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6d, 0x64, 0x35, 0x22, 0x99, 0x06, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x42, 0x6f, - 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, - 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, - 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, - 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, - 0x65, 0x6d, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x6f, 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x15, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x64, - 0x35, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, - 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, - 0x63, 0x74, 0x22, 0xed, 0x06, 0x0a, 0x1c, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, - 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, - 0x2e, 0x0a, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x30, 0x0a, 0x14, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, - 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x74, 0x65, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, + 0x74, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, - 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, - 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, - 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x12, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x29, 0x0a, - 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x14, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0e, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x42, 0x79, 0x74, 0x65, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x15, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, - 0x72, 0x65, 0x76, 0x69, 0x73, 0x65, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, - 0x65, 0x76, 0x69, 0x73, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x5f, 0x61, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x41, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, - 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, - 0x64, 0x35, 0x22, 0xa4, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x12, - 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x66, 0x5a, 0x64, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, - 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, - 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, - 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2d, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x3b, 0x70, 0x62, 0x61, 0x74, - 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, + 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1b, 0x0a, + 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, + 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, + 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x72, + 0x69, 0x67, 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x28, 0x0a, + 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x42, + 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x6f, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x69, 0x73, 0x65, 0x72, 0x18, 0x13, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x76, 0x69, 0x73, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x16, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6d, 0x64, 0x35, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, + 0x63, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa4, 0x01, + 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, + 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, + 0x23, 0x0a, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x66, 0x5a, 0x64, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, + 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, + 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x62, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x3b, 0x70, 0x62, 0x61, 0x74, 0x62, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1787,6 +1756,7 @@ var file_app_template_binding_proto_goTypes = []interface{}{ (*AppBoundTmplRevisionGroupBySetTemplateRevisionDetail)(nil), // 10: pbatb.AppBoundTmplRevisionGroupBySet.template_revision_detail (*ReleasedAppBoundTmplRevisionGroupBySetTemplateRevisionDetail)(nil), // 11: pbatb.ReleasedAppBoundTmplRevisionGroupBySet.template_revision_detail (*base.Revision)(nil), // 12: pbbase.Revision + (*config_item.FilePermission)(nil), // 13: pbci.FilePermission } var file_app_template_binding_proto_depIdxs = []int32{ 1, // 0: pbatb.AppTemplateBinding.spec:type_name -> pbatb.AppTemplateBindingSpec @@ -1796,11 +1766,13 @@ var file_app_template_binding_proto_depIdxs = []int32{ 3, // 4: pbatb.TemplateBinding.template_revisions:type_name -> pbatb.TemplateRevisionBinding 10, // 5: pbatb.AppBoundTmplRevisionGroupBySet.template_revisions:type_name -> pbatb.AppBoundTmplRevisionGroupBySet.template_revision_detail 11, // 6: pbatb.ReleasedAppBoundTmplRevisionGroupBySet.template_revisions:type_name -> pbatb.ReleasedAppBoundTmplRevisionGroupBySet.template_revision_detail - 7, // [7:7] is the sub-list for method output_type - 7, // [7:7] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name + 13, // 7: pbatb.AppBoundTmplRevision.permission:type_name -> pbci.FilePermission + 13, // 8: pbatb.ReleasedAppBoundTmplRevision.permission:type_name -> pbci.FilePermission + 9, // [9:9] is the sub-list for method output_type + 9, // [9:9] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name } func init() { file_app_template_binding_proto_init() } diff --git a/pkg/protocol/core/app-template-binding/app_template_binding.proto b/pkg/protocol/core/app-template-binding/app_template_binding.proto index c70673aeef..41bc4511de 100644 --- a/pkg/protocol/core/app-template-binding/app_template_binding.proto +++ b/pkg/protocol/core/app-template-binding/app_template_binding.proto @@ -1,6 +1,7 @@ syntax = "proto3"; import "pkg/protocol/core/base/base.proto"; +import "pkg/protocol/core/config-item/config_item.proto"; package pbatb; @@ -119,16 +120,14 @@ message AppBoundTmplRevision { string template_revision_memo = 11; string file_type = 12; string file_mode = 13; - string user = 14; - string user_group = 15; - string privilege = 16; - string signature = 17; - uint64 byte_size = 18; - string creator = 19; - string create_at = 20; - string file_state = 21; - string md5 = 22; - bool is_conflict = 23; + string signature = 14; + uint64 byte_size = 15; + string creator = 16; + string create_at = 17; + string file_state = 18; + string md5 = 19; + bool is_conflict = 20; + pbci.FilePermission permission = 21; } // ReleasedAppBoundTmplRevision is released app bound template revision @@ -146,18 +145,16 @@ message ReleasedAppBoundTmplRevision { string template_revision_memo = 11; string file_type = 12; string file_mode = 13; - string user = 14; - string user_group = 15; - string privilege = 16; - string signature = 17; - uint64 byte_size = 18; - string origin_signature = 19; - uint64 origin_byte_size = 20; - string creator = 21; - string reviser = 22; - string create_at = 23; - string update_at = 24; - string md5 = 25; + string signature = 14; + uint64 byte_size = 15; + string origin_signature = 16; + uint64 origin_byte_size = 17; + string creator = 18; + string reviser = 19; + string create_at = 20; + string update_at = 21; + string md5 = 22; + pbci.FilePermission permission = 23; } // Conflict is the conflict when app binds templates diff --git a/pkg/protocol/core/app-template-binding/convert.go b/pkg/protocol/core/app-template-binding/convert.go index 79fa8806a6..8636bf2037 100644 --- a/pkg/protocol/core/app-template-binding/convert.go +++ b/pkg/protocol/core/app-template-binding/convert.go @@ -18,6 +18,7 @@ import ( "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" pbbase "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/base" + pbci "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/config-item" ) // AppTemplateBinding convert pb AppTemplateBinding to table AppTemplateBinding @@ -221,9 +222,6 @@ func PbReleasedAppBoundTmplRevision(s *table.ReleasedAppTemplate) *ReleasedAppBo TemplateRevisionMemo: s.Spec.TemplateRevisionMemo, FileType: s.Spec.FileType, FileMode: s.Spec.FileMode, - User: s.Spec.User, - UserGroup: s.Spec.UserGroup, - Privilege: s.Spec.Privilege, Signature: s.Spec.Signature, ByteSize: s.Spec.ByteSize, OriginSignature: s.Spec.OriginSignature, @@ -233,6 +231,7 @@ func PbReleasedAppBoundTmplRevision(s *table.ReleasedAppTemplate) *ReleasedAppBo CreateAt: s.Revision.CreatedAt.Format(time.RFC3339), UpdateAt: s.Revision.UpdatedAt.Format(time.RFC3339), Md5: s.Spec.Md5, + Permission: pbci.PbFilePermission(s.Spec.Permission), } } @@ -254,13 +253,11 @@ func PbAppBoundTmplRevisionsFromReleased(releasedTmpls []*table.ReleasedAppTempl TemplateRevisionMemo: r.Spec.TemplateRevisionMemo, FileType: r.Spec.FileType, FileMode: r.Spec.FileMode, - User: r.Spec.User, - UserGroup: r.Spec.UserGroup, - Privilege: r.Spec.Privilege, Signature: r.Spec.Signature, ByteSize: r.Spec.ByteSize, Creator: r.Revision.Creator, CreateAt: r.Revision.CreatedAt.Format(time.RFC3339), + Permission: pbci.PbFilePermission(r.Spec.Permission), } } return tmplRevisions diff --git a/pkg/protocol/core/config-item/config_item.pb.go b/pkg/protocol/core/config-item/config_item.pb.go index 29d0bbdae4..45cdc1b52e 100644 --- a/pkg/protocol/core/config-item/config_item.pb.go +++ b/pkg/protocol/core/config-item/config_item.pb.go @@ -279,6 +279,8 @@ type FilePermission struct { User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` UserGroup string `protobuf:"bytes,2,opt,name=user_group,json=userGroup,proto3" json:"user_group,omitempty"` Privilege string `protobuf:"bytes,3,opt,name=privilege,proto3" json:"privilege,omitempty"` + Uid uint32 `protobuf:"varint,4,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint32 `protobuf:"varint,5,opt,name=gid,proto3" json:"gid,omitempty"` } func (x *FilePermission) Reset() { @@ -334,6 +336,20 @@ func (x *FilePermission) GetPrivilege() string { return "" } +func (x *FilePermission) GetUid() uint32 { + if x != nil { + return x.Uid + } + return 0 +} + +func (x *FilePermission) GetGid() uint32 { + if x != nil { + return x.Gid + } + return 0 +} + // ListConfigItemCounts source resource reference: pkg/dal/table/config_item.go type ListConfigItemCounts struct { state protoimpl.MessageState @@ -444,26 +460,28 @@ var file_config_item_proto_rawDesc = []byte{ 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x0e, 0x46, 0x69, 0x6c, 0x65, - 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, - 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, - 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x22, 0x60, 0x0a, 0x14, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x42, 0x5c, 0x5a, - 0x5a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, - 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, - 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2d, 0x69, 0x74, 0x65, 0x6d, 0x3b, 0x70, 0x62, 0x63, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x85, 0x01, 0x0a, 0x0e, 0x46, 0x69, 0x6c, + 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x75, + 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, + 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, + 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x67, 0x69, 0x64, + 0x22, 0x60, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x41, 0x74, 0x42, 0x5c, 0x5a, 0x5a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, + 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, + 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2d, 0x69, 0x74, 0x65, 0x6d, 0x3b, 0x70, 0x62, 0x63, 0x69, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/protocol/core/config-item/config_item.proto b/pkg/protocol/core/config-item/config_item.proto index 4dbee16078..4de466a60e 100644 --- a/pkg/protocol/core/config-item/config_item.proto +++ b/pkg/protocol/core/config-item/config_item.proto @@ -40,6 +40,8 @@ message FilePermission { string user = 1; string user_group = 2; string privilege = 3; + uint32 uid = 4; + uint32 gid = 5; } // ListConfigItemCounts source resource reference: pkg/dal/table/config_item.go diff --git a/pkg/protocol/core/config-item/convert.go b/pkg/protocol/core/config-item/convert.go index b5fc62fc0c..674f7e8f70 100644 --- a/pkg/protocol/core/config-item/convert.go +++ b/pkg/protocol/core/config-item/convert.go @@ -62,6 +62,8 @@ func (m *FilePermission) FilePermission() *table.FilePermission { User: m.User, UserGroup: m.UserGroup, Privilege: m.Privilege, + Uid: m.Uid, + Gid: m.Gid, } } @@ -75,6 +77,8 @@ func PbFilePermission(fp *table.FilePermission) *FilePermission { User: fp.User, UserGroup: fp.UserGroup, Privilege: fp.Privilege, + Uid: fp.Uid, + Gid: fp.Gid, } } diff --git a/pkg/protocol/core/user-privilege/Makefile b/pkg/protocol/core/user-privilege/Makefile new file mode 100644 index 0000000000..296efe0f5c --- /dev/null +++ b/pkg/protocol/core/user-privilege/Makefile @@ -0,0 +1 @@ +include ../../../../scripts/makefile/core_pb.mk diff --git a/pkg/protocol/core/user-privilege/convert.go b/pkg/protocol/core/user-privilege/convert.go new file mode 100644 index 0000000000..285c05f3a5 --- /dev/null +++ b/pkg/protocol/core/user-privilege/convert.go @@ -0,0 +1,113 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Package pbup xxx +package pbup + +import ( + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" +) + +// UserPrivilegeSpec convert pb UserPrivilege to table UserPrivilege +// nolint:revive +func (up *UserPrivilege) UserPrivilege() *table.UserPrivilege { + if up == nil { + return nil + } + + return &table.UserPrivilege{ + ID: up.GetId(), + Spec: &table.UserPrivilegeSpec{}, + Attachment: &table.UserPrivilegeAttachment{}, + Revision: &table.Revision{}, + } +} + +// UserPrivilegeSpec convert pb UserPrivilegeSpec to table UserPrivilegeSpec +// nolint:revive +func (up *UserPrivilegeSpec) UserPrivilegeSpec() *table.UserPrivilegeSpec { + if up == nil { + return nil + } + + return &table.UserPrivilegeSpec{ + User: up.User, + PrivilegeType: table.PrivilegeType(up.PrivilegeType), + ReadOnly: up.ReadOnly, + } +} + +// UserPrivilegeAttachment convert pb UserPrivilegeAttachment to table UserPrivilegeAttachment +// nolint:revive +func (up *UserPrivilegeAttachment) UserPrivilegeAttachment() *table.UserPrivilegeAttachment { + if up == nil { + return nil + } + + return &table.UserPrivilegeAttachment{ + BizID: up.BizId, + AppID: up.AppId, + Uid: up.Uid, + } +} + +// PbUserPrivilegeSpec convert table UserPrivilegeSpec to pb UserPrivilegeSpec +// nolint:revive +func PbUserPrivilegeSpec(spec *table.UserPrivilegeSpec) *UserPrivilegeSpec { + if spec == nil { + return nil + } + + return &UserPrivilegeSpec{ + User: spec.User, + PrivilegeType: string(spec.PrivilegeType), + ReadOnly: spec.ReadOnly, + } +} + +// PbUserPrivilegeAttachment convert table UserPrivilegeAttachment to pb UserPrivilegeAttachment +// nolint:revive +func PbUserPrivilegeAttachment(attachment *table.UserPrivilegeAttachment) *UserPrivilegeAttachment { + if attachment == nil { + return nil + } + return &UserPrivilegeAttachment{ + BizId: attachment.BizID, + AppId: attachment.AppID, + Uid: attachment.Uid, + } +} + +// PbUserPrivilege convert table UserPrivilege to pb UserPrivilege +func PbUserPrivilege(up *table.UserPrivilege) *UserPrivilege { + if up == nil { + return nil + } + + return &UserPrivilege{ + Id: up.ID, + Spec: PbUserPrivilegeSpec(up.Spec), + Attachment: PbUserPrivilegeAttachment(up.Attachment), + } +} + +// PbUserPrivileges convert table UserPrivilege to pb UserPrivilege +func PbUserPrivileges(up []*table.UserPrivilege) []*UserPrivilege { + if up == nil { + return make([]*UserPrivilege, 0) + } + result := make([]*UserPrivilege, 0) + for _, v := range up { + result = append(result, PbUserPrivilege(v)) + } + return result +} diff --git a/pkg/protocol/core/user-privilege/user_privilege.pb.go b/pkg/protocol/core/user-privilege/user_privilege.pb.go new file mode 100644 index 0000000000..f2e4ff9de2 --- /dev/null +++ b/pkg/protocol/core/user-privilege/user_privilege.pb.go @@ -0,0 +1,375 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v4.25.1 +// source: user_privilege.proto + +package pbup + +import ( + base "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/base" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// UserPrivilege source resource reference: pkg/dal/table/user-privilege.go +type UserPrivilege struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Spec *UserPrivilegeSpec `protobuf:"bytes,2,opt,name=spec,proto3" json:"spec,omitempty"` + Attachment *UserPrivilegeAttachment `protobuf:"bytes,3,opt,name=attachment,proto3" json:"attachment,omitempty"` + Revision *base.Revision `protobuf:"bytes,4,opt,name=revision,proto3" json:"revision,omitempty"` +} + +func (x *UserPrivilege) Reset() { + *x = UserPrivilege{} + if protoimpl.UnsafeEnabled { + mi := &file_user_privilege_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserPrivilege) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserPrivilege) ProtoMessage() {} + +func (x *UserPrivilege) ProtoReflect() protoreflect.Message { + mi := &file_user_privilege_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserPrivilege.ProtoReflect.Descriptor instead. +func (*UserPrivilege) Descriptor() ([]byte, []int) { + return file_user_privilege_proto_rawDescGZIP(), []int{0} +} + +func (x *UserPrivilege) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *UserPrivilege) GetSpec() *UserPrivilegeSpec { + if x != nil { + return x.Spec + } + return nil +} + +func (x *UserPrivilege) GetAttachment() *UserPrivilegeAttachment { + if x != nil { + return x.Attachment + } + return nil +} + +func (x *UserPrivilege) GetRevision() *base.Revision { + if x != nil { + return x.Revision + } + return nil +} + +// UserPrivilegeSpec source resource reference: pkg/dal/table/user-privilege.go +type UserPrivilegeSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + PrivilegeType string `protobuf:"bytes,2,opt,name=privilege_type,json=privilegeType,proto3" json:"privilege_type,omitempty"` + ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` +} + +func (x *UserPrivilegeSpec) Reset() { + *x = UserPrivilegeSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_user_privilege_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserPrivilegeSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserPrivilegeSpec) ProtoMessage() {} + +func (x *UserPrivilegeSpec) ProtoReflect() protoreflect.Message { + mi := &file_user_privilege_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserPrivilegeSpec.ProtoReflect.Descriptor instead. +func (*UserPrivilegeSpec) Descriptor() ([]byte, []int) { + return file_user_privilege_proto_rawDescGZIP(), []int{1} +} + +func (x *UserPrivilegeSpec) GetUser() string { + if x != nil { + return x.User + } + return "" +} + +func (x *UserPrivilegeSpec) GetPrivilegeType() string { + if x != nil { + return x.PrivilegeType + } + return "" +} + +func (x *UserPrivilegeSpec) GetReadOnly() bool { + if x != nil { + return x.ReadOnly + } + return false +} + +// UserPrivilegeAttachment source resource reference: pkg/dal/table/user-privilege.go +type UserPrivilegeAttachment struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` + AppId uint32 `protobuf:"varint,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + Uid uint32 `protobuf:"varint,3,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint32 `protobuf:"varint,4,opt,name=gid,proto3" json:"gid,omitempty"` + TemplateSpaceId uint32 `protobuf:"varint,5,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` +} + +func (x *UserPrivilegeAttachment) Reset() { + *x = UserPrivilegeAttachment{} + if protoimpl.UnsafeEnabled { + mi := &file_user_privilege_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserPrivilegeAttachment) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserPrivilegeAttachment) ProtoMessage() {} + +func (x *UserPrivilegeAttachment) ProtoReflect() protoreflect.Message { + mi := &file_user_privilege_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserPrivilegeAttachment.ProtoReflect.Descriptor instead. +func (*UserPrivilegeAttachment) Descriptor() ([]byte, []int) { + return file_user_privilege_proto_rawDescGZIP(), []int{2} +} + +func (x *UserPrivilegeAttachment) GetBizId() uint32 { + if x != nil { + return x.BizId + } + return 0 +} + +func (x *UserPrivilegeAttachment) GetAppId() uint32 { + if x != nil { + return x.AppId + } + return 0 +} + +func (x *UserPrivilegeAttachment) GetUid() uint32 { + if x != nil { + return x.Uid + } + return 0 +} + +func (x *UserPrivilegeAttachment) GetGid() uint32 { + if x != nil { + return x.Gid + } + return 0 +} + +func (x *UserPrivilegeAttachment) GetTemplateSpaceId() uint32 { + if x != nil { + return x.TemplateSpaceId + } + return 0 +} + +var File_user_privilege_proto protoreflect.FileDescriptor + +var file_user_privilege_proto_rawDesc = []byte{ + 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x70, 0x62, 0x75, 0x70, 0x1a, 0x21, 0x70, 0x6b, + 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x62, 0x61, 0x73, 0x65, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0xb9, 0x01, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x70, 0x62, 0x75, 0x70, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, + 0x6c, 0x65, 0x67, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x3d, + 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x75, 0x70, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, + 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x6b, 0x0a, 0x11, 0x55, + 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x53, 0x70, 0x65, 0x63, + 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x75, 0x73, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, + 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x97, 0x01, 0x0a, 0x17, 0x55, 0x73, 0x65, + 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, + 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x49, 0x64, 0x42, 0x5f, 0x5a, 0x5d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, + 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, + 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x75, 0x73, 0x65, 0x72, 0x2d, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x3b, 0x70, + 0x62, 0x75, 0x70, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_user_privilege_proto_rawDescOnce sync.Once + file_user_privilege_proto_rawDescData = file_user_privilege_proto_rawDesc +) + +func file_user_privilege_proto_rawDescGZIP() []byte { + file_user_privilege_proto_rawDescOnce.Do(func() { + file_user_privilege_proto_rawDescData = protoimpl.X.CompressGZIP(file_user_privilege_proto_rawDescData) + }) + return file_user_privilege_proto_rawDescData +} + +var file_user_privilege_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_user_privilege_proto_goTypes = []interface{}{ + (*UserPrivilege)(nil), // 0: pbup.UserPrivilege + (*UserPrivilegeSpec)(nil), // 1: pbup.UserPrivilegeSpec + (*UserPrivilegeAttachment)(nil), // 2: pbup.UserPrivilegeAttachment + (*base.Revision)(nil), // 3: pbbase.Revision +} +var file_user_privilege_proto_depIdxs = []int32{ + 1, // 0: pbup.UserPrivilege.spec:type_name -> pbup.UserPrivilegeSpec + 2, // 1: pbup.UserPrivilege.attachment:type_name -> pbup.UserPrivilegeAttachment + 3, // 2: pbup.UserPrivilege.revision:type_name -> pbbase.Revision + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_user_privilege_proto_init() } +func file_user_privilege_proto_init() { + if File_user_privilege_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_user_privilege_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserPrivilege); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_user_privilege_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserPrivilegeSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_user_privilege_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserPrivilegeAttachment); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_user_privilege_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_user_privilege_proto_goTypes, + DependencyIndexes: file_user_privilege_proto_depIdxs, + MessageInfos: file_user_privilege_proto_msgTypes, + }.Build() + File_user_privilege_proto = out.File + file_user_privilege_proto_rawDesc = nil + file_user_privilege_proto_goTypes = nil + file_user_privilege_proto_depIdxs = nil +} diff --git a/pkg/protocol/core/user-privilege/user_privilege.proto b/pkg/protocol/core/user-privilege/user_privilege.proto new file mode 100644 index 0000000000..a95ee6ea97 --- /dev/null +++ b/pkg/protocol/core/user-privilege/user_privilege.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; + +import "pkg/protocol/core/base/base.proto"; + +package pbup; + +option go_package = "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/user-privilege;pbup"; + +// UserPrivilege source resource reference: pkg/dal/table/user-privilege.go +message UserPrivilege { + uint32 id = 1; + UserPrivilegeSpec spec = 2; + UserPrivilegeAttachment attachment = 3; + pbbase.Revision revision = 4; +} + +// UserPrivilegeSpec source resource reference: pkg/dal/table/user-privilege.go +message UserPrivilegeSpec { + string user = 1; + string privilege_type = 2; + bool read_only = 3; +} + +// UserPrivilegeAttachment source resource reference: pkg/dal/table/user-privilege.go +message UserPrivilegeAttachment { + uint32 biz_id = 1; + uint32 app_id = 2; + uint32 uid = 3; + uint32 gid = 4; + uint32 template_space_id = 5; +} \ No newline at end of file diff --git a/pkg/protocol/data-service/data_service.pb.go b/pkg/protocol/data-service/data_service.pb.go index 548bc4b28f..5b27524d7f 100644 --- a/pkg/protocol/data-service/data_service.pb.go +++ b/pkg/protocol/data-service/data_service.pb.go @@ -7524,9 +7524,10 @@ type BatchUpsertTemplatesReq struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` - Items []*BatchUpsertTemplatesReq_Item `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` - TemplateSetIds []uint32 `protobuf:"varint,3,rep,packed,name=template_set_ids,json=templateSetIds,proto3" json:"template_set_ids,omitempty"` + BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` + Items []*BatchUpsertTemplatesReq_Item `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` + TemplateSetIds []uint32 `protobuf:"varint,3,rep,packed,name=template_set_ids,json=templateSetIds,proto3" json:"template_set_ids,omitempty"` + TemplateSpaceId uint32 `protobuf:"varint,4,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` } func (x *BatchUpsertTemplatesReq) Reset() { @@ -7582,6 +7583,13 @@ func (x *BatchUpsertTemplatesReq) GetTemplateSetIds() []uint32 { return nil } +func (x *BatchUpsertTemplatesReq) GetTemplateSpaceId() uint32 { + if x != nil { + return x.TemplateSpaceId + } + return 0 +} + type BatchUpsertTemplatesReqResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7644,6 +7652,8 @@ type BatchUpdateTemplatePermissionsReq struct { TemplateSetId uint32 `protobuf:"varint,8,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` // 套餐ID, 具体操作的哪个套餐 NoSetSpecified bool `protobuf:"varint,9,opt,name=no_set_specified,json=noSetSpecified,proto3" json:"no_set_specified,omitempty"` // 是否未指定套餐, 区分全部套餐和未指定套餐 TemplateSpaceId uint32 `protobuf:"varint,10,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` // 模板空间ID + Uid uint32 `protobuf:"varint,11,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint32 `protobuf:"varint,12,opt,name=gid,proto3" json:"gid,omitempty"` } func (x *BatchUpdateTemplatePermissionsReq) Reset() { @@ -7748,6 +7758,20 @@ func (x *BatchUpdateTemplatePermissionsReq) GetTemplateSpaceId() uint32 { return 0 } +func (x *BatchUpdateTemplatePermissionsReq) GetUid() uint32 { + if x != nil { + return x.Uid + } + return 0 +} + +func (x *BatchUpdateTemplatePermissionsReq) GetGid() uint32 { + if x != nil { + return x.Gid + } + return 0 +} + type BatchUpdateTemplatePermissionsResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -8241,7 +8265,8 @@ type ListTemplateRevisionsByIDsReq struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Ids []uint32 `protobuf:"varint,1,rep,packed,name=ids,proto3" json:"ids,omitempty"` + BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` + Ids []uint32 `protobuf:"varint,2,rep,packed,name=ids,proto3" json:"ids,omitempty"` } func (x *ListTemplateRevisionsByIDsReq) Reset() { @@ -8276,6 +8301,13 @@ func (*ListTemplateRevisionsByIDsReq) Descriptor() ([]byte, []int) { return file_data_service_proto_rawDescGZIP(), []int{130} } +func (x *ListTemplateRevisionsByIDsReq) GetBizId() uint32 { + if x != nil { + return x.BizId + } + return 0 +} + func (x *ListTemplateRevisionsByIDsReq) GetIds() []uint32 { if x != nil { return x.Ids @@ -16850,17 +16882,23 @@ func (*BatchUpdateLastConsumedTimeResp) Descriptor() ([]byte, []int) { return file_data_service_proto_rawDescGZIP(), []int{266} } -type CredentialScopePreviewResp_Detail struct { +type CreateUserPrivilegesReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` + AppId uint32 `protobuf:"varint,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + Uid uint32 `protobuf:"varint,3,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint32 `protobuf:"varint,4,opt,name=gid,proto3" json:"gid,omitempty"` + User string `protobuf:"bytes,5,opt,name=user,proto3" json:"user,omitempty"` + UserGroup string `protobuf:"bytes,6,opt,name=user_group,json=userGroup,proto3" json:"user_group,omitempty"` + PrivilegeType string `protobuf:"bytes,7,opt,name=privilege_type,json=privilegeType,proto3" json:"privilege_type,omitempty"` // 权限类型:system、custom + ReadOnly bool `protobuf:"varint,8,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` // 只读 } -func (x *CredentialScopePreviewResp_Detail) Reset() { - *x = CredentialScopePreviewResp_Detail{} +func (x *CreateUserPrivilegesReq) Reset() { + *x = CreateUserPrivilegesReq{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[267] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -16868,13 +16906,13 @@ func (x *CredentialScopePreviewResp_Detail) Reset() { } } -func (x *CredentialScopePreviewResp_Detail) String() string { +func (x *CreateUserPrivilegesReq) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CredentialScopePreviewResp_Detail) ProtoMessage() {} +func (*CreateUserPrivilegesReq) ProtoMessage() {} -func (x *CredentialScopePreviewResp_Detail) ProtoReflect() protoreflect.Message { +func (x *CreateUserPrivilegesReq) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[267] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -16886,114 +16924,92 @@ func (x *CredentialScopePreviewResp_Detail) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use CredentialScopePreviewResp_Detail.ProtoReflect.Descriptor instead. -func (*CredentialScopePreviewResp_Detail) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{3, 0} +// Deprecated: Use CreateUserPrivilegesReq.ProtoReflect.Descriptor instead. +func (*CreateUserPrivilegesReq) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{267} } -func (x *CredentialScopePreviewResp_Detail) GetName() string { +func (x *CreateUserPrivilegesReq) GetBizId() uint32 { if x != nil { - return x.Name + return x.BizId } - return "" + return 0 } -func (x *CredentialScopePreviewResp_Detail) GetPath() string { +func (x *CreateUserPrivilegesReq) GetAppId() uint32 { if x != nil { - return x.Path + return x.AppId } - return "" -} - -type BatchUpsertConfigItemsReq_ConfigItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ConfigItemAttachment *config_item.ConfigItemAttachment `protobuf:"bytes,1,opt,name=config_item_attachment,json=configItemAttachment,proto3" json:"config_item_attachment,omitempty"` - ConfigItemSpec *config_item.ConfigItemSpec `protobuf:"bytes,2,opt,name=config_item_spec,json=configItemSpec,proto3" json:"config_item_spec,omitempty"` - ContentSpec *content.ContentSpec `protobuf:"bytes,3,opt,name=content_spec,json=contentSpec,proto3" json:"content_spec,omitempty"` + return 0 } -func (x *BatchUpsertConfigItemsReq_ConfigItem) Reset() { - *x = BatchUpsertConfigItemsReq_ConfigItem{} - if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[268] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *CreateUserPrivilegesReq) GetUid() uint32 { + if x != nil { + return x.Uid } + return 0 } -func (x *BatchUpsertConfigItemsReq_ConfigItem) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BatchUpsertConfigItemsReq_ConfigItem) ProtoMessage() {} - -func (x *BatchUpsertConfigItemsReq_ConfigItem) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[268] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *CreateUserPrivilegesReq) GetGid() uint32 { + if x != nil { + return x.Gid } - return mi.MessageOf(x) + return 0 } -// Deprecated: Use BatchUpsertConfigItemsReq_ConfigItem.ProtoReflect.Descriptor instead. -func (*BatchUpsertConfigItemsReq_ConfigItem) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{31, 0} +func (x *CreateUserPrivilegesReq) GetUser() string { + if x != nil { + return x.User + } + return "" } -func (x *BatchUpsertConfigItemsReq_ConfigItem) GetConfigItemAttachment() *config_item.ConfigItemAttachment { +func (x *CreateUserPrivilegesReq) GetUserGroup() string { if x != nil { - return x.ConfigItemAttachment + return x.UserGroup } - return nil + return "" } -func (x *BatchUpsertConfigItemsReq_ConfigItem) GetConfigItemSpec() *config_item.ConfigItemSpec { +func (x *CreateUserPrivilegesReq) GetPrivilegeType() string { if x != nil { - return x.ConfigItemSpec + return x.PrivilegeType } - return nil + return "" } -func (x *BatchUpsertConfigItemsReq_ConfigItem) GetContentSpec() *content.ContentSpec { +func (x *CreateUserPrivilegesReq) GetReadOnly() bool { if x != nil { - return x.ContentSpec + return x.ReadOnly } - return nil + return false } -type BatchUpsertConfigItemsReq_TemplateBinding struct { +type CreateUserPrivilegesResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TemplateSpaceId uint32 `protobuf:"varint,1,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` - TemplateBinding *app_template_binding.TemplateBinding `protobuf:"bytes,2,opt,name=template_binding,json=templateBinding,proto3" json:"template_binding,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` } -func (x *BatchUpsertConfigItemsReq_TemplateBinding) Reset() { - *x = BatchUpsertConfigItemsReq_TemplateBinding{} +func (x *CreateUserPrivilegesResp) Reset() { + *x = CreateUserPrivilegesResp{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[269] + mi := &file_data_service_proto_msgTypes[268] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *BatchUpsertConfigItemsReq_TemplateBinding) String() string { +func (x *CreateUserPrivilegesResp) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BatchUpsertConfigItemsReq_TemplateBinding) ProtoMessage() {} +func (*CreateUserPrivilegesResp) ProtoMessage() {} -func (x *BatchUpsertConfigItemsReq_TemplateBinding) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[269] +func (x *CreateUserPrivilegesResp) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[268] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17004,53 +17020,50 @@ func (x *BatchUpsertConfigItemsReq_TemplateBinding) ProtoReflect() protoreflect. return mi.MessageOf(x) } -// Deprecated: Use BatchUpsertConfigItemsReq_TemplateBinding.ProtoReflect.Descriptor instead. -func (*BatchUpsertConfigItemsReq_TemplateBinding) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{31, 1} +// Deprecated: Use CreateUserPrivilegesResp.ProtoReflect.Descriptor instead. +func (*CreateUserPrivilegesResp) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{268} } -func (x *BatchUpsertConfigItemsReq_TemplateBinding) GetTemplateSpaceId() uint32 { +func (x *CreateUserPrivilegesResp) GetId() uint32 { if x != nil { - return x.TemplateSpaceId + return x.Id } return 0 } -func (x *BatchUpsertConfigItemsReq_TemplateBinding) GetTemplateBinding() *app_template_binding.TemplateBinding { - if x != nil { - return x.TemplateBinding - } - return nil -} - -type ListConfigItemByTupleReq_Item struct { +type ListUserPrivilegesReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` - AppId uint32 `protobuf:"varint,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"` + BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` + AppId uint32 `protobuf:"varint,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + TemplateSpaceId uint32 `protobuf:"varint,3,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` + Start uint32 `protobuf:"varint,4,opt,name=start,proto3" json:"start,omitempty"` + Limit uint32 `protobuf:"varint,5,opt,name=limit,proto3" json:"limit,omitempty"` + All bool `protobuf:"varint,6,opt,name=all,proto3" json:"all,omitempty"` + Name string `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"` // 名称 + PrivilegeType string `protobuf:"bytes,8,opt,name=privilege_type,json=privilegeType,proto3" json:"privilege_type,omitempty"` // 权限类型:user、user_group } -func (x *ListConfigItemByTupleReq_Item) Reset() { - *x = ListConfigItemByTupleReq_Item{} +func (x *ListUserPrivilegesReq) Reset() { + *x = ListUserPrivilegesReq{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[270] + mi := &file_data_service_proto_msgTypes[269] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ListConfigItemByTupleReq_Item) String() string { +func (x *ListUserPrivilegesReq) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListConfigItemByTupleReq_Item) ProtoMessage() {} +func (*ListUserPrivilegesReq) ProtoMessage() {} -func (x *ListConfigItemByTupleReq_Item) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[270] +func (x *ListUserPrivilegesReq) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[269] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17061,64 +17074,93 @@ func (x *ListConfigItemByTupleReq_Item) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListConfigItemByTupleReq_Item.ProtoReflect.Descriptor instead. -func (*ListConfigItemByTupleReq_Item) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{44, 0} +// Deprecated: Use ListUserPrivilegesReq.ProtoReflect.Descriptor instead. +func (*ListUserPrivilegesReq) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{269} } -func (x *ListConfigItemByTupleReq_Item) GetBizId() uint32 { +func (x *ListUserPrivilegesReq) GetBizId() uint32 { if x != nil { return x.BizId } return 0 } -func (x *ListConfigItemByTupleReq_Item) GetAppId() uint32 { +func (x *ListUserPrivilegesReq) GetAppId() uint32 { if x != nil { return x.AppId } return 0 } -func (x *ListConfigItemByTupleReq_Item) GetName() string { +func (x *ListUserPrivilegesReq) GetTemplateSpaceId() uint32 { + if x != nil { + return x.TemplateSpaceId + } + return 0 +} + +func (x *ListUserPrivilegesReq) GetStart() uint32 { + if x != nil { + return x.Start + } + return 0 +} + +func (x *ListUserPrivilegesReq) GetLimit() uint32 { + if x != nil { + return x.Limit + } + return 0 +} + +func (x *ListUserPrivilegesReq) GetAll() bool { + if x != nil { + return x.All + } + return false +} + +func (x *ListUserPrivilegesReq) GetName() string { if x != nil { return x.Name } return "" } -func (x *ListConfigItemByTupleReq_Item) GetPath() string { +func (x *ListUserPrivilegesReq) GetPrivilegeType() string { if x != nil { - return x.Path + return x.PrivilegeType } return "" } -type GetHookInfoSpec_Releases struct { +type ListUserPrivilegesResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - NotReleaseId uint32 `protobuf:"varint,1,opt,name=not_release_id,json=notReleaseId,proto3" json:"not_release_id,omitempty"` + Count uint32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` + Details []*ListUserPrivilegesResp_Detail `protobuf:"bytes,2,rep,name=details,proto3" json:"details,omitempty"` } -func (x *GetHookInfoSpec_Releases) Reset() { - *x = GetHookInfoSpec_Releases{} +func (x *ListUserPrivilegesResp) Reset() { + *x = ListUserPrivilegesResp{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[271] + mi := &file_data_service_proto_msgTypes[270] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetHookInfoSpec_Releases) String() string { +func (x *ListUserPrivilegesResp) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetHookInfoSpec_Releases) ProtoMessage() {} +func (*ListUserPrivilegesResp) ProtoMessage() {} -func (x *GetHookInfoSpec_Releases) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[271] +func (x *ListUserPrivilegesResp) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[270] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17129,46 +17171,53 @@ func (x *GetHookInfoSpec_Releases) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetHookInfoSpec_Releases.ProtoReflect.Descriptor instead. -func (*GetHookInfoSpec_Releases) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{72, 0} +// Deprecated: Use ListUserPrivilegesResp.ProtoReflect.Descriptor instead. +func (*ListUserPrivilegesResp) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{270} } -func (x *GetHookInfoSpec_Releases) GetNotReleaseId() uint32 { +func (x *ListUserPrivilegesResp) GetCount() uint32 { if x != nil { - return x.NotReleaseId + return x.Count } return 0 } -type ListHooksResp_Detail struct { +func (x *ListUserPrivilegesResp) GetDetails() []*ListUserPrivilegesResp_Detail { + if x != nil { + return x.Details + } + return nil +} + +type DeleteUserPrivilegesReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Hook *hook.Hook `protobuf:"bytes,1,opt,name=hook,proto3" json:"hook,omitempty"` - BoundNum uint32 `protobuf:"varint,2,opt,name=bound_num,json=boundNum,proto3" json:"bound_num,omitempty"` - ConfirmDelete bool `protobuf:"varint,3,opt,name=confirm_delete,json=confirmDelete,proto3" json:"confirm_delete,omitempty"` - PublishedRevisionId uint32 `protobuf:"varint,4,opt,name=published_revision_id,json=publishedRevisionId,proto3" json:"published_revision_id,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + BizId uint32 `protobuf:"varint,2,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` + AppId uint32 `protobuf:"varint,3,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + TemplateSpaceId uint32 `protobuf:"varint,4,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` } -func (x *ListHooksResp_Detail) Reset() { - *x = ListHooksResp_Detail{} +func (x *DeleteUserPrivilegesReq) Reset() { + *x = DeleteUserPrivilegesReq{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[272] + mi := &file_data_service_proto_msgTypes[271] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ListHooksResp_Detail) String() string { +func (x *DeleteUserPrivilegesReq) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListHooksResp_Detail) ProtoMessage() {} +func (*DeleteUserPrivilegesReq) ProtoMessage() {} -func (x *ListHooksResp_Detail) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[272] +func (x *DeleteUserPrivilegesReq) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[271] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17179,71 +17228,65 @@ func (x *ListHooksResp_Detail) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListHooksResp_Detail.ProtoReflect.Descriptor instead. -func (*ListHooksResp_Detail) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{74, 0} +// Deprecated: Use DeleteUserPrivilegesReq.ProtoReflect.Descriptor instead. +func (*DeleteUserPrivilegesReq) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{271} } -func (x *ListHooksResp_Detail) GetHook() *hook.Hook { +func (x *DeleteUserPrivilegesReq) GetId() uint32 { if x != nil { - return x.Hook + return x.Id } - return nil + return 0 } -func (x *ListHooksResp_Detail) GetBoundNum() uint32 { +func (x *DeleteUserPrivilegesReq) GetBizId() uint32 { if x != nil { - return x.BoundNum + return x.BizId } return 0 } -func (x *ListHooksResp_Detail) GetConfirmDelete() bool { +func (x *DeleteUserPrivilegesReq) GetAppId() uint32 { if x != nil { - return x.ConfirmDelete + return x.AppId } - return false + return 0 } -func (x *ListHooksResp_Detail) GetPublishedRevisionId() uint32 { +func (x *DeleteUserPrivilegesReq) GetTemplateSpaceId() uint32 { if x != nil { - return x.PublishedRevisionId + return x.TemplateSpaceId } return 0 } -type ListHookReferencesResp_Detail struct { +type CredentialScopePreviewResp_Detail struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - HookRevisionId uint32 `protobuf:"varint,1,opt,name=hook_revision_id,json=hookRevisionId,proto3" json:"hook_revision_id,omitempty"` - HookRevisionName string `protobuf:"bytes,2,opt,name=hook_revision_name,json=hookRevisionName,proto3" json:"hook_revision_name,omitempty"` - AppId uint32 `protobuf:"varint,3,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` - AppName string `protobuf:"bytes,4,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` - ReleaseId uint32 `protobuf:"varint,5,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"` - ReleaseName string `protobuf:"bytes,6,opt,name=release_name,json=releaseName,proto3" json:"release_name,omitempty"` - Type string `protobuf:"bytes,7,opt,name=type,proto3" json:"type,omitempty"` - Deprecated bool `protobuf:"varint,8,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` } -func (x *ListHookReferencesResp_Detail) Reset() { - *x = ListHookReferencesResp_Detail{} +func (x *CredentialScopePreviewResp_Detail) Reset() { + *x = CredentialScopePreviewResp_Detail{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[273] + mi := &file_data_service_proto_msgTypes[272] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ListHookReferencesResp_Detail) String() string { +func (x *CredentialScopePreviewResp_Detail) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListHookReferencesResp_Detail) ProtoMessage() {} +func (*CredentialScopePreviewResp_Detail) ProtoMessage() {} -func (x *ListHookReferencesResp_Detail) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[273] +func (x *CredentialScopePreviewResp_Detail) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[272] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17254,79 +17297,99 @@ func (x *ListHookReferencesResp_Detail) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListHookReferencesResp_Detail.ProtoReflect.Descriptor instead. -func (*ListHookReferencesResp_Detail) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{77, 0} +// Deprecated: Use CredentialScopePreviewResp_Detail.ProtoReflect.Descriptor instead. +func (*CredentialScopePreviewResp_Detail) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{3, 0} } -func (x *ListHookReferencesResp_Detail) GetHookRevisionId() uint32 { +func (x *CredentialScopePreviewResp_Detail) GetName() string { if x != nil { - return x.HookRevisionId + return x.Name } - return 0 + return "" } -func (x *ListHookReferencesResp_Detail) GetHookRevisionName() string { +func (x *CredentialScopePreviewResp_Detail) GetPath() string { if x != nil { - return x.HookRevisionName + return x.Path } return "" } -func (x *ListHookReferencesResp_Detail) GetAppId() uint32 { - if x != nil { - return x.AppId - } - return 0 +type BatchUpsertConfigItemsReq_ConfigItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ConfigItemAttachment *config_item.ConfigItemAttachment `protobuf:"bytes,1,opt,name=config_item_attachment,json=configItemAttachment,proto3" json:"config_item_attachment,omitempty"` + ConfigItemSpec *config_item.ConfigItemSpec `protobuf:"bytes,2,opt,name=config_item_spec,json=configItemSpec,proto3" json:"config_item_spec,omitempty"` + ContentSpec *content.ContentSpec `protobuf:"bytes,3,opt,name=content_spec,json=contentSpec,proto3" json:"content_spec,omitempty"` } -func (x *ListHookReferencesResp_Detail) GetAppName() string { - if x != nil { - return x.AppName +func (x *BatchUpsertConfigItemsReq_ConfigItem) Reset() { + *x = BatchUpsertConfigItemsReq_ConfigItem{} + if protoimpl.UnsafeEnabled { + mi := &file_data_service_proto_msgTypes[273] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (x *ListHookReferencesResp_Detail) GetReleaseId() uint32 { - if x != nil { - return x.ReleaseId +func (x *BatchUpsertConfigItemsReq_ConfigItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchUpsertConfigItemsReq_ConfigItem) ProtoMessage() {} + +func (x *BatchUpsertConfigItemsReq_ConfigItem) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[273] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (x *ListHookReferencesResp_Detail) GetReleaseName() string { +// Deprecated: Use BatchUpsertConfigItemsReq_ConfigItem.ProtoReflect.Descriptor instead. +func (*BatchUpsertConfigItemsReq_ConfigItem) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{31, 0} +} + +func (x *BatchUpsertConfigItemsReq_ConfigItem) GetConfigItemAttachment() *config_item.ConfigItemAttachment { if x != nil { - return x.ReleaseName + return x.ConfigItemAttachment } - return "" + return nil } -func (x *ListHookReferencesResp_Detail) GetType() string { +func (x *BatchUpsertConfigItemsReq_ConfigItem) GetConfigItemSpec() *config_item.ConfigItemSpec { if x != nil { - return x.Type + return x.ConfigItemSpec } - return "" + return nil } -func (x *ListHookReferencesResp_Detail) GetDeprecated() bool { +func (x *BatchUpsertConfigItemsReq_ConfigItem) GetContentSpec() *content.ContentSpec { if x != nil { - return x.Deprecated + return x.ContentSpec } - return false + return nil } -type ListHookRevisionsResp_ListHookRevisionsData struct { +type BatchUpsertConfigItemsReq_TemplateBinding struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - HookRevision *hook_revision.HookRevision `protobuf:"bytes,1,opt,name=hook_revision,json=hookRevision,proto3" json:"hook_revision,omitempty"` - BoundNum uint32 `protobuf:"varint,2,opt,name=bound_num,json=boundNum,proto3" json:"bound_num,omitempty"` - ConfirmDelete bool `protobuf:"varint,3,opt,name=confirm_delete,json=confirmDelete,proto3" json:"confirm_delete,omitempty"` + TemplateSpaceId uint32 `protobuf:"varint,1,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` + TemplateBinding *app_template_binding.TemplateBinding `protobuf:"bytes,2,opt,name=template_binding,json=templateBinding,proto3" json:"template_binding,omitempty"` } -func (x *ListHookRevisionsResp_ListHookRevisionsData) Reset() { - *x = ListHookRevisionsResp_ListHookRevisionsData{} +func (x *BatchUpsertConfigItemsReq_TemplateBinding) Reset() { + *x = BatchUpsertConfigItemsReq_TemplateBinding{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[274] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -17334,13 +17397,13 @@ func (x *ListHookRevisionsResp_ListHookRevisionsData) Reset() { } } -func (x *ListHookRevisionsResp_ListHookRevisionsData) String() string { +func (x *BatchUpsertConfigItemsReq_TemplateBinding) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListHookRevisionsResp_ListHookRevisionsData) ProtoMessage() {} +func (*BatchUpsertConfigItemsReq_TemplateBinding) ProtoMessage() {} -func (x *ListHookRevisionsResp_ListHookRevisionsData) ProtoReflect() protoreflect.Message { +func (x *BatchUpsertConfigItemsReq_TemplateBinding) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[274] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -17352,49 +17415,38 @@ func (x *ListHookRevisionsResp_ListHookRevisionsData) ProtoReflect() protoreflec return mi.MessageOf(x) } -// Deprecated: Use ListHookRevisionsResp_ListHookRevisionsData.ProtoReflect.Descriptor instead. -func (*ListHookRevisionsResp_ListHookRevisionsData) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{82, 0} -} - -func (x *ListHookRevisionsResp_ListHookRevisionsData) GetHookRevision() *hook_revision.HookRevision { - if x != nil { - return x.HookRevision - } - return nil +// Deprecated: Use BatchUpsertConfigItemsReq_TemplateBinding.ProtoReflect.Descriptor instead. +func (*BatchUpsertConfigItemsReq_TemplateBinding) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{31, 1} } -func (x *ListHookRevisionsResp_ListHookRevisionsData) GetBoundNum() uint32 { +func (x *BatchUpsertConfigItemsReq_TemplateBinding) GetTemplateSpaceId() uint32 { if x != nil { - return x.BoundNum + return x.TemplateSpaceId } return 0 } -func (x *ListHookRevisionsResp_ListHookRevisionsData) GetConfirmDelete() bool { +func (x *BatchUpsertConfigItemsReq_TemplateBinding) GetTemplateBinding() *app_template_binding.TemplateBinding { if x != nil { - return x.ConfirmDelete + return x.TemplateBinding } - return false + return nil } -type ListHookRevisionReferencesResp_Detail struct { +type ListConfigItemByTupleReq_Item struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RevisionId uint32 `protobuf:"varint,1,opt,name=revision_id,json=revisionId,proto3" json:"revision_id,omitempty"` - RevisionName string `protobuf:"bytes,2,opt,name=revision_name,json=revisionName,proto3" json:"revision_name,omitempty"` - AppId uint32 `protobuf:"varint,3,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` - AppName string `protobuf:"bytes,4,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` - ReleaseId uint32 `protobuf:"varint,5,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"` - ReleaseName string `protobuf:"bytes,6,opt,name=release_name,json=releaseName,proto3" json:"release_name,omitempty"` - Type string `protobuf:"bytes,7,opt,name=type,proto3" json:"type,omitempty"` - Deprecated bool `protobuf:"varint,8,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` + AppId uint32 `protobuf:"varint,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"` } -func (x *ListHookRevisionReferencesResp_Detail) Reset() { - *x = ListHookRevisionReferencesResp_Detail{} +func (x *ListConfigItemByTupleReq_Item) Reset() { + *x = ListConfigItemByTupleReq_Item{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[275] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -17402,13 +17454,13 @@ func (x *ListHookRevisionReferencesResp_Detail) Reset() { } } -func (x *ListHookRevisionReferencesResp_Detail) String() string { +func (x *ListConfigItemByTupleReq_Item) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListHookRevisionReferencesResp_Detail) ProtoMessage() {} +func (*ListConfigItemByTupleReq_Item) ProtoMessage() {} -func (x *ListHookRevisionReferencesResp_Detail) ProtoReflect() protoreflect.Message { +func (x *ListConfigItemByTupleReq_Item) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[275] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -17420,83 +17472,49 @@ func (x *ListHookRevisionReferencesResp_Detail) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use ListHookRevisionReferencesResp_Detail.ProtoReflect.Descriptor instead. -func (*ListHookRevisionReferencesResp_Detail) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{89, 0} +// Deprecated: Use ListConfigItemByTupleReq_Item.ProtoReflect.Descriptor instead. +func (*ListConfigItemByTupleReq_Item) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{44, 0} } -func (x *ListHookRevisionReferencesResp_Detail) GetRevisionId() uint32 { +func (x *ListConfigItemByTupleReq_Item) GetBizId() uint32 { if x != nil { - return x.RevisionId + return x.BizId } return 0 } -func (x *ListHookRevisionReferencesResp_Detail) GetRevisionName() string { - if x != nil { - return x.RevisionName - } - return "" -} - -func (x *ListHookRevisionReferencesResp_Detail) GetAppId() uint32 { +func (x *ListConfigItemByTupleReq_Item) GetAppId() uint32 { if x != nil { return x.AppId } return 0 } -func (x *ListHookRevisionReferencesResp_Detail) GetAppName() string { - if x != nil { - return x.AppName - } - return "" -} - -func (x *ListHookRevisionReferencesResp_Detail) GetReleaseId() uint32 { - if x != nil { - return x.ReleaseId - } - return 0 -} - -func (x *ListHookRevisionReferencesResp_Detail) GetReleaseName() string { +func (x *ListConfigItemByTupleReq_Item) GetName() string { if x != nil { - return x.ReleaseName + return x.Name } return "" } -func (x *ListHookRevisionReferencesResp_Detail) GetType() string { +func (x *ListConfigItemByTupleReq_Item) GetPath() string { if x != nil { - return x.Type + return x.Path } return "" } -func (x *ListHookRevisionReferencesResp_Detail) GetDeprecated() bool { - if x != nil { - return x.Deprecated - } - return false -} - -type GetReleaseHookResp_Hook struct { +type GetHookInfoSpec_Releases struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - HookId uint32 `protobuf:"varint,1,opt,name=hook_id,json=hookId,proto3" json:"hook_id,omitempty"` - HookName string `protobuf:"bytes,2,opt,name=hook_name,json=hookName,proto3" json:"hook_name,omitempty"` - HookRevisionId uint32 `protobuf:"varint,3,opt,name=hook_revision_id,json=hookRevisionId,proto3" json:"hook_revision_id,omitempty"` - HookRevisionName string `protobuf:"bytes,4,opt,name=hook_revision_name,json=hookRevisionName,proto3" json:"hook_revision_name,omitempty"` - Type string `protobuf:"bytes,5,opt,name=type,proto3" json:"type,omitempty"` - Memo string `protobuf:"bytes,6,opt,name=memo,proto3" json:"memo,omitempty"` - Content string `protobuf:"bytes,7,opt,name=content,proto3" json:"content,omitempty"` + NotReleaseId uint32 `protobuf:"varint,1,opt,name=not_release_id,json=notReleaseId,proto3" json:"not_release_id,omitempty"` } -func (x *GetReleaseHookResp_Hook) Reset() { - *x = GetReleaseHookResp_Hook{} +func (x *GetHookInfoSpec_Releases) Reset() { + *x = GetHookInfoSpec_Releases{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[276] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -17504,13 +17522,13 @@ func (x *GetReleaseHookResp_Hook) Reset() { } } -func (x *GetReleaseHookResp_Hook) String() string { +func (x *GetHookInfoSpec_Releases) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetReleaseHookResp_Hook) ProtoMessage() {} +func (*GetHookInfoSpec_Releases) ProtoMessage() {} -func (x *GetReleaseHookResp_Hook) ProtoReflect() protoreflect.Message { +func (x *GetHookInfoSpec_Releases) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[276] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -17522,85 +17540,45 @@ func (x *GetReleaseHookResp_Hook) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetReleaseHookResp_Hook.ProtoReflect.Descriptor instead. -func (*GetReleaseHookResp_Hook) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{91, 0} +// Deprecated: Use GetHookInfoSpec_Releases.ProtoReflect.Descriptor instead. +func (*GetHookInfoSpec_Releases) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{72, 0} } -func (x *GetReleaseHookResp_Hook) GetHookId() uint32 { +func (x *GetHookInfoSpec_Releases) GetNotReleaseId() uint32 { if x != nil { - return x.HookId + return x.NotReleaseId } return 0 } -func (x *GetReleaseHookResp_Hook) GetHookName() string { - if x != nil { - return x.HookName - } - return "" +type ListHooksResp_Detail struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Hook *hook.Hook `protobuf:"bytes,1,opt,name=hook,proto3" json:"hook,omitempty"` + BoundNum uint32 `protobuf:"varint,2,opt,name=bound_num,json=boundNum,proto3" json:"bound_num,omitempty"` + ConfirmDelete bool `protobuf:"varint,3,opt,name=confirm_delete,json=confirmDelete,proto3" json:"confirm_delete,omitempty"` + PublishedRevisionId uint32 `protobuf:"varint,4,opt,name=published_revision_id,json=publishedRevisionId,proto3" json:"published_revision_id,omitempty"` } -func (x *GetReleaseHookResp_Hook) GetHookRevisionId() uint32 { - if x != nil { - return x.HookRevisionId +func (x *ListHooksResp_Detail) Reset() { + *x = ListHooksResp_Detail{} + if protoimpl.UnsafeEnabled { + mi := &file_data_service_proto_msgTypes[277] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return 0 } -func (x *GetReleaseHookResp_Hook) GetHookRevisionName() string { - if x != nil { - return x.HookRevisionName - } - return "" -} - -func (x *GetReleaseHookResp_Hook) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *GetReleaseHookResp_Hook) GetMemo() string { - if x != nil { - return x.Memo - } - return "" -} - -func (x *GetReleaseHookResp_Hook) GetContent() string { - if x != nil { - return x.Content - } - return "" -} - -type ListTemplateSetsAndRevisionsResp_Detail struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Template *template.Template `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` - TemplateRevision []*template_revision.TemplateRevision `protobuf:"bytes,2,rep,name=template_revision,json=templateRevision,proto3" json:"template_revision,omitempty"` -} - -func (x *ListTemplateSetsAndRevisionsResp_Detail) Reset() { - *x = ListTemplateSetsAndRevisionsResp_Detail{} - if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[277] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListTemplateSetsAndRevisionsResp_Detail) String() string { +func (x *ListHooksResp_Detail) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListTemplateSetsAndRevisionsResp_Detail) ProtoMessage() {} +func (*ListHooksResp_Detail) ProtoMessage() {} -func (x *ListTemplateSetsAndRevisionsResp_Detail) ProtoReflect() protoreflect.Message { +func (x *ListHooksResp_Detail) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[277] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -17612,38 +17590,56 @@ func (x *ListTemplateSetsAndRevisionsResp_Detail) ProtoReflect() protoreflect.Me return mi.MessageOf(x) } -// Deprecated: Use ListTemplateSetsAndRevisionsResp_Detail.ProtoReflect.Descriptor instead. -func (*ListTemplateSetsAndRevisionsResp_Detail) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{116, 0} +// Deprecated: Use ListHooksResp_Detail.ProtoReflect.Descriptor instead. +func (*ListHooksResp_Detail) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{74, 0} } -func (x *ListTemplateSetsAndRevisionsResp_Detail) GetTemplate() *template.Template { +func (x *ListHooksResp_Detail) GetHook() *hook.Hook { if x != nil { - return x.Template + return x.Hook } return nil } -func (x *ListTemplateSetsAndRevisionsResp_Detail) GetTemplateRevision() []*template_revision.TemplateRevision { +func (x *ListHooksResp_Detail) GetBoundNum() uint32 { if x != nil { - return x.TemplateRevision + return x.BoundNum } - return nil + return 0 } -type ListTemplateByTupleReq_Item struct { +func (x *ListHooksResp_Detail) GetConfirmDelete() bool { + if x != nil { + return x.ConfirmDelete + } + return false +} + +func (x *ListHooksResp_Detail) GetPublishedRevisionId() uint32 { + if x != nil { + return x.PublishedRevisionId + } + return 0 +} + +type ListHookReferencesResp_Detail struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` - TemplateSpaceId uint32 `protobuf:"varint,2,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"` + HookRevisionId uint32 `protobuf:"varint,1,opt,name=hook_revision_id,json=hookRevisionId,proto3" json:"hook_revision_id,omitempty"` + HookRevisionName string `protobuf:"bytes,2,opt,name=hook_revision_name,json=hookRevisionName,proto3" json:"hook_revision_name,omitempty"` + AppId uint32 `protobuf:"varint,3,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + AppName string `protobuf:"bytes,4,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` + ReleaseId uint32 `protobuf:"varint,5,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"` + ReleaseName string `protobuf:"bytes,6,opt,name=release_name,json=releaseName,proto3" json:"release_name,omitempty"` + Type string `protobuf:"bytes,7,opt,name=type,proto3" json:"type,omitempty"` + Deprecated bool `protobuf:"varint,8,opt,name=deprecated,proto3" json:"deprecated,omitempty"` } -func (x *ListTemplateByTupleReq_Item) Reset() { - *x = ListTemplateByTupleReq_Item{} +func (x *ListHookReferencesResp_Detail) Reset() { + *x = ListHookReferencesResp_Detail{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[278] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -17651,13 +17647,13 @@ func (x *ListTemplateByTupleReq_Item) Reset() { } } -func (x *ListTemplateByTupleReq_Item) String() string { +func (x *ListHookReferencesResp_Detail) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListTemplateByTupleReq_Item) ProtoMessage() {} +func (*ListHookReferencesResp_Detail) ProtoMessage() {} -func (x *ListTemplateByTupleReq_Item) ProtoReflect() protoreflect.Message { +func (x *ListHookReferencesResp_Detail) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[278] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -17669,50 +17665,79 @@ func (x *ListTemplateByTupleReq_Item) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListTemplateByTupleReq_Item.ProtoReflect.Descriptor instead. -func (*ListTemplateByTupleReq_Item) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{117, 0} +// Deprecated: Use ListHookReferencesResp_Detail.ProtoReflect.Descriptor instead. +func (*ListHookReferencesResp_Detail) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{77, 0} } -func (x *ListTemplateByTupleReq_Item) GetBizId() uint32 { +func (x *ListHookReferencesResp_Detail) GetHookRevisionId() uint32 { if x != nil { - return x.BizId + return x.HookRevisionId } return 0 } -func (x *ListTemplateByTupleReq_Item) GetTemplateSpaceId() uint32 { +func (x *ListHookReferencesResp_Detail) GetHookRevisionName() string { if x != nil { - return x.TemplateSpaceId + return x.HookRevisionName + } + return "" +} + +func (x *ListHookReferencesResp_Detail) GetAppId() uint32 { + if x != nil { + return x.AppId } return 0 } -func (x *ListTemplateByTupleReq_Item) GetName() string { +func (x *ListHookReferencesResp_Detail) GetAppName() string { if x != nil { - return x.Name + return x.AppName } return "" } -func (x *ListTemplateByTupleReq_Item) GetPath() string { +func (x *ListHookReferencesResp_Detail) GetReleaseId() uint32 { if x != nil { - return x.Path + return x.ReleaseId + } + return 0 +} + +func (x *ListHookReferencesResp_Detail) GetReleaseName() string { + if x != nil { + return x.ReleaseName } return "" } -type ListTemplateByTupleReqResp_Item struct { +func (x *ListHookReferencesResp_Detail) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *ListHookReferencesResp_Detail) GetDeprecated() bool { + if x != nil { + return x.Deprecated + } + return false +} + +type ListHookRevisionsResp_ListHookRevisionsData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Template *template.Template `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` - TemplateRevision *template_revision.TemplateRevision `protobuf:"bytes,2,opt,name=template_revision,json=templateRevision,proto3" json:"template_revision,omitempty"` + HookRevision *hook_revision.HookRevision `protobuf:"bytes,1,opt,name=hook_revision,json=hookRevision,proto3" json:"hook_revision,omitempty"` + BoundNum uint32 `protobuf:"varint,2,opt,name=bound_num,json=boundNum,proto3" json:"bound_num,omitempty"` + ConfirmDelete bool `protobuf:"varint,3,opt,name=confirm_delete,json=confirmDelete,proto3" json:"confirm_delete,omitempty"` } -func (x *ListTemplateByTupleReqResp_Item) Reset() { - *x = ListTemplateByTupleReqResp_Item{} +func (x *ListHookRevisionsResp_ListHookRevisionsData) Reset() { + *x = ListHookRevisionsResp_ListHookRevisionsData{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[279] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -17720,13 +17745,13 @@ func (x *ListTemplateByTupleReqResp_Item) Reset() { } } -func (x *ListTemplateByTupleReqResp_Item) String() string { +func (x *ListHookRevisionsResp_ListHookRevisionsData) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListTemplateByTupleReqResp_Item) ProtoMessage() {} +func (*ListHookRevisionsResp_ListHookRevisionsData) ProtoMessage() {} -func (x *ListTemplateByTupleReqResp_Item) ProtoReflect() protoreflect.Message { +func (x *ListHookRevisionsResp_ListHookRevisionsData) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[279] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -17738,36 +17763,49 @@ func (x *ListTemplateByTupleReqResp_Item) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListTemplateByTupleReqResp_Item.ProtoReflect.Descriptor instead. -func (*ListTemplateByTupleReqResp_Item) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{118, 0} +// Deprecated: Use ListHookRevisionsResp_ListHookRevisionsData.ProtoReflect.Descriptor instead. +func (*ListHookRevisionsResp_ListHookRevisionsData) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{82, 0} } -func (x *ListTemplateByTupleReqResp_Item) GetTemplate() *template.Template { +func (x *ListHookRevisionsResp_ListHookRevisionsData) GetHookRevision() *hook_revision.HookRevision { if x != nil { - return x.Template + return x.HookRevision } return nil } -func (x *ListTemplateByTupleReqResp_Item) GetTemplateRevision() *template_revision.TemplateRevision { +func (x *ListHookRevisionsResp_ListHookRevisionsData) GetBoundNum() uint32 { if x != nil { - return x.TemplateRevision + return x.BoundNum } - return nil + return 0 } -type BatchUpsertTemplatesReq_Item struct { +func (x *ListHookRevisionsResp_ListHookRevisionsData) GetConfirmDelete() bool { + if x != nil { + return x.ConfirmDelete + } + return false +} + +type ListHookRevisionReferencesResp_Detail struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Template *template.Template `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` - TemplateRevision *template_revision.TemplateRevision `protobuf:"bytes,2,opt,name=template_revision,json=templateRevision,proto3" json:"template_revision,omitempty"` + RevisionId uint32 `protobuf:"varint,1,opt,name=revision_id,json=revisionId,proto3" json:"revision_id,omitempty"` + RevisionName string `protobuf:"bytes,2,opt,name=revision_name,json=revisionName,proto3" json:"revision_name,omitempty"` + AppId uint32 `protobuf:"varint,3,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + AppName string `protobuf:"bytes,4,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` + ReleaseId uint32 `protobuf:"varint,5,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"` + ReleaseName string `protobuf:"bytes,6,opt,name=release_name,json=releaseName,proto3" json:"release_name,omitempty"` + Type string `protobuf:"bytes,7,opt,name=type,proto3" json:"type,omitempty"` + Deprecated bool `protobuf:"varint,8,opt,name=deprecated,proto3" json:"deprecated,omitempty"` } -func (x *BatchUpsertTemplatesReq_Item) Reset() { - *x = BatchUpsertTemplatesReq_Item{} +func (x *ListHookRevisionReferencesResp_Detail) Reset() { + *x = ListHookRevisionReferencesResp_Detail{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[280] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -17775,13 +17813,13 @@ func (x *BatchUpsertTemplatesReq_Item) Reset() { } } -func (x *BatchUpsertTemplatesReq_Item) String() string { +func (x *ListHookRevisionReferencesResp_Detail) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BatchUpsertTemplatesReq_Item) ProtoMessage() {} +func (*ListHookRevisionReferencesResp_Detail) ProtoMessage() {} -func (x *BatchUpsertTemplatesReq_Item) ProtoReflect() protoreflect.Message { +func (x *ListHookRevisionReferencesResp_Detail) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[280] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -17793,51 +17831,83 @@ func (x *BatchUpsertTemplatesReq_Item) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BatchUpsertTemplatesReq_Item.ProtoReflect.Descriptor instead. -func (*BatchUpsertTemplatesReq_Item) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{119, 0} +// Deprecated: Use ListHookRevisionReferencesResp_Detail.ProtoReflect.Descriptor instead. +func (*ListHookRevisionReferencesResp_Detail) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{89, 0} } -func (x *BatchUpsertTemplatesReq_Item) GetTemplate() *template.Template { +func (x *ListHookRevisionReferencesResp_Detail) GetRevisionId() uint32 { if x != nil { - return x.Template + return x.RevisionId } - return nil + return 0 } -func (x *BatchUpsertTemplatesReq_Item) GetTemplateRevision() *template_revision.TemplateRevision { +func (x *ListHookRevisionReferencesResp_Detail) GetRevisionName() string { if x != nil { - return x.TemplateRevision + return x.RevisionName } - return nil + return "" } -type GetTemplateRevisionResp_TemplateRevision struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ListHookRevisionReferencesResp_Detail) GetAppId() uint32 { + if x != nil { + return x.AppId + } + return 0 +} - TemplateId uint32 `protobuf:"varint,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` - TemplateRevisionId uint32 `protobuf:"varint,4,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` - TemplateRevisionName string `protobuf:"bytes,5,opt,name=template_revision_name,json=templateRevisionName,proto3" json:"template_revision_name,omitempty"` - TemplateRevisionMemo string `protobuf:"bytes,6,opt,name=template_revision_memo,json=templateRevisionMemo,proto3" json:"template_revision_memo,omitempty"` - FileType string `protobuf:"bytes,7,opt,name=file_type,json=fileType,proto3" json:"file_type,omitempty"` - FileMode string `protobuf:"bytes,8,opt,name=file_mode,json=fileMode,proto3" json:"file_mode,omitempty"` - User string `protobuf:"bytes,9,opt,name=user,proto3" json:"user,omitempty"` - UserGroup string `protobuf:"bytes,10,opt,name=user_group,json=userGroup,proto3" json:"user_group,omitempty"` - Privilege string `protobuf:"bytes,11,opt,name=privilege,proto3" json:"privilege,omitempty"` - Signature string `protobuf:"bytes,12,opt,name=signature,proto3" json:"signature,omitempty"` - ByteSize uint64 `protobuf:"varint,13,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` - Creator string `protobuf:"bytes,14,opt,name=creator,proto3" json:"creator,omitempty"` - CreateAt string `protobuf:"bytes,15,opt,name=create_at,json=createAt,proto3" json:"create_at,omitempty"` - Md5 string `protobuf:"bytes,16,opt,name=md5,proto3" json:"md5,omitempty"` - IsLatest bool `protobuf:"varint,17,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"` +func (x *ListHookRevisionReferencesResp_Detail) GetAppName() string { + if x != nil { + return x.AppName + } + return "" } -func (x *GetTemplateRevisionResp_TemplateRevision) Reset() { - *x = GetTemplateRevisionResp_TemplateRevision{} +func (x *ListHookRevisionReferencesResp_Detail) GetReleaseId() uint32 { + if x != nil { + return x.ReleaseId + } + return 0 +} + +func (x *ListHookRevisionReferencesResp_Detail) GetReleaseName() string { + if x != nil { + return x.ReleaseName + } + return "" +} + +func (x *ListHookRevisionReferencesResp_Detail) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *ListHookRevisionReferencesResp_Detail) GetDeprecated() bool { + if x != nil { + return x.Deprecated + } + return false +} + +type GetReleaseHookResp_Hook struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + HookId uint32 `protobuf:"varint,1,opt,name=hook_id,json=hookId,proto3" json:"hook_id,omitempty"` + HookName string `protobuf:"bytes,2,opt,name=hook_name,json=hookName,proto3" json:"hook_name,omitempty"` + HookRevisionId uint32 `protobuf:"varint,3,opt,name=hook_revision_id,json=hookRevisionId,proto3" json:"hook_revision_id,omitempty"` + HookRevisionName string `protobuf:"bytes,4,opt,name=hook_revision_name,json=hookRevisionName,proto3" json:"hook_revision_name,omitempty"` + Type string `protobuf:"bytes,5,opt,name=type,proto3" json:"type,omitempty"` + Memo string `protobuf:"bytes,6,opt,name=memo,proto3" json:"memo,omitempty"` + Content string `protobuf:"bytes,7,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *GetReleaseHookResp_Hook) Reset() { + *x = GetReleaseHookResp_Hook{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[281] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -17845,13 +17915,13 @@ func (x *GetTemplateRevisionResp_TemplateRevision) Reset() { } } -func (x *GetTemplateRevisionResp_TemplateRevision) String() string { +func (x *GetReleaseHookResp_Hook) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetTemplateRevisionResp_TemplateRevision) ProtoMessage() {} +func (*GetReleaseHookResp_Hook) ProtoMessage() {} -func (x *GetTemplateRevisionResp_TemplateRevision) ProtoReflect() protoreflect.Message { +func (x *GetReleaseHookResp_Hook) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[281] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -17863,159 +17933,143 @@ func (x *GetTemplateRevisionResp_TemplateRevision) ProtoReflect() protoreflect.M return mi.MessageOf(x) } -// Deprecated: Use GetTemplateRevisionResp_TemplateRevision.ProtoReflect.Descriptor instead. -func (*GetTemplateRevisionResp_TemplateRevision) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{128, 0} +// Deprecated: Use GetReleaseHookResp_Hook.ProtoReflect.Descriptor instead. +func (*GetReleaseHookResp_Hook) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{91, 0} } -func (x *GetTemplateRevisionResp_TemplateRevision) GetTemplateId() uint32 { +func (x *GetReleaseHookResp_Hook) GetHookId() uint32 { if x != nil { - return x.TemplateId + return x.HookId } return 0 } -func (x *GetTemplateRevisionResp_TemplateRevision) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *GetTemplateRevisionResp_TemplateRevision) GetPath() string { +func (x *GetReleaseHookResp_Hook) GetHookName() string { if x != nil { - return x.Path + return x.HookName } return "" } -func (x *GetTemplateRevisionResp_TemplateRevision) GetTemplateRevisionId() uint32 { +func (x *GetReleaseHookResp_Hook) GetHookRevisionId() uint32 { if x != nil { - return x.TemplateRevisionId + return x.HookRevisionId } return 0 } -func (x *GetTemplateRevisionResp_TemplateRevision) GetTemplateRevisionName() string { +func (x *GetReleaseHookResp_Hook) GetHookRevisionName() string { if x != nil { - return x.TemplateRevisionName + return x.HookRevisionName } return "" } -func (x *GetTemplateRevisionResp_TemplateRevision) GetTemplateRevisionMemo() string { +func (x *GetReleaseHookResp_Hook) GetType() string { if x != nil { - return x.TemplateRevisionMemo + return x.Type } return "" } -func (x *GetTemplateRevisionResp_TemplateRevision) GetFileType() string { +func (x *GetReleaseHookResp_Hook) GetMemo() string { if x != nil { - return x.FileType + return x.Memo } return "" } -func (x *GetTemplateRevisionResp_TemplateRevision) GetFileMode() string { +func (x *GetReleaseHookResp_Hook) GetContent() string { if x != nil { - return x.FileMode + return x.Content } return "" } -func (x *GetTemplateRevisionResp_TemplateRevision) GetUser() string { - if x != nil { - return x.User - } - return "" -} +type ListTemplateSetsAndRevisionsResp_Detail struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (x *GetTemplateRevisionResp_TemplateRevision) GetUserGroup() string { - if x != nil { - return x.UserGroup - } - return "" + Template *template.Template `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` + TemplateRevision []*template_revision.TemplateRevision `protobuf:"bytes,2,rep,name=template_revision,json=templateRevision,proto3" json:"template_revision,omitempty"` } -func (x *GetTemplateRevisionResp_TemplateRevision) GetPrivilege() string { - if x != nil { - return x.Privilege +func (x *ListTemplateSetsAndRevisionsResp_Detail) Reset() { + *x = ListTemplateSetsAndRevisionsResp_Detail{} + if protoimpl.UnsafeEnabled { + mi := &file_data_service_proto_msgTypes[282] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (x *GetTemplateRevisionResp_TemplateRevision) GetSignature() string { - if x != nil { - return x.Signature - } - return "" +func (x *ListTemplateSetsAndRevisionsResp_Detail) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *GetTemplateRevisionResp_TemplateRevision) GetByteSize() uint64 { - if x != nil { - return x.ByteSize - } - return 0 -} +func (*ListTemplateSetsAndRevisionsResp_Detail) ProtoMessage() {} -func (x *GetTemplateRevisionResp_TemplateRevision) GetCreator() string { - if x != nil { - return x.Creator +func (x *ListTemplateSetsAndRevisionsResp_Detail) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[282] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *GetTemplateRevisionResp_TemplateRevision) GetCreateAt() string { - if x != nil { - return x.CreateAt - } - return "" +// Deprecated: Use ListTemplateSetsAndRevisionsResp_Detail.ProtoReflect.Descriptor instead. +func (*ListTemplateSetsAndRevisionsResp_Detail) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{116, 0} } -func (x *GetTemplateRevisionResp_TemplateRevision) GetMd5() string { +func (x *ListTemplateSetsAndRevisionsResp_Detail) GetTemplate() *template.Template { if x != nil { - return x.Md5 + return x.Template } - return "" + return nil } -func (x *GetTemplateRevisionResp_TemplateRevision) GetIsLatest() bool { +func (x *ListTemplateSetsAndRevisionsResp_Detail) GetTemplateRevision() []*template_revision.TemplateRevision { if x != nil { - return x.IsLatest + return x.TemplateRevision } - return false + return nil } -type ImportFromTemplateSetToAppReq_Binding struct { +type ListTemplateByTupleReq_Item struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TemplateSetId uint32 `protobuf:"varint,1,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` - TemplateSpaceId uint32 `protobuf:"varint,2,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` - TemplateSpaceName string `protobuf:"bytes,3,opt,name=template_space_name,json=templateSpaceName,proto3" json:"template_space_name,omitempty"` - TemplateSetName string `protobuf:"bytes,4,opt,name=template_set_name,json=templateSetName,proto3" json:"template_set_name,omitempty"` - TemplateRevisions []*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding `protobuf:"bytes,5,rep,name=template_revisions,json=templateRevisions,proto3" json:"template_revisions,omitempty"` + BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` + TemplateSpaceId uint32 `protobuf:"varint,2,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"` } -func (x *ImportFromTemplateSetToAppReq_Binding) Reset() { - *x = ImportFromTemplateSetToAppReq_Binding{} +func (x *ListTemplateByTupleReq_Item) Reset() { + *x = ListTemplateByTupleReq_Item{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[282] + mi := &file_data_service_proto_msgTypes[283] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ImportFromTemplateSetToAppReq_Binding) String() string { +func (x *ListTemplateByTupleReq_Item) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ImportFromTemplateSetToAppReq_Binding) ProtoMessage() {} +func (*ListTemplateByTupleReq_Item) ProtoMessage() {} -func (x *ImportFromTemplateSetToAppReq_Binding) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[282] +func (x *ListTemplateByTupleReq_Item) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[283] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18026,75 +18080,65 @@ func (x *ImportFromTemplateSetToAppReq_Binding) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use ImportFromTemplateSetToAppReq_Binding.ProtoReflect.Descriptor instead. -func (*ImportFromTemplateSetToAppReq_Binding) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{160, 0} +// Deprecated: Use ListTemplateByTupleReq_Item.ProtoReflect.Descriptor instead. +func (*ListTemplateByTupleReq_Item) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{117, 0} } -func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateSetId() uint32 { +func (x *ListTemplateByTupleReq_Item) GetBizId() uint32 { if x != nil { - return x.TemplateSetId + return x.BizId } return 0 } -func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateSpaceId() uint32 { +func (x *ListTemplateByTupleReq_Item) GetTemplateSpaceId() uint32 { if x != nil { return x.TemplateSpaceId } return 0 } -func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateSpaceName() string { +func (x *ListTemplateByTupleReq_Item) GetName() string { if x != nil { - return x.TemplateSpaceName + return x.Name } return "" } -func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateSetName() string { +func (x *ListTemplateByTupleReq_Item) GetPath() string { if x != nil { - return x.TemplateSetName + return x.Path } return "" } -func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateRevisions() []*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding { - if x != nil { - return x.TemplateRevisions - } - return nil -} - -type ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding struct { +type ListTemplateByTupleReqResp_Item struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TemplateId uint32 `protobuf:"varint,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` - TemplateRevisionId uint32 `protobuf:"varint,2,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` - IsLatest bool `protobuf:"varint,3,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"` - TemplateName string `protobuf:"bytes,4,opt,name=template_name,json=templateName,proto3" json:"template_name,omitempty"` - TemplateRevisionName string `protobuf:"bytes,5,opt,name=template_revision_name,json=templateRevisionName,proto3" json:"template_revision_name,omitempty"` + Template *template.Template `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` + TemplateRevision *template_revision.TemplateRevision `protobuf:"bytes,2,opt,name=template_revision,json=templateRevision,proto3" json:"template_revision,omitempty"` } -func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) Reset() { - *x = ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding{} +func (x *ListTemplateByTupleReqResp_Item) Reset() { + *x = ListTemplateByTupleReqResp_Item{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[283] + mi := &file_data_service_proto_msgTypes[284] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) String() string { +func (x *ListTemplateByTupleReqResp_Item) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) ProtoMessage() {} +func (*ListTemplateByTupleReqResp_Item) ProtoMessage() {} -func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[283] +func (x *ListTemplateByTupleReqResp_Item) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[284] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18105,72 +18149,51 @@ func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) ProtoRef return mi.MessageOf(x) } -// Deprecated: Use ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding.ProtoReflect.Descriptor instead. -func (*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{160, 0, 0} -} - -func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetTemplateId() uint32 { - if x != nil { - return x.TemplateId - } - return 0 -} - -func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetTemplateRevisionId() uint32 { - if x != nil { - return x.TemplateRevisionId - } - return 0 -} - -func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetIsLatest() bool { - if x != nil { - return x.IsLatest - } - return false +// Deprecated: Use ListTemplateByTupleReqResp_Item.ProtoReflect.Descriptor instead. +func (*ListTemplateByTupleReqResp_Item) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{118, 0} } -func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetTemplateName() string { +func (x *ListTemplateByTupleReqResp_Item) GetTemplate() *template.Template { if x != nil { - return x.TemplateName + return x.Template } - return "" + return nil } -func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetTemplateRevisionName() string { +func (x *ListTemplateByTupleReqResp_Item) GetTemplateRevision() *template_revision.TemplateRevision { if x != nil { - return x.TemplateRevisionName + return x.TemplateRevision } - return "" + return nil } -type CheckTemplateSetReferencesAppsReq_Item struct { +type BatchUpsertTemplatesReq_Item struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Template *template.Template `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"` + TemplateRevision *template_revision.TemplateRevision `protobuf:"bytes,2,opt,name=template_revision,json=templateRevision,proto3" json:"template_revision,omitempty"` } -func (x *CheckTemplateSetReferencesAppsReq_Item) Reset() { - *x = CheckTemplateSetReferencesAppsReq_Item{} +func (x *BatchUpsertTemplatesReq_Item) Reset() { + *x = BatchUpsertTemplatesReq_Item{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[284] + mi := &file_data_service_proto_msgTypes[285] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CheckTemplateSetReferencesAppsReq_Item) String() string { +func (x *BatchUpsertTemplatesReq_Item) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CheckTemplateSetReferencesAppsReq_Item) ProtoMessage() {} +func (*BatchUpsertTemplatesReq_Item) ProtoMessage() {} -func (x *CheckTemplateSetReferencesAppsReq_Item) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[284] +func (x *BatchUpsertTemplatesReq_Item) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[285] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18181,57 +18204,68 @@ func (x *CheckTemplateSetReferencesAppsReq_Item) ProtoReflect() protoreflect.Mes return mi.MessageOf(x) } -// Deprecated: Use CheckTemplateSetReferencesAppsReq_Item.ProtoReflect.Descriptor instead. -func (*CheckTemplateSetReferencesAppsReq_Item) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{199, 0} +// Deprecated: Use BatchUpsertTemplatesReq_Item.ProtoReflect.Descriptor instead. +func (*BatchUpsertTemplatesReq_Item) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{119, 0} } -func (x *CheckTemplateSetReferencesAppsReq_Item) GetId() uint32 { +func (x *BatchUpsertTemplatesReq_Item) GetTemplate() *template.Template { if x != nil { - return x.Id + return x.Template } - return 0 + return nil } -func (x *CheckTemplateSetReferencesAppsReq_Item) GetName() string { +func (x *BatchUpsertTemplatesReq_Item) GetTemplateRevision() *template_revision.TemplateRevision { if x != nil { - return x.Name + return x.TemplateRevision } - return "" + return nil } -type CheckTemplateSetReferencesAppsResp_Item struct { +type GetTemplateRevisionResp_TemplateRevision struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TemplateSetId uint32 `protobuf:"varint,1,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` - TemplateSetName string `protobuf:"bytes,2,opt,name=template_set_name,json=templateSetName,proto3" json:"template_set_name,omitempty"` - AppId uint32 `protobuf:"varint,3,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` - AppName string `protobuf:"bytes,4,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` - AppExceedsLimit bool `protobuf:"varint,5,opt,name=app_exceeds_limit,json=appExceedsLimit,proto3" json:"app_exceeds_limit,omitempty"` - TemplateSetExceedsLimit bool `protobuf:"varint,6,opt,name=template_set_exceeds_limit,json=templateSetExceedsLimit,proto3" json:"template_set_exceeds_limit,omitempty"` - AppExceedsQuantity uint32 `protobuf:"varint,7,opt,name=app_exceeds_quantity,json=appExceedsQuantity,proto3" json:"app_exceeds_quantity,omitempty"` - TemplateSetExceedsQuantity uint32 `protobuf:"varint,8,opt,name=template_set_exceeds_quantity,json=templateSetExceedsQuantity,proto3" json:"template_set_exceeds_quantity,omitempty"` + TemplateId uint32 `protobuf:"varint,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` + TemplateRevisionId uint32 `protobuf:"varint,4,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` + TemplateRevisionName string `protobuf:"bytes,5,opt,name=template_revision_name,json=templateRevisionName,proto3" json:"template_revision_name,omitempty"` + TemplateRevisionMemo string `protobuf:"bytes,6,opt,name=template_revision_memo,json=templateRevisionMemo,proto3" json:"template_revision_memo,omitempty"` + FileType string `protobuf:"bytes,7,opt,name=file_type,json=fileType,proto3" json:"file_type,omitempty"` + FileMode string `protobuf:"bytes,8,opt,name=file_mode,json=fileMode,proto3" json:"file_mode,omitempty"` + User string `protobuf:"bytes,9,opt,name=user,proto3" json:"user,omitempty"` + UserGroup string `protobuf:"bytes,10,opt,name=user_group,json=userGroup,proto3" json:"user_group,omitempty"` + Privilege string `protobuf:"bytes,11,opt,name=privilege,proto3" json:"privilege,omitempty"` + Signature string `protobuf:"bytes,12,opt,name=signature,proto3" json:"signature,omitempty"` + ByteSize uint64 `protobuf:"varint,13,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` + Creator string `protobuf:"bytes,14,opt,name=creator,proto3" json:"creator,omitempty"` + CreateAt string `protobuf:"bytes,15,opt,name=create_at,json=createAt,proto3" json:"create_at,omitempty"` + Md5 string `protobuf:"bytes,16,opt,name=md5,proto3" json:"md5,omitempty"` + IsLatest bool `protobuf:"varint,17,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"` + Uid uint32 `protobuf:"varint,18,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint32 `protobuf:"varint,19,opt,name=gid,proto3" json:"gid,omitempty"` } -func (x *CheckTemplateSetReferencesAppsResp_Item) Reset() { - *x = CheckTemplateSetReferencesAppsResp_Item{} +func (x *GetTemplateRevisionResp_TemplateRevision) Reset() { + *x = GetTemplateRevisionResp_TemplateRevision{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[285] + mi := &file_data_service_proto_msgTypes[286] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CheckTemplateSetReferencesAppsResp_Item) String() string { +func (x *GetTemplateRevisionResp_TemplateRevision) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CheckTemplateSetReferencesAppsResp_Item) ProtoMessage() {} +func (*GetTemplateRevisionResp_TemplateRevision) ProtoMessage() {} -func (x *CheckTemplateSetReferencesAppsResp_Item) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[285] +func (x *GetTemplateRevisionResp_TemplateRevision) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[286] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18242,174 +18276,158 @@ func (x *CheckTemplateSetReferencesAppsResp_Item) ProtoReflect() protoreflect.Me return mi.MessageOf(x) } -// Deprecated: Use CheckTemplateSetReferencesAppsResp_Item.ProtoReflect.Descriptor instead. -func (*CheckTemplateSetReferencesAppsResp_Item) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{200, 0} +// Deprecated: Use GetTemplateRevisionResp_TemplateRevision.ProtoReflect.Descriptor instead. +func (*GetTemplateRevisionResp_TemplateRevision) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{128, 0} } -func (x *CheckTemplateSetReferencesAppsResp_Item) GetTemplateSetId() uint32 { +func (x *GetTemplateRevisionResp_TemplateRevision) GetTemplateId() uint32 { if x != nil { - return x.TemplateSetId + return x.TemplateId } return 0 } -func (x *CheckTemplateSetReferencesAppsResp_Item) GetTemplateSetName() string { +func (x *GetTemplateRevisionResp_TemplateRevision) GetName() string { if x != nil { - return x.TemplateSetName + return x.Name } return "" } -func (x *CheckTemplateSetReferencesAppsResp_Item) GetAppId() uint32 { +func (x *GetTemplateRevisionResp_TemplateRevision) GetPath() string { if x != nil { - return x.AppId + return x.Path } - return 0 + return "" } -func (x *CheckTemplateSetReferencesAppsResp_Item) GetAppName() string { +func (x *GetTemplateRevisionResp_TemplateRevision) GetTemplateRevisionId() uint32 { if x != nil { - return x.AppName + return x.TemplateRevisionId } - return "" + return 0 } -func (x *CheckTemplateSetReferencesAppsResp_Item) GetAppExceedsLimit() bool { +func (x *GetTemplateRevisionResp_TemplateRevision) GetTemplateRevisionName() string { if x != nil { - return x.AppExceedsLimit + return x.TemplateRevisionName } - return false + return "" } -func (x *CheckTemplateSetReferencesAppsResp_Item) GetTemplateSetExceedsLimit() bool { +func (x *GetTemplateRevisionResp_TemplateRevision) GetTemplateRevisionMemo() string { if x != nil { - return x.TemplateSetExceedsLimit + return x.TemplateRevisionMemo } - return false + return "" } -func (x *CheckTemplateSetReferencesAppsResp_Item) GetAppExceedsQuantity() uint32 { +func (x *GetTemplateRevisionResp_TemplateRevision) GetFileType() string { if x != nil { - return x.AppExceedsQuantity + return x.FileType } - return 0 + return "" } -func (x *CheckTemplateSetReferencesAppsResp_Item) GetTemplateSetExceedsQuantity() uint32 { +func (x *GetTemplateRevisionResp_TemplateRevision) GetFileMode() string { if x != nil { - return x.TemplateSetExceedsQuantity + return x.FileMode } - return 0 -} - -type ListAppGroupsResp_ListAppGroupsData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GroupId uint32 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - GroupName string `protobuf:"bytes,2,opt,name=group_name,json=groupName,proto3" json:"group_name,omitempty"` - ReleaseId uint32 `protobuf:"varint,3,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"` - ReleaseName string `protobuf:"bytes,4,opt,name=release_name,json=releaseName,proto3" json:"release_name,omitempty"` - OldSelector *structpb.Struct `protobuf:"bytes,5,opt,name=old_selector,json=oldSelector,proto3" json:"old_selector,omitempty"` - NewSelector *structpb.Struct `protobuf:"bytes,6,opt,name=new_selector,json=newSelector,proto3" json:"new_selector,omitempty"` - Edited bool `protobuf:"varint,7,opt,name=edited,proto3" json:"edited,omitempty"` + return "" } -func (x *ListAppGroupsResp_ListAppGroupsData) Reset() { - *x = ListAppGroupsResp_ListAppGroupsData{} - if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[286] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *GetTemplateRevisionResp_TemplateRevision) GetUser() string { + if x != nil { + return x.User } + return "" } -func (x *ListAppGroupsResp_ListAppGroupsData) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *GetTemplateRevisionResp_TemplateRevision) GetUserGroup() string { + if x != nil { + return x.UserGroup + } + return "" } -func (*ListAppGroupsResp_ListAppGroupsData) ProtoMessage() {} - -func (x *ListAppGroupsResp_ListAppGroupsData) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[286] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *GetTemplateRevisionResp_TemplateRevision) GetPrivilege() string { + if x != nil { + return x.Privilege } - return mi.MessageOf(x) + return "" } -// Deprecated: Use ListAppGroupsResp_ListAppGroupsData.ProtoReflect.Descriptor instead. -func (*ListAppGroupsResp_ListAppGroupsData) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{214, 0} +func (x *GetTemplateRevisionResp_TemplateRevision) GetSignature() string { + if x != nil { + return x.Signature + } + return "" } -func (x *ListAppGroupsResp_ListAppGroupsData) GetGroupId() uint32 { +func (x *GetTemplateRevisionResp_TemplateRevision) GetByteSize() uint64 { if x != nil { - return x.GroupId + return x.ByteSize } return 0 } -func (x *ListAppGroupsResp_ListAppGroupsData) GetGroupName() string { +func (x *GetTemplateRevisionResp_TemplateRevision) GetCreator() string { if x != nil { - return x.GroupName + return x.Creator } return "" } -func (x *ListAppGroupsResp_ListAppGroupsData) GetReleaseId() uint32 { +func (x *GetTemplateRevisionResp_TemplateRevision) GetCreateAt() string { if x != nil { - return x.ReleaseId + return x.CreateAt } - return 0 + return "" } -func (x *ListAppGroupsResp_ListAppGroupsData) GetReleaseName() string { +func (x *GetTemplateRevisionResp_TemplateRevision) GetMd5() string { if x != nil { - return x.ReleaseName + return x.Md5 } return "" } -func (x *ListAppGroupsResp_ListAppGroupsData) GetOldSelector() *structpb.Struct { +func (x *GetTemplateRevisionResp_TemplateRevision) GetIsLatest() bool { if x != nil { - return x.OldSelector + return x.IsLatest } - return nil + return false } -func (x *ListAppGroupsResp_ListAppGroupsData) GetNewSelector() *structpb.Struct { +func (x *GetTemplateRevisionResp_TemplateRevision) GetUid() uint32 { if x != nil { - return x.NewSelector + return x.Uid } - return nil + return 0 } -func (x *ListAppGroupsResp_ListAppGroupsData) GetEdited() bool { +func (x *GetTemplateRevisionResp_TemplateRevision) GetGid() uint32 { if x != nil { - return x.Edited + return x.Gid } - return false + return 0 } -type CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData struct { +type ImportFromTemplateSetToAppReq_Binding struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - GroupId uint32 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - Count uint32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` - Edited bool `protobuf:"varint,3,opt,name=edited,proto3" json:"edited,omitempty"` -} - -func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) Reset() { - *x = CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData{} + TemplateSetId uint32 `protobuf:"varint,1,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` + TemplateSpaceId uint32 `protobuf:"varint,2,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` + TemplateSpaceName string `protobuf:"bytes,3,opt,name=template_space_name,json=templateSpaceName,proto3" json:"template_space_name,omitempty"` + TemplateSetName string `protobuf:"bytes,4,opt,name=template_set_name,json=templateSetName,proto3" json:"template_set_name,omitempty"` + TemplateRevisions []*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding `protobuf:"bytes,5,rep,name=template_revisions,json=templateRevisions,proto3" json:"template_revisions,omitempty"` +} + +func (x *ImportFromTemplateSetToAppReq_Binding) Reset() { + *x = ImportFromTemplateSetToAppReq_Binding{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[287] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -18417,13 +18435,13 @@ func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) Reset() { } } -func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) String() string { +func (x *ImportFromTemplateSetToAppReq_Binding) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) ProtoMessage() {} +func (*ImportFromTemplateSetToAppReq_Binding) ProtoMessage() {} -func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) ProtoReflect() protoreflect.Message { +func (x *ImportFromTemplateSetToAppReq_Binding) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[287] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -18435,46 +18453,60 @@ func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) ProtoReflect() return mi.MessageOf(x) } -// Deprecated: Use CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData.ProtoReflect.Descriptor instead. -func (*CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{219, 0} +// Deprecated: Use ImportFromTemplateSetToAppReq_Binding.ProtoReflect.Descriptor instead. +func (*ImportFromTemplateSetToAppReq_Binding) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{160, 0} } -func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) GetGroupId() uint32 { +func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateSetId() uint32 { if x != nil { - return x.GroupId + return x.TemplateSetId } return 0 } -func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) GetCount() uint32 { +func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateSpaceId() uint32 { if x != nil { - return x.Count + return x.TemplateSpaceId } return 0 } -func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) GetEdited() bool { +func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateSpaceName() string { if x != nil { - return x.Edited + return x.TemplateSpaceName } - return false + return "" } -type ListGroupReleasedAppsResp_ListGroupReleasedAppsData struct { +func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateSetName() string { + if x != nil { + return x.TemplateSetName + } + return "" +} + +func (x *ImportFromTemplateSetToAppReq_Binding) GetTemplateRevisions() []*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding { + if x != nil { + return x.TemplateRevisions + } + return nil +} + +type ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - AppId uint32 `protobuf:"varint,1,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` - AppName string `protobuf:"bytes,2,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` - ReleaseId uint32 `protobuf:"varint,3,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"` - ReleaseName string `protobuf:"bytes,4,opt,name=release_name,json=releaseName,proto3" json:"release_name,omitempty"` - Edited bool `protobuf:"varint,5,opt,name=edited,proto3" json:"edited,omitempty"` + TemplateId uint32 `protobuf:"varint,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + TemplateRevisionId uint32 `protobuf:"varint,2,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` + IsLatest bool `protobuf:"varint,3,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"` + TemplateName string `protobuf:"bytes,4,opt,name=template_name,json=templateName,proto3" json:"template_name,omitempty"` + TemplateRevisionName string `protobuf:"bytes,5,opt,name=template_revision_name,json=templateRevisionName,proto3" json:"template_revision_name,omitempty"` } -func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) Reset() { - *x = ListGroupReleasedAppsResp_ListGroupReleasedAppsData{} +func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) Reset() { + *x = ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[288] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -18482,13 +18514,13 @@ func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) Reset() { } } -func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) String() string { +func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListGroupReleasedAppsResp_ListGroupReleasedAppsData) ProtoMessage() {} +func (*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) ProtoMessage() {} -func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) ProtoReflect() protoreflect.Message { +func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[288] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -18500,57 +18532,57 @@ func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) ProtoReflect() pro return mi.MessageOf(x) } -// Deprecated: Use ListGroupReleasedAppsResp_ListGroupReleasedAppsData.ProtoReflect.Descriptor instead. -func (*ListGroupReleasedAppsResp_ListGroupReleasedAppsData) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{221, 0} +// Deprecated: Use ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding.ProtoReflect.Descriptor instead. +func (*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{160, 0, 0} } -func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetAppId() uint32 { +func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetTemplateId() uint32 { if x != nil { - return x.AppId + return x.TemplateId } return 0 } -func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetAppName() string { +func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetTemplateRevisionId() uint32 { if x != nil { - return x.AppName + return x.TemplateRevisionId } - return "" + return 0 } -func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetReleaseId() uint32 { +func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetIsLatest() bool { if x != nil { - return x.ReleaseId + return x.IsLatest } - return 0 + return false } -func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetReleaseName() string { +func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetTemplateName() string { if x != nil { - return x.ReleaseName + return x.TemplateName } return "" } -func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetEdited() bool { +func (x *ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding) GetTemplateRevisionName() string { if x != nil { - return x.Edited + return x.TemplateRevisionName } - return false + return "" } -type BatchUpsertKvsReq_Kv struct { +type CheckTemplateSetReferencesAppsReq_Item struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - KvAttachment *kv.KvAttachment `protobuf:"bytes,1,opt,name=kv_attachment,json=kvAttachment,proto3" json:"kv_attachment,omitempty"` - KvSpec *kv.KvSpec `protobuf:"bytes,2,opt,name=kv_spec,json=kvSpec,proto3" json:"kv_spec,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` } -func (x *BatchUpsertKvsReq_Kv) Reset() { - *x = BatchUpsertKvsReq_Kv{} +func (x *CheckTemplateSetReferencesAppsReq_Item) Reset() { + *x = CheckTemplateSetReferencesAppsReq_Item{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[289] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -18558,13 +18590,13 @@ func (x *BatchUpsertKvsReq_Kv) Reset() { } } -func (x *BatchUpsertKvsReq_Kv) String() string { +func (x *CheckTemplateSetReferencesAppsReq_Item) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BatchUpsertKvsReq_Kv) ProtoMessage() {} +func (*CheckTemplateSetReferencesAppsReq_Item) ProtoMessage() {} -func (x *BatchUpsertKvsReq_Kv) ProtoReflect() protoreflect.Message { +func (x *CheckTemplateSetReferencesAppsReq_Item) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[289] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -18576,36 +18608,42 @@ func (x *BatchUpsertKvsReq_Kv) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BatchUpsertKvsReq_Kv.ProtoReflect.Descriptor instead. -func (*BatchUpsertKvsReq_Kv) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{237, 0} +// Deprecated: Use CheckTemplateSetReferencesAppsReq_Item.ProtoReflect.Descriptor instead. +func (*CheckTemplateSetReferencesAppsReq_Item) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{199, 0} } -func (x *BatchUpsertKvsReq_Kv) GetKvAttachment() *kv.KvAttachment { +func (x *CheckTemplateSetReferencesAppsReq_Item) GetId() uint32 { if x != nil { - return x.KvAttachment + return x.Id } - return nil + return 0 } -func (x *BatchUpsertKvsReq_Kv) GetKvSpec() *kv.KvSpec { +func (x *CheckTemplateSetReferencesAppsReq_Item) GetName() string { if x != nil { - return x.KvSpec + return x.Name } - return nil + return "" } -type ListClientsReq_Order struct { +type CheckTemplateSetReferencesAppsResp_Item struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Desc string `protobuf:"bytes,1,opt,name=desc,proto3" json:"desc,omitempty"` - Asc string `protobuf:"bytes,2,opt,name=asc,proto3" json:"asc,omitempty"` + TemplateSetId uint32 `protobuf:"varint,1,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` + TemplateSetName string `protobuf:"bytes,2,opt,name=template_set_name,json=templateSetName,proto3" json:"template_set_name,omitempty"` + AppId uint32 `protobuf:"varint,3,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + AppName string `protobuf:"bytes,4,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` + AppExceedsLimit bool `protobuf:"varint,5,opt,name=app_exceeds_limit,json=appExceedsLimit,proto3" json:"app_exceeds_limit,omitempty"` + TemplateSetExceedsLimit bool `protobuf:"varint,6,opt,name=template_set_exceeds_limit,json=templateSetExceedsLimit,proto3" json:"template_set_exceeds_limit,omitempty"` + AppExceedsQuantity uint32 `protobuf:"varint,7,opt,name=app_exceeds_quantity,json=appExceedsQuantity,proto3" json:"app_exceeds_quantity,omitempty"` + TemplateSetExceedsQuantity uint32 `protobuf:"varint,8,opt,name=template_set_exceeds_quantity,json=templateSetExceedsQuantity,proto3" json:"template_set_exceeds_quantity,omitempty"` } -func (x *ListClientsReq_Order) Reset() { - *x = ListClientsReq_Order{} +func (x *CheckTemplateSetReferencesAppsResp_Item) Reset() { + *x = CheckTemplateSetReferencesAppsResp_Item{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[290] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -18613,13 +18651,13 @@ func (x *ListClientsReq_Order) Reset() { } } -func (x *ListClientsReq_Order) String() string { +func (x *CheckTemplateSetReferencesAppsResp_Item) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListClientsReq_Order) ProtoMessage() {} +func (*CheckTemplateSetReferencesAppsResp_Item) ProtoMessage() {} -func (x *ListClientsReq_Order) ProtoReflect() protoreflect.Message { +func (x *CheckTemplateSetReferencesAppsResp_Item) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[290] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -18631,39 +18669,83 @@ func (x *ListClientsReq_Order) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListClientsReq_Order.ProtoReflect.Descriptor instead. -func (*ListClientsReq_Order) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{247, 0} +// Deprecated: Use CheckTemplateSetReferencesAppsResp_Item.ProtoReflect.Descriptor instead. +func (*CheckTemplateSetReferencesAppsResp_Item) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{200, 0} } -func (x *ListClientsReq_Order) GetDesc() string { +func (x *CheckTemplateSetReferencesAppsResp_Item) GetTemplateSetId() uint32 { if x != nil { - return x.Desc + return x.TemplateSetId + } + return 0 +} + +func (x *CheckTemplateSetReferencesAppsResp_Item) GetTemplateSetName() string { + if x != nil { + return x.TemplateSetName } return "" } -func (x *ListClientsReq_Order) GetAsc() string { +func (x *CheckTemplateSetReferencesAppsResp_Item) GetAppId() uint32 { if x != nil { - return x.Asc + return x.AppId + } + return 0 +} + +func (x *CheckTemplateSetReferencesAppsResp_Item) GetAppName() string { + if x != nil { + return x.AppName } return "" } -type ListClientsResp_Item struct { +func (x *CheckTemplateSetReferencesAppsResp_Item) GetAppExceedsLimit() bool { + if x != nil { + return x.AppExceedsLimit + } + return false +} + +func (x *CheckTemplateSetReferencesAppsResp_Item) GetTemplateSetExceedsLimit() bool { + if x != nil { + return x.TemplateSetExceedsLimit + } + return false +} + +func (x *CheckTemplateSetReferencesAppsResp_Item) GetAppExceedsQuantity() uint32 { + if x != nil { + return x.AppExceedsQuantity + } + return 0 +} + +func (x *CheckTemplateSetReferencesAppsResp_Item) GetTemplateSetExceedsQuantity() uint32 { + if x != nil { + return x.TemplateSetExceedsQuantity + } + return 0 +} + +type ListAppGroupsResp_ListAppGroupsData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Client *client.Client `protobuf:"bytes,1,opt,name=client,proto3" json:"client,omitempty"` - CpuUsageStr string `protobuf:"bytes,2,opt,name=cpu_usage_str,json=cpuUsageStr,proto3" json:"cpu_usage_str,omitempty"` - CpuMaxUsageStr string `protobuf:"bytes,3,opt,name=cpu_max_usage_str,json=cpuMaxUsageStr,proto3" json:"cpu_max_usage_str,omitempty"` - MemoryUsageStr string `protobuf:"bytes,4,opt,name=memory_usage_str,json=memoryUsageStr,proto3" json:"memory_usage_str,omitempty"` - MemoryMaxUsageStr string `protobuf:"bytes,5,opt,name=memory_max_usage_str,json=memoryMaxUsageStr,proto3" json:"memory_max_usage_str,omitempty"` + GroupId uint32 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + GroupName string `protobuf:"bytes,2,opt,name=group_name,json=groupName,proto3" json:"group_name,omitempty"` + ReleaseId uint32 `protobuf:"varint,3,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"` + ReleaseName string `protobuf:"bytes,4,opt,name=release_name,json=releaseName,proto3" json:"release_name,omitempty"` + OldSelector *structpb.Struct `protobuf:"bytes,5,opt,name=old_selector,json=oldSelector,proto3" json:"old_selector,omitempty"` + NewSelector *structpb.Struct `protobuf:"bytes,6,opt,name=new_selector,json=newSelector,proto3" json:"new_selector,omitempty"` + Edited bool `protobuf:"varint,7,opt,name=edited,proto3" json:"edited,omitempty"` } -func (x *ListClientsResp_Item) Reset() { - *x = ListClientsResp_Item{} +func (x *ListAppGroupsResp_ListAppGroupsData) Reset() { + *x = ListAppGroupsResp_ListAppGroupsData{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[291] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -18671,13 +18753,13 @@ func (x *ListClientsResp_Item) Reset() { } } -func (x *ListClientsResp_Item) String() string { +func (x *ListAppGroupsResp_ListAppGroupsData) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListClientsResp_Item) ProtoMessage() {} +func (*ListAppGroupsResp_ListAppGroupsData) ProtoMessage() {} -func (x *ListClientsResp_Item) ProtoReflect() protoreflect.Message { +func (x *ListAppGroupsResp_ListAppGroupsData) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[291] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -18689,57 +18771,72 @@ func (x *ListClientsResp_Item) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListClientsResp_Item.ProtoReflect.Descriptor instead. -func (*ListClientsResp_Item) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{249, 0} +// Deprecated: Use ListAppGroupsResp_ListAppGroupsData.ProtoReflect.Descriptor instead. +func (*ListAppGroupsResp_ListAppGroupsData) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{214, 0} } -func (x *ListClientsResp_Item) GetClient() *client.Client { +func (x *ListAppGroupsResp_ListAppGroupsData) GetGroupId() uint32 { if x != nil { - return x.Client + return x.GroupId } - return nil + return 0 } -func (x *ListClientsResp_Item) GetCpuUsageStr() string { +func (x *ListAppGroupsResp_ListAppGroupsData) GetGroupName() string { if x != nil { - return x.CpuUsageStr + return x.GroupName } return "" } -func (x *ListClientsResp_Item) GetCpuMaxUsageStr() string { +func (x *ListAppGroupsResp_ListAppGroupsData) GetReleaseId() uint32 { if x != nil { - return x.CpuMaxUsageStr + return x.ReleaseId } - return "" + return 0 } -func (x *ListClientsResp_Item) GetMemoryUsageStr() string { +func (x *ListAppGroupsResp_ListAppGroupsData) GetReleaseName() string { if x != nil { - return x.MemoryUsageStr + return x.ReleaseName } return "" } -func (x *ListClientsResp_Item) GetMemoryMaxUsageStr() string { +func (x *ListAppGroupsResp_ListAppGroupsData) GetOldSelector() *structpb.Struct { if x != nil { - return x.MemoryMaxUsageStr + return x.OldSelector } - return "" + return nil } -type ListClientEventsReq_Order struct { +func (x *ListAppGroupsResp_ListAppGroupsData) GetNewSelector() *structpb.Struct { + if x != nil { + return x.NewSelector + } + return nil +} + +func (x *ListAppGroupsResp_ListAppGroupsData) GetEdited() bool { + if x != nil { + return x.Edited + } + return false +} + +type CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Desc string `protobuf:"bytes,1,opt,name=desc,proto3" json:"desc,omitempty"` - Asc string `protobuf:"bytes,2,opt,name=asc,proto3" json:"asc,omitempty"` + GroupId uint32 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + Count uint32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` + Edited bool `protobuf:"varint,3,opt,name=edited,proto3" json:"edited,omitempty"` } -func (x *ListClientEventsReq_Order) Reset() { - *x = ListClientEventsReq_Order{} +func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) Reset() { + *x = CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[292] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -18747,13 +18844,13 @@ func (x *ListClientEventsReq_Order) Reset() { } } -func (x *ListClientEventsReq_Order) String() string { +func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListClientEventsReq_Order) ProtoMessage() {} +func (*CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) ProtoMessage() {} -func (x *ListClientEventsReq_Order) ProtoReflect() protoreflect.Message { +func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[292] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -18765,41 +18862,46 @@ func (x *ListClientEventsReq_Order) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListClientEventsReq_Order.ProtoReflect.Descriptor instead. -func (*ListClientEventsReq_Order) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{250, 0} +// Deprecated: Use CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData.ProtoReflect.Descriptor instead. +func (*CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{219, 0} } -func (x *ListClientEventsReq_Order) GetDesc() string { +func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) GetGroupId() uint32 { if x != nil { - return x.Desc + return x.GroupId } - return "" + return 0 } -func (x *ListClientEventsReq_Order) GetAsc() string { +func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) GetCount() uint32 { if x != nil { - return x.Asc + return x.Count } - return "" + return 0 } -type CompareConfigItemConflictsResp_NonTemplateConfig struct { +func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) GetEdited() bool { + if x != nil { + return x.Edited + } + return false +} + +type ListGroupReleasedAppsResp_ListGroupReleasedAppsData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - ConfigItemSpec *config_item.ConfigItemSpec `protobuf:"bytes,2,opt,name=config_item_spec,json=configItemSpec,proto3" json:"config_item_spec,omitempty"` - Variables []*template_variable.TemplateVariableSpec `protobuf:"bytes,3,rep,name=variables,proto3" json:"variables,omitempty"` - IsExist bool `protobuf:"varint,4,opt,name=is_exist,json=isExist,proto3" json:"is_exist,omitempty"` - Signature string `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` - ByteSize uint64 `protobuf:"varint,6,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` - Md5 string `protobuf:"bytes,7,opt,name=md5,proto3" json:"md5,omitempty"` + AppId uint32 `protobuf:"varint,1,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + AppName string `protobuf:"bytes,2,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` + ReleaseId uint32 `protobuf:"varint,3,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"` + ReleaseName string `protobuf:"bytes,4,opt,name=release_name,json=releaseName,proto3" json:"release_name,omitempty"` + Edited bool `protobuf:"varint,5,opt,name=edited,proto3" json:"edited,omitempty"` } -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) Reset() { - *x = CompareConfigItemConflictsResp_NonTemplateConfig{} +func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) Reset() { + *x = ListGroupReleasedAppsResp_ListGroupReleasedAppsData{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[293] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -18807,13 +18909,13 @@ func (x *CompareConfigItemConflictsResp_NonTemplateConfig) Reset() { } } -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) String() string { +func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CompareConfigItemConflictsResp_NonTemplateConfig) ProtoMessage() {} +func (*ListGroupReleasedAppsResp_ListGroupReleasedAppsData) ProtoMessage() {} -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) ProtoReflect() protoreflect.Message { +func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[293] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -18825,78 +18927,57 @@ func (x *CompareConfigItemConflictsResp_NonTemplateConfig) ProtoReflect() protor return mi.MessageOf(x) } -// Deprecated: Use CompareConfigItemConflictsResp_NonTemplateConfig.ProtoReflect.Descriptor instead. -func (*CompareConfigItemConflictsResp_NonTemplateConfig) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{262, 0} +// Deprecated: Use ListGroupReleasedAppsResp_ListGroupReleasedAppsData.ProtoReflect.Descriptor instead. +func (*ListGroupReleasedAppsResp_ListGroupReleasedAppsData) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{221, 0} } -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetId() uint32 { +func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetAppId() uint32 { if x != nil { - return x.Id + return x.AppId } return 0 } -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetConfigItemSpec() *config_item.ConfigItemSpec { - if x != nil { - return x.ConfigItemSpec - } - return nil -} - -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetVariables() []*template_variable.TemplateVariableSpec { +func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetAppName() string { if x != nil { - return x.Variables + return x.AppName } - return nil + return "" } -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetIsExist() bool { +func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetReleaseId() uint32 { if x != nil { - return x.IsExist + return x.ReleaseId } - return false + return 0 } -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetSignature() string { +func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetReleaseName() string { if x != nil { - return x.Signature + return x.ReleaseName } return "" } -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetByteSize() uint64 { - if x != nil { - return x.ByteSize - } - return 0 -} - -func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetMd5() string { +func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) GetEdited() bool { if x != nil { - return x.Md5 + return x.Edited } - return "" + return false } -type CompareConfigItemConflictsResp_TemplateConfig struct { +type BatchUpsertKvsReq_Kv struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TemplateSpaceId uint32 `protobuf:"varint,1,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` - TemplateSpaceName string `protobuf:"bytes,2,opt,name=template_space_name,json=templateSpaceName,proto3" json:"template_space_name,omitempty"` - TemplateSetId uint32 `protobuf:"varint,3,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` - TemplateSetName string `protobuf:"bytes,4,opt,name=template_set_name,json=templateSetName,proto3" json:"template_set_name,omitempty"` - IsExist bool `protobuf:"varint,5,opt,name=is_exist,json=isExist,proto3" json:"is_exist,omitempty"` - TemplateRevisions []*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail `protobuf:"bytes,6,rep,name=template_revisions,json=templateRevisions,proto3" json:"template_revisions,omitempty"` - TemplateSpaceExist bool `protobuf:"varint,7,opt,name=template_space_exist,json=templateSpaceExist,proto3" json:"template_space_exist,omitempty"` - TemplateSetExist bool `protobuf:"varint,8,opt,name=template_set_exist,json=templateSetExist,proto3" json:"template_set_exist,omitempty"` - TemplateSetIsEmpty bool `protobuf:"varint,9,opt,name=template_set_is_empty,json=templateSetIsEmpty,proto3" json:"template_set_is_empty,omitempty"` + KvAttachment *kv.KvAttachment `protobuf:"bytes,1,opt,name=kv_attachment,json=kvAttachment,proto3" json:"kv_attachment,omitempty"` + KvSpec *kv.KvSpec `protobuf:"bytes,2,opt,name=kv_spec,json=kvSpec,proto3" json:"kv_spec,omitempty"` } -func (x *CompareConfigItemConflictsResp_TemplateConfig) Reset() { - *x = CompareConfigItemConflictsResp_TemplateConfig{} +func (x *BatchUpsertKvsReq_Kv) Reset() { + *x = BatchUpsertKvsReq_Kv{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[294] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -18904,13 +18985,13 @@ func (x *CompareConfigItemConflictsResp_TemplateConfig) Reset() { } } -func (x *CompareConfigItemConflictsResp_TemplateConfig) String() string { +func (x *BatchUpsertKvsReq_Kv) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CompareConfigItemConflictsResp_TemplateConfig) ProtoMessage() {} +func (*BatchUpsertKvsReq_Kv) ProtoMessage() {} -func (x *CompareConfigItemConflictsResp_TemplateConfig) ProtoReflect() protoreflect.Message { +func (x *BatchUpsertKvsReq_Kv) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[294] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -18922,87 +19003,36 @@ func (x *CompareConfigItemConflictsResp_TemplateConfig) ProtoReflect() protorefl return mi.MessageOf(x) } -// Deprecated: Use CompareConfigItemConflictsResp_TemplateConfig.ProtoReflect.Descriptor instead. -func (*CompareConfigItemConflictsResp_TemplateConfig) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{262, 1} -} - -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSpaceId() uint32 { - if x != nil { - return x.TemplateSpaceId - } - return 0 -} - -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSpaceName() string { - if x != nil { - return x.TemplateSpaceName - } - return "" -} - -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSetId() uint32 { - if x != nil { - return x.TemplateSetId - } - return 0 -} - -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSetName() string { - if x != nil { - return x.TemplateSetName - } - return "" -} - -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetIsExist() bool { - if x != nil { - return x.IsExist - } - return false +// Deprecated: Use BatchUpsertKvsReq_Kv.ProtoReflect.Descriptor instead. +func (*BatchUpsertKvsReq_Kv) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{237, 0} } -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateRevisions() []*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail { +func (x *BatchUpsertKvsReq_Kv) GetKvAttachment() *kv.KvAttachment { if x != nil { - return x.TemplateRevisions + return x.KvAttachment } return nil } -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSpaceExist() bool { - if x != nil { - return x.TemplateSpaceExist - } - return false -} - -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSetExist() bool { - if x != nil { - return x.TemplateSetExist - } - return false -} - -func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSetIsEmpty() bool { +func (x *BatchUpsertKvsReq_Kv) GetKvSpec() *kv.KvSpec { if x != nil { - return x.TemplateSetIsEmpty + return x.KvSpec } - return false + return nil } -type CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail struct { +type ListClientsReq_Order struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TemplateId uint32 `protobuf:"varint,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` - TemplateRevisionId uint32 `protobuf:"varint,2,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` - IsLatest bool `protobuf:"varint,3,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"` - Variables []*template_variable.TemplateVariableSpec `protobuf:"bytes,5,rep,name=variables,proto3" json:"variables,omitempty"` + Desc string `protobuf:"bytes,1,opt,name=desc,proto3" json:"desc,omitempty"` + Asc string `protobuf:"bytes,2,opt,name=asc,proto3" json:"asc,omitempty"` } -func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) Reset() { - *x = CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail{} +func (x *ListClientsReq_Order) Reset() { + *x = ListClientsReq_Order{} if protoimpl.UnsafeEnabled { mi := &file_data_service_proto_msgTypes[295] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -19010,13 +19040,13 @@ func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) R } } -func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) String() string { +func (x *ListClientsReq_Order) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) ProtoMessage() {} +func (*ListClientsReq_Order) ProtoMessage() {} -func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) ProtoReflect() protoreflect.Message { +func (x *ListClientsReq_Order) ProtoReflect() protoreflect.Message { mi := &file_data_service_proto_msgTypes[295] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -19028,12 +19058,410 @@ func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) P return mi.MessageOf(x) } -// Deprecated: Use CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail.ProtoReflect.Descriptor instead. -func (*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) Descriptor() ([]byte, []int) { - return file_data_service_proto_rawDescGZIP(), []int{262, 1, 0} +// Deprecated: Use ListClientsReq_Order.ProtoReflect.Descriptor instead. +func (*ListClientsReq_Order) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{247, 0} } -func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetTemplateId() uint32 { +func (x *ListClientsReq_Order) GetDesc() string { + if x != nil { + return x.Desc + } + return "" +} + +func (x *ListClientsReq_Order) GetAsc() string { + if x != nil { + return x.Asc + } + return "" +} + +type ListClientsResp_Item struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Client *client.Client `protobuf:"bytes,1,opt,name=client,proto3" json:"client,omitempty"` + CpuUsageStr string `protobuf:"bytes,2,opt,name=cpu_usage_str,json=cpuUsageStr,proto3" json:"cpu_usage_str,omitempty"` + CpuMaxUsageStr string `protobuf:"bytes,3,opt,name=cpu_max_usage_str,json=cpuMaxUsageStr,proto3" json:"cpu_max_usage_str,omitempty"` + MemoryUsageStr string `protobuf:"bytes,4,opt,name=memory_usage_str,json=memoryUsageStr,proto3" json:"memory_usage_str,omitempty"` + MemoryMaxUsageStr string `protobuf:"bytes,5,opt,name=memory_max_usage_str,json=memoryMaxUsageStr,proto3" json:"memory_max_usage_str,omitempty"` +} + +func (x *ListClientsResp_Item) Reset() { + *x = ListClientsResp_Item{} + if protoimpl.UnsafeEnabled { + mi := &file_data_service_proto_msgTypes[296] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListClientsResp_Item) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListClientsResp_Item) ProtoMessage() {} + +func (x *ListClientsResp_Item) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[296] + 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 ListClientsResp_Item.ProtoReflect.Descriptor instead. +func (*ListClientsResp_Item) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{249, 0} +} + +func (x *ListClientsResp_Item) GetClient() *client.Client { + if x != nil { + return x.Client + } + return nil +} + +func (x *ListClientsResp_Item) GetCpuUsageStr() string { + if x != nil { + return x.CpuUsageStr + } + return "" +} + +func (x *ListClientsResp_Item) GetCpuMaxUsageStr() string { + if x != nil { + return x.CpuMaxUsageStr + } + return "" +} + +func (x *ListClientsResp_Item) GetMemoryUsageStr() string { + if x != nil { + return x.MemoryUsageStr + } + return "" +} + +func (x *ListClientsResp_Item) GetMemoryMaxUsageStr() string { + if x != nil { + return x.MemoryMaxUsageStr + } + return "" +} + +type ListClientEventsReq_Order struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Desc string `protobuf:"bytes,1,opt,name=desc,proto3" json:"desc,omitempty"` + Asc string `protobuf:"bytes,2,opt,name=asc,proto3" json:"asc,omitempty"` +} + +func (x *ListClientEventsReq_Order) Reset() { + *x = ListClientEventsReq_Order{} + if protoimpl.UnsafeEnabled { + mi := &file_data_service_proto_msgTypes[297] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListClientEventsReq_Order) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListClientEventsReq_Order) ProtoMessage() {} + +func (x *ListClientEventsReq_Order) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[297] + 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 ListClientEventsReq_Order.ProtoReflect.Descriptor instead. +func (*ListClientEventsReq_Order) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{250, 0} +} + +func (x *ListClientEventsReq_Order) GetDesc() string { + if x != nil { + return x.Desc + } + return "" +} + +func (x *ListClientEventsReq_Order) GetAsc() string { + if x != nil { + return x.Asc + } + return "" +} + +type CompareConfigItemConflictsResp_NonTemplateConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + ConfigItemSpec *config_item.ConfigItemSpec `protobuf:"bytes,2,opt,name=config_item_spec,json=configItemSpec,proto3" json:"config_item_spec,omitempty"` + Variables []*template_variable.TemplateVariableSpec `protobuf:"bytes,3,rep,name=variables,proto3" json:"variables,omitempty"` + IsExist bool `protobuf:"varint,4,opt,name=is_exist,json=isExist,proto3" json:"is_exist,omitempty"` + Signature string `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` + ByteSize uint64 `protobuf:"varint,6,opt,name=byte_size,json=byteSize,proto3" json:"byte_size,omitempty"` + Md5 string `protobuf:"bytes,7,opt,name=md5,proto3" json:"md5,omitempty"` +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) Reset() { + *x = CompareConfigItemConflictsResp_NonTemplateConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_data_service_proto_msgTypes[298] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompareConfigItemConflictsResp_NonTemplateConfig) ProtoMessage() {} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[298] + 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 CompareConfigItemConflictsResp_NonTemplateConfig.ProtoReflect.Descriptor instead. +func (*CompareConfigItemConflictsResp_NonTemplateConfig) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{262, 0} +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetConfigItemSpec() *config_item.ConfigItemSpec { + if x != nil { + return x.ConfigItemSpec + } + return nil +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetVariables() []*template_variable.TemplateVariableSpec { + if x != nil { + return x.Variables + } + return nil +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetIsExist() bool { + if x != nil { + return x.IsExist + } + return false +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetSignature() string { + if x != nil { + return x.Signature + } + return "" +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetByteSize() uint64 { + if x != nil { + return x.ByteSize + } + return 0 +} + +func (x *CompareConfigItemConflictsResp_NonTemplateConfig) GetMd5() string { + if x != nil { + return x.Md5 + } + return "" +} + +type CompareConfigItemConflictsResp_TemplateConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TemplateSpaceId uint32 `protobuf:"varint,1,opt,name=template_space_id,json=templateSpaceId,proto3" json:"template_space_id,omitempty"` + TemplateSpaceName string `protobuf:"bytes,2,opt,name=template_space_name,json=templateSpaceName,proto3" json:"template_space_name,omitempty"` + TemplateSetId uint32 `protobuf:"varint,3,opt,name=template_set_id,json=templateSetId,proto3" json:"template_set_id,omitempty"` + TemplateSetName string `protobuf:"bytes,4,opt,name=template_set_name,json=templateSetName,proto3" json:"template_set_name,omitempty"` + IsExist bool `protobuf:"varint,5,opt,name=is_exist,json=isExist,proto3" json:"is_exist,omitempty"` + TemplateRevisions []*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail `protobuf:"bytes,6,rep,name=template_revisions,json=templateRevisions,proto3" json:"template_revisions,omitempty"` + TemplateSpaceExist bool `protobuf:"varint,7,opt,name=template_space_exist,json=templateSpaceExist,proto3" json:"template_space_exist,omitempty"` + TemplateSetExist bool `protobuf:"varint,8,opt,name=template_set_exist,json=templateSetExist,proto3" json:"template_set_exist,omitempty"` + TemplateSetIsEmpty bool `protobuf:"varint,9,opt,name=template_set_is_empty,json=templateSetIsEmpty,proto3" json:"template_set_is_empty,omitempty"` +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) Reset() { + *x = CompareConfigItemConflictsResp_TemplateConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_data_service_proto_msgTypes[299] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompareConfigItemConflictsResp_TemplateConfig) ProtoMessage() {} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[299] + 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 CompareConfigItemConflictsResp_TemplateConfig.ProtoReflect.Descriptor instead. +func (*CompareConfigItemConflictsResp_TemplateConfig) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{262, 1} +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSpaceId() uint32 { + if x != nil { + return x.TemplateSpaceId + } + return 0 +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSpaceName() string { + if x != nil { + return x.TemplateSpaceName + } + return "" +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSetId() uint32 { + if x != nil { + return x.TemplateSetId + } + return 0 +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSetName() string { + if x != nil { + return x.TemplateSetName + } + return "" +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetIsExist() bool { + if x != nil { + return x.IsExist + } + return false +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateRevisions() []*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail { + if x != nil { + return x.TemplateRevisions + } + return nil +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSpaceExist() bool { + if x != nil { + return x.TemplateSpaceExist + } + return false +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSetExist() bool { + if x != nil { + return x.TemplateSetExist + } + return false +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig) GetTemplateSetIsEmpty() bool { + if x != nil { + return x.TemplateSetIsEmpty + } + return false +} + +type CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TemplateId uint32 `protobuf:"varint,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + TemplateRevisionId uint32 `protobuf:"varint,2,opt,name=template_revision_id,json=templateRevisionId,proto3" json:"template_revision_id,omitempty"` + IsLatest bool `protobuf:"varint,3,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"` + Variables []*template_variable.TemplateVariableSpec `protobuf:"bytes,5,rep,name=variables,proto3" json:"variables,omitempty"` + Permission *config_item.FilePermission `protobuf:"bytes,6,opt,name=permission,proto3" json:"permission,omitempty"` +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) Reset() { + *x = CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail{} + if protoimpl.UnsafeEnabled { + mi := &file_data_service_proto_msgTypes[300] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) ProtoMessage() {} + +func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[300] + 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 CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail.ProtoReflect.Descriptor instead. +func (*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{262, 1, 0} +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetTemplateId() uint32 { if x != nil { return x.TemplateId } @@ -19042,23 +19470,109 @@ func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) G func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetTemplateRevisionId() uint32 { if x != nil { - return x.TemplateRevisionId + return x.TemplateRevisionId + } + return 0 +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetIsLatest() bool { + if x != nil { + return x.IsLatest + } + return false +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetVariables() []*template_variable.TemplateVariableSpec { + if x != nil { + return x.Variables + } + return nil +} + +func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetPermission() *config_item.FilePermission { + if x != nil { + return x.Permission + } + return nil +} + +type ListUserPrivilegesResp_Detail struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + PrivilegeType string `protobuf:"bytes,3,opt,name=privilege_type,json=privilegeType,proto3" json:"privilege_type,omitempty"` + ReadOnly bool `protobuf:"varint,4,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` + Pid uint32 `protobuf:"varint,5,opt,name=pid,proto3" json:"pid,omitempty"` // 权限ID +} + +func (x *ListUserPrivilegesResp_Detail) Reset() { + *x = ListUserPrivilegesResp_Detail{} + if protoimpl.UnsafeEnabled { + mi := &file_data_service_proto_msgTypes[301] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListUserPrivilegesResp_Detail) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListUserPrivilegesResp_Detail) ProtoMessage() {} + +func (x *ListUserPrivilegesResp_Detail) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[301] + 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 ListUserPrivilegesResp_Detail.ProtoReflect.Descriptor instead. +func (*ListUserPrivilegesResp_Detail) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{270, 0} +} + +func (x *ListUserPrivilegesResp_Detail) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ListUserPrivilegesResp_Detail) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ListUserPrivilegesResp_Detail) GetPrivilegeType() string { + if x != nil { + return x.PrivilegeType } - return 0 + return "" } -func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetIsLatest() bool { +func (x *ListUserPrivilegesResp_Detail) GetReadOnly() bool { if x != nil { - return x.IsLatest + return x.ReadOnly } return false } -func (x *CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail) GetVariables() []*template_variable.TemplateVariableSpec { +func (x *ListUserPrivilegesResp_Detail) GetPid() uint32 { if x != nil { - return x.Variables + return x.Pid } - return nil + return 0 } var File_data_service_proto protoreflect.FileDescriptor @@ -20151,7 +20665,7 @@ var file_data_service_proto_rawDesc = []byte{ 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x93, 0x02, 0x0a, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xbf, 0x02, 0x0a, 0x17, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, @@ -20161,41 +20675,46 @@ var file_data_service_proto_rawDesc = []byte{ 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, - 0x49, 0x64, 0x73, 0x1a, 0x7d, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x30, 0x0a, 0x08, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, - 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x22, 0x2f, 0x0a, 0x1b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, - 0x69, 0x64, 0x73, 0x22, 0xf6, 0x02, 0x0a, 0x21, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, - 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x49, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, - 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, - 0x65, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, - 0x6c, 0x65, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x70, 0x70, 0x49, 0x64, 0x73, 0x12, 0x2f, 0x0a, - 0x13, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, - 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x6f, 0x5f, 0x73, 0x65, 0x74, - 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0e, 0x6e, 0x6f, 0x53, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0x36, 0x0a, 0x22, + 0x49, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x1a, + 0x7d, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x30, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x11, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x2f, + 0x0a, 0x1b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, + 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, + 0x9a, 0x03, 0x0a, 0x21, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, + 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, + 0x12, 0x17, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, + 0x0d, 0x52, 0x06, 0x61, 0x70, 0x70, 0x49, 0x64, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x63, + 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, + 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, + 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x6f, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x70, 0x65, + 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6e, 0x6f, + 0x53, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x11, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, + 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x67, 0x69, 0x64, 0x22, 0x36, 0x0a, 0x22, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, @@ -20250,13 +20769,13 @@ var file_data_service_proto_rawDesc = []byte{ 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x89, 0x05, 0x0a, 0x17, 0x47, 0x65, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xad, 0x05, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x1a, 0xa5, 0x04, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x1a, 0xc9, 0x04, 0x0a, 0x10, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, @@ -20291,164 +20810,52 @@ var file_data_service_proto_rawDesc = []byte{ 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x64, 0x35, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x22, 0x6d, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, - 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x31, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, - 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x52, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, + 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x12, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x13, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x67, 0x69, 0x64, 0x22, 0x6d, 0x0a, 0x19, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x5d, 0x0a, 0x21, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, - 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x22, 0x61, 0x0a, 0x22, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x3b, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x82, 0x01, - 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x3d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, - 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x41, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, - 0x65, 0x63, 0x22, 0xde, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, - 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, - 0x61, 0x6c, 0x6c, 0x22, 0x5b, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x22, 0xa8, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x0a, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x7b, 0x0a, 0x14, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, - 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x41, 0x74, 0x74, 0x61, - 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x46, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, - 0x22, 0x48, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x07, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, - 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x2c, 0x0a, 0x18, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, - 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x4a, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x22, 0x34, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x72, 0x69, 0x65, 0x66, 0x49, 0x6e, 0x66, 0x6f, - 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x5b, 0x0a, 0x21, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x72, 0x69, - 0x65, 0x66, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x36, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x72, 0x69, 0x65, 0x66, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x44, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x51, 0x0a, - 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, - 0x69, 0x7a, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, - 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x4f, 0x66, 0x42, 0x69, - 0x7a, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x22, 0x95, 0x01, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, - 0x12, 0x43, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x70, - 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x88, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, - 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, - 0x61, 0x6c, 0x6c, 0x22, 0x68, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x61, 0x74, - 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xa5, 0x01, - 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x43, 0x0a, - 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x74, 0x74, 0x61, - 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x72, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, - 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x43, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, - 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xf3, 0x01, 0x0a, 0x1c, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, + 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x48, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, + 0x64, 0x73, 0x22, 0x52, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x5d, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, + 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, + 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, + 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, + 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x49, 0x64, 0x73, 0x22, 0x61, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, + 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, + 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3b, 0x0a, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, + 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x12, 0x3d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0xde, 0x01, + 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, @@ -20456,311 +20863,363 @@ var file_data_service_proto_rawDesc = []byte{ 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x61, 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x1f, - 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, - 0x6c, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, - 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, - 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xf9, 0x01, - 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, - 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, - 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, - 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, + 0x61, 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x5b, + 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xa8, 0x01, 0x0a, 0x14, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, + 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x41, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x7b, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3d, + 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x22, 0x46, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x48, 0x0a, 0x17, 0x4c, + 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, + 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x2c, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, + 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, + 0x69, 0x64, 0x73, 0x22, 0x4a, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, + 0x34, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x74, 0x42, 0x72, 0x69, 0x65, 0x66, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x49, 0x44, 0x73, + 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, + 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x5b, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x72, 0x69, 0x65, 0x66, 0x49, 0x6e, 0x66, + 0x6f, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, + 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, + 0x42, 0x72, 0x69, 0x65, 0x66, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x22, 0x44, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, + 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, + 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x51, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x38, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x1b, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x0a, 0x61, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x31, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, + 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x22, 0x88, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, + 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x61, 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x68, + 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xa5, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x43, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, + 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, + 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x22, 0x72, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x43, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xf3, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, + 0x70, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x7c, 0x0a, 0x25, 0x4c, 0x69, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, + 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x6c, 0x0a, 0x1d, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x35, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xf9, 0x01, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, - 0x62, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, - 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, - 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x62, 0x0a, - 0x23, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x3b, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x52, 0x65, 0x6c, + 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, + 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x23, + 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x7c, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, - 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x22, 0x94, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, - 0x12, 0x43, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x70, - 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x48, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x29, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, - 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x22, 0xad, 0x05, 0x0a, 0x1d, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x6f, + 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, + 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x62, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, + 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x3b, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, + 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x94, 0x01, 0x0a, + 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x0a, 0x61, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x31, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, + 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x22, 0x48, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x29, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x43, 0x6f, 0x6e, 0x66, + 0x6c, 0x69, 0x63, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xad, 0x05, + 0x0a, 0x1d, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x12, + 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x47, 0x0a, + 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x41, 0x70, - 0x70, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, - 0x49, 0x64, 0x12, 0x47, 0x0a, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x74, 0x54, 0x6f, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x52, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0x94, 0x04, 0x0a, 0x07, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, - 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x72, 0x0a, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, - 0x54, 0x6f, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xe4, 0x01, 0x0a, 0x17, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, - 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, - 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x16, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, - 0x6d, 0x65, 0x22, 0x4a, 0x0a, 0x1a, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, - 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x37, - 0x0a, 0x1b, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x49, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x70, - 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, - 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, - 0x49, 0x64, 0x22, 0x5b, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x3d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x76, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, - 0x70, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, - 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, + 0x70, 0x52, 0x65, 0x71, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x62, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0x94, 0x04, 0x0a, 0x07, 0x42, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, + 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x72, 0x0a, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x41, 0x70, 0x70, + 0x52, 0x65, 0x71, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xe4, 0x01, 0x0a, 0x17, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4a, 0x0a, + 0x1a, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, + 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x37, 0x0a, 0x1b, 0x45, 0x78, 0x74, + 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x22, 0x49, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x12, + 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x5b, 0x0a, + 0x1a, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, + 0x62, 0x61, 0x74, 0x76, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x70, 0x0a, 0x21, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x12, + 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, + 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x22, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, + 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x76, 0x2e, 0x41, 0x70, 0x70, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x22, 0x95, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, + 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, + 0x44, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x76, 0x2e, 0x41, 0x70, 0x70, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, + 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x76, 0x2e, 0x41, 0x70, 0x70, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, + 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x47, 0x0a, 0x17, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, - 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, - 0x64, 0x22, 0x63, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x76, - 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x12, 0x44, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x76, - 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, - 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x73, 0x70, - 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x76, - 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x47, - 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, - 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x50, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, - 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x6e, 0x0a, 0x1f, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, - 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x58, 0x0a, 0x20, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x22, 0x7e, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, - 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, - 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x49, 0x64, 0x73, 0x22, 0x4f, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, + 0x49, 0x64, 0x22, 0x50, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, + 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, - 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, - 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, - 0x5f, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x3c, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x22, 0x88, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, - 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, - 0x64, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, - 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x22, 0x55, 0x0a, 0x1a, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, - 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x6f, - 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x22, 0x87, 0x02, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, + 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x22, 0x6e, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, + 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x49, 0x64, 0x22, 0x58, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, + 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x7e, + 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, + 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x22, 0x4f, + 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, + 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, + 0xb8, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, - 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x74, 0x0a, 0x1c, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, - 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x22, 0x85, 0x02, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, - 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, - 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x70, 0x0a, 0x1a, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3c, - 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xbc, 0x01, 0x0a, - 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, - 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, + 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0x5f, 0x0a, 0x1f, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3c, 0x0a, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x88, 0x01, 0x0a, 0x19, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x72, 0x0a, 0x19, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, - 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3f, - 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, - 0xc3, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, - 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, - 0x63, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x7c, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, - 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x44, 0x0a, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x22, 0xc1, 0x02, 0x0a, 0x23, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x22, 0x55, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, + 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x87, 0x02, + 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, + 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, + 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, + 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x74, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3e, 0x0a, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, + 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x85, 0x02, + 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, @@ -20768,1652 +21227,1795 @@ var file_data_service_proto_rawDesc = []byte{ 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, - 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x84, 0x01, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xbf, - 0x02, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, + 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x70, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, + 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x74, + 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xbc, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, - 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, - 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, - 0x22, 0x80, 0x01, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, - 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x44, 0x0a, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, - 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x22, 0xc9, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, - 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, - 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, - 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, - 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, - 0x7a, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, - 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x62, 0x74, 0x62, - 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xd0, 0x01, 0x0a, 0x23, - 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, - 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, - 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x84, - 0x01, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, - 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, - 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x46, 0x0a, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, - 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xc7, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, - 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x72, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, + 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x62, 0x74, + 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x1d, 0x4c, + 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, + 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, + 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, + 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, + 0x22, 0x7c, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, + 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x44, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x62, 0x74, 0x62, + 0x72, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, + 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xc1, + 0x02, 0x0a, 0x23, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, - 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, - 0x76, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, - 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, - 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xc5, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, - 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, - 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, - 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, - 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, - 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, - 0x80, 0x01, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, - 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, - 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x44, 0x0a, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, - 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x22, 0x70, 0x0a, 0x18, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x15, + 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, + 0x6c, 0x6c, 0x22, 0x84, 0x01, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, + 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x46, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xbf, 0x02, 0x0a, 0x21, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, + 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x80, 0x01, 0x0a, 0x22, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x44, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x62, 0x74, 0x62, + 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xc9, + 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, + 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, + 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x7a, 0x0a, 0x1f, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, + 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, + 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xd0, 0x01, 0x0a, 0x23, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x74, 0x49, 0x64, 0x22, 0x80, 0x02, 0x0a, 0x21, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, + 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, + 0x64, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, + 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x84, 0x01, 0x0a, 0x24, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x62, 0x74, 0x62, + 0x72, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, + 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x22, 0xc7, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, + 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, + 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x76, 0x0a, 0x1d, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, + 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x3f, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, + 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x22, 0xc5, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, + 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, + 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, + 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x80, 0x01, 0x0a, 0x22, 0x4c, + 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x44, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, + 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, + 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x70, 0x0a, + 0x18, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, + 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, + 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x22, + 0x80, 0x02, 0x0a, 0x21, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x70, + 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, + 0x64, 0x73, 0x12, 0x42, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, - 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x42, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x2e, - 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x2a, 0x0a, 0x04, 0x49, - 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xd6, 0x03, 0x0a, 0x22, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x43, - 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, - 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x1a, 0xea, 0x02, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x26, 0x0a, 0x0f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x70, 0x70, 0x5f, 0x65, 0x78, 0x63, 0x65, 0x65, 0x64, - 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, - 0x70, 0x70, 0x45, 0x78, 0x63, 0x65, 0x65, 0x64, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x3b, - 0x0a, 0x1a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65, - 0x78, 0x63, 0x65, 0x65, 0x64, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x17, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x45, - 0x78, 0x63, 0x65, 0x65, 0x64, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x61, - 0x70, 0x70, 0x5f, 0x65, 0x78, 0x63, 0x65, 0x65, 0x64, 0x73, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x61, 0x70, 0x70, 0x45, 0x78, - 0x63, 0x65, 0x65, 0x64, 0x73, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x41, 0x0a, - 0x1d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65, 0x78, - 0x63, 0x65, 0x65, 0x64, 0x73, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x74, 0x45, 0x78, 0x63, 0x65, 0x65, 0x64, 0x73, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x22, 0x8d, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x40, - 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, - 0x12, 0x2e, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, - 0x22, 0x65, 0x0a, 0x1a, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, - 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, - 0x52, 0x05, 0x73, 0x70, 0x65, 0x63, 0x73, 0x22, 0x44, 0x0a, 0x1b, 0x49, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xb7, 0x01, - 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x63, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, - 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x9d, 0x01, 0x0a, - 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x04, - 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, - 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x6d, 0x0a, 0x19, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x2a, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x22, 0xd6, 0x03, 0x0a, 0x22, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x43, 0x0a, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0xea, + 0x02, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, + 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, + 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, + 0x11, 0x61, 0x70, 0x70, 0x5f, 0x65, 0x78, 0x63, 0x65, 0x65, 0x64, 0x73, 0x5f, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x45, 0x78, 0x63, + 0x65, 0x65, 0x64, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x3b, 0x0a, 0x1a, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x65, 0x65, 0x64, + 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x63, 0x65, 0x65, 0x64, + 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x70, 0x70, 0x5f, 0x65, 0x78, + 0x63, 0x65, 0x65, 0x64, 0x73, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x61, 0x70, 0x70, 0x45, 0x78, 0x63, 0x65, 0x65, 0x64, 0x73, + 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x41, 0x0a, 0x1d, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x65, 0x65, 0x64, 0x73, + 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x1a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x63, 0x65, + 0x65, 0x64, 0x73, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x8d, 0x01, 0x0a, 0x19, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x4f, 0x0a, 0x24, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x46, - 0x65, 0x74, 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x39, 0x0a, 0x25, + 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, + 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x65, 0x0a, 0x1a, 0x49, + 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, + 0x12, 0x30, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x73, 0x70, 0x65, + 0x63, 0x73, 0x22, 0x44, 0x0a, 0x1b, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xb7, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, + 0x6c, 0x6c, 0x22, 0x63, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x9d, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x74, 0x76, + 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, + 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x6d, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x72, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, 0x38, 0x0a, 0x0a, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x42, 0x0a, 0x10, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6f, 0x70, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x49, 0x64, 0x73, 0x22, - 0x3d, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x40, - 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, - 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, - 0x22, 0xfa, 0x02, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x43, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x9f, 0x02, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, - 0x0c, 0x6f, 0x6c, 0x64, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x6f, 0x6c, - 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x3a, 0x0a, 0x0c, 0x6e, 0x65, 0x77, - 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x22, 0x49, 0x0a, - 0x11, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, - 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x38, 0x0a, 0x0a, 0x61, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x5a, 0x0a, - 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x38, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x4b, 0x0a, 0x1a, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0xd8, 0x01, 0x0a, 0x1b, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, - 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x51, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, - 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x66, 0x0a, 0x1b, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x64, 0x69, - 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, - 0x64, 0x22, 0x97, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, + 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x4f, 0x0a, 0x24, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, + 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0xb0, 0x02, 0x0a, 0x19, - 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x53, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x39, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x1a, 0xa7, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x22, 0xad, - 0x02, 0x0a, 0x0a, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x39, 0x0a, 0x25, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, + 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, + 0x64, 0x73, 0x22, 0x72, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x52, 0x65, 0x71, 0x12, 0x38, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, + 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, + 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x70, 0x65, 0x63, + 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x42, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, + 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, + 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6f, 0x70, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x49, 0x64, 0x73, 0x22, 0x3d, 0x0a, 0x11, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x28, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, - 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x10, - 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, - 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x72, 0x61, 0x79, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x67, 0x72, 0x61, - 0x79, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x18, 0x08, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x2f, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0xfa, 0x02, 0x0a, 0x11, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x43, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, + 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x9f, 0x02, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x0c, 0x6f, 0x6c, 0x64, 0x5f, + 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x6f, 0x6c, 0x64, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x12, 0x3a, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x12, 0x16, 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x22, 0x49, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, + 0x61, 0x6d, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x38, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x26, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x5a, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x38, 0x0a, 0x0a, 0x61, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x4b, 0x0a, 0x1a, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, + 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x73, 0x22, 0xd8, 0x01, 0x0a, 0x1b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x51, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x3d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x1a, 0x66, 0x0a, 0x1b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x22, 0x97, 0x01, 0x0a, + 0x18, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, + 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0xb0, 0x02, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, + 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, + 0xa7, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x15, 0x0a, + 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, + 0x70, 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x21, + 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x22, 0xad, 0x02, 0x0a, 0x0a, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, + 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x67, + 0x72, 0x61, 0x79, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x6d, 0x6f, 0x64, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x67, 0x72, 0x61, 0x79, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x73, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, + 0x0d, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xf2, 0x02, 0x0a, 0x1c, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, 0x6e, 0x64, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, + 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x38, + 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x76, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x72, + 0x61, 0x79, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x67, 0x72, 0x61, 0x79, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x73, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xf2, - 0x02, 0x0a, 0x1c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x41, 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x21, 0x0a, - 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4d, - 0x65, 0x6d, 0x6f, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x10, 0x0a, - 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, - 0x2a, 0x0a, 0x11, 0x67, 0x72, 0x61, 0x79, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, - 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x67, 0x72, 0x61, 0x79, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x09, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, - 0x61, 0x6d, 0x65, 0x22, 0x98, 0x01, 0x0a, 0x0b, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x41, 0x0a, 0x1d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, - 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1a, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x68, 0x61, 0x76, 0x65, 0x5f, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0f, 0x68, 0x61, 0x76, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, 0x76, 0x65, 0x5f, 0x70, 0x75, 0x6c, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x76, 0x65, 0x50, 0x75, 0x6c, 0x6c, 0x22, 0x9b, - 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, - 0x73, 0x65, 0x50, 0x61, 0x67, 0x65, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x22, 0x5b, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x36, 0x0a, 0x10, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x4d, 0x0a, 0x14, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, - 0x22, 0x45, 0x0a, 0x15, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2c, 0x0a, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x71, 0x0a, 0x0c, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x1d, 0x0a, 0x07, 0x50, 0x69, - 0x6e, 0x67, 0x4d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x63, 0x0a, 0x0b, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x32, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, - 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x98, + 0x01, 0x0a, 0x0b, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x41, + 0x0a, 0x1d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x61, + 0x74, 0x65, 0x67, 0x79, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, + 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, + 0x64, 0x12, 0x29, 0x0a, 0x10, 0x68, 0x61, 0x76, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x68, 0x61, 0x76, + 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x1b, 0x0a, 0x09, + 0x68, 0x61, 0x76, 0x65, 0x5f, 0x70, 0x75, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x68, 0x61, 0x76, 0x65, 0x50, 0x75, 0x6c, 0x6c, 0x22, 0x9b, 0x01, 0x0a, 0x10, 0x4c, 0x69, + 0x73, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x23, + 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x12, 0x24, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x50, 0x61, 0x67, + 0x65, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x22, 0x5b, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x22, 0x36, 0x0a, 0x10, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x4d, 0x0a, 0x14, + 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x71, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x45, 0x0a, 0x15, 0x46, + 0x65, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x2c, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x22, 0x71, 0x0a, 0x0c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, + 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, + 0x72, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x1d, 0x0a, 0x07, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x73, 0x67, + 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x22, 0x63, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, + 0x52, 0x65, 0x71, 0x12, 0x32, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, + 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x53, + 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x73, 0x0a, 0x0b, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, - 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x6b, - 0x76, 0x2e, 0x4b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x73, - 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, - 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0c, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, - 0x70, 0x65, 0x63, 0x22, 0x86, 0x03, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, - 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, - 0x6c, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x76, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x74, - 0x6f, 0x70, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x74, 0x6f, - 0x70, 0x49, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x70, 0x0a, 0x0b, - 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x22, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x52, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, - 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x73, - 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, - 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, - 0x32, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x41, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, - 0x65, 0x6e, 0x74, 0x22, 0xf6, 0x01, 0x0a, 0x11, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, - 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, - 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x03, 0x6b, 0x76, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x2e, 0x4b, 0x76, - 0x52, 0x03, 0x6b, 0x76, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, - 0x5f, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x1a, 0x64, 0x0a, 0x02, 0x4b, 0x76, 0x12, 0x37, 0x0a, 0x0d, - 0x6b, 0x76, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x41, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x6b, 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x73, 0x70, 0x65, 0x63, + 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x6b, + 0x76, 0x2e, 0x4b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x86, + 0x03, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, + 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x1d, 0x0a, + 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, + 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, + 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0b, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x73, 0x6f, 0x72, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6f, 0x70, 0x5f, 0x69, 0x64, + 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x49, 0x64, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x70, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4b, + 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, + 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, + 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x73, 0x0a, 0x0b, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x06, 0x6b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x22, 0x26, 0x0a, 0x12, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, - 0x03, 0x69, 0x64, 0x73, 0x22, 0x4f, 0x0a, 0x0d, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, - 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x4b, 0x0a, 0x09, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x52, - 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x22, 0x58, 0x0a, 0x16, 0x4b, 0x76, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x44, 0x73, - 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, - 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x2b, 0x0a, 0x17, - 0x4b, 0x76, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x5b, 0x0a, 0x17, 0x4b, 0x76, 0x46, - 0x65, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x32, 0x0a, 0x0a, 0x61, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xf6, + 0x01, 0x0a, 0x11, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, + 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, - 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x2e, 0x0a, 0x18, 0x4b, 0x76, 0x46, 0x65, 0x74, 0x63, - 0x68, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x1b, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x12, 0x33, 0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, - 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x0b, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x3f, 0x0a, 0x12, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x65, 0x2e, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x10, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x1e, 0x0a, 0x1c, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0xc5, 0x02, 0x0a, - 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, + 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x03, 0x6b, 0x76, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, + 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x2e, 0x4b, 0x76, 0x52, 0x03, 0x6b, 0x76, 0x73, + 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x41, 0x6c, + 0x6c, 0x1a, 0x64, 0x0a, 0x02, 0x4b, 0x76, 0x12, 0x37, 0x0a, 0x0d, 0x6b, 0x76, 0x5f, 0x61, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x0c, 0x6b, 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x25, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x06, 0x6b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x22, 0x26, 0x0a, 0x12, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, + 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, + 0x4f, 0x0a, 0x0d, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, + 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x22, 0x4b, 0x0a, 0x09, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x58, 0x0a, + 0x16, 0x4b, 0x76, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, + 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, + 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x2b, 0x0a, 0x17, 0x4b, 0x76, 0x46, 0x65, 0x74, + 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, + 0x03, 0x69, 0x64, 0x73, 0x22, 0x5b, 0x0a, 0x17, 0x4b, 0x76, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4b, + 0x65, 0x79, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x65, 0x79, + 0x73, 0x22, 0x2e, 0x0a, 0x18, 0x4b, 0x76, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x73, + 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, + 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x65, 0x79, + 0x73, 0x22, 0x93, 0x01, 0x0a, 0x1b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, + 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, + 0x71, 0x12, 0x33, 0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x3f, 0x0a, 0x12, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x65, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x1e, 0x0a, 0x1c, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0xc5, 0x02, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, + 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x30, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x2e, 0x4f, 0x72, 0x64, 0x65, + 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x6c, 0x61, 0x73, 0x74, + 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, + 0x62, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x1a, 0x2d, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, + 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x10, 0x0a, + 0x03, 0x61, 0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x73, 0x63, 0x22, + 0xa1, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, + 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, + 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, + 0x6c, 0x6c, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0xe3, 0x02, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x65, 0x78, + 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0xda, 0x01, 0x0a, + 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x28, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, + 0x22, 0x0a, 0x0d, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x74, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, + 0x53, 0x74, 0x72, 0x12, 0x29, 0x0a, 0x11, 0x63, 0x70, 0x75, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x75, + 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x63, 0x70, 0x75, 0x4d, 0x61, 0x78, 0x55, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x12, 0x28, + 0x0a, 0x10, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, + 0x74, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x55, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x12, 0x2f, 0x0a, 0x14, 0x6d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x74, 0x72, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, + 0x78, 0x55, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x22, 0xe1, 0x02, 0x0a, 0x13, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, + 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x14, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x35, 0x0a, 0x05, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, + 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x2d, + 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x61, + 0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x73, 0x63, 0x22, 0x59, 0x0a, + 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, + 0x62, 0x63, 0x65, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xa2, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, 0x52, 0x65, 0x71, + 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x30, 0x0a, 0x05, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x0a, - 0x13, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6c, 0x61, 0x73, 0x74, - 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x36, 0x0a, - 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x1a, 0x2d, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, - 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, - 0x73, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x61, 0x73, 0x63, 0x22, 0xa1, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, - 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x63, 0x6c, 0x75, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xe3, 0x02, 0x0a, 0x0f, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x1a, 0xda, 0x01, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x28, 0x0a, 0x06, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, - 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x70, 0x75, - 0x55, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x12, 0x29, 0x0a, 0x11, 0x63, 0x70, 0x75, 0x5f, - 0x6d, 0x61, 0x78, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x70, 0x75, 0x4d, 0x61, 0x78, 0x55, 0x73, 0x61, 0x67, 0x65, - 0x53, 0x74, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, - 0x61, 0x67, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x12, 0x2f, 0x0a, - 0x14, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x75, 0x73, 0x61, 0x67, - 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x55, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x22, 0xe1, - 0x02, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, - 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, - 0x70, 0x70, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, - 0x61, 0x6c, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x35, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, - 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, - 0x69, 0x6d, 0x65, 0x1a, 0x2d, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, - 0x64, 0x65, 0x73, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, - 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, - 0x73, 0x63, 0x22, 0x59, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x2b, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x65, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xa2, 0x01, - 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, - 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, - 0x6c, 0x6c, 0x22, 0x59, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x2b, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x71, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xca, 0x01, - 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, - 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, - 0x70, 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, + 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x59, 0x0a, + 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, + 0x62, 0x63, 0x71, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xca, 0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, + 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, + 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x42, 0x0a, 0x10, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x52, 0x0f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x27, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0xb9, + 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, + 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x10, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0f, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x27, 0x0a, 0x15, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x22, 0xb9, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, - 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x10, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0f, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x54, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, - 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x5b, 0x0a, 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, - 0x49, 0x64, 0x22, 0x30, 0x0a, 0x18, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x65, - 0x78, 0x69, 0x73, 0x74, 0x22, 0x7f, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x6e, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, - 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x65, - 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x1d, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, - 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, - 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x61, 0x70, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x41, 0x70, 0x70, 0x49, 0x64, 0x22, 0xa3, 0x09, 0x0a, 0x1e, 0x43, 0x6f, 0x6d, 0x70, 0x61, - 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, - 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x68, 0x0a, 0x14, 0x6e, 0x6f, 0x6e, - 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, - 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4e, 0x6f, - 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x12, 0x6e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x73, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x54, 0x0a, 0x14, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, + 0x22, 0x5b, 0x0a, 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x30, 0x0a, + 0x18, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x69, + 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x65, 0x78, 0x69, 0x73, 0x74, 0x22, + 0x7f, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x41, 0x6e, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, + 0x12, 0x2e, 0x0a, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, + 0x61, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6c, + 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x22, 0x8e, 0x01, 0x0a, 0x1d, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x73, 0x1a, 0x85, 0x02, 0x0a, 0x11, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x10, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, - 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x64, 0x35, 0x1a, 0xae, 0x05, 0x0a, 0x0e, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, - 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, - 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, - 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x69, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x79, 0x0a, 0x12, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, - 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, - 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x45, - 0x78, 0x69, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x73, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, - 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0xc2, 0x01, 0x0a, 0x16, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, - 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, - 0x73, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, - 0x63, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x53, 0x0a, 0x23, - 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x4e, 0x6f, - 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x49, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, - 0x64, 0x22, 0x8f, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, - 0x49, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, - 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x1a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x17, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x22, 0x50, 0x0a, 0x1e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x54, 0x69, - 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x61, - 0x70, 0x70, 0x49, 0x64, 0x73, 0x22, 0x21, 0x0a, 0x1f, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, - 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x32, 0xea, 0x6d, 0x0a, 0x04, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x33, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x12, 0x12, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, - 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x41, 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, - 0x41, 0x70, 0x70, 0x22, 0x00, 0x12, 0x34, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, - 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x27, 0x0a, 0x06, 0x47, - 0x65, 0x74, 0x41, 0x70, 0x70, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, - 0x70, 0x70, 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x79, - 0x49, 0x44, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, - 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, - 0x41, 0x70, 0x70, 0x22, 0x00, 0x12, 0x33, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, - 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x41, 0x70, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0a, 0x2e, 0x70, - 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, 0x70, 0x70, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x0c, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x74, 0x52, 0x65, - 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x70, 0x70, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, - 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x10, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, - 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5d, - 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, - 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x42, 0x0a, - 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, - 0x6d, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, - 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x00, 0x12, 0x42, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, + 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, + 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, + 0x20, 0x0a, 0x0c, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x41, 0x70, 0x70, 0x49, + 0x64, 0x22, 0xd9, 0x09, 0x0a, 0x1e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x68, 0x0a, 0x14, 0x6e, 0x6f, 0x6e, 0x5f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, + 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x12, 0x6e, 0x6f, 0x6e, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x5e, + 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x1a, 0x85, + 0x02, 0x0a, 0x11, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, + 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, + 0x53, 0x70, 0x65, 0x63, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, + 0x70, 0x65, 0x63, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x19, + 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x69, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6d, 0x64, 0x35, 0x1a, 0xe4, 0x05, 0x0a, 0x0e, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, + 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, + 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, + 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x45, + 0x78, 0x69, 0x73, 0x74, 0x12, 0x79, 0x0a, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x4a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x11, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, + 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, + 0x74, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, + 0x31, 0x0a, 0x15, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, + 0x69, 0x73, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x73, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0xf8, 0x01, 0x0a, 0x16, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1f, 0x0a, + 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x30, + 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, + 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, + 0x63, 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x53, 0x0a, + 0x23, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x4e, + 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x49, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, + 0x49, 0x64, 0x22, 0x8f, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x43, 0x49, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2a, 0x0a, 0x11, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x1a, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x17, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x50, 0x0a, 0x1e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x54, + 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, + 0x07, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, + 0x61, 0x70, 0x70, 0x49, 0x64, 0x73, 0x22, 0x21, 0x0a, 0x1f, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, + 0x64, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0xe2, 0x01, 0x0a, 0x17, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, + 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x2a, + 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0xea, 0x01, 0x0a, 0x15, 0x4c, + 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, + 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, + 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xf2, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x64, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x82, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, + 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x83, 0x01, 0x0a, + 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, + 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, + 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x49, 0x64, 0x32, 0xb0, 0x70, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x33, 0x0a, 0x09, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, + 0x12, 0x2d, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x12, 0x12, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, + 0x71, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, 0x70, 0x70, 0x22, 0x00, 0x12, + 0x34, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x12, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1b, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, - 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3e, 0x0a, - 0x0e, 0x55, 0x6e, 0x64, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, - 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, - 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3b, 0x0a, - 0x0d, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, - 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x0f, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x18, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, - 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x27, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x12, + 0x0f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, + 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, 0x70, 0x70, 0x22, 0x00, 0x12, 0x2f, + 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x79, 0x49, 0x44, 0x12, 0x13, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, + 0x71, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, 0x70, 0x70, 0x22, 0x00, 0x12, + 0x33, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x15, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x79, 0x4e, + 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, + 0x70, 0x70, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, + 0x52, 0x65, 0x73, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x00, 0x12, 0x42, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x42, 0x79, 0x49, + 0x44, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, + 0x70, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, + 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, + 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x19, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, + 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x10, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, + 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, + 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, + 0x46, 0x0a, 0x12, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x6e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, + 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0e, 0x55, 0x6e, 0x64, 0x6f, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, + 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, + 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, + 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x65, 0x6d, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, - 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, - 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, - 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, - 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x15, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, - 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, - 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x19, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x0d, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x0a, 0x47, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, - 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, - 0x62, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x22, 0x00, 0x12, 0x39, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3f, 0x0a, - 0x0f, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x12, 0x18, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0x00, 0x12, 0x3b, - 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, - 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x0c, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x10, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x37, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, - 0x13, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x10, 0x44, 0x65, - 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x19, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, + 0x71, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x60, + 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, + 0x12, 0x54, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, + 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, + 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x00, 0x12, 0x42, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, + 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x0c, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x15, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x2e, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, + 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x0a, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x64, 0x73, + 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x12, + 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x10, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x12, 0x55, 0x6e, 0x44, 0x65, + 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x1b, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, + 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, + 0x12, 0x3c, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, - 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x46, - 0x0a, 0x12, 0x55, 0x6e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, - 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, + 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4b, + 0x0a, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x15, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x49, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x70, + 0x62, 0x72, 0x63, 0x69, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x0d, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, + 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x72, 0x6b, 0x76, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x64, 0x4b, 0x76, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, + 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, + 0x35, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x13, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, + 0x6f, 0x6b, 0x73, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, + 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x36, + 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x13, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x00, 0x12, 0x4c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x49, 0x52, - 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x72, 0x63, 0x69, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x00, 0x12, - 0x3c, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, - 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x72, 0x6b, 0x76, - 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x22, 0x00, 0x12, 0x46, 0x0a, - 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x73, - 0x12, 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x64, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, - 0x6f, 0x6f, 0x6b, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x09, - 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x64, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, - 0x6f, 0x6b, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0a, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, - 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, - 0x54, 0x61, 0x67, 0x73, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x30, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, - 0x6b, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, - 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, - 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x15, 0x48, 0x6f, 0x6f, 0x6b, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, - 0x67, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x46, 0x65, 0x74, - 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x46, 0x65, 0x74, - 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x49, 0x44, 0x73, 0x12, 0x1d, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x64, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x64, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x45, 0x0a, - 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x49, 0x44, 0x12, 0x1c, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x68, 0x72, - 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x00, 0x12, - 0x46, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x48, 0x6f, 0x6f, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, + 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3d, + 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x73, 0x12, 0x14, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, + 0x67, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x51, 0x0a, + 0x12, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, + 0x12, 0x30, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x10, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x15, 0x48, 0x6f, 0x6f, 0x6b, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, + 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, + 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, + 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x57, + 0x0a, 0x14, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x64, 0x49, 0x44, 0x73, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, + 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x49, + 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, + 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x49, 0x44, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4e, + 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x49, + 0x0a, 0x13, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x79, 0x49, 0x44, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, + 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x49, 0x64, + 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x12, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x00, 0x12, 0x49, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x50, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x79, 0x50, 0x75, 0x62, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, - 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x12, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, - 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, - 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, - 0x45, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, - 0x6b, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, - 0x51, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x00, 0x12, 0x48, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x13, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x00, 0x12, 0x48, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x48, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x19, 0x47, + 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, + 0x50, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x42, 0x79, 0x50, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, + 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x69, + 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0e, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, + 0x12, 0x47, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, + 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x12, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, + 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x13, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, + 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, - 0x42, 0x69, 0x7a, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x12, 0x10, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, - 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, - 0x42, 0x69, 0x7a, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, - 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x1c, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x0e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0d, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3e, - 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x12, 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, - 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3e, - 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x12, 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, - 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x48, - 0x0a, 0x13, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x54, - 0x6d, 0x70, 0x6c, 0x73, 0x54, 0x6f, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x1b, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x54, 0x6f, - 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, - 0x12, 0x50, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x46, - 0x72, 0x6f, 0x6d, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x46, 0x72, - 0x6f, 0x6d, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, + 0x12, 0x4e, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x69, 0x7a, 0x73, 0x4f, 0x66, + 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x62, + 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x69, 0x7a, 0x73, 0x4f, 0x66, + 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, + 0x12, 0x4d, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, + 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, + 0x54, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, + 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x13, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, + 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x00, 0x12, 0x51, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x22, 0x00, 0x12, 0x46, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x54, 0x6f, + 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x41, 0x64, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x54, 0x6f, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x17, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x6d, 0x70, + 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x6d, 0x70, 0x6c, + 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, - 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1e, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x1f, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x00, 0x12, 0x51, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, - 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, + 0x44, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, + 0x5a, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x4e, 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, - 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5a, - 0x0a, 0x14, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x1e, 0x42, 0x61, + 0x74, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, + 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, + 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x6f, + 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, + 0x57, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, + 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, + 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x14, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, + 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, + 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x1e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x00, 0x12, 0x4d, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, - 0x12, 0x4d, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, - 0x5a, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x13, 0x47, - 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x00, 0x12, 0x4e, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, - 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x00, 0x12, 0x69, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, - 0x23, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, - 0x73, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x1e, + 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x28, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x16, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x16, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x15, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x16, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x1a, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x62, 0x64, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x24, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, + 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, + 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x12, 0x27, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, - 0x6c, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, + 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, + 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x43, 0x0a, + 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x10, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, + 0x44, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x11, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, - 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, - 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x00, 0x12, 0x54, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, - 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x72, 0x69, 0x65, 0x66, 0x49, 0x6e, 0x66, 0x6f, 0x42, - 0x79, 0x49, 0x44, 0x73, 0x12, 0x26, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x72, 0x69, 0x65, 0x66, - 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x74, 0x42, 0x72, 0x69, 0x65, 0x66, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x49, 0x44, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x12, 0x1a, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, - 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, - 0x7a, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x17, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x18, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, - 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, - 0x12, 0x52, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, - 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x22, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x21, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x2a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x13, 0x4c, + 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, + 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x00, 0x12, 0x5a, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x72, 0x0a, + 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, + 0x42, 0x72, 0x69, 0x65, 0x66, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x26, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x72, 0x69, 0x65, 0x66, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, + 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x72, 0x69, + 0x65, 0x66, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x00, 0x12, 0x4e, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, + 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x52, + 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, + 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x00, 0x12, 0x51, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, + 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, + 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x18, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, + 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x66, + 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, + 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, + 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x23, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, + 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, - 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2b, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x1f, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, - 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x28, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x70, 0x62, 0x64, 0x73, + 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, - 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, - 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x1a, 0x49, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x74, 0x54, 0x6f, 0x41, 0x70, 0x70, 0x12, 0x23, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x49, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x74, 0x54, 0x6f, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, - 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, - 0x12, 0x60, 0x0a, 0x17, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, - 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, - 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, - 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x12, 0x1f, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x00, 0x12, 0x75, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, + 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, + 0x12, 0x60, 0x0a, 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x20, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x00, 0x12, 0x56, 0x0a, 0x1a, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x41, 0x70, 0x70, + 0x12, 0x23, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, + 0x6f, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x41, + 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x17, 0x45, 0x78, + 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x45, 0x78, 0x74, + 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x45, + 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, + 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x1e, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, + 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x12, 0x27, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x66, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, + 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, + 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, + 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x00, 0x12, 0x57, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, + 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x1c, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, + 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, - 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, - 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, - 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, - 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x00, 0x12, 0x6f, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x12, 0x25, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, - 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x00, 0x12, 0x54, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, - 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x13, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, + 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x12, 0x24, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, + 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, - 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, - 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, - 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, - 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, - 0x73, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, - 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, - 0x73, 0x52, 0x65, 0x71, 0x1a, 0x22, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x16, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, - 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, - 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x15, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, - 0x74, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, - 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, + 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, + 0x12, 0x5d, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, + 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, + 0x63, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x21, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x22, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1f, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, + 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, + 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x1e, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, + 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, + 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, + 0x69, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x23, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, - 0x65, 0x74, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, - 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, - 0x12, 0x7b, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x73, 0x12, 0x29, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, - 0x2a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, - 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x75, 0x0a, - 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, - 0x27, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, - 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, - 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, - 0x70, 0x70, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, - 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x70, 0x62, 0x64, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, + 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, + 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x20, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x29, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, + 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x70, 0x62, 0x64, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x64, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, + 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, + 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x6c, + 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x24, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, + 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, - 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x29, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, - 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, - 0x71, 0x1a, 0x2a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, - 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, - 0x66, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, - 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x22, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x23, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, - 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x4c, + 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x20, + 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, + 0x12, 0x29, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, + 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, + 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x19, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, + 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x22, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, + 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x00, 0x12, 0x75, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, + 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, - 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x64, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, - 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, - 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4c, - 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, - 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, - 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x1e, + 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, + 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, + 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, + 0x74, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, + 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x1e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x12, 0x27, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1f, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x10, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4e, - 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, - 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4e, - 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, - 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x7e, - 0x0a, 0x21, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, - 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, - 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, - 0x2b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, - 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x60, - 0x0a, 0x17, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, - 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, - 0x12, 0x37, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, - 0x14, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0d, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, - 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x42, 0x0a, - 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x16, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x00, 0x12, 0x3b, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0e, 0x2e, 0x70, - 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x00, 0x12, 0x38, - 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4d, 0x0a, + 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x15, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x21, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x74, 0x63, + 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, + 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x2b, 0x2e, 0x70, 0x62, 0x64, 0x73, + 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, + 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x17, 0x49, 0x6d, 0x70, 0x6f, + 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x49, 0x6d, 0x70, + 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x0b, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x64, 0x73, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, + 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, + 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x0e, 0x47, + 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x4e, + 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x00, 0x12, 0x60, 0x0a, 0x17, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x20, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, - 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1e, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, - 0x12, 0x30, 0x0a, 0x07, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x10, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, + 0x22, 0x00, 0x12, 0x38, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x17, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, + 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5a, + 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, + 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, + 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x30, 0x0a, 0x07, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x19, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, + 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x22, 0x2e, 0x70, 0x62, 0x64, 0x73, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x41, 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x00, 0x12, 0x54, 0x0a, 0x19, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, - 0x22, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x19, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0f, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x17, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, - 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x19, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x13, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, - 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x00, 0x12, 0x57, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, - 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, - 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x16, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, - 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, - 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x16, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, 0x72, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, 0x72, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x4b, 0x76, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x08, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, - 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, - 0x30, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x00, 0x12, 0x32, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x11, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, + 0x22, 0x00, 0x12, 0x41, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, + 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, + 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x42, 0x0a, + 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, + 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x00, 0x12, 0x42, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, - 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0a, - 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, - 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x06, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x12, 0x0f, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, - 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x13, 0x4b, 0x76, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, - 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x4b, 0x76, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, - 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, - 0x2e, 0x4b, 0x76, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, - 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x14, 0x4b, 0x76, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, - 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4b, 0x76, 0x46, 0x65, 0x74, 0x63, - 0x68, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4b, 0x76, 0x46, 0x65, 0x74, 0x63, 0x68, - 0x4b, 0x65, 0x79, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x00, 0x12, 0x3a, 0x0a, 0x0c, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, - 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4b, 0x0a, - 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x10, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, 0x12, 0x19, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x14, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, + 0x70, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1f, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x20, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x1f, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, + 0x63, 0x6f, 0x70, 0x65, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x1a, 0x20, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x00, 0x12, 0x31, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x11, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, + 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, + 0x76, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, + 0x76, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x30, 0x0a, 0x07, 0x4c, 0x69, 0x73, + 0x74, 0x4b, 0x76, 0x73, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x08, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, + 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, + 0x45, 0x0a, 0x0e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, + 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, + 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0a, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4b, 0x76, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, + 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x2e, + 0x0a, 0x06, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, + 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x54, + 0x0a, 0x13, 0x4b, 0x76, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, + 0x75, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4b, 0x76, 0x46, + 0x65, 0x74, 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4b, 0x76, 0x46, 0x65, 0x74, + 0x63, 0x68, 0x49, 0x44, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x14, 0x4b, 0x76, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4b, + 0x65, 0x79, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x4b, 0x76, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x73, 0x45, + 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x4b, 0x76, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x78, + 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3c, 0x0a, + 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x0c, 0x52, + 0x65, 0x74, 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, + 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x00, 0x12, 0x4e, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x00, 0x12, 0x44, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, 0x2e, 0x70, - 0x62, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, - 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x44, 0x0a, - 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x11, - 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x1d, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, - 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x19, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x6c, - 0x6c, 0x54, 0x72, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, - 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, - 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x57, 0x0a, + 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, + 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x1d, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x51, 0x0a, + 0x19, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x6c, 0x6c, 0x54, 0x72, 0x65, 0x6e, 0x64, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x00, + 0x12, 0x4c, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x74, + 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x4d, + 0x0a, 0x15, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x52, 0x0a, + 0x1a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, + 0x00, 0x12, 0x4f, 0x0a, 0x17, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, + 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x22, 0x00, 0x12, 0x60, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x6e, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x6e, 0x64, 0x41, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x15, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, - 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x1a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, - 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x17, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, - 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, + 0x63, 0x74, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x1a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x6e, 0x64, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, - 0x6e, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, - 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x1a, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x46, 0x61, 0x69, 0x6c, - 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x42, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x12, 0x1b, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, + 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, + 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x13, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, + 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4e, + 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, + 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, @@ -22475,7 +23077,7 @@ func file_data_service_proto_rawDescGZIP() []byte { return file_data_service_proto_rawDescData } -var file_data_service_proto_msgTypes = make([]protoimpl.MessageInfo, 296) +var file_data_service_proto_msgTypes = make([]protoimpl.MessageInfo, 302) var file_data_service_proto_goTypes = []interface{}{ (*UpdateCredentialScopesReq)(nil), // 0: pbds.UpdateCredentialScopesReq (*UpdateCredentialScopesResp)(nil), // 1: pbds.UpdateCredentialScopesResp @@ -22744,677 +23346,694 @@ var file_data_service_proto_goTypes = []interface{}{ (*GetTemplateAndNonTemplateCICountResp)(nil), // 264: pbds.GetTemplateAndNonTemplateCICountResp (*BatchUpdateLastConsumedTimeReq)(nil), // 265: pbds.BatchUpdateLastConsumedTimeReq (*BatchUpdateLastConsumedTimeResp)(nil), // 266: pbds.BatchUpdateLastConsumedTimeResp - (*CredentialScopePreviewResp_Detail)(nil), // 267: pbds.CredentialScopePreviewResp.Detail - (*BatchUpsertConfigItemsReq_ConfigItem)(nil), // 268: pbds.BatchUpsertConfigItemsReq.ConfigItem - (*BatchUpsertConfigItemsReq_TemplateBinding)(nil), // 269: pbds.BatchUpsertConfigItemsReq.TemplateBinding - (*ListConfigItemByTupleReq_Item)(nil), // 270: pbds.ListConfigItemByTupleReq.Item - (*GetHookInfoSpec_Releases)(nil), // 271: pbds.GetHookInfoSpec.Releases - (*ListHooksResp_Detail)(nil), // 272: pbds.ListHooksResp.Detail - (*ListHookReferencesResp_Detail)(nil), // 273: pbds.ListHookReferencesResp.Detail - (*ListHookRevisionsResp_ListHookRevisionsData)(nil), // 274: pbds.ListHookRevisionsResp.ListHookRevisionsData - (*ListHookRevisionReferencesResp_Detail)(nil), // 275: pbds.ListHookRevisionReferencesResp.Detail - (*GetReleaseHookResp_Hook)(nil), // 276: pbds.GetReleaseHookResp.Hook - (*ListTemplateSetsAndRevisionsResp_Detail)(nil), // 277: pbds.ListTemplateSetsAndRevisionsResp.Detail - (*ListTemplateByTupleReq_Item)(nil), // 278: pbds.ListTemplateByTupleReq.Item - (*ListTemplateByTupleReqResp_Item)(nil), // 279: pbds.ListTemplateByTupleReqResp.Item - (*BatchUpsertTemplatesReq_Item)(nil), // 280: pbds.BatchUpsertTemplatesReq.Item - (*GetTemplateRevisionResp_TemplateRevision)(nil), // 281: pbds.GetTemplateRevisionResp.TemplateRevision - (*ImportFromTemplateSetToAppReq_Binding)(nil), // 282: pbds.ImportFromTemplateSetToAppReq.Binding - (*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding)(nil), // 283: pbds.ImportFromTemplateSetToAppReq.Binding.TemplateRevisionBinding - (*CheckTemplateSetReferencesAppsReq_Item)(nil), // 284: pbds.CheckTemplateSetReferencesAppsReq.Item - (*CheckTemplateSetReferencesAppsResp_Item)(nil), // 285: pbds.CheckTemplateSetReferencesAppsResp.Item - (*ListAppGroupsResp_ListAppGroupsData)(nil), // 286: pbds.ListAppGroupsResp.ListAppGroupsData - (*CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData)(nil), // 287: pbds.CountGroupsReleasedAppsResp.CountGroupsReleasedAppsData - (*ListGroupReleasedAppsResp_ListGroupReleasedAppsData)(nil), // 288: pbds.ListGroupReleasedAppsResp.ListGroupReleasedAppsData - (*BatchUpsertKvsReq_Kv)(nil), // 289: pbds.BatchUpsertKvsReq.Kv - (*ListClientsReq_Order)(nil), // 290: pbds.ListClientsReq.Order - (*ListClientsResp_Item)(nil), // 291: pbds.ListClientsResp.Item - (*ListClientEventsReq_Order)(nil), // 292: pbds.ListClientEventsReq.Order - (*CompareConfigItemConflictsResp_NonTemplateConfig)(nil), // 293: pbds.CompareConfigItemConflictsResp.NonTemplateConfig - (*CompareConfigItemConflictsResp_TemplateConfig)(nil), // 294: pbds.CompareConfigItemConflictsResp.TemplateConfig - (*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail)(nil), // 295: pbds.CompareConfigItemConflictsResp.TemplateConfig.TemplateRevisionDetail - (*credential_scope.CredentialScopeSpec)(nil), // 296: pbcrs.CredentialScopeSpec - (*credential_scope.UpdateScopeSpec)(nil), // 297: pbcrs.UpdateScopeSpec - (*credential_scope.CredentialScopeAttachment)(nil), // 298: pbcrs.CredentialScopeAttachment - (*credential_scope.CredentialScopeList)(nil), // 299: pbcrs.CredentialScopeList - (*credential.CredentialAttachment)(nil), // 300: pbcredential.CredentialAttachment - (*credential.CredentialSpec)(nil), // 301: pbcredential.CredentialSpec - (*credential.CredentialList)(nil), // 302: pbcredential.CredentialList - (*app.AppSpec)(nil), // 303: pbapp.AppSpec - (*app.App)(nil), // 304: pbapp.App - (*config_item.ConfigItemAttachment)(nil), // 305: pbci.ConfigItemAttachment - (*config_item.ConfigItemSpec)(nil), // 306: pbci.ConfigItemSpec - (*content.ContentSpec)(nil), // 307: pbcontent.ContentSpec - (*template_variable.TemplateVariableSpec)(nil), // 308: pbtv.TemplateVariableSpec - (*config_item.ConfigItem)(nil), // 309: pbci.ConfigItem - (*released_ci.ReleasedConfigItem)(nil), // 310: pbrci.ReleasedConfigItem - (*config_item.ListConfigItemCounts)(nil), // 311: pbci.ListConfigItemCounts - (*content.ContentAttachment)(nil), // 312: pbcontent.ContentAttachment - (*commit.CommitAttachment)(nil), // 313: pbcommit.CommitAttachment - (*release.ReleaseAttachment)(nil), // 314: pbrelease.ReleaseAttachment - (*release.ReleaseSpec)(nil), // 315: pbrelease.ReleaseSpec - (*release.Release)(nil), // 316: pbrelease.Release - (*released_kv.ReleasedKv)(nil), // 317: pbrkv.ReleasedKv - (*hook.HookAttachment)(nil), // 318: pbhook.HookAttachment - (*hook.HookSpec)(nil), // 319: pbhook.HookSpec - (*base.Revision)(nil), // 320: pbbase.Revision - (*hook.CountHookTags)(nil), // 321: pbhook.CountHookTags - (*hook_revision.HookRevisionAttachment)(nil), // 322: pbhr.HookRevisionAttachment - (*hook_revision.HookRevisionSpec)(nil), // 323: pbhr.HookRevisionSpec - (*template_space.TemplateSpaceAttachment)(nil), // 324: pbts.TemplateSpaceAttachment - (*template_space.TemplateSpaceSpec)(nil), // 325: pbts.TemplateSpaceSpec - (*template_space.TemplateSpace)(nil), // 326: pbts.TemplateSpace - (*template.TemplateAttachment)(nil), // 327: pbtemplate.TemplateAttachment - (*template.TemplateSpec)(nil), // 328: pbtemplate.TemplateSpec - (*template_revision.TemplateRevisionSpec)(nil), // 329: pbtr.TemplateRevisionSpec - (*template.Template)(nil), // 330: pbtemplate.Template - (*template_revision.TemplateRevisionAttachment)(nil), // 331: pbtr.TemplateRevisionAttachment - (*template_revision.TemplateRevision)(nil), // 332: pbtr.TemplateRevision - (*template_revision.TemplateRevisionNamesDetail)(nil), // 333: pbtr.TemplateRevisionNamesDetail - (*template_set.TemplateSetAttachment)(nil), // 334: pbtset.TemplateSetAttachment - (*template_set.TemplateSetSpec)(nil), // 335: pbtset.TemplateSetSpec - (*template_set.TemplateSet)(nil), // 336: pbtset.TemplateSet - (*template_set.TemplateSetBriefInfo)(nil), // 337: pbtset.TemplateSetBriefInfo - (*template_set.TemplateSetOfBizDetail)(nil), // 338: pbtset.TemplateSetOfBizDetail - (*app_template_binding.AppTemplateBindingAttachment)(nil), // 339: pbatb.AppTemplateBindingAttachment - (*app_template_binding.AppTemplateBindingSpec)(nil), // 340: pbatb.AppTemplateBindingSpec - (*app_template_binding.AppTemplateBinding)(nil), // 341: pbatb.AppTemplateBinding - (*app_template_binding.AppBoundTmplRevision)(nil), // 342: pbatb.AppBoundTmplRevision - (*app_template_binding.ReleasedAppBoundTmplRevision)(nil), // 343: pbatb.ReleasedAppBoundTmplRevision - (*app_template_binding.Conflict)(nil), // 344: pbatb.Conflict - (*app_template_variable.AppTemplateVariableReference)(nil), // 345: pbatv.AppTemplateVariableReference - (*app_template_variable.AppTemplateVariableAttachment)(nil), // 346: pbatv.AppTemplateVariableAttachment - (*app_template_variable.AppTemplateVariableSpec)(nil), // 347: pbatv.AppTemplateVariableSpec - (*template_binding_relation.TemplateBoundCounts)(nil), // 348: pbtbr.TemplateBoundCounts - (*template_binding_relation.TemplateRevisionBoundCounts)(nil), // 349: pbtbr.TemplateRevisionBoundCounts - (*template_binding_relation.TemplateSetBoundCounts)(nil), // 350: pbtbr.TemplateSetBoundCounts - (*template_binding_relation.TemplateBoundUnnamedAppDetail)(nil), // 351: pbtbr.TemplateBoundUnnamedAppDetail - (*template_binding_relation.TemplateBoundNamedAppDetail)(nil), // 352: pbtbr.TemplateBoundNamedAppDetail - (*template_binding_relation.TemplateBoundTemplateSetDetail)(nil), // 353: pbtbr.TemplateBoundTemplateSetDetail - (*template_binding_relation.MultiTemplateBoundTemplateSetDetail)(nil), // 354: pbtbr.MultiTemplateBoundTemplateSetDetail - (*template_binding_relation.TemplateRevisionBoundUnnamedAppDetail)(nil), // 355: pbtbr.TemplateRevisionBoundUnnamedAppDetail - (*template_binding_relation.TemplateRevisionBoundNamedAppDetail)(nil), // 356: pbtbr.TemplateRevisionBoundNamedAppDetail - (*template_binding_relation.TemplateSetBoundUnnamedAppDetail)(nil), // 357: pbtbr.TemplateSetBoundUnnamedAppDetail - (*template_binding_relation.MultiTemplateSetBoundUnnamedAppDetail)(nil), // 358: pbtbr.MultiTemplateSetBoundUnnamedAppDetail - (*template_binding_relation.TemplateSetBoundNamedAppDetail)(nil), // 359: pbtbr.TemplateSetBoundNamedAppDetail - (*template_binding_relation.LatestTemplateBoundUnnamedAppDetail)(nil), // 360: pbtbr.LatestTemplateBoundUnnamedAppDetail - (*template_variable.TemplateVariableAttachment)(nil), // 361: pbtv.TemplateVariableAttachment - (*template_variable.TemplateVariable)(nil), // 362: pbtv.TemplateVariable - (*group.GroupAttachment)(nil), // 363: pbgroup.GroupAttachment - (*group.GroupSpec)(nil), // 364: pbgroup.GroupSpec - (*group.Group)(nil), // 365: pbgroup.Group - (*structpb.Struct)(nil), // 366: google.protobuf.Struct - (*base.BasePage)(nil), // 367: pbbase.BasePage - (*kv.KvAttachment)(nil), // 368: pbkv.KvAttachment - (*kv.KvSpec)(nil), // 369: pbkv.KvSpec - (*kv.Kv)(nil), // 370: pbkv.Kv - (*client.Client)(nil), // 371: pbclient.Client - (*client_event.ClientEvent)(nil), // 372: pbce.ClientEvent - (*client.ClientQueryCondition)(nil), // 373: pbclient.ClientQueryCondition - (*client_query.ClientQuery)(nil), // 374: pbcq.ClientQuery - (*app_template_binding.TemplateBinding)(nil), // 375: pbatb.TemplateBinding - (*hook.Hook)(nil), // 376: pbhook.Hook - (*hook_revision.HookRevision)(nil), // 377: pbhr.HookRevision - (*base.EmptyReq)(nil), // 378: pbbase.EmptyReq - (*client.ClientCommonReq)(nil), // 379: pbclient.ClientCommonReq - (*base.EmptyResp)(nil), // 380: pbbase.EmptyResp - (*content.Content)(nil), // 381: pbcontent.Content - (*commit.Commit)(nil), // 382: pbcommit.Commit + (*CreateUserPrivilegesReq)(nil), // 267: pbds.CreateUserPrivilegesReq + (*CreateUserPrivilegesResp)(nil), // 268: pbds.CreateUserPrivilegesResp + (*ListUserPrivilegesReq)(nil), // 269: pbds.ListUserPrivilegesReq + (*ListUserPrivilegesResp)(nil), // 270: pbds.ListUserPrivilegesResp + (*DeleteUserPrivilegesReq)(nil), // 271: pbds.DeleteUserPrivilegesReq + (*CredentialScopePreviewResp_Detail)(nil), // 272: pbds.CredentialScopePreviewResp.Detail + (*BatchUpsertConfigItemsReq_ConfigItem)(nil), // 273: pbds.BatchUpsertConfigItemsReq.ConfigItem + (*BatchUpsertConfigItemsReq_TemplateBinding)(nil), // 274: pbds.BatchUpsertConfigItemsReq.TemplateBinding + (*ListConfigItemByTupleReq_Item)(nil), // 275: pbds.ListConfigItemByTupleReq.Item + (*GetHookInfoSpec_Releases)(nil), // 276: pbds.GetHookInfoSpec.Releases + (*ListHooksResp_Detail)(nil), // 277: pbds.ListHooksResp.Detail + (*ListHookReferencesResp_Detail)(nil), // 278: pbds.ListHookReferencesResp.Detail + (*ListHookRevisionsResp_ListHookRevisionsData)(nil), // 279: pbds.ListHookRevisionsResp.ListHookRevisionsData + (*ListHookRevisionReferencesResp_Detail)(nil), // 280: pbds.ListHookRevisionReferencesResp.Detail + (*GetReleaseHookResp_Hook)(nil), // 281: pbds.GetReleaseHookResp.Hook + (*ListTemplateSetsAndRevisionsResp_Detail)(nil), // 282: pbds.ListTemplateSetsAndRevisionsResp.Detail + (*ListTemplateByTupleReq_Item)(nil), // 283: pbds.ListTemplateByTupleReq.Item + (*ListTemplateByTupleReqResp_Item)(nil), // 284: pbds.ListTemplateByTupleReqResp.Item + (*BatchUpsertTemplatesReq_Item)(nil), // 285: pbds.BatchUpsertTemplatesReq.Item + (*GetTemplateRevisionResp_TemplateRevision)(nil), // 286: pbds.GetTemplateRevisionResp.TemplateRevision + (*ImportFromTemplateSetToAppReq_Binding)(nil), // 287: pbds.ImportFromTemplateSetToAppReq.Binding + (*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding)(nil), // 288: pbds.ImportFromTemplateSetToAppReq.Binding.TemplateRevisionBinding + (*CheckTemplateSetReferencesAppsReq_Item)(nil), // 289: pbds.CheckTemplateSetReferencesAppsReq.Item + (*CheckTemplateSetReferencesAppsResp_Item)(nil), // 290: pbds.CheckTemplateSetReferencesAppsResp.Item + (*ListAppGroupsResp_ListAppGroupsData)(nil), // 291: pbds.ListAppGroupsResp.ListAppGroupsData + (*CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData)(nil), // 292: pbds.CountGroupsReleasedAppsResp.CountGroupsReleasedAppsData + (*ListGroupReleasedAppsResp_ListGroupReleasedAppsData)(nil), // 293: pbds.ListGroupReleasedAppsResp.ListGroupReleasedAppsData + (*BatchUpsertKvsReq_Kv)(nil), // 294: pbds.BatchUpsertKvsReq.Kv + (*ListClientsReq_Order)(nil), // 295: pbds.ListClientsReq.Order + (*ListClientsResp_Item)(nil), // 296: pbds.ListClientsResp.Item + (*ListClientEventsReq_Order)(nil), // 297: pbds.ListClientEventsReq.Order + (*CompareConfigItemConflictsResp_NonTemplateConfig)(nil), // 298: pbds.CompareConfigItemConflictsResp.NonTemplateConfig + (*CompareConfigItemConflictsResp_TemplateConfig)(nil), // 299: pbds.CompareConfigItemConflictsResp.TemplateConfig + (*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail)(nil), // 300: pbds.CompareConfigItemConflictsResp.TemplateConfig.TemplateRevisionDetail + (*ListUserPrivilegesResp_Detail)(nil), // 301: pbds.ListUserPrivilegesResp.Detail + (*credential_scope.CredentialScopeSpec)(nil), // 302: pbcrs.CredentialScopeSpec + (*credential_scope.UpdateScopeSpec)(nil), // 303: pbcrs.UpdateScopeSpec + (*credential_scope.CredentialScopeAttachment)(nil), // 304: pbcrs.CredentialScopeAttachment + (*credential_scope.CredentialScopeList)(nil), // 305: pbcrs.CredentialScopeList + (*credential.CredentialAttachment)(nil), // 306: pbcredential.CredentialAttachment + (*credential.CredentialSpec)(nil), // 307: pbcredential.CredentialSpec + (*credential.CredentialList)(nil), // 308: pbcredential.CredentialList + (*app.AppSpec)(nil), // 309: pbapp.AppSpec + (*app.App)(nil), // 310: pbapp.App + (*config_item.ConfigItemAttachment)(nil), // 311: pbci.ConfigItemAttachment + (*config_item.ConfigItemSpec)(nil), // 312: pbci.ConfigItemSpec + (*content.ContentSpec)(nil), // 313: pbcontent.ContentSpec + (*template_variable.TemplateVariableSpec)(nil), // 314: pbtv.TemplateVariableSpec + (*config_item.ConfigItem)(nil), // 315: pbci.ConfigItem + (*released_ci.ReleasedConfigItem)(nil), // 316: pbrci.ReleasedConfigItem + (*config_item.ListConfigItemCounts)(nil), // 317: pbci.ListConfigItemCounts + (*content.ContentAttachment)(nil), // 318: pbcontent.ContentAttachment + (*commit.CommitAttachment)(nil), // 319: pbcommit.CommitAttachment + (*release.ReleaseAttachment)(nil), // 320: pbrelease.ReleaseAttachment + (*release.ReleaseSpec)(nil), // 321: pbrelease.ReleaseSpec + (*release.Release)(nil), // 322: pbrelease.Release + (*released_kv.ReleasedKv)(nil), // 323: pbrkv.ReleasedKv + (*hook.HookAttachment)(nil), // 324: pbhook.HookAttachment + (*hook.HookSpec)(nil), // 325: pbhook.HookSpec + (*base.Revision)(nil), // 326: pbbase.Revision + (*hook.CountHookTags)(nil), // 327: pbhook.CountHookTags + (*hook_revision.HookRevisionAttachment)(nil), // 328: pbhr.HookRevisionAttachment + (*hook_revision.HookRevisionSpec)(nil), // 329: pbhr.HookRevisionSpec + (*template_space.TemplateSpaceAttachment)(nil), // 330: pbts.TemplateSpaceAttachment + (*template_space.TemplateSpaceSpec)(nil), // 331: pbts.TemplateSpaceSpec + (*template_space.TemplateSpace)(nil), // 332: pbts.TemplateSpace + (*template.TemplateAttachment)(nil), // 333: pbtemplate.TemplateAttachment + (*template.TemplateSpec)(nil), // 334: pbtemplate.TemplateSpec + (*template_revision.TemplateRevisionSpec)(nil), // 335: pbtr.TemplateRevisionSpec + (*template.Template)(nil), // 336: pbtemplate.Template + (*template_revision.TemplateRevisionAttachment)(nil), // 337: pbtr.TemplateRevisionAttachment + (*template_revision.TemplateRevision)(nil), // 338: pbtr.TemplateRevision + (*template_revision.TemplateRevisionNamesDetail)(nil), // 339: pbtr.TemplateRevisionNamesDetail + (*template_set.TemplateSetAttachment)(nil), // 340: pbtset.TemplateSetAttachment + (*template_set.TemplateSetSpec)(nil), // 341: pbtset.TemplateSetSpec + (*template_set.TemplateSet)(nil), // 342: pbtset.TemplateSet + (*template_set.TemplateSetBriefInfo)(nil), // 343: pbtset.TemplateSetBriefInfo + (*template_set.TemplateSetOfBizDetail)(nil), // 344: pbtset.TemplateSetOfBizDetail + (*app_template_binding.AppTemplateBindingAttachment)(nil), // 345: pbatb.AppTemplateBindingAttachment + (*app_template_binding.AppTemplateBindingSpec)(nil), // 346: pbatb.AppTemplateBindingSpec + (*app_template_binding.AppTemplateBinding)(nil), // 347: pbatb.AppTemplateBinding + (*app_template_binding.AppBoundTmplRevision)(nil), // 348: pbatb.AppBoundTmplRevision + (*app_template_binding.ReleasedAppBoundTmplRevision)(nil), // 349: pbatb.ReleasedAppBoundTmplRevision + (*app_template_binding.Conflict)(nil), // 350: pbatb.Conflict + (*app_template_variable.AppTemplateVariableReference)(nil), // 351: pbatv.AppTemplateVariableReference + (*app_template_variable.AppTemplateVariableAttachment)(nil), // 352: pbatv.AppTemplateVariableAttachment + (*app_template_variable.AppTemplateVariableSpec)(nil), // 353: pbatv.AppTemplateVariableSpec + (*template_binding_relation.TemplateBoundCounts)(nil), // 354: pbtbr.TemplateBoundCounts + (*template_binding_relation.TemplateRevisionBoundCounts)(nil), // 355: pbtbr.TemplateRevisionBoundCounts + (*template_binding_relation.TemplateSetBoundCounts)(nil), // 356: pbtbr.TemplateSetBoundCounts + (*template_binding_relation.TemplateBoundUnnamedAppDetail)(nil), // 357: pbtbr.TemplateBoundUnnamedAppDetail + (*template_binding_relation.TemplateBoundNamedAppDetail)(nil), // 358: pbtbr.TemplateBoundNamedAppDetail + (*template_binding_relation.TemplateBoundTemplateSetDetail)(nil), // 359: pbtbr.TemplateBoundTemplateSetDetail + (*template_binding_relation.MultiTemplateBoundTemplateSetDetail)(nil), // 360: pbtbr.MultiTemplateBoundTemplateSetDetail + (*template_binding_relation.TemplateRevisionBoundUnnamedAppDetail)(nil), // 361: pbtbr.TemplateRevisionBoundUnnamedAppDetail + (*template_binding_relation.TemplateRevisionBoundNamedAppDetail)(nil), // 362: pbtbr.TemplateRevisionBoundNamedAppDetail + (*template_binding_relation.TemplateSetBoundUnnamedAppDetail)(nil), // 363: pbtbr.TemplateSetBoundUnnamedAppDetail + (*template_binding_relation.MultiTemplateSetBoundUnnamedAppDetail)(nil), // 364: pbtbr.MultiTemplateSetBoundUnnamedAppDetail + (*template_binding_relation.TemplateSetBoundNamedAppDetail)(nil), // 365: pbtbr.TemplateSetBoundNamedAppDetail + (*template_binding_relation.LatestTemplateBoundUnnamedAppDetail)(nil), // 366: pbtbr.LatestTemplateBoundUnnamedAppDetail + (*template_variable.TemplateVariableAttachment)(nil), // 367: pbtv.TemplateVariableAttachment + (*template_variable.TemplateVariable)(nil), // 368: pbtv.TemplateVariable + (*group.GroupAttachment)(nil), // 369: pbgroup.GroupAttachment + (*group.GroupSpec)(nil), // 370: pbgroup.GroupSpec + (*group.Group)(nil), // 371: pbgroup.Group + (*structpb.Struct)(nil), // 372: google.protobuf.Struct + (*base.BasePage)(nil), // 373: pbbase.BasePage + (*kv.KvAttachment)(nil), // 374: pbkv.KvAttachment + (*kv.KvSpec)(nil), // 375: pbkv.KvSpec + (*kv.Kv)(nil), // 376: pbkv.Kv + (*client.Client)(nil), // 377: pbclient.Client + (*client_event.ClientEvent)(nil), // 378: pbce.ClientEvent + (*client.ClientQueryCondition)(nil), // 379: pbclient.ClientQueryCondition + (*client_query.ClientQuery)(nil), // 380: pbcq.ClientQuery + (*app_template_binding.TemplateBinding)(nil), // 381: pbatb.TemplateBinding + (*hook.Hook)(nil), // 382: pbhook.Hook + (*hook_revision.HookRevision)(nil), // 383: pbhr.HookRevision + (*config_item.FilePermission)(nil), // 384: pbci.FilePermission + (*base.EmptyReq)(nil), // 385: pbbase.EmptyReq + (*client.ClientCommonReq)(nil), // 386: pbclient.ClientCommonReq + (*base.EmptyResp)(nil), // 387: pbbase.EmptyResp + (*content.Content)(nil), // 388: pbcontent.Content + (*commit.Commit)(nil), // 389: pbcommit.Commit } var file_data_service_proto_depIdxs = []int32{ - 296, // 0: pbds.UpdateCredentialScopesReq.created:type_name -> pbcrs.CredentialScopeSpec - 297, // 1: pbds.UpdateCredentialScopesReq.updated:type_name -> pbcrs.UpdateScopeSpec - 267, // 2: pbds.CredentialScopePreviewResp.details:type_name -> pbds.CredentialScopePreviewResp.Detail - 298, // 3: pbds.DeleteCredentialScopesReq.attachment:type_name -> pbcrs.CredentialScopeAttachment - 299, // 4: pbds.ListCredentialScopesResp.details:type_name -> pbcrs.CredentialScopeList - 298, // 5: pbds.CreateCredentialScopeReq.attachment:type_name -> pbcrs.CredentialScopeAttachment - 300, // 6: pbds.CreateCredentialReq.attachment:type_name -> pbcredential.CredentialAttachment - 301, // 7: pbds.CreateCredentialReq.spec:type_name -> pbcredential.CredentialSpec - 302, // 8: pbds.ListCredentialResp.details:type_name -> pbcredential.CredentialList - 300, // 9: pbds.UpdateCredentialReq.attachment:type_name -> pbcredential.CredentialAttachment - 301, // 10: pbds.UpdateCredentialReq.spec:type_name -> pbcredential.CredentialSpec - 300, // 11: pbds.DeleteCredentialReq.attachment:type_name -> pbcredential.CredentialAttachment - 303, // 12: pbds.CreateAppReq.spec:type_name -> pbapp.AppSpec - 303, // 13: pbds.UpdateAppReq.spec:type_name -> pbapp.AppSpec - 304, // 14: pbds.ListAppsResp.details:type_name -> pbapp.App - 304, // 15: pbds.ListAppsByIDsResp.details:type_name -> pbapp.App - 305, // 16: pbds.CreateConfigItemReq.config_item_attachment:type_name -> pbci.ConfigItemAttachment - 306, // 17: pbds.CreateConfigItemReq.config_item_spec:type_name -> pbci.ConfigItemSpec - 307, // 18: pbds.CreateConfigItemReq.content_spec:type_name -> pbcontent.ContentSpec - 268, // 19: pbds.BatchUpsertConfigItemsReq.items:type_name -> pbds.BatchUpsertConfigItemsReq.ConfigItem - 308, // 20: pbds.BatchUpsertConfigItemsReq.variables:type_name -> pbtv.TemplateVariableSpec - 269, // 21: pbds.BatchUpsertConfigItemsReq.bindings:type_name -> pbds.BatchUpsertConfigItemsReq.TemplateBinding - 305, // 22: pbds.UpdateConfigItemReq.attachment:type_name -> pbci.ConfigItemAttachment - 306, // 23: pbds.UpdateConfigItemReq.spec:type_name -> pbci.ConfigItemSpec - 305, // 24: pbds.DeleteConfigItemReq.attachment:type_name -> pbci.ConfigItemAttachment - 305, // 25: pbds.UnDeleteConfigItemReq.attachment:type_name -> pbci.ConfigItemAttachment - 305, // 26: pbds.UndoConfigItemReq.attachment:type_name -> pbci.ConfigItemAttachment - 309, // 27: pbds.ListConfigItemsResp.details:type_name -> pbci.ConfigItem - 310, // 28: pbds.ListReleasedConfigItemsResp.details:type_name -> pbrci.ReleasedConfigItem - 311, // 29: pbds.ListConfigItemCountResp.details:type_name -> pbci.ListConfigItemCounts - 270, // 30: pbds.ListConfigItemByTupleReq.items:type_name -> pbds.ListConfigItemByTupleReq.Item - 309, // 31: pbds.ListConfigItemByTupleResp.config_items:type_name -> pbci.ConfigItem - 312, // 32: pbds.CreateContentReq.attachment:type_name -> pbcontent.ContentAttachment - 307, // 33: pbds.CreateContentReq.spec:type_name -> pbcontent.ContentSpec - 313, // 34: pbds.CreateCommitReq.attachment:type_name -> pbcommit.CommitAttachment - 314, // 35: pbds.CreateReleaseReq.attachment:type_name -> pbrelease.ReleaseAttachment - 315, // 36: pbds.CreateReleaseReq.spec:type_name -> pbrelease.ReleaseSpec - 308, // 37: pbds.CreateReleaseReq.variables:type_name -> pbtv.TemplateVariableSpec - 316, // 38: pbds.ListReleasesResp.details:type_name -> pbrelease.Release - 317, // 39: pbds.ListReleasedKvResp.details:type_name -> pbrkv.ReleasedKv - 318, // 40: pbds.CreateHookReq.attachment:type_name -> pbhook.HookAttachment - 319, // 41: pbds.CreateHookReq.spec:type_name -> pbhook.HookSpec + 302, // 0: pbds.UpdateCredentialScopesReq.created:type_name -> pbcrs.CredentialScopeSpec + 303, // 1: pbds.UpdateCredentialScopesReq.updated:type_name -> pbcrs.UpdateScopeSpec + 272, // 2: pbds.CredentialScopePreviewResp.details:type_name -> pbds.CredentialScopePreviewResp.Detail + 304, // 3: pbds.DeleteCredentialScopesReq.attachment:type_name -> pbcrs.CredentialScopeAttachment + 305, // 4: pbds.ListCredentialScopesResp.details:type_name -> pbcrs.CredentialScopeList + 304, // 5: pbds.CreateCredentialScopeReq.attachment:type_name -> pbcrs.CredentialScopeAttachment + 306, // 6: pbds.CreateCredentialReq.attachment:type_name -> pbcredential.CredentialAttachment + 307, // 7: pbds.CreateCredentialReq.spec:type_name -> pbcredential.CredentialSpec + 308, // 8: pbds.ListCredentialResp.details:type_name -> pbcredential.CredentialList + 306, // 9: pbds.UpdateCredentialReq.attachment:type_name -> pbcredential.CredentialAttachment + 307, // 10: pbds.UpdateCredentialReq.spec:type_name -> pbcredential.CredentialSpec + 306, // 11: pbds.DeleteCredentialReq.attachment:type_name -> pbcredential.CredentialAttachment + 309, // 12: pbds.CreateAppReq.spec:type_name -> pbapp.AppSpec + 309, // 13: pbds.UpdateAppReq.spec:type_name -> pbapp.AppSpec + 310, // 14: pbds.ListAppsResp.details:type_name -> pbapp.App + 310, // 15: pbds.ListAppsByIDsResp.details:type_name -> pbapp.App + 311, // 16: pbds.CreateConfigItemReq.config_item_attachment:type_name -> pbci.ConfigItemAttachment + 312, // 17: pbds.CreateConfigItemReq.config_item_spec:type_name -> pbci.ConfigItemSpec + 313, // 18: pbds.CreateConfigItemReq.content_spec:type_name -> pbcontent.ContentSpec + 273, // 19: pbds.BatchUpsertConfigItemsReq.items:type_name -> pbds.BatchUpsertConfigItemsReq.ConfigItem + 314, // 20: pbds.BatchUpsertConfigItemsReq.variables:type_name -> pbtv.TemplateVariableSpec + 274, // 21: pbds.BatchUpsertConfigItemsReq.bindings:type_name -> pbds.BatchUpsertConfigItemsReq.TemplateBinding + 311, // 22: pbds.UpdateConfigItemReq.attachment:type_name -> pbci.ConfigItemAttachment + 312, // 23: pbds.UpdateConfigItemReq.spec:type_name -> pbci.ConfigItemSpec + 311, // 24: pbds.DeleteConfigItemReq.attachment:type_name -> pbci.ConfigItemAttachment + 311, // 25: pbds.UnDeleteConfigItemReq.attachment:type_name -> pbci.ConfigItemAttachment + 311, // 26: pbds.UndoConfigItemReq.attachment:type_name -> pbci.ConfigItemAttachment + 315, // 27: pbds.ListConfigItemsResp.details:type_name -> pbci.ConfigItem + 316, // 28: pbds.ListReleasedConfigItemsResp.details:type_name -> pbrci.ReleasedConfigItem + 317, // 29: pbds.ListConfigItemCountResp.details:type_name -> pbci.ListConfigItemCounts + 275, // 30: pbds.ListConfigItemByTupleReq.items:type_name -> pbds.ListConfigItemByTupleReq.Item + 315, // 31: pbds.ListConfigItemByTupleResp.config_items:type_name -> pbci.ConfigItem + 318, // 32: pbds.CreateContentReq.attachment:type_name -> pbcontent.ContentAttachment + 313, // 33: pbds.CreateContentReq.spec:type_name -> pbcontent.ContentSpec + 319, // 34: pbds.CreateCommitReq.attachment:type_name -> pbcommit.CommitAttachment + 320, // 35: pbds.CreateReleaseReq.attachment:type_name -> pbrelease.ReleaseAttachment + 321, // 36: pbds.CreateReleaseReq.spec:type_name -> pbrelease.ReleaseSpec + 314, // 37: pbds.CreateReleaseReq.variables:type_name -> pbtv.TemplateVariableSpec + 322, // 38: pbds.ListReleasesResp.details:type_name -> pbrelease.Release + 323, // 39: pbds.ListReleasedKvResp.details:type_name -> pbrkv.ReleasedKv + 324, // 40: pbds.CreateHookReq.attachment:type_name -> pbhook.HookAttachment + 325, // 41: pbds.CreateHookReq.spec:type_name -> pbhook.HookSpec 72, // 42: pbds.GetHookResp.spec:type_name -> pbds.GetHookInfoSpec - 318, // 43: pbds.GetHookResp.attachment:type_name -> pbhook.HookAttachment - 320, // 44: pbds.GetHookResp.revision:type_name -> pbbase.Revision - 271, // 45: pbds.GetHookInfoSpec.releases:type_name -> pbds.GetHookInfoSpec.Releases - 272, // 46: pbds.ListHooksResp.details:type_name -> pbds.ListHooksResp.Detail - 321, // 47: pbds.ListHookTagResp.details:type_name -> pbhook.CountHookTags - 273, // 48: pbds.ListHookReferencesResp.details:type_name -> pbds.ListHookReferencesResp.Detail - 318, // 49: pbds.UpdateHookReq.attachment:type_name -> pbhook.HookAttachment - 319, // 50: pbds.UpdateHookReq.spec:type_name -> pbhook.HookSpec - 322, // 51: pbds.CreateHookRevisionReq.attachment:type_name -> pbhr.HookRevisionAttachment - 323, // 52: pbds.CreateHookRevisionReq.spec:type_name -> pbhr.HookRevisionSpec - 274, // 53: pbds.ListHookRevisionsResp.details:type_name -> pbds.ListHookRevisionsResp.ListHookRevisionsData - 322, // 54: pbds.UpdateHookRevisionReq.attachment:type_name -> pbhr.HookRevisionAttachment - 323, // 55: pbds.UpdateHookRevisionReq.spec:type_name -> pbhr.HookRevisionSpec - 275, // 56: pbds.ListHookRevisionReferencesResp.details:type_name -> pbds.ListHookRevisionReferencesResp.Detail - 276, // 57: pbds.GetReleaseHookResp.pre_hook:type_name -> pbds.GetReleaseHookResp.Hook - 276, // 58: pbds.GetReleaseHookResp.post_hook:type_name -> pbds.GetReleaseHookResp.Hook - 324, // 59: pbds.CreateTemplateSpaceReq.attachment:type_name -> pbts.TemplateSpaceAttachment - 325, // 60: pbds.CreateTemplateSpaceReq.spec:type_name -> pbts.TemplateSpaceSpec - 326, // 61: pbds.ListTemplateSpacesResp.details:type_name -> pbts.TemplateSpace - 324, // 62: pbds.UpdateTemplateSpaceReq.attachment:type_name -> pbts.TemplateSpaceAttachment - 325, // 63: pbds.UpdateTemplateSpaceReq.spec:type_name -> pbts.TemplateSpaceSpec - 324, // 64: pbds.DeleteTemplateSpaceReq.attachment:type_name -> pbts.TemplateSpaceAttachment - 326, // 65: pbds.ListTmplSpacesByIDsResp.details:type_name -> pbts.TemplateSpace - 327, // 66: pbds.CreateTemplateReq.attachment:type_name -> pbtemplate.TemplateAttachment - 328, // 67: pbds.CreateTemplateReq.spec:type_name -> pbtemplate.TemplateSpec - 329, // 68: pbds.CreateTemplateReq.tr_spec:type_name -> pbtr.TemplateRevisionSpec - 330, // 69: pbds.ListTemplatesResp.details:type_name -> pbtemplate.Template - 327, // 70: pbds.UpdateTemplateReq.attachment:type_name -> pbtemplate.TemplateAttachment - 328, // 71: pbds.UpdateTemplateReq.spec:type_name -> pbtemplate.TemplateSpec - 327, // 72: pbds.DeleteTemplateReq.attachment:type_name -> pbtemplate.TemplateAttachment - 327, // 73: pbds.BatchDeleteTemplateReq.attachment:type_name -> pbtemplate.TemplateAttachment - 330, // 74: pbds.ListTemplatesByIDsResp.details:type_name -> pbtemplate.Template - 330, // 75: pbds.ListTemplatesNotBoundResp.details:type_name -> pbtemplate.Template - 330, // 76: pbds.ListTmplsOfTmplSetResp.details:type_name -> pbtemplate.Template - 277, // 77: pbds.ListTemplateSetsAndRevisionsResp.details:type_name -> pbds.ListTemplateSetsAndRevisionsResp.Detail - 278, // 78: pbds.ListTemplateByTupleReq.items:type_name -> pbds.ListTemplateByTupleReq.Item - 279, // 79: pbds.ListTemplateByTupleReqResp.items:type_name -> pbds.ListTemplateByTupleReqResp.Item - 280, // 80: pbds.BatchUpsertTemplatesReq.items:type_name -> pbds.BatchUpsertTemplatesReq.Item - 331, // 81: pbds.CreateTemplateRevisionReq.attachment:type_name -> pbtr.TemplateRevisionAttachment - 329, // 82: pbds.CreateTemplateRevisionReq.spec:type_name -> pbtr.TemplateRevisionSpec - 331, // 83: pbds.UpdateTemplateRevisionReq.attachment:type_name -> pbtr.TemplateRevisionAttachment - 329, // 84: pbds.UpdateTemplateRevisionReq.spec:type_name -> pbtr.TemplateRevisionSpec - 332, // 85: pbds.ListTemplateRevisionsResp.details:type_name -> pbtr.TemplateRevision - 281, // 86: pbds.GetTemplateRevisionResp.detail:type_name -> pbds.GetTemplateRevisionResp.TemplateRevision - 331, // 87: pbds.DeleteTemplateRevisionReq.attachment:type_name -> pbtr.TemplateRevisionAttachment - 332, // 88: pbds.ListTemplateRevisionsByIDsResp.details:type_name -> pbtr.TemplateRevision - 333, // 89: pbds.ListTmplRevisionNamesByTmplIDsResp.details:type_name -> pbtr.TemplateRevisionNamesDetail - 334, // 90: pbds.CreateTemplateSetReq.attachment:type_name -> pbtset.TemplateSetAttachment - 335, // 91: pbds.CreateTemplateSetReq.spec:type_name -> pbtset.TemplateSetSpec - 336, // 92: pbds.ListTemplateSetsResp.details:type_name -> pbtset.TemplateSet - 334, // 93: pbds.UpdateTemplateSetReq.attachment:type_name -> pbtset.TemplateSetAttachment - 335, // 94: pbds.UpdateTemplateSetReq.spec:type_name -> pbtset.TemplateSetSpec - 334, // 95: pbds.DeleteTemplateSetReq.attachment:type_name -> pbtset.TemplateSetAttachment - 336, // 96: pbds.ListAppTemplateSetsResp.details:type_name -> pbtset.TemplateSet - 336, // 97: pbds.ListTemplateSetsByIDsResp.details:type_name -> pbtset.TemplateSet - 337, // 98: pbds.ListTemplateSetBriefInfoByIDsResp.details:type_name -> pbtset.TemplateSetBriefInfo - 338, // 99: pbds.ListTmplSetsOfBizResp.details:type_name -> pbtset.TemplateSetOfBizDetail - 339, // 100: pbds.CreateAppTemplateBindingReq.attachment:type_name -> pbatb.AppTemplateBindingAttachment - 340, // 101: pbds.CreateAppTemplateBindingReq.spec:type_name -> pbatb.AppTemplateBindingSpec - 341, // 102: pbds.ListAppTemplateBindingsResp.details:type_name -> pbatb.AppTemplateBinding - 339, // 103: pbds.UpdateAppTemplateBindingReq.attachment:type_name -> pbatb.AppTemplateBindingAttachment - 340, // 104: pbds.UpdateAppTemplateBindingReq.spec:type_name -> pbatb.AppTemplateBindingSpec - 339, // 105: pbds.DeleteAppTemplateBindingReq.attachment:type_name -> pbatb.AppTemplateBindingAttachment - 342, // 106: pbds.ListAppBoundTmplRevisionsResp.details:type_name -> pbatb.AppBoundTmplRevision - 343, // 107: pbds.ListReleasedAppBoundTmplRevisionsResp.details:type_name -> pbatb.ReleasedAppBoundTmplRevision - 343, // 108: pbds.GetReleasedAppBoundTmplRevisionResp.detail:type_name -> pbatb.ReleasedAppBoundTmplRevision - 339, // 109: pbds.CheckAppTemplateBindingReq.attachment:type_name -> pbatb.AppTemplateBindingAttachment - 340, // 110: pbds.CheckAppTemplateBindingReq.spec:type_name -> pbatb.AppTemplateBindingSpec - 344, // 111: pbds.CheckAppTemplateBindingResp.details:type_name -> pbatb.Conflict - 282, // 112: pbds.ImportFromTemplateSetToAppReq.bindings:type_name -> pbds.ImportFromTemplateSetToAppReq.Binding - 345, // 113: pbds.GetAppTmplVariableRefsResp.details:type_name -> pbatv.AppTemplateVariableReference - 345, // 114: pbds.GetReleasedAppTmplVariableRefsResp.details:type_name -> pbatv.AppTemplateVariableReference - 346, // 115: pbds.UpdateAppTmplVariablesReq.attachment:type_name -> pbatv.AppTemplateVariableAttachment - 347, // 116: pbds.UpdateAppTmplVariablesReq.spec:type_name -> pbatv.AppTemplateVariableSpec - 308, // 117: pbds.ListAppTmplVariablesResp.details:type_name -> pbtv.TemplateVariableSpec - 308, // 118: pbds.ListReleasedAppTmplVariablesResp.details:type_name -> pbtv.TemplateVariableSpec - 348, // 119: pbds.ListTmplBoundCountsResp.details:type_name -> pbtbr.TemplateBoundCounts - 349, // 120: pbds.ListTmplRevisionBoundCountsResp.details:type_name -> pbtbr.TemplateRevisionBoundCounts - 350, // 121: pbds.ListTmplSetBoundCountsResp.details:type_name -> pbtbr.TemplateSetBoundCounts - 351, // 122: pbds.ListTmplBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateBoundUnnamedAppDetail - 352, // 123: pbds.ListTmplBoundNamedAppsResp.details:type_name -> pbtbr.TemplateBoundNamedAppDetail - 353, // 124: pbds.ListTmplBoundTmplSetsResp.details:type_name -> pbtbr.TemplateBoundTemplateSetDetail - 354, // 125: pbds.ListMultiTmplBoundTmplSetsResp.details:type_name -> pbtbr.MultiTemplateBoundTemplateSetDetail - 355, // 126: pbds.ListTmplRevisionBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateRevisionBoundUnnamedAppDetail - 356, // 127: pbds.ListTmplRevisionBoundNamedAppsResp.details:type_name -> pbtbr.TemplateRevisionBoundNamedAppDetail - 357, // 128: pbds.ListTmplSetBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateSetBoundUnnamedAppDetail - 358, // 129: pbds.ListMultiTmplSetBoundUnnamedAppsResp.details:type_name -> pbtbr.MultiTemplateSetBoundUnnamedAppDetail - 359, // 130: pbds.ListTmplSetBoundNamedAppsResp.details:type_name -> pbtbr.TemplateSetBoundNamedAppDetail - 360, // 131: pbds.ListLatestTmplBoundUnnamedAppsResp.details:type_name -> pbtbr.LatestTemplateBoundUnnamedAppDetail - 284, // 132: pbds.CheckTemplateSetReferencesAppsReq.items:type_name -> pbds.CheckTemplateSetReferencesAppsReq.Item - 285, // 133: pbds.CheckTemplateSetReferencesAppsResp.items:type_name -> pbds.CheckTemplateSetReferencesAppsResp.Item - 361, // 134: pbds.CreateTemplateVariableReq.attachment:type_name -> pbtv.TemplateVariableAttachment - 308, // 135: pbds.CreateTemplateVariableReq.spec:type_name -> pbtv.TemplateVariableSpec - 308, // 136: pbds.ImportTemplateVariablesReq.specs:type_name -> pbtv.TemplateVariableSpec - 362, // 137: pbds.ListTemplateVariablesResp.details:type_name -> pbtv.TemplateVariable - 361, // 138: pbds.UpdateTemplateVariableReq.attachment:type_name -> pbtv.TemplateVariableAttachment - 308, // 139: pbds.UpdateTemplateVariableReq.spec:type_name -> pbtv.TemplateVariableSpec - 361, // 140: pbds.DeleteTemplateVariableReq.attachment:type_name -> pbtv.TemplateVariableAttachment - 363, // 141: pbds.CreateGroupReq.attachment:type_name -> pbgroup.GroupAttachment - 364, // 142: pbds.CreateGroupReq.spec:type_name -> pbgroup.GroupSpec - 365, // 143: pbds.ListAllGroupsResp.details:type_name -> pbgroup.Group - 286, // 144: pbds.ListAppGroupsResp.details:type_name -> pbds.ListAppGroupsResp.ListAppGroupsData - 363, // 145: pbds.UpdateGroupReq.attachment:type_name -> pbgroup.GroupAttachment - 364, // 146: pbds.UpdateGroupReq.spec:type_name -> pbgroup.GroupSpec - 363, // 147: pbds.DeleteGroupReq.attachment:type_name -> pbgroup.GroupAttachment - 287, // 148: pbds.CountGroupsReleasedAppsResp.data:type_name -> pbds.CountGroupsReleasedAppsResp.CountGroupsReleasedAppsData - 288, // 149: pbds.ListGroupReleasedAppsResp.details:type_name -> pbds.ListGroupReleasedAppsResp.ListGroupReleasedAppsData - 366, // 150: pbds.PublishReq.labels:type_name -> google.protobuf.Struct - 308, // 151: pbds.GenerateReleaseAndPublishReq.variables:type_name -> pbtv.TemplateVariableSpec - 366, // 152: pbds.GenerateReleaseAndPublishReq.labels:type_name -> google.protobuf.Struct - 367, // 153: pbds.ListInstancesReq.page:type_name -> pbbase.BasePage + 324, // 43: pbds.GetHookResp.attachment:type_name -> pbhook.HookAttachment + 326, // 44: pbds.GetHookResp.revision:type_name -> pbbase.Revision + 276, // 45: pbds.GetHookInfoSpec.releases:type_name -> pbds.GetHookInfoSpec.Releases + 277, // 46: pbds.ListHooksResp.details:type_name -> pbds.ListHooksResp.Detail + 327, // 47: pbds.ListHookTagResp.details:type_name -> pbhook.CountHookTags + 278, // 48: pbds.ListHookReferencesResp.details:type_name -> pbds.ListHookReferencesResp.Detail + 324, // 49: pbds.UpdateHookReq.attachment:type_name -> pbhook.HookAttachment + 325, // 50: pbds.UpdateHookReq.spec:type_name -> pbhook.HookSpec + 328, // 51: pbds.CreateHookRevisionReq.attachment:type_name -> pbhr.HookRevisionAttachment + 329, // 52: pbds.CreateHookRevisionReq.spec:type_name -> pbhr.HookRevisionSpec + 279, // 53: pbds.ListHookRevisionsResp.details:type_name -> pbds.ListHookRevisionsResp.ListHookRevisionsData + 328, // 54: pbds.UpdateHookRevisionReq.attachment:type_name -> pbhr.HookRevisionAttachment + 329, // 55: pbds.UpdateHookRevisionReq.spec:type_name -> pbhr.HookRevisionSpec + 280, // 56: pbds.ListHookRevisionReferencesResp.details:type_name -> pbds.ListHookRevisionReferencesResp.Detail + 281, // 57: pbds.GetReleaseHookResp.pre_hook:type_name -> pbds.GetReleaseHookResp.Hook + 281, // 58: pbds.GetReleaseHookResp.post_hook:type_name -> pbds.GetReleaseHookResp.Hook + 330, // 59: pbds.CreateTemplateSpaceReq.attachment:type_name -> pbts.TemplateSpaceAttachment + 331, // 60: pbds.CreateTemplateSpaceReq.spec:type_name -> pbts.TemplateSpaceSpec + 332, // 61: pbds.ListTemplateSpacesResp.details:type_name -> pbts.TemplateSpace + 330, // 62: pbds.UpdateTemplateSpaceReq.attachment:type_name -> pbts.TemplateSpaceAttachment + 331, // 63: pbds.UpdateTemplateSpaceReq.spec:type_name -> pbts.TemplateSpaceSpec + 330, // 64: pbds.DeleteTemplateSpaceReq.attachment:type_name -> pbts.TemplateSpaceAttachment + 332, // 65: pbds.ListTmplSpacesByIDsResp.details:type_name -> pbts.TemplateSpace + 333, // 66: pbds.CreateTemplateReq.attachment:type_name -> pbtemplate.TemplateAttachment + 334, // 67: pbds.CreateTemplateReq.spec:type_name -> pbtemplate.TemplateSpec + 335, // 68: pbds.CreateTemplateReq.tr_spec:type_name -> pbtr.TemplateRevisionSpec + 336, // 69: pbds.ListTemplatesResp.details:type_name -> pbtemplate.Template + 333, // 70: pbds.UpdateTemplateReq.attachment:type_name -> pbtemplate.TemplateAttachment + 334, // 71: pbds.UpdateTemplateReq.spec:type_name -> pbtemplate.TemplateSpec + 333, // 72: pbds.DeleteTemplateReq.attachment:type_name -> pbtemplate.TemplateAttachment + 333, // 73: pbds.BatchDeleteTemplateReq.attachment:type_name -> pbtemplate.TemplateAttachment + 336, // 74: pbds.ListTemplatesByIDsResp.details:type_name -> pbtemplate.Template + 336, // 75: pbds.ListTemplatesNotBoundResp.details:type_name -> pbtemplate.Template + 336, // 76: pbds.ListTmplsOfTmplSetResp.details:type_name -> pbtemplate.Template + 282, // 77: pbds.ListTemplateSetsAndRevisionsResp.details:type_name -> pbds.ListTemplateSetsAndRevisionsResp.Detail + 283, // 78: pbds.ListTemplateByTupleReq.items:type_name -> pbds.ListTemplateByTupleReq.Item + 284, // 79: pbds.ListTemplateByTupleReqResp.items:type_name -> pbds.ListTemplateByTupleReqResp.Item + 285, // 80: pbds.BatchUpsertTemplatesReq.items:type_name -> pbds.BatchUpsertTemplatesReq.Item + 337, // 81: pbds.CreateTemplateRevisionReq.attachment:type_name -> pbtr.TemplateRevisionAttachment + 335, // 82: pbds.CreateTemplateRevisionReq.spec:type_name -> pbtr.TemplateRevisionSpec + 337, // 83: pbds.UpdateTemplateRevisionReq.attachment:type_name -> pbtr.TemplateRevisionAttachment + 335, // 84: pbds.UpdateTemplateRevisionReq.spec:type_name -> pbtr.TemplateRevisionSpec + 338, // 85: pbds.ListTemplateRevisionsResp.details:type_name -> pbtr.TemplateRevision + 286, // 86: pbds.GetTemplateRevisionResp.detail:type_name -> pbds.GetTemplateRevisionResp.TemplateRevision + 337, // 87: pbds.DeleteTemplateRevisionReq.attachment:type_name -> pbtr.TemplateRevisionAttachment + 338, // 88: pbds.ListTemplateRevisionsByIDsResp.details:type_name -> pbtr.TemplateRevision + 339, // 89: pbds.ListTmplRevisionNamesByTmplIDsResp.details:type_name -> pbtr.TemplateRevisionNamesDetail + 340, // 90: pbds.CreateTemplateSetReq.attachment:type_name -> pbtset.TemplateSetAttachment + 341, // 91: pbds.CreateTemplateSetReq.spec:type_name -> pbtset.TemplateSetSpec + 342, // 92: pbds.ListTemplateSetsResp.details:type_name -> pbtset.TemplateSet + 340, // 93: pbds.UpdateTemplateSetReq.attachment:type_name -> pbtset.TemplateSetAttachment + 341, // 94: pbds.UpdateTemplateSetReq.spec:type_name -> pbtset.TemplateSetSpec + 340, // 95: pbds.DeleteTemplateSetReq.attachment:type_name -> pbtset.TemplateSetAttachment + 342, // 96: pbds.ListAppTemplateSetsResp.details:type_name -> pbtset.TemplateSet + 342, // 97: pbds.ListTemplateSetsByIDsResp.details:type_name -> pbtset.TemplateSet + 343, // 98: pbds.ListTemplateSetBriefInfoByIDsResp.details:type_name -> pbtset.TemplateSetBriefInfo + 344, // 99: pbds.ListTmplSetsOfBizResp.details:type_name -> pbtset.TemplateSetOfBizDetail + 345, // 100: pbds.CreateAppTemplateBindingReq.attachment:type_name -> pbatb.AppTemplateBindingAttachment + 346, // 101: pbds.CreateAppTemplateBindingReq.spec:type_name -> pbatb.AppTemplateBindingSpec + 347, // 102: pbds.ListAppTemplateBindingsResp.details:type_name -> pbatb.AppTemplateBinding + 345, // 103: pbds.UpdateAppTemplateBindingReq.attachment:type_name -> pbatb.AppTemplateBindingAttachment + 346, // 104: pbds.UpdateAppTemplateBindingReq.spec:type_name -> pbatb.AppTemplateBindingSpec + 345, // 105: pbds.DeleteAppTemplateBindingReq.attachment:type_name -> pbatb.AppTemplateBindingAttachment + 348, // 106: pbds.ListAppBoundTmplRevisionsResp.details:type_name -> pbatb.AppBoundTmplRevision + 349, // 107: pbds.ListReleasedAppBoundTmplRevisionsResp.details:type_name -> pbatb.ReleasedAppBoundTmplRevision + 349, // 108: pbds.GetReleasedAppBoundTmplRevisionResp.detail:type_name -> pbatb.ReleasedAppBoundTmplRevision + 345, // 109: pbds.CheckAppTemplateBindingReq.attachment:type_name -> pbatb.AppTemplateBindingAttachment + 346, // 110: pbds.CheckAppTemplateBindingReq.spec:type_name -> pbatb.AppTemplateBindingSpec + 350, // 111: pbds.CheckAppTemplateBindingResp.details:type_name -> pbatb.Conflict + 287, // 112: pbds.ImportFromTemplateSetToAppReq.bindings:type_name -> pbds.ImportFromTemplateSetToAppReq.Binding + 351, // 113: pbds.GetAppTmplVariableRefsResp.details:type_name -> pbatv.AppTemplateVariableReference + 351, // 114: pbds.GetReleasedAppTmplVariableRefsResp.details:type_name -> pbatv.AppTemplateVariableReference + 352, // 115: pbds.UpdateAppTmplVariablesReq.attachment:type_name -> pbatv.AppTemplateVariableAttachment + 353, // 116: pbds.UpdateAppTmplVariablesReq.spec:type_name -> pbatv.AppTemplateVariableSpec + 314, // 117: pbds.ListAppTmplVariablesResp.details:type_name -> pbtv.TemplateVariableSpec + 314, // 118: pbds.ListReleasedAppTmplVariablesResp.details:type_name -> pbtv.TemplateVariableSpec + 354, // 119: pbds.ListTmplBoundCountsResp.details:type_name -> pbtbr.TemplateBoundCounts + 355, // 120: pbds.ListTmplRevisionBoundCountsResp.details:type_name -> pbtbr.TemplateRevisionBoundCounts + 356, // 121: pbds.ListTmplSetBoundCountsResp.details:type_name -> pbtbr.TemplateSetBoundCounts + 357, // 122: pbds.ListTmplBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateBoundUnnamedAppDetail + 358, // 123: pbds.ListTmplBoundNamedAppsResp.details:type_name -> pbtbr.TemplateBoundNamedAppDetail + 359, // 124: pbds.ListTmplBoundTmplSetsResp.details:type_name -> pbtbr.TemplateBoundTemplateSetDetail + 360, // 125: pbds.ListMultiTmplBoundTmplSetsResp.details:type_name -> pbtbr.MultiTemplateBoundTemplateSetDetail + 361, // 126: pbds.ListTmplRevisionBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateRevisionBoundUnnamedAppDetail + 362, // 127: pbds.ListTmplRevisionBoundNamedAppsResp.details:type_name -> pbtbr.TemplateRevisionBoundNamedAppDetail + 363, // 128: pbds.ListTmplSetBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateSetBoundUnnamedAppDetail + 364, // 129: pbds.ListMultiTmplSetBoundUnnamedAppsResp.details:type_name -> pbtbr.MultiTemplateSetBoundUnnamedAppDetail + 365, // 130: pbds.ListTmplSetBoundNamedAppsResp.details:type_name -> pbtbr.TemplateSetBoundNamedAppDetail + 366, // 131: pbds.ListLatestTmplBoundUnnamedAppsResp.details:type_name -> pbtbr.LatestTemplateBoundUnnamedAppDetail + 289, // 132: pbds.CheckTemplateSetReferencesAppsReq.items:type_name -> pbds.CheckTemplateSetReferencesAppsReq.Item + 290, // 133: pbds.CheckTemplateSetReferencesAppsResp.items:type_name -> pbds.CheckTemplateSetReferencesAppsResp.Item + 367, // 134: pbds.CreateTemplateVariableReq.attachment:type_name -> pbtv.TemplateVariableAttachment + 314, // 135: pbds.CreateTemplateVariableReq.spec:type_name -> pbtv.TemplateVariableSpec + 314, // 136: pbds.ImportTemplateVariablesReq.specs:type_name -> pbtv.TemplateVariableSpec + 368, // 137: pbds.ListTemplateVariablesResp.details:type_name -> pbtv.TemplateVariable + 367, // 138: pbds.UpdateTemplateVariableReq.attachment:type_name -> pbtv.TemplateVariableAttachment + 314, // 139: pbds.UpdateTemplateVariableReq.spec:type_name -> pbtv.TemplateVariableSpec + 367, // 140: pbds.DeleteTemplateVariableReq.attachment:type_name -> pbtv.TemplateVariableAttachment + 369, // 141: pbds.CreateGroupReq.attachment:type_name -> pbgroup.GroupAttachment + 370, // 142: pbds.CreateGroupReq.spec:type_name -> pbgroup.GroupSpec + 371, // 143: pbds.ListAllGroupsResp.details:type_name -> pbgroup.Group + 291, // 144: pbds.ListAppGroupsResp.details:type_name -> pbds.ListAppGroupsResp.ListAppGroupsData + 369, // 145: pbds.UpdateGroupReq.attachment:type_name -> pbgroup.GroupAttachment + 370, // 146: pbds.UpdateGroupReq.spec:type_name -> pbgroup.GroupSpec + 369, // 147: pbds.DeleteGroupReq.attachment:type_name -> pbgroup.GroupAttachment + 292, // 148: pbds.CountGroupsReleasedAppsResp.data:type_name -> pbds.CountGroupsReleasedAppsResp.CountGroupsReleasedAppsData + 293, // 149: pbds.ListGroupReleasedAppsResp.details:type_name -> pbds.ListGroupReleasedAppsResp.ListGroupReleasedAppsData + 372, // 150: pbds.PublishReq.labels:type_name -> google.protobuf.Struct + 314, // 151: pbds.GenerateReleaseAndPublishReq.variables:type_name -> pbtv.TemplateVariableSpec + 372, // 152: pbds.GenerateReleaseAndPublishReq.labels:type_name -> google.protobuf.Struct + 373, // 153: pbds.ListInstancesReq.page:type_name -> pbbase.BasePage 227, // 154: pbds.ListInstancesResp.details:type_name -> pbds.InstanceResource 230, // 155: pbds.FetchInstanceInfoResp.details:type_name -> pbds.InstanceInfo - 368, // 156: pbds.CreateKvReq.attachment:type_name -> pbkv.KvAttachment - 369, // 157: pbds.CreateKvReq.spec:type_name -> pbkv.KvSpec - 368, // 158: pbds.UpdateKvReq.attachment:type_name -> pbkv.KvAttachment - 369, // 159: pbds.UpdateKvReq.spec:type_name -> pbkv.KvSpec - 370, // 160: pbds.ListKvsResp.details:type_name -> pbkv.Kv - 369, // 161: pbds.DeleteKvReq.spec:type_name -> pbkv.KvSpec - 368, // 162: pbds.DeleteKvReq.attachment:type_name -> pbkv.KvAttachment - 289, // 163: pbds.BatchUpsertKvsReq.kvs:type_name -> pbds.BatchUpsertKvsReq.Kv - 371, // 164: pbds.BatchUpsertClientMetricsReq.client_items:type_name -> pbclient.Client - 372, // 165: pbds.BatchUpsertClientMetricsReq.client_event_items:type_name -> pbce.ClientEvent - 290, // 166: pbds.ListClientsReq.order:type_name -> pbds.ListClientsReq.Order - 373, // 167: pbds.ListClientsReq.search:type_name -> pbclient.ClientQueryCondition - 291, // 168: pbds.ListClientsResp.details:type_name -> pbds.ListClientsResp.Item - 292, // 169: pbds.ListClientEventsReq.order:type_name -> pbds.ListClientEventsReq.Order - 372, // 170: pbds.ListClientEventsResp.details:type_name -> pbce.ClientEvent - 374, // 171: pbds.ListClientQuerysResp.details:type_name -> pbcq.ClientQuery - 366, // 172: pbds.CreateClientQueryReq.search_condition:type_name -> google.protobuf.Struct - 366, // 173: pbds.UpdateClientQueryReq.search_condition:type_name -> google.protobuf.Struct - 293, // 174: pbds.CompareConfigItemConflictsResp.non_template_configs:type_name -> pbds.CompareConfigItemConflictsResp.NonTemplateConfig - 294, // 175: pbds.CompareConfigItemConflictsResp.template_configs:type_name -> pbds.CompareConfigItemConflictsResp.TemplateConfig - 305, // 176: pbds.BatchUpsertConfigItemsReq.ConfigItem.config_item_attachment:type_name -> pbci.ConfigItemAttachment - 306, // 177: pbds.BatchUpsertConfigItemsReq.ConfigItem.config_item_spec:type_name -> pbci.ConfigItemSpec - 307, // 178: pbds.BatchUpsertConfigItemsReq.ConfigItem.content_spec:type_name -> pbcontent.ContentSpec - 375, // 179: pbds.BatchUpsertConfigItemsReq.TemplateBinding.template_binding:type_name -> pbatb.TemplateBinding - 376, // 180: pbds.ListHooksResp.Detail.hook:type_name -> pbhook.Hook - 377, // 181: pbds.ListHookRevisionsResp.ListHookRevisionsData.hook_revision:type_name -> pbhr.HookRevision - 330, // 182: pbds.ListTemplateSetsAndRevisionsResp.Detail.template:type_name -> pbtemplate.Template - 332, // 183: pbds.ListTemplateSetsAndRevisionsResp.Detail.template_revision:type_name -> pbtr.TemplateRevision - 330, // 184: pbds.ListTemplateByTupleReqResp.Item.template:type_name -> pbtemplate.Template - 332, // 185: pbds.ListTemplateByTupleReqResp.Item.template_revision:type_name -> pbtr.TemplateRevision - 330, // 186: pbds.BatchUpsertTemplatesReq.Item.template:type_name -> pbtemplate.Template - 332, // 187: pbds.BatchUpsertTemplatesReq.Item.template_revision:type_name -> pbtr.TemplateRevision - 283, // 188: pbds.ImportFromTemplateSetToAppReq.Binding.template_revisions:type_name -> pbds.ImportFromTemplateSetToAppReq.Binding.TemplateRevisionBinding - 366, // 189: pbds.ListAppGroupsResp.ListAppGroupsData.old_selector:type_name -> google.protobuf.Struct - 366, // 190: pbds.ListAppGroupsResp.ListAppGroupsData.new_selector:type_name -> google.protobuf.Struct - 368, // 191: pbds.BatchUpsertKvsReq.Kv.kv_attachment:type_name -> pbkv.KvAttachment - 369, // 192: pbds.BatchUpsertKvsReq.Kv.kv_spec:type_name -> pbkv.KvSpec - 371, // 193: pbds.ListClientsResp.Item.client:type_name -> pbclient.Client - 306, // 194: pbds.CompareConfigItemConflictsResp.NonTemplateConfig.config_item_spec:type_name -> pbci.ConfigItemSpec - 308, // 195: pbds.CompareConfigItemConflictsResp.NonTemplateConfig.variables:type_name -> pbtv.TemplateVariableSpec - 295, // 196: pbds.CompareConfigItemConflictsResp.TemplateConfig.template_revisions:type_name -> pbds.CompareConfigItemConflictsResp.TemplateConfig.TemplateRevisionDetail - 308, // 197: pbds.CompareConfigItemConflictsResp.TemplateConfig.TemplateRevisionDetail.variables:type_name -> pbtv.TemplateVariableSpec - 20, // 198: pbds.Data.CreateApp:input_type -> pbds.CreateAppReq - 21, // 199: pbds.Data.UpdateApp:input_type -> pbds.UpdateAppReq - 22, // 200: pbds.Data.DeleteApp:input_type -> pbds.DeleteAppReq - 23, // 201: pbds.Data.GetApp:input_type -> pbds.GetAppReq - 24, // 202: pbds.Data.GetAppByID:input_type -> pbds.GetAppByIDReq - 25, // 203: pbds.Data.GetAppByName:input_type -> pbds.GetAppByNameReq - 26, // 204: pbds.Data.ListAppsRest:input_type -> pbds.ListAppsRestReq - 28, // 205: pbds.Data.ListAppsByIDs:input_type -> pbds.ListAppsByIDsReq - 30, // 206: pbds.Data.CreateConfigItem:input_type -> pbds.CreateConfigItemReq - 31, // 207: pbds.Data.BatchUpsertConfigItems:input_type -> pbds.BatchUpsertConfigItemsReq - 33, // 208: pbds.Data.UpdateConfigItem:input_type -> pbds.UpdateConfigItemReq - 34, // 209: pbds.Data.DeleteConfigItem:input_type -> pbds.DeleteConfigItemReq - 35, // 210: pbds.Data.UnDeleteConfigItem:input_type -> pbds.UnDeleteConfigItemReq - 36, // 211: pbds.Data.UndoConfigItem:input_type -> pbds.UndoConfigItemReq - 37, // 212: pbds.Data.GetConfigItem:input_type -> pbds.GetConfigItemReq - 38, // 213: pbds.Data.ListConfigItems:input_type -> pbds.ListConfigItemsReq - 40, // 214: pbds.Data.ListReleasedConfigItems:input_type -> pbds.ListReleasedConfigItemsReq - 42, // 215: pbds.Data.ListConfigItemCount:input_type -> pbds.ListConfigItemCountReq - 44, // 216: pbds.Data.ListConfigItemByTuple:input_type -> pbds.ListConfigItemByTupleReq - 18, // 217: pbds.Data.UpdateConfigHook:input_type -> pbds.UpdateConfigHookReq - 46, // 218: pbds.Data.CreateContent:input_type -> pbds.CreateContentReq - 47, // 219: pbds.Data.GetContent:input_type -> pbds.GetContentReq - 48, // 220: pbds.Data.CreateCommit:input_type -> pbds.CreateCommitReq - 49, // 221: pbds.Data.GetLatestCommit:input_type -> pbds.GetLatestCommitReq - 50, // 222: pbds.Data.CreateRelease:input_type -> pbds.CreateReleaseReq - 51, // 223: pbds.Data.ListReleases:input_type -> pbds.ListReleasesReq - 53, // 224: pbds.Data.GetReleaseByName:input_type -> pbds.GetReleaseByNameReq - 54, // 225: pbds.Data.GetRelease:input_type -> pbds.GetReleaseReq - 55, // 226: pbds.Data.DeprecateRelease:input_type -> pbds.DeprecateReleaseReq - 56, // 227: pbds.Data.UnDeprecateRelease:input_type -> pbds.UnDeprecateReleaseReq - 57, // 228: pbds.Data.DeleteRelease:input_type -> pbds.DeleteReleaseReq - 58, // 229: pbds.Data.CheckReleaseName:input_type -> pbds.CheckReleaseNameReq - 60, // 230: pbds.Data.GetReleasedConfigItem:input_type -> pbds.GetReleasedCIReq - 61, // 231: pbds.Data.GetReleasedKv:input_type -> pbds.GetReleasedKvReq - 62, // 232: pbds.Data.ListReleasedKvs:input_type -> pbds.ListReleasedKvReq - 64, // 233: pbds.Data.CreateHook:input_type -> pbds.CreateHookReq - 73, // 234: pbds.Data.ListHooks:input_type -> pbds.ListHooksReq - 78, // 235: pbds.Data.DeleteHook:input_type -> pbds.DeleteHookReq - 79, // 236: pbds.Data.UpdateHook:input_type -> pbds.UpdateHookReq - 65, // 237: pbds.Data.ListHookTags:input_type -> pbds.ListHookTagReq - 76, // 238: pbds.Data.ListHookReferences:input_type -> pbds.ListHookReferencesReq - 66, // 239: pbds.Data.GetHook:input_type -> pbds.GetHookReq - 68, // 240: pbds.Data.HookFetchIDsExcluding:input_type -> pbds.HookFetchIDsExcludingReq - 70, // 241: pbds.Data.GetHookReferencedIDs:input_type -> pbds.GetHookReferencedIDsReq - 80, // 242: pbds.Data.CreateHookRevision:input_type -> pbds.CreateHookRevisionReq - 81, // 243: pbds.Data.ListHookRevisions:input_type -> pbds.ListHookRevisionsReq - 83, // 244: pbds.Data.GetHookRevisionByID:input_type -> pbds.GetHookRevisionByIdReq - 84, // 245: pbds.Data.DeleteHookRevision:input_type -> pbds.DeleteHookRevisionReq - 85, // 246: pbds.Data.PublishHookRevision:input_type -> pbds.PublishHookRevisionReq - 86, // 247: pbds.Data.GetHookRevisionByPubState:input_type -> pbds.GetByPubStateReq - 87, // 248: pbds.Data.UpdateHookRevision:input_type -> pbds.UpdateHookRevisionReq - 88, // 249: pbds.Data.ListHookRevisionReferences:input_type -> pbds.ListHookRevisionReferencesReq - 90, // 250: pbds.Data.GetReleaseHook:input_type -> pbds.GetReleaseHookReq - 92, // 251: pbds.Data.CreateTemplateSpace:input_type -> pbds.CreateTemplateSpaceReq - 93, // 252: pbds.Data.ListTemplateSpaces:input_type -> pbds.ListTemplateSpacesReq - 95, // 253: pbds.Data.UpdateTemplateSpace:input_type -> pbds.UpdateTemplateSpaceReq - 96, // 254: pbds.Data.DeleteTemplateSpace:input_type -> pbds.DeleteTemplateSpaceReq - 378, // 255: pbds.Data.GetAllBizsOfTmplSpaces:input_type -> pbbase.EmptyReq - 98, // 256: pbds.Data.CreateDefaultTmplSpace:input_type -> pbds.CreateDefaultTmplSpaceReq - 99, // 257: pbds.Data.ListTmplSpacesByIDs:input_type -> pbds.ListTmplSpacesByIDsReq - 101, // 258: pbds.Data.CreateTemplate:input_type -> pbds.CreateTemplateReq - 102, // 259: pbds.Data.ListTemplates:input_type -> pbds.ListTemplatesReq - 104, // 260: pbds.Data.UpdateTemplate:input_type -> pbds.UpdateTemplateReq - 105, // 261: pbds.Data.DeleteTemplate:input_type -> pbds.DeleteTemplateReq - 106, // 262: pbds.Data.BatchDeleteTemplate:input_type -> pbds.BatchDeleteTemplateReq - 107, // 263: pbds.Data.AddTmplsToTmplSets:input_type -> pbds.AddTmplsToTmplSetsReq - 108, // 264: pbds.Data.DeleteTmplsFromTmplSets:input_type -> pbds.DeleteTmplsFromTmplSetsReq - 109, // 265: pbds.Data.ListTemplatesByIDs:input_type -> pbds.ListTemplatesByIDsReq - 111, // 266: pbds.Data.ListTemplatesNotBound:input_type -> pbds.ListTemplatesNotBoundReq - 113, // 267: pbds.Data.ListTmplsOfTmplSet:input_type -> pbds.ListTmplsOfTmplSetReq - 115, // 268: pbds.Data.ListTemplateSetsAndRevisions:input_type -> pbds.ListTemplateSetsAndRevisionsReq - 117, // 269: pbds.Data.ListTemplateByTuple:input_type -> pbds.ListTemplateByTupleReq - 119, // 270: pbds.Data.BatchUpsertTemplates:input_type -> pbds.BatchUpsertTemplatesReq - 121, // 271: pbds.Data.BatchUpdateTemplatePermissions:input_type -> pbds.BatchUpdateTemplatePermissionsReq - 123, // 272: pbds.Data.CreateTemplateRevision:input_type -> pbds.CreateTemplateRevisionReq - 124, // 273: pbds.Data.UpdateTemplateRevision:input_type -> pbds.UpdateTemplateRevisionReq - 125, // 274: pbds.Data.ListTemplateRevisions:input_type -> pbds.ListTemplateRevisionsReq - 127, // 275: pbds.Data.GetTemplateRevision:input_type -> pbds.GetTemplateRevisionReq - 129, // 276: pbds.Data.DeleteTemplateRevision:input_type -> pbds.DeleteTemplateRevisionReq - 130, // 277: pbds.Data.ListTemplateRevisionsByIDs:input_type -> pbds.ListTemplateRevisionsByIDsReq - 132, // 278: pbds.Data.ListTmplRevisionNamesByTmplIDs:input_type -> pbds.ListTmplRevisionNamesByTmplIDsReq - 134, // 279: pbds.Data.CreateTemplateSet:input_type -> pbds.CreateTemplateSetReq - 135, // 280: pbds.Data.ListTemplateSets:input_type -> pbds.ListTemplateSetsReq - 137, // 281: pbds.Data.UpdateTemplateSet:input_type -> pbds.UpdateTemplateSetReq - 138, // 282: pbds.Data.DeleteTemplateSet:input_type -> pbds.DeleteTemplateSetReq - 139, // 283: pbds.Data.ListAppTemplateSets:input_type -> pbds.ListAppTemplateSetsReq - 141, // 284: pbds.Data.ListTemplateSetsByIDs:input_type -> pbds.ListTemplateSetsByIDsReq - 143, // 285: pbds.Data.ListTemplateSetBriefInfoByIDs:input_type -> pbds.ListTemplateSetBriefInfoByIDsReq - 145, // 286: pbds.Data.ListTmplSetsOfBiz:input_type -> pbds.ListTmplSetsOfBizReq - 147, // 287: pbds.Data.CreateAppTemplateBinding:input_type -> pbds.CreateAppTemplateBindingReq - 148, // 288: pbds.Data.ListAppTemplateBindings:input_type -> pbds.ListAppTemplateBindingsReq - 150, // 289: pbds.Data.UpdateAppTemplateBinding:input_type -> pbds.UpdateAppTemplateBindingReq - 151, // 290: pbds.Data.DeleteAppTemplateBinding:input_type -> pbds.DeleteAppTemplateBindingReq - 152, // 291: pbds.Data.ListAppBoundTmplRevisions:input_type -> pbds.ListAppBoundTmplRevisionsReq - 154, // 292: pbds.Data.ListReleasedAppBoundTmplRevisions:input_type -> pbds.ListReleasedAppBoundTmplRevisionsReq - 156, // 293: pbds.Data.GetReleasedAppBoundTmplRevision:input_type -> pbds.GetReleasedAppBoundTmplRevisionReq - 158, // 294: pbds.Data.CheckAppTemplateBinding:input_type -> pbds.CheckAppTemplateBindingReq - 160, // 295: pbds.Data.ImportFromTemplateSetToApp:input_type -> pbds.ImportFromTemplateSetToAppReq - 161, // 296: pbds.Data.ExtractAppTmplVariables:input_type -> pbds.ExtractAppTmplVariablesReq - 163, // 297: pbds.Data.GetAppTmplVariableRefs:input_type -> pbds.GetAppTmplVariableRefsReq - 165, // 298: pbds.Data.GetReleasedAppTmplVariableRefs:input_type -> pbds.GetReleasedAppTmplVariableRefsReq - 167, // 299: pbds.Data.UpdateAppTmplVariables:input_type -> pbds.UpdateAppTmplVariablesReq - 168, // 300: pbds.Data.ListAppTmplVariables:input_type -> pbds.ListAppTmplVariablesReq - 170, // 301: pbds.Data.ListReleasedAppTmplVariables:input_type -> pbds.ListReleasedAppTmplVariablesReq - 172, // 302: pbds.Data.ListTmplBoundCounts:input_type -> pbds.ListTmplBoundCountsReq - 174, // 303: pbds.Data.ListTmplRevisionBoundCounts:input_type -> pbds.ListTmplRevisionBoundCountsReq - 176, // 304: pbds.Data.ListTmplSetBoundCounts:input_type -> pbds.ListTmplSetBoundCountsReq - 178, // 305: pbds.Data.ListTmplBoundUnnamedApps:input_type -> pbds.ListTmplBoundUnnamedAppsReq - 180, // 306: pbds.Data.ListTmplBoundNamedApps:input_type -> pbds.ListTmplBoundNamedAppsReq - 182, // 307: pbds.Data.ListTmplBoundTmplSets:input_type -> pbds.ListTmplBoundTmplSetsReq - 184, // 308: pbds.Data.ListMultiTmplBoundTmplSets:input_type -> pbds.ListMultiTmplBoundTmplSetsReq - 186, // 309: pbds.Data.ListTmplRevisionBoundUnnamedApps:input_type -> pbds.ListTmplRevisionBoundUnnamedAppsReq - 188, // 310: pbds.Data.ListTmplRevisionBoundNamedApps:input_type -> pbds.ListTmplRevisionBoundNamedAppsReq - 190, // 311: pbds.Data.ListTmplSetBoundUnnamedApps:input_type -> pbds.ListTmplSetBoundUnnamedAppsReq - 192, // 312: pbds.Data.ListMultiTmplSetBoundUnnamedApps:input_type -> pbds.ListMultiTmplSetBoundUnnamedAppsReq - 194, // 313: pbds.Data.ListTmplSetBoundNamedApps:input_type -> pbds.ListTmplSetBoundNamedAppsReq - 196, // 314: pbds.Data.ListLatestTmplBoundUnnamedApps:input_type -> pbds.ListLatestTmplBoundUnnamedAppsReq - 198, // 315: pbds.Data.RemoveAppBoundTmplSet:input_type -> pbds.RemoveAppBoundTmplSetReq - 199, // 316: pbds.Data.CheckTemplateSetReferencesApps:input_type -> pbds.CheckTemplateSetReferencesAppsReq - 201, // 317: pbds.Data.CreateTemplateVariable:input_type -> pbds.CreateTemplateVariableReq - 204, // 318: pbds.Data.ListTemplateVariables:input_type -> pbds.ListTemplateVariablesReq - 206, // 319: pbds.Data.UpdateTemplateVariable:input_type -> pbds.UpdateTemplateVariableReq - 207, // 320: pbds.Data.DeleteTemplateVariable:input_type -> pbds.DeleteTemplateVariableReq - 208, // 321: pbds.Data.TemplateVariableFetchIDsExcluding:input_type -> pbds.TemplateVariableFetchIDsExcludingReq - 202, // 322: pbds.Data.ImportTemplateVariables:input_type -> pbds.ImportTemplateVariablesReq - 210, // 323: pbds.Data.CreateGroup:input_type -> pbds.CreateGroupReq - 211, // 324: pbds.Data.ListAllGroups:input_type -> pbds.ListAllGroupsReq - 213, // 325: pbds.Data.ListAppGroups:input_type -> pbds.ListAppGroupsReq - 215, // 326: pbds.Data.GetGroupByName:input_type -> pbds.GetGroupByNameReq - 216, // 327: pbds.Data.UpdateGroup:input_type -> pbds.UpdateGroupReq - 217, // 328: pbds.Data.DeleteGroup:input_type -> pbds.DeleteGroupReq - 218, // 329: pbds.Data.CountGroupsReleasedApps:input_type -> pbds.CountGroupsReleasedAppsReq - 220, // 330: pbds.Data.ListGroupReleasedApps:input_type -> pbds.ListGroupReleasedAppsReq - 222, // 331: pbds.Data.Publish:input_type -> pbds.PublishReq - 223, // 332: pbds.Data.GenerateReleaseAndPublish:input_type -> pbds.GenerateReleaseAndPublishReq - 9, // 333: pbds.Data.CreateCredential:input_type -> pbds.CreateCredentialReq - 10, // 334: pbds.Data.ListCredentials:input_type -> pbds.ListCredentialReq - 15, // 335: pbds.Data.DeleteCredential:input_type -> pbds.DeleteCredentialReq - 12, // 336: pbds.Data.UpdateCredential:input_type -> pbds.UpdateCredentialReq - 13, // 337: pbds.Data.CheckCredentialName:input_type -> pbds.CheckCredentialNameReq - 6, // 338: pbds.Data.ListCredentialScopes:input_type -> pbds.ListCredentialScopesReq - 0, // 339: pbds.Data.UpdateCredentialScopes:input_type -> pbds.UpdateCredentialScopesReq - 2, // 340: pbds.Data.CredentialScopePreview:input_type -> pbds.CredentialScopePreviewReq - 232, // 341: pbds.Data.CreateKv:input_type -> pbds.CreateKvReq - 233, // 342: pbds.Data.UpdateKv:input_type -> pbds.UpdateKvReq - 234, // 343: pbds.Data.ListKvs:input_type -> pbds.ListKvsReq - 236, // 344: pbds.Data.DeleteKv:input_type -> pbds.DeleteKvReq - 237, // 345: pbds.Data.BatchUpsertKvs:input_type -> pbds.BatchUpsertKvsReq - 239, // 346: pbds.Data.UnDeleteKv:input_type -> pbds.UnDeleteKvReq - 240, // 347: pbds.Data.UndoKv:input_type -> pbds.UndoKvReq - 241, // 348: pbds.Data.KvFetchIDsExcluding:input_type -> pbds.KvFetchIDsExcludingReq - 243, // 349: pbds.Data.KvFetchKeysExcluding:input_type -> pbds.KvFetchKeysExcludingReq - 247, // 350: pbds.Data.ListClients:input_type -> pbds.ListClientsReq - 248, // 351: pbds.Data.RetryClients:input_type -> pbds.RetryClientsReq - 250, // 352: pbds.Data.ListClientEvents:input_type -> pbds.ListClientEventsReq - 252, // 353: pbds.Data.ListClientQuerys:input_type -> pbds.ListClientQuerysReq - 254, // 354: pbds.Data.CreateClientQuery:input_type -> pbds.CreateClientQueryReq - 256, // 355: pbds.Data.UpdateClientQuery:input_type -> pbds.UpdateClientQueryReq - 257, // 356: pbds.Data.DeleteClientQuery:input_type -> pbds.DeleteClientQueryReq - 258, // 357: pbds.Data.CheckClientQueryName:input_type -> pbds.CheckClientQueryNameReq - 379, // 358: pbds.Data.ClientConfigVersionStatistics:input_type -> pbclient.ClientCommonReq - 379, // 359: pbds.Data.ClientPullTrendStatistics:input_type -> pbclient.ClientCommonReq - 379, // 360: pbds.Data.ClientPullStatistics:input_type -> pbclient.ClientCommonReq - 379, // 361: pbds.Data.ClientLabelStatistics:input_type -> pbclient.ClientCommonReq - 379, // 362: pbds.Data.ClientAnnotationStatistics:input_type -> pbclient.ClientCommonReq - 379, // 363: pbds.Data.ClientVersionStatistics:input_type -> pbclient.ClientCommonReq - 260, // 364: pbds.Data.ListClientLabelAndAnnotation:input_type -> pbds.ListClientLabelAndAnnotationReq - 379, // 365: pbds.Data.ClientSpecificFailedReason:input_type -> pbclient.ClientCommonReq - 225, // 366: pbds.Data.ListInstances:input_type -> pbds.ListInstancesReq - 228, // 367: pbds.Data.FetchInstanceInfo:input_type -> pbds.FetchInstanceInfoReq - 231, // 368: pbds.Data.Ping:input_type -> pbds.PingMsg - 245, // 369: pbds.Data.BatchUpsertClientMetrics:input_type -> pbds.BatchUpsertClientMetricsReq - 261, // 370: pbds.Data.CompareConfigItemConflicts:input_type -> pbds.CompareConfigItemConflictsReq - 263, // 371: pbds.Data.GetTemplateAndNonTemplateCICount:input_type -> pbds.GetTemplateAndNonTemplateCICountReq - 265, // 372: pbds.Data.BatchUpdateLastConsumedTime:input_type -> pbds.BatchUpdateLastConsumedTimeReq - 17, // 373: pbds.Data.CreateApp:output_type -> pbds.CreateResp - 304, // 374: pbds.Data.UpdateApp:output_type -> pbapp.App - 380, // 375: pbds.Data.DeleteApp:output_type -> pbbase.EmptyResp - 304, // 376: pbds.Data.GetApp:output_type -> pbapp.App - 304, // 377: pbds.Data.GetAppByID:output_type -> pbapp.App - 304, // 378: pbds.Data.GetAppByName:output_type -> pbapp.App - 27, // 379: pbds.Data.ListAppsRest:output_type -> pbds.ListAppsResp - 29, // 380: pbds.Data.ListAppsByIDs:output_type -> pbds.ListAppsByIDsResp - 17, // 381: pbds.Data.CreateConfigItem:output_type -> pbds.CreateResp - 32, // 382: pbds.Data.BatchUpsertConfigItems:output_type -> pbds.BatchUpsertConfigItemsResp - 380, // 383: pbds.Data.UpdateConfigItem:output_type -> pbbase.EmptyResp - 380, // 384: pbds.Data.DeleteConfigItem:output_type -> pbbase.EmptyResp - 380, // 385: pbds.Data.UnDeleteConfigItem:output_type -> pbbase.EmptyResp - 380, // 386: pbds.Data.UndoConfigItem:output_type -> pbbase.EmptyResp - 309, // 387: pbds.Data.GetConfigItem:output_type -> pbci.ConfigItem - 39, // 388: pbds.Data.ListConfigItems:output_type -> pbds.ListConfigItemsResp - 41, // 389: pbds.Data.ListReleasedConfigItems:output_type -> pbds.ListReleasedConfigItemsResp - 43, // 390: pbds.Data.ListConfigItemCount:output_type -> pbds.ListConfigItemCountResp - 45, // 391: pbds.Data.ListConfigItemByTuple:output_type -> pbds.ListConfigItemByTupleResp - 380, // 392: pbds.Data.UpdateConfigHook:output_type -> pbbase.EmptyResp - 17, // 393: pbds.Data.CreateContent:output_type -> pbds.CreateResp - 381, // 394: pbds.Data.GetContent:output_type -> pbcontent.Content - 17, // 395: pbds.Data.CreateCommit:output_type -> pbds.CreateResp - 382, // 396: pbds.Data.GetLatestCommit:output_type -> pbcommit.Commit - 17, // 397: pbds.Data.CreateRelease:output_type -> pbds.CreateResp - 52, // 398: pbds.Data.ListReleases:output_type -> pbds.ListReleasesResp - 316, // 399: pbds.Data.GetReleaseByName:output_type -> pbrelease.Release - 316, // 400: pbds.Data.GetRelease:output_type -> pbrelease.Release - 380, // 401: pbds.Data.DeprecateRelease:output_type -> pbbase.EmptyResp - 380, // 402: pbds.Data.UnDeprecateRelease:output_type -> pbbase.EmptyResp - 380, // 403: pbds.Data.DeleteRelease:output_type -> pbbase.EmptyResp - 59, // 404: pbds.Data.CheckReleaseName:output_type -> pbds.CheckReleaseNameResp - 310, // 405: pbds.Data.GetReleasedConfigItem:output_type -> pbrci.ReleasedConfigItem - 317, // 406: pbds.Data.GetReleasedKv:output_type -> pbrkv.ReleasedKv - 63, // 407: pbds.Data.ListReleasedKvs:output_type -> pbds.ListReleasedKvResp - 17, // 408: pbds.Data.CreateHook:output_type -> pbds.CreateResp - 74, // 409: pbds.Data.ListHooks:output_type -> pbds.ListHooksResp - 380, // 410: pbds.Data.DeleteHook:output_type -> pbbase.EmptyResp - 380, // 411: pbds.Data.UpdateHook:output_type -> pbbase.EmptyResp - 75, // 412: pbds.Data.ListHookTags:output_type -> pbds.ListHookTagResp - 77, // 413: pbds.Data.ListHookReferences:output_type -> pbds.ListHookReferencesResp - 67, // 414: pbds.Data.GetHook:output_type -> pbds.GetHookResp - 69, // 415: pbds.Data.HookFetchIDsExcluding:output_type -> pbds.HookFetchIDsExcludingResp - 71, // 416: pbds.Data.GetHookReferencedIDs:output_type -> pbds.GetHookReferencedIDsResp - 17, // 417: pbds.Data.CreateHookRevision:output_type -> pbds.CreateResp - 82, // 418: pbds.Data.ListHookRevisions:output_type -> pbds.ListHookRevisionsResp - 377, // 419: pbds.Data.GetHookRevisionByID:output_type -> pbhr.HookRevision - 380, // 420: pbds.Data.DeleteHookRevision:output_type -> pbbase.EmptyResp - 380, // 421: pbds.Data.PublishHookRevision:output_type -> pbbase.EmptyResp - 377, // 422: pbds.Data.GetHookRevisionByPubState:output_type -> pbhr.HookRevision - 380, // 423: pbds.Data.UpdateHookRevision:output_type -> pbbase.EmptyResp - 89, // 424: pbds.Data.ListHookRevisionReferences:output_type -> pbds.ListHookRevisionReferencesResp - 91, // 425: pbds.Data.GetReleaseHook:output_type -> pbds.GetReleaseHookResp - 17, // 426: pbds.Data.CreateTemplateSpace:output_type -> pbds.CreateResp - 94, // 427: pbds.Data.ListTemplateSpaces:output_type -> pbds.ListTemplateSpacesResp - 380, // 428: pbds.Data.UpdateTemplateSpace:output_type -> pbbase.EmptyResp - 380, // 429: pbds.Data.DeleteTemplateSpace:output_type -> pbbase.EmptyResp - 97, // 430: pbds.Data.GetAllBizsOfTmplSpaces:output_type -> pbds.GetAllBizsOfTmplSpacesResp - 17, // 431: pbds.Data.CreateDefaultTmplSpace:output_type -> pbds.CreateResp - 100, // 432: pbds.Data.ListTmplSpacesByIDs:output_type -> pbds.ListTmplSpacesByIDsResp - 17, // 433: pbds.Data.CreateTemplate:output_type -> pbds.CreateResp - 103, // 434: pbds.Data.ListTemplates:output_type -> pbds.ListTemplatesResp - 380, // 435: pbds.Data.UpdateTemplate:output_type -> pbbase.EmptyResp - 380, // 436: pbds.Data.DeleteTemplate:output_type -> pbbase.EmptyResp - 380, // 437: pbds.Data.BatchDeleteTemplate:output_type -> pbbase.EmptyResp - 380, // 438: pbds.Data.AddTmplsToTmplSets:output_type -> pbbase.EmptyResp - 380, // 439: pbds.Data.DeleteTmplsFromTmplSets:output_type -> pbbase.EmptyResp - 110, // 440: pbds.Data.ListTemplatesByIDs:output_type -> pbds.ListTemplatesByIDsResp - 112, // 441: pbds.Data.ListTemplatesNotBound:output_type -> pbds.ListTemplatesNotBoundResp - 114, // 442: pbds.Data.ListTmplsOfTmplSet:output_type -> pbds.ListTmplsOfTmplSetResp - 116, // 443: pbds.Data.ListTemplateSetsAndRevisions:output_type -> pbds.ListTemplateSetsAndRevisionsResp - 118, // 444: pbds.Data.ListTemplateByTuple:output_type -> pbds.ListTemplateByTupleReqResp - 120, // 445: pbds.Data.BatchUpsertTemplates:output_type -> pbds.BatchUpsertTemplatesReqResp - 122, // 446: pbds.Data.BatchUpdateTemplatePermissions:output_type -> pbds.BatchUpdateTemplatePermissionsResp - 17, // 447: pbds.Data.CreateTemplateRevision:output_type -> pbds.CreateResp - 17, // 448: pbds.Data.UpdateTemplateRevision:output_type -> pbds.CreateResp - 126, // 449: pbds.Data.ListTemplateRevisions:output_type -> pbds.ListTemplateRevisionsResp - 128, // 450: pbds.Data.GetTemplateRevision:output_type -> pbds.GetTemplateRevisionResp - 380, // 451: pbds.Data.DeleteTemplateRevision:output_type -> pbbase.EmptyResp - 131, // 452: pbds.Data.ListTemplateRevisionsByIDs:output_type -> pbds.ListTemplateRevisionsByIDsResp - 133, // 453: pbds.Data.ListTmplRevisionNamesByTmplIDs:output_type -> pbds.ListTmplRevisionNamesByTmplIDsResp - 17, // 454: pbds.Data.CreateTemplateSet:output_type -> pbds.CreateResp - 136, // 455: pbds.Data.ListTemplateSets:output_type -> pbds.ListTemplateSetsResp - 380, // 456: pbds.Data.UpdateTemplateSet:output_type -> pbbase.EmptyResp - 380, // 457: pbds.Data.DeleteTemplateSet:output_type -> pbbase.EmptyResp - 140, // 458: pbds.Data.ListAppTemplateSets:output_type -> pbds.ListAppTemplateSetsResp - 142, // 459: pbds.Data.ListTemplateSetsByIDs:output_type -> pbds.ListTemplateSetsByIDsResp - 144, // 460: pbds.Data.ListTemplateSetBriefInfoByIDs:output_type -> pbds.ListTemplateSetBriefInfoByIDsResp - 146, // 461: pbds.Data.ListTmplSetsOfBiz:output_type -> pbds.ListTmplSetsOfBizResp - 17, // 462: pbds.Data.CreateAppTemplateBinding:output_type -> pbds.CreateResp - 149, // 463: pbds.Data.ListAppTemplateBindings:output_type -> pbds.ListAppTemplateBindingsResp - 380, // 464: pbds.Data.UpdateAppTemplateBinding:output_type -> pbbase.EmptyResp - 380, // 465: pbds.Data.DeleteAppTemplateBinding:output_type -> pbbase.EmptyResp - 153, // 466: pbds.Data.ListAppBoundTmplRevisions:output_type -> pbds.ListAppBoundTmplRevisionsResp - 155, // 467: pbds.Data.ListReleasedAppBoundTmplRevisions:output_type -> pbds.ListReleasedAppBoundTmplRevisionsResp - 157, // 468: pbds.Data.GetReleasedAppBoundTmplRevision:output_type -> pbds.GetReleasedAppBoundTmplRevisionResp - 159, // 469: pbds.Data.CheckAppTemplateBinding:output_type -> pbds.CheckAppTemplateBindingResp - 380, // 470: pbds.Data.ImportFromTemplateSetToApp:output_type -> pbbase.EmptyResp - 162, // 471: pbds.Data.ExtractAppTmplVariables:output_type -> pbds.ExtractAppTmplVariablesResp - 164, // 472: pbds.Data.GetAppTmplVariableRefs:output_type -> pbds.GetAppTmplVariableRefsResp - 166, // 473: pbds.Data.GetReleasedAppTmplVariableRefs:output_type -> pbds.GetReleasedAppTmplVariableRefsResp - 380, // 474: pbds.Data.UpdateAppTmplVariables:output_type -> pbbase.EmptyResp - 169, // 475: pbds.Data.ListAppTmplVariables:output_type -> pbds.ListAppTmplVariablesResp - 171, // 476: pbds.Data.ListReleasedAppTmplVariables:output_type -> pbds.ListReleasedAppTmplVariablesResp - 173, // 477: pbds.Data.ListTmplBoundCounts:output_type -> pbds.ListTmplBoundCountsResp - 175, // 478: pbds.Data.ListTmplRevisionBoundCounts:output_type -> pbds.ListTmplRevisionBoundCountsResp - 177, // 479: pbds.Data.ListTmplSetBoundCounts:output_type -> pbds.ListTmplSetBoundCountsResp - 179, // 480: pbds.Data.ListTmplBoundUnnamedApps:output_type -> pbds.ListTmplBoundUnnamedAppsResp - 181, // 481: pbds.Data.ListTmplBoundNamedApps:output_type -> pbds.ListTmplBoundNamedAppsResp - 183, // 482: pbds.Data.ListTmplBoundTmplSets:output_type -> pbds.ListTmplBoundTmplSetsResp - 185, // 483: pbds.Data.ListMultiTmplBoundTmplSets:output_type -> pbds.ListMultiTmplBoundTmplSetsResp - 187, // 484: pbds.Data.ListTmplRevisionBoundUnnamedApps:output_type -> pbds.ListTmplRevisionBoundUnnamedAppsResp - 189, // 485: pbds.Data.ListTmplRevisionBoundNamedApps:output_type -> pbds.ListTmplRevisionBoundNamedAppsResp - 191, // 486: pbds.Data.ListTmplSetBoundUnnamedApps:output_type -> pbds.ListTmplSetBoundUnnamedAppsResp - 193, // 487: pbds.Data.ListMultiTmplSetBoundUnnamedApps:output_type -> pbds.ListMultiTmplSetBoundUnnamedAppsResp - 195, // 488: pbds.Data.ListTmplSetBoundNamedApps:output_type -> pbds.ListTmplSetBoundNamedAppsResp - 197, // 489: pbds.Data.ListLatestTmplBoundUnnamedApps:output_type -> pbds.ListLatestTmplBoundUnnamedAppsResp - 380, // 490: pbds.Data.RemoveAppBoundTmplSet:output_type -> pbbase.EmptyResp - 200, // 491: pbds.Data.CheckTemplateSetReferencesApps:output_type -> pbds.CheckTemplateSetReferencesAppsResp - 17, // 492: pbds.Data.CreateTemplateVariable:output_type -> pbds.CreateResp - 205, // 493: pbds.Data.ListTemplateVariables:output_type -> pbds.ListTemplateVariablesResp - 380, // 494: pbds.Data.UpdateTemplateVariable:output_type -> pbbase.EmptyResp - 380, // 495: pbds.Data.DeleteTemplateVariable:output_type -> pbbase.EmptyResp - 209, // 496: pbds.Data.TemplateVariableFetchIDsExcluding:output_type -> pbds.TemplateVariableFetchIDsExcludingResp - 203, // 497: pbds.Data.ImportTemplateVariables:output_type -> pbds.ImportTemplateVariablesResp - 17, // 498: pbds.Data.CreateGroup:output_type -> pbds.CreateResp - 212, // 499: pbds.Data.ListAllGroups:output_type -> pbds.ListAllGroupsResp - 214, // 500: pbds.Data.ListAppGroups:output_type -> pbds.ListAppGroupsResp - 365, // 501: pbds.Data.GetGroupByName:output_type -> pbgroup.Group - 380, // 502: pbds.Data.UpdateGroup:output_type -> pbbase.EmptyResp - 380, // 503: pbds.Data.DeleteGroup:output_type -> pbbase.EmptyResp - 219, // 504: pbds.Data.CountGroupsReleasedApps:output_type -> pbds.CountGroupsReleasedAppsResp - 221, // 505: pbds.Data.ListGroupReleasedApps:output_type -> pbds.ListGroupReleasedAppsResp - 224, // 506: pbds.Data.Publish:output_type -> pbds.PublishResp - 224, // 507: pbds.Data.GenerateReleaseAndPublish:output_type -> pbds.PublishResp - 17, // 508: pbds.Data.CreateCredential:output_type -> pbds.CreateResp - 11, // 509: pbds.Data.ListCredentials:output_type -> pbds.ListCredentialResp - 380, // 510: pbds.Data.DeleteCredential:output_type -> pbbase.EmptyResp - 380, // 511: pbds.Data.UpdateCredential:output_type -> pbbase.EmptyResp - 14, // 512: pbds.Data.CheckCredentialName:output_type -> pbds.CheckCredentialNameResp - 7, // 513: pbds.Data.ListCredentialScopes:output_type -> pbds.ListCredentialScopesResp - 1, // 514: pbds.Data.UpdateCredentialScopes:output_type -> pbds.UpdateCredentialScopesResp - 3, // 515: pbds.Data.CredentialScopePreview:output_type -> pbds.CredentialScopePreviewResp - 17, // 516: pbds.Data.CreateKv:output_type -> pbds.CreateResp - 380, // 517: pbds.Data.UpdateKv:output_type -> pbbase.EmptyResp - 235, // 518: pbds.Data.ListKvs:output_type -> pbds.ListKvsResp - 380, // 519: pbds.Data.DeleteKv:output_type -> pbbase.EmptyResp - 238, // 520: pbds.Data.BatchUpsertKvs:output_type -> pbds.BatchUpsertKvsResp - 380, // 521: pbds.Data.UnDeleteKv:output_type -> pbbase.EmptyResp - 380, // 522: pbds.Data.UndoKv:output_type -> pbbase.EmptyResp - 242, // 523: pbds.Data.KvFetchIDsExcluding:output_type -> pbds.KvFetchIDsExcludingResp - 244, // 524: pbds.Data.KvFetchKeysExcluding:output_type -> pbds.KvFetchKeysExcludingResp - 249, // 525: pbds.Data.ListClients:output_type -> pbds.ListClientsResp - 380, // 526: pbds.Data.RetryClients:output_type -> pbbase.EmptyResp - 251, // 527: pbds.Data.ListClientEvents:output_type -> pbds.ListClientEventsResp - 253, // 528: pbds.Data.ListClientQuerys:output_type -> pbds.ListClientQuerysResp - 255, // 529: pbds.Data.CreateClientQuery:output_type -> pbds.CreateClientQueryResp - 380, // 530: pbds.Data.UpdateClientQuery:output_type -> pbbase.EmptyResp - 380, // 531: pbds.Data.DeleteClientQuery:output_type -> pbbase.EmptyResp - 259, // 532: pbds.Data.CheckClientQueryName:output_type -> pbds.CheckClientQueryNameResp - 366, // 533: pbds.Data.ClientConfigVersionStatistics:output_type -> google.protobuf.Struct - 366, // 534: pbds.Data.ClientPullTrendStatistics:output_type -> google.protobuf.Struct - 366, // 535: pbds.Data.ClientPullStatistics:output_type -> google.protobuf.Struct - 366, // 536: pbds.Data.ClientLabelStatistics:output_type -> google.protobuf.Struct - 366, // 537: pbds.Data.ClientAnnotationStatistics:output_type -> google.protobuf.Struct - 366, // 538: pbds.Data.ClientVersionStatistics:output_type -> google.protobuf.Struct - 366, // 539: pbds.Data.ListClientLabelAndAnnotation:output_type -> google.protobuf.Struct - 366, // 540: pbds.Data.ClientSpecificFailedReason:output_type -> google.protobuf.Struct - 226, // 541: pbds.Data.ListInstances:output_type -> pbds.ListInstancesResp - 229, // 542: pbds.Data.FetchInstanceInfo:output_type -> pbds.FetchInstanceInfoResp - 231, // 543: pbds.Data.Ping:output_type -> pbds.PingMsg - 246, // 544: pbds.Data.BatchUpsertClientMetrics:output_type -> pbds.BatchUpsertClientMetricsResp - 262, // 545: pbds.Data.CompareConfigItemConflicts:output_type -> pbds.CompareConfigItemConflictsResp - 264, // 546: pbds.Data.GetTemplateAndNonTemplateCICount:output_type -> pbds.GetTemplateAndNonTemplateCICountResp - 266, // 547: pbds.Data.BatchUpdateLastConsumedTime:output_type -> pbds.BatchUpdateLastConsumedTimeResp - 373, // [373:548] is the sub-list for method output_type - 198, // [198:373] is the sub-list for method input_type - 198, // [198:198] is the sub-list for extension type_name - 198, // [198:198] is the sub-list for extension extendee - 0, // [0:198] is the sub-list for field type_name + 374, // 156: pbds.CreateKvReq.attachment:type_name -> pbkv.KvAttachment + 375, // 157: pbds.CreateKvReq.spec:type_name -> pbkv.KvSpec + 374, // 158: pbds.UpdateKvReq.attachment:type_name -> pbkv.KvAttachment + 375, // 159: pbds.UpdateKvReq.spec:type_name -> pbkv.KvSpec + 376, // 160: pbds.ListKvsResp.details:type_name -> pbkv.Kv + 375, // 161: pbds.DeleteKvReq.spec:type_name -> pbkv.KvSpec + 374, // 162: pbds.DeleteKvReq.attachment:type_name -> pbkv.KvAttachment + 294, // 163: pbds.BatchUpsertKvsReq.kvs:type_name -> pbds.BatchUpsertKvsReq.Kv + 377, // 164: pbds.BatchUpsertClientMetricsReq.client_items:type_name -> pbclient.Client + 378, // 165: pbds.BatchUpsertClientMetricsReq.client_event_items:type_name -> pbce.ClientEvent + 295, // 166: pbds.ListClientsReq.order:type_name -> pbds.ListClientsReq.Order + 379, // 167: pbds.ListClientsReq.search:type_name -> pbclient.ClientQueryCondition + 296, // 168: pbds.ListClientsResp.details:type_name -> pbds.ListClientsResp.Item + 297, // 169: pbds.ListClientEventsReq.order:type_name -> pbds.ListClientEventsReq.Order + 378, // 170: pbds.ListClientEventsResp.details:type_name -> pbce.ClientEvent + 380, // 171: pbds.ListClientQuerysResp.details:type_name -> pbcq.ClientQuery + 372, // 172: pbds.CreateClientQueryReq.search_condition:type_name -> google.protobuf.Struct + 372, // 173: pbds.UpdateClientQueryReq.search_condition:type_name -> google.protobuf.Struct + 298, // 174: pbds.CompareConfigItemConflictsResp.non_template_configs:type_name -> pbds.CompareConfigItemConflictsResp.NonTemplateConfig + 299, // 175: pbds.CompareConfigItemConflictsResp.template_configs:type_name -> pbds.CompareConfigItemConflictsResp.TemplateConfig + 301, // 176: pbds.ListUserPrivilegesResp.details:type_name -> pbds.ListUserPrivilegesResp.Detail + 311, // 177: pbds.BatchUpsertConfigItemsReq.ConfigItem.config_item_attachment:type_name -> pbci.ConfigItemAttachment + 312, // 178: pbds.BatchUpsertConfigItemsReq.ConfigItem.config_item_spec:type_name -> pbci.ConfigItemSpec + 313, // 179: pbds.BatchUpsertConfigItemsReq.ConfigItem.content_spec:type_name -> pbcontent.ContentSpec + 381, // 180: pbds.BatchUpsertConfigItemsReq.TemplateBinding.template_binding:type_name -> pbatb.TemplateBinding + 382, // 181: pbds.ListHooksResp.Detail.hook:type_name -> pbhook.Hook + 383, // 182: pbds.ListHookRevisionsResp.ListHookRevisionsData.hook_revision:type_name -> pbhr.HookRevision + 336, // 183: pbds.ListTemplateSetsAndRevisionsResp.Detail.template:type_name -> pbtemplate.Template + 338, // 184: pbds.ListTemplateSetsAndRevisionsResp.Detail.template_revision:type_name -> pbtr.TemplateRevision + 336, // 185: pbds.ListTemplateByTupleReqResp.Item.template:type_name -> pbtemplate.Template + 338, // 186: pbds.ListTemplateByTupleReqResp.Item.template_revision:type_name -> pbtr.TemplateRevision + 336, // 187: pbds.BatchUpsertTemplatesReq.Item.template:type_name -> pbtemplate.Template + 338, // 188: pbds.BatchUpsertTemplatesReq.Item.template_revision:type_name -> pbtr.TemplateRevision + 288, // 189: pbds.ImportFromTemplateSetToAppReq.Binding.template_revisions:type_name -> pbds.ImportFromTemplateSetToAppReq.Binding.TemplateRevisionBinding + 372, // 190: pbds.ListAppGroupsResp.ListAppGroupsData.old_selector:type_name -> google.protobuf.Struct + 372, // 191: pbds.ListAppGroupsResp.ListAppGroupsData.new_selector:type_name -> google.protobuf.Struct + 374, // 192: pbds.BatchUpsertKvsReq.Kv.kv_attachment:type_name -> pbkv.KvAttachment + 375, // 193: pbds.BatchUpsertKvsReq.Kv.kv_spec:type_name -> pbkv.KvSpec + 377, // 194: pbds.ListClientsResp.Item.client:type_name -> pbclient.Client + 312, // 195: pbds.CompareConfigItemConflictsResp.NonTemplateConfig.config_item_spec:type_name -> pbci.ConfigItemSpec + 314, // 196: pbds.CompareConfigItemConflictsResp.NonTemplateConfig.variables:type_name -> pbtv.TemplateVariableSpec + 300, // 197: pbds.CompareConfigItemConflictsResp.TemplateConfig.template_revisions:type_name -> pbds.CompareConfigItemConflictsResp.TemplateConfig.TemplateRevisionDetail + 314, // 198: pbds.CompareConfigItemConflictsResp.TemplateConfig.TemplateRevisionDetail.variables:type_name -> pbtv.TemplateVariableSpec + 384, // 199: pbds.CompareConfigItemConflictsResp.TemplateConfig.TemplateRevisionDetail.permission:type_name -> pbci.FilePermission + 20, // 200: pbds.Data.CreateApp:input_type -> pbds.CreateAppReq + 21, // 201: pbds.Data.UpdateApp:input_type -> pbds.UpdateAppReq + 22, // 202: pbds.Data.DeleteApp:input_type -> pbds.DeleteAppReq + 23, // 203: pbds.Data.GetApp:input_type -> pbds.GetAppReq + 24, // 204: pbds.Data.GetAppByID:input_type -> pbds.GetAppByIDReq + 25, // 205: pbds.Data.GetAppByName:input_type -> pbds.GetAppByNameReq + 26, // 206: pbds.Data.ListAppsRest:input_type -> pbds.ListAppsRestReq + 28, // 207: pbds.Data.ListAppsByIDs:input_type -> pbds.ListAppsByIDsReq + 30, // 208: pbds.Data.CreateConfigItem:input_type -> pbds.CreateConfigItemReq + 31, // 209: pbds.Data.BatchUpsertConfigItems:input_type -> pbds.BatchUpsertConfigItemsReq + 33, // 210: pbds.Data.UpdateConfigItem:input_type -> pbds.UpdateConfigItemReq + 34, // 211: pbds.Data.DeleteConfigItem:input_type -> pbds.DeleteConfigItemReq + 35, // 212: pbds.Data.UnDeleteConfigItem:input_type -> pbds.UnDeleteConfigItemReq + 36, // 213: pbds.Data.UndoConfigItem:input_type -> pbds.UndoConfigItemReq + 37, // 214: pbds.Data.GetConfigItem:input_type -> pbds.GetConfigItemReq + 38, // 215: pbds.Data.ListConfigItems:input_type -> pbds.ListConfigItemsReq + 40, // 216: pbds.Data.ListReleasedConfigItems:input_type -> pbds.ListReleasedConfigItemsReq + 42, // 217: pbds.Data.ListConfigItemCount:input_type -> pbds.ListConfigItemCountReq + 44, // 218: pbds.Data.ListConfigItemByTuple:input_type -> pbds.ListConfigItemByTupleReq + 18, // 219: pbds.Data.UpdateConfigHook:input_type -> pbds.UpdateConfigHookReq + 46, // 220: pbds.Data.CreateContent:input_type -> pbds.CreateContentReq + 47, // 221: pbds.Data.GetContent:input_type -> pbds.GetContentReq + 48, // 222: pbds.Data.CreateCommit:input_type -> pbds.CreateCommitReq + 49, // 223: pbds.Data.GetLatestCommit:input_type -> pbds.GetLatestCommitReq + 50, // 224: pbds.Data.CreateRelease:input_type -> pbds.CreateReleaseReq + 51, // 225: pbds.Data.ListReleases:input_type -> pbds.ListReleasesReq + 53, // 226: pbds.Data.GetReleaseByName:input_type -> pbds.GetReleaseByNameReq + 54, // 227: pbds.Data.GetRelease:input_type -> pbds.GetReleaseReq + 55, // 228: pbds.Data.DeprecateRelease:input_type -> pbds.DeprecateReleaseReq + 56, // 229: pbds.Data.UnDeprecateRelease:input_type -> pbds.UnDeprecateReleaseReq + 57, // 230: pbds.Data.DeleteRelease:input_type -> pbds.DeleteReleaseReq + 58, // 231: pbds.Data.CheckReleaseName:input_type -> pbds.CheckReleaseNameReq + 60, // 232: pbds.Data.GetReleasedConfigItem:input_type -> pbds.GetReleasedCIReq + 61, // 233: pbds.Data.GetReleasedKv:input_type -> pbds.GetReleasedKvReq + 62, // 234: pbds.Data.ListReleasedKvs:input_type -> pbds.ListReleasedKvReq + 64, // 235: pbds.Data.CreateHook:input_type -> pbds.CreateHookReq + 73, // 236: pbds.Data.ListHooks:input_type -> pbds.ListHooksReq + 78, // 237: pbds.Data.DeleteHook:input_type -> pbds.DeleteHookReq + 79, // 238: pbds.Data.UpdateHook:input_type -> pbds.UpdateHookReq + 65, // 239: pbds.Data.ListHookTags:input_type -> pbds.ListHookTagReq + 76, // 240: pbds.Data.ListHookReferences:input_type -> pbds.ListHookReferencesReq + 66, // 241: pbds.Data.GetHook:input_type -> pbds.GetHookReq + 68, // 242: pbds.Data.HookFetchIDsExcluding:input_type -> pbds.HookFetchIDsExcludingReq + 70, // 243: pbds.Data.GetHookReferencedIDs:input_type -> pbds.GetHookReferencedIDsReq + 80, // 244: pbds.Data.CreateHookRevision:input_type -> pbds.CreateHookRevisionReq + 81, // 245: pbds.Data.ListHookRevisions:input_type -> pbds.ListHookRevisionsReq + 83, // 246: pbds.Data.GetHookRevisionByID:input_type -> pbds.GetHookRevisionByIdReq + 84, // 247: pbds.Data.DeleteHookRevision:input_type -> pbds.DeleteHookRevisionReq + 85, // 248: pbds.Data.PublishHookRevision:input_type -> pbds.PublishHookRevisionReq + 86, // 249: pbds.Data.GetHookRevisionByPubState:input_type -> pbds.GetByPubStateReq + 87, // 250: pbds.Data.UpdateHookRevision:input_type -> pbds.UpdateHookRevisionReq + 88, // 251: pbds.Data.ListHookRevisionReferences:input_type -> pbds.ListHookRevisionReferencesReq + 90, // 252: pbds.Data.GetReleaseHook:input_type -> pbds.GetReleaseHookReq + 92, // 253: pbds.Data.CreateTemplateSpace:input_type -> pbds.CreateTemplateSpaceReq + 93, // 254: pbds.Data.ListTemplateSpaces:input_type -> pbds.ListTemplateSpacesReq + 95, // 255: pbds.Data.UpdateTemplateSpace:input_type -> pbds.UpdateTemplateSpaceReq + 96, // 256: pbds.Data.DeleteTemplateSpace:input_type -> pbds.DeleteTemplateSpaceReq + 385, // 257: pbds.Data.GetAllBizsOfTmplSpaces:input_type -> pbbase.EmptyReq + 98, // 258: pbds.Data.CreateDefaultTmplSpace:input_type -> pbds.CreateDefaultTmplSpaceReq + 99, // 259: pbds.Data.ListTmplSpacesByIDs:input_type -> pbds.ListTmplSpacesByIDsReq + 101, // 260: pbds.Data.CreateTemplate:input_type -> pbds.CreateTemplateReq + 102, // 261: pbds.Data.ListTemplates:input_type -> pbds.ListTemplatesReq + 104, // 262: pbds.Data.UpdateTemplate:input_type -> pbds.UpdateTemplateReq + 105, // 263: pbds.Data.DeleteTemplate:input_type -> pbds.DeleteTemplateReq + 106, // 264: pbds.Data.BatchDeleteTemplate:input_type -> pbds.BatchDeleteTemplateReq + 107, // 265: pbds.Data.AddTmplsToTmplSets:input_type -> pbds.AddTmplsToTmplSetsReq + 108, // 266: pbds.Data.DeleteTmplsFromTmplSets:input_type -> pbds.DeleteTmplsFromTmplSetsReq + 109, // 267: pbds.Data.ListTemplatesByIDs:input_type -> pbds.ListTemplatesByIDsReq + 111, // 268: pbds.Data.ListTemplatesNotBound:input_type -> pbds.ListTemplatesNotBoundReq + 113, // 269: pbds.Data.ListTmplsOfTmplSet:input_type -> pbds.ListTmplsOfTmplSetReq + 115, // 270: pbds.Data.ListTemplateSetsAndRevisions:input_type -> pbds.ListTemplateSetsAndRevisionsReq + 117, // 271: pbds.Data.ListTemplateByTuple:input_type -> pbds.ListTemplateByTupleReq + 119, // 272: pbds.Data.BatchUpsertTemplates:input_type -> pbds.BatchUpsertTemplatesReq + 121, // 273: pbds.Data.BatchUpdateTemplatePermissions:input_type -> pbds.BatchUpdateTemplatePermissionsReq + 123, // 274: pbds.Data.CreateTemplateRevision:input_type -> pbds.CreateTemplateRevisionReq + 124, // 275: pbds.Data.UpdateTemplateRevision:input_type -> pbds.UpdateTemplateRevisionReq + 125, // 276: pbds.Data.ListTemplateRevisions:input_type -> pbds.ListTemplateRevisionsReq + 127, // 277: pbds.Data.GetTemplateRevision:input_type -> pbds.GetTemplateRevisionReq + 129, // 278: pbds.Data.DeleteTemplateRevision:input_type -> pbds.DeleteTemplateRevisionReq + 130, // 279: pbds.Data.ListTemplateRevisionsByIDs:input_type -> pbds.ListTemplateRevisionsByIDsReq + 132, // 280: pbds.Data.ListTmplRevisionNamesByTmplIDs:input_type -> pbds.ListTmplRevisionNamesByTmplIDsReq + 134, // 281: pbds.Data.CreateTemplateSet:input_type -> pbds.CreateTemplateSetReq + 135, // 282: pbds.Data.ListTemplateSets:input_type -> pbds.ListTemplateSetsReq + 137, // 283: pbds.Data.UpdateTemplateSet:input_type -> pbds.UpdateTemplateSetReq + 138, // 284: pbds.Data.DeleteTemplateSet:input_type -> pbds.DeleteTemplateSetReq + 139, // 285: pbds.Data.ListAppTemplateSets:input_type -> pbds.ListAppTemplateSetsReq + 141, // 286: pbds.Data.ListTemplateSetsByIDs:input_type -> pbds.ListTemplateSetsByIDsReq + 143, // 287: pbds.Data.ListTemplateSetBriefInfoByIDs:input_type -> pbds.ListTemplateSetBriefInfoByIDsReq + 145, // 288: pbds.Data.ListTmplSetsOfBiz:input_type -> pbds.ListTmplSetsOfBizReq + 147, // 289: pbds.Data.CreateAppTemplateBinding:input_type -> pbds.CreateAppTemplateBindingReq + 148, // 290: pbds.Data.ListAppTemplateBindings:input_type -> pbds.ListAppTemplateBindingsReq + 150, // 291: pbds.Data.UpdateAppTemplateBinding:input_type -> pbds.UpdateAppTemplateBindingReq + 151, // 292: pbds.Data.DeleteAppTemplateBinding:input_type -> pbds.DeleteAppTemplateBindingReq + 152, // 293: pbds.Data.ListAppBoundTmplRevisions:input_type -> pbds.ListAppBoundTmplRevisionsReq + 154, // 294: pbds.Data.ListReleasedAppBoundTmplRevisions:input_type -> pbds.ListReleasedAppBoundTmplRevisionsReq + 156, // 295: pbds.Data.GetReleasedAppBoundTmplRevision:input_type -> pbds.GetReleasedAppBoundTmplRevisionReq + 158, // 296: pbds.Data.CheckAppTemplateBinding:input_type -> pbds.CheckAppTemplateBindingReq + 160, // 297: pbds.Data.ImportFromTemplateSetToApp:input_type -> pbds.ImportFromTemplateSetToAppReq + 161, // 298: pbds.Data.ExtractAppTmplVariables:input_type -> pbds.ExtractAppTmplVariablesReq + 163, // 299: pbds.Data.GetAppTmplVariableRefs:input_type -> pbds.GetAppTmplVariableRefsReq + 165, // 300: pbds.Data.GetReleasedAppTmplVariableRefs:input_type -> pbds.GetReleasedAppTmplVariableRefsReq + 167, // 301: pbds.Data.UpdateAppTmplVariables:input_type -> pbds.UpdateAppTmplVariablesReq + 168, // 302: pbds.Data.ListAppTmplVariables:input_type -> pbds.ListAppTmplVariablesReq + 170, // 303: pbds.Data.ListReleasedAppTmplVariables:input_type -> pbds.ListReleasedAppTmplVariablesReq + 172, // 304: pbds.Data.ListTmplBoundCounts:input_type -> pbds.ListTmplBoundCountsReq + 174, // 305: pbds.Data.ListTmplRevisionBoundCounts:input_type -> pbds.ListTmplRevisionBoundCountsReq + 176, // 306: pbds.Data.ListTmplSetBoundCounts:input_type -> pbds.ListTmplSetBoundCountsReq + 178, // 307: pbds.Data.ListTmplBoundUnnamedApps:input_type -> pbds.ListTmplBoundUnnamedAppsReq + 180, // 308: pbds.Data.ListTmplBoundNamedApps:input_type -> pbds.ListTmplBoundNamedAppsReq + 182, // 309: pbds.Data.ListTmplBoundTmplSets:input_type -> pbds.ListTmplBoundTmplSetsReq + 184, // 310: pbds.Data.ListMultiTmplBoundTmplSets:input_type -> pbds.ListMultiTmplBoundTmplSetsReq + 186, // 311: pbds.Data.ListTmplRevisionBoundUnnamedApps:input_type -> pbds.ListTmplRevisionBoundUnnamedAppsReq + 188, // 312: pbds.Data.ListTmplRevisionBoundNamedApps:input_type -> pbds.ListTmplRevisionBoundNamedAppsReq + 190, // 313: pbds.Data.ListTmplSetBoundUnnamedApps:input_type -> pbds.ListTmplSetBoundUnnamedAppsReq + 192, // 314: pbds.Data.ListMultiTmplSetBoundUnnamedApps:input_type -> pbds.ListMultiTmplSetBoundUnnamedAppsReq + 194, // 315: pbds.Data.ListTmplSetBoundNamedApps:input_type -> pbds.ListTmplSetBoundNamedAppsReq + 196, // 316: pbds.Data.ListLatestTmplBoundUnnamedApps:input_type -> pbds.ListLatestTmplBoundUnnamedAppsReq + 198, // 317: pbds.Data.RemoveAppBoundTmplSet:input_type -> pbds.RemoveAppBoundTmplSetReq + 199, // 318: pbds.Data.CheckTemplateSetReferencesApps:input_type -> pbds.CheckTemplateSetReferencesAppsReq + 201, // 319: pbds.Data.CreateTemplateVariable:input_type -> pbds.CreateTemplateVariableReq + 204, // 320: pbds.Data.ListTemplateVariables:input_type -> pbds.ListTemplateVariablesReq + 206, // 321: pbds.Data.UpdateTemplateVariable:input_type -> pbds.UpdateTemplateVariableReq + 207, // 322: pbds.Data.DeleteTemplateVariable:input_type -> pbds.DeleteTemplateVariableReq + 208, // 323: pbds.Data.TemplateVariableFetchIDsExcluding:input_type -> pbds.TemplateVariableFetchIDsExcludingReq + 202, // 324: pbds.Data.ImportTemplateVariables:input_type -> pbds.ImportTemplateVariablesReq + 210, // 325: pbds.Data.CreateGroup:input_type -> pbds.CreateGroupReq + 211, // 326: pbds.Data.ListAllGroups:input_type -> pbds.ListAllGroupsReq + 213, // 327: pbds.Data.ListAppGroups:input_type -> pbds.ListAppGroupsReq + 215, // 328: pbds.Data.GetGroupByName:input_type -> pbds.GetGroupByNameReq + 216, // 329: pbds.Data.UpdateGroup:input_type -> pbds.UpdateGroupReq + 217, // 330: pbds.Data.DeleteGroup:input_type -> pbds.DeleteGroupReq + 218, // 331: pbds.Data.CountGroupsReleasedApps:input_type -> pbds.CountGroupsReleasedAppsReq + 220, // 332: pbds.Data.ListGroupReleasedApps:input_type -> pbds.ListGroupReleasedAppsReq + 222, // 333: pbds.Data.Publish:input_type -> pbds.PublishReq + 223, // 334: pbds.Data.GenerateReleaseAndPublish:input_type -> pbds.GenerateReleaseAndPublishReq + 9, // 335: pbds.Data.CreateCredential:input_type -> pbds.CreateCredentialReq + 10, // 336: pbds.Data.ListCredentials:input_type -> pbds.ListCredentialReq + 15, // 337: pbds.Data.DeleteCredential:input_type -> pbds.DeleteCredentialReq + 12, // 338: pbds.Data.UpdateCredential:input_type -> pbds.UpdateCredentialReq + 13, // 339: pbds.Data.CheckCredentialName:input_type -> pbds.CheckCredentialNameReq + 6, // 340: pbds.Data.ListCredentialScopes:input_type -> pbds.ListCredentialScopesReq + 0, // 341: pbds.Data.UpdateCredentialScopes:input_type -> pbds.UpdateCredentialScopesReq + 2, // 342: pbds.Data.CredentialScopePreview:input_type -> pbds.CredentialScopePreviewReq + 232, // 343: pbds.Data.CreateKv:input_type -> pbds.CreateKvReq + 233, // 344: pbds.Data.UpdateKv:input_type -> pbds.UpdateKvReq + 234, // 345: pbds.Data.ListKvs:input_type -> pbds.ListKvsReq + 236, // 346: pbds.Data.DeleteKv:input_type -> pbds.DeleteKvReq + 237, // 347: pbds.Data.BatchUpsertKvs:input_type -> pbds.BatchUpsertKvsReq + 239, // 348: pbds.Data.UnDeleteKv:input_type -> pbds.UnDeleteKvReq + 240, // 349: pbds.Data.UndoKv:input_type -> pbds.UndoKvReq + 241, // 350: pbds.Data.KvFetchIDsExcluding:input_type -> pbds.KvFetchIDsExcludingReq + 243, // 351: pbds.Data.KvFetchKeysExcluding:input_type -> pbds.KvFetchKeysExcludingReq + 247, // 352: pbds.Data.ListClients:input_type -> pbds.ListClientsReq + 248, // 353: pbds.Data.RetryClients:input_type -> pbds.RetryClientsReq + 250, // 354: pbds.Data.ListClientEvents:input_type -> pbds.ListClientEventsReq + 252, // 355: pbds.Data.ListClientQuerys:input_type -> pbds.ListClientQuerysReq + 254, // 356: pbds.Data.CreateClientQuery:input_type -> pbds.CreateClientQueryReq + 256, // 357: pbds.Data.UpdateClientQuery:input_type -> pbds.UpdateClientQueryReq + 257, // 358: pbds.Data.DeleteClientQuery:input_type -> pbds.DeleteClientQueryReq + 258, // 359: pbds.Data.CheckClientQueryName:input_type -> pbds.CheckClientQueryNameReq + 386, // 360: pbds.Data.ClientConfigVersionStatistics:input_type -> pbclient.ClientCommonReq + 386, // 361: pbds.Data.ClientPullTrendStatistics:input_type -> pbclient.ClientCommonReq + 386, // 362: pbds.Data.ClientPullStatistics:input_type -> pbclient.ClientCommonReq + 386, // 363: pbds.Data.ClientLabelStatistics:input_type -> pbclient.ClientCommonReq + 386, // 364: pbds.Data.ClientAnnotationStatistics:input_type -> pbclient.ClientCommonReq + 386, // 365: pbds.Data.ClientVersionStatistics:input_type -> pbclient.ClientCommonReq + 260, // 366: pbds.Data.ListClientLabelAndAnnotation:input_type -> pbds.ListClientLabelAndAnnotationReq + 386, // 367: pbds.Data.ClientSpecificFailedReason:input_type -> pbclient.ClientCommonReq + 269, // 368: pbds.Data.ListUserPrivileges:input_type -> pbds.ListUserPrivilegesReq + 271, // 369: pbds.Data.DeleteUserPrivilege:input_type -> pbds.DeleteUserPrivilegesReq + 269, // 370: pbds.Data.ListUserGroupPrivileges:input_type -> pbds.ListUserPrivilegesReq + 271, // 371: pbds.Data.DeleteUserGroupPrivilege:input_type -> pbds.DeleteUserPrivilegesReq + 225, // 372: pbds.Data.ListInstances:input_type -> pbds.ListInstancesReq + 228, // 373: pbds.Data.FetchInstanceInfo:input_type -> pbds.FetchInstanceInfoReq + 231, // 374: pbds.Data.Ping:input_type -> pbds.PingMsg + 245, // 375: pbds.Data.BatchUpsertClientMetrics:input_type -> pbds.BatchUpsertClientMetricsReq + 261, // 376: pbds.Data.CompareConfigItemConflicts:input_type -> pbds.CompareConfigItemConflictsReq + 263, // 377: pbds.Data.GetTemplateAndNonTemplateCICount:input_type -> pbds.GetTemplateAndNonTemplateCICountReq + 265, // 378: pbds.Data.BatchUpdateLastConsumedTime:input_type -> pbds.BatchUpdateLastConsumedTimeReq + 17, // 379: pbds.Data.CreateApp:output_type -> pbds.CreateResp + 310, // 380: pbds.Data.UpdateApp:output_type -> pbapp.App + 387, // 381: pbds.Data.DeleteApp:output_type -> pbbase.EmptyResp + 310, // 382: pbds.Data.GetApp:output_type -> pbapp.App + 310, // 383: pbds.Data.GetAppByID:output_type -> pbapp.App + 310, // 384: pbds.Data.GetAppByName:output_type -> pbapp.App + 27, // 385: pbds.Data.ListAppsRest:output_type -> pbds.ListAppsResp + 29, // 386: pbds.Data.ListAppsByIDs:output_type -> pbds.ListAppsByIDsResp + 17, // 387: pbds.Data.CreateConfigItem:output_type -> pbds.CreateResp + 32, // 388: pbds.Data.BatchUpsertConfigItems:output_type -> pbds.BatchUpsertConfigItemsResp + 387, // 389: pbds.Data.UpdateConfigItem:output_type -> pbbase.EmptyResp + 387, // 390: pbds.Data.DeleteConfigItem:output_type -> pbbase.EmptyResp + 387, // 391: pbds.Data.UnDeleteConfigItem:output_type -> pbbase.EmptyResp + 387, // 392: pbds.Data.UndoConfigItem:output_type -> pbbase.EmptyResp + 315, // 393: pbds.Data.GetConfigItem:output_type -> pbci.ConfigItem + 39, // 394: pbds.Data.ListConfigItems:output_type -> pbds.ListConfigItemsResp + 41, // 395: pbds.Data.ListReleasedConfigItems:output_type -> pbds.ListReleasedConfigItemsResp + 43, // 396: pbds.Data.ListConfigItemCount:output_type -> pbds.ListConfigItemCountResp + 45, // 397: pbds.Data.ListConfigItemByTuple:output_type -> pbds.ListConfigItemByTupleResp + 387, // 398: pbds.Data.UpdateConfigHook:output_type -> pbbase.EmptyResp + 17, // 399: pbds.Data.CreateContent:output_type -> pbds.CreateResp + 388, // 400: pbds.Data.GetContent:output_type -> pbcontent.Content + 17, // 401: pbds.Data.CreateCommit:output_type -> pbds.CreateResp + 389, // 402: pbds.Data.GetLatestCommit:output_type -> pbcommit.Commit + 17, // 403: pbds.Data.CreateRelease:output_type -> pbds.CreateResp + 52, // 404: pbds.Data.ListReleases:output_type -> pbds.ListReleasesResp + 322, // 405: pbds.Data.GetReleaseByName:output_type -> pbrelease.Release + 322, // 406: pbds.Data.GetRelease:output_type -> pbrelease.Release + 387, // 407: pbds.Data.DeprecateRelease:output_type -> pbbase.EmptyResp + 387, // 408: pbds.Data.UnDeprecateRelease:output_type -> pbbase.EmptyResp + 387, // 409: pbds.Data.DeleteRelease:output_type -> pbbase.EmptyResp + 59, // 410: pbds.Data.CheckReleaseName:output_type -> pbds.CheckReleaseNameResp + 316, // 411: pbds.Data.GetReleasedConfigItem:output_type -> pbrci.ReleasedConfigItem + 323, // 412: pbds.Data.GetReleasedKv:output_type -> pbrkv.ReleasedKv + 63, // 413: pbds.Data.ListReleasedKvs:output_type -> pbds.ListReleasedKvResp + 17, // 414: pbds.Data.CreateHook:output_type -> pbds.CreateResp + 74, // 415: pbds.Data.ListHooks:output_type -> pbds.ListHooksResp + 387, // 416: pbds.Data.DeleteHook:output_type -> pbbase.EmptyResp + 387, // 417: pbds.Data.UpdateHook:output_type -> pbbase.EmptyResp + 75, // 418: pbds.Data.ListHookTags:output_type -> pbds.ListHookTagResp + 77, // 419: pbds.Data.ListHookReferences:output_type -> pbds.ListHookReferencesResp + 67, // 420: pbds.Data.GetHook:output_type -> pbds.GetHookResp + 69, // 421: pbds.Data.HookFetchIDsExcluding:output_type -> pbds.HookFetchIDsExcludingResp + 71, // 422: pbds.Data.GetHookReferencedIDs:output_type -> pbds.GetHookReferencedIDsResp + 17, // 423: pbds.Data.CreateHookRevision:output_type -> pbds.CreateResp + 82, // 424: pbds.Data.ListHookRevisions:output_type -> pbds.ListHookRevisionsResp + 383, // 425: pbds.Data.GetHookRevisionByID:output_type -> pbhr.HookRevision + 387, // 426: pbds.Data.DeleteHookRevision:output_type -> pbbase.EmptyResp + 387, // 427: pbds.Data.PublishHookRevision:output_type -> pbbase.EmptyResp + 383, // 428: pbds.Data.GetHookRevisionByPubState:output_type -> pbhr.HookRevision + 387, // 429: pbds.Data.UpdateHookRevision:output_type -> pbbase.EmptyResp + 89, // 430: pbds.Data.ListHookRevisionReferences:output_type -> pbds.ListHookRevisionReferencesResp + 91, // 431: pbds.Data.GetReleaseHook:output_type -> pbds.GetReleaseHookResp + 17, // 432: pbds.Data.CreateTemplateSpace:output_type -> pbds.CreateResp + 94, // 433: pbds.Data.ListTemplateSpaces:output_type -> pbds.ListTemplateSpacesResp + 387, // 434: pbds.Data.UpdateTemplateSpace:output_type -> pbbase.EmptyResp + 387, // 435: pbds.Data.DeleteTemplateSpace:output_type -> pbbase.EmptyResp + 97, // 436: pbds.Data.GetAllBizsOfTmplSpaces:output_type -> pbds.GetAllBizsOfTmplSpacesResp + 17, // 437: pbds.Data.CreateDefaultTmplSpace:output_type -> pbds.CreateResp + 100, // 438: pbds.Data.ListTmplSpacesByIDs:output_type -> pbds.ListTmplSpacesByIDsResp + 17, // 439: pbds.Data.CreateTemplate:output_type -> pbds.CreateResp + 103, // 440: pbds.Data.ListTemplates:output_type -> pbds.ListTemplatesResp + 387, // 441: pbds.Data.UpdateTemplate:output_type -> pbbase.EmptyResp + 387, // 442: pbds.Data.DeleteTemplate:output_type -> pbbase.EmptyResp + 387, // 443: pbds.Data.BatchDeleteTemplate:output_type -> pbbase.EmptyResp + 387, // 444: pbds.Data.AddTmplsToTmplSets:output_type -> pbbase.EmptyResp + 387, // 445: pbds.Data.DeleteTmplsFromTmplSets:output_type -> pbbase.EmptyResp + 110, // 446: pbds.Data.ListTemplatesByIDs:output_type -> pbds.ListTemplatesByIDsResp + 112, // 447: pbds.Data.ListTemplatesNotBound:output_type -> pbds.ListTemplatesNotBoundResp + 114, // 448: pbds.Data.ListTmplsOfTmplSet:output_type -> pbds.ListTmplsOfTmplSetResp + 116, // 449: pbds.Data.ListTemplateSetsAndRevisions:output_type -> pbds.ListTemplateSetsAndRevisionsResp + 118, // 450: pbds.Data.ListTemplateByTuple:output_type -> pbds.ListTemplateByTupleReqResp + 120, // 451: pbds.Data.BatchUpsertTemplates:output_type -> pbds.BatchUpsertTemplatesReqResp + 122, // 452: pbds.Data.BatchUpdateTemplatePermissions:output_type -> pbds.BatchUpdateTemplatePermissionsResp + 17, // 453: pbds.Data.CreateTemplateRevision:output_type -> pbds.CreateResp + 17, // 454: pbds.Data.UpdateTemplateRevision:output_type -> pbds.CreateResp + 126, // 455: pbds.Data.ListTemplateRevisions:output_type -> pbds.ListTemplateRevisionsResp + 128, // 456: pbds.Data.GetTemplateRevision:output_type -> pbds.GetTemplateRevisionResp + 387, // 457: pbds.Data.DeleteTemplateRevision:output_type -> pbbase.EmptyResp + 131, // 458: pbds.Data.ListTemplateRevisionsByIDs:output_type -> pbds.ListTemplateRevisionsByIDsResp + 133, // 459: pbds.Data.ListTmplRevisionNamesByTmplIDs:output_type -> pbds.ListTmplRevisionNamesByTmplIDsResp + 17, // 460: pbds.Data.CreateTemplateSet:output_type -> pbds.CreateResp + 136, // 461: pbds.Data.ListTemplateSets:output_type -> pbds.ListTemplateSetsResp + 387, // 462: pbds.Data.UpdateTemplateSet:output_type -> pbbase.EmptyResp + 387, // 463: pbds.Data.DeleteTemplateSet:output_type -> pbbase.EmptyResp + 140, // 464: pbds.Data.ListAppTemplateSets:output_type -> pbds.ListAppTemplateSetsResp + 142, // 465: pbds.Data.ListTemplateSetsByIDs:output_type -> pbds.ListTemplateSetsByIDsResp + 144, // 466: pbds.Data.ListTemplateSetBriefInfoByIDs:output_type -> pbds.ListTemplateSetBriefInfoByIDsResp + 146, // 467: pbds.Data.ListTmplSetsOfBiz:output_type -> pbds.ListTmplSetsOfBizResp + 17, // 468: pbds.Data.CreateAppTemplateBinding:output_type -> pbds.CreateResp + 149, // 469: pbds.Data.ListAppTemplateBindings:output_type -> pbds.ListAppTemplateBindingsResp + 387, // 470: pbds.Data.UpdateAppTemplateBinding:output_type -> pbbase.EmptyResp + 387, // 471: pbds.Data.DeleteAppTemplateBinding:output_type -> pbbase.EmptyResp + 153, // 472: pbds.Data.ListAppBoundTmplRevisions:output_type -> pbds.ListAppBoundTmplRevisionsResp + 155, // 473: pbds.Data.ListReleasedAppBoundTmplRevisions:output_type -> pbds.ListReleasedAppBoundTmplRevisionsResp + 157, // 474: pbds.Data.GetReleasedAppBoundTmplRevision:output_type -> pbds.GetReleasedAppBoundTmplRevisionResp + 159, // 475: pbds.Data.CheckAppTemplateBinding:output_type -> pbds.CheckAppTemplateBindingResp + 387, // 476: pbds.Data.ImportFromTemplateSetToApp:output_type -> pbbase.EmptyResp + 162, // 477: pbds.Data.ExtractAppTmplVariables:output_type -> pbds.ExtractAppTmplVariablesResp + 164, // 478: pbds.Data.GetAppTmplVariableRefs:output_type -> pbds.GetAppTmplVariableRefsResp + 166, // 479: pbds.Data.GetReleasedAppTmplVariableRefs:output_type -> pbds.GetReleasedAppTmplVariableRefsResp + 387, // 480: pbds.Data.UpdateAppTmplVariables:output_type -> pbbase.EmptyResp + 169, // 481: pbds.Data.ListAppTmplVariables:output_type -> pbds.ListAppTmplVariablesResp + 171, // 482: pbds.Data.ListReleasedAppTmplVariables:output_type -> pbds.ListReleasedAppTmplVariablesResp + 173, // 483: pbds.Data.ListTmplBoundCounts:output_type -> pbds.ListTmplBoundCountsResp + 175, // 484: pbds.Data.ListTmplRevisionBoundCounts:output_type -> pbds.ListTmplRevisionBoundCountsResp + 177, // 485: pbds.Data.ListTmplSetBoundCounts:output_type -> pbds.ListTmplSetBoundCountsResp + 179, // 486: pbds.Data.ListTmplBoundUnnamedApps:output_type -> pbds.ListTmplBoundUnnamedAppsResp + 181, // 487: pbds.Data.ListTmplBoundNamedApps:output_type -> pbds.ListTmplBoundNamedAppsResp + 183, // 488: pbds.Data.ListTmplBoundTmplSets:output_type -> pbds.ListTmplBoundTmplSetsResp + 185, // 489: pbds.Data.ListMultiTmplBoundTmplSets:output_type -> pbds.ListMultiTmplBoundTmplSetsResp + 187, // 490: pbds.Data.ListTmplRevisionBoundUnnamedApps:output_type -> pbds.ListTmplRevisionBoundUnnamedAppsResp + 189, // 491: pbds.Data.ListTmplRevisionBoundNamedApps:output_type -> pbds.ListTmplRevisionBoundNamedAppsResp + 191, // 492: pbds.Data.ListTmplSetBoundUnnamedApps:output_type -> pbds.ListTmplSetBoundUnnamedAppsResp + 193, // 493: pbds.Data.ListMultiTmplSetBoundUnnamedApps:output_type -> pbds.ListMultiTmplSetBoundUnnamedAppsResp + 195, // 494: pbds.Data.ListTmplSetBoundNamedApps:output_type -> pbds.ListTmplSetBoundNamedAppsResp + 197, // 495: pbds.Data.ListLatestTmplBoundUnnamedApps:output_type -> pbds.ListLatestTmplBoundUnnamedAppsResp + 387, // 496: pbds.Data.RemoveAppBoundTmplSet:output_type -> pbbase.EmptyResp + 200, // 497: pbds.Data.CheckTemplateSetReferencesApps:output_type -> pbds.CheckTemplateSetReferencesAppsResp + 17, // 498: pbds.Data.CreateTemplateVariable:output_type -> pbds.CreateResp + 205, // 499: pbds.Data.ListTemplateVariables:output_type -> pbds.ListTemplateVariablesResp + 387, // 500: pbds.Data.UpdateTemplateVariable:output_type -> pbbase.EmptyResp + 387, // 501: pbds.Data.DeleteTemplateVariable:output_type -> pbbase.EmptyResp + 209, // 502: pbds.Data.TemplateVariableFetchIDsExcluding:output_type -> pbds.TemplateVariableFetchIDsExcludingResp + 203, // 503: pbds.Data.ImportTemplateVariables:output_type -> pbds.ImportTemplateVariablesResp + 17, // 504: pbds.Data.CreateGroup:output_type -> pbds.CreateResp + 212, // 505: pbds.Data.ListAllGroups:output_type -> pbds.ListAllGroupsResp + 214, // 506: pbds.Data.ListAppGroups:output_type -> pbds.ListAppGroupsResp + 371, // 507: pbds.Data.GetGroupByName:output_type -> pbgroup.Group + 387, // 508: pbds.Data.UpdateGroup:output_type -> pbbase.EmptyResp + 387, // 509: pbds.Data.DeleteGroup:output_type -> pbbase.EmptyResp + 219, // 510: pbds.Data.CountGroupsReleasedApps:output_type -> pbds.CountGroupsReleasedAppsResp + 221, // 511: pbds.Data.ListGroupReleasedApps:output_type -> pbds.ListGroupReleasedAppsResp + 224, // 512: pbds.Data.Publish:output_type -> pbds.PublishResp + 224, // 513: pbds.Data.GenerateReleaseAndPublish:output_type -> pbds.PublishResp + 17, // 514: pbds.Data.CreateCredential:output_type -> pbds.CreateResp + 11, // 515: pbds.Data.ListCredentials:output_type -> pbds.ListCredentialResp + 387, // 516: pbds.Data.DeleteCredential:output_type -> pbbase.EmptyResp + 387, // 517: pbds.Data.UpdateCredential:output_type -> pbbase.EmptyResp + 14, // 518: pbds.Data.CheckCredentialName:output_type -> pbds.CheckCredentialNameResp + 7, // 519: pbds.Data.ListCredentialScopes:output_type -> pbds.ListCredentialScopesResp + 1, // 520: pbds.Data.UpdateCredentialScopes:output_type -> pbds.UpdateCredentialScopesResp + 3, // 521: pbds.Data.CredentialScopePreview:output_type -> pbds.CredentialScopePreviewResp + 17, // 522: pbds.Data.CreateKv:output_type -> pbds.CreateResp + 387, // 523: pbds.Data.UpdateKv:output_type -> pbbase.EmptyResp + 235, // 524: pbds.Data.ListKvs:output_type -> pbds.ListKvsResp + 387, // 525: pbds.Data.DeleteKv:output_type -> pbbase.EmptyResp + 238, // 526: pbds.Data.BatchUpsertKvs:output_type -> pbds.BatchUpsertKvsResp + 387, // 527: pbds.Data.UnDeleteKv:output_type -> pbbase.EmptyResp + 387, // 528: pbds.Data.UndoKv:output_type -> pbbase.EmptyResp + 242, // 529: pbds.Data.KvFetchIDsExcluding:output_type -> pbds.KvFetchIDsExcludingResp + 244, // 530: pbds.Data.KvFetchKeysExcluding:output_type -> pbds.KvFetchKeysExcludingResp + 249, // 531: pbds.Data.ListClients:output_type -> pbds.ListClientsResp + 387, // 532: pbds.Data.RetryClients:output_type -> pbbase.EmptyResp + 251, // 533: pbds.Data.ListClientEvents:output_type -> pbds.ListClientEventsResp + 253, // 534: pbds.Data.ListClientQuerys:output_type -> pbds.ListClientQuerysResp + 255, // 535: pbds.Data.CreateClientQuery:output_type -> pbds.CreateClientQueryResp + 387, // 536: pbds.Data.UpdateClientQuery:output_type -> pbbase.EmptyResp + 387, // 537: pbds.Data.DeleteClientQuery:output_type -> pbbase.EmptyResp + 259, // 538: pbds.Data.CheckClientQueryName:output_type -> pbds.CheckClientQueryNameResp + 372, // 539: pbds.Data.ClientConfigVersionStatistics:output_type -> google.protobuf.Struct + 372, // 540: pbds.Data.ClientPullTrendStatistics:output_type -> google.protobuf.Struct + 372, // 541: pbds.Data.ClientPullStatistics:output_type -> google.protobuf.Struct + 372, // 542: pbds.Data.ClientLabelStatistics:output_type -> google.protobuf.Struct + 372, // 543: pbds.Data.ClientAnnotationStatistics:output_type -> google.protobuf.Struct + 372, // 544: pbds.Data.ClientVersionStatistics:output_type -> google.protobuf.Struct + 372, // 545: pbds.Data.ListClientLabelAndAnnotation:output_type -> google.protobuf.Struct + 372, // 546: pbds.Data.ClientSpecificFailedReason:output_type -> google.protobuf.Struct + 270, // 547: pbds.Data.ListUserPrivileges:output_type -> pbds.ListUserPrivilegesResp + 387, // 548: pbds.Data.DeleteUserPrivilege:output_type -> pbbase.EmptyResp + 270, // 549: pbds.Data.ListUserGroupPrivileges:output_type -> pbds.ListUserPrivilegesResp + 387, // 550: pbds.Data.DeleteUserGroupPrivilege:output_type -> pbbase.EmptyResp + 226, // 551: pbds.Data.ListInstances:output_type -> pbds.ListInstancesResp + 229, // 552: pbds.Data.FetchInstanceInfo:output_type -> pbds.FetchInstanceInfoResp + 231, // 553: pbds.Data.Ping:output_type -> pbds.PingMsg + 246, // 554: pbds.Data.BatchUpsertClientMetrics:output_type -> pbds.BatchUpsertClientMetricsResp + 262, // 555: pbds.Data.CompareConfigItemConflicts:output_type -> pbds.CompareConfigItemConflictsResp + 264, // 556: pbds.Data.GetTemplateAndNonTemplateCICount:output_type -> pbds.GetTemplateAndNonTemplateCICountResp + 266, // 557: pbds.Data.BatchUpdateLastConsumedTime:output_type -> pbds.BatchUpdateLastConsumedTimeResp + 379, // [379:558] is the sub-list for method output_type + 200, // [200:379] is the sub-list for method input_type + 200, // [200:200] is the sub-list for extension type_name + 200, // [200:200] is the sub-list for extension extendee + 0, // [0:200] is the sub-list for field type_name } func init() { file_data_service_proto_init() } @@ -26628,7 +27247,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[267].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CredentialScopePreviewResp_Detail); i { + switch v := v.(*CreateUserPrivilegesReq); i { case 0: return &v.state case 1: @@ -26640,7 +27259,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[268].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchUpsertConfigItemsReq_ConfigItem); i { + switch v := v.(*CreateUserPrivilegesResp); i { case 0: return &v.state case 1: @@ -26652,7 +27271,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[269].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchUpsertConfigItemsReq_TemplateBinding); i { + switch v := v.(*ListUserPrivilegesReq); i { case 0: return &v.state case 1: @@ -26664,7 +27283,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[270].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListConfigItemByTupleReq_Item); i { + switch v := v.(*ListUserPrivilegesResp); i { case 0: return &v.state case 1: @@ -26676,7 +27295,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[271].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetHookInfoSpec_Releases); i { + switch v := v.(*DeleteUserPrivilegesReq); i { case 0: return &v.state case 1: @@ -26688,7 +27307,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[272].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHooksResp_Detail); i { + switch v := v.(*CredentialScopePreviewResp_Detail); i { case 0: return &v.state case 1: @@ -26700,7 +27319,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[273].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHookReferencesResp_Detail); i { + switch v := v.(*BatchUpsertConfigItemsReq_ConfigItem); i { case 0: return &v.state case 1: @@ -26712,7 +27331,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[274].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHookRevisionsResp_ListHookRevisionsData); i { + switch v := v.(*BatchUpsertConfigItemsReq_TemplateBinding); i { case 0: return &v.state case 1: @@ -26724,7 +27343,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[275].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHookRevisionReferencesResp_Detail); i { + switch v := v.(*ListConfigItemByTupleReq_Item); i { case 0: return &v.state case 1: @@ -26736,7 +27355,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[276].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetReleaseHookResp_Hook); i { + switch v := v.(*GetHookInfoSpec_Releases); i { case 0: return &v.state case 1: @@ -26748,7 +27367,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[277].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplateSetsAndRevisionsResp_Detail); i { + switch v := v.(*ListHooksResp_Detail); i { case 0: return &v.state case 1: @@ -26760,7 +27379,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[278].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplateByTupleReq_Item); i { + switch v := v.(*ListHookReferencesResp_Detail); i { case 0: return &v.state case 1: @@ -26772,7 +27391,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[279].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplateByTupleReqResp_Item); i { + switch v := v.(*ListHookRevisionsResp_ListHookRevisionsData); i { case 0: return &v.state case 1: @@ -26784,7 +27403,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[280].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchUpsertTemplatesReq_Item); i { + switch v := v.(*ListHookRevisionReferencesResp_Detail); i { case 0: return &v.state case 1: @@ -26796,7 +27415,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[281].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTemplateRevisionResp_TemplateRevision); i { + switch v := v.(*GetReleaseHookResp_Hook); i { case 0: return &v.state case 1: @@ -26808,7 +27427,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[282].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ImportFromTemplateSetToAppReq_Binding); i { + switch v := v.(*ListTemplateSetsAndRevisionsResp_Detail); i { case 0: return &v.state case 1: @@ -26820,7 +27439,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[283].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding); i { + switch v := v.(*ListTemplateByTupleReq_Item); i { case 0: return &v.state case 1: @@ -26832,7 +27451,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[284].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckTemplateSetReferencesAppsReq_Item); i { + switch v := v.(*ListTemplateByTupleReqResp_Item); i { case 0: return &v.state case 1: @@ -26844,7 +27463,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[285].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckTemplateSetReferencesAppsResp_Item); i { + switch v := v.(*BatchUpsertTemplatesReq_Item); i { case 0: return &v.state case 1: @@ -26856,7 +27475,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[286].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAppGroupsResp_ListAppGroupsData); i { + switch v := v.(*GetTemplateRevisionResp_TemplateRevision); i { case 0: return &v.state case 1: @@ -26868,7 +27487,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[287].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData); i { + switch v := v.(*ImportFromTemplateSetToAppReq_Binding); i { case 0: return &v.state case 1: @@ -26880,7 +27499,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[288].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListGroupReleasedAppsResp_ListGroupReleasedAppsData); i { + switch v := v.(*ImportFromTemplateSetToAppReq_Binding_TemplateRevisionBinding); i { case 0: return &v.state case 1: @@ -26892,7 +27511,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[289].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchUpsertKvsReq_Kv); i { + switch v := v.(*CheckTemplateSetReferencesAppsReq_Item); i { case 0: return &v.state case 1: @@ -26904,7 +27523,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[290].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListClientsReq_Order); i { + switch v := v.(*CheckTemplateSetReferencesAppsResp_Item); i { case 0: return &v.state case 1: @@ -26916,7 +27535,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[291].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListClientsResp_Item); i { + switch v := v.(*ListAppGroupsResp_ListAppGroupsData); i { case 0: return &v.state case 1: @@ -26928,7 +27547,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[292].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListClientEventsReq_Order); i { + switch v := v.(*CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData); i { case 0: return &v.state case 1: @@ -26940,7 +27559,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[293].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CompareConfigItemConflictsResp_NonTemplateConfig); i { + switch v := v.(*ListGroupReleasedAppsResp_ListGroupReleasedAppsData); i { case 0: return &v.state case 1: @@ -26952,7 +27571,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[294].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CompareConfigItemConflictsResp_TemplateConfig); i { + switch v := v.(*BatchUpsertKvsReq_Kv); i { case 0: return &v.state case 1: @@ -26964,6 +27583,66 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[295].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListClientsReq_Order); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_data_service_proto_msgTypes[296].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListClientsResp_Item); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_data_service_proto_msgTypes[297].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListClientEventsReq_Order); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_data_service_proto_msgTypes[298].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CompareConfigItemConflictsResp_NonTemplateConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_data_service_proto_msgTypes[299].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CompareConfigItemConflictsResp_TemplateConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_data_service_proto_msgTypes[300].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CompareConfigItemConflictsResp_TemplateConfig_TemplateRevisionDetail); i { case 0: return &v.state @@ -26975,6 +27654,18 @@ func file_data_service_proto_init() { return nil } } + file_data_service_proto_msgTypes[301].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListUserPrivilegesResp_Detail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_data_service_proto_msgTypes[10].OneofWrappers = []interface{}{} type x struct{} @@ -26983,7 +27674,7 @@ func file_data_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_data_service_proto_rawDesc, NumEnums: 0, - NumMessages: 296, + NumMessages: 302, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/protocol/data-service/data_service.proto b/pkg/protocol/data-service/data_service.proto index e9099f159f..fbe91c991d 100644 --- a/pkg/protocol/data-service/data_service.proto +++ b/pkg/protocol/data-service/data_service.proto @@ -263,6 +263,14 @@ service Data { rpc ListClientLabelAndAnnotation(ListClientLabelAndAnnotationReq) returns (google.protobuf.Struct) {} rpc ClientSpecificFailedReason(pbclient.ClientCommonReq) returns (google.protobuf.Struct) {} + // user privileges related interface + rpc ListUserPrivileges(ListUserPrivilegesReq) returns (ListUserPrivilegesResp) {} + rpc DeleteUserPrivilege(DeleteUserPrivilegesReq) returns (pbbase.EmptyResp) {} + + // user group privileges related interface + rpc ListUserGroupPrivileges(ListUserPrivilegesReq) returns (ListUserPrivilegesResp) {} + rpc DeleteUserGroupPrivilege(DeleteUserPrivilegesReq) returns (pbbase.EmptyResp) {} + // used iam pull resource callback. rpc ListInstances(ListInstancesReq) returns (ListInstancesResp) {}; rpc FetchInstanceInfo(FetchInstanceInfoReq) returns (FetchInstanceInfoResp) {}; @@ -1080,6 +1088,7 @@ message BatchUpsertTemplatesReq { } repeated Item items = 2; repeated uint32 template_set_ids = 3; + uint32 template_space_id = 4; } message BatchUpsertTemplatesReqResp { @@ -1097,6 +1106,8 @@ message BatchUpdateTemplatePermissionsReq { uint32 template_set_id = 8; // 套餐ID, 具体操作的哪个套餐 bool no_set_specified = 9; // 是否未指定套餐, 区分全部套餐和未指定套餐 uint32 template_space_id = 10; // 模板空间ID + uint32 uid = 11; + uint32 gid = 12; } message BatchUpdateTemplatePermissionsResp { @@ -1155,6 +1166,8 @@ message GetTemplateRevisionResp { string create_at = 15; string md5 = 16; bool is_latest = 17; + uint32 uid = 18; + uint32 gid = 19; } TemplateRevision detail = 1; } @@ -1165,7 +1178,8 @@ message DeleteTemplateRevisionReq { } message ListTemplateRevisionsByIDsReq { - repeated uint32 ids = 1; + uint32 biz_id = 1; + repeated uint32 ids = 2; } message ListTemplateRevisionsByIDsResp { @@ -2045,6 +2059,7 @@ message CompareConfigItemConflictsResp { uint32 template_revision_id = 2; bool is_latest = 3; repeated pbtv.TemplateVariableSpec variables = 5; + pbci.FilePermission permission = 6; } uint32 template_space_id = 1; string template_space_name = 2; @@ -2075,4 +2090,49 @@ message BatchUpdateLastConsumedTimeReq { repeated uint32 app_ids = 2; } -message BatchUpdateLastConsumedTimeResp {} \ No newline at end of file +message BatchUpdateLastConsumedTimeResp {} + +message CreateUserPrivilegesReq { + uint32 biz_id = 1; + uint32 app_id = 2; + uint32 uid = 3; + uint32 gid = 4; + string user = 5; + string user_group = 6; + string privilege_type = 7; // 权限类型:system、custom + bool read_only = 8; // 只读 +} + +message CreateUserPrivilegesResp { + uint32 id = 1; +} + +message ListUserPrivilegesReq { + uint32 biz_id = 1; + uint32 app_id = 2; + uint32 template_space_id = 3; + uint32 start = 4; + uint32 limit = 5; + bool all = 6; + string name = 7; // 名称 + string privilege_type = 8; // 权限类型:user、user_group +} + +message ListUserPrivilegesResp { + message Detail { + uint32 id = 1; + string name = 2; + string privilege_type = 3; + bool read_only = 4; + uint32 pid = 5; // 权限ID + } + uint32 count = 1; + repeated Detail details = 2; +} + +message DeleteUserPrivilegesReq { + uint32 id = 1; + uint32 biz_id = 2; + uint32 app_id = 3; + uint32 template_space_id = 4; +} diff --git a/pkg/protocol/data-service/data_service_grpc.pb.go b/pkg/protocol/data-service/data_service_grpc.pb.go index 0dc5ac790b..996001bb2f 100644 --- a/pkg/protocol/data-service/data_service_grpc.pb.go +++ b/pkg/protocol/data-service/data_service_grpc.pb.go @@ -199,6 +199,10 @@ const ( Data_ClientVersionStatistics_FullMethodName = "/pbds.Data/ClientVersionStatistics" Data_ListClientLabelAndAnnotation_FullMethodName = "/pbds.Data/ListClientLabelAndAnnotation" Data_ClientSpecificFailedReason_FullMethodName = "/pbds.Data/ClientSpecificFailedReason" + Data_ListUserPrivileges_FullMethodName = "/pbds.Data/ListUserPrivileges" + Data_DeleteUserPrivilege_FullMethodName = "/pbds.Data/DeleteUserPrivilege" + Data_ListUserGroupPrivileges_FullMethodName = "/pbds.Data/ListUserGroupPrivileges" + Data_DeleteUserGroupPrivilege_FullMethodName = "/pbds.Data/DeleteUserGroupPrivilege" Data_ListInstances_FullMethodName = "/pbds.Data/ListInstances" Data_FetchInstanceInfo_FullMethodName = "/pbds.Data/FetchInstanceInfo" Data_Ping_FullMethodName = "/pbds.Data/Ping" @@ -408,6 +412,12 @@ type DataClient interface { ClientVersionStatistics(ctx context.Context, in *client.ClientCommonReq, opts ...grpc.CallOption) (*structpb.Struct, error) ListClientLabelAndAnnotation(ctx context.Context, in *ListClientLabelAndAnnotationReq, opts ...grpc.CallOption) (*structpb.Struct, error) ClientSpecificFailedReason(ctx context.Context, in *client.ClientCommonReq, opts ...grpc.CallOption) (*structpb.Struct, error) + // user privileges related interface + ListUserPrivileges(ctx context.Context, in *ListUserPrivilegesReq, opts ...grpc.CallOption) (*ListUserPrivilegesResp, error) + DeleteUserPrivilege(ctx context.Context, in *DeleteUserPrivilegesReq, opts ...grpc.CallOption) (*base.EmptyResp, error) + // user group privileges related interface + ListUserGroupPrivileges(ctx context.Context, in *ListUserPrivilegesReq, opts ...grpc.CallOption) (*ListUserPrivilegesResp, error) + DeleteUserGroupPrivilege(ctx context.Context, in *DeleteUserPrivilegesReq, opts ...grpc.CallOption) (*base.EmptyResp, error) // used iam pull resource callback. ListInstances(ctx context.Context, in *ListInstancesReq, opts ...grpc.CallOption) (*ListInstancesResp, error) FetchInstanceInfo(ctx context.Context, in *FetchInstanceInfoReq, opts ...grpc.CallOption) (*FetchInstanceInfoResp, error) @@ -1942,6 +1952,42 @@ func (c *dataClient) ClientSpecificFailedReason(ctx context.Context, in *client. return out, nil } +func (c *dataClient) ListUserPrivileges(ctx context.Context, in *ListUserPrivilegesReq, opts ...grpc.CallOption) (*ListUserPrivilegesResp, error) { + out := new(ListUserPrivilegesResp) + err := c.cc.Invoke(ctx, Data_ListUserPrivileges_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataClient) DeleteUserPrivilege(ctx context.Context, in *DeleteUserPrivilegesReq, opts ...grpc.CallOption) (*base.EmptyResp, error) { + out := new(base.EmptyResp) + err := c.cc.Invoke(ctx, Data_DeleteUserPrivilege_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataClient) ListUserGroupPrivileges(ctx context.Context, in *ListUserPrivilegesReq, opts ...grpc.CallOption) (*ListUserPrivilegesResp, error) { + out := new(ListUserPrivilegesResp) + err := c.cc.Invoke(ctx, Data_ListUserGroupPrivileges_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataClient) DeleteUserGroupPrivilege(ctx context.Context, in *DeleteUserPrivilegesReq, opts ...grpc.CallOption) (*base.EmptyResp, error) { + out := new(base.EmptyResp) + err := c.cc.Invoke(ctx, Data_DeleteUserGroupPrivilege_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *dataClient) ListInstances(ctx context.Context, in *ListInstancesReq, opts ...grpc.CallOption) (*ListInstancesResp, error) { out := new(ListInstancesResp) err := c.cc.Invoke(ctx, Data_ListInstances_FullMethodName, in, out, opts...) @@ -2205,6 +2251,12 @@ type DataServer interface { ClientVersionStatistics(context.Context, *client.ClientCommonReq) (*structpb.Struct, error) ListClientLabelAndAnnotation(context.Context, *ListClientLabelAndAnnotationReq) (*structpb.Struct, error) ClientSpecificFailedReason(context.Context, *client.ClientCommonReq) (*structpb.Struct, error) + // user privileges related interface + ListUserPrivileges(context.Context, *ListUserPrivilegesReq) (*ListUserPrivilegesResp, error) + DeleteUserPrivilege(context.Context, *DeleteUserPrivilegesReq) (*base.EmptyResp, error) + // user group privileges related interface + ListUserGroupPrivileges(context.Context, *ListUserPrivilegesReq) (*ListUserPrivilegesResp, error) + DeleteUserGroupPrivilege(context.Context, *DeleteUserPrivilegesReq) (*base.EmptyResp, error) // used iam pull resource callback. ListInstances(context.Context, *ListInstancesReq) (*ListInstancesResp, error) FetchInstanceInfo(context.Context, *FetchInstanceInfoReq) (*FetchInstanceInfoResp, error) @@ -2727,6 +2779,18 @@ func (UnimplementedDataServer) ListClientLabelAndAnnotation(context.Context, *Li func (UnimplementedDataServer) ClientSpecificFailedReason(context.Context, *client.ClientCommonReq) (*structpb.Struct, error) { return nil, status.Errorf(codes.Unimplemented, "method ClientSpecificFailedReason not implemented") } +func (UnimplementedDataServer) ListUserPrivileges(context.Context, *ListUserPrivilegesReq) (*ListUserPrivilegesResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListUserPrivileges not implemented") +} +func (UnimplementedDataServer) DeleteUserPrivilege(context.Context, *DeleteUserPrivilegesReq) (*base.EmptyResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteUserPrivilege not implemented") +} +func (UnimplementedDataServer) ListUserGroupPrivileges(context.Context, *ListUserPrivilegesReq) (*ListUserPrivilegesResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListUserGroupPrivileges not implemented") +} +func (UnimplementedDataServer) DeleteUserGroupPrivilege(context.Context, *DeleteUserPrivilegesReq) (*base.EmptyResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteUserGroupPrivilege not implemented") +} func (UnimplementedDataServer) ListInstances(context.Context, *ListInstancesReq) (*ListInstancesResp, error) { return nil, status.Errorf(codes.Unimplemented, "method ListInstances not implemented") } @@ -5784,6 +5848,78 @@ func _Data_ClientSpecificFailedReason_Handler(srv interface{}, ctx context.Conte return interceptor(ctx, in, info, handler) } +func _Data_ListUserPrivileges_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListUserPrivilegesReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataServer).ListUserPrivileges(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Data_ListUserPrivileges_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataServer).ListUserPrivileges(ctx, req.(*ListUserPrivilegesReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _Data_DeleteUserPrivilege_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteUserPrivilegesReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataServer).DeleteUserPrivilege(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Data_DeleteUserPrivilege_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataServer).DeleteUserPrivilege(ctx, req.(*DeleteUserPrivilegesReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _Data_ListUserGroupPrivileges_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListUserPrivilegesReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataServer).ListUserGroupPrivileges(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Data_ListUserGroupPrivileges_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataServer).ListUserGroupPrivileges(ctx, req.(*ListUserPrivilegesReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _Data_DeleteUserGroupPrivilege_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteUserPrivilegesReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataServer).DeleteUserGroupPrivilege(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Data_DeleteUserGroupPrivilege_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataServer).DeleteUserGroupPrivilege(ctx, req.(*DeleteUserPrivilegesReq)) + } + return interceptor(ctx, in, info, handler) +} + func _Data_ListInstances_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ListInstancesReq) if err := dec(in); err != nil { @@ -6589,6 +6725,22 @@ var Data_ServiceDesc = grpc.ServiceDesc{ MethodName: "ClientSpecificFailedReason", Handler: _Data_ClientSpecificFailedReason_Handler, }, + { + MethodName: "ListUserPrivileges", + Handler: _Data_ListUserPrivileges_Handler, + }, + { + MethodName: "DeleteUserPrivilege", + Handler: _Data_DeleteUserPrivilege_Handler, + }, + { + MethodName: "ListUserGroupPrivileges", + Handler: _Data_ListUserGroupPrivileges_Handler, + }, + { + MethodName: "DeleteUserGroupPrivilege", + Handler: _Data_DeleteUserGroupPrivilege_Handler, + }, { MethodName: "ListInstances", Handler: _Data_ListInstances_Handler, diff --git a/pkg/types/cache.go b/pkg/types/cache.go index 6d8bce1e1c..9d736e9f2d 100644 --- a/pkg/types/cache.go +++ b/pkg/types/cache.go @@ -124,6 +124,8 @@ type FilePermissionCache struct { User string `json:"user"` UserGroup string `json:"group"` Privilege string `json:"priv"` + Uid uint32 `json:"uid"` + Gid uint32 `json:"gid"` } // CredentialCache cache struct. @@ -231,6 +233,8 @@ func ReleaseCICaches(rs []*table.ReleasedConfigItem, releaseName string) []*Rele User: one.ConfigItemSpec.Permission.User, UserGroup: one.ConfigItemSpec.Permission.UserGroup, Privilege: one.ConfigItemSpec.Permission.Privilege, + Uid: one.ConfigItemSpec.Permission.Uid, + Gid: one.ConfigItemSpec.Permission.Gid, }, }, Attachment: one.Attachment, diff --git a/pkg/types/template.go b/pkg/types/template.go index 795fe80a61..efb3dafd4e 100644 --- a/pkg/types/template.go +++ b/pkg/types/template.go @@ -36,6 +36,8 @@ type TemplateItem struct { Sign string `json:"sign"` ByteSize uint64 `json:"byte_size"` Md5 string `json:"md5"` + Uid uint32 `json:"uid"` + Gid uint32 `json:"gid"` } // TemplatesImportResp Import template return diff --git a/pkg/types/user_privilege.go b/pkg/types/user_privilege.go new file mode 100644 index 0000000000..fac287f93d --- /dev/null +++ b/pkg/types/user_privilege.go @@ -0,0 +1,40 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package types + +// UserPrivilege 用户权限 +type UserPrivilege struct { + AppID uint32 + TemplateSpaceID uint32 + User string + Uid uint32 +} + +// UserGroupPrivilege 用户组权限 +type UserGroupPrivilege struct { + AppID uint32 + TemplateSpaceID uint32 + UserGroup string + Gid uint32 +} + +// FileGroupPrivilege 文件权限 +type FileGroupPrivilege struct { + Name string + Path string + TemplateSpaceID uint32 + Uid uint32 + User string + Gid uint32 + UserGroup string +} diff --git a/scripts/gen/main.go b/scripts/gen/main.go index 72be1ac65f..f9ab90f293 100644 --- a/scripts/gen/main.go +++ b/scripts/gen/main.go @@ -63,6 +63,8 @@ func main() { table.Client{}, table.ClientEvent{}, table.ClientQuery{}, + table.UserPrivilege{}, + table.UserGroupPrivilege{}, ) g.Execute()