diff --git a/bcs-services/bcs-bscp/cmd/config-server/service/config_item.go b/bcs-services/bcs-bscp/cmd/config-server/service/config_item.go index 84e6c38ba1..7bc2f60fa9 100644 --- a/bcs-services/bcs-bscp/cmd/config-server/service/config_item.go +++ b/bcs-services/bcs-bscp/cmd/config-server/service/config_item.go @@ -414,6 +414,7 @@ func (s *Service) ListConfigItems(ctx context.Context, req *pbcs.ListConfigItems All: req.All, Ids: req.Ids, WithStatus: req.WithStatus, + Status: req.Status, } rp, err := s.client.DS.ListConfigItems(grpcKit.RpcCtx(), r) if err != nil { diff --git a/bcs-services/bcs-bscp/cmd/config-server/service/kv.go b/bcs-services/bcs-bscp/cmd/config-server/service/kv.go index b5e8e76156..222540bcfe 100644 --- a/bcs-services/bcs-bscp/cmd/config-server/service/kv.go +++ b/bcs-services/bcs-bscp/cmd/config-server/service/kv.go @@ -115,6 +115,7 @@ func (s *Service) ListKvs(ctx context.Context, req *pbcs.ListKvsReq) (*pbcs.List Sort: req.Sort, Order: req.Order, TopIds: req.TopIds, + Status: req.Status, } if !req.All { if req.Limit == 0 { diff --git a/bcs-services/bcs-bscp/cmd/data-service/service/config_item.go b/bcs-services/bcs-bscp/cmd/data-service/service/config_item.go index 35100bc9fe..9198073091 100644 --- a/bcs-services/bcs-bscp/cmd/data-service/service/config_item.go +++ b/bcs-services/bcs-bscp/cmd/data-service/service/config_item.go @@ -573,8 +573,7 @@ func (s *Service) ListConfigItems(ctx context.Context, req *pbds.ListConfigItems logs.Errorf("get commit, err: %v, rid: %s", err, grpcKit.Rid) return nil, err } - - configItems = pbrci.PbConfigItemState(details, fileReleased, commits) + configItems = pbrci.PbConfigItemState(details, fileReleased, commits, req.Status) } else { for _, ci := range details { configItems = append(configItems, pbci.PbConfigItem(ci, "")) @@ -623,18 +622,14 @@ func (s *Service) ListConfigItems(ctx context.Context, req *pbds.ListConfigItems end = uint32(len(configItems)) } } + + // 如果有topID则按照topID排最前面 topId, _ := tools.StrToUint32Slice(req.Ids) sort.SliceStable(configItems, func(i, j int) bool { - // 检测模板id是否在topId中 iInTopID := tools.Contains(topId, configItems[i].Id) jInTopID := tools.Contains(topId, configItems[j].Id) - // 两者都在则先path排再name排 - // 不管topID有没有都要先path排再name排 - if iInTopID && jInTopID || len(topId) == 0 { - if configItems[i].GetSpec().GetPath() != configItems[j].GetSpec().GetPath() { - return configItems[i].GetSpec().GetPath() < configItems[j].GetSpec().GetPath() - } - return configItems[i].GetSpec().GetName() < configItems[j].GetSpec().GetName() + if iInTopID && jInTopID { + return i < j } if iInTopID { return true diff --git a/bcs-services/bcs-bscp/cmd/data-service/service/kv.go b/bcs-services/bcs-bscp/cmd/data-service/service/kv.go index e2b7271f9d..d046591f8f 100644 --- a/bcs-services/bcs-bscp/cmd/data-service/service/kv.go +++ b/bcs-services/bcs-bscp/cmd/data-service/service/kv.go @@ -171,6 +171,7 @@ func (s *Service) ListKvs(ctx context.Context, req *pbds.ListKvsReq) (*pbds.List Page: page, KvType: req.KvType, TopIDs: topIds, + Status: req.Status, } po := &types.PageOption{ EnableUnlimitedLimit: true, diff --git a/bcs-services/bcs-bscp/cmd/data-service/service/released_ci.go b/bcs-services/bcs-bscp/cmd/data-service/service/released_ci.go index 5d09adf2fc..e65aace0a1 100644 --- a/bcs-services/bcs-bscp/cmd/data-service/service/released_ci.go +++ b/bcs-services/bcs-bscp/cmd/data-service/service/released_ci.go @@ -14,6 +14,8 @@ package service import ( "context" + "path" + "sort" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/logs" @@ -60,7 +62,12 @@ func (s *Service) ListReleasedConfigItems(ctx context.Context, logs.Errorf("list released app bound templates revisions failed, err: %v, rid: %s", err, kt.Rid) return nil, err } - + // 先按照path+name排序好 + sort.SliceStable(details, func(i, j int) bool { + iPath := path.Join(details[i].ConfigItemSpec.Path, details[i].ConfigItemSpec.Name) + jPath := path.Join(details[j].ConfigItemSpec.Path, details[j].ConfigItemSpec.Name) + return iPath < jPath + }) resp := &pbds.ListReleasedConfigItemsResp{ Count: uint32(count), Details: pbrci.PbReleasedConfigItems(details), diff --git a/bcs-services/bcs-bscp/cmd/data-service/service/template.go b/bcs-services/bcs-bscp/cmd/data-service/service/template.go index e849369a42..50e0dc3c42 100644 --- a/bcs-services/bcs-bscp/cmd/data-service/service/template.go +++ b/bcs-services/bcs-bscp/cmd/data-service/service/template.go @@ -661,15 +661,10 @@ func (s *Service) ListTmplsOfTmplSet(ctx context.Context, req *pbds.ListTmplsOfT } topId, _ := tools.StrToUint32Slice(req.Ids) sort.SliceStable(details, func(i, j int) bool { - // 检测模板id是否在topId中 iInTopID := tools.Contains(topId, details[i].Id) jInTopID := tools.Contains(topId, details[j].Id) - // 两者都在则按照path+name排序 - if iInTopID && jInTopID || len(topId) == 0 { - if details[i].GetSpec().GetPath() != details[j].GetSpec().GetPath() { - return details[i].GetSpec().GetPath() < details[j].GetSpec().GetPath() - } - return details[i].GetSpec().GetName() < details[j].GetSpec().GetName() + if iInTopID && jInTopID { + return i < j } if iInTopID { return true diff --git a/bcs-services/bcs-bscp/pkg/dal/dao/kv.go b/bcs-services/bcs-bscp/pkg/dal/dao/kv.go index c409491628..313020b1fc 100644 --- a/bcs-services/bcs-bscp/pkg/dal/dao/kv.go +++ b/bcs-services/bcs-bscp/pkg/dal/dao/kv.go @@ -15,6 +15,7 @@ package dao import ( "errors" "fmt" + "strings" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/criteria/errf" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/gen" @@ -147,12 +148,16 @@ func (dao *kvDao) List(kit *kit.Kit, opt *types.ListKvOption) ([]*table.Kv, int6 if !ok { return nil, 0, errors.New("user doesn't contains orderColStr") } + + orderStr := "CASE WHEN kv_state = 'ADD' THEN 1 WHEN kv_state = 'REVISE' THEN 2 " + + "WHEN kv_state = 'DELETE' THEN 3 WHEN kv_state = 'UNCHANGE' THEN 4 END,`key` asc" + if opt.Page.Order == types.Descending { q = q.Order(orderCol.Desc()) } else if len(opt.TopIDs) != 0 { - q = q.Order(utils.NewCustomExpr("CASE WHEN id IN (?) THEN 0 ELSE 1 END,`key` asc", []interface{}{opt.TopIDs})) + q = q.Order(utils.NewCustomExpr("CASE WHEN id IN (?) THEN 0 ELSE 1 END, "+orderStr, []interface{}{opt.TopIDs})) } else { - q = q.Order(orderCol) + q = q.Order(utils.NewCustomExpr(orderStr, nil)) } if opt.SearchKey != "" { @@ -160,6 +165,17 @@ func (dao *kvDao) List(kit *kit.Kit, opt *types.ListKvOption) ([]*table.Kv, int6 q = q.Where(q.Where(q.Or(m.Key.Like(searchKey)).Or(m.Creator.Like(searchKey)).Or(m.Reviser.Like(searchKey)))) } + switch strings.ToUpper(opt.Status) { + case string(table.KvStateAdd): + q = q.Where(m.KvState.Eq(string(table.KvStateAdd))) + case string(table.KvStateDelete): + q = q.Where(m.KvState.Eq(string(table.KvStateDelete))) + case string(table.KvStateRevise): + q = q.Where(m.KvState.Eq(string(table.KvStateRevise))) + case string(table.KvStateUnchange): + q = q.Where(m.KvState.Eq(string(table.KvStateUnchange))) + } + q = q.Where(m.BizID.Eq(opt.BizID)).Where(m.AppID.Eq(opt.AppID)) if len(opt.KvType) > 0 { diff --git a/bcs-services/bcs-bscp/pkg/dal/dao/released_app_template.go b/bcs-services/bcs-bscp/pkg/dal/dao/released_app_template.go index 7eb33d2890..a619feccdb 100644 --- a/bcs-services/bcs-bscp/pkg/dal/dao/released_app_template.go +++ b/bcs-services/bcs-bscp/pkg/dal/dao/released_app_template.go @@ -20,6 +20,7 @@ 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/dal/utils" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/search" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/types" @@ -140,9 +141,12 @@ func (dao *releasedAppTemplateDao) GetReleasedLately(kit *kit.Kit, bizID, appId []*table.ReleasedAppTemplate, error) { m := dao.genQ.ReleasedAppTemplate q := dao.genQ.ReleasedAppTemplate.WithContext(kit.Ctx) - query := q.Where(m.BizID.Eq(bizID), m.AppID.Eq(appId)) - subQuery := q.Where(m.BizID.Eq(bizID), m.AppID.Eq(appId)).Order(m.ReleaseID.Desc()).Limit(1).Select(m.ReleaseID) + subQuery := q.Where(m.BizID.Eq(bizID), m.AppID.Eq(appId)). + Order(m.ReleaseID.Desc(), utils.NewCustomExpr("CASE WHEN RIGHT(path, 1) = '/' THEN CONCAT(path,'name') ELSE "+ + "CONCAT_WS('/', path, 'name') END", nil)). + Limit(1). + Select(m.ReleaseID) return query.Where(q.Columns(m.ReleaseID).Eq(subQuery)).Find() } diff --git a/bcs-services/bcs-bscp/pkg/dal/dao/template.go b/bcs-services/bcs-bscp/pkg/dal/dao/template.go index a8d2d2a2f7..7ece750d44 100644 --- a/bcs-services/bcs-bscp/pkg/dal/dao/template.go +++ b/bcs-services/bcs-bscp/pkg/dal/dao/template.go @@ -236,9 +236,12 @@ func (dao *templateDao) List(kit *kit.Kit, bizID, templateSpaceID uint32, s sear } d := q.Where(m.BizID.Eq(bizID), m.TemplateSpaceID.Eq(templateSpaceID)).Where(conds...) if len(topIds) != 0 { - d = d.Order(utils.NewCustomExpr(`CASE WHEN id IN (?) THEN 0 ELSE 1 END,path,name ASC`, []interface{}{topIds})) + d = d.Order(utils.NewCustomExpr("CASE WHEN id IN (?) THEN 0 ELSE 1 END,"+ + "CASE WHEN RIGHT(path, 1) = '/' THEN CONCAT(path,'name') ELSE CONCAT_WS('/', path, 'name') END", + []interface{}{topIds})) } else { - d = d.Order(m.Path, m.Name) + d = d.Order(utils.NewCustomExpr("CASE WHEN RIGHT(path, 1) = '/' THEN CONCAT(path,'name') ELSE "+ + "CONCAT_WS('/', path, 'name') END", nil)) } if opt.All { @@ -343,7 +346,9 @@ func (dao *templateDao) GetByID(kit *kit.Kit, bizID, templateID uint32) (*table. func (dao *templateDao) ListByIDs(kit *kit.Kit, ids []uint32) ([]*table.Template, error) { m := dao.genQ.Template q := dao.genQ.Template.WithContext(kit.Ctx) - result, err := q.Where(m.ID.In(ids...)).Find() + result, err := q.Where(m.ID.In(ids...)). + Order(utils.NewCustomExpr("CASE WHEN RIGHT(path, 1) = '/' THEN CONCAT(path,'name') "+ + "ELSE CONCAT_WS('/', path, 'name') END", nil)).Find() if err != nil { return nil, err } diff --git a/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.pb.go b/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.pb.go index d9fb13ce1d..df6de1f821 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.pb.go @@ -2342,6 +2342,8 @@ type ListConfigItemsReq struct { Ids string `protobuf:"bytes,7,opt,name=ids,proto3" json:"ids,omitempty"` All bool `protobuf:"varint,8,opt,name=all,proto3" json:"all,omitempty"` WithStatus bool `protobuf:"varint,9,opt,name=with_status,json=withStatus,proto3" json:"with_status,omitempty"` + // ADD、REVISE、DELETE、UNCHANGE + Status string `protobuf:"bytes,10,opt,name=status,proto3" json:"status,omitempty"` } func (x *ListConfigItemsReq) Reset() { @@ -2439,6 +2441,13 @@ func (x *ListConfigItemsReq) GetWithStatus() bool { return false } +func (x *ListConfigItemsReq) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + type ListConfigItemsResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -14949,6 +14958,8 @@ type ListKvsReq struct { Sort string `protobuf:"bytes,12,opt,name=sort,proto3" json:"sort,omitempty"` Order string `protobuf:"bytes,13,opt,name=order,proto3" json:"order,omitempty"` TopIds string `protobuf:"bytes,14,opt,name=top_ids,json=topIds,proto3" json:"top_ids,omitempty"` + // ADD、REVISE、DELETE、UNCHANGE + Status string `protobuf:"bytes,15,opt,name=status,proto3" json:"status,omitempty"` } func (x *ListKvsReq) Reset() { @@ -15081,6 +15092,13 @@ func (x *ListKvsReq) GetTopIds() string { return "" } +func (x *ListKvsReq) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + type ListKvsResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -17053,7 +17071,7 @@ var file_config_service_proto_rawDesc = []byte{ 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, 0xfb, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 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, @@ -17068,827 +17086,624 @@ var file_config_service_proto_rawDesc = []byte{ 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 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, 0x22, - 0x57, 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, 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, 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, + 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, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x57, 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, + 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, 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, 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, - 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, 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, 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, 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, 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, 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, 0x8e, 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, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x74, 0x61, 0x67, 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, 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, 0xc0, 0x01, - 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, + 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, 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, 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, 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, - 0x22, 0x80, 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, 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, 0x75, 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, 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, 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, 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, 0xcd, 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, 0x10, - 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, - 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, + 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, 0x8e, 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, 0x10, 0x0a, 0x03, 0x74, 0x61, + 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 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, 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, 0xc0, 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, 0x22, 0x80, 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, 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, 0x75, 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, 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, + 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, 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, - 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, + 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, + 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, 0xcd, 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, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 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, 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, - 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, + 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, 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, + 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, 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, 0x9d, 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, 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, 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, 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, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, - 0x6f, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8d, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, - 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, 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, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x94, 0x01, - 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, + 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, - 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, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x14, - 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, - 0x6f, 0x72, 0x63, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, - 0xed, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 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, 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, 0x69, - 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x10, 0x0a, - 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, - 0x59, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 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, 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, 0xa7, 0x03, 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, 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, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 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, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x1a, 0x8e, 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, - 0x70, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x04, 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, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, - 0x6d, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x07, 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, 0x08, 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, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, - 0x65, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, - 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, 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, 0xa7, 0x01, 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, 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, 0xac, 0x01, 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, 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, 0x22, 0x1d, 0x0a, 0x1b, 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, 0x73, 0x70, 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, 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, + 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, 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, + 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, - 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, + 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, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, - 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 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, 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, + 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, 0x9d, 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, 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, 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, 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, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x8d, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 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, 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, 0x66, 0x6f, 0x72, + 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, + 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x94, 0x01, 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, + 0x65, 0x6c, 0x65, 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, 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, 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, + 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x19, 0x0a, 0x17, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0xed, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 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, + 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, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x59, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 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, 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, 0xa7, 0x03, 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, 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, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x22, 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, 0x2e, + 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x8e, 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, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, + 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 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, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, + 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, + 0x65, 0x72, 0x18, 0x07, 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, 0x08, 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, 0x09, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, + 0x69, 0x67, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 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, 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, 0xa7, 0x01, 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, 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, 0xac, + 0x01, 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, 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, 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, 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, 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, - 0x22, 0x1c, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 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, 0xdb, - 0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 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, 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, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, - 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x1d, 0x0a, - 0x0a, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x0d, 0x52, 0x09, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x70, 0x70, 0x73, 0x22, 0x27, 0x0a, 0x15, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x99, 0x02, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 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, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, - 0x6f, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x49, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x1d, 0x0a, 0x0a, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0d, - 0x52, 0x09, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, - 0x6f, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, - 0x65, 0x22, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x97, 0x01, 0x0a, 0x14, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 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, 0x14, - 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, - 0x6f, 0x72, 0x63, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 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, + 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, 0x22, 0x1d, 0x0a, + 0x1b, 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, 0x73, 0x70, 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, @@ -17900,789 +17715,995 @@ var file_config_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, 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, 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, 0x43, 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, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, + 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, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x02, 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, 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, 0x7f, 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, 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, 0x32, 0x0a, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x18, 0x03, 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, 0x2e, 0x0a, 0x1c, 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, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x9e, 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, 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, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x18, 0x04, 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, 0x1e, 0x0a, 0x1c, 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, 0x6a, 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, 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, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x49, 0x64, 0x22, 0x1e, 0x0a, 0x1c, 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, 0x4a, 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, 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, 0xb5, 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, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x22, 0x60, 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, 0x3f, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 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, 0x52, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xbb, 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, 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, 0x22, 0x70, 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, 0x47, 0x0a, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 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, 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, - 0xa1, 0x01, 0x0a, 0x1e, 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, 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, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, - 0x32, 0x0a, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, 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, 0x21, 0x0a, 0x1f, 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, 0x92, 0x01, 0x0a, 0x19, 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, 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, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, - 0x64, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, - 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x22, 0x1c, 0x0a, 0x1a, 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, 0x7e, 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, 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, 0x32, 0x0a, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x18, 0x03, 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, 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, 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, + 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, 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, + 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, + 0x01, 0x28, 0x09, 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, 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, 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, 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, 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, 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, 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, 0x1c, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 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, 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, 0x01, 0x28, 0x09, 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, 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, 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, 0x01, 0x28, 0x09, - 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, + 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, 0xdb, 0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 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, 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, 0x21, 0x0a, 0x0c, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, + 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x61, + 0x70, 0x70, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x41, 0x70, 0x70, 0x73, 0x22, 0x27, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x99, 0x02, + 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 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, 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, + 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, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, 0x52, + 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x61, 0x70, + 0x70, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x41, + 0x70, 0x70, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x97, 0x01, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 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, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x17, 0x0a, 0x15, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 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, 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, 0x8f, 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, 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, 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, 0x43, 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, 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, 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, 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, + 0x7f, 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, 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, 0x32, 0x0a, 0x08, + 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 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, 0x2e, 0x0a, 0x1c, 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, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, + 0x22, 0x9e, 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, 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, - 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, - 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x2c, 0x0a, 0x1a, 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, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, - 0x69, 0x64, 0x22, 0x99, 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, + 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, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x09, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x32, 0x0a, + 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, 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, 0x1e, 0x0a, 0x1c, 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, 0x6a, 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, 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, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, - 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x1c, - 0x0a, 0x1a, 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, 0x64, 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, 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, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x49, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 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, 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, - 0x6f, 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, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 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, 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, + 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, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x09, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x22, 0x1e, 0x0a, + 0x1c, 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, 0x4a, 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, 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, 0xb5, 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, 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, + 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, 0x1f, 0x0a, 0x0b, 0x77, 0x69, + 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x60, 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, 0x3f, 0x0a, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 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, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xbb, 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, + 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, 0x22, 0x70, 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, 0x47, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 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, 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, 0xa1, 0x01, 0x0a, 0x1e, 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, 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, 0x62, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x73, 0x18, 0x04, 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, 0x21, 0x0a, 0x1f, 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, 0x92, + 0x01, 0x0a, 0x19, 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, 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, 0x62, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, + 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, + 0x49, 0x64, 0x73, 0x22, 0x1c, 0x0a, 0x1a, 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, 0x7e, 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, + 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, 0x32, 0x0a, + 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 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, 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, 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, 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, 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, - 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, + 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, 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, 0x01, + 0x28, 0x09, 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, 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, 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, 0x01, 0x28, 0x09, 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, 0x8f, 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, 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, 0x83, 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, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, + 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, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x2c, 0x0a, 0x1a, + 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, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x99, 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, 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, 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, - 0x22, 0x1c, 0x0a, 0x1a, 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, - 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, + 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, + 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x1c, 0x0a, 0x1a, 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, 0x64, 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, 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, 0x14, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 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, 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, 0x6f, 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, 0x1c, 0x0a, 0x09, + 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 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, 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, 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, + 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, 0x83, 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, 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, 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, 0x22, 0x1c, 0x0a, 0x1a, 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, 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, 0xcb, 0x01, 0x0a, 0x0e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 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, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0d, 0x52, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x12, + 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, + 0x64, 0x65, 0x12, 0x33, 0x0a, 0x08, 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, 0x08, 0x73, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0x21, 0x0a, 0x0f, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0xe6, 0x01, 0x0a, + 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 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, 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, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x1b, 0x0a, + 0x09, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, + 0x52, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, + 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x33, + 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x07, 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, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0x11, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, 0x42, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 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, 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, 0x22, 0x11, 0x0a, 0x0f, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x29, 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, 0x22, 0xa2, 0x03, 0x0a, 0x11, 0x4c, + 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 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, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0xc7, 0x02, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, + 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 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, + 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x4e, 0x0a, 0x09, 0x62, 0x69, 0x6e, 0x64, 0x5f, + 0x61, 0x70, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x73, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x70, 0x70, 0x52, 0x08, 0x62, + 0x69, 0x6e, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x33, 0x0a, 0x08, 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, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x11, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x5f, 0x6e, 0x75, + 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x64, 0x41, 0x70, 0x70, 0x73, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, + 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, + 0x1a, 0x2d, 0x0a, 0x07, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x70, 0x70, 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, + 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, 0x63, 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, 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, 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, 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, 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, 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, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x22, 0xcb, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, - 0x6f, 0x75, 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, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x69, 0x6e, - 0x64, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x08, 0x62, 0x69, - 0x6e, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x33, 0x0a, 0x08, 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, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, - 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, - 0x64, 0x22, 0x21, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, + 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, 0x2f, 0x0a, 0x1d, 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, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x48, 0x0a, 0x0b, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 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, 0x22, 0x7c, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 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, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x1e, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x02, 0x69, 0x64, 0x22, 0xe6, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, - 0x72, 0x6f, 0x75, 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, 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, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x61, 0x70, - 0x70, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x41, 0x70, - 0x70, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x18, 0x07, 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, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, - 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0x11, 0x0a, - 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x42, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 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, 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, 0x22, 0x11, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, 0x29, 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, 0x22, 0xa2, 0x03, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 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, 0x63, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0xc7, 0x02, - 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x44, - 0x61, 0x74, 0x61, 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, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, - 0x4e, 0x0a, 0x09, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, - 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x69, - 0x6e, 0x64, 0x41, 0x70, 0x70, 0x52, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, - 0x33, 0x0a, 0x08, 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, 0x08, 0x73, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, - 0x5f, 0x61, 0x70, 0x70, 0x73, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x4e, 0x75, 0x6d, - 0x12, 0x16, 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x1a, 0x2d, 0x0a, 0x07, 0x42, 0x69, 0x6e, 0x64, - 0x41, 0x70, 0x70, 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, 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, 0x63, 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, 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, 0x02, 0x69, 0x64, 0x22, 0x63, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 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, 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, 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, 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, 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, + 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, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x0e, 0x0a, 0x0c, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 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, - 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, 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, 0x2f, 0x0a, 0x1d, 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, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x48, 0x0a, 0x0b, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 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, 0x22, 0x7c, - 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 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, 0x12, 0x17, 0x0a, - 0x07, 0x6b, 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x6b, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x1e, 0x0a, 0x0c, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x63, 0x0a, 0x0b, - 0x55, 0x70, 0x64, 0x61, 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, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x0e, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, - 0x70, 0x22, 0xee, 0x02, 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, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x49, - 0x64, 0x73, 0x22, 0x47, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, + 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, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x49, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x47, 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, diff --git a/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.proto b/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.proto index 341812d62b..788a14f78c 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.proto +++ b/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.proto @@ -977,6 +977,8 @@ message ListConfigItemsReq { string ids = 7; bool all = 8; bool with_status = 9; + // ADD、REVISE、DELETE、UNCHANGE + string status = 10; } message ListConfigItemsResp { @@ -2249,6 +2251,8 @@ message ListKvsReq { string sort = 12; string order = 13; string top_ids = 14; + // ADD、REVISE、DELETE、UNCHANGE + string status = 15; } message ListKvsResp { diff --git a/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service_grpc.pb.go b/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service_grpc.pb.go index abaabb692d..7576c0e290 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service_grpc.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service_grpc.pb.go @@ -222,12 +222,12 @@ type ConfigClient interface { CreateTemplateRevision(ctx context.Context, in *CreateTemplateRevisionReq, opts ...grpc.CallOption) (*CreateTemplateRevisionResp, error) ListTemplateRevisions(ctx context.Context, in *ListTemplateRevisionsReq, opts ...grpc.CallOption) (*ListTemplateRevisionsResp, error) // 暂时不对外开发(删除模版后,服务引用的latest版本会回退到上一个老版本) - //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}" - //}; - //} + // 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}" + // }; + // } 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) @@ -1498,12 +1498,12 @@ type ConfigServer interface { CreateTemplateRevision(context.Context, *CreateTemplateRevisionReq) (*CreateTemplateRevisionResp, error) ListTemplateRevisions(context.Context, *ListTemplateRevisionsReq) (*ListTemplateRevisionsResp, error) // 暂时不对外开发(删除模版后,服务引用的latest版本会回退到上一个老版本) - //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}" - //}; - //} + // 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}" + // }; + // } ListTemplateRevisionsByIDs(context.Context, *ListTemplateRevisionsByIDsReq) (*ListTemplateRevisionsByIDsResp, error) ListTmplRevisionNamesByTmplIDs(context.Context, *ListTmplRevisionNamesByTmplIDsReq) (*ListTmplRevisionNamesByTmplIDsResp, error) CreateTemplateSet(context.Context, *CreateTemplateSetReq) (*CreateTemplateSetResp, error) diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/released-ci/convert.go b/bcs-services/bcs-bscp/pkg/protocol/core/released-ci/convert.go index 6ac612dcea..82723e6d6f 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/released-ci/convert.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/released-ci/convert.go @@ -14,6 +14,9 @@ package pbrci import ( + "path" + "sort" + "strings" "time" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/criteria/constant" @@ -131,7 +134,7 @@ func PbConfigItem(rci *table.ReleasedConfigItem, fileState string) *pbci.ConfigI // PbConfigItemState convert config item state func PbConfigItemState(cis []*table.ConfigItem, fileRelease []*table.ReleasedConfigItem, - commits []*table.Commit) []*pbci.ConfigItem { + commits []*table.Commit, status string) []*pbci.ConfigItem { releaseMap := make(map[uint32]*table.ReleasedConfigItem, len(fileRelease)) for _, release := range fileRelease { releaseMap[release.ConfigItemID] = release @@ -164,11 +167,17 @@ func PbConfigItemState(cis []*table.ConfigItem, fileRelease []*table.ReleasedCon for _, file := range releaseMap { result = append(result, PbConfigItem(file, constant.FileStateDelete)) } - return sortConfigItemsByState(result) + // 先按照path+name排序好 + sort.SliceStable(result, func(i, j int) bool { + iPath := path.Join(result[i].Spec.Path, result[i].Spec.Name) + jPath := path.Join(result[j].Spec.Path, result[j].Spec.Name) + return iPath < jPath + }) + return sortConfigItemsByState(result, status) } -// sortConfigItemsByState sort as add > revise > unchange > delete -func sortConfigItemsByState(cis []*pbci.ConfigItem) []*pbci.ConfigItem { +// sortConfigItemsByState sort as add > revise > delete > unchange +func sortConfigItemsByState(cis []*pbci.ConfigItem, status string) []*pbci.ConfigItem { result := make([]*pbci.ConfigItem, 0) add := make([]*pbci.ConfigItem, 0) del := make([]*pbci.ConfigItem, 0) @@ -186,9 +195,21 @@ func sortConfigItemsByState(cis []*pbci.ConfigItem) []*pbci.ConfigItem { unchange = append(unchange, ci) } } + // 判断是否有过滤 + switch strings.ToUpper(status) { + case constant.FileStateAdd: + return add + case constant.FileStateDelete: + return del + case constant.FileStateRevise: + return revise + case constant.FileStateUnchange: + return unchange + } result = append(result, add...) result = append(result, revise...) - result = append(result, unchange...) result = append(result, del...) + result = append(result, unchange...) + return result } diff --git a/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service.pb.go b/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service.pb.go index f1e2a767a9..e9f423fc35 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service.pb.go @@ -1896,6 +1896,8 @@ type ListConfigItemsReq struct { Ids string `protobuf:"bytes,7,opt,name=ids,proto3" json:"ids,omitempty"` All bool `protobuf:"varint,8,opt,name=all,proto3" json:"all,omitempty"` WithStatus bool `protobuf:"varint,9,opt,name=with_status,json=withStatus,proto3" json:"with_status,omitempty"` + // ADD、REVISE、DELETE、UNCHANGE + Status string `protobuf:"bytes,10,opt,name=status,proto3" json:"status,omitempty"` } func (x *ListConfigItemsReq) Reset() { @@ -1993,6 +1995,13 @@ func (x *ListConfigItemsReq) GetWithStatus() bool { return false } +func (x *ListConfigItemsReq) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + type ListConfigItemsResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -12966,6 +12975,8 @@ type ListKvsReq struct { Sort string `protobuf:"bytes,12,opt,name=sort,proto3" json:"sort,omitempty"` Order string `protobuf:"bytes,13,opt,name=order,proto3" json:"order,omitempty"` TopIds string `protobuf:"bytes,14,opt,name=top_ids,json=topIds,proto3" json:"top_ids,omitempty"` + // ADD、REVISE、DELETE、UNCHANGE + Status string `protobuf:"bytes,15,opt,name=status,proto3" json:"status,omitempty"` } func (x *ListKvsReq) Reset() { @@ -13098,6 +13109,13 @@ func (x *ListKvsReq) GetTopIds() string { return "" } +func (x *ListKvsReq) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + type ListKvsResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -14771,7 +14789,7 @@ var file_data_service_proto_rawDesc = []byte{ 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, 0xfb, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 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, @@ -14787,1541 +14805,1544 @@ var file_data_service_proto_rawDesc = []byte{ 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, 0x22, 0x57, 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, 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, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x57, 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, 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, - 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x46, 0x0a, 0x16, 0x4c, 0x69, 0x73, + 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, 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, - 0x39, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, - 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, 0x2e, 0x49, - 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x5c, 0x0a, 0x04, 0x49, 0x74, - 0x65, 0x6d, 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, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x50, 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, 0x33, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, - 0x69, 0x74, 0x65, 0x6d, 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, 0x0b, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x7c, 0x0a, 0x10, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x3c, - 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x04, - 0x73, 0x70, 0x65, 0x63, 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, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x4d, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 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, 0x80, 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x12, 0x3a, 0x0a, 0x0a, 0x61, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x68, 0x0a, 0x12, 0x47, 0x65, - 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 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, 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, 0xb6, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0a, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, - 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, 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, - 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 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, 0x1c, 0x0a, - 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 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, + 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, 0x39, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 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, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x1a, 0x5c, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 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, 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, - 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, + 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, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x22, 0x50, 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, 0x33, 0x0a, + 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 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, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x22, 0x7c, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x41, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 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, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x22, 0x4d, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 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, + 0x80, 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x52, 0x65, 0x71, 0x12, 0x3a, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, + 0x6d, 0x6f, 0x22, 0x68, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 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, 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, 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, + 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, 0xb6, 0x01, 0x0a, + 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, + 0x71, 0x12, 0x3c, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x2a, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 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, 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, 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, 0x85, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x49, 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, 0x71, - 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, + 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, + 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, + 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 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, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, + 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x4b, 0x65, 0x79, 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, 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, 0x92, 0x02, 0x0a, 0x11, 0x4c, 0x69, 0x73, 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, 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, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, - 0x61, 0x6c, 0x6c, 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, 0x57, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 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, - 0x6d, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, - 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, - 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, 0x24, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x2e, - 0x48, 0x6f, 0x6f, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x27, - 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, + 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, 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, 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, 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, 0x64, 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, 0xee, 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, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x74, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4e, 0x75, 0x6d, 0x12, 0x3a, 0x0a, 0x08, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, - 0x64, 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, 0xc0, 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, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x74, 0x5f, 0x74, - 0x61, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x74, 0x54, 0x61, 0x67, - 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, 0x1c, 0x0a, 0x09, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x22, 0x80, 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, 0x64, 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, 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, 0x42, 0x0a, - 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 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, 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, 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, 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, 0x55, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 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, 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, 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, 0x81, 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, 0x3c, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, - 0x6b, 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, 0x12, - 0x2a, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 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, 0x64, 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, 0x58, 0x0a, 0x16, 0x47, - 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, - 0x49, 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, 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, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x02, 0x69, 0x64, 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, 0x58, 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, + 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, 0x85, + 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x49, + 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, 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, 0x92, 0x02, 0x0a, 0x11, 0x4c, 0x69, + 0x73, 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, 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, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, - 0x58, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x79, 0x50, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, + 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, 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, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 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, 0x57, + 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, + 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, 0x6d, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 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, 0x24, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x70, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x53, 0x70, 0x65, 0x63, + 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x27, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, + 0x6f, 0x6b, 0x54, 0x61, 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, 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, + 0x64, 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, 0xee, + 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, 0x10, 0x0a, 0x03, 0x74, 0x61, + 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, + 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, + 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x6e, 0x75, 0x6d, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4e, 0x75, + 0x6d, 0x12, 0x3a, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x64, 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, + 0xc0, 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, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, + 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x06, 0x6e, 0x6f, 0x74, 0x54, 0x61, 0x67, 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, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, + 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, + 0x65, 0x79, 0x22, 0x80, 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, + 0x64, 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, + 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, 0x42, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, + 0x6b, 0x54, 0x61, 0x67, 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, 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, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x91, 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, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, - 0x6f, 0x6f, 0x6b, 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, 0x12, 0x2a, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 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, 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, 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, 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, 0xe3, 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, 0x64, 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, 0x64, 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, 0xd6, 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, 0x12, 0x0a, - 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, - 0x6f, 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, 0x84, 0x01, 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, 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, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 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, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, - 0x65, 0x63, 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, + 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, 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, 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, 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, + 0x81, 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, 0x3c, 0x0a, 0x0a, 0x61, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 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, 0x12, 0x2a, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, + 0x70, 0x65, 0x63, 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, 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, + 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, 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, 0x94, 0x01, 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, 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, 0x2e, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 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, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, - 0x67, 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, 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, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, - 0x63, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 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, 0x2a, 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, 0x10, 0x0a, - 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 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, + 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, 0x64, 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, 0x58, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x49, 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, 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, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 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, 0x58, 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, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x58, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x79, + 0x50, 0x75, 0x62, 0x53, 0x74, 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, 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, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x22, 0x91, 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, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0a, 0x61, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 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, 0x12, 0x2a, 0x0a, 0x04, 0x73, 0x70, 0x65, + 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x04, 0x73, 0x70, 0x65, 0x63, 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, 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, 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, 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, 0xe3, 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, 0x64, 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, 0x64, 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, 0xd6, 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, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 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, 0x84, 0x01, 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, 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, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 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, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xe0, 0x01, 0x0a, 0x11, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, - 0x3e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 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, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x33, 0x0a, - 0x07, 0x74, 0x72, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x06, 0x74, 0x72, 0x53, 0x70, - 0x65, 0x63, 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, 0x22, 0xed, 0x01, 0x0a, - 0x10, 0x4c, 0x69, 0x73, 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, 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, 0x69, 0x64, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, - 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x59, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 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, 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, 0x91, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, - 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 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, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x79, 0x0a, 0x11, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x3e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 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, 0x94, 0x01, 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, 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, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x70, 0x61, 0x63, 0x65, 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, 0x2e, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, + 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x67, 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, 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, 0x2e, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 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, 0x80, 0x01, 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, - 0x69, 0x64, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 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, 0xa7, 0x01, 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, 0x22, 0xac, 0x01, 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, 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, 0x22, 0x29, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 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, 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, 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, 0x01, 0x28, 0x09, 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, 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, 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 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, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x1a, 0x71, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, + 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, 0x2a, 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, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 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, 0xe0, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, + 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 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, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x72, 0x5f, 0x73, 0x70, 0x65, 0x63, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x06, 0x74, 0x72, 0x53, 0x70, 0x65, 0x63, 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, 0x22, 0xed, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 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, 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, 0x22, 0xd8, 0x01, 0x0a, 0x1a, 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, 0x12, 0x3b, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x25, 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, 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, - 0xd2, 0x01, 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, 0x38, 0x0a, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 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, 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, 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, 0x8d, 0x01, 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, 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, 0x72, 0x2e, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x41, + 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, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x69, + 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x59, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 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, + 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, + 0x91, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 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, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x04, 0x73, 0x70, 0x65, 0x63, 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, + 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x22, 0x79, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, + 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 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, 0x80, + 0x01, 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x61, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 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, 0xa7, 0x01, 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, 0x22, 0xac, 0x01, 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, 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, 0x22, 0x29, 0x0a, 0x15, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 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, 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, 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, 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, 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, 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, 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, + 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, 0x01, 0x28, 0x09, 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, 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, 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x21, 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, 0x2e, 0x49, 0x74, + 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x71, 0x0a, 0x04, 0x49, 0x74, 0x65, + 0x6d, 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, 0x22, 0xd8, 0x01, 0x0a, + 0x1a, 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, 0x12, 0x3b, 0x0a, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 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, 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, 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, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xd2, 0x01, 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, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x22, 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, 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, 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, 0x8d, 0x01, + 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, 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, 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, 0x12, 0x2e, 0x0a, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, + 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 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, 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, 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, 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, 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, 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, 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, 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, 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, + 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, - 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, 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, 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, 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, + 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, 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, 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, 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, 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, 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, + 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, 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, 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, + 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, 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, + 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, + 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, 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, + 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, 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, 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, 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, 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, + 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, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x80, 0x01, 0x0a, 0x22, + 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, 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, - 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, 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, 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, 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, 0x29, 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, 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, + 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, 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, 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, + 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, 0x41, 0x74, 0x74, 0x61, 0x63, + 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, + 0x74, 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, 0x29, 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, + 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, - 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, 0x7b, 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, 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, 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, 0xee, - 0x02, 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, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x49, 0x64, 0x73, 0x22, + 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, 0x7b, 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, 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, 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, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x74, 0x6f, 0x70, 0x49, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x47, 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, diff --git a/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service.proto b/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service.proto index 3ccd5a8a2f..10147bcdda 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service.proto +++ b/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service.proto @@ -409,6 +409,8 @@ message ListConfigItemsReq { string ids = 7; bool all = 8; bool with_status = 9; + // ADD、REVISE、DELETE、UNCHANGE + string status = 10; } message ListConfigItemsResp { @@ -1553,6 +1555,8 @@ message ListKvsReq { string sort = 12; string order = 13; string top_ids = 14; + // ADD、REVISE、DELETE、UNCHANGE + string status = 15; } message ListKvsResp { diff --git a/bcs-services/bcs-bscp/pkg/types/kv.go b/bcs-services/bcs-bscp/pkg/types/kv.go index e966d86076..877cdcf7cc 100644 --- a/bcs-services/bcs-bscp/pkg/types/kv.go +++ b/bcs-services/bcs-bscp/pkg/types/kv.go @@ -139,6 +139,7 @@ type ListKvOption struct { IDs []uint32 `json:"ids"` KvType []string `json:"kv_type"` TopIDs []uint32 `json:"top_ids"` + Status string `json:"status"` } // Validate is used to validate the effectiveness of the ListKvOption structure. diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.go b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.go index 4e6e11afda..663d40c6da 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.go +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.go @@ -8611,7 +8611,7 @@ type CreateClusterReq struct { FederationClusterID string `protobuf:"bytes,12,opt,name=federationClusterID,proto3" json:"federationClusterID,omitempty"` Labels map[string]string `protobuf:"bytes,13,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Creator string `protobuf:"bytes,14,opt,name=creator,proto3" json:"creator,omitempty"` - // 集群创建的控制信息 + //集群创建的控制信息 OnlyCreateInfo bool `protobuf:"varint,15,opt,name=onlyCreateInfo,proto3" json:"onlyCreateInfo,omitempty"` BcsAddons map[string]*BKOpsPlugin `protobuf:"bytes,17,rep,name=bcsAddons,proto3" json:"bcsAddons,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` ExtraAddons map[string]*BKOpsPlugin `protobuf:"bytes,18,rep,name=extraAddons,proto3" json:"extraAddons,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` @@ -9619,6 +9619,7 @@ type KubeConfigConnectReq struct { CloudID string `protobuf:"bytes,3,opt,name=cloudID,proto3" json:"cloudID,omitempty"` AccountID string `protobuf:"bytes,4,opt,name=accountID,proto3" json:"accountID,omitempty"` Region string `protobuf:"bytes,5,opt,name=region,proto3" json:"region,omitempty"` + ResourceGroupName string `protobuf:"bytes,6,opt,name=resourceGroupName,proto3" json:"resourceGroupName,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-" bson:"-"` XXX_unrecognized []byte `json:"-" bson:"-"` XXX_sizecache int32 `json:"-" bson:"-"` @@ -9684,6 +9685,13 @@ func (m *KubeConfigConnectReq) GetRegion() string { return "" } +func (m *KubeConfigConnectReq) GetResourceGroupName() string { + if m != nil { + return m.ResourceGroupName + } + return "" +} + type KubeConfigResp struct { Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` @@ -20795,6 +20803,171 @@ func (m *UpdateAutoScalingStatusResponse) GetWebAnnotations() *WebAnnotationsV2 return nil } +type ResourceGroupInfo struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Region string `protobuf:"bytes,2,opt,name=region,proto3" json:"region,omitempty"` + ProvisioningState string `protobuf:"bytes,3,opt,name=provisioningState,proto3" json:"provisioningState,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-" bson:"-"` + XXX_unrecognized []byte `json:"-" bson:"-"` + XXX_sizecache int32 `json:"-" bson:"-"` +} + +func (m *ResourceGroupInfo) Reset() { *m = ResourceGroupInfo{} } +func (m *ResourceGroupInfo) String() string { return proto.CompactTextString(m) } +func (*ResourceGroupInfo) ProtoMessage() {} +func (*ResourceGroupInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_d789ea45d40d7a6b, []int{248} +} + +func (m *ResourceGroupInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ResourceGroupInfo.Unmarshal(m, b) +} +func (m *ResourceGroupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ResourceGroupInfo.Marshal(b, m, deterministic) +} +func (m *ResourceGroupInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceGroupInfo.Merge(m, src) +} +func (m *ResourceGroupInfo) XXX_Size() int { + return xxx_messageInfo_ResourceGroupInfo.Size(m) +} +func (m *ResourceGroupInfo) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceGroupInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_ResourceGroupInfo proto.InternalMessageInfo + +func (m *ResourceGroupInfo) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ResourceGroupInfo) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *ResourceGroupInfo) GetProvisioningState() string { + if m != nil { + return m.ProvisioningState + } + return "" +} + +type GetResourceGroupsRequest struct { + CloudID string `protobuf:"bytes,1,opt,name=cloudID,proto3" json:"cloudID,omitempty"` + AccountID string `protobuf:"bytes,2,opt,name=accountID,proto3" json:"accountID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-" bson:"-"` + XXX_unrecognized []byte `json:"-" bson:"-"` + XXX_sizecache int32 `json:"-" bson:"-"` +} + +func (m *GetResourceGroupsRequest) Reset() { *m = GetResourceGroupsRequest{} } +func (m *GetResourceGroupsRequest) String() string { return proto.CompactTextString(m) } +func (*GetResourceGroupsRequest) ProtoMessage() {} +func (*GetResourceGroupsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d789ea45d40d7a6b, []int{249} +} + +func (m *GetResourceGroupsRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetResourceGroupsRequest.Unmarshal(m, b) +} +func (m *GetResourceGroupsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetResourceGroupsRequest.Marshal(b, m, deterministic) +} +func (m *GetResourceGroupsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetResourceGroupsRequest.Merge(m, src) +} +func (m *GetResourceGroupsRequest) XXX_Size() int { + return xxx_messageInfo_GetResourceGroupsRequest.Size(m) +} +func (m *GetResourceGroupsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetResourceGroupsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetResourceGroupsRequest proto.InternalMessageInfo + +func (m *GetResourceGroupsRequest) GetCloudID() string { + if m != nil { + return m.CloudID + } + return "" +} + +func (m *GetResourceGroupsRequest) GetAccountID() string { + if m != nil { + return m.AccountID + } + return "" +} + +type GetResourceGroupsResponse struct { + Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Result bool `protobuf:"varint,3,opt,name=result,proto3" json:"result,omitempty"` + Data []*ResourceGroupInfo `protobuf:"bytes,4,rep,name=data,proto3" json:"data,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-" bson:"-"` + XXX_unrecognized []byte `json:"-" bson:"-"` + XXX_sizecache int32 `json:"-" bson:"-"` +} + +func (m *GetResourceGroupsResponse) Reset() { *m = GetResourceGroupsResponse{} } +func (m *GetResourceGroupsResponse) String() string { return proto.CompactTextString(m) } +func (*GetResourceGroupsResponse) ProtoMessage() {} +func (*GetResourceGroupsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d789ea45d40d7a6b, []int{250} +} + +func (m *GetResourceGroupsResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetResourceGroupsResponse.Unmarshal(m, b) +} +func (m *GetResourceGroupsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetResourceGroupsResponse.Marshal(b, m, deterministic) +} +func (m *GetResourceGroupsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetResourceGroupsResponse.Merge(m, src) +} +func (m *GetResourceGroupsResponse) XXX_Size() int { + return xxx_messageInfo_GetResourceGroupsResponse.Size(m) +} +func (m *GetResourceGroupsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetResourceGroupsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetResourceGroupsResponse proto.InternalMessageInfo + +func (m *GetResourceGroupsResponse) GetCode() uint32 { + if m != nil { + return m.Code + } + return 0 +} + +func (m *GetResourceGroupsResponse) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +func (m *GetResourceGroupsResponse) GetResult() bool { + if m != nil { + return m.Result + } + return false +} + +func (m *GetResourceGroupsResponse) GetData() []*ResourceGroupInfo { + if m != nil { + return m.Data + } + return nil +} + type RegionInfo struct { Region string `protobuf:"bytes,1,opt,name=region,proto3" json:"region,omitempty"` RegionName string `protobuf:"bytes,2,opt,name=regionName,proto3" json:"regionName,omitempty"` @@ -20808,7 +20981,7 @@ func (m *RegionInfo) Reset() { *m = RegionInfo{} } func (m *RegionInfo) String() string { return proto.CompactTextString(m) } func (*RegionInfo) ProtoMessage() {} func (*RegionInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{248} + return fileDescriptor_d789ea45d40d7a6b, []int{251} } func (m *RegionInfo) XXX_Unmarshal(b []byte) error { @@ -20862,7 +21035,7 @@ func (m *GetCloudRegionsRequest) Reset() { *m = GetCloudRegionsRequest{} func (m *GetCloudRegionsRequest) String() string { return proto.CompactTextString(m) } func (*GetCloudRegionsRequest) ProtoMessage() {} func (*GetCloudRegionsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{249} + return fileDescriptor_d789ea45d40d7a6b, []int{252} } func (m *GetCloudRegionsRequest) XXX_Unmarshal(b []byte) error { @@ -20911,7 +21084,7 @@ func (m *GetCloudRegionsResponse) Reset() { *m = GetCloudRegionsResponse func (m *GetCloudRegionsResponse) String() string { return proto.CompactTextString(m) } func (*GetCloudRegionsResponse) ProtoMessage() {} func (*GetCloudRegionsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{250} + return fileDescriptor_d789ea45d40d7a6b, []int{253} } func (m *GetCloudRegionsResponse) XXX_Unmarshal(b []byte) error { @@ -20975,7 +21148,7 @@ func (m *ZoneInfo) Reset() { *m = ZoneInfo{} } func (m *ZoneInfo) String() string { return proto.CompactTextString(m) } func (*ZoneInfo) ProtoMessage() {} func (*ZoneInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{251} + return fileDescriptor_d789ea45d40d7a6b, []int{254} } func (m *ZoneInfo) XXX_Unmarshal(b []byte) error { @@ -21050,7 +21223,7 @@ func (m *CloudClusterInfo) Reset() { *m = CloudClusterInfo{} } func (m *CloudClusterInfo) String() string { return proto.CompactTextString(m) } func (*CloudClusterInfo) ProtoMessage() {} func (*CloudClusterInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{252} + return fileDescriptor_d789ea45d40d7a6b, []int{255} } func (m *CloudClusterInfo) XXX_Unmarshal(b []byte) error { @@ -21147,7 +21320,7 @@ func (m *ListCloudRegionClusterRequest) Reset() { *m = ListCloudRegionCl func (m *ListCloudRegionClusterRequest) String() string { return proto.CompactTextString(m) } func (*ListCloudRegionClusterRequest) ProtoMessage() {} func (*ListCloudRegionClusterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{253} + return fileDescriptor_d789ea45d40d7a6b, []int{256} } func (m *ListCloudRegionClusterRequest) XXX_Unmarshal(b []byte) error { @@ -21203,7 +21376,7 @@ func (m *ListCloudRegionClusterResponse) Reset() { *m = ListCloudRegionC func (m *ListCloudRegionClusterResponse) String() string { return proto.CompactTextString(m) } func (*ListCloudRegionClusterResponse) ProtoMessage() {} func (*ListCloudRegionClusterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{254} + return fileDescriptor_d789ea45d40d7a6b, []int{257} } func (m *ListCloudRegionClusterResponse) XXX_Unmarshal(b []byte) error { @@ -21267,7 +21440,7 @@ func (m *GetCloudRegionZonesRequest) Reset() { *m = GetCloudRegionZonesR func (m *GetCloudRegionZonesRequest) String() string { return proto.CompactTextString(m) } func (*GetCloudRegionZonesRequest) ProtoMessage() {} func (*GetCloudRegionZonesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{255} + return fileDescriptor_d789ea45d40d7a6b, []int{258} } func (m *GetCloudRegionZonesRequest) XXX_Unmarshal(b []byte) error { @@ -21337,7 +21510,7 @@ func (m *GetCloudRegionZonesResponse) Reset() { *m = GetCloudRegionZones func (m *GetCloudRegionZonesResponse) String() string { return proto.CompactTextString(m) } func (*GetCloudRegionZonesResponse) ProtoMessage() {} func (*GetCloudRegionZonesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{256} + return fileDescriptor_d789ea45d40d7a6b, []int{259} } func (m *GetCloudRegionZonesResponse) XXX_Unmarshal(b []byte) error { @@ -21404,7 +21577,7 @@ func (m *OperationLog) Reset() { *m = OperationLog{} } func (m *OperationLog) String() string { return proto.CompactTextString(m) } func (*OperationLog) ProtoMessage() {} func (*OperationLog) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{257} + return fileDescriptor_d789ea45d40d7a6b, []int{260} } func (m *OperationLog) XXX_Unmarshal(b []byte) error { @@ -21501,7 +21674,7 @@ func (m *TaskOperationLog) Reset() { *m = TaskOperationLog{} } func (m *TaskOperationLog) String() string { return proto.CompactTextString(m) } func (*TaskOperationLog) ProtoMessage() {} func (*TaskOperationLog) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{258} + return fileDescriptor_d789ea45d40d7a6b, []int{261} } func (m *TaskOperationLog) XXX_Unmarshal(b []byte) error { @@ -21612,7 +21785,7 @@ func (m *ListCloudInstanceTypeRequest) Reset() { *m = ListCloudInstanceT func (m *ListCloudInstanceTypeRequest) String() string { return proto.CompactTextString(m) } func (*ListCloudInstanceTypeRequest) ProtoMessage() {} func (*ListCloudInstanceTypeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{259} + return fileDescriptor_d789ea45d40d7a6b, []int{262} } func (m *ListCloudInstanceTypeRequest) XXX_Unmarshal(b []byte) error { @@ -21717,7 +21890,7 @@ func (m *ListCloudInstanceTypeResponse) Reset() { *m = ListCloudInstance func (m *ListCloudInstanceTypeResponse) String() string { return proto.CompactTextString(m) } func (*ListCloudInstanceTypeResponse) ProtoMessage() {} func (*ListCloudInstanceTypeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{260} + return fileDescriptor_d789ea45d40d7a6b, []int{263} } func (m *ListCloudInstanceTypeResponse) XXX_Unmarshal(b []byte) error { @@ -21789,7 +21962,7 @@ func (m *InstanceType) Reset() { *m = InstanceType{} } func (m *InstanceType) String() string { return proto.CompactTextString(m) } func (*InstanceType) ProtoMessage() {} func (*InstanceType) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{261} + return fileDescriptor_d789ea45d40d7a6b, []int{264} } func (m *InstanceType) XXX_Unmarshal(b []byte) error { @@ -21919,7 +22092,7 @@ func (m *GetMasterSuggestedMachinesRequest) Reset() { *m = GetMasterSugg func (m *GetMasterSuggestedMachinesRequest) String() string { return proto.CompactTextString(m) } func (*GetMasterSuggestedMachinesRequest) ProtoMessage() {} func (*GetMasterSuggestedMachinesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{262} + return fileDescriptor_d789ea45d40d7a6b, []int{265} } func (m *GetMasterSuggestedMachinesRequest) XXX_Unmarshal(b []byte) error { @@ -22010,7 +22183,7 @@ func (m *GetMasterSuggestedMachinesResponse) Reset() { *m = GetMasterSug func (m *GetMasterSuggestedMachinesResponse) String() string { return proto.CompactTextString(m) } func (*GetMasterSuggestedMachinesResponse) ProtoMessage() {} func (*GetMasterSuggestedMachinesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{263} + return fileDescriptor_d789ea45d40d7a6b, []int{266} } func (m *GetMasterSuggestedMachinesResponse) XXX_Unmarshal(b []byte) error { @@ -22073,7 +22246,7 @@ func (m *ListCloudInstancesRequest) Reset() { *m = ListCloudInstancesReq func (m *ListCloudInstancesRequest) String() string { return proto.CompactTextString(m) } func (*ListCloudInstancesRequest) ProtoMessage() {} func (*ListCloudInstancesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{264} + return fileDescriptor_d789ea45d40d7a6b, []int{267} } func (m *ListCloudInstancesRequest) XXX_Unmarshal(b []byte) error { @@ -22136,7 +22309,7 @@ func (m *ListCloudInstancesResponse) Reset() { *m = ListCloudInstancesRe func (m *ListCloudInstancesResponse) String() string { return proto.CompactTextString(m) } func (*ListCloudInstancesResponse) ProtoMessage() {} func (*ListCloudInstancesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{265} + return fileDescriptor_d789ea45d40d7a6b, []int{268} } func (m *ListCloudInstancesResponse) XXX_Unmarshal(b []byte) error { @@ -22208,7 +22381,7 @@ func (m *CloudNode) Reset() { *m = CloudNode{} } func (m *CloudNode) String() string { return proto.CompactTextString(m) } func (*CloudNode) ProtoMessage() {} func (*CloudNode) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{266} + return fileDescriptor_d789ea45d40d7a6b, []int{269} } func (m *CloudNode) XXX_Unmarshal(b []byte) error { @@ -22333,7 +22506,7 @@ func (m *GetCloudAccountTypeRequest) Reset() { *m = GetCloudAccountTypeR func (m *GetCloudAccountTypeRequest) String() string { return proto.CompactTextString(m) } func (*GetCloudAccountTypeRequest) ProtoMessage() {} func (*GetCloudAccountTypeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{267} + return fileDescriptor_d789ea45d40d7a6b, []int{270} } func (m *GetCloudAccountTypeRequest) XXX_Unmarshal(b []byte) error { @@ -22389,7 +22562,7 @@ func (m *GetCloudAccountTypeResponse) Reset() { *m = GetCloudAccountType func (m *GetCloudAccountTypeResponse) String() string { return proto.CompactTextString(m) } func (*GetCloudAccountTypeResponse) ProtoMessage() {} func (*GetCloudAccountTypeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{268} + return fileDescriptor_d789ea45d40d7a6b, []int{271} } func (m *GetCloudAccountTypeResponse) XXX_Unmarshal(b []byte) error { @@ -22449,7 +22622,7 @@ func (m *CloudAccountType) Reset() { *m = CloudAccountType{} } func (m *CloudAccountType) String() string { return proto.CompactTextString(m) } func (*CloudAccountType) ProtoMessage() {} func (*CloudAccountType) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{269} + return fileDescriptor_d789ea45d40d7a6b, []int{272} } func (m *CloudAccountType) XXX_Unmarshal(b []byte) error { @@ -22490,7 +22663,7 @@ func (m *GetCloudBandwidthPackagesRequest) Reset() { *m = GetCloudBandwi func (m *GetCloudBandwidthPackagesRequest) String() string { return proto.CompactTextString(m) } func (*GetCloudBandwidthPackagesRequest) ProtoMessage() {} func (*GetCloudBandwidthPackagesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{270} + return fileDescriptor_d789ea45d40d7a6b, []int{273} } func (m *GetCloudBandwidthPackagesRequest) XXX_Unmarshal(b []byte) error { @@ -22546,7 +22719,7 @@ func (m *GetCloudBandwidthPackagesResponse) Reset() { *m = GetCloudBandw func (m *GetCloudBandwidthPackagesResponse) String() string { return proto.CompactTextString(m) } func (*GetCloudBandwidthPackagesResponse) ProtoMessage() {} func (*GetCloudBandwidthPackagesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{271} + return fileDescriptor_d789ea45d40d7a6b, []int{274} } func (m *GetCloudBandwidthPackagesResponse) XXX_Unmarshal(b []byte) error { @@ -22610,7 +22783,7 @@ func (m *BandwidthPackageInfo) Reset() { *m = BandwidthPackageInfo{} } func (m *BandwidthPackageInfo) String() string { return proto.CompactTextString(m) } func (*BandwidthPackageInfo) ProtoMessage() {} func (*BandwidthPackageInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{272} + return fileDescriptor_d789ea45d40d7a6b, []int{275} } func (m *BandwidthPackageInfo) XXX_Unmarshal(b []byte) error { @@ -22681,7 +22854,7 @@ func (m *ListCloudOsImageRequest) Reset() { *m = ListCloudOsImageRequest func (m *ListCloudOsImageRequest) String() string { return proto.CompactTextString(m) } func (*ListCloudOsImageRequest) ProtoMessage() {} func (*ListCloudOsImageRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{273} + return fileDescriptor_d789ea45d40d7a6b, []int{276} } func (m *ListCloudOsImageRequest) XXX_Unmarshal(b []byte) error { @@ -22751,7 +22924,7 @@ func (m *ListCloudOsImageResponse) Reset() { *m = ListCloudOsImageRespon func (m *ListCloudOsImageResponse) String() string { return proto.CompactTextString(m) } func (*ListCloudOsImageResponse) ProtoMessage() {} func (*ListCloudOsImageResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{274} + return fileDescriptor_d789ea45d40d7a6b, []int{277} } func (m *ListCloudOsImageResponse) XXX_Unmarshal(b []byte) error { @@ -22819,7 +22992,7 @@ func (m *OsImage) Reset() { *m = OsImage{} } func (m *OsImage) String() string { return proto.CompactTextString(m) } func (*OsImage) ProtoMessage() {} func (*OsImage) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{275} + return fileDescriptor_d789ea45d40d7a6b, []int{278} } func (m *OsImage) XXX_Unmarshal(b []byte) error { @@ -22915,7 +23088,7 @@ func (m *ClusterInfo) Reset() { *m = ClusterInfo{} } func (m *ClusterInfo) String() string { return proto.CompactTextString(m) } func (*ClusterInfo) ProtoMessage() {} func (*ClusterInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{276} + return fileDescriptor_d789ea45d40d7a6b, []int{279} } func (m *ClusterInfo) XXX_Unmarshal(b []byte) error { @@ -22963,7 +23136,7 @@ func (m *ListCloudProjectsRequest) Reset() { *m = ListCloudProjectsReque func (m *ListCloudProjectsRequest) String() string { return proto.CompactTextString(m) } func (*ListCloudProjectsRequest) ProtoMessage() {} func (*ListCloudProjectsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{277} + return fileDescriptor_d789ea45d40d7a6b, []int{280} } func (m *ListCloudProjectsRequest) XXX_Unmarshal(b []byte) error { @@ -23019,7 +23192,7 @@ func (m *ListCloudProjectsResponse) Reset() { *m = ListCloudProjectsResp func (m *ListCloudProjectsResponse) String() string { return proto.CompactTextString(m) } func (*ListCloudProjectsResponse) ProtoMessage() {} func (*ListCloudProjectsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{278} + return fileDescriptor_d789ea45d40d7a6b, []int{281} } func (m *ListCloudProjectsResponse) XXX_Unmarshal(b []byte) error { @@ -23080,7 +23253,7 @@ func (m *CloudProject) Reset() { *m = CloudProject{} } func (m *CloudProject) String() string { return proto.CompactTextString(m) } func (*CloudProject) ProtoMessage() {} func (*CloudProject) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{279} + return fileDescriptor_d789ea45d40d7a6b, []int{282} } func (m *CloudProject) XXX_Unmarshal(b []byte) error { @@ -23120,6 +23293,7 @@ type ListCloudVpcsRequest struct { Region string `protobuf:"bytes,2,opt,name=region,proto3" json:"region,omitempty"` AccountID string `protobuf:"bytes,3,opt,name=accountID,proto3" json:"accountID,omitempty"` VpcID string `protobuf:"bytes,4,opt,name=vpcID,proto3" json:"vpcID,omitempty"` + ResourceGroupName string `protobuf:"bytes,5,opt,name=resourceGroupName,proto3" json:"resourceGroupName,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-" bson:"-"` XXX_unrecognized []byte `json:"-" bson:"-"` XXX_sizecache int32 `json:"-" bson:"-"` @@ -23129,7 +23303,7 @@ func (m *ListCloudVpcsRequest) Reset() { *m = ListCloudVpcsRequest{} } func (m *ListCloudVpcsRequest) String() string { return proto.CompactTextString(m) } func (*ListCloudVpcsRequest) ProtoMessage() {} func (*ListCloudVpcsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{280} + return fileDescriptor_d789ea45d40d7a6b, []int{283} } func (m *ListCloudVpcsRequest) XXX_Unmarshal(b []byte) error { @@ -23178,6 +23352,13 @@ func (m *ListCloudVpcsRequest) GetVpcID() string { return "" } +func (m *ListCloudVpcsRequest) GetResourceGroupName() string { + if m != nil { + return m.ResourceGroupName + } + return "" +} + type ListCloudVpcsResponse struct { Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` @@ -23192,7 +23373,7 @@ func (m *ListCloudVpcsResponse) Reset() { *m = ListCloudVpcsResponse{} } func (m *ListCloudVpcsResponse) String() string { return proto.CompactTextString(m) } func (*ListCloudVpcsResponse) ProtoMessage() {} func (*ListCloudVpcsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{281} + return fileDescriptor_d789ea45d40d7a6b, []int{284} } func (m *ListCloudVpcsResponse) XXX_Unmarshal(b []byte) error { @@ -23257,7 +23438,7 @@ func (m *CloudVpc) Reset() { *m = CloudVpc{} } func (m *CloudVpc) String() string { return proto.CompactTextString(m) } func (*CloudVpc) ProtoMessage() {} func (*CloudVpc) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{282} + return fileDescriptor_d789ea45d40d7a6b, []int{285} } func (m *CloudVpc) XXX_Unmarshal(b []byte) error { @@ -23333,7 +23514,7 @@ func (m *AssistantCidr) Reset() { *m = AssistantCidr{} } func (m *AssistantCidr) String() string { return proto.CompactTextString(m) } func (*AssistantCidr) ProtoMessage() {} func (*AssistantCidr) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{283} + return fileDescriptor_d789ea45d40d7a6b, []int{286} } func (m *AssistantCidr) XXX_Unmarshal(b []byte) error { @@ -23376,6 +23557,7 @@ type ListCloudSubnetsRequest struct { Zone string `protobuf:"bytes,5,opt,name=zone,proto3" json:"zone,omitempty"` SubnetID string `protobuf:"bytes,6,opt,name=subnetID,proto3" json:"subnetID,omitempty"` InjectCluster bool `protobuf:"varint,7,opt,name=injectCluster,proto3" json:"injectCluster,omitempty"` + ResourceGroupName string `protobuf:"bytes,8,opt,name=resourceGroupName,proto3" json:"resourceGroupName,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-" bson:"-"` XXX_unrecognized []byte `json:"-" bson:"-"` XXX_sizecache int32 `json:"-" bson:"-"` @@ -23385,7 +23567,7 @@ func (m *ListCloudSubnetsRequest) Reset() { *m = ListCloudSubnetsRequest func (m *ListCloudSubnetsRequest) String() string { return proto.CompactTextString(m) } func (*ListCloudSubnetsRequest) ProtoMessage() {} func (*ListCloudSubnetsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{284} + return fileDescriptor_d789ea45d40d7a6b, []int{287} } func (m *ListCloudSubnetsRequest) XXX_Unmarshal(b []byte) error { @@ -23455,6 +23637,13 @@ func (m *ListCloudSubnetsRequest) GetInjectCluster() bool { return false } +func (m *ListCloudSubnetsRequest) GetResourceGroupName() string { + if m != nil { + return m.ResourceGroupName + } + return "" +} + type ListCloudSubnetsResponse struct { Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` @@ -23469,7 +23658,7 @@ func (m *ListCloudSubnetsResponse) Reset() { *m = ListCloudSubnetsRespon func (m *ListCloudSubnetsResponse) String() string { return proto.CompactTextString(m) } func (*ListCloudSubnetsResponse) ProtoMessage() {} func (*ListCloudSubnetsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{285} + return fileDescriptor_d789ea45d40d7a6b, []int{288} } func (m *ListCloudSubnetsResponse) XXX_Unmarshal(b []byte) error { @@ -23537,7 +23726,7 @@ func (m *Subnet) Reset() { *m = Subnet{} } func (m *Subnet) String() string { return proto.CompactTextString(m) } func (*Subnet) ProtoMessage() {} func (*Subnet) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{286} + return fileDescriptor_d789ea45d40d7a6b, []int{289} } func (m *Subnet) XXX_Unmarshal(b []byte) error { @@ -23636,7 +23825,7 @@ func (m *CheckCidrConflictFromVpcRequest) Reset() { *m = CheckCidrConfli func (m *CheckCidrConflictFromVpcRequest) String() string { return proto.CompactTextString(m) } func (*CheckCidrConflictFromVpcRequest) ProtoMessage() {} func (*CheckCidrConflictFromVpcRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{287} + return fileDescriptor_d789ea45d40d7a6b, []int{290} } func (m *CheckCidrConflictFromVpcRequest) XXX_Unmarshal(b []byte) error { @@ -23706,7 +23895,7 @@ func (m *CheckCidrConflictFromVpcResponse) Reset() { *m = CheckCidrConfl func (m *CheckCidrConflictFromVpcResponse) String() string { return proto.CompactTextString(m) } func (*CheckCidrConflictFromVpcResponse) ProtoMessage() {} func (*CheckCidrConflictFromVpcResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{288} + return fileDescriptor_d789ea45d40d7a6b, []int{291} } func (m *CheckCidrConflictFromVpcResponse) XXX_Unmarshal(b []byte) error { @@ -23766,7 +23955,7 @@ func (m *ConflictInfo) Reset() { *m = ConflictInfo{} } func (m *ConflictInfo) String() string { return proto.CompactTextString(m) } func (*ConflictInfo) ProtoMessage() {} func (*ConflictInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{289} + return fileDescriptor_d789ea45d40d7a6b, []int{292} } func (m *ConflictInfo) XXX_Unmarshal(b []byte) error { @@ -23798,6 +23987,7 @@ type ListCloudSecurityGroupsRequest struct { CloudID string `protobuf:"bytes,1,opt,name=cloudID,proto3" json:"cloudID,omitempty"` Region string `protobuf:"bytes,2,opt,name=region,proto3" json:"region,omitempty"` AccountID string `protobuf:"bytes,3,opt,name=accountID,proto3" json:"accountID,omitempty"` + ResourceGroupName string `protobuf:"bytes,4,opt,name=resourceGroupName,proto3" json:"resourceGroupName,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-" bson:"-"` XXX_unrecognized []byte `json:"-" bson:"-"` XXX_sizecache int32 `json:"-" bson:"-"` @@ -23807,7 +23997,7 @@ func (m *ListCloudSecurityGroupsRequest) Reset() { *m = ListCloudSecurit func (m *ListCloudSecurityGroupsRequest) String() string { return proto.CompactTextString(m) } func (*ListCloudSecurityGroupsRequest) ProtoMessage() {} func (*ListCloudSecurityGroupsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{290} + return fileDescriptor_d789ea45d40d7a6b, []int{293} } func (m *ListCloudSecurityGroupsRequest) XXX_Unmarshal(b []byte) error { @@ -23849,6 +24039,13 @@ func (m *ListCloudSecurityGroupsRequest) GetAccountID() string { return "" } +func (m *ListCloudSecurityGroupsRequest) GetResourceGroupName() string { + if m != nil { + return m.ResourceGroupName + } + return "" +} + type ListCloudSecurityGroupsResponse struct { Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` @@ -23863,7 +24060,7 @@ func (m *ListCloudSecurityGroupsResponse) Reset() { *m = ListCloudSecuri func (m *ListCloudSecurityGroupsResponse) String() string { return proto.CompactTextString(m) } func (*ListCloudSecurityGroupsResponse) ProtoMessage() {} func (*ListCloudSecurityGroupsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{291} + return fileDescriptor_d789ea45d40d7a6b, []int{294} } func (m *ListCloudSecurityGroupsResponse) XXX_Unmarshal(b []byte) error { @@ -23916,6 +24113,7 @@ type ListKeyPairsRequest struct { CloudID string `protobuf:"bytes,1,opt,name=cloudID,proto3" json:"cloudID,omitempty"` Region string `protobuf:"bytes,2,opt,name=region,proto3" json:"region,omitempty"` AccountID string `protobuf:"bytes,3,opt,name=accountID,proto3" json:"accountID,omitempty"` + ResourceGroupName string `protobuf:"bytes,4,opt,name=resourceGroupName,proto3" json:"resourceGroupName,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-" bson:"-"` XXX_unrecognized []byte `json:"-" bson:"-"` XXX_sizecache int32 `json:"-" bson:"-"` @@ -23925,7 +24123,7 @@ func (m *ListKeyPairsRequest) Reset() { *m = ListKeyPairsRequest{} } func (m *ListKeyPairsRequest) String() string { return proto.CompactTextString(m) } func (*ListKeyPairsRequest) ProtoMessage() {} func (*ListKeyPairsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{292} + return fileDescriptor_d789ea45d40d7a6b, []int{295} } func (m *ListKeyPairsRequest) XXX_Unmarshal(b []byte) error { @@ -23967,6 +24165,13 @@ func (m *ListKeyPairsRequest) GetAccountID() string { return "" } +func (m *ListKeyPairsRequest) GetResourceGroupName() string { + if m != nil { + return m.ResourceGroupName + } + return "" +} + type ListKeyPairsResponse struct { Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` @@ -23981,7 +24186,7 @@ func (m *ListKeyPairsResponse) Reset() { *m = ListKeyPairsResponse{} } func (m *ListKeyPairsResponse) String() string { return proto.CompactTextString(m) } func (*ListKeyPairsResponse) ProtoMessage() {} func (*ListKeyPairsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{293} + return fileDescriptor_d789ea45d40d7a6b, []int{296} } func (m *ListKeyPairsResponse) XXX_Unmarshal(b []byte) error { @@ -24043,7 +24248,7 @@ func (m *KeyPair) Reset() { *m = KeyPair{} } func (m *KeyPair) String() string { return proto.CompactTextString(m) } func (*KeyPair) ProtoMessage() {} func (*KeyPair) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{294} + return fileDescriptor_d789ea45d40d7a6b, []int{297} } func (m *KeyPair) XXX_Unmarshal(b []byte) error { @@ -24109,7 +24314,7 @@ func (m *ListOperationLogsRequest) Reset() { *m = ListOperationLogsReque func (m *ListOperationLogsRequest) String() string { return proto.CompactTextString(m) } func (*ListOperationLogsRequest) ProtoMessage() {} func (*ListOperationLogsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{295} + return fileDescriptor_d789ea45d40d7a6b, []int{298} } func (m *ListOperationLogsRequest) XXX_Unmarshal(b []byte) error { @@ -24242,7 +24447,7 @@ func (m *ListOperationLogsResponse) Reset() { *m = ListOperationLogsResp func (m *ListOperationLogsResponse) String() string { return proto.CompactTextString(m) } func (*ListOperationLogsResponse) ProtoMessage() {} func (*ListOperationLogsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{296} + return fileDescriptor_d789ea45d40d7a6b, []int{299} } func (m *ListOperationLogsResponse) XXX_Unmarshal(b []byte) error { @@ -24303,7 +24508,7 @@ func (m *ListOperationLogsResponseData) Reset() { *m = ListOperationLogs func (m *ListOperationLogsResponseData) String() string { return proto.CompactTextString(m) } func (*ListOperationLogsResponseData) ProtoMessage() {} func (*ListOperationLogsResponseData) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{297} + return fileDescriptor_d789ea45d40d7a6b, []int{300} } func (m *ListOperationLogsResponseData) XXX_Unmarshal(b []byte) error { @@ -24357,7 +24562,7 @@ func (m *OperationLogDetail) Reset() { *m = OperationLogDetail{} } func (m *OperationLogDetail) String() string { return proto.CompactTextString(m) } func (*OperationLogDetail) ProtoMessage() {} func (*OperationLogDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{298} + return fileDescriptor_d789ea45d40d7a6b, []int{301} } func (m *OperationLogDetail) XXX_Unmarshal(b []byte) error { @@ -24454,7 +24659,7 @@ func (m *SecurityGroup) Reset() { *m = SecurityGroup{} } func (m *SecurityGroup) String() string { return proto.CompactTextString(m) } func (*SecurityGroup) ProtoMessage() {} func (*SecurityGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{299} + return fileDescriptor_d789ea45d40d7a6b, []int{302} } func (m *SecurityGroup) XXX_Unmarshal(b []byte) error { @@ -24508,7 +24713,7 @@ func (m *NodeOperationStatus) Reset() { *m = NodeOperationStatus{} } func (m *NodeOperationStatus) String() string { return proto.CompactTextString(m) } func (*NodeOperationStatus) ProtoMessage() {} func (*NodeOperationStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{300} + return fileDescriptor_d789ea45d40d7a6b, []int{303} } func (m *NodeOperationStatus) XXX_Unmarshal(b []byte) error { @@ -24555,7 +24760,7 @@ func (m *NodeOperationStatusInfo) Reset() { *m = NodeOperationStatusInfo func (m *NodeOperationStatusInfo) String() string { return proto.CompactTextString(m) } func (*NodeOperationStatusInfo) ProtoMessage() {} func (*NodeOperationStatusInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{301} + return fileDescriptor_d789ea45d40d7a6b, []int{304} } func (m *NodeOperationStatusInfo) XXX_Unmarshal(b []byte) error { @@ -24613,7 +24818,7 @@ func (m *DrainNodeRequest) Reset() { *m = DrainNodeRequest{} } func (m *DrainNodeRequest) String() string { return proto.CompactTextString(m) } func (*DrainNodeRequest) ProtoMessage() {} func (*DrainNodeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{302} + return fileDescriptor_d789ea45d40d7a6b, []int{305} } func (m *DrainNodeRequest) XXX_Unmarshal(b []byte) error { @@ -24739,7 +24944,7 @@ func (m *DrainNodeResponse) Reset() { *m = DrainNodeResponse{} } func (m *DrainNodeResponse) String() string { return proto.CompactTextString(m) } func (*DrainNodeResponse) ProtoMessage() {} func (*DrainNodeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{303} + return fileDescriptor_d789ea45d40d7a6b, []int{306} } func (m *DrainNodeResponse) XXX_Unmarshal(b []byte) error { @@ -24800,7 +25005,7 @@ func (m *NodeAnnotation) Reset() { *m = NodeAnnotation{} } func (m *NodeAnnotation) String() string { return proto.CompactTextString(m) } func (*NodeAnnotation) ProtoMessage() {} func (*NodeAnnotation) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{304} + return fileDescriptor_d789ea45d40d7a6b, []int{307} } func (m *NodeAnnotation) XXX_Unmarshal(b []byte) error { @@ -24847,7 +25052,7 @@ func (m *UpdateNodeAnnotationsRequest) Reset() { *m = UpdateNodeAnnotati func (m *UpdateNodeAnnotationsRequest) String() string { return proto.CompactTextString(m) } func (*UpdateNodeAnnotationsRequest) ProtoMessage() {} func (*UpdateNodeAnnotationsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{305} + return fileDescriptor_d789ea45d40d7a6b, []int{308} } func (m *UpdateNodeAnnotationsRequest) XXX_Unmarshal(b []byte) error { @@ -24896,7 +25101,7 @@ func (m *UpdateNodeAnnotationsResponse) Reset() { *m = UpdateNodeAnnotat func (m *UpdateNodeAnnotationsResponse) String() string { return proto.CompactTextString(m) } func (*UpdateNodeAnnotationsResponse) ProtoMessage() {} func (*UpdateNodeAnnotationsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{306} + return fileDescriptor_d789ea45d40d7a6b, []int{309} } func (m *UpdateNodeAnnotationsResponse) XXX_Unmarshal(b []byte) error { @@ -24957,7 +25162,7 @@ func (m *NodeLabel) Reset() { *m = NodeLabel{} } func (m *NodeLabel) String() string { return proto.CompactTextString(m) } func (*NodeLabel) ProtoMessage() {} func (*NodeLabel) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{307} + return fileDescriptor_d789ea45d40d7a6b, []int{310} } func (m *NodeLabel) XXX_Unmarshal(b []byte) error { @@ -25004,7 +25209,7 @@ func (m *UpdateNodeLabelsRequest) Reset() { *m = UpdateNodeLabelsRequest func (m *UpdateNodeLabelsRequest) String() string { return proto.CompactTextString(m) } func (*UpdateNodeLabelsRequest) ProtoMessage() {} func (*UpdateNodeLabelsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{308} + return fileDescriptor_d789ea45d40d7a6b, []int{311} } func (m *UpdateNodeLabelsRequest) XXX_Unmarshal(b []byte) error { @@ -25053,7 +25258,7 @@ func (m *UpdateNodeLabelsResponse) Reset() { *m = UpdateNodeLabelsRespon func (m *UpdateNodeLabelsResponse) String() string { return proto.CompactTextString(m) } func (*UpdateNodeLabelsResponse) ProtoMessage() {} func (*UpdateNodeLabelsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{309} + return fileDescriptor_d789ea45d40d7a6b, []int{312} } func (m *UpdateNodeLabelsResponse) XXX_Unmarshal(b []byte) error { @@ -25114,7 +25319,7 @@ func (m *NodeTaint) Reset() { *m = NodeTaint{} } func (m *NodeTaint) String() string { return proto.CompactTextString(m) } func (*NodeTaint) ProtoMessage() {} func (*NodeTaint) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{310} + return fileDescriptor_d789ea45d40d7a6b, []int{313} } func (m *NodeTaint) XXX_Unmarshal(b []byte) error { @@ -25161,7 +25366,7 @@ func (m *UpdateNodeTaintsRequest) Reset() { *m = UpdateNodeTaintsRequest func (m *UpdateNodeTaintsRequest) String() string { return proto.CompactTextString(m) } func (*UpdateNodeTaintsRequest) ProtoMessage() {} func (*UpdateNodeTaintsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{311} + return fileDescriptor_d789ea45d40d7a6b, []int{314} } func (m *UpdateNodeTaintsRequest) XXX_Unmarshal(b []byte) error { @@ -25210,7 +25415,7 @@ func (m *UpdateNodeTaintsResponse) Reset() { *m = UpdateNodeTaintsRespon func (m *UpdateNodeTaintsResponse) String() string { return proto.CompactTextString(m) } func (*UpdateNodeTaintsResponse) ProtoMessage() {} func (*UpdateNodeTaintsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{312} + return fileDescriptor_d789ea45d40d7a6b, []int{315} } func (m *UpdateNodeTaintsResponse) XXX_Unmarshal(b []byte) error { @@ -25269,7 +25474,7 @@ func (m *HealthRequest) Reset() { *m = HealthRequest{} } func (m *HealthRequest) String() string { return proto.CompactTextString(m) } func (*HealthRequest) ProtoMessage() {} func (*HealthRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{313} + return fileDescriptor_d789ea45d40d7a6b, []int{316} } func (m *HealthRequest) XXX_Unmarshal(b []byte) error { @@ -25303,7 +25508,7 @@ func (m *HealthResponse) Reset() { *m = HealthResponse{} } func (m *HealthResponse) String() string { return proto.CompactTextString(m) } func (*HealthResponse) ProtoMessage() {} func (*HealthResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{314} + return fileDescriptor_d789ea45d40d7a6b, []int{317} } func (m *HealthResponse) XXX_Unmarshal(b []byte) error { @@ -25356,7 +25561,7 @@ func (m *ListResourceSchemaRequest) Reset() { *m = ListResourceSchemaReq func (m *ListResourceSchemaRequest) String() string { return proto.CompactTextString(m) } func (*ListResourceSchemaRequest) ProtoMessage() {} func (*ListResourceSchemaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{315} + return fileDescriptor_d789ea45d40d7a6b, []int{318} } func (m *ListResourceSchemaRequest) XXX_Unmarshal(b []byte) error { @@ -25396,7 +25601,7 @@ func (m *GetResourceSchemaRequest) Reset() { *m = GetResourceSchemaReque func (m *GetResourceSchemaRequest) String() string { return proto.CompactTextString(m) } func (*GetResourceSchemaRequest) ProtoMessage() {} func (*GetResourceSchemaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{316} + return fileDescriptor_d789ea45d40d7a6b, []int{319} } func (m *GetResourceSchemaRequest) XXX_Unmarshal(b []byte) error { @@ -25447,7 +25652,7 @@ func (m *QueryPermByActionIDReqData) Reset() { *m = QueryPermByActionIDR func (m *QueryPermByActionIDReqData) String() string { return proto.CompactTextString(m) } func (*QueryPermByActionIDReqData) ProtoMessage() {} func (*QueryPermByActionIDReqData) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{317} + return fileDescriptor_d789ea45d40d7a6b, []int{320} } func (m *QueryPermByActionIDReqData) XXX_Unmarshal(b []byte) error { @@ -25522,7 +25727,7 @@ func (m *QueryPermByActionIDRequest) Reset() { *m = QueryPermByActionIDR func (m *QueryPermByActionIDRequest) String() string { return proto.CompactTextString(m) } func (*QueryPermByActionIDRequest) ProtoMessage() {} func (*QueryPermByActionIDRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{318} + return fileDescriptor_d789ea45d40d7a6b, []int{321} } func (m *QueryPermByActionIDRequest) XXX_Unmarshal(b []byte) error { @@ -25568,7 +25773,7 @@ func (m *Perms) Reset() { *m = Perms{} } func (m *Perms) String() string { return proto.CompactTextString(m) } func (*Perms) ProtoMessage() {} func (*Perms) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{319} + return fileDescriptor_d789ea45d40d7a6b, []int{322} } func (m *Perms) XXX_Unmarshal(b []byte) error { @@ -25608,7 +25813,7 @@ func (m *QueryPermByActionIDResponse) Reset() { *m = QueryPermByActionID func (m *QueryPermByActionIDResponse) String() string { return proto.CompactTextString(m) } func (*QueryPermByActionIDResponse) ProtoMessage() {} func (*QueryPermByActionIDResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{320} + return fileDescriptor_d789ea45d40d7a6b, []int{323} } func (m *QueryPermByActionIDResponse) XXX_Unmarshal(b []byte) error { @@ -25657,7 +25862,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{321} + return fileDescriptor_d789ea45d40d7a6b, []int{324} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { @@ -25720,7 +25925,7 @@ func (m *CommonListResp) Reset() { *m = CommonListResp{} } func (m *CommonListResp) String() string { return proto.CompactTextString(m) } func (*CommonListResp) ProtoMessage() {} func (*CommonListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{322} + return fileDescriptor_d789ea45d40d7a6b, []int{325} } func (m *CommonListResp) XXX_Unmarshal(b []byte) error { @@ -25780,7 +25985,7 @@ func (m *ListBKCloudRequest) Reset() { *m = ListBKCloudRequest{} } func (m *ListBKCloudRequest) String() string { return proto.CompactTextString(m) } func (*ListBKCloudRequest) ProtoMessage() {} func (*ListBKCloudRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{323} + return fileDescriptor_d789ea45d40d7a6b, []int{326} } func (m *ListBKCloudRequest) XXX_Unmarshal(b []byte) error { @@ -25815,7 +26020,7 @@ func (m *ListCCTopologyRequest) Reset() { *m = ListCCTopologyRequest{} } func (m *ListCCTopologyRequest) String() string { return proto.CompactTextString(m) } func (*ListCCTopologyRequest) ProtoMessage() {} func (*ListCCTopologyRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{324} + return fileDescriptor_d789ea45d40d7a6b, []int{327} } func (m *ListCCTopologyRequest) XXX_Unmarshal(b []byte) error { @@ -25871,7 +26076,7 @@ func (m *GetBkSopsTemplateListRequest) Reset() { *m = GetBkSopsTemplateL func (m *GetBkSopsTemplateListRequest) String() string { return proto.CompactTextString(m) } func (*GetBkSopsTemplateListRequest) ProtoMessage() {} func (*GetBkSopsTemplateListRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{325} + return fileDescriptor_d789ea45d40d7a6b, []int{328} } func (m *GetBkSopsTemplateListRequest) XXX_Unmarshal(b []byte) error { @@ -25933,7 +26138,7 @@ func (m *GetBkSopsTemplateListResponse) Reset() { *m = GetBkSopsTemplate func (m *GetBkSopsTemplateListResponse) String() string { return proto.CompactTextString(m) } func (*GetBkSopsTemplateListResponse) ProtoMessage() {} func (*GetBkSopsTemplateListResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{326} + return fileDescriptor_d789ea45d40d7a6b, []int{329} } func (m *GetBkSopsTemplateListResponse) XXX_Unmarshal(b []byte) error { @@ -25992,7 +26197,7 @@ func (m *TemplateInfo) Reset() { *m = TemplateInfo{} } func (m *TemplateInfo) String() string { return proto.CompactTextString(m) } func (*TemplateInfo) ProtoMessage() {} func (*TemplateInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{327} + return fileDescriptor_d789ea45d40d7a6b, []int{330} } func (m *TemplateInfo) XXX_Unmarshal(b []byte) error { @@ -26077,7 +26282,7 @@ func (m *GetBkSopsTemplateInfoRequest) Reset() { *m = GetBkSopsTemplateI func (m *GetBkSopsTemplateInfoRequest) String() string { return proto.CompactTextString(m) } func (*GetBkSopsTemplateInfoRequest) ProtoMessage() {} func (*GetBkSopsTemplateInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{328} + return fileDescriptor_d789ea45d40d7a6b, []int{331} } func (m *GetBkSopsTemplateInfoRequest) XXX_Unmarshal(b []byte) error { @@ -26146,7 +26351,7 @@ func (m *GetBkSopsTemplateInfoResponse) Reset() { *m = GetBkSopsTemplate func (m *GetBkSopsTemplateInfoResponse) String() string { return proto.CompactTextString(m) } func (*GetBkSopsTemplateInfoResponse) ProtoMessage() {} func (*GetBkSopsTemplateInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{329} + return fileDescriptor_d789ea45d40d7a6b, []int{332} } func (m *GetBkSopsTemplateInfoResponse) XXX_Unmarshal(b []byte) error { @@ -26200,7 +26405,7 @@ func (m *TemplateDetailInfo) Reset() { *m = TemplateDetailInfo{} } func (m *TemplateDetailInfo) String() string { return proto.CompactTextString(m) } func (*TemplateDetailInfo) ProtoMessage() {} func (*TemplateDetailInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{330} + return fileDescriptor_d789ea45d40d7a6b, []int{333} } func (m *TemplateDetailInfo) XXX_Unmarshal(b []byte) error { @@ -26249,7 +26454,7 @@ func (m *ConstantValue) Reset() { *m = ConstantValue{} } func (m *ConstantValue) String() string { return proto.CompactTextString(m) } func (*ConstantValue) ProtoMessage() {} func (*ConstantValue) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{331} + return fileDescriptor_d789ea45d40d7a6b, []int{334} } func (m *ConstantValue) XXX_Unmarshal(b []byte) error { @@ -26310,7 +26515,7 @@ func (m *GetInnerTemplateValuesRequest) Reset() { *m = GetInnerTemplateV func (m *GetInnerTemplateValuesRequest) String() string { return proto.CompactTextString(m) } func (*GetInnerTemplateValuesRequest) ProtoMessage() {} func (*GetInnerTemplateValuesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{332} + return fileDescriptor_d789ea45d40d7a6b, []int{335} } func (m *GetInnerTemplateValuesRequest) XXX_Unmarshal(b []byte) error { @@ -26358,7 +26563,7 @@ func (m *GetInnerTemplateValuesResponse) Reset() { *m = GetInnerTemplate func (m *GetInnerTemplateValuesResponse) String() string { return proto.CompactTextString(m) } func (*GetInnerTemplateValuesResponse) ProtoMessage() {} func (*GetInnerTemplateValuesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{333} + return fileDescriptor_d789ea45d40d7a6b, []int{336} } func (m *GetInnerTemplateValuesResponse) XXX_Unmarshal(b []byte) error { @@ -26415,7 +26620,7 @@ func (m *TemplateValue) Reset() { *m = TemplateValue{} } func (m *TemplateValue) String() string { return proto.CompactTextString(m) } func (*TemplateValue) ProtoMessage() {} func (*TemplateValue) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{334} + return fileDescriptor_d789ea45d40d7a6b, []int{337} } func (m *TemplateValue) XXX_Unmarshal(b []byte) error { @@ -26486,7 +26691,7 @@ func (m *DebugBkSopsTaskRequest) Reset() { *m = DebugBkSopsTaskRequest{} func (m *DebugBkSopsTaskRequest) String() string { return proto.CompactTextString(m) } func (*DebugBkSopsTaskRequest) ProtoMessage() {} func (*DebugBkSopsTaskRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{335} + return fileDescriptor_d789ea45d40d7a6b, []int{338} } func (m *DebugBkSopsTaskRequest) XXX_Unmarshal(b []byte) error { @@ -26555,7 +26760,7 @@ func (m *DebugBkSopsTaskResponse) Reset() { *m = DebugBkSopsTaskResponse func (m *DebugBkSopsTaskResponse) String() string { return proto.CompactTextString(m) } func (*DebugBkSopsTaskResponse) ProtoMessage() {} func (*DebugBkSopsTaskResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{336} + return fileDescriptor_d789ea45d40d7a6b, []int{339} } func (m *DebugBkSopsTaskResponse) XXX_Unmarshal(b []byte) error { @@ -26608,7 +26813,7 @@ func (m *DebugBkSopsTaskInfo) Reset() { *m = DebugBkSopsTaskInfo{} } func (m *DebugBkSopsTaskInfo) String() string { return proto.CompactTextString(m) } func (*DebugBkSopsTaskInfo) ProtoMessage() {} func (*DebugBkSopsTaskInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{337} + return fileDescriptor_d789ea45d40d7a6b, []int{340} } func (m *DebugBkSopsTaskInfo) XXX_Unmarshal(b []byte) error { @@ -26663,7 +26868,7 @@ func (m *CloudModuleFlag) Reset() { *m = CloudModuleFlag{} } func (m *CloudModuleFlag) String() string { return proto.CompactTextString(m) } func (*CloudModuleFlag) ProtoMessage() {} func (*CloudModuleFlag) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{338} + return fileDescriptor_d789ea45d40d7a6b, []int{341} } func (m *CloudModuleFlag) XXX_Unmarshal(b []byte) error { @@ -26815,7 +27020,7 @@ func (m *FlagInfo) Reset() { *m = FlagInfo{} } func (m *FlagInfo) String() string { return proto.CompactTextString(m) } func (*FlagInfo) ProtoMessage() {} func (*FlagInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{339} + return fileDescriptor_d789ea45d40d7a6b, []int{342} } func (m *FlagInfo) XXX_Unmarshal(b []byte) error { @@ -26911,7 +27116,7 @@ func (m *ValueRegex) Reset() { *m = ValueRegex{} } func (m *ValueRegex) String() string { return proto.CompactTextString(m) } func (*ValueRegex) ProtoMessage() {} func (*ValueRegex) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{340} + return fileDescriptor_d789ea45d40d7a6b, []int{343} } func (m *ValueRegex) XXX_Unmarshal(b []byte) error { @@ -26958,7 +27163,7 @@ func (m *NumberRange) Reset() { *m = NumberRange{} } func (m *NumberRange) String() string { return proto.CompactTextString(m) } func (*NumberRange) ProtoMessage() {} func (*NumberRange) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{341} + return fileDescriptor_d789ea45d40d7a6b, []int{344} } func (m *NumberRange) XXX_Unmarshal(b []byte) error { @@ -27008,7 +27213,7 @@ func (m *CreateCloudModuleFlagRequest) Reset() { *m = CreateCloudModuleF func (m *CreateCloudModuleFlagRequest) String() string { return proto.CompactTextString(m) } func (*CreateCloudModuleFlagRequest) ProtoMessage() {} func (*CreateCloudModuleFlagRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{342} + return fileDescriptor_d789ea45d40d7a6b, []int{345} } func (m *CreateCloudModuleFlagRequest) XXX_Unmarshal(b []byte) error { @@ -27076,7 +27281,7 @@ func (m *CreateCloudModuleFlagResponse) Reset() { *m = CreateCloudModule func (m *CreateCloudModuleFlagResponse) String() string { return proto.CompactTextString(m) } func (*CreateCloudModuleFlagResponse) ProtoMessage() {} func (*CreateCloudModuleFlagResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{343} + return fileDescriptor_d789ea45d40d7a6b, []int{346} } func (m *CreateCloudModuleFlagResponse) XXX_Unmarshal(b []byte) error { @@ -27126,7 +27331,7 @@ func (m *UpdateCloudModuleFlagRequest) Reset() { *m = UpdateCloudModuleF func (m *UpdateCloudModuleFlagRequest) String() string { return proto.CompactTextString(m) } func (*UpdateCloudModuleFlagRequest) ProtoMessage() {} func (*UpdateCloudModuleFlagRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{344} + return fileDescriptor_d789ea45d40d7a6b, []int{347} } func (m *UpdateCloudModuleFlagRequest) XXX_Unmarshal(b []byte) error { @@ -27194,7 +27399,7 @@ func (m *UpdateCloudModuleFlagResponse) Reset() { *m = UpdateCloudModule func (m *UpdateCloudModuleFlagResponse) String() string { return proto.CompactTextString(m) } func (*UpdateCloudModuleFlagResponse) ProtoMessage() {} func (*UpdateCloudModuleFlagResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{345} + return fileDescriptor_d789ea45d40d7a6b, []int{348} } func (m *UpdateCloudModuleFlagResponse) XXX_Unmarshal(b []byte) error { @@ -27244,7 +27449,7 @@ func (m *DeleteCloudModuleFlagRequest) Reset() { *m = DeleteCloudModuleF func (m *DeleteCloudModuleFlagRequest) String() string { return proto.CompactTextString(m) } func (*DeleteCloudModuleFlagRequest) ProtoMessage() {} func (*DeleteCloudModuleFlagRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{346} + return fileDescriptor_d789ea45d40d7a6b, []int{349} } func (m *DeleteCloudModuleFlagRequest) XXX_Unmarshal(b []byte) error { @@ -27312,7 +27517,7 @@ func (m *DeleteCloudModuleFlagResponse) Reset() { *m = DeleteCloudModule func (m *DeleteCloudModuleFlagResponse) String() string { return proto.CompactTextString(m) } func (*DeleteCloudModuleFlagResponse) ProtoMessage() {} func (*DeleteCloudModuleFlagResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{347} + return fileDescriptor_d789ea45d40d7a6b, []int{350} } func (m *DeleteCloudModuleFlagResponse) XXX_Unmarshal(b []byte) error { @@ -27362,7 +27567,7 @@ func (m *ListCloudModuleFlagRequest) Reset() { *m = ListCloudModuleFlagR func (m *ListCloudModuleFlagRequest) String() string { return proto.CompactTextString(m) } func (*ListCloudModuleFlagRequest) ProtoMessage() {} func (*ListCloudModuleFlagRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{348} + return fileDescriptor_d789ea45d40d7a6b, []int{351} } func (m *ListCloudModuleFlagRequest) XXX_Unmarshal(b []byte) error { @@ -27431,7 +27636,7 @@ func (m *ListCloudModuleFlagResponse) Reset() { *m = ListCloudModuleFlag func (m *ListCloudModuleFlagResponse) String() string { return proto.CompactTextString(m) } func (*ListCloudModuleFlagResponse) ProtoMessage() {} func (*ListCloudModuleFlagResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{349} + return fileDescriptor_d789ea45d40d7a6b, []int{352} } func (m *ListCloudModuleFlagResponse) XXX_Unmarshal(b []byte) error { @@ -27485,7 +27690,7 @@ func (m *GetExternalNodeScriptRequest) Reset() { *m = GetExternalNodeScr func (m *GetExternalNodeScriptRequest) String() string { return proto.CompactTextString(m) } func (*GetExternalNodeScriptRequest) ProtoMessage() {} func (*GetExternalNodeScriptRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{350} + return fileDescriptor_d789ea45d40d7a6b, []int{353} } func (m *GetExternalNodeScriptRequest) XXX_Unmarshal(b []byte) error { @@ -27535,7 +27740,7 @@ func (m *GetExternalNodeScriptResponse) Reset() { *m = GetExternalNodeSc func (m *GetExternalNodeScriptResponse) String() string { return proto.CompactTextString(m) } func (*GetExternalNodeScriptResponse) ProtoMessage() {} func (*GetExternalNodeScriptResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{351} + return fileDescriptor_d789ea45d40d7a6b, []int{354} } func (m *GetExternalNodeScriptResponse) XXX_Unmarshal(b []byte) error { @@ -27602,7 +27807,7 @@ func (m *MapStruct) Reset() { *m = MapStruct{} } func (m *MapStruct) String() string { return proto.CompactTextString(m) } func (*MapStruct) ProtoMessage() {} func (*MapStruct) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{352} + return fileDescriptor_d789ea45d40d7a6b, []int{355} } func (m *MapStruct) XXX_Unmarshal(b []byte) error { @@ -27647,7 +27852,7 @@ func (m *GetBatchCustomSettingRequest) Reset() { *m = GetBatchCustomSett func (m *GetBatchCustomSettingRequest) String() string { return proto.CompactTextString(m) } func (*GetBatchCustomSettingRequest) ProtoMessage() {} func (*GetBatchCustomSettingRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{353} + return fileDescriptor_d789ea45d40d7a6b, []int{356} } func (m *GetBatchCustomSettingRequest) XXX_Unmarshal(b []byte) error { @@ -27704,7 +27909,7 @@ func (m *GetBatchCustomSettingResponse) Reset() { *m = GetBatchCustomSet func (m *GetBatchCustomSettingResponse) String() string { return proto.CompactTextString(m) } func (*GetBatchCustomSettingResponse) ProtoMessage() {} func (*GetBatchCustomSettingResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{354} + return fileDescriptor_d789ea45d40d7a6b, []int{357} } func (m *GetBatchCustomSettingResponse) XXX_Unmarshal(b []byte) error { @@ -27772,7 +27977,7 @@ func (m *ScopeInfo) Reset() { *m = ScopeInfo{} } func (m *ScopeInfo) String() string { return proto.CompactTextString(m) } func (*ScopeInfo) ProtoMessage() {} func (*ScopeInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{355} + return fileDescriptor_d789ea45d40d7a6b, []int{358} } func (m *ScopeInfo) XXX_Unmarshal(b []byte) error { @@ -27821,7 +28026,7 @@ func (m *GetBizTopologyHostRequest) Reset() { *m = GetBizTopologyHostReq func (m *GetBizTopologyHostRequest) String() string { return proto.CompactTextString(m) } func (*GetBizTopologyHostRequest) ProtoMessage() {} func (*GetBizTopologyHostRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{356} + return fileDescriptor_d789ea45d40d7a6b, []int{359} } func (m *GetBizTopologyHostRequest) XXX_Unmarshal(b []byte) error { @@ -27885,7 +28090,7 @@ func (m *GetBizTopologyHostResponse) Reset() { *m = GetBizTopologyHostRe func (m *GetBizTopologyHostResponse) String() string { return proto.CompactTextString(m) } func (*GetBizTopologyHostResponse) ProtoMessage() {} func (*GetBizTopologyHostResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{357} + return fileDescriptor_d789ea45d40d7a6b, []int{360} } func (m *GetBizTopologyHostResponse) XXX_Unmarshal(b []byte) error { @@ -27953,7 +28158,7 @@ func (m *NodeData) Reset() { *m = NodeData{} } func (m *NodeData) String() string { return proto.CompactTextString(m) } func (*NodeData) ProtoMessage() {} func (*NodeData) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{358} + return fileDescriptor_d789ea45d40d7a6b, []int{361} } func (m *NodeData) XXX_Unmarshal(b []byte) error { @@ -28005,7 +28210,7 @@ func (m *GetTopologyNodesRequest) Reset() { *m = GetTopologyNodesRequest func (m *GetTopologyNodesRequest) String() string { return proto.CompactTextString(m) } func (*GetTopologyNodesRequest) ProtoMessage() {} func (*GetTopologyNodesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{359} + return fileDescriptor_d789ea45d40d7a6b, []int{362} } func (m *GetTopologyNodesRequest) XXX_Unmarshal(b []byte) error { @@ -28090,7 +28295,7 @@ func (m *GetTopologyNodesResponse) Reset() { *m = GetTopologyNodesRespon func (m *GetTopologyNodesResponse) String() string { return proto.CompactTextString(m) } func (*GetTopologyNodesResponse) ProtoMessage() {} func (*GetTopologyNodesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{360} + return fileDescriptor_d789ea45d40d7a6b, []int{363} } func (m *GetTopologyNodesResponse) XXX_Unmarshal(b []byte) error { @@ -28160,7 +28365,7 @@ func (m *GetTopologyNodesData) Reset() { *m = GetTopologyNodesData{} } func (m *GetTopologyNodesData) String() string { return proto.CompactTextString(m) } func (*GetTopologyNodesData) ProtoMessage() {} func (*GetTopologyNodesData) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{361} + return fileDescriptor_d789ea45d40d7a6b, []int{364} } func (m *GetTopologyNodesData) XXX_Unmarshal(b []byte) error { @@ -28226,7 +28431,7 @@ func (m *HostData) Reset() { *m = HostData{} } func (m *HostData) String() string { return proto.CompactTextString(m) } func (*HostData) ProtoMessage() {} func (*HostData) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{362} + return fileDescriptor_d789ea45d40d7a6b, []int{365} } func (m *HostData) XXX_Unmarshal(b []byte) error { @@ -28308,7 +28513,7 @@ func (m *HostCloudArea) Reset() { *m = HostCloudArea{} } func (m *HostCloudArea) String() string { return proto.CompactTextString(m) } func (*HostCloudArea) ProtoMessage() {} func (*HostCloudArea) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{363} + return fileDescriptor_d789ea45d40d7a6b, []int{366} } func (m *HostCloudArea) XXX_Unmarshal(b []byte) error { @@ -28360,7 +28565,7 @@ func (m *GetTopologyHostIdsNodesRequest) Reset() { *m = GetTopologyHostI func (m *GetTopologyHostIdsNodesRequest) String() string { return proto.CompactTextString(m) } func (*GetTopologyHostIdsNodesRequest) ProtoMessage() {} func (*GetTopologyHostIdsNodesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{364} + return fileDescriptor_d789ea45d40d7a6b, []int{367} } func (m *GetTopologyHostIdsNodesRequest) XXX_Unmarshal(b []byte) error { @@ -28445,7 +28650,7 @@ func (m *GetTopologyHostIdsNodesResponse) Reset() { *m = GetTopologyHost func (m *GetTopologyHostIdsNodesResponse) String() string { return proto.CompactTextString(m) } func (*GetTopologyHostIdsNodesResponse) ProtoMessage() {} func (*GetTopologyHostIdsNodesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{365} + return fileDescriptor_d789ea45d40d7a6b, []int{368} } func (m *GetTopologyHostIdsNodesResponse) XXX_Unmarshal(b []byte) error { @@ -28515,7 +28720,7 @@ func (m *GetTopologyHostIdsNodesData) Reset() { *m = GetTopologyHostIdsN func (m *GetTopologyHostIdsNodesData) String() string { return proto.CompactTextString(m) } func (*GetTopologyHostIdsNodesData) ProtoMessage() {} func (*GetTopologyHostIdsNodesData) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{366} + return fileDescriptor_d789ea45d40d7a6b, []int{369} } func (m *GetTopologyHostIdsNodesData) XXX_Unmarshal(b []byte) error { @@ -28576,7 +28781,7 @@ func (m *HostIDsNodeData) Reset() { *m = HostIDsNodeData{} } func (m *HostIDsNodeData) String() string { return proto.CompactTextString(m) } func (*HostIDsNodeData) ProtoMessage() {} func (*HostIDsNodeData) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{367} + return fileDescriptor_d789ea45d40d7a6b, []int{370} } func (m *HostIDsNodeData) XXX_Unmarshal(b []byte) error { @@ -28624,7 +28829,7 @@ func (m *Meta) Reset() { *m = Meta{} } func (m *Meta) String() string { return proto.CompactTextString(m) } func (*Meta) ProtoMessage() {} func (*Meta) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{368} + return fileDescriptor_d789ea45d40d7a6b, []int{371} } func (m *Meta) XXX_Unmarshal(b []byte) error { @@ -28679,7 +28884,7 @@ func (m *GetHostsDetailsRequest) Reset() { *m = GetHostsDetailsRequest{} func (m *GetHostsDetailsRequest) String() string { return proto.CompactTextString(m) } func (*GetHostsDetailsRequest) ProtoMessage() {} func (*GetHostsDetailsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{369} + return fileDescriptor_d789ea45d40d7a6b, []int{372} } func (m *GetHostsDetailsRequest) XXX_Unmarshal(b []byte) error { @@ -28736,7 +28941,7 @@ func (m *GetHostsDetailsResponse) Reset() { *m = GetHostsDetailsResponse func (m *GetHostsDetailsResponse) String() string { return proto.CompactTextString(m) } func (*GetHostsDetailsResponse) ProtoMessage() {} func (*GetHostsDetailsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{370} + return fileDescriptor_d789ea45d40d7a6b, []int{373} } func (m *GetHostsDetailsResponse) XXX_Unmarshal(b []byte) error { @@ -28810,7 +29015,7 @@ func (m *HostDataWithMeta) Reset() { *m = HostDataWithMeta{} } func (m *HostDataWithMeta) String() string { return proto.CompactTextString(m) } func (*HostDataWithMeta) ProtoMessage() {} func (*HostDataWithMeta) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{371} + return fileDescriptor_d789ea45d40d7a6b, []int{374} } func (m *HostDataWithMeta) XXX_Unmarshal(b []byte) error { @@ -28902,7 +29107,7 @@ func (m *GetScopeHostCheckRequest) Reset() { *m = GetScopeHostCheckReque func (m *GetScopeHostCheckRequest) String() string { return proto.CompactTextString(m) } func (*GetScopeHostCheckRequest) ProtoMessage() {} func (*GetScopeHostCheckRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{372} + return fileDescriptor_d789ea45d40d7a6b, []int{375} } func (m *GetScopeHostCheckRequest) XXX_Unmarshal(b []byte) error { @@ -28973,7 +29178,7 @@ func (m *GetScopeHostCheckResponse) Reset() { *m = GetScopeHostCheckResp func (m *GetScopeHostCheckResponse) String() string { return proto.CompactTextString(m) } func (*GetScopeHostCheckResponse) ProtoMessage() {} func (*GetScopeHostCheckResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d789ea45d40d7a6b, []int{373} + return fileDescriptor_d789ea45d40d7a6b, []int{376} } func (m *GetScopeHostCheckResponse) XXX_Unmarshal(b []byte) error { @@ -29345,6 +29550,9 @@ func init() { proto.RegisterType((*ListAutoScalingOptionResponse)(nil), "clustermanager.ListAutoScalingOptionResponse") proto.RegisterType((*UpdateAutoScalingStatusRequest)(nil), "clustermanager.UpdateAutoScalingStatusRequest") proto.RegisterType((*UpdateAutoScalingStatusResponse)(nil), "clustermanager.UpdateAutoScalingStatusResponse") + proto.RegisterType((*ResourceGroupInfo)(nil), "clustermanager.ResourceGroupInfo") + proto.RegisterType((*GetResourceGroupsRequest)(nil), "clustermanager.GetResourceGroupsRequest") + proto.RegisterType((*GetResourceGroupsResponse)(nil), "clustermanager.GetResourceGroupsResponse") proto.RegisterType((*RegionInfo)(nil), "clustermanager.RegionInfo") proto.RegisterType((*GetCloudRegionsRequest)(nil), "clustermanager.GetCloudRegionsRequest") proto.RegisterType((*GetCloudRegionsResponse)(nil), "clustermanager.GetCloudRegionsResponse") @@ -29481,7 +29689,7 @@ func init() { func init() { proto.RegisterFile("clustermanager.proto", fileDescriptor_d789ea45d40d7a6b) } var fileDescriptor_d789ea45d40d7a6b = []byte{ - // 68326 bytes of a gzipped FileDescriptorProto + // 68633 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x0b, 0x70, 0x1b, 0x47, 0xb2, 0x20, 0xf8, 0x9a, 0xfa, 0x91, 0x45, 0xfd, 0xdc, 0xb6, 0x64, 0x5a, 0xb2, 0x35, 0x30, 0x3d, 0x33, 0x26, 0x31, 0xa4, 0x28, 0xb5, 0x3d, 0xfe, 0xd0, 0xe3, 0x19, 0x37, 0x41, 0x4a, 0xc6, 0x48, @@ -31338,7 +31546,7 @@ var fileDescriptor_d789ea45d40d7a6b = []byte{ 0x2a, 0x84, 0x36, 0xd1, 0x02, 0x82, 0xfc, 0x16, 0xaa, 0xd2, 0x3c, 0x81, 0x29, 0x16, 0x67, 0xc0, 0xf8, 0x66, 0x09, 0xc4, 0xaf, 0x37, 0xb2, 0x3a, 0x32, 0x4d, 0x4b, 0x2a, 0x54, 0xa9, 0x14, 0xbd, 0x22, 0x58, 0xbf, 0x22, 0x16, 0x12, 0x37, 0xa4, 0xef, 0xf6, 0x69, 0xcd, 0xa7, 0xe3, 0x9f, 0x45, - 0xe2, 0xdf, 0xee, 0xb1, 0x0f, 0x76, 0x8d, 0x63, 0x86, 0x29, 0xbc, 0x90, 0x8d, 0xa6, 0x99, 0x43, + 0xe2, 0xdf, 0xee, 0xb1, 0x0f, 0x76, 0x8d, 0x63, 0x86, 0x29, 0x3c, 0x98, 0x83, 0xa6, 0x99, 0x43, 0x94, 0x05, 0xfc, 0x7e, 0xa5, 0x36, 0xac, 0xcf, 0x77, 0xad, 0x53, 0x56, 0x87, 0x63, 0xf1, 0x30, 0xb2, 0xba, 0x27, 0x63, 0xd1, 0xbd, 0x86, 0xb8, 0x6e, 0x3e, 0x10, 0x33, 0x25, 0x9e, 0x64, 0xf3, 0x77, 0xc9, 0xbe, 0xfe, 0x58, 0x74, 0x6f, 0x89, 0xa7, 0xb6, 0x3e, 0xb4, 0xe0, 0xa3, 0x8f, 0x3e, @@ -31353,2406 +31561,2425 @@ var fileDescriptor_d789ea45d40d7a6b = []byte{ 0x83, 0x8a, 0x8d, 0x26, 0x3e, 0x8f, 0xbe, 0xe0, 0x01, 0x97, 0xa8, 0xc4, 0xe7, 0x51, 0x6c, 0x80, 0x02, 0x75, 0xe0, 0xd9, 0x04, 0xfa, 0x57, 0xbc, 0x15, 0x8e, 0x51, 0xbe, 0x2f, 0xcd, 0x0e, 0x66, 0xea, 0x73, 0x34, 0x27, 0xc0, 0xaf, 0xa6, 0xb2, 0xc2, 0x6c, 0xe3, 0x40, 0x47, 0x91, 0x15, 0xa6, - 0x10, 0x99, 0x91, 0x3e, 0x25, 0x61, 0x55, 0xfa, 0x2d, 0x0a, 0x08, 0xae, 0x10, 0x24, 0x4a, 0x00, - 0x7f, 0x24, 0xc0, 0xb5, 0x71, 0x71, 0x4c, 0xd8, 0x83, 0x73, 0x23, 0xbb, 0xb1, 0xb3, 0x79, 0x11, - 0x9c, 0x26, 0xd1, 0xc8, 0xe3, 0x90, 0xcc, 0x3a, 0x1d, 0x01, 0x1b, 0xcc, 0xd2, 0x33, 0x85, 0xcd, - 0x19, 0x68, 0x12, 0x0b, 0xf6, 0xf7, 0x3c, 0xce, 0x36, 0x90, 0x8c, 0x6d, 0xd6, 0xe2, 0xe3, 0xf6, - 0x1b, 0x0a, 0x58, 0x33, 0x1e, 0x39, 0x0b, 0xfd, 0x47, 0x41, 0x32, 0x6d, 0x19, 0x68, 0xba, 0xcb, - 0xce, 0xff, 0x5c, 0xb7, 0xe3, 0x9f, 0x33, 0xd0, 0xe4, 0x4a, 0x6c, 0xae, 0x81, 0x43, 0xb0, 0xae, - 0xd2, 0x17, 0xb6, 0xda, 0xbc, 0xfb, 0x9c, 0x21, 0x23, 0x16, 0x4d, 0x1b, 0xe3, 0x31, 0x63, 0x30, - 0x7a, 0xd1, 0x57, 0x58, 0xd0, 0x78, 0x86, 0x19, 0x2a, 0x60, 0x0c, 0x68, 0x9c, 0xc5, 0xdf, 0xfc, - 0x1f, 0x51, 0xb6, 0xcf, 0x1f, 0x26, 0x9a, 0x82, 0xdc, 0xd2, 0x8d, 0xaa, 0xa4, 0x08, 0x50, 0x22, - 0xbe, 0x43, 0x58, 0x55, 0xb8, 0x0f, 0x07, 0xaf, 0x68, 0x43, 0x9d, 0x80, 0x39, 0x8a, 0x19, 0x53, - 0x34, 0x2d, 0x72, 0x24, 0x36, 0x78, 0x1a, 0xd0, 0x22, 0xdb, 0x66, 0xa1, 0x87, 0x86, 0xe2, 0x8a, - 0x0d, 0x36, 0x6b, 0xfd, 0x57, 0x62, 0xd1, 0xbd, 0x50, 0x43, 0xe2, 0xdc, 0xc3, 0x47, 0x4a, 0xf4, - 0x8d, 0x40, 0x8b, 0x05, 0xfb, 0x8e, 0x89, 0x8f, 0xc4, 0xa2, 0x7b, 0x0d, 0x06, 0x81, 0xc5, 0x57, - 0xf1, 0x73, 0x27, 0xb5, 0xa1, 0xce, 0xc2, 0x7f, 0x98, 0x89, 0xf2, 0x8d, 0x2e, 0x54, 0xb1, 0x73, - 0xcc, 0x45, 0xb1, 0x83, 0xe3, 0x79, 0x33, 0x8f, 0x45, 0x60, 0x34, 0xc5, 0x0e, 0xf8, 0x75, 0x6a, - 0xc3, 0x07, 0x46, 0x55, 0xef, 0x90, 0xe8, 0x7b, 0x30, 0xbb, 0xd8, 0x50, 0x37, 0x6c, 0x17, 0x28, - 0x77, 0x8c, 0xaf, 0xfc, 0x68, 0x4a, 0x1e, 0x1b, 0xb7, 0x9d, 0x79, 0xab, 0xdc, 0x76, 0x2d, 0xa3, - 0x2c, 0x82, 0xf7, 0x62, 0x85, 0x2a, 0x95, 0x30, 0xca, 0xa2, 0x5b, 0x7f, 0x95, 0x4c, 0xe5, 0xd0, - 0xed, 0x46, 0xf8, 0xfc, 0x5b, 0x4e, 0x35, 0xce, 0x8b, 0xf6, 0xf8, 0x28, 0xec, 0x54, 0x81, 0x51, - 0x4f, 0xa3, 0x73, 0x62, 0x54, 0x3a, 0xbf, 0x74, 0x51, 0xe9, 0x3c, 0x37, 0x8a, 0x4a, 0x27, 0xe5, - 0xb8, 0x77, 0x5d, 0xa9, 0xf3, 0x8e, 0x8b, 0x52, 0xe7, 0xc5, 0x9b, 0x50, 0xea, 0xe4, 0x07, 0x27, - 0x59, 0x94, 0x3a, 0x7f, 0x62, 0x51, 0xeb, 0x6c, 0x71, 0xaa, 0x75, 0x26, 0x88, 0xb3, 0x1c, 0x31, - 0xe0, 0x4b, 0x03, 0x81, 0x7a, 0x88, 0x00, 0x8f, 0xd3, 0xf1, 0x5b, 0x54, 0x3e, 0x45, 0x69, 0x54, - 0x3e, 0xa6, 0xb5, 0x98, 0x8e, 0x6d, 0xac, 0x0a, 0xa0, 0x7f, 0xed, 0xaa, 0x00, 0x3a, 0x75, 0x2f, - 0x29, 0x80, 0x0a, 0x82, 0x33, 0x5c, 0x15, 0x40, 0x7f, 0x62, 0xd5, 0xfc, 0x30, 0x0e, 0x5c, 0x79, - 0xee, 0x0e, 0x5c, 0x76, 0x4c, 0x77, 0x17, 0x94, 0x16, 0x2f, 0xd8, 0xe3, 0x09, 0xcd, 0x4d, 0xa9, - 0xb4, 0x60, 0xc8, 0x52, 0xa2, 0xb5, 0xb8, 0x80, 0x11, 0x33, 0x41, 0xed, 0x24, 0x6b, 0xc9, 0xa3, - 0xa9, 0x16, 0x49, 0x9a, 0x95, 0x06, 0x55, 0x69, 0x83, 0x60, 0x76, 0x13, 0xdf, 0x22, 0x66, 0x7c, - 0xd1, 0xbd, 0xe0, 0xd2, 0x2d, 0x26, 0xce, 0xb6, 0xc3, 0x6b, 0x50, 0xe2, 0x89, 0x45, 0xf7, 0x56, - 0x96, 0x6b, 0x6a, 0x9b, 0xf9, 0xb0, 0x15, 0x7b, 0x62, 0x83, 0x83, 0xf1, 0x1d, 0x9d, 0xb1, 0x81, - 0x48, 0xe2, 0x6c, 0xbb, 0xd6, 0x7e, 0x51, 0xeb, 0xec, 0xa7, 0x19, 0xbf, 0x06, 0x4f, 0x1b, 0xf8, - 0x39, 0x36, 0x10, 0xd5, 0x76, 0xed, 0xa4, 0x7e, 0x13, 0xe6, 0xe7, 0xec, 0x1e, 0x3d, 0x93, 0xef, - 0x3b, 0x8f, 0x1e, 0x9f, 0xd5, 0x20, 0x3e, 0xdf, 0x40, 0xee, 0xe5, 0x56, 0x83, 0xf8, 0x67, 0xc6, - 0x62, 0x10, 0x5f, 0x4c, 0xe7, 0x44, 0x4a, 0xac, 0x16, 0xf2, 0x56, 0x2b, 0xeb, 0x14, 0xde, 0x71, - 0x0e, 0x20, 0xbe, 0xeb, 0x12, 0xeb, 0xcd, 0x0e, 0x1b, 0x68, 0x88, 0xb9, 0x84, 0xd3, 0x54, 0xd8, - 0x6d, 0xa0, 0x9f, 0xbf, 0x65, 0x1b, 0x68, 0x87, 0xed, 0xb3, 0x9b, 0x21, 0xf1, 0xd4, 0x7b, 0xdd, - 0x90, 0x78, 0xda, 0x0f, 0x37, 0x24, 0x7e, 0x15, 0x8d, 0xdb, 0xac, 0x04, 0x43, 0x3a, 0x1d, 0x30, - 0xdd, 0x10, 0x3c, 0x3c, 0x26, 0x18, 0x65, 0x62, 0x81, 0x65, 0x87, 0x99, 0xfc, 0x2f, 0x94, 0x87, - 0x34, 0x9a, 0xda, 0xf8, 0xdc, 0x19, 0xf7, 0x26, 0x9f, 0x7b, 0xf7, 0xd4, 0x00, 0x83, 0x9c, 0x2a, - 0x5d, 0xe6, 0xd0, 0x37, 0x9c, 0xe0, 0x20, 0x92, 0xc5, 0x05, 0xc0, 0x08, 0x6b, 0x97, 0xbf, 0x06, - 0xd9, 0x3e, 0x15, 0x4c, 0xc1, 0x6e, 0x95, 0x96, 0xd5, 0x10, 0xcd, 0x30, 0xc6, 0xb6, 0x69, 0x84, - 0xf6, 0x3f, 0x9a, 0xac, 0xfe, 0xdf, 0x65, 0xa0, 0x29, 0xb6, 0x69, 0xdf, 0xfb, 0xe2, 0xd0, 0x1a, - 0x9b, 0x38, 0xd4, 0x25, 0x0d, 0x4e, 0x53, 0x6d, 0x18, 0x02, 0x2f, 0x82, 0x38, 0x74, 0x36, 0x8c, - 0x63, 0x01, 0x52, 0xb5, 0x0d, 0x04, 0x93, 0x24, 0xf6, 0xb8, 0x61, 0xe2, 0xe9, 0xd8, 0x0d, 0x71, - 0xba, 0x0d, 0x1b, 0x8d, 0xc2, 0x93, 0xfe, 0x2f, 0x99, 0x68, 0x26, 0x84, 0xdb, 0x74, 0x9a, 0xc3, - 0xfd, 0x58, 0x46, 0x9e, 0x31, 0x62, 0xaa, 0x00, 0xdf, 0xc5, 0x2f, 0x03, 0xc8, 0xd9, 0x00, 0x3a, - 0x05, 0x5b, 0xa5, 0x78, 0x8a, 0xb3, 0xda, 0x1d, 0x5c, 0x8f, 0x6c, 0xa3, 0x91, 0xfd, 0x08, 0xb3, - 0xa9, 0xe3, 0xbe, 0xc1, 0x66, 0xc8, 0x12, 0x42, 0x3e, 0xb4, 0x80, 0x3c, 0x2f, 0xf1, 0xd6, 0x08, - 0x38, 0xcd, 0xb3, 0xc4, 0x4d, 0x6c, 0xa0, 0x3d, 0x36, 0xd4, 0x9d, 0x3c, 0x7b, 0x46, 0xeb, 0xdc, - 0x1b, 0x1b, 0x1c, 0x8c, 0x0d, 0x1f, 0x30, 0x23, 0xaf, 0x61, 0x9e, 0x45, 0xff, 0x86, 0x91, 0x7d, - 0xcf, 0xc0, 0x02, 0x1d, 0xbe, 0xd0, 0xf2, 0x40, 0xb0, 0x56, 0xa9, 0xd3, 0xba, 0x70, 0x72, 0xa9, - 0xf6, 0x4e, 0xad, 0xab, 0x4d, 0xbb, 0x7c, 0x3a, 0x36, 0xdc, 0x73, 0x3d, 0xb2, 0x4d, 0xb6, 0x4d, - 0x9b, 0x7f, 0xc5, 0x61, 0x71, 0x8a, 0xb9, 0x30, 0xd3, 0xe2, 0x74, 0x3a, 0xcc, 0x97, 0xe0, 0x67, - 0x17, 0xeb, 0xd3, 0x65, 0xaa, 0xf4, 0x02, 0x7a, 0x5e, 0x48, 0x75, 0x40, 0x46, 0x5a, 0x14, 0x56, - 0x57, 0x67, 0x91, 0x43, 0x45, 0xb3, 0x50, 0x81, 0x7b, 0xdf, 0x7b, 0xff, 0xda, 0xac, 0x1b, 0x9b, - 0x16, 0x01, 0xbb, 0x64, 0xc3, 0xb5, 0x99, 0x43, 0xae, 0xcd, 0xe5, 0xaf, 0x61, 0x5b, 0xdc, 0x75, - 0x09, 0xbf, 0x19, 0x83, 0x2e, 0x01, 0x3b, 0x07, 0x66, 0xeb, 0xcd, 0x42, 0xa2, 0xc0, 0xee, 0x31, - 0x1b, 0xa1, 0xcf, 0x50, 0x2c, 0xb4, 0x51, 0xc5, 0xc2, 0xbd, 0x64, 0xfc, 0x9d, 0xf2, 0xdc, 0xad, - 0x50, 0x97, 0xc6, 0x50, 0xf6, 0x3f, 0x64, 0xa0, 0x87, 0x41, 0x63, 0x6b, 0x1d, 0x04, 0x2b, 0xcb, - 0x7e, 0x4c, 0xf4, 0xb0, 0xca, 0x50, 0x38, 0x66, 0x8c, 0x49, 0xe1, 0x88, 0xa3, 0x41, 0x11, 0x85, - 0xe3, 0x04, 0xa7, 0x92, 0x91, 0x2f, 0x35, 0x23, 0x8e, 0x66, 0x1a, 0x72, 0x95, 0x47, 0xcc, 0x88, - 0xa3, 0x3c, 0xbd, 0x78, 0xda, 0xde, 0xc3, 0x86, 0x64, 0xc5, 0xa0, 0x2a, 0x48, 0x23, 0x23, 0x43, - 0x51, 0xda, 0xfd, 0x10, 0x0b, 0x48, 0xca, 0x00, 0x46, 0x0f, 0x33, 0xd2, 0xdc, 0x3e, 0xf2, 0xe9, - 0x31, 0xab, 0xae, 0x1b, 0xa6, 0x55, 0xd8, 0x9a, 0x89, 0x1e, 0x49, 0x33, 0xdc, 0xbd, 0x7f, 0x41, - 0x6b, 0x2d, 0x17, 0x74, 0xb4, 0x53, 0xc2, 0xd9, 0xd4, 0xe0, 0x9e, 0xce, 0x83, 0xe1, 0x60, 0xb7, - 0xb4, 0xae, 0x8e, 0x44, 0xf7, 0x0e, 0x56, 0x4f, 0x0c, 0xce, 0x9c, 0xe4, 0x9d, 0xab, 0x53, 0x25, - 0x2f, 0x7a, 0x4f, 0x48, 0xbf, 0x53, 0xe2, 0x02, 0xe7, 0xce, 0xdb, 0x46, 0x1c, 0xf9, 0xf4, 0x58, - 0x1a, 0x50, 0xef, 0xcd, 0x45, 0xf9, 0x70, 0x5f, 0xee, 0xc0, 0xeb, 0x77, 0x21, 0x03, 0xe5, 0x1a, - 0x0f, 0x09, 0x79, 0xf7, 0xf6, 0x67, 0xa8, 0x52, 0x57, 0x86, 0x40, 0x8b, 0xc5, 0xed, 0x19, 0x24, - 0x0e, 0x1d, 0x8e, 0x5b, 0x0b, 0x17, 0xd6, 0x9a, 0x24, 0xe1, 0x7a, 0x64, 0x1b, 0x5b, 0x19, 0x1b, - 0xea, 0x8e, 0x0d, 0x44, 0xb4, 0x2b, 0x97, 0x2c, 0x4f, 0x20, 0x39, 0x0b, 0xc2, 0x80, 0x1a, 0x2e, - 0x11, 0x54, 0xbe, 0x09, 0xc6, 0x4d, 0x34, 0x62, 0x69, 0xfc, 0xc2, 0x09, 0x30, 0xb9, 0x62, 0x07, - 0xd6, 0xf6, 0x9e, 0x8b, 0xf7, 0x1c, 0x4f, 0x7e, 0xb7, 0x7d, 0xe4, 0xc0, 0xd5, 0x1b, 0x43, 0x6d, - 0xf1, 0x81, 0xe6, 0x44, 0xd7, 0x4e, 0x78, 0xf3, 0xf4, 0x07, 0xf4, 0xea, 0x51, 0x9d, 0xd6, 0x38, - 0x70, 0x55, 0xeb, 0xea, 0xd0, 0x3a, 0xcf, 0x93, 0xa8, 0xbb, 0xd8, 0x8c, 0x4b, 0x9f, 0x2e, 0x83, - 0x7d, 0xe1, 0xc1, 0x4d, 0x7c, 0xb9, 0x47, 0x6b, 0x19, 0x4c, 0x7e, 0xfa, 0xa5, 0x3e, 0xce, 0xe7, - 0x51, 0xf0, 0xc9, 0xd3, 0x97, 0x7a, 0x6a, 0x87, 0xce, 0xb1, 0x00, 0xda, 0xc6, 0xd1, 0xd4, 0xf4, - 0x07, 0x95, 0xee, 0x07, 0x7f, 0x9c, 0x43, 0xbc, 0xe1, 0xba, 0x0b, 0x07, 0x85, 0xe5, 0x05, 0x70, - 0x9f, 0x03, 0xaa, 0x54, 0x2f, 0xb8, 0x54, 0x8b, 0xeb, 0x08, 0x28, 0x90, 0xb4, 0xe6, 0xfa, 0xe0, - 0x3a, 0xeb, 0xd5, 0x7b, 0x30, 0x71, 0xe0, 0x74, 0x89, 0x27, 0x6c, 0xc4, 0xfa, 0x9d, 0x3f, 0xb2, - 0x3f, 0x12, 0xef, 0xdf, 0x0a, 0xcd, 0x8a, 0x3c, 0x41, 0x25, 0xec, 0xf5, 0xf9, 0xe7, 0xc7, 0x06, - 0x9b, 0x13, 0x67, 0x07, 0x47, 0x8e, 0x9c, 0x2a, 0x86, 0x24, 0x0c, 0xa4, 0x1a, 0x67, 0xda, 0x74, - 0x7e, 0xcb, 0x8d, 0xa6, 0xc9, 0xfa, 0x89, 0xd3, 0x34, 0xd9, 0xb7, 0x42, 0xd3, 0xf0, 0x2d, 0x1c, - 0x9a, 0x5a, 0x67, 0xbd, 0x6b, 0xb5, 0x81, 0x20, 0x04, 0x2e, 0xcf, 0x05, 0x27, 0x63, 0xb7, 0x7a, - 0xf1, 0x45, 0x80, 0x62, 0x6d, 0xef, 0x61, 0x18, 0xb5, 0xd8, 0x03, 0xfb, 0x45, 0x36, 0x8b, 0xee, - 0x14, 0xf9, 0x32, 0xb6, 0xc6, 0xd3, 0xa2, 0xfb, 0x60, 0x9b, 0x64, 0xb7, 0x21, 0x8d, 0x60, 0x79, - 0x8e, 0xab, 0x3f, 0x2a, 0x5d, 0xf5, 0x55, 0x16, 0x9a, 0x62, 0xeb, 0xf4, 0x80, 0xa0, 0xfa, 0xa9, - 0x12, 0x54, 0xaf, 0xa8, 0xd2, 0x4b, 0xe8, 0x05, 0xc1, 0x79, 0xe0, 0x63, 0xa6, 0xa4, 0xfe, 0xae, - 0x08, 0xe5, 0x1b, 0xb9, 0x38, 0xe9, 0xf3, 0xe2, 0x6e, 0xbe, 0x50, 0xcc, 0x3e, 0x2f, 0x8f, 0x8e, - 0xa2, 0x91, 0x32, 0x25, 0x0b, 0x6c, 0x7c, 0x78, 0x17, 0x4d, 0xd2, 0x9c, 0xf4, 0x9a, 0x24, 0xab, - 0xfe, 0x28, 0xec, 0x70, 0x12, 0x7a, 0xf3, 0xf6, 0x3b, 0x09, 0x91, 0x89, 0x9b, 0x8a, 0xa0, 0xe7, - 0x6c, 0x5e, 0x42, 0x8f, 0x8e, 0xa2, 0x08, 0xa2, 0x0a, 0x9f, 0x1a, 0xab, 0x2f, 0xd0, 0x4b, 0xb7, - 0xe8, 0x0b, 0x44, 0x26, 0x44, 0x9c, 0x81, 0x96, 0x39, 0xb5, 0x48, 0x9e, 0xd4, 0xce, 0x40, 0xc6, - 0x29, 0x98, 0x9a, 0xa2, 0x0a, 0x17, 0x4d, 0xd1, 0xe3, 0xa3, 0x68, 0x8a, 0xc8, 0x28, 0xac, 0x5e, - 0xe8, 0x6d, 0x37, 0xbd, 0xd0, 0xf3, 0xb7, 0xac, 0x17, 0xb2, 0xea, 0x7f, 0xde, 0x74, 0xd1, 0xff, - 0x2c, 0x55, 0xa5, 0x67, 0x2c, 0xfa, 0x9f, 0x27, 0x6d, 0xfa, 0x9f, 0xb7, 0x37, 0x2d, 0x0d, 0x15, - 0x7b, 0xb0, 0xc2, 0xe7, 0x5d, 0x56, 0x1d, 0x64, 0xd1, 0xfd, 0x6c, 0xba, 0x59, 0xdd, 0xcf, 0x0f, - 0x71, 0xf7, 0xf9, 0xca, 0x55, 0xdb, 0xd3, 0x7a, 0xef, 0x68, 0x7b, 0x7e, 0x3a, 0xd1, 0x02, 0xed, - 0x38, 0xec, 0x2e, 0x28, 0x9b, 0x18, 0x66, 0x6e, 0xd2, 0x2d, 0x32, 0x73, 0xfc, 0x5f, 0x98, 0x71, - 0xd2, 0x41, 0x77, 0xd3, 0xcf, 0xa9, 0xd2, 0xfb, 0x34, 0xb4, 0xef, 0x3b, 0x6c, 0xe6, 0x75, 0x30, - 0x14, 0x4c, 0x6e, 0x1f, 0x86, 0x9f, 0x65, 0x72, 0x85, 0xb4, 0xa6, 0xb2, 0x6a, 0xc5, 0x8d, 0xa1, - 0x36, 0x12, 0x13, 0xfd, 0xc6, 0x50, 0x5b, 0x79, 0xc5, 0xca, 0x0a, 0x52, 0xb8, 0x5c, 0x5a, 0xb9, - 0x56, 0xae, 0xb8, 0x31, 0xd4, 0x46, 0x93, 0xcd, 0x48, 0x6b, 0x2a, 0x57, 0x57, 0x19, 0x8d, 0x2a, - 0xca, 0xbf, 0x2f, 0x2d, 0x0b, 0x4a, 0x72, 0xae, 0x31, 0x8e, 0x19, 0x5a, 0x3d, 0xd7, 0x18, 0xc5, - 0x8c, 0xad, 0x3e, 0xc9, 0x3a, 0x88, 0x3c, 0x8e, 0x8c, 0x21, 0xff, 0x09, 0x0d, 0x35, 0x3c, 0xa6, - 0xe0, 0x83, 0x8e, 0x63, 0xfb, 0x19, 0x04, 0x1f, 0x74, 0xac, 0xf9, 0xbe, 0x0b, 0x3e, 0xb8, 0x16, - 0xe5, 0x42, 0x90, 0x2d, 0x1a, 0x7d, 0x10, 0x23, 0x7e, 0x5a, 0x28, 0x0a, 0xf6, 0xf0, 0x83, 0xfa, - 0xdb, 0x88, 0xb3, 0x6f, 0x81, 0x2f, 0x31, 0x1b, 0x8d, 0x90, 0xf6, 0xe2, 0xbf, 0x71, 0x0b, 0x47, - 0xb8, 0x8f, 0x53, 0xa5, 0x4e, 0xab, 0xf2, 0x32, 0x72, 0xdb, 0x95, 0x97, 0x77, 0x2d, 0x08, 0xa1, - 0x9b, 0x67, 0xd9, 0x8c, 0x7b, 0xd4, 0xb3, 0x6c, 0xe6, 0x4f, 0xcc, 0xb3, 0xac, 0xe0, 0xa7, 0xeb, - 0x59, 0xf6, 0xd0, 0x4f, 0xc2, 0xb3, 0xcc, 0x16, 0x1c, 0x6f, 0xd6, 0xed, 0x0b, 0x8e, 0xf7, 0x0d, - 0x87, 0xc6, 0x53, 0x4d, 0x65, 0xc1, 0xec, 0x31, 0xbe, 0x4d, 0xae, 0xaa, 0xff, 0x8a, 0x1f, 0x5d, - 0xf5, 0x4f, 0xbf, 0xc0, 0xbf, 0xc9, 0x04, 0x58, 0x7b, 0xd8, 0x30, 0x8a, 0x7a, 0x9e, 0x09, 0xb0, - 0xb6, 0xe0, 0xa6, 0x02, 0xac, 0x31, 0x81, 0xd5, 0x9c, 0x46, 0x05, 0x8f, 0xdc, 0x11, 0xa3, 0x82, - 0x3f, 0x38, 0x03, 0xaa, 0xcd, 0x19, 0x95, 0x24, 0xc7, 0xa6, 0xf4, 0x8e, 0x60, 0x6b, 0x73, 0x47, - 0x0d, 0xb6, 0xe6, 0x0c, 0xb2, 0x56, 0x67, 0xb5, 0x47, 0x7c, 0x94, 0xc4, 0x75, 0x71, 0x51, 0x83, - 0xfa, 0xfc, 0x1b, 0xe0, 0xe3, 0xb7, 0x29, 0x04, 0x9b, 0xe7, 0x1e, 0xb4, 0x9c, 0xf8, 0x80, 0xb5, - 0x9c, 0x98, 0x3b, 0xea, 0x31, 0xfc, 0x20, 0xab, 0x8a, 0xb0, 0x25, 0x99, 0x04, 0x44, 0xf1, 0x5b, - 0xa3, 0x93, 0xe9, 0x4c, 0xb1, 0x58, 0xc6, 0x3a, 0xec, 0xb1, 0x19, 0x35, 0x8b, 0xe3, 0x27, 0x86, - 0xb4, 0xa1, 0xce, 0xd8, 0x40, 0x74, 0x7e, 0xd8, 0xd7, 0xa0, 0x2c, 0xac, 0x0a, 0x7c, 0x38, 0xbf, - 0x68, 0xe1, 0xf2, 0x40, 0xb0, 0xc1, 0x1b, 0x86, 0x12, 0x79, 0x79, 0xd9, 0x53, 0x4f, 0x3d, 0xf5, - 0x7c, 0x51, 0x91, 0x25, 0x45, 0x45, 0xa9, 0x69, 0x0f, 0xf6, 0x18, 0x43, 0xa2, 0x1b, 0xf6, 0x60, - 0x3c, 0xb5, 0x07, 0x73, 0x21, 0xd1, 0x0d, 0xb3, 0xb0, 0x33, 0x1c, 0x9a, 0x04, 0xbb, 0x4a, 0x0f, - 0x13, 0x82, 0xf3, 0xfd, 0x51, 0x95, 0x7e, 0x27, 0xd8, 0xaa, 0x44, 0x9f, 0x36, 0xbc, 0xcf, 0xb6, - 0xcf, 0x80, 0xeb, 0x62, 0x03, 0x51, 0xe3, 0x6c, 0xb0, 0xc9, 0x46, 0xfa, 0x43, 0x36, 0x4d, 0xc4, - 0x16, 0x81, 0x11, 0x07, 0x98, 0x34, 0xb3, 0x71, 0xe9, 0x64, 0xdb, 0xa7, 0xdd, 0x22, 0xe0, 0x3d, - 0xfe, 0x53, 0x8d, 0x80, 0xf7, 0x20, 0x30, 0xdd, 0xcd, 0x5a, 0xdb, 0xfc, 0x07, 0x4e, 0x95, 0xfe, - 0x9e, 0x43, 0x7f, 0xc7, 0x09, 0x0e, 0xf9, 0x9f, 0xf8, 0x0d, 0xe7, 0xea, 0x29, 0x0b, 0x6f, 0x79, - 0xb2, 0xff, 0x34, 0xb8, 0xc9, 0xc6, 0x06, 0x9b, 0xd9, 0xcc, 0x92, 0x44, 0x67, 0xa6, 0xb6, 0xc5, - 0xae, 0xf6, 0xc5, 0x7b, 0x3f, 0x73, 0x17, 0xfa, 0x9f, 0x6c, 0xd3, 0xd1, 0x03, 0xce, 0xd6, 0x73, - 0x3d, 0xb2, 0x8d, 0x78, 0xee, 0x42, 0xfc, 0x54, 0x9c, 0xfe, 0x87, 0x0a, 0x5c, 0x13, 0x47, 0x07, - 0xb4, 0xe6, 0x8b, 0x20, 0x92, 0xc3, 0x1f, 0xbd, 0x1c, 0x3f, 0x71, 0x25, 0xde, 0xde, 0x07, 0x8d, - 0x49, 0xa0, 0x59, 0x23, 0x4b, 0x95, 0xd3, 0x6d, 0xb7, 0xf0, 0xaf, 0x32, 0xd1, 0x14, 0xdb, 0xba, - 0xee, 0x3f, 0x73, 0x9c, 0x14, 0x94, 0xb6, 0xd3, 0x1c, 0x87, 0xea, 0x2b, 0x5d, 0x64, 0xe0, 0x2e, - 0x12, 0xea, 0xec, 0x3b, 0x27, 0xa1, 0x2e, 0x53, 0xa5, 0x57, 0xd0, 0x32, 0xc1, 0x79, 0x16, 0x86, - 0x4a, 0xda, 0x02, 0x63, 0x29, 0x84, 0xd4, 0x7f, 0xcf, 0xa1, 0xe9, 0xb2, 0x12, 0x0e, 0x6e, 0x71, - 0x64, 0xdb, 0x79, 0xd6, 0x29, 0xa9, 0x2e, 0x48, 0xa5, 0x08, 0x65, 0x45, 0xd1, 0x2f, 0x31, 0xba, - 0xa2, 0x0c, 0xc3, 0x32, 0xd8, 0x25, 0xe2, 0x5a, 0x32, 0xd2, 0x0c, 0xf1, 0x4c, 0xb8, 0x82, 0x3a, - 0xc6, 0xf8, 0xe5, 0x55, 0x55, 0xaa, 0x40, 0x65, 0x82, 0xfb, 0xa4, 0xc4, 0x39, 0x90, 0x79, 0x2a, - 0x36, 0xb0, 0x47, 0xeb, 0xdc, 0xeb, 0x8c, 0xf1, 0x68, 0x81, 0xd3, 0xcf, 0x33, 0xd1, 0x0c, 0xb7, - 0x51, 0xee, 0x7d, 0x60, 0x5d, 0x35, 0x36, 0x60, 0xc5, 0x93, 0x00, 0x60, 0x9d, 0x0e, 0xcf, 0x84, - 0xbb, 0xaa, 0xe6, 0xb5, 0x31, 0xa8, 0x6a, 0x60, 0x2c, 0xec, 0x47, 0x6b, 0x8e, 0xc5, 0xe6, 0xad, - 0x04, 0xa5, 0x4c, 0xc9, 0x5a, 0x55, 0x92, 0x51, 0xb5, 0x90, 0x62, 0x63, 0xd3, 0x9c, 0x4f, 0x7a, - 0x7b, 0xb4, 0x3d, 0x19, 0x68, 0xe2, 0x0a, 0x25, 0x9c, 0x4a, 0x0f, 0x9f, 0x71, 0xfb, 0xf4, 0xf0, - 0xf5, 0xc4, 0xf2, 0x1c, 0xb3, 0x27, 0x70, 0x22, 0x98, 0x12, 0x37, 0x4b, 0xc5, 0x65, 0xce, 0xc7, - 0xda, 0x12, 0x39, 0x89, 0x5a, 0x8d, 0x77, 0x98, 0xfa, 0x46, 0xbc, 0x65, 0xf0, 0x53, 0x36, 0x87, - 0x2a, 0x79, 0x5a, 0x95, 0x96, 0xa0, 0x45, 0x82, 0x75, 0x6d, 0x22, 0x0f, 0xce, 0xc7, 0x29, 0x21, - 0xf7, 0x4c, 0x16, 0x9a, 0xc4, 0xf6, 0xf8, 0xd9, 0x41, 0xac, 0x82, 0xb2, 0x31, 0x37, 0x93, 0x0a, - 0x9d, 0x56, 0xb0, 0xac, 0x8e, 0xff, 0xfd, 0x00, 0xa8, 0x12, 0xa0, 0x8f, 0x38, 0xd7, 0x36, 0xb2, - 0xd6, 0x7c, 0x29, 0x36, 0x48, 0x5e, 0x3d, 0xf2, 0x15, 0x68, 0x79, 0x97, 0x35, 0x8c, 0x92, 0x2a, - 0x2d, 0x43, 0x2f, 0x0a, 0xb6, 0x93, 0xb6, 0x01, 0x47, 0xfa, 0x6b, 0xf3, 0x3b, 0x42, 0x04, 0x31, - 0x5b, 0xc1, 0x6f, 0x40, 0x79, 0x86, 0x7a, 0x0d, 0xf3, 0xf6, 0x80, 0xba, 0xf5, 0xc7, 0x42, 0xb0, - 0x54, 0x18, 0x02, 0x2d, 0x2d, 0x7a, 0x40, 0xbb, 0xb0, 0x8d, 0x66, 0xec, 0x67, 0x35, 0x3f, 0xf3, - 0xc3, 0x9b, 0x94, 0x45, 0x9b, 0x96, 0x86, 0x16, 0x61, 0xcd, 0x4f, 0x91, 0x6c, 0xe9, 0x5f, 0xd8, - 0xcd, 0xa1, 0x29, 0x65, 0x1b, 0x95, 0xda, 0x4d, 0x38, 0xa8, 0x3b, 0x89, 0x73, 0xc0, 0xbf, 0x8c, - 0x72, 0x7d, 0x7e, 0xbf, 0x12, 0xac, 0xac, 0x0e, 0x15, 0x70, 0x58, 0x68, 0x87, 0x3d, 0xfe, 0x69, - 0xa1, 0x38, 0x0d, 0x38, 0x66, 0xf0, 0x10, 0xa4, 0x52, 0x3b, 0x5a, 0x5f, 0x52, 0xae, 0x4a, 0x12, - 0x7a, 0x59, 0x70, 0x0e, 0x2d, 0x3e, 0x1a, 0xff, 0x2c, 0x12, 0x3f, 0x7e, 0xda, 0x1f, 0xa8, 0x53, - 0x88, 0x9d, 0x0c, 0x36, 0x58, 0x5e, 0x5f, 0x4b, 0x24, 0xa1, 0xd7, 0x38, 0x3a, 0x4a, 0xe1, 0xa5, - 0x4c, 0xc4, 0xb3, 0x23, 0x84, 0x1a, 0x03, 0xfe, 0x90, 0x72, 0xaf, 0x5f, 0xa3, 0x7a, 0x7a, 0x8d, - 0xdc, 0xf3, 0x36, 0x39, 0x16, 0xb4, 0xb0, 0xdc, 0x1b, 0xf6, 0x82, 0xcc, 0x04, 0xa7, 0x2d, 0x85, - 0xbb, 0xf5, 0x28, 0x0c, 0x8e, 0x37, 0x0a, 0x6f, 0x19, 0x7c, 0xa6, 0x78, 0x93, 0xb2, 0x25, 0x7e, - 0xb8, 0xbf, 0xb2, 0x1a, 0x6e, 0xd9, 0xac, 0x1a, 0x34, 0x9e, 0x76, 0x77, 0x21, 0x70, 0x17, 0x5b, - 0x69, 0xe7, 0x59, 0x6e, 0x22, 0x2f, 0x19, 0xcf, 0x9b, 0x25, 0x7e, 0x89, 0xf1, 0xaa, 0xcb, 0xe6, - 0x1b, 0xbb, 0x45, 0x72, 0x3e, 0x60, 0xcd, 0x8a, 0x93, 0x20, 0xb9, 0xce, 0x21, 0x64, 0x8e, 0xcc, - 0x97, 0xa1, 0x71, 0xbe, 0x50, 0xc5, 0x47, 0xbe, 0x10, 0x64, 0x24, 0xcc, 0x25, 0xc9, 0x78, 0x48, - 0x99, 0x38, 0x9b, 0x88, 0x5f, 0x18, 0x70, 0x30, 0x14, 0x65, 0xbd, 0xb2, 0xd1, 0x8a, 0x2f, 0x75, - 0xbe, 0x25, 0x58, 0xd6, 0xc0, 0xbc, 0x25, 0x04, 0x2a, 0x41, 0xd7, 0xec, 0x46, 0xd6, 0xac, 0xb4, - 0x6a, 0xd8, 0x33, 0xcd, 0x54, 0xb1, 0x16, 0x0d, 0x7b, 0x81, 0x73, 0x1c, 0x17, 0x6d, 0x7b, 0xe1, - 0xdf, 0x67, 0xa0, 0xa9, 0x6b, 0xfd, 0x65, 0x81, 0x60, 0x5d, 0xc0, 0x0f, 0xab, 0xbd, 0x3d, 0xb7, - 0x87, 0xaf, 0x71, 0x2e, 0xf5, 0x19, 0x55, 0xfa, 0x05, 0xbb, 0xd4, 0x39, 0xc4, 0x6c, 0x8e, 0x4e, - 0x14, 0xa3, 0x2a, 0x5a, 0x8f, 0x83, 0x3a, 0x78, 0x38, 0x76, 0xed, 0x41, 0x23, 0x9f, 0x4f, 0x26, - 0x9e, 0xd2, 0x3b, 0xaa, 0xf4, 0x2b, 0x23, 0x9f, 0x4f, 0x35, 0x99, 0x0f, 0x5e, 0x23, 0xcc, 0xe6, - 0xc6, 0x50, 0x9b, 0xa6, 0xb6, 0xb9, 0xcd, 0x33, 0x16, 0x6d, 0x1b, 0x89, 0xb4, 0xc6, 0x06, 0x22, - 0x3a, 0x07, 0x33, 0x74, 0x58, 0x6b, 0x6e, 0x71, 0xf6, 0x26, 0xc9, 0x80, 0x0c, 0x2b, 0x1d, 0xb7, - 0x5d, 0x12, 0x67, 0x83, 0xac, 0x93, 0x74, 0xee, 0xec, 0x4f, 0x9e, 0xdf, 0xae, 0x45, 0xcf, 0x00, - 0x44, 0x15, 0x5e, 0xcb, 0x40, 0xd3, 0xac, 0x9d, 0xee, 0x8f, 0xbb, 0x6f, 0x8d, 0x9f, 0xf2, 0x98, - 0xdb, 0x6d, 0x5b, 0xdd, 0x48, 0xd4, 0xb7, 0x35, 0x58, 0x0f, 0x48, 0x32, 0xa2, 0xe2, 0x2b, 0x4f, - 0xc6, 0x24, 0x14, 0x08, 0x58, 0x51, 0x56, 0xaa, 0xd2, 0x72, 0x54, 0x2e, 0xb8, 0xee, 0x86, 0x38, - 0x9b, 0x85, 0x02, 0xdb, 0x1e, 0x3a, 0x6f, 0xe5, 0xbf, 0xcf, 0x40, 0x53, 0x1e, 0x40, 0x6b, 0x6a, - 0x68, 0x5d, 0xaa, 0x4a, 0xcf, 0xa0, 0xa7, 0x04, 0xe7, 0x1e, 0x89, 0x73, 0x58, 0x58, 0x8d, 0x0d, - 0xb4, 0xdb, 0xc1, 0xf5, 0x6f, 0x32, 0x10, 0xff, 0x00, 0x58, 0xbd, 0x25, 0xaf, 0xa9, 0xd2, 0x0a, - 0x54, 0x21, 0xb8, 0xec, 0x85, 0x15, 0x04, 0x9c, 0x5b, 0xe8, 0x84, 0xd6, 0x68, 0x96, 0x21, 0xa1, - 0x60, 0xa1, 0xb5, 0xd2, 0x01, 0xad, 0x0b, 0xc6, 0x00, 0xad, 0xdf, 0x97, 0x8e, 0x53, 0xb9, 0xac, - 0x5c, 0x2e, 0xbf, 0x8e, 0x81, 0xdb, 0x2b, 0xa6, 0x2d, 0x01, 0xec, 0xf6, 0x09, 0x4e, 0x95, 0xde, - 0xa4, 0xb6, 0x04, 0x55, 0xec, 0x84, 0x61, 0x92, 0xf3, 0xad, 0x5a, 0xfd, 0x45, 0xc4, 0x00, 0x60, - 0x91, 0xa1, 0xff, 0x5f, 0x24, 0x95, 0x97, 0x2f, 0x20, 0x26, 0x00, 0x8b, 0xe4, 0x8a, 0x55, 0xab, - 0xd7, 0x55, 0x18, 0x3f, 0x8b, 0x20, 0x35, 0xbb, 0xc3, 0x2e, 0xc0, 0x69, 0x43, 0x30, 0x81, 0x19, - 0x44, 0x9e, 0x64, 0x1d, 0x85, 0x1a, 0x0f, 0xc8, 0x68, 0x82, 0x0e, 0xb3, 0x2b, 0x82, 0x81, 0xa6, - 0x46, 0x1a, 0x7a, 0x66, 0xb1, 0x2a, 0x2d, 0x10, 0xd8, 0xf2, 0x14, 0xf7, 0x4e, 0x6f, 0xb1, 0x41, - 0x6f, 0x21, 0xb3, 0x8d, 0xf9, 0x95, 0xec, 0x3d, 0xce, 0x32, 0x5c, 0xf9, 0x6e, 0xe6, 0x1e, 0xb3, - 0x17, 0x78, 0xa9, 0x69, 0xed, 0x91, 0x6d, 0x18, 0xb2, 0x4d, 0x33, 0xad, 0x3d, 0xc6, 0x93, 0x91, - 0x22, 0xcd, 0xc6, 0xe5, 0xa7, 0x06, 0xfb, 0xa5, 0xaa, 0xf4, 0x32, 0x7a, 0x49, 0x70, 0x1e, 0xbe, - 0xf8, 0x08, 0x78, 0xec, 0xe9, 0x93, 0xae, 0xac, 0x86, 0x01, 0xf0, 0xcd, 0x05, 0x18, 0x64, 0x29, - 0xc7, 0xff, 0x98, 0x81, 0x78, 0xb6, 0xff, 0xfd, 0x71, 0x21, 0x7f, 0x69, 0xb9, 0x90, 0xae, 0xb4, - 0x1a, 0xb9, 0x87, 0x38, 0x2a, 0x08, 0xdc, 0xc3, 0x87, 0x49, 0x5e, 0xfc, 0x96, 0x2e, 0x6d, 0xf7, - 0x71, 0x4d, 0x6d, 0x83, 0x64, 0xe5, 0xe4, 0x98, 0xc9, 0xbd, 0xac, 0x51, 0xa5, 0x6a, 0x54, 0x25, - 0xb8, 0x6c, 0x89, 0xf8, 0x24, 0x2b, 0x66, 0x22, 0x8a, 0x4d, 0x3c, 0x37, 0xd3, 0xda, 0x01, 0x53, - 0x64, 0xce, 0x0b, 0xba, 0x0c, 0x68, 0x3c, 0x98, 0x11, 0x5f, 0x80, 0xc6, 0x85, 0x9a, 0x6a, 0x6b, - 0x95, 0x10, 0xb9, 0x97, 0xb2, 0xf1, 0x93, 0x9f, 0x81, 0x72, 0xde, 0x87, 0x2c, 0xf8, 0x19, 0xb8, - 0x82, 0xfc, 0x2a, 0xfc, 0x37, 0x19, 0x68, 0x96, 0x45, 0xec, 0xb5, 0x0a, 0x6b, 0xdb, 0x8c, 0x9b, - 0xfe, 0xa2, 0x53, 0x74, 0x85, 0x6d, 0x21, 0x19, 0x70, 0x9c, 0x44, 0x1d, 0xbe, 0x89, 0x2a, 0xd0, - 0x04, 0xbf, 0x77, 0x50, 0x0e, 0x28, 0xef, 0x08, 0xe1, 0xfb, 0x48, 0x0a, 0x6e, 0x16, 0xbe, 0x59, - 0xfa, 0xb8, 0x2a, 0x15, 0x0a, 0xa4, 0x87, 0x91, 0x1a, 0x00, 0xb4, 0x80, 0xa0, 0x11, 0x24, 0x1f, - 0x20, 0x2d, 0xf8, 0x17, 0x1c, 0xee, 0x61, 0x8f, 0xa6, 0x4a, 0x48, 0x60, 0x80, 0xb7, 0x29, 0x1c, - 0x5b, 0xa7, 0x4a, 0x35, 0xe8, 0x0d, 0x21, 0xcd, 0xda, 0x8d, 0x7b, 0x96, 0x6a, 0x1e, 0xb6, 0x14, - 0x05, 0x30, 0xa9, 0xc2, 0x1b, 0x19, 0x68, 0xb6, 0xeb, 0x98, 0xf7, 0x07, 0xf0, 0x5b, 0x6d, 0x9c, - 0x47, 0x39, 0x2f, 0x36, 0x00, 0x1d, 0x75, 0xd7, 0x49, 0x0c, 0xf7, 0x59, 0x4e, 0x0b, 0x60, 0xff, - 0x57, 0xaa, 0xb4, 0x0e, 0xad, 0x11, 0xd2, 0x6d, 0x8d, 0x38, 0x2f, 0xfd, 0x7e, 0xa7, 0x92, 0xbb, - 0x9e, 0xc5, 0x72, 0xd7, 0xda, 0x40, 0xb0, 0x4e, 0xbf, 0x08, 0x3a, 0xe3, 0x6e, 0x00, 0xef, 0x5a, - 0x83, 0x7c, 0xe1, 0x30, 0x13, 0x38, 0xcd, 0xed, 0x2a, 0xeb, 0x5c, 0xd0, 0x6c, 0x83, 0xa8, 0xe1, - 0xc9, 0xd5, 0xeb, 0x3f, 0x13, 0xdf, 0xde, 0x6c, 0x3c, 0x5a, 0xb9, 0x2a, 0x97, 0x9d, 0xcb, 0xe5, - 0x27, 0xc7, 0xd9, 0xe8, 0x69, 0xf7, 0x8f, 0x8a, 0x53, 0x20, 0xbe, 0x8d, 0x05, 0x25, 0x42, 0xc7, - 0x42, 0x8d, 0xc3, 0xc2, 0x28, 0xf6, 0x25, 0x7d, 0x09, 0x8d, 0x23, 0xe8, 0x92, 0xdc, 0xae, 0xc7, - 0x54, 0xe9, 0x21, 0xc1, 0x28, 0x13, 0x27, 0x59, 0xdf, 0x51, 0x0c, 0xc6, 0x1f, 0x71, 0xb2, 0x51, - 0xcf, 0xbf, 0x81, 0xc6, 0x85, 0x36, 0x06, 0x3e, 0xac, 0xfe, 0xd0, 0x70, 0x84, 0xc1, 0x5a, 0x67, - 0xa3, 0x4c, 0x2c, 0x22, 0xdd, 0xfb, 0x77, 0x26, 0x4e, 0x6c, 0x25, 0x9c, 0xdd, 0x85, 0x03, 0x89, - 0x53, 0xd1, 0xf9, 0x86, 0xa6, 0xac, 0x1d, 0x7e, 0x17, 0xc9, 0x46, 0x1f, 0x56, 0x96, 0xc2, 0x62, - 0x7d, 0x0f, 0x60, 0x7d, 0x63, 0x26, 0x24, 0xe6, 0x1f, 0xd9, 0x2e, 0x10, 0xbb, 0x19, 0xb3, 0x2a, - 0xfc, 0x1f, 0x33, 0xd0, 0x64, 0xda, 0xfd, 0xfe, 0x80, 0xfb, 0xd7, 0x2c, 0xe2, 0x02, 0x77, 0x48, - 0x71, 0x15, 0xb9, 0x11, 0x52, 0x8a, 0x85, 0x75, 0xe2, 0xeb, 0x66, 0xdf, 0x02, 0x71, 0xae, 0x65, - 0xd3, 0xc6, 0x84, 0xde, 0x0d, 0xe9, 0xd4, 0x09, 0x0e, 0xf1, 0x64, 0x38, 0x16, 0xc0, 0x7f, 0x18, - 0xf4, 0x18, 0x69, 0x41, 0x5c, 0x46, 0x16, 0x9f, 0x48, 0x77, 0xdc, 0xfa, 0xed, 0x30, 0x70, 0x20, - 0x3d, 0xf4, 0x44, 0x06, 0x9a, 0x6a, 0x19, 0xe8, 0xfe, 0x38, 0xf8, 0x2a, 0x0b, 0xc2, 0x2b, 0x70, - 0x3b, 0x78, 0x2c, 0x16, 0x1d, 0xeb, 0xe1, 0x7b, 0x55, 0xe9, 0xd7, 0xe8, 0x1d, 0xc1, 0x6d, 0x2b, - 0xc4, 0x05, 0xa9, 0xb6, 0xf1, 0xe6, 0x80, 0x21, 0x92, 0x01, 0x6f, 0x3e, 0x09, 0x33, 0xf6, 0x36, - 0xca, 0x33, 0xdc, 0xa9, 0x18, 0x29, 0x25, 0x46, 0x04, 0x96, 0x0a, 0x71, 0x5e, 0xbc, 0x27, 0xaa, - 0x7d, 0xb2, 0x07, 0x3e, 0xa9, 0xf5, 0x1e, 0x4a, 0x7c, 0x75, 0x26, 0x36, 0xf0, 0x35, 0x35, 0xd0, - 0x25, 0x0a, 0x7a, 0x4b, 0x1f, 0xfe, 0x17, 0x28, 0xb3, 0xac, 0x7a, 0x2d, 0x3e, 0x89, 0x89, 0xb0, - 0x9d, 0xfa, 0x6f, 0x71, 0x32, 0xac, 0xa1, 0xac, 0x7a, 0x2d, 0x59, 0xbc, 0x5e, 0xca, 0x2f, 0x44, - 0x99, 0x0d, 0x4a, 0x03, 0xde, 0xfb, 0x89, 0x10, 0xd3, 0x59, 0xff, 0x6d, 0x60, 0x55, 0x6d, 0x67, - 0xb3, 0xd6, 0x7b, 0xd8, 0x68, 0xdf, 0xa0, 0x34, 0xf0, 0x4b, 0x51, 0xe6, 0x8a, 0xea, 0xb5, 0x78, - 0xeb, 0x27, 0x82, 0xbe, 0x50, 0xff, 0x2d, 0x3e, 0x0c, 0xed, 0x57, 0x18, 0x83, 0xb3, 0x33, 0x5c, - 0x2c, 0xeb, 0x4d, 0x0a, 0x07, 0x27, 0xa0, 0x5c, 0x63, 0x7b, 0xf9, 0xb7, 0x50, 0xae, 0x8e, 0x5f, - 0xab, 0xcc, 0x90, 0xc3, 0xcb, 0x54, 0xe9, 0x05, 0x81, 0x16, 0x8a, 0x8b, 0x58, 0x6e, 0xb3, 0xd8, - 0x13, 0x3f, 0xde, 0x15, 0x8b, 0x1e, 0xa5, 0xca, 0x7e, 0xd8, 0x6d, 0xb6, 0x89, 0x4c, 0xbb, 0xf2, - 0x1f, 0xc0, 0xd8, 0x78, 0x63, 0x33, 0x4c, 0x63, 0x23, 0x5a, 0x28, 0xbe, 0x4c, 0x58, 0x13, 0x62, - 0x13, 0x4f, 0x72, 0x67, 0x62, 0xfb, 0x4d, 0x32, 0xa4, 0xda, 0x56, 0x59, 0x5e, 0x06, 0x7f, 0xcf, - 0x2f, 0x5b, 0xb7, 0x6a, 0x51, 0x65, 0x79, 0x59, 0x51, 0xb1, 0xd6, 0xd9, 0x4f, 0xf6, 0x9b, 0x0e, - 0xc5, 0x2f, 0x45, 0x39, 0x98, 0xa8, 0x36, 0x38, 0x09, 0x0c, 0x72, 0xa4, 0x48, 0x9c, 0x4a, 0x60, - 0x2d, 0xba, 0xd7, 0x38, 0x9f, 0xca, 0x72, 0x99, 0x54, 0xf2, 0xcf, 0x9b, 0x78, 0x80, 0x71, 0xfe, - 0xa0, 0x78, 0x60, 0x0a, 0x8b, 0x07, 0x62, 0x03, 0x83, 0x95, 0xd5, 0xe6, 0x0b, 0xb2, 0x9c, 0x25, - 0xf0, 0xb2, 0x0d, 0x73, 0x93, 0xc7, 0x59, 0x02, 0xaf, 0xc0, 0xc6, 0x69, 0x94, 0xb9, 0x71, 0x1a, - 0x4b, 0x50, 0xe6, 0xba, 0xea, 0x32, 0xe2, 0xea, 0x81, 0x3f, 0xaf, 0xff, 0x16, 0xa7, 0xdb, 0xfa, - 0xae, 0xab, 0x2e, 0xf3, 0x54, 0x96, 0xcb, 0x7a, 0x1d, 0xff, 0x36, 0xf5, 0x58, 0x19, 0x67, 0x0a, - 0xd6, 0x0d, 0x8f, 0x95, 0x67, 0xd9, 0x8e, 0x5a, 0x5b, 0x54, 0x3b, 0x7e, 0xdc, 0xb4, 0x52, 0xbc, - 0x72, 0x55, 0xbb, 0xac, 0x5f, 0x97, 0xf8, 0xe5, 0x0b, 0x5a, 0xcf, 0x45, 0x1d, 0x3e, 0x76, 0x9f, - 0xd0, 0x2e, 0x7f, 0x92, 0xe8, 0x6d, 0xa5, 0x5e, 0x2d, 0xab, 0x51, 0x6e, 0x9d, 0xb2, 0xd9, 0xa7, - 0x6f, 0x13, 0x71, 0xfb, 0x78, 0x4a, 0x95, 0x16, 0x0b, 0xb4, 0x50, 0x9c, 0x57, 0x26, 0xd1, 0xbc, - 0xae, 0xc9, 0xbe, 0xef, 0xb4, 0x53, 0xbb, 0x2a, 0xcb, 0xb5, 0xce, 0xcb, 0x38, 0x2c, 0x89, 0x79, - 0x1b, 0x68, 0x7b, 0xfe, 0x1b, 0x93, 0x51, 0x05, 0x57, 0x8f, 0xa3, 0x9c, 0x2a, 0x1d, 0xe2, 0x28, - 0xa7, 0xda, 0xc6, 0xb1, 0x4c, 0x2a, 0x40, 0xae, 0x8d, 0x55, 0xf5, 0x40, 0x1e, 0xc3, 0xd8, 0x40, - 0xaf, 0x69, 0xfe, 0xee, 0x01, 0xcb, 0xca, 0xd8, 0x40, 0x6f, 0xb1, 0x07, 0xcc, 0xd3, 0xf5, 0x42, - 0xe2, 0x93, 0xaa, 0x17, 0x32, 0x8c, 0x28, 0xe9, 0x0f, 0xbc, 0x85, 0xd1, 0x9c, 0xa9, 0xdc, 0x43, - 0x2b, 0x8b, 0x28, 0x8f, 0x7a, 0x98, 0x43, 0x93, 0x8c, 0x65, 0x92, 0x90, 0x86, 0x28, 0x35, 0x63, - 0x43, 0x32, 0xd2, 0x62, 0x1b, 0x27, 0x5b, 0x37, 0x03, 0xd2, 0x59, 0x6b, 0x74, 0x6a, 0xf6, 0x15, - 0x3f, 0xdc, 0x0f, 0xc8, 0xe5, 0x7a, 0x64, 0x6b, 0x59, 0xf5, 0xda, 0xeb, 0x91, 0xad, 0xab, 0x2a, - 0x56, 0x5d, 0x8f, 0x6c, 0x5d, 0x51, 0xbd, 0x36, 0xd1, 0xdb, 0x4a, 0xee, 0xbc, 0x6d, 0x40, 0xbe, - 0x8d, 0x43, 0xb9, 0x1f, 0x07, 0xfc, 0xe0, 0xeb, 0x39, 0xc1, 0x1d, 0xff, 0xbe, 0x45, 0xea, 0xc1, - 0xaf, 0x91, 0x36, 0x17, 0x57, 0x50, 0x69, 0x1b, 0xa4, 0xa7, 0x35, 0x31, 0x05, 0x0e, 0x60, 0xa5, - 0xb7, 0xd3, 0xef, 0xef, 0x8d, 0xa1, 0x36, 0xdc, 0xa5, 0x7c, 0xbe, 0xb7, 0x71, 0x41, 0x68, 0xa3, - 0xe2, 0xff, 0x78, 0xa3, 0xe2, 0x5f, 0xf0, 0xb4, 0x67, 0x91, 0xe7, 0xa9, 0xe7, 0x16, 0x2f, 0x5e, - 0xfc, 0x74, 0x91, 0x4c, 0x87, 0xe4, 0x9b, 0x39, 0x94, 0x8d, 0x19, 0x72, 0xec, 0x4a, 0x32, 0x41, - 0x7c, 0xc8, 0x6d, 0x83, 0x30, 0x9b, 0x0e, 0xfb, 0x03, 0x8d, 0xc5, 0x57, 0x6d, 0x10, 0x4e, 0x5b, - 0x79, 0x2a, 0xcb, 0xad, 0xc0, 0x34, 0x3f, 0x36, 0xd8, 0x5c, 0x26, 0x91, 0x89, 0x0f, 0xab, 0x38, - 0xcc, 0x5f, 0x07, 0xe5, 0xfd, 0x8b, 0x64, 0x18, 0x90, 0xdf, 0x41, 0xec, 0x64, 0x8d, 0x84, 0x96, - 0x38, 0x28, 0x98, 0x4b, 0x22, 0xb7, 0x2a, 0xa6, 0x4d, 0xa9, 0xce, 0xae, 0x0b, 0x96, 0x6e, 0x14, - 0xeb, 0x19, 0xba, 0x57, 0x36, 0x65, 0x26, 0x13, 0x9e, 0x87, 0xc1, 0xfc, 0x6c, 0x77, 0x83, 0x62, - 0xa7, 0x68, 0x56, 0x7c, 0x95, 0xf8, 0xc2, 0x38, 0x5e, 0x2f, 0xbb, 0xf1, 0x5f, 0xff, 0x95, 0x78, - 0xc7, 0x69, 0xad, 0xb5, 0x3d, 0xf1, 0x65, 0x7f, 0xbc, 0xe5, 0xa0, 0x76, 0xea, 0xe0, 0xc8, 0xf6, - 0x73, 0x90, 0x9e, 0x18, 0x54, 0x63, 0x85, 0xff, 0x8a, 0x43, 0xd3, 0x56, 0xfa, 0x42, 0x61, 0x8b, - 0x99, 0xa3, 0xac, 0xfc, 0x96, 0x0f, 0xa2, 0x3c, 0x9d, 0x0c, 0x5d, 0x67, 0x58, 0x59, 0x72, 0xa6, - 0x52, 0xd9, 0x52, 0x21, 0xbe, 0x00, 0x64, 0xeb, 0x66, 0xb2, 0x25, 0xd4, 0xc8, 0x73, 0x63, 0x20, - 0x14, 0x66, 0xed, 0xfa, 0x08, 0x9d, 0xab, 0x35, 0x9f, 0x1b, 0xd9, 0x7e, 0xce, 0x20, 0x75, 0x2d, - 0x43, 0x19, 0x51, 0x32, 0x5d, 0x27, 0x24, 0x16, 0xc0, 0x8b, 0xcd, 0xda, 0x6a, 0x02, 0x5b, 0x50, - 0xf8, 0x8f, 0x99, 0x68, 0xba, 0x4b, 0x97, 0x7b, 0x5f, 0xbf, 0x6c, 0xa5, 0x74, 0x53, 0xea, 0x97, - 0x21, 0x6a, 0x3f, 0xa6, 0x77, 0x78, 0x56, 0xad, 0x4c, 0x84, 0xb5, 0xa0, 0x5c, 0x8e, 0x70, 0xa9, - 0xd4, 0xbe, 0x73, 0xd2, 0xab, 0x7d, 0x89, 0x75, 0xac, 0x5d, 0xe9, 0x3b, 0x97, 0x55, 0xfa, 0x82, - 0x7b, 0xe0, 0x18, 0x83, 0x7b, 0xbb, 0x9f, 0x85, 0x38, 0x27, 0xd5, 0xf9, 0x8d, 0xa2, 0x0d, 0xfe, - 0xdf, 0xc9, 0xe9, 0x56, 0x93, 0xcc, 0x13, 0x26, 0x88, 0xbe, 0xc4, 0x3a, 0x36, 0x72, 0xa6, 0xd4, - 0xc1, 0xdd, 0xb1, 0x31, 0x2b, 0x98, 0x51, 0x50, 0xc7, 0xfa, 0x35, 0x2e, 0xa3, 0x6f, 0x1e, 0x9c, - 0xf5, 0x13, 0xa3, 0x86, 0xeb, 0x84, 0x21, 0x8c, 0x67, 0xed, 0xae, 0x24, 0xa0, 0xeb, 0xe0, 0x18, - 0x49, 0x0b, 0x10, 0x18, 0xd8, 0x77, 0xc2, 0x94, 0xb4, 0xd4, 0x52, 0x43, 0xa4, 0xf9, 0xb1, 0xa1, - 0x13, 0x5a, 0xe7, 0xb6, 0xf8, 0xa1, 0x4b, 0x40, 0x25, 0x27, 0xfb, 0x4f, 0x93, 0xa8, 0x58, 0xd8, - 0x0e, 0xce, 0x4c, 0x0f, 0x82, 0x8f, 0x93, 0xe0, 0x21, 0x6c, 0x83, 0x77, 0x02, 0x9c, 0xd0, 0xa1, - 0x1b, 0x7b, 0x56, 0xd0, 0xa8, 0x88, 0x11, 0xde, 0x10, 0xe1, 0xa4, 0xfb, 0x11, 0x89, 0xf3, 0x88, - 0x09, 0x09, 0x4e, 0x40, 0x02, 0x67, 0x11, 0x1b, 0xd8, 0x63, 0x1a, 0x31, 0xc0, 0x05, 0xde, 0x95, - 0x83, 0x66, 0xb8, 0xf5, 0xff, 0x79, 0xdd, 0xe0, 0x21, 0x0e, 0xe5, 0x93, 0xfe, 0xa6, 0xab, 0x41, - 0x0e, 0x1e, 0xf8, 0x45, 0xfb, 0xc0, 0xee, 0xbb, 0x65, 0x7c, 0xcf, 0xe6, 0x77, 0x20, 0xab, 0xd2, - 0x6a, 0xc1, 0x31, 0xb4, 0xf8, 0x02, 0x6b, 0x48, 0x62, 0x31, 0xc2, 0x27, 0x4d, 0xf1, 0x5a, 0x77, - 0xc4, 0xae, 0xec, 0x01, 0xff, 0x46, 0x90, 0xa0, 0xc0, 0x81, 0xca, 0x8e, 0xe1, 0xf8, 0x6d, 0x2e, - 0x08, 0x28, 0x77, 0x8c, 0x76, 0x27, 0xb7, 0x0b, 0x05, 0xcd, 0xfa, 0x35, 0x9a, 0xee, 0xba, 0x07, - 0x2e, 0x86, 0x00, 0x8b, 0xac, 0x86, 0x00, 0x0f, 0xb9, 0x5a, 0xe3, 0x60, 0x9e, 0x91, 0xb1, 0x03, - 0xf8, 0xb5, 0x2a, 0xbd, 0x8d, 0x7e, 0x25, 0xa4, 0x80, 0x56, 0xf1, 0x49, 0xc0, 0x71, 0x36, 0x70, - 0xbf, 0x09, 0x64, 0xd7, 0x96, 0x8f, 0x26, 0x61, 0xf4, 0x69, 0x62, 0xb9, 0x15, 0x6e, 0x4e, 0xf0, - 0x8f, 0x8f, 0x16, 0x4e, 0x19, 0x50, 0xd5, 0xdd, 0x4f, 0x98, 0xb9, 0xcc, 0xe6, 0x0a, 0x7f, 0xb3, - 0x48, 0xf6, 0xc7, 0xc8, 0x8e, 0xf9, 0x92, 0xd3, 0x21, 0xfe, 0x66, 0xde, 0x8d, 0x72, 0x17, 0x7f, - 0xf8, 0x79, 0xa3, 0xf8, 0xc3, 0xc3, 0x20, 0x3f, 0x8e, 0x3b, 0x7c, 0x58, 0x09, 0x85, 0xef, 0x98, - 0x3b, 0xfc, 0x6d, 0xcf, 0x70, 0xf9, 0xc0, 0xe5, 0xfd, 0x36, 0xb9, 0xbc, 0xff, 0x6b, 0x93, 0x29, - 0x86, 0xd0, 0xc5, 0x7d, 0x77, 0xd2, 0x13, 0xbc, 0x34, 0xf8, 0x4a, 0x7a, 0x4f, 0xf0, 0x1c, 0x18, - 0x64, 0x2c, 0x8e, 0xe0, 0x2f, 0xa0, 0x9c, 0xc0, 0xfb, 0xef, 0x87, 0x94, 0x30, 0x76, 0x8b, 0x9f, - 0x08, 0x92, 0x54, 0x52, 0x24, 0x4e, 0x26, 0x64, 0xe4, 0xd6, 0xce, 0xc4, 0xd9, 0xc1, 0x91, 0x5d, - 0x9d, 0xdf, 0x97, 0x66, 0x09, 0x19, 0xf3, 0xff, 0x44, 0x26, 0xf5, 0xfc, 0x8b, 0x28, 0xbb, 0xde, - 0xd7, 0xe0, 0x0b, 0x63, 0x77, 0x78, 0x2c, 0xca, 0x9a, 0x2d, 0x40, 0x09, 0xb5, 0x41, 0xc4, 0x11, - 0xd5, 0xe2, 0x07, 0xce, 0xe3, 0xde, 0xd9, 0x42, 0x66, 0x41, 0x72, 0x9c, 0x0c, 0x4d, 0xac, 0xe4, - 0x55, 0xfe, 0xdd, 0x27, 0xaf, 0xf8, 0x0a, 0xc6, 0x73, 0x7a, 0x0a, 0x9e, 0x4f, 0x91, 0x2a, 0x3d, - 0xca, 0x78, 0x4e, 0x4f, 0x25, 0xb9, 0x12, 0x92, 0x57, 0x77, 0xc5, 0x07, 0x49, 0xf8, 0x16, 0x03, - 0xdf, 0x98, 0x9e, 0xd2, 0x77, 0x2b, 0x06, 0xb0, 0xd7, 0xe9, 0xae, 0x37, 0xd5, 0x54, 0x8e, 0xdc, - 0x16, 0x97, 0x3c, 0x8b, 0x45, 0xff, 0xb4, 0x31, 0x5b, 0xf4, 0x97, 0x9c, 0xe4, 0x54, 0xe9, 0x18, - 0x87, 0xba, 0x39, 0xc1, 0xf6, 0xe2, 0x8a, 0xbb, 0x38, 0xad, 0xe5, 0x73, 0xfd, 0x28, 0x8f, 0x9d, - 0x8c, 0x0d, 0x5e, 0x62, 0x37, 0x96, 0xbc, 0xe1, 0x86, 0x67, 0x0b, 0x79, 0xed, 0x71, 0xb3, 0xd8, - 0x40, 0x54, 0xf2, 0xd7, 0x69, 0xcd, 0x17, 0x13, 0x17, 0x07, 0xcd, 0xb0, 0x3f, 0xc7, 0xbb, 0x46, - 0x4e, 0x5e, 0x61, 0x9b, 0x69, 0x91, 0x21, 0x60, 0xf1, 0xf5, 0x36, 0x2d, 0x47, 0xb4, 0xab, 0xc3, - 0x89, 0x03, 0xa7, 0x49, 0x3c, 0xb1, 0xfd, 0xe7, 0xe2, 0xbd, 0xa7, 0xd8, 0x8f, 0x16, 0xfe, 0xc7, - 0x6c, 0x34, 0xd9, 0x32, 0xb9, 0x9f, 0x17, 0x45, 0xfc, 0x6d, 0x6a, 0x8a, 0xf8, 0x19, 0x37, 0x8a, - 0xf8, 0x5e, 0x21, 0x85, 0x23, 0x29, 0x49, 0xe1, 0x3b, 0xc5, 0x8b, 0xff, 0xe8, 0x84, 0x30, 0x71, - 0x68, 0xb1, 0x43, 0xa7, 0x21, 0xa5, 0xb9, 0x09, 0x92, 0xf7, 0x50, 0x26, 0xe3, 0x5a, 0xcd, 0x37, - 0x73, 0x08, 0xd5, 0x7a, 0xfd, 0x10, 0x9f, 0xaa, 0x8e, 0x48, 0x9d, 0xf0, 0xb3, 0xca, 0x14, 0x8b, - 0x6b, 0xd8, 0xf1, 0xcd, 0xad, 0x80, 0x64, 0x55, 0xdb, 0x87, 0xb5, 0x53, 0xc7, 0x41, 0x6a, 0x3b, - 0xdf, 0x88, 0x7e, 0x71, 0x02, 0xf6, 0xce, 0x1f, 0xa8, 0x53, 0x4c, 0xd7, 0xe6, 0xd6, 0x76, 0xad, - 0x79, 0x6b, 0xb2, 0x6f, 0x00, 0xda, 0x16, 0xc9, 0xcc, 0x17, 0x1c, 0xf6, 0xe6, 0x19, 0x3f, 0x92, - 0xbd, 0x39, 0x7f, 0x98, 0x43, 0xe3, 0xbd, 0x4d, 0xe1, 0x40, 0x4d, 0xad, 0xb7, 0x5e, 0x21, 0xd7, - 0xec, 0x63, 0x55, 0xfa, 0x50, 0x30, 0x4b, 0xc5, 0x0f, 0x2c, 0xbe, 0xbb, 0x58, 0xad, 0xa1, 0x0d, - 0x5d, 0x89, 0x47, 0xce, 0xc6, 0x86, 0x06, 0x12, 0x43, 0x9f, 0x17, 0x7b, 0xb4, 0x9e, 0x73, 0x3a, - 0xa5, 0xee, 0xa8, 0xd1, 0x67, 0xd2, 0xda, 0xae, 0x13, 0xf4, 0x03, 0x7b, 0x0c, 0x65, 0x0b, 0x4c, - 0x8a, 0x8c, 0xe8, 0xe8, 0x21, 0x9b, 0x9f, 0x2d, 0x3c, 0xc5, 0xa1, 0x49, 0x56, 0xf8, 0xe4, 0x5f, - 0x46, 0xd9, 0x8d, 0x4a, 0xb0, 0xc1, 0x50, 0xe3, 0x17, 0xa5, 0x07, 0xe7, 0x85, 0xd5, 0x7a, 0x5b, - 0x0c, 0x77, 0x32, 0xf4, 0x9b, 0xf5, 0x06, 0x42, 0x66, 0xa1, 0x0b, 0x30, 0x2e, 0xb0, 0x02, 0x63, - 0xaa, 0x08, 0xd3, 0x6c, 0xf6, 0xc3, 0xb7, 0x51, 0xbe, 0x9d, 0xa1, 0xe4, 0x57, 0x98, 0xf3, 0x4c, - 0x1b, 0xa8, 0x1a, 0xbf, 0x14, 0xd0, 0x54, 0xcc, 0x63, 0x1f, 0x6a, 0x32, 0xdf, 0xc2, 0x8e, 0x71, - 0xe8, 0x21, 0x1d, 0xc6, 0xb1, 0xcd, 0x77, 0x25, 0x23, 0x8f, 0x24, 0xa6, 0xa2, 0x0e, 0x93, 0x9c, - 0xb9, 0xa9, 0xdd, 0x79, 0x0c, 0xb7, 0x30, 0x46, 0x55, 0xf3, 0x43, 0x65, 0x50, 0x94, 0x3d, 0xca, - 0xbc, 0x7d, 0xec, 0xd1, 0x4a, 0xab, 0x29, 0x5d, 0x96, 0x61, 0x13, 0xee, 0xb1, 0x9a, 0xd2, 0x4d, - 0x81, 0x2b, 0x55, 0x65, 0x16, 0x51, 0xae, 0x93, 0x35, 0xa2, 0x5b, 0x6e, 0x53, 0x89, 0x02, 0x1f, - 0x87, 0x43, 0x9e, 0x58, 0x55, 0xa2, 0x93, 0x41, 0x6b, 0x41, 0x95, 0xa1, 0x36, 0xed, 0xe7, 0x36, - 0x93, 0xbc, 0x05, 0x96, 0xed, 0x03, 0x55, 0xda, 0x40, 0xa9, 0xdb, 0x77, 0x59, 0x85, 0xcf, 0x4d, - 0x53, 0xb7, 0x95, 0xa3, 0x90, 0xb7, 0x2e, 0x94, 0xe9, 0xb8, 0x1f, 0x40, 0x99, 0xe6, 0xde, 0x0a, - 0x65, 0xca, 0x98, 0x97, 0x8c, 0xbf, 0x4d, 0xe6, 0x25, 0x5f, 0x73, 0xaa, 0xd4, 0xc7, 0xa1, 0x2f, - 0x39, 0x21, 0x35, 0x88, 0xe3, 0xf0, 0x49, 0xee, 0xc4, 0x10, 0xf9, 0xe2, 0x1d, 0x26, 0x89, 0xfe, - 0x2e, 0x13, 0xcd, 0x72, 0x9b, 0xed, 0xfd, 0x66, 0xe2, 0x90, 0xe9, 0xe6, 0xb8, 0x6d, 0xa4, 0xfb, - 0x0f, 0xd4, 0x29, 0x2e, 0x14, 0x12, 0xbb, 0xe1, 0x84, 0x42, 0x6a, 0xb8, 0x75, 0x5f, 0x5d, 0x7c, - 0x05, 0x1d, 0xa4, 0x86, 0x15, 0x09, 0xda, 0x25, 0xfc, 0x44, 0x11, 0x95, 0xe6, 0x00, 0x0c, 0x31, - 0xbf, 0x0b, 0x88, 0xa4, 0x27, 0x03, 0x62, 0x53, 0xd1, 0x04, 0x66, 0xf9, 0x8c, 0x06, 0x9e, 0xbb, - 0x75, 0x0d, 0x7c, 0xc6, 0x4d, 0x6a, 0xe0, 0xed, 0xf6, 0x1b, 0x99, 0x3f, 0x82, 0xfd, 0x46, 0xd6, - 0xcd, 0xd8, 0x6f, 0x64, 0xdf, 0xa4, 0xfd, 0x46, 0xce, 0x4d, 0xdb, 0x6f, 0xf0, 0x9d, 0x26, 0x62, - 0x05, 0x59, 0xd6, 0x87, 0xaa, 0x14, 0xa6, 0x88, 0xf5, 0x03, 0xa7, 0x26, 0xfd, 0xc6, 0x50, 0x0b, - 0xb8, 0xd6, 0xb3, 0x74, 0x83, 0xd6, 0xd7, 0x1d, 0xbb, 0xd2, 0x9a, 0xe8, 0xde, 0x01, 0x09, 0x69, - 0x09, 0xa2, 0x65, 0xf4, 0xe8, 0xc5, 0x1e, 0x03, 0x0f, 0x17, 0x7b, 0x74, 0x8c, 0x5b, 0x51, 0x5e, - 0xec, 0xb1, 0x89, 0x02, 0x0c, 0x2c, 0x2b, 0xa1, 0x1c, 0xd0, 0x14, 0x13, 0xa9, 0x18, 0x44, 0x71, - 0xd5, 0x8b, 0xc4, 0x39, 0x36, 0x5d, 0xb3, 0x7d, 0xc7, 0x49, 0x47, 0xfe, 0xf7, 0xd6, 0x37, 0x0c, - 0x24, 0x60, 0x6f, 0xa9, 0xd2, 0x2f, 0xad, 0x6f, 0xd8, 0xed, 0x53, 0x18, 0xdb, 0xde, 0x3c, 0x86, - 0x2c, 0x40, 0x3f, 0xd8, 0x90, 0x63, 0xc2, 0x2d, 0x19, 0x72, 0xe4, 0xdd, 0x7e, 0x43, 0x8e, 0x2a, - 0x94, 0xd3, 0xe8, 0x0d, 0x85, 0x3e, 0xac, 0x23, 0x12, 0x26, 0x1c, 0x5a, 0x89, 0x14, 0x89, 0x45, - 0x46, 0x68, 0xea, 0x63, 0xda, 0xd9, 0x3d, 0x5a, 0xdb, 0x41, 0x78, 0x8a, 0x8a, 0x3d, 0x24, 0x32, - 0x15, 0x0e, 0x96, 0x97, 0x3c, 0xfb, 0x99, 0xd6, 0xbf, 0x53, 0x26, 0x5d, 0xf8, 0x77, 0x11, 0x3e, - 0x55, 0x22, 0xe6, 0xa9, 0x54, 0xa5, 0xe5, 0x02, 0x39, 0x40, 0xf1, 0x45, 0xdb, 0x41, 0x83, 0xfc, - 0x99, 0x39, 0x90, 0x17, 0x3c, 0x66, 0xa4, 0x3e, 0xac, 0xf1, 0x06, 0xda, 0x3b, 0x16, 0xed, 0x28, - 0x93, 0x64, 0x3c, 0x2c, 0x2f, 0x31, 0x76, 0x27, 0x93, 0x0d, 0xb1, 0x79, 0x21, 0x63, 0x77, 0x32, - 0xc3, 0xdd, 0xee, 0x84, 0xb1, 0x34, 0xf9, 0x0d, 0x0d, 0x23, 0x99, 0x8f, 0x31, 0xf6, 0x93, 0x69, - 0x30, 0x76, 0x9a, 0x4c, 0xe8, 0x64, 0xdf, 0x71, 0x0e, 0x74, 0xc3, 0x72, 0x9a, 0x04, 0x81, 0x7c, - 0x15, 0xe5, 0x84, 0xbd, 0x3e, 0x7f, 0xd8, 0x88, 0x78, 0x38, 0xdd, 0xe9, 0xc8, 0xee, 0xf3, 0x87, - 0xc9, 0xdb, 0x02, 0x2d, 0xc5, 0x3c, 0x8b, 0xb1, 0x1b, 0x29, 0xe5, 0xff, 0x88, 0x26, 0x36, 0xf9, - 0x6b, 0x6a, 0x37, 0x2a, 0x75, 0x4d, 0xf5, 0xde, 0xf5, 0xf5, 0x0a, 0x16, 0xf1, 0x4c, 0x2c, 0x7d, - 0x53, 0x95, 0xd6, 0x0a, 0xd6, 0x1a, 0xb1, 0x9c, 0xf5, 0x34, 0xa1, 0x22, 0x4f, 0x2d, 0x32, 0xb4, - 0x18, 0x24, 0xa2, 0x5a, 0xe7, 0xb6, 0xd8, 0x40, 0x07, 0x34, 0xba, 0x31, 0xd4, 0xb6, 0xc4, 0x90, - 0xa2, 0xb6, 0xb3, 0x15, 0xb2, 0x75, 0x50, 0xbe, 0x9c, 0xb1, 0xfd, 0x9a, 0x6a, 0x02, 0xbd, 0x69, - 0xfb, 0xf5, 0x90, 0xc5, 0xf6, 0x6b, 0xd3, 0xd2, 0x90, 0x47, 0xaf, 0xf2, 0x7b, 0x1b, 0x14, 0xc6, - 0xca, 0xeb, 0x75, 0x94, 0xed, 0xdd, 0xa0, 0xf8, 0xc3, 0x58, 0x94, 0x33, 0x11, 0x32, 0x88, 0x42, - 0x89, 0x41, 0xe3, 0x48, 0xfa, 0x0f, 0x0f, 0x9d, 0xfb, 0x12, 0xad, 0xe7, 0x5c, 0x22, 0x7a, 0xf5, - 0xc6, 0x50, 0xdb, 0x62, 0x7d, 0x82, 0xf8, 0x87, 0x0c, 0x3d, 0xf8, 0x42, 0x94, 0xe9, 0xab, 0xab, - 0x25, 0x69, 0x98, 0xf2, 0x55, 0x69, 0xa2, 0xa0, 0xff, 0x16, 0x73, 0xe2, 0x3d, 0xd1, 0x78, 0xcb, - 0x55, 0x59, 0xff, 0xc1, 0x3f, 0x8e, 0xb2, 0x82, 0xde, 0xda, 0x4d, 0x24, 0xbd, 0xd2, 0x14, 0x55, - 0x9a, 0x24, 0xe0, 0x02, 0x68, 0xf5, 0xc9, 0x25, 0x19, 0xff, 0xe2, 0x4b, 0xd0, 0x04, 0x80, 0x8a, - 0xb2, 0x7a, 0x6f, 0x08, 0x62, 0xdb, 0x11, 0x41, 0x13, 0x5b, 0x8e, 0x3b, 0x69, 0x9f, 0xec, 0x91, - 0xd9, 0x42, 0x7e, 0x19, 0x1a, 0x4f, 0x5e, 0x98, 0xcd, 0xcf, 0xe2, 0x28, 0x72, 0xe4, 0x39, 0x33, - 0x4b, 0xc5, 0x7c, 0x58, 0x9b, 0xaf, 0x71, 0xf3, 0xb3, 0x3a, 0xa5, 0x7f, 0x2c, 0x22, 0x9b, 0x95, - 0x7c, 0x25, 0x9a, 0x48, 0xd1, 0x0b, 0xde, 0xde, 0x87, 0x0c, 0x0b, 0x53, 0x8f, 0x60, 0xad, 0x31, - 0x5e, 0x93, 0xf8, 0x85, 0x13, 0xc4, 0x7e, 0xce, 0x5a, 0xcf, 0x3f, 0x8f, 0xc6, 0xaf, 0xdf, 0x54, - 0x46, 0x92, 0xb4, 0xce, 0xc2, 0x5b, 0x3c, 0x5b, 0x95, 0x0a, 0x04, 0xb3, 0x54, 0x9c, 0x80, 0x73, - 0xcf, 0xe9, 0xc8, 0x41, 0xc7, 0x46, 0xb4, 0x9c, 0x0f, 0x5b, 0x73, 0xf6, 0xcf, 0x4e, 0xe1, 0xcd, - 0xcb, 0x5c, 0x88, 0xb1, 0x64, 0xec, 0x27, 0xf3, 0xc5, 0xb9, 0xfa, 0x09, 0x40, 0x5b, 0x32, 0xf6, - 0x2f, 0x07, 0xc3, 0x24, 0xbc, 0xec, 0x87, 0x4d, 0xf7, 0x54, 0x5a, 0x28, 0xce, 0xb6, 0x58, 0xf8, - 0x19, 0xf8, 0xc2, 0xb0, 0x1e, 0x34, 0x9a, 0xf1, 0x1f, 0xe8, 0xf7, 0x2c, 0xb4, 0x89, 0x06, 0x2a, - 0xc3, 0x92, 0x20, 0x52, 0x24, 0x56, 0xd8, 0x30, 0x6a, 0xbc, 0xf5, 0x73, 0xad, 0xef, 0x4a, 0x65, - 0x75, 0x31, 0x35, 0xa9, 0x1a, 0x51, 0x5b, 0xb4, 0xfe, 0x2b, 0x90, 0x94, 0x81, 0x7c, 0x0a, 0x93, - 0xd3, 0x24, 0x4b, 0x00, 0x36, 0xc1, 0x91, 0xc9, 0x70, 0x3a, 0x19, 0x01, 0x2e, 0x1d, 0xb2, 0xe2, - 0x0d, 0x05, 0xfc, 0x38, 0x42, 0x99, 0x41, 0x46, 0xb0, 0x15, 0xe2, 0xbc, 0xd8, 0xc0, 0x6e, 0xb0, - 0x15, 0x33, 0x2c, 0x91, 0x77, 0x25, 0xce, 0xed, 0x89, 0x0d, 0xf4, 0x82, 0xe9, 0x98, 0xd6, 0x71, - 0x5c, 0x3b, 0x7a, 0x42, 0xb6, 0xf4, 0xf9, 0x21, 0x81, 0x8b, 0x96, 0xa1, 0x7c, 0xfb, 0x91, 0xdc, - 0x54, 0x08, 0x20, 0x62, 0x8f, 0xce, 0xd2, 0x69, 0xe2, 0x02, 0xd6, 0x14, 0x89, 0x12, 0x19, 0x80, - 0x89, 0x59, 0xf2, 0x0f, 0xb6, 0xab, 0xf0, 0x68, 0x06, 0x9a, 0xad, 0x53, 0x8f, 0xab, 0x70, 0x38, - 0xcb, 0xdb, 0xcf, 0x51, 0x97, 0x44, 0x39, 0x55, 0xba, 0xc4, 0xa1, 0x8b, 0x9c, 0x90, 0xee, 0x3b, - 0xe2, 0xbe, 0x94, 0x6c, 0x0d, 0x04, 0xda, 0xbc, 0x3b, 0xcc, 0xcd, 0xff, 0x95, 0x89, 0x1e, 0x76, - 0x9f, 0xf5, 0xcf, 0x93, 0xbd, 0xb9, 0xbb, 0xa1, 0x88, 0x88, 0xfd, 0x78, 0xda, 0x13, 0x11, 0xe7, - 0xb1, 0xfc, 0x8e, 0x0b, 0xec, 0xa4, 0xe7, 0x7a, 0x3a, 0x33, 0xd0, 0x4c, 0x33, 0x52, 0x46, 0x59, - 0x50, 0xa9, 0x53, 0xfc, 0x61, 0x9f, 0xb7, 0x5e, 0x56, 0x7e, 0xcb, 0x7f, 0xce, 0xa1, 0xf1, 0x21, - 0x25, 0xb8, 0x59, 0x09, 0xbe, 0x6e, 0x5c, 0xd0, 0xd2, 0xdd, 0x9c, 0x2a, 0xfd, 0x51, 0x30, 0x8b, - 0xc5, 0xdf, 0xc6, 0x06, 0x76, 0xc7, 0x77, 0x13, 0x42, 0x28, 0xd1, 0xbd, 0x23, 0x31, 0xb8, 0x23, - 0x36, 0x78, 0x29, 0xd1, 0xbd, 0x63, 0x93, 0xb2, 0x45, 0x07, 0xb9, 0xfe, 0x2b, 0xb1, 0x68, 0xc7, - 0xa6, 0xa6, 0xf5, 0xca, 0x02, 0xfc, 0x22, 0x42, 0x4a, 0x7f, 0x7a, 0x5b, 0x68, 0x0b, 0x2c, 0x9a, - 0x5c, 0x50, 0x17, 0xf4, 0x6d, 0x56, 0x82, 0x24, 0xc1, 0x28, 0xf9, 0x05, 0x3d, 0xe2, 0x3d, 0xad, - 0x95, 0xd5, 0x46, 0x0a, 0x40, 0x7a, 0xeb, 0xe8, 0x34, 0x0c, 0x71, 0x70, 0xaa, 0xb5, 0x88, 0x0f, - 0xb3, 0xbb, 0x64, 0x56, 0xd1, 0x28, 0x31, 0x74, 0xa4, 0xc2, 0x1b, 0x19, 0xa8, 0xc0, 0x7d, 0x94, - 0x7b, 0x5f, 0xf7, 0xf1, 0xae, 0xc5, 0x81, 0x61, 0x6e, 0x0a, 0xf0, 0x37, 0xd7, 0x64, 0x09, 0xcc, - 0x45, 0x40, 0xf1, 0xe2, 0x39, 0x6d, 0x67, 0x5b, 0xa2, 0x7b, 0x47, 0xb2, 0x7f, 0x6b, 0xec, 0xca, - 0x19, 0x8b, 0x3f, 0x03, 0x89, 0x52, 0x94, 0x72, 0x7b, 0x52, 0xee, 0x72, 0x7a, 0x18, 0xfc, 0x87, - 0x71, 0x36, 0xb7, 0xc3, 0xfb, 0x16, 0x0c, 0xad, 0xaf, 0x47, 0xc6, 0x2d, 0xc8, 0x63, 0xd7, 0xa2, - 0xbc, 0xda, 0x7a, 0x9f, 0xe2, 0x0f, 0x83, 0x3f, 0x1c, 0x11, 0x00, 0x2c, 0xd1, 0xe9, 0x58, 0x4b, - 0x85, 0x38, 0x1d, 0x16, 0xac, 0xd3, 0x0a, 0xd8, 0x2f, 0x4e, 0xeb, 0x6a, 0xd7, 0x7a, 0x0f, 0x99, - 0x63, 0x5a, 0x5a, 0xf3, 0xeb, 0xd0, 0x44, 0x98, 0xa4, 0x54, 0x57, 0x17, 0x54, 0x42, 0x21, 0x22, - 0x54, 0x5d, 0xac, 0x1f, 0xbf, 0xb5, 0x86, 0x0a, 0x7d, 0x21, 0xde, 0x36, 0x26, 0x05, 0x69, 0xae, - 0xe1, 0x7c, 0xd9, 0xda, 0x98, 0x5f, 0x81, 0x50, 0xad, 0xb7, 0x4c, 0x09, 0x86, 0xcb, 0x75, 0xb0, - 0xcb, 0x36, 0xf2, 0xe3, 0x3f, 0x2c, 0x30, 0xc5, 0x86, 0x53, 0x68, 0x99, 0x04, 0x5a, 0x2b, 0x12, - 0xa0, 0xd2, 0x23, 0x33, 0x6d, 0xf8, 0x6a, 0x34, 0xbe, 0x29, 0xa4, 0x04, 0xd7, 0x04, 0x36, 0x29, - 0x7e, 0x22, 0x5f, 0x15, 0x75, 0x32, 0xcb, 0x2c, 0x15, 0x67, 0x25, 0xfb, 0xae, 0x8e, 0x1c, 0xea, - 0xa3, 0x5a, 0xe1, 0xb0, 0x5e, 0x6a, 0xc9, 0x0a, 0x9a, 0x2f, 0x9b, 0xcd, 0xf9, 0x2a, 0x34, 0x91, - 0x6c, 0x6b, 0x79, 0xa0, 0xc1, 0xeb, 0x33, 0x1c, 0x0b, 0x70, 0xfc, 0x4c, 0x6b, 0x0d, 0x35, 0x5d, - 0x3a, 0x7e, 0x5c, 0xeb, 0x6a, 0xa7, 0x63, 0x59, 0x1b, 0xf1, 0xab, 0x11, 0x82, 0x2d, 0xd5, 0xe7, - 0x4c, 0x04, 0x03, 0x8b, 0x54, 0x69, 0x9e, 0xc0, 0x14, 0x8b, 0x33, 0x60, 0x24, 0xb3, 0x04, 0x6e, - 0x11, 0xb3, 0x64, 0x5a, 0xc3, 0xbf, 0xae, 0xc3, 0x8a, 0xfe, 0x4b, 0x07, 0x6b, 0x10, 0x10, 0x2c, - 0xd0, 0xd9, 0x43, 0xb3, 0xd4, 0x88, 0xc5, 0x4d, 0x0b, 0x6c, 0xa3, 0x99, 0x2d, 0x4b, 0x0e, 0x70, - 0xaa, 0xb4, 0x97, 0x43, 0x1d, 0x9c, 0x90, 0xe6, 0x2a, 0x19, 0x9e, 0xc9, 0x29, 0xb1, 0x20, 0xe3, - 0xc3, 0x6a, 0x81, 0x9f, 0x6b, 0x9c, 0xf5, 0xdc, 0xaf, 0x71, 0xcc, 0xd9, 0x5d, 0xe3, 0xcc, 0x5d, - 0xbf, 0xc6, 0x59, 0x77, 0xad, 0xf0, 0xa0, 0xdd, 0x05, 0xf6, 0xbe, 0x42, 0xa8, 0x25, 0x3a, 0xef, - 0x8a, 0x6a, 0x84, 0x74, 0x4b, 0x48, 0xb9, 0xa9, 0xe9, 0x91, 0x5e, 0x77, 0x06, 0x9a, 0x65, 0x49, - 0x82, 0x73, 0x1f, 0x21, 0xbd, 0x0c, 0xeb, 0xdb, 0x5b, 0xad, 0x4a, 0xab, 0xd0, 0xeb, 0x42, 0x9a, - 0xe5, 0x88, 0x73, 0x2d, 0xe9, 0xa4, 0xdc, 0x9e, 0x18, 0xcb, 0x1b, 0xdc, 0x93, 0x81, 0x66, 0xa7, - 0x1c, 0xed, 0xde, 0x87, 0x1a, 0x62, 0xa4, 0x99, 0x6e, 0x09, 0x62, 0x21, 0xbb, 0x23, 0xf6, 0xab, - 0x38, 0x0a, 0xec, 0xec, 0xce, 0x46, 0x05, 0x8c, 0xde, 0xdb, 0x0a, 0x39, 0x47, 0x5d, 0x20, 0xe7, - 0x0f, 0xaa, 0x14, 0x62, 0x01, 0xe7, 0x7d, 0xf6, 0x20, 0x28, 0xf8, 0xd8, 0xa1, 0x06, 0x03, 0x4d, - 0x6a, 0x88, 0xb1, 0x00, 0x0c, 0xfc, 0x60, 0x1b, 0xff, 0xc2, 0xd7, 0x48, 0x6d, 0x17, 0xcd, 0x07, - 0xf2, 0x25, 0xe7, 0x03, 0xf9, 0x68, 0xea, 0x07, 0x92, 0x74, 0x37, 0x9f, 0x47, 0xbf, 0x81, 0x84, - 0x99, 0x8c, 0x75, 0x55, 0xaa, 0x54, 0x2e, 0x30, 0xc5, 0xe2, 0xb3, 0x5a, 0xdf, 0xa7, 0xf1, 0x96, - 0xcb, 0x89, 0x2f, 0xfb, 0x21, 0x6f, 0xfd, 0x8d, 0xa1, 0x36, 0xba, 0x9c, 0xeb, 0x91, 0xad, 0xe6, - 0x74, 0xaf, 0x47, 0xb6, 0x32, 0x2b, 0xa1, 0x46, 0x92, 0xe6, 0x50, 0xfc, 0x3b, 0x68, 0x42, 0x6d, - 0xc0, 0xef, 0x57, 0x6a, 0xe1, 0x83, 0xf0, 0x6a, 0x96, 0xa8, 0xd2, 0x62, 0x81, 0x2d, 0x17, 0xe7, - 0x8e, 0xec, 0xfb, 0x2e, 0xde, 0x71, 0x9a, 0x7e, 0x2e, 0x71, 0xf4, 0x9b, 0xe4, 0xd6, 0xfd, 0xf1, - 0x96, 0x83, 0xc9, 0x48, 0xf3, 0x48, 0xf7, 0xd9, 0x91, 0xad, 0xfb, 0x4c, 0x83, 0x58, 0xb3, 0x1b, - 0xa3, 0xcd, 0xcb, 0xfe, 0x01, 0xda, 0xbc, 0x9c, 0x5b, 0xd0, 0xe6, 0x19, 0xf4, 0x72, 0x4a, 0x30, - 0x32, 0x2c, 0x89, 0xd3, 0xdc, 0x58, 0x62, 0x3b, 0xbf, 0x2d, 0x13, 0x14, 0xd4, 0xf7, 0x25, 0xc1, - 0x5c, 0x6b, 0xe1, 0x17, 0xc7, 0x40, 0x30, 0x17, 0xab, 0x52, 0x11, 0x21, 0x98, 0xe7, 0x8e, 0xba, - 0x37, 0x56, 0x37, 0xe0, 0xd4, 0xbb, 0x34, 0xe6, 0xcd, 0x4e, 0x89, 0x11, 0x66, 0xa1, 0x82, 0x4a, - 0xbf, 0x2f, 0xbc, 0xdc, 0x6e, 0x96, 0x29, 0x2b, 0xbf, 0x2d, 0x9c, 0x8d, 0x1e, 0x4a, 0x51, 0x17, - 0x6a, 0x2c, 0x3c, 0x92, 0x81, 0x66, 0x48, 0x75, 0x75, 0xa4, 0x52, 0xa9, 0x63, 0xec, 0xbe, 0xdf, - 0x72, 0x37, 0x34, 0xe5, 0x4c, 0xc9, 0xaa, 0xab, 0xa1, 0xe9, 0x24, 0xd6, 0xac, 0xb4, 0xb2, 0xdc, - 0xdd, 0x56, 0xf4, 0x45, 0x27, 0x1a, 0x70, 0x84, 0x12, 0x01, 0x8b, 0x16, 0x37, 0xcb, 0x39, 0x45, - 0x95, 0xd6, 0xa3, 0xdf, 0x08, 0x29, 0x26, 0x2e, 0xce, 0xd3, 0xce, 0xef, 0x24, 0x14, 0xdd, 0xee, - 0x13, 0x5a, 0xf3, 0x69, 0x9b, 0x9d, 0xab, 0x41, 0xed, 0xb8, 0x4d, 0xcc, 0x12, 0x2f, 0xb4, 0x27, - 0x03, 0xcd, 0x74, 0xfd, 0xc4, 0xbd, 0xff, 0x02, 0xad, 0x57, 0xa5, 0xf7, 0xd0, 0xbb, 0x42, 0xaa, - 0xe9, 0x8b, 0xc2, 0x58, 0xb6, 0x68, 0x94, 0x57, 0xe8, 0x9f, 0xa6, 0x22, 0xde, 0x08, 0x55, 0x1b, - 0x68, 0xaa, 0x33, 0x04, 0x68, 0xef, 0xa1, 0x71, 0xc4, 0x22, 0x94, 0x80, 0x4a, 0x85, 0x2a, 0xcd, - 0x27, 0x71, 0x60, 0xb1, 0xea, 0x72, 0x76, 0x2c, 0xba, 0x97, 0xda, 0x7c, 0x27, 0xf7, 0x5c, 0x88, - 0x1f, 0xdc, 0x45, 0x15, 0x98, 0xdf, 0x97, 0xce, 0x0c, 0x4e, 0xcf, 0xcf, 0x28, 0x98, 0xe6, 0x08, - 0x39, 0x2b, 0x1b, 0xa3, 0xf2, 0x2f, 0xa1, 0x2c, 0xbf, 0xe9, 0x88, 0x50, 0x84, 0x7d, 0xf1, 0xf5, - 0x02, 0x71, 0x3a, 0x1d, 0x38, 0x36, 0xd0, 0xab, 0x8f, 0x4a, 0x5c, 0x11, 0x80, 0x64, 0x79, 0x45, - 0xc6, 0xad, 0xf8, 0xed, 0x1c, 0xca, 0x55, 0xea, 0x7c, 0x61, 0xac, 0xa1, 0x80, 0x0d, 0xdd, 0xa0, - 0x4a, 0x75, 0x02, 0x2d, 0x14, 0xdf, 0x84, 0x47, 0xae, 0xc6, 0xeb, 0xad, 0xd1, 0x01, 0xf0, 0xd8, - 0xa7, 0x54, 0xd1, 0x43, 0xec, 0x1a, 0x3a, 0xfb, 0x13, 0x43, 0x07, 0x93, 0xdf, 0xed, 0x85, 0xac, - 0x20, 0xc4, 0x04, 0x15, 0x3b, 0x2d, 0x60, 0x63, 0xd5, 0x1d, 0xa0, 0x8b, 0xa4, 0xa9, 0x5a, 0x49, - 0xfb, 0xfe, 0xbd, 0x32, 0xfd, 0x06, 0x7f, 0x98, 0x43, 0x28, 0x60, 0xc4, 0x48, 0x0f, 0x11, 0xfc, - 0x23, 0x3a, 0xf0, 0x8f, 0x63, 0x7b, 0x17, 0xd2, 0xc0, 0xea, 0x44, 0xa2, 0x5d, 0xae, 0x4a, 0x92, - 0xc0, 0x0c, 0x25, 0x3e, 0x05, 0xd1, 0x1a, 0xe2, 0x27, 0x76, 0x69, 0xbb, 0x76, 0x26, 0xaf, 0x76, - 0x25, 0x06, 0xbf, 0xd1, 0xfa, 0x3e, 0x49, 0x74, 0x9c, 0x27, 0x62, 0xe5, 0x0b, 0x07, 0xc0, 0x55, - 0x02, 0x5e, 0x27, 0x48, 0x3e, 0x25, 0x33, 0x03, 0xf0, 0xdf, 0x72, 0x28, 0x0f, 0x5b, 0xd1, 0x1a, - 0x93, 0xcb, 0xc6, 0x93, 0x7b, 0x7a, 0x0c, 0x93, 0xab, 0x60, 0xba, 0xc1, 0xf4, 0xde, 0x56, 0xa5, - 0x37, 0x05, 0xcb, 0x70, 0xe2, 0xab, 0x6c, 0x22, 0x28, 0x1a, 0x2f, 0x9d, 0x08, 0x6c, 0x77, 0x7d, - 0x01, 0x9b, 0x07, 0xb5, 0x6c, 0x5e, 0x28, 0x30, 0x95, 0x03, 0xf1, 0x19, 0x6c, 0xbf, 0x6c, 0x19, - 0x97, 0xff, 0x67, 0x9c, 0xb4, 0x22, 0xd0, 0x54, 0x67, 0x22, 0x57, 0xe2, 0x80, 0x38, 0xcb, 0x65, - 0xea, 0x06, 0x42, 0x27, 0x9e, 0xdb, 0xf6, 0x9e, 0xe2, 0x76, 0x4e, 0x3f, 0xf5, 0xe8, 0x5e, 0x9a, - 0x01, 0x80, 0x2a, 0x98, 0x93, 0xdf, 0x9c, 0x89, 0xb7, 0x5c, 0x66, 0xd5, 0xd9, 0x38, 0x53, 0x8c, - 0x21, 0x63, 0x35, 0xd2, 0x6d, 0x82, 0x6f, 0x34, 0x91, 0xba, 0x0e, 0xef, 0x23, 0xb7, 0xef, 0x7a, - 0x64, 0x2b, 0x71, 0xdb, 0x89, 0x0d, 0xec, 0x89, 0x7f, 0x7d, 0x32, 0xde, 0xd3, 0x0a, 0x91, 0xec, - 0xe2, 0x87, 0x2e, 0xc5, 0x86, 0xba, 0x41, 0x87, 0xa8, 0xaf, 0x19, 0xf2, 0x36, 0xdb, 0xa7, 0xc5, - 0xff, 0x0e, 0xe5, 0x05, 0x42, 0xab, 0xf0, 0x32, 0xb0, 0xdb, 0xc6, 0x38, 0xbc, 0xc0, 0x19, 0xf6, - 0x05, 0xae, 0xae, 0xc1, 0x8e, 0xd2, 0x2f, 0xab, 0xd2, 0x8b, 0x82, 0xa5, 0x83, 0x58, 0x4c, 0x97, - 0xb5, 0x9a, 0x40, 0x37, 0x5d, 0x18, 0x9b, 0xe9, 0x80, 0xe0, 0x20, 0x4b, 0x5f, 0x5e, 0xe5, 0xd0, - 0x14, 0xf2, 0x21, 0x66, 0x0a, 0xb9, 0x29, 0xf6, 0x98, 0x34, 0xdc, 0x10, 0x2c, 0xd5, 0x89, 0x0d, - 0xc1, 0xd9, 0x53, 0x5c, 0x4c, 0xe7, 0xc2, 0xa6, 0xc7, 0x82, 0x59, 0xe9, 0xd0, 0x8a, 0x61, 0xc3, - 0x32, 0x1f, 0xe7, 0x20, 0xfc, 0x1e, 0x0e, 0x4d, 0xa5, 0x2a, 0x26, 0x66, 0x5a, 0x28, 0xb5, 0xa7, - 0x34, 0x34, 0xdd, 0x10, 0x2c, 0x7d, 0x41, 0x95, 0x96, 0x0a, 0x6e, 0xbd, 0xc5, 0xb9, 0x74, 0x6a, - 0x16, 0x73, 0x46, 0x76, 0x2e, 0x6e, 0xfd, 0xf8, 0x57, 0xcc, 0x7c, 0x1d, 0x13, 0x0c, 0x83, 0xba, - 0x59, 0x66, 0xbe, 0x8e, 0xc9, 0xc6, 0x6b, 0x7e, 0x54, 0x1b, 0x8c, 0xd2, 0x50, 0xed, 0x19, 0x05, - 0xd3, 0xcc, 0x6c, 0x1d, 0x2b, 0xd1, 0x44, 0x7c, 0xe8, 0xd5, 0x86, 0xab, 0x54, 0x9e, 0x31, 0xce, - 0x63, 0x82, 0xb5, 0x46, 0xe4, 0x21, 0x31, 0x13, 0x5c, 0x6f, 0x20, 0x3e, 0x65, 0x6b, 0x13, 0x3e, - 0xc2, 0xa1, 0x9c, 0x5a, 0x70, 0xf5, 0x07, 0x95, 0xf9, 0x46, 0x55, 0x52, 0x04, 0x52, 0x24, 0xbe, - 0x0d, 0xd7, 0x4c, 0xeb, 0x3d, 0x14, 0xef, 0xfb, 0xb6, 0xd8, 0x13, 0xbb, 0x7a, 0x4c, 0xeb, 0x3d, - 0x3c, 0x12, 0xd9, 0x36, 0xd2, 0xdc, 0xae, 0x75, 0xed, 0x48, 0x9c, 0x6d, 0xc7, 0x83, 0xe9, 0x48, - 0x8d, 0x71, 0xf4, 0x2f, 0x26, 0xe1, 0x7f, 0x20, 0xcd, 0x05, 0x8e, 0x36, 0x17, 0x68, 0xaa, 0xf3, - 0x7c, 0x10, 0x0a, 0xf8, 0x93, 0x67, 0x3f, 0x8b, 0x7f, 0xd2, 0x45, 0x60, 0x97, 0x7c, 0x84, 0x7f, - 0xc3, 0x9a, 0xb2, 0x66, 0x92, 0x21, 0x39, 0x29, 0xb6, 0x26, 0xa5, 0x79, 0x04, 0x12, 0xd1, 0x40, - 0x8a, 0x8d, 0xfe, 0x33, 0x89, 0xc1, 0x9d, 0xb1, 0xc1, 0x3d, 0x89, 0xc1, 0x76, 0x43, 0x27, 0xc7, - 0xe6, 0xa7, 0x59, 0x69, 0x71, 0x2f, 0x02, 0xd5, 0x3a, 0xa6, 0xcc, 0x58, 0xf7, 0xa2, 0xd9, 0x69, - 0x4c, 0x62, 0x2d, 0x2e, 0x45, 0x95, 0x28, 0x47, 0xf1, 0xe3, 0xe7, 0x20, 0xdf, 0x90, 0xb6, 0x2d, - 0x14, 0x48, 0x91, 0x38, 0x0f, 0x3c, 0xd0, 0x12, 0xad, 0x2d, 0xc4, 0xba, 0x97, 0x3c, 0xb7, 0x47, - 0x88, 0xab, 0x45, 0x67, 0x7f, 0xf2, 0xec, 0x56, 0x99, 0xb4, 0xe6, 0xff, 0x40, 0x13, 0x40, 0x61, - 0x53, 0xf1, 0x29, 0xee, 0xba, 0x02, 0x8c, 0x33, 0xab, 0xcc, 0x76, 0xc4, 0xed, 0x8a, 0xe9, 0x29, - 0x3e, 0xe9, 0x8e, 0x7d, 0xb0, 0x15, 0x25, 0x7b, 0x18, 0x32, 0xdb, 0x8b, 0xff, 0x00, 0xe5, 0xea, - 0x9b, 0x8e, 0xbf, 0xcd, 0xe3, 0x6f, 0x3f, 0xea, 0xfa, 0x6d, 0x08, 0xba, 0x60, 0x86, 0xf8, 0xa6, - 0xbd, 0xc4, 0x39, 0xb6, 0xef, 0xc6, 0xa2, 0x7b, 0x2d, 0x9f, 0xa3, 0x2d, 0xf5, 0x7b, 0x97, 0xd7, - 0x58, 0xef, 0x0d, 0xbf, 0x1f, 0x08, 0x36, 0xe0, 0x0f, 0x4e, 0x1d, 0xf3, 0x33, 0x51, 0xcd, 0x74, - 0x83, 0x67, 0x02, 0x6f, 0xb9, 0x65, 0x38, 0x71, 0x8e, 0x91, 0x78, 0x8f, 0x24, 0x53, 0xb1, 0x41, - 0xa1, 0x6c, 0x69, 0x3d, 0xeb, 0x2d, 0x34, 0xd9, 0xf6, 0x32, 0xde, 0xbe, 0xb4, 0x25, 0xef, 0xa0, - 0x29, 0x8e, 0x87, 0xed, 0xf6, 0x8d, 0xfe, 0x32, 0x9a, 0xe2, 0xd8, 0x8f, 0x9b, 0x52, 0x8a, 0x92, - 0xe8, 0x75, 0x2e, 0xb4, 0x98, 0x38, 0x05, 0x10, 0x0d, 0xb9, 0x53, 0x24, 0x32, 0x17, 0xa1, 0xa3, - 0xae, 0x71, 0x98, 0x1e, 0xba, 0xc6, 0x59, 0x70, 0xbc, 0x5e, 0x0f, 0x88, 0xa8, 0xf0, 0x1b, 0x0e, - 0x4d, 0xb5, 0x8c, 0x79, 0x5f, 0xa8, 0x00, 0x0b, 0xff, 0xfb, 0xa9, 0x46, 0xa0, 0x49, 0x0b, 0x59, - 0xfa, 0xba, 0x9d, 0x2c, 0x5d, 0x82, 0x23, 0x5e, 0x93, 0xb2, 0x51, 0x88, 0x52, 0x9a, 0x51, 0x89, - 0x90, 0xa0, 0x2f, 0x5a, 0x48, 0xd0, 0xf9, 0xa3, 0x93, 0xa0, 0x64, 0x80, 0xfb, 0x8f, 0x02, 0x75, - 0xee, 0xe4, 0x3d, 0x44, 0x81, 0xba, 0x4c, 0xee, 0x01, 0x05, 0xfa, 0x80, 0x02, 0xfd, 0x79, 0x53, - 0xa0, 0x2f, 0x98, 0x61, 0x7e, 0x27, 0x18, 0x0a, 0xc8, 0x14, 0x61, 0x7e, 0xc7, 0x05, 0xb3, 0xf3, - 0x33, 0x2c, 0xd9, 0x9c, 0x1f, 0x10, 0x9f, 0x77, 0x9a, 0xf8, 0x7c, 0xd7, 0x46, 0x7c, 0x56, 0xa8, - 0x52, 0x29, 0x25, 0x3e, 0x97, 0x8e, 0x85, 0xf8, 0x9c, 0x0f, 0x26, 0x3e, 0xe1, 0x60, 0x93, 0x12, - 0x6f, 0x39, 0x88, 0x9d, 0x54, 0x8b, 0x1e, 0x10, 0xa4, 0xa9, 0x09, 0x52, 0x97, 0x57, 0xe3, 0x01, - 0x41, 0x7a, 0x3b, 0x09, 0x52, 0x92, 0x41, 0x6d, 0x1a, 0x6c, 0x34, 0x79, 0x6c, 0x0c, 0x92, 0x94, - 0x64, 0xac, 0x04, 0x27, 0x52, 0x27, 0x4d, 0x6a, 0x60, 0xa2, 0xc2, 0x5d, 0x19, 0x68, 0xaa, 0xe5, - 0xa4, 0xee, 0x0f, 0x03, 0xb4, 0x37, 0x2c, 0x16, 0x38, 0xd3, 0x5d, 0x81, 0xdd, 0x62, 0x75, 0x43, - 0x13, 0xe1, 0x41, 0x46, 0x2c, 0x36, 0x24, 0x1b, 0xa8, 0x0f, 0x0a, 0xff, 0x92, 0x43, 0xbc, 0xa1, - 0x49, 0x64, 0x08, 0xda, 0x77, 0xed, 0x04, 0x6d, 0xd9, 0x4d, 0x10, 0xb4, 0xa3, 0x4b, 0x59, 0x0b, - 0xd0, 0x38, 0x5f, 0x68, 0x79, 0x20, 0x58, 0x0b, 0xfb, 0x96, 0x2b, 0x1b, 0x3f, 0x4b, 0x4a, 0x54, - 0xe9, 0x39, 0xf4, 0x8c, 0xe0, 0x32, 0x27, 0x71, 0x3a, 0x89, 0x55, 0x68, 0xac, 0xc3, 0x7e, 0xbe, - 0xf8, 0x54, 0x2d, 0xfd, 0x7e, 0xa2, 0xa7, 0xaa, 0x5d, 0xfe, 0x1a, 0xb6, 0x22, 0xe5, 0xa9, 0xf6, - 0x70, 0x38, 0x2e, 0xb2, 0xe5, 0x48, 0x57, 0xd9, 0x8f, 0xf4, 0x29, 0x7d, 0x6a, 0xf4, 0x48, 0x27, - 0x30, 0xc1, 0x70, 0xc6, 0x70, 0x84, 0xc6, 0x41, 0xd9, 0x3f, 0x63, 0x06, 0xb2, 0xbb, 0x1c, 0x1b, - 0xde, 0xe7, 0x7e, 0x11, 0x0b, 0xff, 0x3c, 0x03, 0xe5, 0x9b, 0xfd, 0xee, 0x8f, 0x53, 0x7a, 0x7d, - 0x2c, 0xa7, 0x34, 0xc6, 0x5c, 0x69, 0x25, 0xcb, 0x55, 0xa9, 0x0c, 0x49, 0x82, 0x63, 0x13, 0xc4, - 0xe9, 0xb0, 0x7b, 0x26, 0x8c, 0xa7, 0xd7, 0x92, 0x24, 0xb2, 0x50, 0x3e, 0x28, 0xfe, 0x98, 0x83, - 0x7e, 0xcd, 0x7e, 0xd0, 0x8b, 0x6f, 0xe2, 0xee, 0x66, 0x05, 0x41, 0x5e, 0x48, 0x2e, 0xea, 0xd3, - 0x16, 0x5e, 0xd4, 0x33, 0x1a, 0x2f, 0x7a, 0x4f, 0xf1, 0xa0, 0x4b, 0x4c, 0x69, 0x29, 0xa8, 0xd6, - 0x71, 0x36, 0x13, 0x2a, 0x2d, 0x1d, 0x4f, 0xe5, 0xa4, 0xa6, 0x78, 0x74, 0x89, 0x3d, 0x8b, 0xc5, - 0xcc, 0x14, 0xe4, 0x6d, 0x1a, 0xa2, 0x36, 0xe7, 0x07, 0x10, 0xb5, 0x25, 0x07, 0x39, 0x55, 0x52, - 0x39, 0xd4, 0xc9, 0x09, 0x8e, 0x73, 0x15, 0x7f, 0x67, 0x87, 0x0d, 0xc3, 0x70, 0x9b, 0xc4, 0x72, - 0xc6, 0xde, 0xce, 0xb1, 0xe8, 0xce, 0xc4, 0xd1, 0x3e, 0x9d, 0x3b, 0xc6, 0x94, 0x2f, 0xf0, 0x67, - 0x89, 0xc1, 0x1d, 0x5a, 0x57, 0x0b, 0x94, 0x93, 0x5d, 0xc6, 0x43, 0x99, 0x7d, 0x9b, 0xcf, 0x01, - 0x87, 0xa7, 0xb5, 0x1c, 0x89, 0x0d, 0x44, 0x8d, 0x2b, 0x7c, 0x6e, 0x64, 0x57, 0x27, 0xb4, 0x2f, - 0xfc, 0x2e, 0x03, 0x4d, 0x61, 0x66, 0x74, 0x7f, 0xdc, 0xd9, 0x57, 0x2d, 0x0a, 0xf8, 0x14, 0x77, - 0x96, 0x35, 0xd5, 0x86, 0x3b, 0xab, 0xb5, 0x9c, 0xd7, 0x31, 0x2b, 0x7b, 0x61, 0x5f, 0x51, 0xa5, - 0x97, 0xd0, 0x0b, 0x82, 0x73, 0x0b, 0xc6, 0x7a, 0x63, 0x0b, 0xbf, 0x9a, 0x8a, 0x66, 0x80, 0xc0, - 0x8b, 0xb2, 0x68, 0xc6, 0x85, 0x5d, 0x4a, 0x2e, 0x19, 0x67, 0x04, 0xdb, 0x9a, 0x49, 0x2e, 0x19, - 0x71, 0x77, 0xc1, 0xc7, 0x07, 0xa2, 0x1e, 0x30, 0x95, 0xfc, 0xff, 0x38, 0x72, 0xd1, 0xfe, 0xd4, - 0xa9, 0xe9, 0xf6, 0xaa, 0xd2, 0x32, 0x56, 0xd3, 0xbd, 0x84, 0x8e, 0x11, 0x6f, 0x8d, 0xd0, 0x10, - 0xad, 0x34, 0x1c, 0x14, 0x0e, 0xc4, 0x14, 0x1b, 0x88, 0xea, 0x97, 0xcc, 0x92, 0x99, 0x33, 0x63, - 0x4c, 0x99, 0x39, 0xdf, 0xa5, 0x0e, 0x79, 0x99, 0xa6, 0x3a, 0xd6, 0x70, 0xc8, 0x9b, 0xe3, 0xfc, - 0x34, 0x78, 0xde, 0x18, 0xe6, 0x5e, 0xfa, 0x2b, 0xc3, 0x15, 0x78, 0x9c, 0xaf, 0x8c, 0xe1, 0x92, - 0xf7, 0x3e, 0x9a, 0x0c, 0xac, 0x86, 0xd4, 0x14, 0x0e, 0x84, 0x70, 0x0c, 0x89, 0x2c, 0x7c, 0xf8, - 0x38, 0xd1, 0xbf, 0xbd, 0x4e, 0x7c, 0x82, 0x20, 0x8f, 0xa1, 0x88, 0xd6, 0xd5, 0xcf, 0x32, 0xb6, - 0xd4, 0x09, 0x8c, 0x44, 0xd9, 0xb1, 0x75, 0xe4, 0x37, 0xa3, 0x09, 0x46, 0x60, 0x08, 0x9f, 0x7f, - 0x43, 0x2a, 0x2b, 0x7c, 0xc9, 0x6c, 0x02, 0xd1, 0x79, 0xb1, 0x11, 0x29, 0xdb, 0x53, 0x2c, 0xb0, - 0x78, 0x8d, 0xc2, 0x1b, 0x88, 0xc9, 0xf8, 0xef, 0x4b, 0xb3, 0x77, 0x73, 0x19, 0xf9, 0x9c, 0xcc, - 0x36, 0xe7, 0xf7, 0x73, 0x68, 0x52, 0xbd, 0xb7, 0xc9, 0x5f, 0xbb, 0x91, 0xc6, 0xe0, 0xcd, 0x71, - 0xcf, 0xce, 0xb4, 0x12, 0xb7, 0x02, 0x4e, 0xa6, 0x09, 0xec, 0x0a, 0x4a, 0x57, 0xa8, 0xd2, 0x8b, - 0x82, 0xad, 0xbf, 0x28, 0xc0, 0xb7, 0xe3, 0x87, 0x2e, 0x01, 0x7e, 0x83, 0x49, 0x80, 0xf7, 0x22, - 0x65, 0x2a, 0x00, 0x54, 0xe9, 0x9c, 0x6c, 0x63, 0xf0, 0x9b, 0xa9, 0x5f, 0xe0, 0xb8, 0x74, 0xaa, - 0x63, 0x3b, 0x20, 0x5b, 0x5c, 0x04, 0xb1, 0x1f, 0x93, 0xe1, 0x22, 0xf8, 0x88, 0x4e, 0x85, 0x5a, - 0x1d, 0x28, 0x71, 0x8d, 0xcd, 0x5b, 0x70, 0x1b, 0x47, 0xdd, 0x05, 0x73, 0x6f, 0xea, 0xc3, 0xd8, - 0x8b, 0x90, 0x7c, 0x18, 0xdc, 0x36, 0x89, 0x2f, 0x61, 0x91, 0xf3, 0xc3, 0x89, 0xee, 0x1d, 0xf1, - 0x0b, 0x27, 0xa9, 0x3b, 0xcf, 0x7c, 0x2d, 0x7a, 0x5c, 0x1b, 0xda, 0x5e, 0x44, 0x1d, 0x0d, 0xdf, - 0x07, 0xd7, 0xec, 0xd5, 0x35, 0xc4, 0x6c, 0x16, 0x07, 0x91, 0x22, 0x45, 0xa2, 0x44, 0xc7, 0x1b, - 0x89, 0xb4, 0x02, 0xf3, 0x0d, 0x01, 0x87, 0x57, 0xd7, 0x60, 0x59, 0xd9, 0xb6, 0x44, 0xf3, 0x59, - 0x9d, 0xa1, 0x24, 0xef, 0x52, 0x2f, 0x6c, 0xb7, 0xbe, 0xef, 0x86, 0x0f, 0xa2, 0x4c, 0x86, 0x62, - 0x95, 0x79, 0xe8, 0xd6, 0x94, 0x79, 0x67, 0x38, 0x26, 0xe6, 0xa1, 0x25, 0xb2, 0x9c, 0x19, 0xf5, - 0x70, 0x0b, 0xdd, 0x2b, 0x12, 0xd8, 0xf0, 0xbb, 0x63, 0xc9, 0x6f, 0x0f, 0x02, 0xe1, 0x48, 0x1e, - 0xa2, 0x83, 0x57, 0xe2, 0x27, 0x5b, 0xa8, 0x88, 0x12, 0x7e, 0xc2, 0x8b, 0x11, 0x1b, 0xe8, 0x00, - 0x31, 0xca, 0xf5, 0xc8, 0x36, 0x36, 0xe3, 0x3d, 0x7d, 0x37, 0x92, 0x67, 0xb6, 0x82, 0x78, 0x4f, - 0x2f, 0xb9, 0xda, 0x3c, 0x72, 0x72, 0x30, 0x7e, 0xb8, 0x9f, 0x78, 0xd4, 0x31, 0x61, 0x12, 0x37, - 0x22, 0x54, 0x1b, 0xf0, 0x87, 0x9a, 0x1a, 0x98, 0xd8, 0x5c, 0x58, 0x68, 0xc6, 0x14, 0x8b, 0xcf, - 0x99, 0x7f, 0x43, 0x60, 0xe7, 0xa0, 0x12, 0x0a, 0x34, 0x05, 0x6b, 0x15, 0x10, 0x3f, 0x05, 0xc1, - 0x12, 0x3d, 0xb1, 0xff, 0x62, 0xb2, 0xff, 0x72, 0xf2, 0xdb, 0x1d, 0xf1, 0x68, 0x17, 0xc8, 0x3f, - 0x64, 0x66, 0x10, 0xfe, 0x03, 0x5b, 0x44, 0xeb, 0xa9, 0x63, 0x88, 0x68, 0x8d, 0xad, 0x8d, 0xac, - 0x11, 0xad, 0xa7, 0x9b, 0x88, 0x17, 0x1f, 0x36, 0x2c, 0xd2, 0x1a, 0xb7, 0x9a, 0xff, 0x08, 0x65, - 0x85, 0xbd, 0x1b, 0x42, 0x05, 0xd3, 0x30, 0xa8, 0x2e, 0x1e, 0x33, 0xa8, 0x6e, 0x20, 0x80, 0x2a, - 0xaa, 0xd2, 0x22, 0x01, 0x0f, 0x21, 0x3e, 0xe9, 0x0a, 0xa6, 0xb0, 0x4a, 0x8b, 0x5f, 0x2d, 0x6e, - 0xce, 0x7f, 0xcb, 0x31, 0x2e, 0x93, 0x58, 0x50, 0x04, 0x3e, 0xa0, 0x1d, 0x9c, 0x2a, 0xed, 0xe6, - 0x04, 0x6b, 0x9d, 0xb8, 0x85, 0x3a, 0x4d, 0x92, 0x88, 0x3d, 0xfe, 0x40, 0xb0, 0xc1, 0x5b, 0xbf, - 0x48, 0xf9, 0x28, 0xac, 0x04, 0xfd, 0xde, 0xfa, 0xa2, 0xeb, 0x91, 0x6d, 0xf1, 0x23, 0x7d, 0x23, - 0x91, 0x6e, 0x16, 0x79, 0x99, 0x9e, 0x96, 0x6a, 0x5b, 0xe2, 0xab, 0xaf, 0x62, 0x03, 0xad, 0xf1, - 0x83, 0x57, 0x5c, 0x1b, 0x14, 0x7b, 0xb4, 0xf6, 0x8b, 0x65, 0xeb, 0x56, 0x91, 0x82, 0x96, 0x83, - 0x34, 0x0b, 0x81, 0x6c, 0x9d, 0x89, 0xd5, 0x3d, 0x73, 0xc6, 0x4d, 0xb9, 0x67, 0x56, 0x12, 0x32, - 0x4b, 0x0a, 0x2a, 0x5e, 0xec, 0x2d, 0x39, 0x93, 0x71, 0x12, 0xb5, 0xd4, 0x88, 0x93, 0xe9, 0x10, - 0x86, 0x93, 0xa8, 0xa5, 0x5e, 0xc7, 0x32, 0x24, 0x53, 0x71, 0x81, 0x7b, 0xd4, 0x2a, 0x3c, 0x61, - 0x1a, 0xb4, 0xa9, 0x74, 0xa5, 0x2a, 0x55, 0x1a, 0x79, 0x8a, 0x5f, 0x31, 0xb7, 0x05, 0x5f, 0x4c, - 0x5c, 0x6a, 0x08, 0x0f, 0x6d, 0xee, 0x94, 0x20, 0xc5, 0x89, 0x0d, 0x7c, 0xa1, 0xd3, 0x7c, 0x6d, - 0x07, 0xb5, 0xce, 0x6d, 0xf1, 0x03, 0xe7, 0x8d, 0x34, 0xc6, 0x1f, 0xa0, 0x49, 0x01, 0x7f, 0x3d, - 0xc9, 0xc6, 0x8d, 0x05, 0x4a, 0x0f, 0xe1, 0x87, 0x0d, 0x87, 0x57, 0xb7, 0x55, 0x89, 0x0b, 0xac, - 0xbf, 0x63, 0x83, 0xcd, 0x90, 0xfa, 0x07, 0x5c, 0x1e, 0x8a, 0x63, 0x03, 0xed, 0xf1, 0xd6, 0xb3, - 0xc9, 0x93, 0x6d, 0x20, 0x51, 0x96, 0x6d, 0xdd, 0x7f, 0x88, 0x4f, 0xe5, 0xf3, 0x68, 0x02, 0x83, - 0x5b, 0x6f, 0xaa, 0xeb, 0x73, 0x68, 0x3c, 0x85, 0xf5, 0x9b, 0x92, 0xf0, 0x6c, 0xe3, 0x54, 0xe9, - 0x4f, 0xd1, 0x1f, 0x84, 0x14, 0xe4, 0x92, 0x38, 0x9d, 0xe0, 0x44, 0xe3, 0x8a, 0x1a, 0xec, 0x25, - 0xd1, 0x38, 0x5a, 0x72, 0x65, 0x01, 0x1d, 0x71, 0x8d, 0x63, 0x5f, 0xdd, 0x6b, 0x9c, 0xed, 0xbd, - 0x33, 0xd5, 0x92, 0xd7, 0x38, 0x82, 0x9d, 0x0b, 0xcb, 0xd1, 0x24, 0x2b, 0x18, 0xf0, 0xb3, 0x18, - 0x64, 0x0b, 0xeb, 0x30, 0x11, 0xdc, 0x0c, 0x94, 0xd3, 0x18, 0x08, 0xd4, 0x1b, 0x44, 0x98, 0x4c, - 0x7e, 0x15, 0xb6, 0x67, 0xa2, 0x99, 0x8e, 0x55, 0xdc, 0x1f, 0xb4, 0xf3, 0x9b, 0x16, 0x7e, 0xf7, - 0x17, 0xa3, 0x62, 0x37, 0x58, 0x55, 0xb9, 0x37, 0xec, 0x1d, 0x25, 0x6b, 0x24, 0xbf, 0xe5, 0xd6, - 0xdd, 0x1e, 0x71, 0x82, 0x42, 0x87, 0xdb, 0x63, 0x81, 0x25, 0x80, 0x5c, 0x1a, 0x9f, 0xc7, 0xc2, - 0xbf, 0xe4, 0xd0, 0xec, 0x34, 0x33, 0xe7, 0xdf, 0x44, 0xe3, 0x29, 0xc6, 0x22, 0xc1, 0xb5, 0xd2, - 0x24, 0x67, 0xc0, 0x51, 0x10, 0xcc, 0x0e, 0x8c, 0x77, 0xba, 0x91, 0xa0, 0x8e, 0xd6, 0xf1, 0xd5, - 0x24, 0x9f, 0x7f, 0x46, 0x9a, 0x7c, 0xfe, 0x20, 0xe3, 0xc1, 0xf9, 0xfc, 0x67, 0xb3, 0x30, 0x8e, - 0xdd, 0xdd, 0x3b, 0xb4, 0xce, 0xf3, 0xe0, 0x8e, 0x0d, 0x59, 0xfd, 0x0b, 0xff, 0x85, 0x47, 0x33, - 0xcc, 0x04, 0x7f, 0x16, 0x86, 0x62, 0xb9, 0x35, 0x3e, 0x08, 0x67, 0x06, 0xf1, 0xb5, 0xc4, 0x07, - 0x99, 0x40, 0xaf, 0x90, 0x61, 0x0e, 0x3f, 0xcd, 0x1a, 0xe9, 0xe3, 0xae, 0xb3, 0x17, 0x0b, 0x09, - 0x67, 0x04, 0xcc, 0xc5, 0xac, 0xd4, 0x9c, 0x11, 0xe1, 0x87, 0xca, 0x6c, 0xf1, 0x98, 0x7f, 0x71, - 0x13, 0xec, 0x08, 0x65, 0x3a, 0xb6, 0x71, 0x4e, 0xae, 0x23, 0x9b, 0x28, 0x01, 0xed, 0x81, 0xd6, - 0x4a, 0x03, 0x81, 0xfa, 0x75, 0x3a, 0xe6, 0xba, 0xdd, 0x1c, 0x89, 0xdf, 0xca, 0x91, 0xe4, 0x8c, - 0x91, 0x23, 0x11, 0xc6, 0xce, 0x91, 0x58, 0x39, 0x91, 0x36, 0x27, 0x27, 0x32, 0x6e, 0xec, 0x9c, - 0xc8, 0xcb, 0x3f, 0x90, 0x13, 0x71, 0x70, 0x20, 0x76, 0x3a, 0x2e, 0xf7, 0x47, 0xa4, 0xe3, 0x4c, - 0x6e, 0x67, 0x7c, 0x3a, 0x33, 0x85, 0xdb, 0xce, 0xed, 0x7c, 0x4c, 0x99, 0x1d, 0x74, 0x53, 0xdf, - 0x65, 0x99, 0x1d, 0x8c, 0x10, 0x0d, 0x66, 0x67, 0xee, 0xa8, 0xcc, 0x0e, 0x65, 0x72, 0x0c, 0xda, - 0x75, 0x82, 0x3b, 0xed, 0x9a, 0xf2, 0xcb, 0x3f, 0x9c, 0x76, 0x35, 0xd9, 0xab, 0xbc, 0x1f, 0x9b, - 0xbd, 0x32, 0x44, 0x79, 0x13, 0x19, 0xf6, 0xca, 0x10, 0xe5, 0x11, 0xf6, 0x8a, 0xd1, 0x57, 0x53, - 0xf6, 0xca, 0x90, 0xec, 0x59, 0xd8, 0xab, 0x49, 0xf7, 0x0d, 0x7b, 0x35, 0xf9, 0x47, 0x64, 0xaf, - 0x4a, 0x50, 0x56, 0x9d, 0x12, 0xaa, 0x25, 0xda, 0x64, 0xa2, 0x93, 0x50, 0x42, 0xb5, 0xd6, 0xcc, - 0xe4, 0x3a, 0x86, 0xc5, 0x1a, 0x6f, 0x2a, 0x42, 0x53, 0x42, 0xb5, 0xfa, 0xdb, 0x6a, 0x12, 0xff, - 0x53, 0xc8, 0x7d, 0xb6, 0xe3, 0xd3, 0xb5, 0x95, 0xfe, 0xf0, 0x53, 0x22, 0x60, 0x54, 0x1c, 0x17, - 0x8c, 0x61, 0x0d, 0xf2, 0x28, 0x5d, 0xef, 0xb1, 0xf2, 0x06, 0x1b, 0xec, 0xbc, 0x01, 0x9f, 0x62, - 0xf4, 0x9a, 0x70, 0xd0, 0xe7, 0xdf, 0x00, 0xa3, 0xdf, 0x0a, 0xe7, 0x40, 0x88, 0x76, 0xb8, 0x1d, - 0x44, 0x0b, 0x6c, 0x25, 0xda, 0xcd, 0x2a, 0x20, 0xda, 0xcd, 0xdf, 0xb1, 0xc1, 0x66, 0x92, 0xb9, - 0x37, 0x0d, 0xd1, 0x6e, 0x36, 0xe7, 0x3f, 0x44, 0xe3, 0x15, 0x1a, 0x15, 0x78, 0x9a, 0x7b, 0x54, - 0xe0, 0x14, 0xd7, 0xd4, 0x16, 0x15, 0x18, 0x87, 0xc2, 0x33, 0x07, 0xa3, 0x41, 0x69, 0x2e, 0x9c, - 0x20, 0x36, 0x4a, 0x3a, 0xa5, 0x42, 0xab, 0xef, 0x33, 0x6e, 0x61, 0xd6, 0x8b, 0x68, 0xd2, 0xa8, - 0x31, 0x80, 0x53, 0xf3, 0x1a, 0x4f, 0xab, 0xd2, 0x12, 0xb4, 0x48, 0x48, 0x41, 0x48, 0x89, 0xd3, - 0xe1, 0xc8, 0x68, 0x39, 0xb0, 0x1a, 0x85, 0xbb, 0x32, 0xd1, 0x4c, 0x47, 0x8f, 0xfb, 0x83, 0xac, - 0x97, 0x2d, 0x64, 0x7d, 0x1a, 0xe2, 0x96, 0x4d, 0xb9, 0x4b, 0xd5, 0xc8, 0x34, 0x95, 0x38, 0x2b, - 0x1c, 0xbf, 0x9b, 0x04, 0xfd, 0x8e, 0x5c, 0x34, 0x03, 0x54, 0xbe, 0x0e, 0x22, 0xf8, 0x57, 0x6e, - 0x44, 0xf0, 0x73, 0xa3, 0x10, 0xc1, 0x29, 0xf5, 0x9e, 0x16, 0xba, 0xf8, 0xcf, 0x38, 0x9b, 0xfe, - 0xba, 0xf4, 0x0b, 0x4e, 0x95, 0xce, 0x70, 0x82, 0x51, 0x2a, 0x76, 0x73, 0xda, 0x50, 0x54, 0x6b, - 0xb9, 0x04, 0x7a, 0x5a, 0xc8, 0x16, 0x17, 0xdf, 0xf3, 0x55, 0x7c, 0xa0, 0x39, 0xd1, 0xb5, 0xd3, - 0x94, 0xc7, 0x60, 0x7b, 0x2b, 0xfd, 0x8d, 0xee, 0x89, 0x6a, 0x47, 0xce, 0x5d, 0x8f, 0x6c, 0x83, - 0x1c, 0x66, 0x80, 0x7f, 0xa1, 0x6f, 0x72, 0xf8, 0x2b, 0xad, 0xf9, 0x34, 0xd0, 0xff, 0xc4, 0xab, - 0xf7, 0xc0, 0x55, 0x60, 0x04, 0xb4, 0xfe, 0x2b, 0x5a, 0xcb, 0x21, 0x33, 0xa7, 0xc3, 0x50, 0x37, - 0x1c, 0xb9, 0xce, 0x4c, 0x90, 0xe7, 0xed, 0xe0, 0x95, 0xd8, 0x77, 0x57, 0x13, 0x27, 0xfb, 0x92, - 0x7d, 0xa7, 0x92, 0x57, 0x8f, 0x6a, 0xd1, 0x33, 0xd7, 0x23, 0xdb, 0xa8, 0xb2, 0x9d, 0xff, 0x4b, - 0x0e, 0x4d, 0x0f, 0x2a, 0xd8, 0x7f, 0xd6, 0x1a, 0xef, 0x92, 0xc0, 0x93, 0xca, 0xa9, 0x52, 0x07, - 0x27, 0xb8, 0xb7, 0x11, 0x9b, 0x62, 0x57, 0x8f, 0x25, 0x0e, 0x1c, 0x21, 0xf1, 0x60, 0x7a, 0xce, - 0x19, 0xa9, 0x1f, 0x7a, 0x6f, 0x0c, 0xb5, 0xc5, 0x06, 0x9b, 0xc9, 0xf4, 0x8d, 0xb5, 0xea, 0xcc, - 0xc0, 0xd9, 0xcf, 0x68, 0x49, 0x6c, 0xa0, 0xc3, 0x64, 0x6e, 0x30, 0x2d, 0xae, 0xaf, 0x7e, 0x78, - 0x5f, 0x6c, 0x60, 0x3f, 0x16, 0x6f, 0xec, 0x63, 0xf7, 0x2f, 0x7e, 0xe8, 0x52, 0x62, 0xff, 0xf1, - 0xf8, 0x81, 0x16, 0x7d, 0xf6, 0xee, 0xb3, 0xe1, 0x87, 0x39, 0x34, 0x65, 0x93, 0xa2, 0x34, 0x92, - 0x62, 0x08, 0x7b, 0x47, 0xb4, 0x05, 0x44, 0x2e, 0xe6, 0xac, 0x17, 0x9b, 0xc8, 0x6c, 0x06, 0x3b, - 0x8c, 0x78, 0xc2, 0x83, 0x70, 0x5e, 0xe4, 0xa4, 0xf0, 0x41, 0xe8, 0xeb, 0x19, 0xde, 0x19, 0x1b, - 0x68, 0x1f, 0xd9, 0x1f, 0x89, 0xf7, 0x6f, 0x85, 0xc3, 0xd2, 0x0b, 0xf1, 0xfa, 0xe1, 0x27, 0x24, - 0x57, 0x1c, 0xeb, 0x1a, 0x9c, 0x33, 0xe1, 0x5f, 0x62, 0x52, 0x33, 0x64, 0x9b, 0xb1, 0x3d, 0x1c, - 0x39, 0xc6, 0x19, 0x5a, 0xa5, 0x8e, 0xc9, 0xa4, 0x40, 0x9e, 0x26, 0xb8, 0x0b, 0x24, 0x92, 0xbc, - 0xf5, 0x69, 0x32, 0xab, 0xe0, 0x69, 0x32, 0x7f, 0xd3, 0xc3, 0x4a, 0xf7, 0x34, 0x99, 0xcd, 0x4b, - 0x3a, 0x39, 0x55, 0xda, 0xc3, 0xa1, 0x16, 0x4e, 0x48, 0x71, 0xf7, 0xc4, 0xb5, 0x30, 0x1e, 0x2d, - 0x4f, 0x1c, 0x1d, 0xd0, 0x9a, 0x2f, 0x9a, 0x36, 0xa5, 0xc3, 0xfb, 0x4c, 0x94, 0x7a, 0xf5, 0x70, - 0xbc, 0xa7, 0x55, 0xeb, 0xec, 0xa7, 0x97, 0x41, 0xaf, 0x8a, 0x1f, 0xba, 0x84, 0x55, 0x97, 0xfa, - 0x28, 0x10, 0x2d, 0xec, 0x7a, 0x64, 0xdb, 0x35, 0x8e, 0xbd, 0x85, 0xd7, 0x38, 0xba, 0x7a, 0x2c, - 0x67, 0x71, 0x4c, 0xe5, 0x27, 0x21, 0x67, 0x49, 0xb1, 0xaa, 0x7b, 0x5c, 0xce, 0xf2, 0x09, 0x0d, - 0xb1, 0xe0, 0x2e, 0x67, 0xa9, 0xbb, 0x29, 0x39, 0x0b, 0xe6, 0xe2, 0x19, 0x39, 0x8b, 0xc5, 0x00, - 0x86, 0x36, 0x73, 0xca, 0x5c, 0x0e, 0x73, 0x63, 0x10, 0xba, 0xf8, 0x55, 0x69, 0x13, 0x11, 0xba, - 0xd4, 0xda, 0xa1, 0xb6, 0x7b, 0x07, 0x2b, 0x77, 0x81, 0x0f, 0x5c, 0x8f, 0x6c, 0x23, 0x21, 0x45, - 0x6d, 0xf7, 0xbb, 0x35, 0x12, 0xef, 0x69, 0xa5, 0xe1, 0xf7, 0x63, 0x43, 0xdd, 0xb1, 0xe8, 0xd9, - 0xc4, 0xfe, 0xe3, 0xb6, 0xbe, 0x44, 0x78, 0xf3, 0xe7, 0x1c, 0xcd, 0x61, 0x6d, 0x79, 0xb4, 0x36, - 0xbb, 0x3d, 0x5a, 0x6b, 0x54, 0xe9, 0x39, 0xeb, 0xa3, 0x35, 0x9f, 0x0d, 0xe5, 0xaa, 0x63, 0xd6, - 0x5d, 0x5f, 0x68, 0x83, 0xd1, 0xca, 0x72, 0x30, 0x7a, 0xa7, 0xc9, 0xab, 0xc6, 0xfc, 0xa2, 0x19, - 0x99, 0xe6, 0xdd, 0xe6, 0x24, 0xce, 0x06, 0x0d, 0xb7, 0x6d, 0xa3, 0x09, 0x29, 0xf4, 0xef, 0x32, - 0xd1, 0x34, 0x6b, 0xa7, 0x9f, 0x30, 0x1d, 0x44, 0x4d, 0x7a, 0xec, 0x40, 0x77, 0xb7, 0x2f, 0x5c, - 0xc9, 0x6b, 0xaa, 0xb4, 0x02, 0x55, 0x08, 0xae, 0x47, 0x71, 0xb3, 0x46, 0x45, 0x9f, 0x65, 0x42, - 0x10, 0x43, 0x26, 0x9e, 0x9d, 0x05, 0x46, 0xff, 0xd4, 0x19, 0xc4, 0xf0, 0xce, 0x4a, 0x05, 0x8f, - 0x70, 0x28, 0x0f, 0xe4, 0x65, 0xcb, 0x7d, 0xf5, 0x3a, 0xb5, 0x02, 0x34, 0x58, 0x93, 0x2a, 0x05, - 0x05, 0x4b, 0x85, 0xb8, 0x9e, 0xfd, 0x65, 0x98, 0x31, 0x1f, 0xba, 0x54, 0xec, 0x49, 0x7e, 0xb7, - 0x4f, 0xdb, 0x15, 0x05, 0x98, 0x88, 0xb7, 0xb5, 0x26, 0x9a, 0xcf, 0xa6, 0x12, 0xd4, 0xc5, 0x3b, - 0x54, 0x2d, 0xda, 0x39, 0x1f, 0x2a, 0x74, 0x52, 0x0d, 0xff, 0xd6, 0x7a, 0xce, 0x69, 0x5d, 0x1d, - 0x23, 0xc7, 0x3e, 0x2d, 0x92, 0x2d, 0x5f, 0x2c, 0xd9, 0xa0, 0x4a, 0x75, 0x68, 0xbd, 0x90, 0x6e, - 0x03, 0xc5, 0x32, 0x12, 0x42, 0x91, 0x39, 0xd6, 0x44, 0xf7, 0x0e, 0x4a, 0x5b, 0x17, 0x7b, 0x80, - 0x9e, 0x03, 0x5b, 0x74, 0xe6, 0x96, 0x6a, 0xed, 0xbb, 0xb4, 0x68, 0x27, 0x9c, 0x5e, 0xe1, 0x3f, - 0x90, 0x60, 0x8a, 0xce, 0x8f, 0xdc, 0x1f, 0x17, 0x70, 0xa5, 0xc5, 0x36, 0x27, 0xcd, 0x05, 0x1c, - 0x8b, 0x7d, 0xce, 0xdd, 0xbc, 0x7a, 0x6f, 0xa8, 0x52, 0x15, 0x5a, 0x29, 0xa4, 0x3d, 0x0c, 0x03, - 0x87, 0xc2, 0x40, 0xa6, 0xcc, 0xc8, 0x3d, 0xee, 0x46, 0xe1, 0xdf, 0x64, 0x42, 0xda, 0x62, 0xc7, - 0xd5, 0x5b, 0x68, 0xb1, 0x14, 0x1a, 0x5d, 0x1e, 0xfe, 0x9e, 0x53, 0x80, 0x2f, 0xfd, 0xe0, 0xab, - 0xca, 0x5e, 0xc5, 0x32, 0x9b, 0xfd, 0xcf, 0x2d, 0x09, 0xdc, 0x57, 0xb2, 0x19, 0x0b, 0x41, 0x70, - 0x8f, 0x0f, 0x85, 0xc9, 0x58, 0xe8, 0x32, 0x14, 0x49, 0x40, 0x49, 0x5e, 0x7d, 0xda, 0xb4, 0x64, - 0x3f, 0xa7, 0x4a, 0x5d, 0x1c, 0x6a, 0xe7, 0x04, 0xd7, 0x3d, 0x14, 0x9b, 0xe0, 0x28, 0xe8, 0x75, - 0xbb, 0x43, 0x06, 0x74, 0x7f, 0x95, 0x01, 0x89, 0x7e, 0x7f, 0xde, 0x17, 0xb5, 0xa4, 0x5c, 0x95, - 0x24, 0xf4, 0xb2, 0xe0, 0xbe, 0x15, 0xc6, 0x4b, 0xc5, 0x30, 0x07, 0xee, 0xc6, 0x74, 0x89, 0xf1, - 0x68, 0xb2, 0x54, 0x57, 0x87, 0x39, 0x28, 0x33, 0x34, 0x88, 0xe3, 0x59, 0x92, 0x54, 0x69, 0x0e, - 0x0b, 0xeb, 0x53, 0x20, 0xf2, 0x31, 0x85, 0x6f, 0xe3, 0xd9, 0xe1, 0xc6, 0xf4, 0xec, 0x54, 0xa2, - 0x6c, 0x1d, 0x68, 0x42, 0x05, 0x19, 0x9e, 0x4c, 0x30, 0x9f, 0x7e, 0x42, 0x80, 0x12, 0xf1, 0x11, - 0xdb, 0xc0, 0x00, 0xad, 0x95, 0xd5, 0x34, 0xc2, 0xa1, 0xca, 0x65, 0xe5, 0x72, 0x05, 0x9c, 0x0c, - 0xed, 0x79, 0x1f, 0x9a, 0xe2, 0xf3, 0xfb, 0xc2, 0x2b, 0x03, 0x1b, 0x7c, 0xfe, 0x6a, 0x6f, 0x28, - 0xf4, 0x61, 0x20, 0x58, 0x47, 0x6e, 0x10, 0xf6, 0xd9, 0x72, 0xd6, 0x8a, 0x8f, 0x8d, 0xec, 0x6a, - 0x4f, 0x7e, 0xd6, 0xac, 0xb3, 0x91, 0xdd, 0x3b, 0x88, 0xa4, 0x9d, 0xc4, 0xa0, 0xd7, 0x3a, 0xfb, - 0x49, 0x82, 0x00, 0x67, 0x3f, 0x3e, 0xe8, 0x96, 0xef, 0xa6, 0x5a, 0x95, 0x56, 0x59, 0x29, 0xca, - 0x65, 0xb0, 0x02, 0xc2, 0xcc, 0x63, 0x98, 0x86, 0xd0, 0xf6, 0x10, 0xc2, 0x85, 0x9e, 0xc8, 0x8d, - 0xa1, 0x36, 0x52, 0x8e, 0x6f, 0x0b, 0x5c, 0xc5, 0xca, 0x72, 0xab, 0x7c, 0xe4, 0x1a, 0xe7, 0xb0, - 0x6e, 0xc8, 0xc6, 0xe0, 0xf6, 0x39, 0xa7, 0x4a, 0xa7, 0x39, 0x87, 0x7d, 0x83, 0xca, 0xe9, 0x2c, - 0xa8, 0x3e, 0xda, 0x69, 0x5b, 0xa4, 0x65, 0x62, 0xf8, 0x7b, 0xb8, 0x1f, 0xab, 0xc9, 0x74, 0xda, - 0xdb, 0xad, 0x21, 0x70, 0x8b, 0xb1, 0xa1, 0x6e, 0x78, 0x32, 0xc9, 0x91, 0x01, 0xee, 0xc6, 0x12, - 0x5c, 0x43, 0x54, 0x0e, 0xe0, 0x65, 0xfb, 0x86, 0x76, 0xe5, 0x12, 0x48, 0xd9, 0x63, 0x03, 0x51, - 0x92, 0xd9, 0x41, 0x27, 0xd4, 0x6d, 0x93, 0xb4, 0x30, 0xe8, 0x39, 0x63, 0x63, 0xd0, 0xa7, 0x31, - 0x0c, 0xfa, 0x1a, 0x34, 0x89, 0xd5, 0x3a, 0xd1, 0xdc, 0xaa, 0xd8, 0xb9, 0xcb, 0x56, 0x25, 0xce, - 0x74, 0xcd, 0xa5, 0x5f, 0x59, 0x2e, 0xdb, 0x1a, 0xf2, 0x5d, 0x1c, 0x9a, 0xe4, 0x0b, 0x55, 0x10, - 0x4b, 0x1e, 0xfd, 0x94, 0xb0, 0xaa, 0x2c, 0x17, 0x9c, 0xe1, 0x1e, 0x23, 0x39, 0xb5, 0x0e, 0xf7, - 0x53, 0x0b, 0x1e, 0x18, 0x6f, 0x3e, 0x35, 0xd1, 0x29, 0x12, 0x97, 0xc5, 0x06, 0x76, 0xc7, 0x3f, - 0xb9, 0x64, 0x6b, 0x31, 0xd2, 0x13, 0x81, 0x1d, 0xd1, 0x49, 0xa6, 0x62, 0x4f, 0x6c, 0x60, 0x3f, - 0x28, 0x20, 0x60, 0x62, 0xcc, 0x61, 0xcb, 0xb6, 0xef, 0xf3, 0xad, 0x1c, 0xca, 0xae, 0xd7, 0x41, - 0x10, 0xdb, 0xcf, 0x4d, 0x10, 0x1f, 0x71, 0xc3, 0x18, 0x18, 0x46, 0xb1, 0x75, 0xcd, 0x1a, 0x55, - 0x7a, 0x43, 0x80, 0x0e, 0xe2, 0xab, 0x30, 0x15, 0x32, 0x03, 0x0c, 0xef, 0xa0, 0xfe, 0x89, 0x1f, - 0x22, 0x47, 0xc4, 0xe6, 0x01, 0xd2, 0x8f, 0xdc, 0x70, 0x97, 0xd2, 0x3a, 0xfb, 0xb5, 0xe6, 0x21, - 0xad, 0xef, 0x8a, 0x76, 0x6a, 0x47, 0xa2, 0x6b, 0xa7, 0x0c, 0x03, 0x96, 0x5c, 0xe5, 0x54, 0x69, - 0x90, 0x43, 0x03, 0x9c, 0x60, 0x47, 0x17, 0x62, 0x17, 0x97, 0x18, 0x3c, 0x12, 0x6f, 0xdb, 0xa5, - 0xf5, 0x75, 0x9b, 0xd7, 0x16, 0xa7, 0x71, 0x80, 0x9b, 0x70, 0x63, 0xa8, 0xed, 0xc6, 0xd0, 0xd6, - 0xf8, 0xc5, 0x73, 0xf1, 0x1d, 0x9d, 0xfa, 0x1f, 0xc6, 0x05, 0x07, 0x71, 0x0f, 0x71, 0x83, 0x3d, - 0xdc, 0x9f, 0x6c, 0xfe, 0x2e, 0xd9, 0xd7, 0x1f, 0x8b, 0xee, 0xad, 0xdd, 0xdc, 0x40, 0xc5, 0x70, - 0xec, 0xd4, 0x61, 0x96, 0xc9, 0xed, 0xc3, 0xc4, 0x5b, 0xef, 0xcb, 0x4f, 0x62, 0x83, 0x97, 0x93, - 0x7d, 0x27, 0x93, 0xdf, 0x5c, 0x01, 0x73, 0x2c, 0x3a, 0xa6, 0xd5, 0x74, 0x05, 0x30, 0x45, 0xe1, - 0xee, 0x2c, 0x94, 0x6f, 0x4e, 0xfd, 0xfe, 0x78, 0x31, 0x56, 0x59, 0x78, 0x2b, 0x77, 0xb6, 0xdb, - 0xc2, 0x56, 0x01, 0x8c, 0x5f, 0x1e, 0xd4, 0x76, 0x9f, 0x60, 0xd9, 0xe5, 0xbb, 0x4f, 0xdb, 0xb5, - 0x71, 0xaa, 0xd4, 0xc2, 0xa1, 0x66, 0x4e, 0x70, 0x1c, 0x82, 0x58, 0xab, 0x7d, 0xfa, 0x89, 0xb6, - 0xfb, 0x04, 0x8b, 0xf0, 0x61, 0x37, 0xf0, 0x89, 0x13, 0x4b, 0x30, 0xad, 0xb3, 0x7d, 0xe4, 0x4c, - 0x0b, 0x88, 0xbf, 0x74, 0x26, 0x7d, 0xf7, 0x39, 0xad, 0xed, 0x20, 0xc4, 0xc1, 0xd7, 0x5f, 0x46, - 0x66, 0xb1, 0x38, 0x55, 0xc9, 0xd5, 0x58, 0xb4, 0x23, 0x7e, 0xfc, 0xf4, 0xc8, 0xe1, 0x66, 0x48, - 0x00, 0x41, 0x5f, 0x3e, 0xe0, 0xcc, 0xfe, 0x26, 0x1b, 0xcd, 0x29, 0xf5, 0x86, 0x6b, 0x37, 0x5a, - 0x62, 0x3f, 0x5a, 0x5e, 0xc1, 0x77, 0x9c, 0xaf, 0xe0, 0x32, 0x7b, 0xec, 0x33, 0x9c, 0xd0, 0xe6, - 0xca, 0xad, 0x3c, 0x81, 0xab, 0xd1, 0x38, 0x9c, 0x86, 0xa8, 0x3a, 0x44, 0x00, 0x09, 0x27, 0xb0, - 0x30, 0xca, 0xc4, 0x27, 0xe1, 0x69, 0x80, 0xf1, 0x13, 0xdd, 0x3b, 0x2a, 0xab, 0x81, 0xc2, 0x2d, - 0x06, 0x07, 0x93, 0x27, 0x8b, 0x9f, 0x1c, 0xe9, 0xde, 0xaf, 0x0d, 0x45, 0x64, 0xa3, 0x07, 0xef, - 0x47, 0x93, 0x36, 0xfb, 0x82, 0xe1, 0x26, 0xc0, 0x1d, 0x95, 0xe5, 0x21, 0xf2, 0x0a, 0x2e, 0x57, - 0xa5, 0x32, 0xc1, 0x56, 0x25, 0x2e, 0xb1, 0x0d, 0x6f, 0xc9, 0x57, 0xe0, 0xfe, 0x21, 0xdb, 0x10, - 0x16, 0x24, 0x9e, 0x75, 0xf3, 0x48, 0xbc, 0x9f, 0x43, 0xa8, 0x0e, 0xef, 0x3d, 0x8e, 0xd8, 0x98, - 0xcd, 0x5a, 0x5d, 0x32, 0x15, 0xe2, 0xef, 0x89, 0x4c, 0xc8, 0x08, 0xd9, 0x18, 0x54, 0xc2, 0x5e, - 0x9f, 0x7f, 0x3e, 0x48, 0x97, 0x59, 0x88, 0x01, 0xd1, 0x72, 0xfc, 0x70, 0x3f, 0xc8, 0x92, 0x63, - 0x03, 0x83, 0xf1, 0x9e, 0x68, 0xd1, 0x8d, 0xa1, 0x36, 0x1d, 0xaa, 0x7d, 0x7e, 0x6f, 0x58, 0x99, - 0xaf, 0x75, 0x7e, 0x01, 0x89, 0x0c, 0xe3, 0x6d, 0xad, 0x23, 0xbb, 0x3a, 0x09, 0xea, 0x30, 0x90, - 0x46, 0x11, 0xfb, 0x48, 0xca, 0x15, 0x6b, 0xa4, 0xca, 0x2a, 0x99, 0x99, 0x49, 0xc9, 0x27, 0x9c, - 0x2a, 0x75, 0x73, 0xe8, 0x10, 0x27, 0x8c, 0x02, 0x39, 0xa2, 0x37, 0xde, 0x7a, 0x45, 0x27, 0x57, - 0x71, 0xc2, 0x06, 0x72, 0x2b, 0x30, 0x7a, 0x24, 0x4f, 0x06, 0x68, 0x30, 0x8c, 0xa4, 0x7d, 0x7b, - 0xb4, 0xdd, 0xe7, 0x6c, 0xe9, 0x1d, 0xae, 0x47, 0xb6, 0x1a, 0x39, 0x84, 0xae, 0x47, 0xb6, 0xda, - 0xde, 0x93, 0x44, 0x6f, 0x6b, 0x91, 0x2b, 0x82, 0xbb, 0x9c, 0x85, 0x1e, 0x4d, 0x39, 0xb3, 0xfb, - 0x03, 0xdf, 0xfd, 0xca, 0x42, 0x21, 0x3b, 0xb0, 0x12, 0x5e, 0x1d, 0x5e, 0x50, 0x0d, 0xce, 0x00, - 0x65, 0xc5, 0x7d, 0x78, 0x40, 0x43, 0x27, 0xa2, 0x6f, 0x26, 0x19, 0xfc, 0xae, 0xe3, 0x3e, 0x13, - 0x72, 0x46, 0x3b, 0x1f, 0xf1, 0x7d, 0x16, 0x74, 0x52, 0xa1, 0x42, 0xb2, 0x75, 0x47, 0x07, 0xb4, - 0xe8, 0x7e, 0xb6, 0x25, 0xc5, 0x83, 0x37, 0x86, 0xda, 0x88, 0xa6, 0x8a, 0xd9, 0x0d, 0x42, 0xc1, - 0xb4, 0x74, 0x69, 0xbb, 0x8f, 0xdb, 0xb0, 0xe1, 0x7f, 0xc3, 0xa1, 0x7c, 0xfb, 0xde, 0xf2, 0x05, - 0x26, 0x86, 0xe2, 0x74, 0x32, 0xdd, 0x44, 0x35, 0x05, 0x68, 0x5c, 0xa8, 0xa9, 0xb6, 0x56, 0x09, - 0x85, 0x0c, 0x9f, 0x53, 0xf2, 0x53, 0xaf, 0x31, 0xc0, 0x05, 0x63, 0x1f, 0x13, 0x18, 0x66, 0xd0, - 0xb4, 0x2a, 0x59, 0x60, 0xd7, 0x49, 0x52, 0xa0, 0x78, 0xac, 0x44, 0x35, 0xc6, 0x03, 0x56, 0x12, - 0x78, 0x9e, 0xdd, 0x42, 0x1b, 0x93, 0x8c, 0x36, 0x83, 0xe8, 0xc2, 0x93, 0xe3, 0x0d, 0xef, 0xdb, - 0x3b, 0x88, 0xc4, 0xab, 0x4d, 0x3e, 0x86, 0x06, 0x9c, 0x25, 0x7c, 0xcc, 0x58, 0x11, 0x38, 0xb6, - 0x16, 0xcc, 0xa7, 0xec, 0xcc, 0xe7, 0x56, 0xb4, 0x08, 0x28, 0xbc, 0x85, 0x53, 0xa5, 0x1d, 0x56, - 0xb4, 0xb8, 0xd9, 0x86, 0x16, 0x01, 0x5f, 0x59, 0xd0, 0x62, 0x4a, 0x84, 0xb8, 0xa6, 0x42, 0x5e, - 0x55, 0x59, 0x25, 0xad, 0xa9, 0xf8, 0x61, 0x08, 0x91, 0xff, 0xa3, 0xa9, 0xba, 0x05, 0xe5, 0x60, - 0x9d, 0x2a, 0x79, 0x4d, 0xc5, 0xed, 0xba, 0xd8, 0x40, 0x7b, 0xa2, 0xef, 0x24, 0x79, 0x54, 0x4e, - 0xed, 0x88, 0x45, 0x3b, 0x62, 0x83, 0x83, 0xb1, 0xe1, 0x03, 0xf0, 0x20, 0x8f, 0x6c, 0x1f, 0xb6, - 0x29, 0x76, 0x89, 0x32, 0x00, 0xe7, 0xee, 0xd2, 0x5a, 0xba, 0xa9, 0x0d, 0xd4, 0x8d, 0xa1, 0xb6, - 0xaa, 0x40, 0x58, 0x56, 0xbc, 0x75, 0x5b, 0x12, 0xbd, 0xad, 0xa6, 0xce, 0xf5, 0x16, 0xf4, 0x7c, - 0xec, 0x0b, 0xf4, 0x35, 0x97, 0x42, 0xd1, 0x47, 0x4c, 0x93, 0xec, 0xaa, 0xbe, 0x10, 0x35, 0x2c, - 0x32, 0x38, 0x28, 0xca, 0xeb, 0x10, 0x61, 0x28, 0xab, 0xad, 0x25, 0x40, 0xb2, 0x80, 0x20, 0x95, - 0x78, 0x6b, 0x04, 0xf2, 0xdf, 0x50, 0x2e, 0x1e, 0xa8, 0xd9, 0xd8, 0x50, 0x77, 0xf2, 0xec, 0x19, - 0xad, 0x73, 0x2f, 0x6c, 0x0d, 0x25, 0x6c, 0x40, 0x5f, 0xb8, 0xd0, 0xae, 0x30, 0xfc, 0x91, 0x78, - 0x9f, 0x77, 0xad, 0x97, 0x30, 0xd7, 0x64, 0x9f, 0x2d, 0x9c, 0x6d, 0x11, 0x41, 0xab, 0x0e, 0xfe, - 0x06, 0xbe, 0x43, 0xb5, 0xd0, 0x76, 0x26, 0xd6, 0x85, 0xb5, 0x1a, 0x7f, 0xf3, 0xac, 0xd5, 0x9e, - 0xdb, 0xc8, 0x5a, 0x95, 0x84, 0x54, 0xa9, 0x11, 0xf9, 0x05, 0x17, 0x94, 0x21, 0x96, 0x13, 0x39, - 0x32, 0xbe, 0xb9, 0x00, 0x41, 0xf8, 0x60, 0x3b, 0xe0, 0x0d, 0xa7, 0xba, 0x79, 0x82, 0x55, 0x71, - 0xa1, 0x21, 0x9f, 0xa0, 0x5b, 0xed, 0xfa, 0x40, 0xef, 0xcc, 0x32, 0xbc, 0xea, 0x7f, 0x06, 0x4c, - 0x08, 0x6c, 0xcf, 0xbd, 0xc5, 0x84, 0x34, 0x73, 0xaa, 0xb4, 0x95, 0x43, 0x7f, 0x2a, 0xb8, 0x1d, - 0x83, 0xf8, 0xd6, 0x58, 0x5e, 0xdd, 0xdb, 0xf2, 0xde, 0xee, 0xce, 0x44, 0x33, 0x57, 0x05, 0x88, - 0xe1, 0xc5, 0x9a, 0x80, 0x45, 0x30, 0xbd, 0xce, 0xf9, 0x62, 0x2d, 0x4d, 0x1d, 0x79, 0x5d, 0x7f, - 0xab, 0xb2, 0xc7, 0xf4, 0x56, 0xd5, 0x58, 0x65, 0x6e, 0x2f, 0xa9, 0xd2, 0x42, 0xe3, 0xad, 0x7a, - 0x5c, 0xff, 0xc7, 0x63, 0xbc, 0x50, 0x37, 0x86, 0xda, 0xe2, 0x3d, 0x11, 0xed, 0xd4, 0x59, 0x60, - 0xb6, 0x93, 0x97, 0x9a, 0x93, 0x57, 0x77, 0x2d, 0x59, 0xbc, 0xf8, 0xfb, 0xd2, 0xf1, 0x2a, 0x97, - 0x93, 0xcb, 0xe5, 0xd7, 0x99, 0xd2, 0xb7, 0xf5, 0x56, 0xc4, 0x01, 0xcf, 0xd5, 0x2b, 0xaa, 0xf4, - 0x98, 0x15, 0x71, 0x4c, 0xa3, 0x88, 0xc8, 0x92, 0x05, 0x7a, 0x6c, 0x0a, 0x55, 0x12, 0xa5, 0x3f, - 0xd5, 0x86, 0x31, 0x31, 0x92, 0x63, 0x03, 0xbd, 0xe4, 0x60, 0xce, 0x0e, 0x52, 0xb9, 0x56, 0xfc, - 0xc2, 0x09, 0x26, 0x98, 0xb4, 0xcb, 0xad, 0xfc, 0x3f, 0x33, 0x51, 0x81, 0x73, 0xec, 0xfb, 0xe3, - 0x6a, 0xbe, 0x33, 0x86, 0xab, 0x09, 0x06, 0xc6, 0xf8, 0x6a, 0x3e, 0xa9, 0x9d, 0xdf, 0x99, 0x6a, - 0x87, 0xac, 0x7e, 0x11, 0x77, 0xfb, 0xa6, 0x92, 0x04, 0xc2, 0x29, 0x0f, 0x26, 0xed, 0x52, 0xd8, - 0xad, 0x72, 0x4a, 0xbc, 0xff, 0x25, 0x03, 0xcd, 0x96, 0x95, 0x06, 0x63, 0xe0, 0xe5, 0xc1, 0x40, - 0xc3, 0x1d, 0xb9, 0x80, 0x15, 0xd6, 0x0b, 0xb8, 0x48, 0xc7, 0x98, 0xe4, 0x02, 0xce, 0x24, 0xc4, - 0x22, 0xa6, 0xde, 0x18, 0x62, 0xf1, 0x6e, 0x5d, 0x39, 0x12, 0xaa, 0x32, 0xdd, 0x36, 0x89, 0x73, - 0xe8, 0x8b, 0x68, 0x6e, 0x3d, 0x9e, 0x7f, 0x9a, 0x07, 0xf0, 0xbf, 0x64, 0xa2, 0x87, 0xdd, 0xc7, - 0xbc, 0x3f, 0xae, 0xdb, 0xba, 0x31, 0x5c, 0x37, 0x36, 0xf3, 0x40, 0x6c, 0xb0, 0xc3, 0xb6, 0x39, - 0xf7, 0xdc, 0x45, 0x33, 0x72, 0xd7, 0xa5, 0x3b, 0x16, 0x23, 0xc9, 0x6e, 0x62, 0x70, 0x07, 0x7b, - 0xc4, 0xf4, 0x89, 0x64, 0xdf, 0x3e, 0x68, 0xc0, 0xbe, 0x7d, 0x85, 0xff, 0x98, 0x89, 0x0a, 0xca, - 0xea, 0x15, 0xaf, 0x9f, 0x98, 0xe9, 0xdd, 0x91, 0xdb, 0xf6, 0xba, 0xf5, 0xb6, 0x3d, 0xc3, 0xaa, - 0x98, 0xe0, 0xb6, 0x81, 0x5d, 0xa2, 0x76, 0xf4, 0x93, 0xf8, 0xfe, 0x4b, 0x77, 0xff, 0xce, 0xfd, - 0x40, 0x79, 0x5a, 0xc9, 0x87, 0xaa, 0x14, 0x46, 0x41, 0x21, 0xe5, 0x46, 0x8b, 0x45, 0x2c, 0x30, - 0xc6, 0x06, 0x7a, 0xd9, 0xe5, 0x1b, 0x44, 0xac, 0xdb, 0xd5, 0xb5, 0x1a, 0x0a, 0xc2, 0x86, 0xb0, - 0x06, 0x83, 0x7b, 0xb3, 0xd0, 0x43, 0x2e, 0x1f, 0xbd, 0x3f, 0x2e, 0xf4, 0x6b, 0x63, 0xb8, 0xd0, - 0x96, 0x48, 0x44, 0x30, 0x48, 0xf7, 0x0e, 0xd8, 0xbd, 0x7b, 0xe5, 0x12, 0xb7, 0x73, 0xaa, 0xd4, - 0xca, 0xa1, 0x9d, 0x9c, 0x90, 0xfa, 0x28, 0x44, 0x1f, 0x6b, 0x32, 0x6d, 0xde, 0xdd, 0xfd, 0x17, - 0x62, 0xd1, 0x8e, 0x64, 0xff, 0x69, 0xa0, 0x90, 0x62, 0x03, 0x51, 0x6d, 0x68, 0x5b, 0xbc, 0xf7, - 0x34, 0x0d, 0x89, 0xa3, 0x57, 0x01, 0xe5, 0x3b, 0xd8, 0x9c, 0xdc, 0x3e, 0x0c, 0x77, 0x9d, 0x5d, - 0x3e, 0xb9, 0xeb, 0xbd, 0x9f, 0x69, 0x03, 0x03, 0xe0, 0x9e, 0x56, 0xf8, 0x9f, 0x32, 0xd1, 0x2c, - 0xc7, 0x44, 0xd6, 0x89, 0x3f, 0xf6, 0x9d, 0x7f, 0xd3, 0x2a, 0x8e, 0x29, 0xd5, 0x19, 0x58, 0x72, - 0xe7, 0x17, 0xa5, 0xbd, 0xf3, 0x58, 0x54, 0x72, 0x35, 0xb1, 0xff, 0xdc, 0x93, 0xc5, 0x4f, 0x6a, - 0x2d, 0x3b, 0xb5, 0xd6, 0xaf, 0x6d, 0x62, 0x99, 0xfb, 0x00, 0x01, 0x6c, 0x51, 0xa5, 0xcd, 0x28, - 0x2c, 0xa4, 0xd9, 0xf7, 0x1f, 0x0d, 0x05, 0x1c, 0xc8, 0x42, 0xb3, 0x5d, 0x3f, 0xfb, 0x00, 0x09, - 0xdc, 0x41, 0x24, 0x60, 0xda, 0x92, 0xa7, 0x3b, 0x8c, 0x3b, 0x89, 0x06, 0xfe, 0x3a, 0x03, 0x52, - 0x4e, 0xb9, 0x63, 0x81, 0xbb, 0x64, 0xa0, 0xcb, 0x7f, 0x8c, 0x72, 0x02, 0x4d, 0xe1, 0xc6, 0xa6, - 0x30, 0x01, 0xae, 0xf5, 0xaa, 0xf4, 0x9e, 0x40, 0x8a, 0xc4, 0xb5, 0x60, 0xce, 0x68, 0x5a, 0x2c, - 0x75, 0xf6, 0x8f, 0x44, 0x5a, 0xb5, 0xc8, 0x90, 0xe7, 0x43, 0x5f, 0x9d, 0x32, 0x5f, 0x6b, 0x3e, - 0x37, 0xb2, 0xfd, 0x1c, 0xd4, 0x16, 0x15, 0x7b, 0xd6, 0x7b, 0x43, 0xbe, 0xda, 0xf9, 0xda, 0xf1, - 0x68, 0xbc, 0xe7, 0x2b, 0x52, 0x68, 0x26, 0xc9, 0x67, 0x4a, 0x65, 0x32, 0x7c, 0xc9, 0x0b, 0xaa, - 0xb4, 0x14, 0x3d, 0x2b, 0xcc, 0xb4, 0xef, 0x4a, 0x2a, 0x03, 0x61, 0x56, 0x23, 0x57, 0xf8, 0xbf, - 0x65, 0xa2, 0x59, 0x6e, 0xdb, 0x79, 0x7f, 0xdc, 0xb2, 0xd5, 0x16, 0xd5, 0xce, 0x23, 0x29, 0x8d, - 0x9f, 0x70, 0xd2, 0x67, 0xec, 0xb0, 0x08, 0xd7, 0x6d, 0x0a, 0x46, 0x37, 0xce, 0x74, 0x5d, 0x77, - 0xf3, 0xaa, 0x11, 0xfe, 0x28, 0xcd, 0x69, 0x88, 0x8f, 0x13, 0x75, 0xd4, 0xa7, 0x5f, 0x9a, 0xb4, - 0xb3, 0xe1, 0x96, 0xa1, 0xaf, 0xc8, 0x66, 0xb0, 0x08, 0x72, 0xa1, 0x7d, 0x13, 0xd0, 0x44, 0xcb, - 0x46, 0xf0, 0x4b, 0xc1, 0xc7, 0x97, 0xde, 0x0f, 0x7c, 0x46, 0xa4, 0x48, 0x9c, 0x4a, 0xc4, 0x4d, - 0xd1, 0xbd, 0x3e, 0xe2, 0xfb, 0x52, 0x59, 0x2e, 0x93, 0x4a, 0xfe, 0x79, 0x34, 0xce, 0xe7, 0xf7, - 0x2b, 0xc1, 0xca, 0x6a, 0x33, 0x7f, 0xdf, 0xc3, 0x82, 0x51, 0x26, 0x4e, 0x21, 0xa0, 0xb5, 0xb3, - 0x39, 0x31, 0xbc, 0x37, 0x36, 0x30, 0x58, 0x59, 0x2d, 0x1b, 0x75, 0xfc, 0xdb, 0x28, 0xcf, 0x18, - 0x10, 0x2b, 0x5c, 0x32, 0x99, 0xb4, 0xf4, 0x6c, 0x85, 0x38, 0x2f, 0xde, 0x13, 0xd5, 0x3e, 0xd9, - 0x43, 0x0e, 0xc7, 0x08, 0x7d, 0x08, 0xd7, 0x26, 0xb9, 0x7d, 0x98, 0x98, 0x52, 0x59, 0xfa, 0xf0, - 0xbf, 0x40, 0x99, 0x65, 0xd5, 0x6b, 0x31, 0xb2, 0x9d, 0x08, 0x70, 0xa3, 0xff, 0x36, 0xcc, 0x2e, - 0xcb, 0xaa, 0xd7, 0x12, 0x58, 0xd3, 0x4b, 0xf9, 0x85, 0x28, 0xb3, 0x41, 0x69, 0x20, 0x69, 0xf7, - 0x30, 0x50, 0xe8, 0xbf, 0x0d, 0xbf, 0x4b, 0x6d, 0x67, 0xb3, 0xd6, 0x7b, 0xd8, 0x68, 0xdf, 0xa0, - 0x34, 0xf0, 0x4b, 0x51, 0xe6, 0x8a, 0xea, 0xb5, 0x66, 0xaa, 0xbd, 0xc7, 0x04, 0xfd, 0xb7, 0xf8, - 0x30, 0xb4, 0x5f, 0x61, 0x0c, 0xce, 0xce, 0x70, 0xb1, 0xac, 0x37, 0xe1, 0x3b, 0x39, 0x94, 0x13, - 0xc2, 0x8a, 0x2f, 0x22, 0x51, 0xd7, 0x09, 0x6a, 0x81, 0x14, 0x89, 0x1f, 0x90, 0x43, 0xc4, 0x9a, - 0x0b, 0x63, 0x8c, 0x96, 0xf8, 0x89, 0x2b, 0xf1, 0xf6, 0x3e, 0x4b, 0x54, 0x00, 0x23, 0x42, 0xfa, - 0x8d, 0xa1, 0xd6, 0x1b, 0x43, 0x6d, 0xc4, 0x06, 0xaa, 0xd8, 0x53, 0x5e, 0xb1, 0xb2, 0x62, 0x4d, - 0x05, 0xfe, 0xb3, 0x4c, 0xae, 0x90, 0xd6, 0xe0, 0xbf, 0x96, 0x4b, 0x95, 0x2b, 0x2b, 0xca, 0x8b, - 0x3d, 0x95, 0x55, 0x95, 0x6b, 0x2a, 0xa5, 0x95, 0x95, 0x6f, 0x49, 0x6b, 0x2a, 0x57, 0x57, 0xc9, - 0xe4, 0x9b, 0xbc, 0x84, 0x72, 0x3e, 0x0e, 0xf8, 0x15, 0x2a, 0x8f, 0x2f, 0xd2, 0x59, 0x98, 0x2c, - 0xbd, 0xc8, 0xb0, 0xe1, 0xd4, 0x3a, 0xfb, 0x13, 0xfb, 0xcf, 0x69, 0x6d, 0x51, 0xfb, 0x8e, 0x93, - 0x8e, 0xfc, 0xef, 0xad, 0x28, 0x16, 0xa2, 0x70, 0xbd, 0xa5, 0x4a, 0xbf, 0xb4, 0xa2, 0xd8, 0x57, - 0x09, 0x51, 0x60, 0x24, 0x3b, 0x67, 0x31, 0x2e, 0xb6, 0x89, 0xa3, 0x23, 0xcf, 0x8f, 0x0d, 0x36, - 0x1b, 0x9a, 0x69, 0x6d, 0x58, 0xd5, 0x2e, 0x7c, 0x12, 0x8b, 0x76, 0xd0, 0xa1, 0x8a, 0xac, 0x88, - 0x76, 0x39, 0x4b, 0xe6, 0x21, 0x33, 0x1d, 0x1d, 0x43, 0xe6, 0x15, 0xd8, 0xbe, 0x4c, 0x13, 0xbc, - 0xb1, 0x64, 0xdd, 0x12, 0x94, 0xb9, 0xae, 0xba, 0x8c, 0x84, 0xe5, 0xc2, 0x50, 0xac, 0xff, 0x36, - 0x22, 0x12, 0xd0, 0xbe, 0xeb, 0xaa, 0xcb, 0x3c, 0x95, 0xe5, 0xb2, 0x5e, 0xc7, 0xbf, 0x4d, 0x8d, - 0x69, 0xf3, 0x8c, 0x98, 0xbb, 0xaf, 0x50, 0x63, 0xda, 0x67, 0xd9, 0x8e, 0x60, 0x46, 0x6b, 0x6a, - 0x9f, 0xae, 0x5c, 0xd5, 0x2e, 0xeb, 0x0f, 0x62, 0xfc, 0xf2, 0x05, 0xad, 0xe7, 0xa2, 0xbe, 0xb1, - 0xbb, 0x4f, 0x68, 0x97, 0x3f, 0x49, 0xf4, 0xb6, 0x52, 0x23, 0xdb, 0x2a, 0x94, 0xd3, 0xe8, 0x0d, - 0x85, 0x3e, 0xac, 0x23, 0xee, 0xf0, 0x10, 0x26, 0x0d, 0x8a, 0xc4, 0x22, 0x9b, 0x03, 0xbf, 0x61, - 0x59, 0x08, 0xf4, 0x27, 0x98, 0x45, 0x25, 0xcf, 0x7e, 0xa6, 0xf5, 0xef, 0x94, 0x49, 0x17, 0xfe, - 0x5d, 0x84, 0x4f, 0x15, 0x3b, 0xc6, 0x4f, 0x2c, 0xad, 0x54, 0xa5, 0xe5, 0x02, 0x39, 0x40, 0x83, - 0xf1, 0xa6, 0x07, 0x0d, 0xb9, 0x3d, 0x99, 0x03, 0x79, 0xc1, 0x43, 0xc3, 0x7d, 0x82, 0xa0, 0x1a, - 0xe8, 0xd8, 0x58, 0xb4, 0xa3, 0x4c, 0x92, 0xf1, 0xb0, 0xbc, 0x84, 0x72, 0xeb, 0x94, 0xcd, 0x3e, - 0x1d, 0x39, 0x10, 0x8f, 0xf6, 0xc7, 0x55, 0xa9, 0x50, 0xa0, 0x85, 0xe2, 0x8c, 0x32, 0xc9, 0x63, - 0x5c, 0xd1, 0x64, 0xdf, 0x77, 0xda, 0xa9, 0x5d, 0x95, 0xe5, 0x5a, 0xe7, 0x65, 0x99, 0xb6, 0xe0, - 0x7f, 0x6f, 0x22, 0x04, 0x39, 0x40, 0x43, 0xa0, 0xbf, 0xa9, 0x4a, 0x6b, 0x05, 0x4b, 0x85, 0x58, - 0x41, 0xc8, 0x8a, 0xb3, 0x6a, 0xb2, 0x55, 0xc7, 0x03, 0xab, 0xa4, 0x9a, 0x35, 0x15, 0x72, 0xb1, - 0xe7, 0x97, 0xab, 0xe5, 0xd7, 0xf5, 0x7f, 0x2b, 0xd6, 0x94, 0x95, 0x17, 0x7b, 0xa0, 0xf4, 0x3d, - 0xfc, 0x43, 0x5a, 0xb9, 0xd2, 0xb0, 0xd2, 0x8f, 0x0d, 0x44, 0xa1, 0x9d, 0x6c, 0x19, 0x94, 0xff, - 0x23, 0x9a, 0xd8, 0xe4, 0xaf, 0xa9, 0xdd, 0xa8, 0xd4, 0x35, 0xd5, 0xe3, 0x38, 0xa8, 0x53, 0xf0, - 0x46, 0xe1, 0xcf, 0x5b, 0x6b, 0xc4, 0xf2, 0xe4, 0xf9, 0xed, 0x5a, 0xf4, 0x0c, 0xdc, 0x53, 0xf3, - 0x29, 0x8e, 0x0c, 0x2d, 0x4e, 0x9e, 0x3c, 0x97, 0x38, 0x15, 0xd5, 0x3a, 0xb7, 0xc5, 0x06, 0x3a, - 0xa0, 0xd1, 0x8d, 0xa1, 0xb6, 0x25, 0x50, 0x8a, 0xa3, 0x9e, 0x9a, 0x15, 0xb2, 0x75, 0xd0, 0xc2, - 0x6b, 0x99, 0x90, 0xc6, 0xf5, 0x7e, 0x64, 0x70, 0x97, 0x5b, 0x5e, 0xdd, 0x69, 0x6e, 0xaf, 0xee, - 0xbd, 0xfe, 0xd8, 0xae, 0x51, 0xa5, 0x37, 0xd0, 0x6a, 0x21, 0xe5, 0x11, 0xdc, 0xda, 0x53, 0xfb, - 0x6f, 0x33, 0xd1, 0xc3, 0xe0, 0x78, 0x0e, 0x89, 0x19, 0x7c, 0xfe, 0x55, 0xde, 0x8f, 0x6a, 0x7c, - 0x1f, 0x2b, 0x37, 0xeb, 0xf4, 0xec, 0xe0, 0xf4, 0xdc, 0x78, 0x55, 0x2b, 0x62, 0x7c, 0x13, 0x8d, - 0x6b, 0xf0, 0xf9, 0xf5, 0x8f, 0x61, 0x18, 0x98, 0x58, 0xba, 0x4c, 0x7f, 0x5a, 0x8d, 0x32, 0xb1, - 0x28, 0x76, 0xb5, 0x2f, 0xbe, 0xff, 0x8a, 0x9f, 0x71, 0x9e, 0xf3, 0x92, 0x68, 0x36, 0x3e, 0xff, - 0x06, 0x30, 0x9f, 0x8c, 0x0d, 0xec, 0x19, 0x39, 0xd2, 0x65, 0xe4, 0x9a, 0x35, 0xba, 0xe2, 0x91, - 0x61, 0x19, 0x18, 0x44, 0xe8, 0xc8, 0x50, 0x36, 0xc6, 0x91, 0x77, 0x5b, 0x46, 0x86, 0xae, 0xfc, - 0x2b, 0x0e, 0xee, 0x74, 0x9e, 0x2a, 0x15, 0x30, 0xdc, 0x69, 0x1e, 0x70, 0xa7, 0xb1, 0x68, 0x54, - 0xdb, 0x7b, 0xd8, 0xcc, 0x6f, 0x6f, 0x32, 0xa8, 0xef, 0xaa, 0xd2, 0x5b, 0xe8, 0x4d, 0x21, 0xed, - 0xae, 0x8b, 0x02, 0xcc, 0x90, 0x6e, 0x6a, 0xbc, 0x27, 0xa2, 0x9d, 0xef, 0x04, 0x7d, 0x14, 0x49, - 0x4b, 0xd3, 0x77, 0x65, 0xe4, 0x48, 0xd7, 0xc8, 0xa7, 0xc7, 0xac, 0x7c, 0x69, 0x61, 0x77, 0x26, - 0x7a, 0x24, 0xc5, 0xd0, 0xf7, 0xc7, 0x55, 0x75, 0xb9, 0x62, 0x59, 0x77, 0xe8, 0x8a, 0xbd, 0xa7, - 0x4a, 0xef, 0xa0, 0xb7, 0x84, 0xf4, 0xfb, 0x27, 0x3e, 0x3f, 0xf6, 0xb3, 0xa1, 0x1a, 0x37, 0x58, - 0x63, 0xe1, 0x0e, 0xeb, 0xe1, 0x94, 0x2b, 0x21, 0x5f, 0x50, 0xa9, 0xbb, 0x43, 0xd7, 0xad, 0x0c, - 0xe7, 0x16, 0x31, 0x3e, 0x48, 0xae, 0xdc, 0x5c, 0x55, 0x9a, 0x23, 0xb0, 0xe5, 0xe2, 0x64, 0xdb, - 0xe5, 0x90, 0xd9, 0x5a, 0x7e, 0x19, 0x03, 0xff, 0x40, 0x0f, 0x17, 0xa6, 0x85, 0x7f, 0x48, 0x23, - 0x6d, 0x42, 0xbf, 0x11, 0x8a, 0x2f, 0xfd, 0x36, 0x88, 0xaf, 0x38, 0xf6, 0xf8, 0x78, 0xbc, 0xe7, - 0xa8, 0x69, 0xc1, 0x71, 0xe0, 0x7c, 0x31, 0xec, 0xb3, 0xd6, 0xda, 0x1e, 0xbb, 0x7a, 0x2c, 0xd9, - 0xbf, 0x15, 0x1c, 0x95, 0x63, 0x03, 0x91, 0xe4, 0xae, 0x6f, 0xe2, 0x91, 0xb3, 0x76, 0x69, 0x0d, - 0xbb, 0x88, 0xc2, 0xae, 0x4c, 0x34, 0x27, 0xd5, 0xf7, 0x1f, 0x5c, 0x92, 0xb1, 0xbd, 0x43, 0x2e, - 0x1b, 0xa8, 0x9f, 0x16, 0xbd, 0x25, 0x0b, 0x6c, 0x81, 0x4e, 0xe0, 0x04, 0xe9, 0xf1, 0xd9, 0x6f, - 0xc6, 0xc1, 0x2c, 0xb7, 0x9b, 0x01, 0x23, 0xfe, 0xe8, 0x37, 0x63, 0x25, 0xbd, 0x19, 0xd8, 0x28, - 0x07, 0x6e, 0x06, 0x04, 0x3e, 0x63, 0xca, 0xc5, 0x02, 0x58, 0x83, 0x4d, 0x2a, 0x11, 0x3f, 0x70, - 0x5e, 0x66, 0x9b, 0xf1, 0xe5, 0x8e, 0x2b, 0x32, 0x5f, 0xbf, 0x64, 0xe6, 0x15, 0xe1, 0x01, 0x74, - 0xd3, 0x5e, 0x14, 0xfe, 0x00, 0x87, 0x72, 0x1a, 0xbc, 0xfe, 0x26, 0x6f, 0x3d, 0xb1, 0x2a, 0xfb, - 0x83, 0x2a, 0x7d, 0x2c, 0x90, 0x22, 0xb1, 0x11, 0xec, 0x65, 0xd9, 0x81, 0x8a, 0x8d, 0x13, 0xb4, - 0x57, 0xe8, 0x64, 0xdd, 0xd6, 0x6e, 0xb8, 0x1f, 0x3a, 0x0c, 0x46, 0x22, 0x20, 0xaf, 0xd2, 0x49, - 0xe8, 0x0b, 0x07, 0x74, 0x6a, 0x10, 0x07, 0x9a, 0xd2, 0x51, 0x57, 0xef, 0xe9, 0x91, 0x2f, 0x70, - 0xac, 0x0a, 0x6c, 0x0d, 0x07, 0x03, 0x8e, 0xec, 0x6a, 0x4f, 0xf6, 0x1f, 0x90, 0xc9, 0x97, 0x4b, - 0xfc, 0xaa, 0xb4, 0x09, 0xf9, 0x84, 0xf4, 0x87, 0x25, 0xce, 0x75, 0x3d, 0x7d, 0xf6, 0xfe, 0xa6, - 0xba, 0xa0, 0x55, 0x98, 0x38, 0x31, 0x85, 0xaa, 0xff, 0xec, 0x7a, 0x57, 0x59, 0x50, 0xbb, 0xd7, - 0xef, 0x6a, 0xf5, 0x18, 0xe4, 0xaa, 0x6c, 0x32, 0x0e, 0x53, 0xae, 0xca, 0x38, 0x50, 0xdd, 0x2b, - 0xd2, 0xd5, 0x1f, 0xe7, 0xf6, 0x5f, 0xe3, 0xd0, 0xa3, 0x15, 0xd8, 0xe9, 0x99, 0xf6, 0x30, 0x02, - 0x11, 0xde, 0x81, 0xfb, 0x6f, 0x2c, 0x6a, 0xb4, 0x29, 0x88, 0x73, 0xc0, 0x67, 0xdb, 0x44, 0x00, - 0xd8, 0x4c, 0x31, 0xde, 0xfa, 0x39, 0x18, 0xc9, 0xd9, 0x28, 0xb1, 0xbd, 0x99, 0xc8, 0x93, 0x7a, - 0xc4, 0x07, 0xef, 0xcc, 0x28, 0x90, 0x56, 0xa3, 0x4a, 0xd5, 0xa8, 0x4a, 0x18, 0x75, 0x0b, 0x45, - 0x21, 0xfd, 0xa9, 0xb0, 0xeb, 0x2a, 0xfc, 0x5b, 0x0e, 0x79, 0xca, 0x7d, 0xa1, 0xbb, 0x06, 0x69, - 0x6b, 0x55, 0x49, 0x46, 0xd5, 0xc2, 0xa8, 0x73, 0x10, 0xe7, 0x68, 0xcd, 0x17, 0x47, 0x0e, 0xf5, - 0x8e, 0x11, 0xd4, 0xf6, 0x65, 0xa2, 0xb9, 0x69, 0x86, 0x7c, 0x00, 0x6b, 0x63, 0xc3, 0x6a, 0xa3, - 0xef, 0xa1, 0x28, 0xa4, 0x3f, 0x17, 0x0b, 0xb0, 0xfd, 0x33, 0x42, 0x53, 0xc0, 0xdd, 0x53, 0xc7, - 0xf1, 0x06, 0x74, 0xfd, 0x01, 0xe5, 0x86, 0xbd, 0xa1, 0x4d, 0x58, 0xa2, 0x4c, 0x63, 0x5d, 0xfc, - 0x5a, 0xa0, 0x85, 0xa2, 0x0c, 0xb8, 0x9e, 0x66, 0xd4, 0x01, 0x89, 0x9c, 0x91, 0xda, 0x16, 0x6f, - 0xc4, 0x8d, 0xa1, 0x36, 0xc3, 0x7b, 0x6c, 0x4d, 0xc0, 0x2c, 0x63, 0xac, 0x39, 0x97, 0x07, 0x03, - 0x0d, 0xa4, 0x22, 0xd1, 0xdb, 0x2a, 0xd3, 0xd1, 0xf9, 0x0d, 0x54, 0xbe, 0x0b, 0x67, 0xba, 0x1a, - 0x1f, 0x0c, 0x91, 0xef, 0xe6, 0x91, 0x4f, 0x63, 0xb9, 0xd1, 0xf7, 0xa5, 0x4f, 0x05, 0x97, 0xc8, - 0x79, 0x54, 0x2c, 0x5b, 0x59, 0xb5, 0x42, 0x1e, 0x47, 0x44, 0xb9, 0xf2, 0xb8, 0x9a, 0xb5, 0x65, - 0x65, 0x15, 0x35, 0x35, 0x72, 0x0e, 0x88, 0x6f, 0xe5, 0x71, 0x6b, 0x2a, 0x57, 0x55, 0xac, 0x5e, - 0xbb, 0x86, 0xca, 0x6d, 0x7f, 0x6d, 0xf3, 0x81, 0x80, 0xc4, 0xab, 0x14, 0x7a, 0x9e, 0x25, 0xea, - 0x32, 0x1c, 0x16, 0x8a, 0x8a, 0xa3, 0xe3, 0xbb, 0x4f, 0x8f, 0xec, 0x3f, 0x12, 0x3f, 0x74, 0x29, - 0x36, 0x10, 0x05, 0xc0, 0x8a, 0x77, 0x76, 0x25, 0x4e, 0x45, 0xcd, 0x68, 0x37, 0x14, 0xc2, 0x9e, - 0x46, 0xd9, 0xa1, 0xb0, 0x37, 0x18, 0x26, 0x6c, 0xf8, 0x1c, 0x55, 0x9a, 0x2d, 0x40, 0x89, 0xc8, - 0x93, 0x68, 0x66, 0x5d, 0xfd, 0xfa, 0xd9, 0x1c, 0xba, 0x34, 0x72, 0xe8, 0x1b, 0x19, 0xaa, 0xf8, - 0x85, 0x28, 0x53, 0xf1, 0xd7, 0x11, 0x3b, 0x79, 0x90, 0xa4, 0x2b, 0xfe, 0x3a, 0xa3, 0x87, 0x7e, - 0x70, 0xc7, 0x8e, 0x93, 0x1e, 0x7a, 0x05, 0xbf, 0x12, 0x4d, 0x54, 0x3e, 0x52, 0x6a, 0x9b, 0x74, - 0x38, 0x59, 0xe3, 0x6b, 0x50, 0x58, 0x99, 0xba, 0xb5, 0xc6, 0x18, 0x83, 0x04, 0xba, 0x82, 0x31, - 0xac, 0x4d, 0xf8, 0xb5, 0x68, 0x42, 0x6d, 0x53, 0x30, 0xa8, 0xf8, 0xc3, 0x35, 0x61, 0xa5, 0x91, - 0x48, 0xd8, 0x9f, 0x52, 0xa5, 0xc5, 0x02, 0x5b, 0x2e, 0xce, 0x25, 0x23, 0xf5, 0x7e, 0xa6, 0xf5, - 0x9c, 0x83, 0xf1, 0x28, 0x75, 0x46, 0xa2, 0x31, 0xb0, 0xed, 0xf9, 0x37, 0x50, 0x5e, 0x28, 0xac, - 0x34, 0xd6, 0xe8, 0x10, 0xe6, 0xaf, 0x55, 0x70, 0xaa, 0x8b, 0xf1, 0xa5, 0x0b, 0x54, 0xa9, 0x50, - 0xb0, 0x54, 0xd8, 0xa6, 0x88, 0xc7, 0xfb, 0xbe, 0x34, 0x5b, 0xe5, 0x32, 0x72, 0x39, 0xd9, 0xd2, - 0x92, 0x3f, 0xc2, 0xe9, 0xdb, 0xab, 0x34, 0x1a, 0x21, 0x6c, 0x8b, 0xdd, 0xc3, 0x75, 0x33, 0x80, - 0xbd, 0x50, 0x9f, 0x0a, 0x09, 0xe6, 0xba, 0x56, 0x95, 0x5e, 0x15, 0xa0, 0xbf, 0xf8, 0x32, 0x7c, - 0x13, 0xd2, 0x54, 0xc2, 0x37, 0x19, 0xcb, 0xff, 0xc1, 0xe4, 0x99, 0xad, 0x20, 0xa8, 0x85, 0x42, - 0x50, 0xa8, 0xea, 0xa4, 0xe9, 0xd0, 0x36, 0x6d, 0x60, 0x20, 0x7e, 0xe8, 0xd2, 0xf7, 0xa5, 0xe3, - 0xba, 0xb9, 0xac, 0x5c, 0x2e, 0x7f, 0x9a, 0x0c, 0x23, 0xf2, 0xbf, 0x71, 0x0a, 0xd4, 0x4b, 0x71, - 0x44, 0x4a, 0x53, 0xa0, 0x4e, 0x17, 0x6a, 0x5e, 0xfd, 0x9b, 0x89, 0x07, 0xf3, 0x16, 0x1b, 0x3f, - 0x02, 0x04, 0xee, 0x2f, 0xe2, 0x2f, 0x98, 0xf1, 0x23, 0xac, 0x5f, 0xc0, 0x91, 0x23, 0x0c, 0xcd, - 0xab, 0x4b, 0xfa, 0x19, 0xb3, 0x23, 0x9b, 0xa5, 0x23, 0xcf, 0x35, 0x4b, 0x07, 0xc0, 0x2e, 0x56, - 0x1d, 0xc7, 0xa2, 0x51, 0x97, 0x2c, 0x1d, 0x95, 0x08, 0xd5, 0x7b, 0x43, 0x61, 0x20, 0xc1, 0x88, - 0xf0, 0x1d, 0x6b, 0x45, 0x98, 0x62, 0xb1, 0x80, 0x98, 0x9c, 0x0f, 0xec, 0x8e, 0x7f, 0x75, 0x92, - 0xc4, 0x09, 0x05, 0x98, 0x64, 0x5a, 0xcd, 0xaa, 0x42, 0xc8, 0x3c, 0x36, 0x97, 0x38, 0x97, 0x82, - 0x35, 0x27, 0xa3, 0x83, 0x78, 0xd5, 0x3b, 0xb3, 0xd1, 0x2f, 0x1b, 0x55, 0xa9, 0x01, 0x6d, 0x12, - 0x9c, 0x68, 0xcf, 0x48, 0xa4, 0x68, 0x00, 0x03, 0x98, 0x21, 0x53, 0xb4, 0x74, 0x8d, 0xb3, 0x80, - 0xdf, 0x35, 0x0e, 0x8e, 0xda, 0x6a, 0x7f, 0x61, 0x6e, 0x22, 0x93, 0xf6, 0xfb, 0x9f, 0x38, 0xc4, - 0xb3, 0x5f, 0xbb, 0x3f, 0xde, 0xba, 0xf9, 0xa3, 0xf3, 0x04, 0x24, 0xf1, 0xde, 0x75, 0x0e, 0xe5, - 0xcb, 0x4a, 0x38, 0xb8, 0x85, 0x7d, 0x43, 0x5e, 0xa5, 0x5e, 0x64, 0x34, 0x1f, 0x1b, 0x2f, 0x90, - 0x22, 0x31, 0x17, 0xf6, 0x58, 0x27, 0x4a, 0x0a, 0x82, 0x33, 0x70, 0xc6, 0x5c, 0x97, 0x7c, 0x48, - 0xc4, 0xef, 0x6c, 0x85, 0x19, 0xd4, 0x18, 0xd6, 0xbd, 0x40, 0x95, 0x3c, 0x66, 0x50, 0xe3, 0xe9, - 0x30, 0x16, 0xf0, 0x80, 0x5a, 0xe7, 0xde, 0xe4, 0xb7, 0x97, 0x31, 0x4c, 0x3a, 0x52, 0xf1, 0x96, - 0xbc, 0xa8, 0x4a, 0xcf, 0xa3, 0xe7, 0x04, 0xc7, 0x5c, 0xc5, 0x7c, 0xe8, 0xac, 0x17, 0x19, 0xc7, - 0x4e, 0x3e, 0xce, 0xa4, 0xcf, 0xfc, 0xaf, 0x1c, 0x9a, 0xc2, 0xf4, 0xbc, 0xdf, 0x92, 0x81, 0xa5, - 0x66, 0xec, 0xf0, 0xb3, 0x04, 0x8c, 0xdd, 0x54, 0x1a, 0xf4, 0xd4, 0x0c, 0xa7, 0x49, 0x0e, 0x39, - 0xc6, 0xa1, 0xc9, 0x35, 0x9b, 0x7c, 0x8d, 0x3f, 0xce, 0x19, 0xbf, 0x66, 0x3f, 0xe3, 0xc5, 0xfa, - 0xeb, 0x45, 0xcf, 0x98, 0x60, 0x8a, 0xe4, 0xe5, 0x8b, 0xc9, 0xab, 0xbb, 0x12, 0xdd, 0x3b, 0xd2, - 0x1e, 0x33, 0xb1, 0xdc, 0xb0, 0xcf, 0x56, 0xcc, 0x87, 0xee, 0xe9, 0x4f, 0xf9, 0xff, 0xe1, 0x50, - 0xbe, 0xd9, 0xf1, 0xe7, 0x76, 0xc8, 0xc9, 0x1c, 0x34, 0x05, 0xd0, 0x2e, 0x7b, 0xcc, 0x2b, 0x6c, - 0xc7, 0xbc, 0x28, 0xc5, 0x31, 0xc3, 0xd3, 0x32, 0x2f, 0xf5, 0x29, 0x6f, 0xb4, 0x11, 0x76, 0xd5, - 0x69, 0x08, 0xbb, 0xa7, 0x83, 0xe2, 0xa8, 0x84, 0xdd, 0x38, 0x9d, 0xb0, 0x5b, 0x2b, 0x57, 0xdc, - 0x79, 0xca, 0x8e, 0xd0, 0x68, 0x59, 0xb7, 0x4c, 0xa3, 0x65, 0xdf, 0x46, 0x1a, 0x2d, 0xe7, 0x36, - 0xd1, 0x68, 0x26, 0x41, 0x35, 0xce, 0x9d, 0xa0, 0x72, 0x80, 0xc6, 0x9d, 0x23, 0xa8, 0x98, 0xc8, - 0xf6, 0xb9, 0xae, 0x91, 0xed, 0x61, 0xa9, 0x18, 0xb2, 0xad, 0x24, 0x09, 0x69, 0x72, 0xdb, 0xe9, - 0x88, 0x97, 0x54, 0xa9, 0x04, 0x2d, 0x15, 0x9c, 0xf7, 0x45, 0xcc, 0x87, 0x69, 0xa4, 0x47, 0x34, - 0xff, 0x2f, 0x87, 0x78, 0xb6, 0xeb, 0xcf, 0x0d, 0xd5, 0x6c, 0xcf, 0x40, 0x53, 0x80, 0x19, 0xfc, - 0x51, 0x50, 0x4d, 0xd8, 0x1e, 0xac, 0x1a, 0xdb, 0xd2, 0x50, 0x8f, 0xe7, 0x95, 0xac, 0x43, 0xb3, - 0x39, 0x37, 0x1d, 0x06, 0xdb, 0x2f, 0xc6, 0x86, 0xaf, 0xc6, 0x7b, 0xbe, 0x00, 0xfb, 0x48, 0xb8, - 0x36, 0x5a, 0x5f, 0x5b, 0xbc, 0x05, 0x87, 0x44, 0xbe, 0x72, 0x1c, 0x47, 0x9c, 0x3e, 0xaa, 0x35, - 0x9f, 0x4e, 0x0c, 0xb6, 0xc4, 0x7b, 0x3f, 0x65, 0x63, 0x4b, 0x97, 0x2c, 0x52, 0xa5, 0x62, 0x24, - 0x08, 0xce, 0x85, 0x89, 0x79, 0x24, 0x8f, 0x33, 0x5e, 0x01, 0x85, 0x87, 0xc2, 0x48, 0x86, 0xe1, - 0x0b, 0x7f, 0x3f, 0x41, 0xc1, 0xeb, 0x63, 0x80, 0x02, 0xac, 0xb5, 0x03, 0x28, 0x98, 0xc1, 0x86, - 0xae, 0x75, 0x00, 0xc2, 0x2e, 0x0e, 0x4d, 0x5a, 0xa1, 0x84, 0x59, 0x28, 0x58, 0x6e, 0x83, 0x82, - 0x85, 0xaa, 0x34, 0x85, 0x42, 0xc1, 0x38, 0xbd, 0xa5, 0x67, 0x2c, 0x40, 0x50, 0xb2, 0x40, 0x95, - 0x04, 0x34, 0x5f, 0xb0, 0x0d, 0x2f, 0xce, 0x00, 0xd3, 0x4d, 0x73, 0x26, 0x24, 0xac, 0xeb, 0xbf, - 0xca, 0xc0, 0x09, 0xa4, 0x7f, 0xca, 0xf7, 0x91, 0x06, 0x73, 0xb5, 0x1f, 0x43, 0x49, 0x85, 0x2a, - 0x95, 0xa2, 0x57, 0x04, 0xfb, 0x06, 0xdc, 0x6c, 0x1c, 0xd5, 0x7f, 0xc9, 0x41, 0x93, 0x57, 0xfa, - 0x42, 0x96, 0xe3, 0xac, 0x75, 0x3a, 0x11, 0x54, 0xa8, 0xd2, 0x0b, 0x2c, 0x33, 0xbc, 0xd0, 0x64, - 0x55, 0xc7, 0x16, 0x38, 0x15, 0x74, 0x51, 0x96, 0x00, 0x0f, 0x0c, 0x3f, 0x0c, 0x5b, 0x2f, 0xe2, - 0x10, 0xca, 0x26, 0x3f, 0x3c, 0xdb, 0xf6, 0x11, 0x36, 0x98, 0x22, 0x8c, 0xe8, 0x61, 0xb9, 0xe0, - 0x65, 0x26, 0x17, 0x9c, 0x69, 0x26, 0x93, 0x72, 0xe7, 0x82, 0xb1, 0xa5, 0xbf, 0x91, 0x46, 0x9a, - 0xf0, 0xc0, 0xcb, 0xcc, 0x27, 0x2b, 0x8b, 0xe9, 0xef, 0xfa, 0x64, 0xb1, 0xfd, 0x8d, 0x54, 0x2c, - 0xac, 0x14, 0x2e, 0xfb, 0xce, 0x4b, 0xe1, 0x82, 0x94, 0x58, 0xcb, 0x31, 0x8d, 0x11, 0x0d, 0x62, - 0x6d, 0x15, 0x4b, 0xac, 0xcd, 0x67, 0xc9, 0xb4, 0x62, 0x0f, 0x35, 0xa5, 0x24, 0x64, 0x9a, 0x69, - 0x3e, 0x49, 0xa8, 0xb4, 0x62, 0xcf, 0xf2, 0xd5, 0x72, 0x59, 0x05, 0x0d, 0x6e, 0x51, 0x44, 0xc9, - 0xb6, 0xb5, 0xc4, 0x86, 0xb6, 0x9a, 0xc8, 0x9d, 0xf4, 0x37, 0x96, 0xd8, 0xd0, 0x56, 0x8b, 0x8b, - 0xe3, 0xc7, 0xbb, 0x62, 0xd1, 0xa3, 0x5a, 0x4f, 0x34, 0x7e, 0xa4, 0x3f, 0x36, 0xb0, 0xc7, 0x0c, - 0x15, 0x5b, 0x59, 0x4d, 0x62, 0x4f, 0xf6, 0x5f, 0xd1, 0xa2, 0xfb, 0xa9, 0xaf, 0x37, 0x31, 0xb0, - 0xad, 0xe6, 0x7f, 0xe9, 0x16, 0x34, 0x01, 0x47, 0x71, 0xb2, 0x48, 0xcb, 0x1f, 0x83, 0x11, 0x99, - 0xe0, 0x08, 0xc9, 0xab, 0xbb, 0xe2, 0x83, 0xa7, 0x8c, 0x83, 0xc6, 0x46, 0x56, 0x16, 0x59, 0xf9, - 0x6e, 0x4e, 0x95, 0x76, 0x72, 0x68, 0x3b, 0x27, 0xd8, 0x81, 0x5e, 0x6c, 0x84, 0x29, 0xe9, 0xdb, - 0x79, 0x87, 0x82, 0x6d, 0x7e, 0x99, 0x09, 0x79, 0xd1, 0xef, 0x27, 0xfc, 0x55, 0x93, 0xde, 0xe8, - 0x0d, 0xe3, 0x2f, 0xb0, 0xa6, 0xc5, 0xf8, 0x6b, 0x8e, 0x25, 0xc4, 0x26, 0x73, 0x2c, 0x96, 0xb0, - 0x05, 0x0a, 0x42, 0xf5, 0xde, 0xb0, 0x02, 0x3b, 0x41, 0xd4, 0x8e, 0xee, 0x43, 0xeb, 0xef, 0x35, - 0x19, 0x7a, 0x1e, 0x1d, 0x5a, 0x1b, 0xde, 0xa7, 0xb5, 0xb6, 0xc7, 0x7b, 0x22, 0xf1, 0x83, 0xe7, - 0x6d, 0xf1, 0xca, 0x64, 0x66, 0x60, 0x2a, 0x4e, 0xb0, 0xef, 0xb9, 0xc8, 0x13, 0x94, 0x09, 0x34, - 0x70, 0x8a, 0x68, 0x9e, 0x83, 0xf3, 0xd0, 0x1c, 0xb8, 0xaa, 0x4c, 0x3e, 0xb3, 0xd5, 0x8d, 0x3a, - 0x8d, 0x6f, 0xe0, 0xcd, 0xdf, 0xa2, 0x29, 0xbe, 0x10, 0x96, 0xed, 0x97, 0x07, 0x3e, 0xf4, 0x83, - 0x92, 0x09, 0x1f, 0x64, 0x2e, 0x58, 0xc9, 0x3a, 0x6b, 0xc5, 0x5f, 0xe0, 0x44, 0x6a, 0x0b, 0xea, - 0x02, 0x1f, 0xfa, 0x17, 0x40, 0x88, 0xe6, 0xba, 0x62, 0x12, 0xe4, 0xb9, 0x79, 0x6b, 0xb2, 0x6f, - 0x80, 0xa8, 0x00, 0x20, 0x51, 0xa9, 0xb3, 0x3f, 0xff, 0x21, 0xca, 0x55, 0x3e, 0x6a, 0xf4, 0xfa, - 0xeb, 0x28, 0x23, 0xfe, 0xb6, 0x2a, 0xbd, 0x29, 0xd0, 0x42, 0x71, 0xa5, 0xf1, 0x17, 0x31, 0x6e, - 0x49, 0xf4, 0x1d, 0x8a, 0x5f, 0x3c, 0x80, 0xe3, 0x06, 0xb6, 0x80, 0x09, 0xe7, 0x8d, 0xa1, 0xd6, - 0xa0, 0xd7, 0x5f, 0x17, 0x68, 0x28, 0xf6, 0xd4, 0x2b, 0xde, 0x50, 0x78, 0xc1, 0x87, 0xde, 0x50, - 0x58, 0x29, 0xf6, 0x34, 0x04, 0x42, 0xe1, 0x05, 0x8d, 0x81, 0xba, 0x50, 0xb1, 0xa7, 0x31, 0xe8, - 0x0b, 0x04, 0x7d, 0xe1, 0x2d, 0x32, 0x1d, 0x97, 0xff, 0x18, 0xf1, 0x0d, 0xde, 0x8f, 0x2a, 0x1a, - 0x1a, 0xc3, 0x5b, 0x4a, 0x9b, 0xea, 0x37, 0x01, 0x82, 0x22, 0x96, 0x71, 0xaf, 0xa9, 0xd2, 0x0a, - 0xc1, 0xa5, 0x5a, 0x5c, 0xd2, 0xe0, 0xfd, 0x68, 0x81, 0xa2, 0x17, 0x2e, 0x58, 0xdf, 0x54, 0xbf, - 0x69, 0x01, 0x44, 0xbc, 0x29, 0xd6, 0xda, 0x0f, 0xc4, 0xbf, 0x3a, 0x49, 0xa2, 0x82, 0x60, 0x9b, - 0x27, 0xd3, 0x0c, 0xc2, 0x65, 0x18, 0xfe, 0x77, 0x68, 0x52, 0xc8, 0xd8, 0x87, 0x72, 0xa5, 0xde, - 0xbb, 0x85, 0x98, 0xbc, 0xd7, 0xa8, 0x52, 0xb5, 0x60, 0xab, 0x12, 0x97, 0x19, 0xc1, 0xc0, 0xb0, - 0x69, 0x4f, 0x57, 0x87, 0x76, 0xaa, 0x7b, 0xe4, 0xc0, 0x55, 0xe0, 0xd3, 0xb4, 0xa1, 0x88, 0x76, - 0x76, 0x8f, 0xd6, 0x72, 0x4a, 0xeb, 0xeb, 0x86, 0xcf, 0x53, 0xc3, 0xd6, 0x25, 0x8b, 0xb5, 0x96, - 0x9d, 0x23, 0xea, 0x71, 0xd9, 0x36, 0x1e, 0xff, 0xdf, 0x71, 0x68, 0x3a, 0x2d, 0x5a, 0xeb, 0xf7, - 0x2b, 0x4a, 0x9d, 0x52, 0xc7, 0xb0, 0x88, 0x10, 0x8d, 0x4f, 0x70, 0x6f, 0x23, 0x06, 0x98, 0xf3, - 0x6e, 0x22, 0x15, 0x0b, 0xc2, 0xbe, 0x06, 0xa5, 0x98, 0xf0, 0x7b, 0x10, 0xd4, 0xa8, 0xb7, 0x55, - 0xfb, 0xae, 0x19, 0xe6, 0xa8, 0x3f, 0xa8, 0xc4, 0xa1, 0xe8, 0x93, 0xc4, 0x60, 0x6f, 0xe2, 0xf3, - 0xe8, 0xc8, 0xa1, 0xaf, 0xb5, 0x53, 0xdd, 0xda, 0xf9, 0xbd, 0x30, 0x43, 0xad, 0xab, 0x23, 0xf9, - 0xe9, 0x97, 0xa9, 0xa6, 0xef, 0x3e, 0x0f, 0xfe, 0x3f, 0x73, 0xe8, 0x11, 0xb3, 0x26, 0xec, 0xab, - 0xf7, 0x7d, 0x8c, 0xf5, 0x56, 0x6b, 0x36, 0x06, 0x15, 0xef, 0xc6, 0x40, 0x7d, 0x1d, 0x51, 0x4a, - 0x90, 0x58, 0xa8, 0xe9, 0xdb, 0x8a, 0xdb, 0x39, 0x76, 0x59, 0x66, 0x8b, 0x05, 0xe1, 0x8d, 0x41, - 0x25, 0xa4, 0x37, 0x29, 0x86, 0x50, 0x3c, 0x04, 0x9c, 0x71, 0xc2, 0x92, 0x91, 0xc3, 0x2d, 0x5a, - 0x64, 0xc8, 0x5c, 0x1e, 0x93, 0xce, 0x4b, 0xc7, 0x91, 0xc3, 0x1d, 0xb1, 0x68, 0x07, 0xac, 0x33, - 0x71, 0xe4, 0x3b, 0xad, 0x65, 0x67, 0xbc, 0x7f, 0x3f, 0x9c, 0x14, 0xa0, 0xd5, 0x91, 0x43, 0x5f, - 0x9b, 0x49, 0x65, 0x06, 0xa2, 0xcf, 0x2c, 0x96, 0xd3, 0x4f, 0x92, 0x6f, 0xe7, 0xd0, 0x43, 0xa1, - 0x4d, 0x3e, 0xc8, 0x68, 0xf2, 0x4b, 0x5f, 0x78, 0xe3, 0xca, 0x40, 0xad, 0xb7, 0xbe, 0x26, 0x1c, - 0x08, 0xea, 0xc8, 0x73, 0x1c, 0xbe, 0xa6, 0xab, 0x55, 0x69, 0xa5, 0x90, 0xba, 0x95, 0xb8, 0x48, - 0xbb, 0x3a, 0x9c, 0x38, 0x70, 0x3a, 0xde, 0xd3, 0x1a, 0xef, 0xf9, 0x4a, 0xeb, 0x39, 0xaf, 0xf5, - 0x1e, 0xd6, 0xb6, 0x9d, 0xa3, 0x36, 0x28, 0xec, 0x84, 0x20, 0x65, 0x62, 0xea, 0xb1, 0xf8, 0x4f, - 0x38, 0x34, 0xd3, 0x52, 0x5b, 0xb3, 0x25, 0x14, 0x56, 0x1a, 0xaa, 0x03, 0x75, 0x21, 0x12, 0x1e, - 0x15, 0x07, 0x7d, 0x4a, 0xd5, 0x46, 0x5c, 0x0e, 0x73, 0xd9, 0xd4, 0xb4, 0x5e, 0x59, 0x10, 0xc2, - 0xc5, 0x9e, 0xaa, 0x1a, 0xfd, 0x99, 0x3d, 0xf6, 0x49, 0xb9, 0x57, 0x69, 0x08, 0xf8, 0x6b, 0x94, - 0x30, 0x35, 0xd6, 0xad, 0x0e, 0xd4, 0x39, 0x67, 0x09, 0x53, 0x4c, 0xf5, 0x01, 0xbe, 0x8b, 0x43, - 0xb3, 0x7d, 0x1b, 0xfc, 0x81, 0xa0, 0x42, 0xc7, 0x0b, 0x31, 0x3b, 0x4b, 0x02, 0x0d, 0xe1, 0xd4, - 0x78, 0xe9, 0xda, 0x89, 0xc5, 0x30, 0x51, 0x73, 0x52, 0x46, 0xe2, 0xbd, 0x64, 0xdf, 0xc9, 0x44, - 0xdf, 0x21, 0xdb, 0x74, 0xd2, 0x0d, 0xc5, 0x6f, 0xe5, 0xd0, 0xd4, 0xc0, 0xa6, 0x35, 0x81, 0xb0, - 0xb7, 0x7e, 0xad, 0x3f, 0xa8, 0x78, 0xeb, 0xb6, 0x94, 0x05, 0x9a, 0xfc, 0x61, 0xac, 0xb1, 0x99, - 0x08, 0xa7, 0xe7, 0x56, 0x2f, 0x3e, 0x13, 0xd8, 0xb4, 0x20, 0xac, 0x97, 0x2e, 0x68, 0x82, 0xe2, - 0x05, 0xb5, 0x7a, 0x79, 0x31, 0x20, 0x59, 0x0f, 0x29, 0xf4, 0xd0, 0xd8, 0x33, 0xf1, 0x03, 0xe7, - 0x47, 0x76, 0x75, 0xca, 0x6e, 0x63, 0xf1, 0xd7, 0x38, 0xf4, 0x50, 0x83, 0xf7, 0x23, 0xb6, 0xa2, - 0x5a, 0x09, 0xd6, 0x2a, 0xfe, 0xb0, 0x0e, 0x47, 0x13, 0xf0, 0x4c, 0xf6, 0x71, 0xaa, 0xd4, 0xc9, - 0x09, 0xa9, 0xdb, 0x89, 0x41, 0x1d, 0x15, 0x5a, 0xa7, 0xd4, 0x48, 0x6b, 0x8b, 0x49, 0x11, 0xb9, - 0x19, 0x38, 0x4c, 0x0c, 0x41, 0x63, 0x91, 0x41, 0x3a, 0x49, 0x7a, 0x2d, 0xf4, 0x3b, 0x84, 0xdb, - 0xc4, 0x7b, 0x4f, 0xc1, 0xad, 0xd2, 0x5a, 0x8e, 0x68, 0x5b, 0x7b, 0xe2, 0xbd, 0x9f, 0x52, 0x5d, - 0xb2, 0xd6, 0x77, 0x45, 0x4e, 0x3d, 0x1d, 0x5e, 0xe5, 0xd0, 0x34, 0x06, 0x53, 0xe0, 0x6a, 0x8c, - 0xd4, 0xf2, 0xf0, 0x7a, 0x7e, 0xad, 0x4a, 0x6f, 0x0b, 0xae, 0x0d, 0xc4, 0x32, 0x0b, 0x46, 0x83, - 0x95, 0x60, 0x84, 0x66, 0x59, 0x83, 0x2b, 0x5e, 0xd3, 0xda, 0x0f, 0xc4, 0x86, 0xdb, 0x13, 0x67, - 0x55, 0xd9, 0x75, 0x68, 0xfe, 0xcf, 0x38, 0x34, 0x5b, 0x1f, 0x65, 0x83, 0x4f, 0x27, 0x04, 0x0c, - 0x73, 0xa0, 0x86, 0xc0, 0x66, 0x6f, 0x3d, 0x9e, 0xdb, 0x44, 0x3c, 0x37, 0x6c, 0xfe, 0x29, 0xa4, - 0x6b, 0x28, 0xfe, 0xc6, 0x08, 0x19, 0x66, 0x98, 0x64, 0x63, 0xda, 0x59, 0xfb, 0xae, 0xd9, 0xf2, - 0x18, 0x9c, 0xdf, 0x49, 0x22, 0xbf, 0xf5, 0x7c, 0xa1, 0xf5, 0x9c, 0xd3, 0xef, 0x55, 0xd0, 0xaf, - 0x84, 0x95, 0x50, 0x6c, 0xa0, 0x37, 0x7e, 0xf1, 0x9c, 0xb6, 0xb3, 0xcd, 0x79, 0x83, 0x9e, 0x32, - 0xd0, 0x6c, 0xba, 0xcf, 0xf3, 0x0d, 0x2c, 0x3f, 0x35, 0xc9, 0x50, 0x91, 0x17, 0xb3, 0xfc, 0xd4, - 0xa3, 0x0c, 0xb3, 0xa4, 0xef, 0x8c, 0x95, 0xa9, 0xba, 0xb9, 0xcc, 0x13, 0x25, 0x26, 0x1f, 0x34, - 0xd9, 0x20, 0x09, 0xa7, 0x99, 0x7c, 0xd0, 0xf8, 0x74, 0xd9, 0xfa, 0x5f, 0x62, 0xb2, 0x49, 0xe6, - 0x1b, 0x9e, 0xd2, 0x73, 0x98, 0x5c, 0x92, 0x7c, 0xa2, 0xf5, 0x4a, 0x3c, 0x72, 0x96, 0xa4, 0x8d, - 0xc4, 0x31, 0xf2, 0x98, 0x24, 0x8f, 0xe7, 0x5c, 0xb2, 0xd2, 0x4e, 0xc1, 0x68, 0xe2, 0x8f, 0xaa, - 0xf4, 0x3b, 0x67, 0xe6, 0xd9, 0x8d, 0x6c, 0x42, 0x0b, 0x9b, 0xdd, 0x03, 0x96, 0x2f, 0xe2, 0x44, - 0x17, 0x5d, 0x1d, 0xb1, 0xa1, 0x6e, 0xad, 0xe7, 0x5c, 0xb2, 0xff, 0x34, 0xec, 0xc7, 0xc8, 0xf6, - 0x73, 0x89, 0xe1, 0xaf, 0x3d, 0x84, 0x0d, 0x62, 0xe8, 0x31, 0x4f, 0x62, 0x70, 0x47, 0x6c, 0xf0, - 0x12, 0x8b, 0x87, 0x3d, 0x29, 0x72, 0xd7, 0xfe, 0x05, 0x87, 0xa6, 0xae, 0x6f, 0x7a, 0xff, 0x7d, - 0x25, 0x28, 0x93, 0x1c, 0x93, 0xb2, 0x8e, 0x63, 0x70, 0x5a, 0xc6, 0x89, 0xa5, 0x07, 0x38, 0x55, - 0xda, 0xcb, 0x09, 0x6e, 0x2d, 0xc4, 0x8f, 0xa1, 0x70, 0x81, 0x91, 0x9b, 0x72, 0x01, 0xce, 0x2f, - 0x4b, 0x5e, 0x38, 0x62, 0x60, 0xc7, 0xbc, 0x70, 0xec, 0x35, 0x25, 0x51, 0x55, 0x99, 0xa7, 0x2e, - 0xd1, 0xb1, 0x0b, 0xee, 0x6e, 0xb2, 0xff, 0x34, 0x3c, 0x87, 0x5a, 0xcb, 0x11, 0x76, 0x28, 0xba, - 0x16, 0xcf, 0x92, 0xc5, 0x8b, 0x65, 0xb7, 0x09, 0xf1, 0xa7, 0x00, 0x23, 0xad, 0x08, 0x7a, 0x6b, - 0x95, 0xf7, 0x9b, 0xea, 0xd7, 0x90, 0xa8, 0xac, 0x3e, 0x1d, 0x7f, 0xd6, 0xe2, 0xec, 0x8f, 0x13, - 0x4b, 0xdf, 0x57, 0xa5, 0x5a, 0x21, 0x75, 0x2b, 0x71, 0xb9, 0x8e, 0x8f, 0x36, 0x90, 0xba, 0x05, - 0x61, 0xb3, 0x72, 0x41, 0x48, 0xa9, 0x2d, 0x26, 0xb4, 0x19, 0x8e, 0xc3, 0x07, 0x37, 0xc7, 0x53, - 0x1d, 0xa8, 0xf3, 0x8c, 0x44, 0x22, 0xda, 0xae, 0x68, 0xbc, 0x27, 0x42, 0x2f, 0x91, 0x9c, 0xfa, - 0x13, 0xfc, 0x0e, 0x0e, 0xe5, 0x85, 0x6a, 0xbd, 0xfe, 0x4a, 0x7f, 0x58, 0x09, 0x6e, 0xf6, 0xd6, - 0x17, 0x4c, 0xc3, 0x33, 0xfb, 0x8d, 0x2a, 0xbd, 0x2b, 0x58, 0x2a, 0xc4, 0x55, 0xfa, 0xaf, 0x05, - 0x3e, 0xf2, 0xb3, 0xd8, 0x06, 0x18, 0xf1, 0xcf, 0x22, 0xf1, 0x6f, 0xf7, 0xc0, 0xf7, 0xf4, 0xff, - 0xbb, 0xf7, 0x53, 0x5c, 0xa2, 0x93, 0x06, 0x67, 0x55, 0xcb, 0xf1, 0x2f, 0x59, 0x2c, 0x5b, 0x06, - 0xd7, 0xdf, 0xdd, 0x69, 0x0d, 0xde, 0x8f, 0xf4, 0x4b, 0x5a, 0xad, 0xc3, 0x6d, 0xc8, 0x10, 0xf1, - 0x4f, 0xc7, 0xd3, 0xf9, 0x40, 0x95, 0x36, 0x08, 0xae, 0x0d, 0xc4, 0xd5, 0xfa, 0x1e, 0xe9, 0xec, - 0xe4, 0x82, 0x46, 0xa3, 0x1c, 0x50, 0x1d, 0x6c, 0x09, 0x21, 0x5a, 0x3b, 0xbb, 0x62, 0xdf, 0x1d, - 0xfd, 0xff, 0xd9, 0x7b, 0xd7, 0xf0, 0x28, 0x8e, 0x2c, 0x51, 0xb0, 0xb3, 0x90, 0x40, 0x0a, 0x9e, - 0x4e, 0x0c, 0xc8, 0xc5, 0xab, 0x5c, 0xc6, 0xb6, 0x28, 0x0b, 0x04, 0x09, 0xc6, 0xb6, 0x6c, 0x6c, - 0xa7, 0x24, 0xa0, 0x65, 0x1e, 0x96, 0x8b, 0x47, 0xbb, 0xed, 0xee, 0xa6, 0x4b, 0x55, 0x89, 0xa8, - 0x46, 0xaa, 0xaa, 0xae, 0x2a, 0xc9, 0xc6, 0x1e, 0xcf, 0x0a, 0x5b, 0x02, 0x64, 0x04, 0x82, 0x34, - 0x4f, 0x59, 0xe6, 0xd1, 0xe6, 0x65, 0x1a, 0x24, 0x30, 0x36, 0x08, 0x49, 0x98, 0x99, 0xef, 0xce, - 0x7c, 0xbb, 0x33, 0xd3, 0xf3, 0xf2, 0xbd, 0xf3, 0xd8, 0x99, 0xef, 0xce, 0xcc, 0x5d, 0x57, 0x56, - 0x95, 0xee, 0x7e, 0x73, 0xd9, 0xd9, 0x7b, 0x77, 0xbf, 0xbb, 0xde, 0x3b, 0xb3, 0xfb, 0x65, 0x9c, - 0x88, 0xcc, 0xc8, 0xca, 0x87, 0x4a, 0x18, 0x9b, 0x47, 0xfb, 0x0f, 0xa8, 0x22, 0x4e, 0x44, 0xc6, - 0x39, 0x11, 0x71, 0xe2, 0xc4, 0x89, 0xf3, 0x60, 0x69, 0xc2, 0x72, 0x3a, 0x7d, 0x36, 0x9f, 0x59, - 0xb0, 0xc0, 0x6f, 0xf9, 0x19, 0xfe, 0x23, 0x0e, 0x4d, 0xc4, 0x6b, 0x74, 0x7d, 0x4c, 0xbd, 0xec, - 0xbf, 0x26, 0xc5, 0xa3, 0x25, 0x53, 0x87, 0x4d, 0xed, 0xfc, 0x23, 0x59, 0x5c, 0xe7, 0xcb, 0x6d, - 0x27, 0x88, 0xc0, 0x9d, 0x9b, 0x62, 0xf3, 0x36, 0xc5, 0xa3, 0x8d, 0xf3, 0xde, 0x92, 0xe2, 0x51, - 0x72, 0xe8, 0xb1, 0x27, 0xc3, 0xcd, 0xc1, 0x9d, 0xe9, 0x4f, 0x4f, 0xa4, 0xbb, 0xdb, 0x3d, 0xec, - 0x39, 0x88, 0xa7, 0xbb, 0xdd, 0x9f, 0xdb, 0xa7, 0x3a, 0xbe, 0xa9, 0x46, 0xa1, 0x58, 0xdc, 0xa4, - 0x6e, 0xc3, 0x50, 0xa8, 0x64, 0x1a, 0x26, 0xa1, 0x24, 0x8b, 0x75, 0x3e, 0x1b, 0x10, 0xe1, 0x87, - 0xcc, 0x79, 0x11, 0x52, 0x6b, 0xe6, 0x05, 0x36, 0x61, 0xd6, 0x1c, 0x0a, 0x95, 0xe9, 0x42, 0xfa, - 0xce, 0x93, 0xe9, 0x83, 0x17, 0xb4, 0x55, 0x67, 0x9e, 0x68, 0xf5, 0xd0, 0xb0, 0xf9, 0x02, 0x7f, - 0x5a, 0x15, 0xf4, 0xcc, 0x55, 0xe4, 0x8a, 0x52, 0x82, 0x87, 0x88, 0xc3, 0x23, 0xda, 0x43, 0xd9, - 0x8e, 0x92, 0xdc, 0x58, 0x40, 0x16, 0x4f, 0xf5, 0x9d, 0xd4, 0xef, 0x2d, 0x76, 0xa3, 0xb4, 0xff, - 0x08, 0xff, 0x27, 0x1c, 0x72, 0x5b, 0xd4, 0x2e, 0x0f, 0x84, 0x1b, 0x9a, 0xe2, 0x52, 0xc9, 0x43, - 0x79, 0xa4, 0x9f, 0x6d, 0x94, 0xc5, 0x5f, 0xf8, 0x1c, 0x3a, 0x11, 0x56, 0xd9, 0x20, 0xb2, 0x09, - 0xea, 0xc9, 0xce, 0x86, 0xec, 0x75, 0xca, 0xde, 0x3d, 0xf0, 0xb0, 0x6e, 0x8b, 0x8c, 0xc3, 0x97, - 0xf8, 0x77, 0x5d, 0xc8, 0xa3, 0x55, 0xaf, 0x88, 0x35, 0xe5, 0x08, 0xe1, 0xf8, 0x1a, 0x50, 0xe2, - 0xc6, 0xd4, 0xff, 0x9c, 0x93, 0xc5, 0x4b, 0x9c, 0x6f, 0x58, 0x70, 0xa1, 0x83, 0xbd, 0x58, 0xd4, - 0xc7, 0x9a, 0x46, 0x78, 0xb9, 0x28, 0x5d, 0x51, 0xbb, 0x7e, 0xee, 0x6d, 0xbc, 0x61, 0x0c, 0x3b, - 0x60, 0xfe, 0xaf, 0x38, 0x34, 0xd5, 0xc8, 0xa2, 0xab, 0x62, 0x4d, 0x70, 0xb0, 0x4c, 0xc7, 0xa8, - 0x77, 0x73, 0xb2, 0x78, 0x98, 0xf3, 0xd9, 0x00, 0x09, 0xbf, 0x6b, 0x5d, 0x3e, 0x82, 0xc3, 0x25, - 0x18, 0x6b, 0xfa, 0x06, 0xe7, 0x8b, 0xcd, 0xb8, 0x2c, 0xf0, 0x5a, 0x2d, 0x35, 0x02, 0x5e, 0x33, - 0x1c, 0xf0, 0xa2, 0x40, 0xb9, 0x78, 0xd1, 0xf2, 0x11, 0xe0, 0xd5, 0x28, 0x35, 0xde, 0x3e, 0xbc, - 0xe8, 0xf7, 0x2b, 0xd4, 0x63, 0x11, 0x05, 0x7c, 0xc3, 0x68, 0x76, 0x84, 0x99, 0x20, 0x33, 0x99, - 0xea, 0xad, 0x62, 0x1f, 0x5a, 0x9a, 0x14, 0xfd, 0x1b, 0x87, 0x66, 0xdb, 0x7e, 0xe3, 0xde, 0x50, - 0xfd, 0x3d, 0x67, 0x78, 0xba, 0x28, 0x35, 0x19, 0xef, 0x99, 0x84, 0x31, 0x82, 0x1e, 0xbc, 0x33, - 0x64, 0x9e, 0xa0, 0x3e, 0x17, 0x77, 0x93, 0xfa, 0xec, 0x0c, 0x67, 0xd2, 0x9f, 0xbd, 0xcf, 0x7d, - 0x8b, 0x0a, 0xb4, 0xaf, 0x2b, 0xcb, 0xe2, 0x3e, 0xff, 0x68, 0x00, 0xf7, 0x8f, 0x65, 0xc0, 0xfd, - 0xc5, 0x1a, 0xb8, 0x2a, 0x4f, 0x9b, 0xf4, 0x6d, 0xef, 0x71, 0x0e, 0x0a, 0xb7, 0xb5, 0xb7, 0x4f, - 0xe1, 0xf6, 0x75, 0xe5, 0x68, 0x5f, 0x41, 0x49, 0xa8, 0x94, 0xb3, 0xd4, 0xbc, 0x6d, 0xe7, 0x6c, - 0x54, 0x6f, 0x3f, 0xfb, 0x16, 0x54, 0x6f, 0x5f, 0x57, 0x16, 0xf9, 0x46, 0x97, 0xb4, 0x7c, 0x5c, - 0x58, 0xfa, 0x9c, 0x49, 0x0b, 0xf7, 0x67, 0xc3, 0x68, 0xe1, 0x0e, 0xdd, 0x55, 0x5a, 0x38, 0x16, - 0x13, 0x1b, 0x85, 0xdc, 0xff, 0x93, 0xa7, 0x42, 0xee, 0xd3, 0x7b, 0x47, 0x21, 0x07, 0x4b, 0xa9, - 0xb6, 0xf4, 0x07, 0xc3, 0x69, 0xe6, 0x3e, 0x19, 0x56, 0x33, 0xe7, 0x2c, 0xfa, 0x7e, 0x97, 0x5a, - 0xbb, 0xfe, 0x61, 0xb4, 0x76, 0xce, 0x23, 0xbd, 0xc3, 0x1a, 0xbd, 0xa3, 0x79, 0x68, 0xf4, 0x9c, - 0x11, 0x78, 0x51, 0x16, 0x97, 0x3a, 0x6b, 0xfb, 0x66, 0x39, 0x6b, 0xfb, 0x9c, 0xf5, 0x7b, 0x1d, - 0x8e, 0xfa, 0xbd, 0xd7, 0x6e, 0xb3, 0x7e, 0x8f, 0x6c, 0xcb, 0x3f, 0x98, 0x5c, 0xfa, 0x03, 0x6b, - 0x55, 0xdf, 0xdf, 0xe7, 0xa1, 0xea, 0xeb, 0xbe, 0x1b, 0x55, 0x7d, 0x94, 0x8b, 0xff, 0xc0, 0x49, - 0xe7, 0x77, 0xd4, 0x59, 0xe7, 0xf7, 0x8b, 0x6f, 0x57, 0xe7, 0xf7, 0x75, 0x65, 0xb1, 0x6f, 0x0c, - 0xe6, 0x89, 0x17, 0x8b, 0xef, 0x73, 0xfd, 0xdf, 0x7a, 0xd6, 0xd4, 0x61, 0x02, 0x75, 0xfd, 0x9a, - 0xc7, 0x9a, 0x3a, 0x78, 0xc0, 0xb6, 0x21, 0x47, 0xf9, 0xe7, 0x6c, 0xef, 0xb0, 0x8e, 0x55, 0x2b, - 0x4e, 0xa4, 0xf1, 0x72, 0x46, 0xa8, 0x56, 0x34, 0xd9, 0x65, 0x54, 0xe8, 0x56, 0x10, 0x93, 0x18, - 0xed, 0x21, 0xb5, 0x82, 0x28, 0x76, 0x30, 0xd9, 0x33, 0x68, 0x0f, 0x1f, 0x18, 0xb9, 0xf6, 0x30, - 0xaf, 0x1b, 0x24, 0x7f, 0x9f, 0xdf, 0x20, 0x6f, 0xda, 0xe8, 0x25, 0x27, 0xe7, 0xa1, 0x0d, 0x38, - 0x7a, 0x77, 0x6a, 0x2d, 0x75, 0x6e, 0x64, 0xa9, 0xbe, 0xec, 0x75, 0x54, 0x5f, 0x82, 0x92, 0xf0, - 0x97, 0xdf, 0x8d, 0xfa, 0x92, 0x15, 0xd4, 0x1c, 0x34, 0x99, 0x9d, 0xb9, 0x9a, 0x4c, 0x50, 0x1d, - 0x6e, 0xf9, 0xb6, 0x35, 0x99, 0xfa, 0xf0, 0x0a, 0x73, 0x94, 0x9a, 0xe7, 0xec, 0x94, 0x9a, 0x53, - 0xf1, 0xc8, 0x9a, 0xbf, 0x3b, 0xa5, 0xa6, 0xce, 0xd7, 0x5b, 0xc7, 0x8c, 0x40, 0xc1, 0x39, 0xed, - 0x2e, 0x52, 0x70, 0x7e, 0x62, 0xaf, 0xe0, 0x2c, 0xa1, 0xab, 0xf1, 0x3b, 0x50, 0x70, 0x1a, 0x4e, - 0x48, 0x3b, 0x65, 0xe7, 0x25, 0x47, 0x65, 0xe7, 0x43, 0x78, 0xb8, 0x89, 0xef, 0x4a, 0xd9, 0xa9, - 0xaf, 0xcf, 0x1f, 0x38, 0xe9, 0x3d, 0xff, 0xda, 0x59, 0xef, 0xe9, 0xce, 0x83, 0xd3, 0xbd, 0xf9, - 0x9d, 0xea, 0x3d, 0x59, 0xb6, 0xe0, 0xa4, 0x02, 0xfd, 0x87, 0xe1, 0xb4, 0x7f, 0xa7, 0xee, 0x6a, - 0xed, 0x9f, 0xce, 0xa7, 0xed, 0xd4, 0x80, 0xff, 0x30, 0x9c, 0x1a, 0xf0, 0xd4, 0x5d, 0xad, 0x06, - 0xb4, 0x45, 0x90, 0x0e, 0x84, 0x0f, 0xa0, 0xd1, 0x8d, 0xd1, 0x50, 0x53, 0x83, 0x54, 0x32, 0x93, - 0x30, 0xa4, 0x1c, 0x35, 0xd7, 0x6a, 0x5c, 0x8b, 0x93, 0xc2, 0xce, 0x93, 0x45, 0x9f, 0x8f, 0x80, - 0x0b, 0x1e, 0x18, 0x1e, 0x8d, 0xe0, 0x98, 0xbd, 0x7e, 0x3e, 0x73, 0x66, 0x40, 0x95, 0x70, 0x3e, - 0x3a, 0x44, 0x13, 0x89, 0x03, 0x24, 0x5f, 0x8f, 0xc6, 0xbc, 0x21, 0xd5, 0x6d, 0x8e, 0x46, 0xb7, - 0x94, 0xcc, 0xc2, 0xdf, 0x98, 0x6e, 0xe1, 0x8b, 0xae, 0x56, 0xaf, 0x8e, 0x86, 0xa4, 0xca, 0x05, - 0xaa, 0xa0, 0x48, 0x1b, 0x08, 0x5e, 0xfa, 0x15, 0x0f, 0x29, 0x01, 0x19, 0x6a, 0xa8, 0x6d, 0x77, - 0xe6, 0x3a, 0xcd, 0x32, 0x4e, 0x81, 0xf9, 0x18, 0x24, 0xe1, 0x02, 0xad, 0x1b, 0x4e, 0xc2, 0x35, - 0x1b, 0x2b, 0xd3, 0x7e, 0x28, 0x8b, 0xcb, 0x7c, 0x39, 0x55, 0xc2, 0xa2, 0xd4, 0x40, 0x1b, 0x88, - 0x76, 0x55, 0x22, 0x3c, 0xa2, 0x42, 0xa7, 0x4a, 0xe7, 0xbb, 0xe9, 0x03, 0x17, 0xa1, 0xeb, 0xb2, - 0x54, 0xdf, 0x6e, 0x42, 0x5b, 0x9c, 0x43, 0xcb, 0x9f, 0xd3, 0x09, 0x9f, 0xe1, 0xd0, 0x0c, 0xe9, - 0xcd, 0x98, 0x14, 0x09, 0x05, 0xea, 0x1a, 0x24, 0xf5, 0xca, 0x59, 0x4b, 0x34, 0x59, 0x55, 0x4d, - 0xc9, 0xe8, 0xa6, 0x4d, 0x25, 0x8f, 0x12, 0x84, 0x73, 0xb7, 0x36, 0xb3, 0xb3, 0x21, 0x91, 0x90, - 0xcf, 0xb1, 0x1f, 0x21, 0x90, 0x1a, 0x3c, 0xac, 0xb4, 0xed, 0xcc, 0xf4, 0x9f, 0x01, 0x19, 0x2c, - 0x7d, 0xe1, 0xa4, 0xba, 0x5a, 0xba, 0x5a, 0x3d, 0xb1, 0x68, 0xe8, 0xe6, 0x60, 0x87, 0xda, 0x34, - 0x1c, 0xa9, 0xf7, 0xb0, 0x69, 0xc0, 0xb4, 0xf5, 0xa0, 0xf1, 0xb0, 0xd4, 0x60, 0x57, 0xe6, 0xc3, - 0xcf, 0xd2, 0x7b, 0x4e, 0x79, 0xb6, 0x84, 0x1b, 0x1a, 0x68, 0xac, 0x44, 0xa5, 0x65, 0x70, 0xde, - 0xc2, 0x05, 0x7e, 0xc7, 0x01, 0xf0, 0x17, 0x39, 0xc4, 0x47, 0xa4, 0x37, 0x6a, 0xa3, 0xa1, 0xb5, - 0x70, 0x78, 0x80, 0x32, 0xec, 0xb1, 0x3c, 0x58, 0x57, 0x9d, 0x2c, 0xbe, 0xea, 0xb3, 0x68, 0x2c, - 0x54, 0x9a, 0xcb, 0x6e, 0x0e, 0x76, 0xa4, 0x0f, 0x5e, 0x8c, 0x45, 0x43, 0xca, 0x40, 0x7f, 0xe6, - 0xd7, 0xbb, 0x94, 0x93, 0x5d, 0xa9, 0x6b, 0x6d, 0xa9, 0x6b, 0xbb, 0x94, 0xbd, 0x7b, 0xd2, 0xed, - 0x64, 0x2e, 0xaa, 0x44, 0x3a, 0x72, 0xcf, 0x02, 0x1a, 0x5b, 0xce, 0xa2, 0x7b, 0x4d, 0xd5, 0xed, - 0xac, 0x85, 0x15, 0x66, 0xc2, 0x2a, 0x18, 0xb9, 0xaa, 0x9b, 0x3a, 0xca, 0x9c, 0x1e, 0x85, 0x66, - 0xdb, 0x7e, 0xe3, 0xde, 0x50, 0x75, 0x87, 0x6f, 0x4d, 0xd5, 0x5d, 0xf9, 0x84, 0x2c, 0x96, 0x12, - 0xf3, 0x54, 0x8f, 0xe6, 0x49, 0x63, 0x02, 0xbb, 0x4b, 0x52, 0x76, 0x79, 0x0f, 0x8d, 0x42, 0x8f, - 0x90, 0x89, 0x4a, 0xc0, 0xc8, 0xaa, 0x71, 0x54, 0xd2, 0x5a, 0x72, 0x1f, 0xa3, 0x7a, 0xf9, 0x75, - 0x66, 0x77, 0x80, 0xdb, 0x70, 0xcf, 0x3c, 0xc6, 0x31, 0x97, 0x45, 0x98, 0x54, 0xb8, 0xc9, 0xeb, - 0xb7, 0xc5, 0x04, 0x34, 0x27, 0xf6, 0x2a, 0x5a, 0x74, 0x7d, 0x60, 0xfc, 0x54, 0xad, 0x94, 0xbe, - 0x74, 0x1c, 0x0c, 0xea, 0x4b, 0x33, 0x1f, 0xf6, 0x28, 0xed, 0xbb, 0x55, 0x3e, 0x86, 0x43, 0x4d, - 0x6d, 0x6d, 0x8a, 0x24, 0xc3, 0x5f, 0xb5, 0x6c, 0x4b, 0x48, 0x0d, 0x9b, 0x72, 0x40, 0x59, 0xb1, - 0x1a, 0x83, 0x69, 0xf5, 0x73, 0xf5, 0xeb, 0x68, 0xc5, 0x9b, 0xb2, 0xd8, 0x84, 0x12, 0xbe, 0x7c, - 0x68, 0x24, 0x3c, 0x69, 0xb3, 0x6b, 0xd2, 0xdd, 0xe7, 0xd3, 0xe7, 0x4f, 0x98, 0x87, 0x0c, 0x6b, - 0xc0, 0xb8, 0x9b, 0xb4, 0x2f, 0x7b, 0xff, 0x90, 0x43, 0x73, 0x9c, 0xbf, 0x7a, 0x4f, 0xec, 0x23, - 0xef, 0xbf, 0x9f, 0x8b, 0x66, 0xac, 0xdd, 0x1a, 0x09, 0x7e, 0xff, 0xe4, 0x73, 0x2b, 0x4f, 0x3e, - 0x47, 0x9c, 0x9e, 0x7c, 0xc2, 0xea, 0x5d, 0xd3, 0xea, 0xc9, 0x67, 0xc5, 0x88, 0x9f, 0x7c, 0x9e, - 0xf5, 0x54, 0x89, 0xca, 0xb5, 0x2b, 0xba, 0xfe, 0x03, 0x57, 0x38, 0x3f, 0x04, 0x1d, 0xb0, 0x7b, - 0x08, 0x6a, 0x94, 0xc5, 0x8d, 0xa6, 0x87, 0xa0, 0xd5, 0xdf, 0xec, 0x21, 0xe8, 0xe6, 0xe0, 0x87, - 0xe9, 0x43, 0xc7, 0xd3, 0x07, 0x76, 0x82, 0x30, 0xf2, 0xfd, 0xbb, 0xd0, 0x6f, 0xc9, 0xbb, 0x50, - 0x47, 0x1e, 0x16, 0xdb, 0xd8, 0xfc, 0xd8, 0xe1, 0xed, 0x67, 0x7e, 0xfe, 0x6f, 0x3f, 0xc9, 0x78, - 0x93, 0xe3, 0xd3, 0xcf, 0x47, 0xc3, 0x1a, 0x6c, 0x07, 0x65, 0xf1, 0xe7, 0xf6, 0xcf, 0x3b, 0xcb, - 0xbe, 0xf1, 0xf3, 0x0e, 0x1e, 0xa1, 0xed, 0xeb, 0xce, 0xbe, 0xbc, 0xec, 0xb5, 0xf1, 0x63, 0x99, - 0xe3, 0x0b, 0xce, 0x3c, 0xe7, 0x17, 0x1c, 0x26, 0xa6, 0x38, 0x1e, 0xcf, 0xf7, 0x0f, 0x3a, 0xdf, - 0x3f, 0xe8, 0xe4, 0xf9, 0xa0, 0x63, 0x90, 0x24, 0xc7, 0x7f, 0x0b, 0x2f, 0x16, 0x13, 0x46, 0xfa, - 0x62, 0x91, 0xd7, 0x93, 0xc3, 0xc4, 0xfb, 0xfc, 0xc9, 0xe1, 0x2f, 0x6d, 0x9e, 0x1c, 0x26, 0x61, - 0xbc, 0xef, 0xcd, 0x47, 0x85, 0xf3, 0x8e, 0x8f, 0x0a, 0x90, 0xe6, 0x20, 0xa2, 0xb2, 0x6b, 0x87, - 0x47, 0x85, 0xaa, 0xfc, 0x1e, 0x15, 0xbe, 0x95, 0x17, 0x05, 0xfe, 0xae, 0x7d, 0x51, 0x98, 0x7c, - 0x17, 0xbe, 0x28, 0x9c, 0x04, 0x51, 0x59, 0xad, 0x58, 0x9b, 0x0c, 0xc4, 0x93, 0x4d, 0x31, 0x3c, - 0x54, 0x78, 0x3b, 0x4a, 0xca, 0xa2, 0xe4, 0xb3, 0xa8, 0x66, 0x06, 0x9a, 0x80, 0x52, 0x76, 0x98, - 0x4a, 0xe7, 0xe1, 0x54, 0x5f, 0x3f, 0xe6, 0x5d, 0x38, 0x6d, 0xff, 0x48, 0x07, 0x6a, 0xf1, 0x41, - 0xfe, 0x7f, 0xe1, 0x50, 0x09, 0x5b, 0x4c, 0x52, 0x61, 0x48, 0x8c, 0xf9, 0xf9, 0x2e, 0x4e, 0x16, - 0x7f, 0xc7, 0x67, 0x0b, 0x25, 0xfc, 0xdc, 0x38, 0xe6, 0x79, 0x09, 0x52, 0x69, 0xa6, 0x30, 0x20, - 0xa0, 0x74, 0xf6, 0x92, 0xc4, 0x1d, 0xb7, 0x82, 0x84, 0xed, 0x38, 0xee, 0x7a, 0x23, 0xf5, 0x4f, - 0x86, 0x33, 0x52, 0xbf, 0x67, 0xde, 0x70, 0x4a, 0xee, 0xc5, 0x37, 0x9c, 0x87, 0xee, 0xc7, 0x37, - 0x1c, 0xf7, 0xfd, 0xfe, 0x86, 0x33, 0xfd, 0xbe, 0x78, 0xc3, 0x61, 0x1e, 0x58, 0x66, 0x7c, 0xab, - 0x0f, 0x2c, 0xc3, 0x3e, 0x77, 0xcc, 0xbc, 0xcf, 0x9f, 0x3b, 0x66, 0xdd, 0xc5, 0xcf, 0x1d, 0xaf, - 0xca, 0xe2, 0x7a, 0xb4, 0xd6, 0xe7, 0xa8, 0x7f, 0x14, 0x66, 0x2a, 0x7b, 0x3b, 0xd2, 0x17, 0x4e, - 0x99, 0xea, 0x41, 0xd1, 0x64, 0x54, 0xcf, 0x6a, 0x0f, 0x1c, 0x27, 0x47, 0xa1, 0x99, 0x36, 0xbd, - 0xfe, 0xf6, 0x3c, 0x6f, 0x00, 0xe1, 0x32, 0x5d, 0xad, 0x77, 0xed, 0xf3, 0xc6, 0xb9, 0x51, 0x68, - 0x16, 0x1c, 0x56, 0xb6, 0xea, 0xe7, 0x1f, 0x9b, 0x5f, 0x36, 0x9e, 0x95, 0xc5, 0x12, 0xf6, 0x3e, - 0x3a, 0xd6, 0x10, 0xc5, 0x28, 0x7f, 0x27, 0xdc, 0x7f, 0xe2, 0x72, 0x03, 0x9a, 0xfd, 0x21, 0x27, - 0x8b, 0xbf, 0xcf, 0xe9, 0x21, 0xcd, 0x3e, 0xe7, 0xd8, 0x98, 0x66, 0x36, 0x64, 0xbc, 0xb5, 0x00, - 0x67, 0x4a, 0xef, 0xb5, 0x54, 0xff, 0x1e, 0x55, 0x78, 0xc2, 0x49, 0x13, 0xcd, 0xd6, 0x8f, 0x4a, - 0x4f, 0x7b, 0xf6, 0xe3, 0xb6, 0x4c, 0x57, 0xab, 0x16, 0x9c, 0x47, 0xdd, 0x7a, 0x87, 0x7b, 0x0d, - 0xa9, 0x9c, 0xaf, 0x7e, 0x0a, 0x7e, 0xb6, 0x99, 0xae, 0xd6, 0x2a, 0x11, 0x9e, 0xb2, 0x0d, 0xc1, - 0xd3, 0x5e, 0x92, 0xc5, 0x15, 0x68, 0x99, 0x6f, 0x18, 0x22, 0x0b, 0xd3, 0x6c, 0x10, 0x64, 0x77, - 0x97, 0xf7, 0x93, 0x51, 0x68, 0xb6, 0x6d, 0x3f, 0xf7, 0xc6, 0xae, 0x6a, 0xb8, 0xc5, 0x5d, 0x85, - 0xd7, 0x39, 0xec, 0xaa, 0x47, 0xd8, 0xc0, 0x6b, 0x77, 0xed, 0xc6, 0xba, 0xe6, 0x42, 0xd3, 0x57, - 0x48, 0xc9, 0x3b, 0xb1, 0xab, 0x9a, 0x4d, 0x6f, 0x86, 0x38, 0xca, 0x95, 0xfe, 0x64, 0xb8, 0xb2, - 0x4a, 0x04, 0x0c, 0x52, 0xfd, 0xfb, 0x68, 0x21, 0xce, 0xb3, 0x99, 0x1a, 0x38, 0x45, 0xd3, 0x3a, - 0xc2, 0xff, 0xe9, 0x43, 0x57, 0xca, 0x3c, 0xca, 0xc9, 0xdd, 0x99, 0xfd, 0x67, 0xe9, 0xeb, 0x44, - 0x4e, 0x3b, 0xe6, 0x29, 0x70, 0x85, 0x2c, 0x56, 0xa3, 0x4a, 0x9f, 0x13, 0xda, 0xc2, 0x23, 0x10, - 0x45, 0xc8, 0x66, 0xda, 0x48, 0xc8, 0xba, 0xff, 0x3e, 0x0a, 0xcd, 0xb0, 0xee, 0xe4, 0xb7, 0xe7, - 0xe8, 0xd0, 0x62, 0xda, 0xdd, 0xad, 0x2b, 0x9c, 0xe6, 0x09, 0x71, 0x9c, 0x29, 0x61, 0xa6, 0xcd, - 0x7c, 0xdb, 0x05, 0x90, 0x3a, 0x5b, 0x80, 0x66, 0xac, 0x0a, 0x27, 0xec, 0xf7, 0x4d, 0xc4, 0xbc, - 0x6f, 0x6a, 0x65, 0x71, 0x39, 0xbb, 0x6f, 0x9e, 0x31, 0x3f, 0x30, 0xdf, 0x7a, 0x04, 0xbe, 0xd7, - 0xcd, 0x11, 0xf8, 0x96, 0xca, 0xe2, 0x22, 0xd6, 0x2c, 0xfd, 0x31, 0xfb, 0xef, 0x0d, 0x63, 0x9c, - 0x5e, 0x93, 0x1b, 0x8c, 0xaf, 0x5c, 0x16, 0x1f, 0xd5, 0x83, 0x50, 0xb8, 0xcd, 0x22, 0x97, 0x6d, - 0x5c, 0xbe, 0x9a, 0xdc, 0xb8, 0x7c, 0xd0, 0x15, 0xd5, 0xef, 0x9a, 0xbb, 0xb2, 0x0d, 0xd1, 0x57, - 0x71, 0x92, 0x93, 0xc5, 0xe3, 0x1c, 0xfa, 0x88, 0xf3, 0x39, 0x4e, 0x85, 0xf0, 0x8e, 0xcd, 0xdc, - 0x7e, 0x47, 0x91, 0xe1, 0xfe, 0xc5, 0x85, 0x66, 0xda, 0x8c, 0xef, 0xde, 0x60, 0x13, 0xaf, 0x1b, - 0xc2, 0xc4, 0xe5, 0xcf, 0x26, 0x66, 0xca, 0xa2, 0x9b, 0xb0, 0x09, 0xde, 0x10, 0x3a, 0x8e, 0x8d, - 0x7c, 0x49, 0x32, 0xab, 0x38, 0x53, 0x68, 0xc4, 0xdb, 0xf3, 0x53, 0x97, 0x85, 0x83, 0xea, 0x5a, - 0x1c, 0xe6, 0x90, 0x6e, 0xd0, 0x17, 0xd1, 0x68, 0x89, 0x35, 0x51, 0xc0, 0x29, 0x97, 0x49, 0x91, - 0x30, 0x9d, 0x0d, 0x65, 0xa2, 0xbd, 0x77, 0xc3, 0xe5, 0xcb, 0x4f, 0x80, 0x8c, 0x0f, 0x20, 0xae, - 0x6f, 0xe1, 0x01, 0x64, 0xd4, 0x48, 0x1f, 0x40, 0x9e, 0x63, 0x4e, 0xd4, 0x02, 0x7d, 0x65, 0xe8, - 0x27, 0xea, 0x03, 0x0e, 0xe7, 0xa2, 0xb5, 0xad, 0x17, 0x25, 0xda, 0xf7, 0x27, 0xda, 0xdd, 0x23, - 0xb3, 0x65, 0x38, 0x84, 0xfc, 0x38, 0xc7, 0x36, 0x36, 0xd4, 0x5c, 0xa8, 0x25, 0xf1, 0x86, 0x73, - 0x86, 0xd2, 0x09, 0x27, 0xf1, 0x1e, 0xa7, 0x74, 0x5f, 0x54, 0x8e, 0x1d, 0xa3, 0x66, 0xab, 0x24, - 0x35, 0x77, 0x15, 0x42, 0xf0, 0xd7, 0x9a, 0x40, 0x23, 0x9d, 0x99, 0x47, 0x64, 0xd1, 0xe3, 0x63, - 0x8a, 0x05, 0x9e, 0x6d, 0x4a, 0x42, 0x96, 0x33, 0xf5, 0xfc, 0x8b, 0x68, 0x2c, 0xfc, 0x52, 0xd7, - 0x08, 0x0d, 0xf5, 0x8e, 0xe3, 0xdd, 0xb2, 0xe5, 0x74, 0x04, 0x10, 0xad, 0xd4, 0xcf, 0x56, 0x55, - 0xcc, 0x96, 0xc5, 0x19, 0xc8, 0xed, 0x63, 0x90, 0x31, 0x8e, 0xd7, 0xfb, 0x1b, 0x0e, 0x4d, 0x5d, - 0x21, 0x25, 0xab, 0x1a, 0xa2, 0x4d, 0x21, 0x00, 0xd2, 0xf6, 0xef, 0xd3, 0x68, 0x4c, 0x50, 0x2d, - 0xd6, 0x8e, 0xd7, 0x59, 0x10, 0x18, 0x09, 0xca, 0x84, 0xe2, 0x54, 0xff, 0x3e, 0xe6, 0x3c, 0x9b, - 0xe4, 0xf2, 0xd3, 0x2a, 0xfe, 0x19, 0x54, 0x1c, 0x08, 0xe2, 0x17, 0x68, 0x6d, 0xdf, 0x4e, 0xc7, - 0x22, 0xad, 0x56, 0x2a, 0x8c, 0x4d, 0xf5, 0xef, 0x53, 0x76, 0x5c, 0xc8, 0xf6, 0x6e, 0xab, 0xa9, - 0xf6, 0xeb, 0xe5, 0x34, 0xec, 0xb8, 0xcd, 0x98, 0x68, 0x84, 0x4c, 0xfc, 0x21, 0x0f, 0x20, 0x02, - 0x11, 0x32, 0xf5, 0x18, 0xc7, 0xd3, 0x4c, 0x4d, 0xef, 0x8d, 0x9d, 0xb5, 0xda, 0x70, 0x08, 0x98, - 0x2c, 0xa9, 0xf5, 0x19, 0xcc, 0x8f, 0xed, 0x3f, 0x2d, 0x8b, 0x4f, 0xa2, 0x45, 0x3e, 0x3b, 0x6a, - 0x08, 0x25, 0x76, 0x94, 0xf4, 0xfe, 0xa3, 0x0b, 0x15, 0xbd, 0x16, 0x8d, 0x80, 0x8d, 0xf2, 0x02, - 0x2d, 0xf7, 0x3f, 0xac, 0x81, 0x12, 0x59, 0x9c, 0xa2, 0x25, 0x85, 0x1f, 0xcb, 0xa4, 0x83, 0xd7, - 0x52, 0xfd, 0x2f, 0x26, 0x49, 0xe4, 0x19, 0x9a, 0xb1, 0x6b, 0x7e, 0xa2, 0xd6, 0x86, 0x2c, 0x78, - 0xc8, 0x0d, 0x5f, 0x81, 0x8a, 0xd4, 0xff, 0xf1, 0x6e, 0xc9, 0x6f, 0x9d, 0x6b, 0xf0, 0xfc, 0x73, - 0xa8, 0x58, 0xfd, 0x1b, 0x36, 0x49, 0x41, 0x5e, 0x8d, 0xf5, 0x06, 0xfc, 0xcb, 0xa8, 0x38, 0xd1, - 0x54, 0x17, 0x91, 0x92, 0x6b, 0x9a, 0x1a, 0x89, 0xd9, 0xd3, 0x42, 0x59, 0x9c, 0xef, 0xd3, 0x4b, - 0x85, 0x87, 0xb3, 0xbd, 0xa7, 0xf4, 0x61, 0xe3, 0x3f, 0x32, 0x5d, 0xad, 0xca, 0x85, 0xbd, 0x99, - 0xeb, 0xfb, 0x48, 0xec, 0x3b, 0x1d, 0xba, 0x42, 0x45, 0x19, 0x4d, 0xf7, 0x69, 0x34, 0x64, 0x50, - 0x26, 0x9b, 0xae, 0x7f, 0x34, 0x9a, 0x84, 0x27, 0x85, 0xb0, 0x4b, 0x4c, 0xe9, 0x67, 0xcc, 0xf2, - 0xec, 0xf4, 0xdc, 0x7b, 0x60, 0xaa, 0x7f, 0x1f, 0x3d, 0xd8, 0xd8, 0x13, 0xed, 0x45, 0x34, 0x96, - 0xfc, 0x60, 0xb8, 0x0d, 0x90, 0x80, 0x29, 0x17, 0xc6, 0x11, 0x03, 0x51, 0x9a, 0x1b, 0x41, 0xaf, - 0xe2, 0x5f, 0x47, 0x3c, 0xf9, 0x59, 0x2d, 0x25, 0x82, 0xf1, 0x30, 0xe6, 0xc6, 0x64, 0x22, 0x30, - 0xeb, 0xb6, 0xa8, 0x16, 0x78, 0xc2, 0x43, 0x3b, 0x3b, 0xb3, 0x37, 0x88, 0xcd, 0xbb, 0xdf, 0x02, - 0x8e, 0xaf, 0x41, 0x13, 0x48, 0xe9, 0x06, 0x29, 0x9e, 0x50, 0x3b, 0x2e, 0xd0, 0xbd, 0x1d, 0x73, - 0xaa, 0xe8, 0x20, 0x33, 0xed, 0x3b, 0xd3, 0xdd, 0xe7, 0xfd, 0x39, 0xb5, 0xfc, 0x8b, 0x1a, 0x91, - 0x5e, 0x5e, 0x4b, 0xa2, 0x46, 0x7b, 0xd9, 0xc4, 0x53, 0x2f, 0xaf, 0xd5, 0x46, 0x85, 0x33, 0xaf, - 0x66, 0x2e, 0x0f, 0x64, 0x06, 0x8e, 0xf9, 0xf5, 0x6a, 0x86, 0x56, 0x38, 0xf2, 0xf4, 0x68, 0x33, - 0xad, 0x70, 0xf0, 0x69, 0x3a, 0x0c, 0x6c, 0x00, 0xeb, 0x67, 0xab, 0xf8, 0xdd, 0x1c, 0x1a, 0x4f, - 0x7e, 0xc3, 0xd9, 0x4d, 0xa2, 0x39, 0xd7, 0xcb, 0x62, 0xc8, 0x67, 0xac, 0x11, 0x88, 0x6c, 0x42, - 0x02, 0x49, 0xfb, 0x9b, 0x22, 0x91, 0x70, 0xa4, 0xde, 0x93, 0xbd, 0xb1, 0x37, 0x7b, 0xa2, 0x23, - 0xd5, 0x77, 0xc1, 0x83, 0x83, 0x9c, 0xa8, 0x45, 0x24, 0x37, 0x53, 0xdf, 0x05, 0x4f, 0x4d, 0x08, - 0x87, 0x66, 0x1b, 0x3a, 0xf4, 0x69, 0xe6, 0x7a, 0x8f, 0x5a, 0x20, 0xd6, 0x45, 0xa2, 0xf1, 0xc6, - 0x40, 0x83, 0x07, 0xf2, 0x47, 0xcc, 0xf5, 0x1b, 0xbf, 0xc1, 0x87, 0x51, 0x51, 0x43, 0x34, 0x08, - 0x46, 0x4b, 0x10, 0xfb, 0x79, 0xb5, 0x2c, 0xbe, 0xe4, 0xd3, 0x0a, 0x85, 0xe7, 0x55, 0x5e, 0xcb, - 0x30, 0xfd, 0xd2, 0xfa, 0x2d, 0x12, 0x18, 0xfd, 0xaa, 0xcb, 0xf9, 0xd8, 0xb1, 0x4c, 0xff, 0x19, - 0x65, 0xe7, 0xaf, 0x15, 0xb9, 0x43, 0x5b, 0xa7, 0x50, 0x02, 0x63, 0x9f, 0xeb, 0xd7, 0x7a, 0xe2, - 0x5f, 0x45, 0xe3, 0xc8, 0xb7, 0x57, 0x49, 0xcd, 0x52, 0x03, 0xb6, 0x91, 0x2a, 0xae, 0x5c, 0x2c, - 0x8b, 0x0b, 0x7d, 0x86, 0x0a, 0xe1, 0x61, 0x82, 0x37, 0xee, 0xa7, 0x14, 0xf6, 0xe1, 0x57, 0x2d, - 0xdb, 0xd4, 0x5d, 0x07, 0x65, 0x73, 0xfd, 0x86, 0x06, 0x15, 0xaa, 0x70, 0x88, 0x1e, 0xf1, 0x99, - 0xb6, 0x85, 0x30, 0x51, 0x5b, 0xf3, 0x64, 0xf3, 0x1c, 0x27, 0xd2, 0x3e, 0xc3, 0xd5, 0x08, 0xfc, - 0x37, 0x3f, 0xb8, 0x9e, 0xd6, 0x0e, 0x7a, 0x8d, 0x7b, 0xd9, 0x1c, 0xf4, 0xb4, 0x29, 0x3d, 0xef, - 0x5f, 0x64, 0x8f, 0x3c, 0x26, 0x2d, 0xb7, 0xcd, 0x91, 0x47, 0x9b, 0x33, 0x27, 0x5f, 0x8d, 0x2c, - 0x2e, 0x47, 0xd5, 0x3e, 0x67, 0xdc, 0x84, 0x47, 0x18, 0xb6, 0x0d, 0xe3, 0xa1, 0x56, 0xdf, 0xcc, - 0x29, 0x98, 0x76, 0xa1, 0x59, 0x76, 0xdd, 0xdc, 0x1b, 0x87, 0xe1, 0x46, 0xc3, 0x61, 0xe8, 0x31, - 0x8b, 0x99, 0xc6, 0x55, 0x62, 0x1b, 0x44, 0x9b, 0x25, 0x8e, 0xe1, 0x78, 0xac, 0x96, 0x45, 0x11, - 0xbd, 0xe0, 0x1b, 0x86, 0x4c, 0xc2, 0x4c, 0x47, 0x72, 0x7b, 0xff, 0xcf, 0x51, 0xc8, 0x6d, 0x3c, - 0x60, 0x55, 0xa6, 0x7f, 0x1b, 0x24, 0xa8, 0x85, 0x39, 0x0b, 0x31, 0x0f, 0x89, 0xf3, 0x19, 0xf3, - 0x0a, 0xcc, 0x53, 0xe8, 0xe2, 0x13, 0xa8, 0xb0, 0x39, 0x16, 0xac, 0xa1, 0x09, 0x7f, 0x7e, 0x2a, - 0x8b, 0xaf, 0xf9, 0xa0, 0x44, 0x78, 0x05, 0x62, 0xc4, 0xa7, 0x8f, 0xed, 0x4d, 0xf5, 0x9d, 0x6b, - 0x8e, 0x05, 0x73, 0xce, 0xbd, 0xf9, 0x9e, 0xec, 0x2e, 0xa2, 0x29, 0x2c, 0xc3, 0xf7, 0x73, 0xfc, - 0xa2, 0x86, 0x67, 0x54, 0x67, 0x26, 0x39, 0x47, 0x25, 0xf4, 0xcc, 0x6f, 0xc1, 0xd9, 0x23, 0x93, - 0x34, 0xf8, 0xff, 0x7a, 0x59, 0xf4, 0xfb, 0xa0, 0x44, 0xa8, 0xd1, 0xdb, 0x02, 0xe3, 0x14, 0x37, - 0x88, 0x35, 0xab, 0xc4, 0xca, 0x55, 0xcb, 0xa0, 0xa2, 0x7c, 0xfd, 0x1a, 0xad, 0x24, 0xd5, 0xb7, - 0x1b, 0x0a, 0xe7, 0xd2, 0x87, 0x2e, 0xf8, 0x7c, 0xba, 0xbd, 0x25, 0xdd, 0xdd, 0xee, 0x87, 0x1e, - 0xa9, 0xf2, 0xdd, 0x61, 0xb2, 0x84, 0xc7, 0x2d, 0x04, 0x22, 0xed, 0xcc, 0x67, 0x77, 0xd7, 0x5f, - 0x80, 0x42, 0xd7, 0xdc, 0xcf, 0xbd, 0x96, 0xdd, 0x44, 0xdd, 0x5a, 0x25, 0xb9, 0x5b, 0x8b, 0x4a, - 0x2d, 0xf9, 0x49, 0x99, 0x24, 0xad, 0x86, 0x13, 0x3d, 0x84, 0x87, 0x87, 0x25, 0xac, 0xf7, 0x54, - 0x01, 0x1a, 0xf7, 0x32, 0xce, 0x37, 0x1e, 0x8e, 0x46, 0x56, 0x45, 0xeb, 0xf9, 0x2a, 0x34, 0x8e, - 0x1a, 0xc9, 0x31, 0x69, 0x5a, 0xd5, 0xdb, 0x8c, 0xcf, 0x50, 0x21, 0x8c, 0x83, 0xa7, 0x71, 0x72, - 0x4e, 0x1b, 0xea, 0xf8, 0x67, 0xd4, 0x3b, 0x18, 0xfc, 0xd6, 0xee, 0x21, 0x98, 0x40, 0x4c, 0xb1, - 0x50, 0x04, 0x1d, 0xd4, 0x54, 0xfb, 0x99, 0x52, 0x7e, 0x91, 0x96, 0xa2, 0x85, 0xd9, 0x49, 0x34, - 0x45, 0xcb, 0x04, 0x9a, 0xa8, 0x27, 0xdb, 0x73, 0x51, 0xb9, 0x7e, 0x40, 0x4b, 0xca, 0xc3, 0x4c, - 0x64, 0x81, 0xd5, 0x44, 0x2a, 0x3d, 0x27, 0xb2, 0x3d, 0x27, 0xd2, 0x87, 0x4e, 0x29, 0x37, 0x0e, - 0xe5, 0x4e, 0xe4, 0x7c, 0x34, 0x3a, 0x1a, 0x5b, 0x9f, 0x90, 0xe2, 0x64, 0x3b, 0x4c, 0x95, 0xc5, - 0xc9, 0x3e, 0x52, 0x24, 0x14, 0x6b, 0x89, 0xea, 0xfd, 0xa4, 0x88, 0x5f, 0x8a, 0x50, 0x10, 0x72, - 0x2e, 0xd2, 0x94, 0xa8, 0xc5, 0x30, 0x63, 0x4c, 0xb1, 0x30, 0x0e, 0xa4, 0x0a, 0x9a, 0x75, 0x52, - 0xaf, 0xe1, 0x97, 0xb1, 0xc2, 0x26, 0x88, 0x2f, 0x8f, 0xcb, 0xe2, 0x1c, 0x56, 0xd8, 0x9c, 0x06, - 0x1f, 0x35, 0x69, 0x54, 0x58, 0xc1, 0x73, 0x19, 0xab, 0x13, 0x2d, 0x62, 0xba, 0xd1, 0x75, 0xa2, - 0xa6, 0x6e, 0x48, 0xe4, 0x0e, 0x46, 0xfb, 0x59, 0xa1, 0xb6, 0x41, 0x5e, 0x9f, 0x61, 0x09, 0x08, - 0x3c, 0x34, 0x04, 0x72, 0x01, 0xe9, 0xbc, 0x17, 0x5d, 0x68, 0xd2, 0xba, 0x40, 0x62, 0x8b, 0x61, - 0xad, 0x78, 0xad, 0xd6, 0x4a, 0xce, 0x52, 0x98, 0x65, 0x5e, 0x0a, 0x86, 0xf9, 0x9e, 0x6a, 0x9c, - 0x6f, 0x6d, 0x4a, 0x4b, 0x72, 0xa6, 0x54, 0x9f, 0xb0, 0xa9, 0xc6, 0x09, 0xd3, 0x26, 0x66, 0x96, - 0x79, 0x62, 0x0c, 0x94, 0x9f, 0x61, 0xa2, 0x3c, 0x4b, 0xd0, 0x19, 0x26, 0x82, 0xb2, 0x5a, 0xe2, - 0xa9, 0x5a, 0xce, 0x92, 0x62, 0xf8, 0x26, 0xc9, 0x2b, 0xe2, 0x66, 0x52, 0xa9, 0xe0, 0x6c, 0xac, - 0x7a, 0x9e, 0x13, 0xef, 0x89, 0x31, 0xa0, 0x47, 0xc7, 0xdb, 0xb3, 0x26, 0x92, 0x48, 0x06, 0x22, - 0x40, 0x93, 0x6f, 0x7e, 0x48, 0x2d, 0xce, 0x39, 0xa4, 0x70, 0xa2, 0x38, 0x7a, 0x48, 0x4d, 0xcc, - 0x11, 0x3a, 0x6f, 0xc7, 0x39, 0x55, 0x4b, 0xae, 0x96, 0x05, 0x34, 0x1f, 0xac, 0xe0, 0xc3, 0x05, - 0x82, 0x4f, 0x63, 0x28, 0xa0, 0x36, 0xf6, 0x04, 0x62, 0xf3, 0xea, 0x9b, 0x02, 0x91, 0xfa, 0xb7, - 0x36, 0x47, 0x9b, 0xe6, 0x2d, 0x2c, 0xf3, 0x34, 0x25, 0xe6, 0xbd, 0x21, 0x25, 0x92, 0x0b, 0xe7, - 0x05, 0xa8, 0xf2, 0x1d, 0xae, 0x9d, 0xd5, 0x08, 0x45, 0xa2, 0x21, 0x69, 0x79, 0xa0, 0x31, 0xdc, - 0xb0, 0x95, 0x6c, 0x3d, 0x9c, 0xc7, 0x86, 0x29, 0x16, 0xc6, 0xa5, 0xbb, 0xfb, 0x95, 0xa3, 0xbb, - 0x32, 0x97, 0x07, 0x94, 0x9d, 0x87, 0x68, 0x7b, 0x06, 0x80, 0x7f, 0x0c, 0x8d, 0x0a, 0xc6, 0x9a, - 0x88, 0x6b, 0xc9, 0x83, 0xb2, 0xf8, 0x80, 0x4f, 0xfd, 0x2d, 0xa0, 0xaa, 0xda, 0xf5, 0x9e, 0xf4, - 0xf1, 0xbe, 0xf4, 0x81, 0x8b, 0x7e, 0xb5, 0x80, 0x5f, 0x8a, 0x46, 0x37, 0x4a, 0x8d, 0xd1, 0xf8, - 0x56, 0x3c, 0xf1, 0xe3, 0x2b, 0x1f, 0x95, 0x45, 0xaf, 0x8f, 0x14, 0x09, 0x25, 0xca, 0xf6, 0x36, - 0xe5, 0xc2, 0x61, 0xe5, 0xe4, 0x19, 0xe5, 0x62, 0xa7, 0x66, 0x8a, 0xe5, 0x59, 0x51, 0xe9, 0x27, - 0x10, 0xfc, 0x06, 0x54, 0x58, 0x17, 0x7e, 0x4b, 0xdb, 0x69, 0x38, 0xb8, 0x14, 0x94, 0x08, 0x8b, - 0x53, 0x7d, 0x5d, 0x98, 0x25, 0x95, 0x79, 0x20, 0x01, 0x5d, 0xfa, 0x70, 0x2f, 0xb0, 0x5d, 0xa8, - 0xc8, 0x9c, 0xd9, 0x96, 0xee, 0x6e, 0xcf, 0xee, 0x38, 0xa7, 0x0c, 0xf4, 0x6b, 0x5e, 0x75, 0x7e, - 0x68, 0xcc, 0xbf, 0xc2, 0x28, 0x35, 0x8b, 0xf5, 0xe4, 0x31, 0xba, 0x52, 0xf3, 0x31, 0xfa, 0x97, - 0xd6, 0x94, 0xd8, 0xa3, 0x1e, 0xbc, 0x56, 0x8a, 0x1d, 0x02, 0xcb, 0x13, 0x52, 0xc3, 0x26, 0xc6, - 0x19, 0x90, 0xdf, 0xc3, 0xe5, 0x6c, 0x4a, 0x48, 0x12, 0xfc, 0x0b, 0x59, 0x7c, 0x39, 0x87, 0x81, - 0xbf, 0xa0, 0x5c, 0xff, 0x80, 0x36, 0x4b, 0xf5, 0xf5, 0xab, 0x1d, 0xe1, 0xb7, 0x46, 0x16, 0x88, - 0xe5, 0xf1, 0xa5, 0xd1, 0x48, 0x43, 0x38, 0x22, 0x95, 0x47, 0x37, 0x6d, 0x52, 0xff, 0x9f, 0xfb, - 0x75, 0xe5, 0x94, 0xf8, 0x64, 0xff, 0x0f, 0xfc, 0xa3, 0xa1, 0xdc, 0x3f, 0x86, 0x54, 0x18, 0x19, - 0x40, 0x45, 0x17, 0x27, 0x8b, 0x07, 0x39, 0xf4, 0x01, 0xe7, 0x9b, 0xa6, 0xee, 0x06, 0x8b, 0x8d, - 0x20, 0xbc, 0x09, 0x2a, 0x70, 0x98, 0x6c, 0x38, 0x98, 0xbe, 0xa3, 0x07, 0x8c, 0xbf, 0x61, 0xaf, - 0x34, 0xc6, 0xa1, 0xdd, 0x1b, 0x32, 0xc5, 0xcb, 0x06, 0x99, 0x62, 0x46, 0xae, 0x4c, 0xc1, 0xa2, - 0x94, 0x9f, 0x5c, 0xb1, 0x5c, 0x16, 0xab, 0x90, 0xe8, 0x7b, 0x50, 0xa5, 0xca, 0x9a, 0x68, 0xc8, - 0x40, 0x0c, 0xa1, 0xc4, 0x3c, 0x51, 0x76, 0xcf, 0x14, 0xff, 0x56, 0x84, 0xc6, 0xb1, 0x5f, 0xe7, - 0x9f, 0x42, 0x45, 0x11, 0xd2, 0x1f, 0xab, 0x64, 0xd1, 0x0a, 0x61, 0xb3, 0x1f, 0x39, 0x4b, 0x04, - 0x0a, 0xad, 0x5c, 0x6d, 0x98, 0xdc, 0x1a, 0x93, 0x18, 0x05, 0x0b, 0x34, 0xa4, 0x85, 0x94, 0x4b, - 0x10, 0xed, 0x8a, 0x56, 0xae, 0x9e, 0xd4, 0x0c, 0x8b, 0x19, 0xc5, 0x9c, 0xd4, 0x76, 0x2c, 0xc6, - 0xc0, 0x5b, 0x1e, 0x05, 0xde, 0x02, 0xee, 0x82, 0x93, 0x65, 0x71, 0x12, 0xf0, 0x96, 0xe2, 0x60, - 0xac, 0xc9, 0x9a, 0xb5, 0x14, 0xda, 0xb3, 0x96, 0x9e, 0x6b, 0x43, 0x3b, 0xac, 0x59, 0xcb, 0xa3, - 0x68, 0x54, 0xbd, 0xc6, 0xc1, 0xe0, 0x2b, 0xf5, 0xea, 0x57, 0xea, 0xf5, 0xaf, 0xd4, 0xc7, 0x9a, - 0xf8, 0x84, 0x76, 0x00, 0x8d, 0xd1, 0xb3, 0xe7, 0xd0, 0xa4, 0x59, 0x6b, 0x08, 0x0e, 0x58, 0x64, - 0xbf, 0x39, 0xd8, 0xb1, 0x76, 0xd9, 0xaa, 0x55, 0x37, 0x07, 0xbb, 0xb2, 0x27, 0xce, 0x66, 0x4e, - 0xf6, 0x2b, 0x3d, 0x47, 0x53, 0x5f, 0xec, 0x52, 0x3a, 0x7b, 0xb3, 0x9f, 0x5d, 0x48, 0x5d, 0xbb, - 0xa8, 0x56, 0xbf, 0xbc, 0xaa, 0x7a, 0xe3, 0xcb, 0xeb, 0xd7, 0xe5, 0x82, 0x5c, 0xfd, 0x54, 0xd9, - 0xdf, 0x93, 0xb9, 0xde, 0xaa, 0x9d, 0x6e, 0x35, 0xa8, 0xb8, 0x29, 0x12, 0x4e, 0xd6, 0xc6, 0xc3, - 0x38, 0xb1, 0x3a, 0x57, 0xea, 0x02, 0x95, 0x94, 0x5e, 0x2a, 0x4c, 0x87, 0xb6, 0xa9, 0x81, 0xab, - 0xe9, 0xe3, 0x83, 0x1a, 0x82, 0x37, 0x07, 0xbb, 0x94, 0xb6, 0xf7, 0xfc, 0x3a, 0x1c, 0xbf, 0x18, - 0x15, 0xaa, 0x6c, 0x1f, 0x52, 0xaa, 0xd3, 0x8c, 0xf5, 0xb8, 0x44, 0xe0, 0x41, 0x23, 0x82, 0xb3, - 0xef, 0x92, 0xb3, 0xc4, 0x0f, 0x55, 0xfc, 0x2f, 0x19, 0xfe, 0x88, 0xf4, 0xcb, 0x8a, 0xce, 0x1f, - 0x97, 0x2b, 0xbd, 0xd7, 0xd2, 0x7b, 0x4e, 0xe9, 0xdc, 0xb1, 0x7b, 0xb7, 0xca, 0x73, 0xbb, 0x5a, - 0x75, 0x9b, 0x8a, 0x1c, 0xae, 0x0c, 0xfc, 0x53, 0xfb, 0x18, 0xb4, 0x64, 0xf8, 0x67, 0x3d, 0x9a, - 0x40, 0xd9, 0x57, 0x6d, 0x34, 0xda, 0xa0, 0xe5, 0x40, 0x7f, 0x41, 0x16, 0x9f, 0xf3, 0xe5, 0x54, - 0x09, 0x3e, 0xe0, 0xeb, 0x8a, 0x7c, 0x56, 0xdd, 0x15, 0x97, 0x8e, 0xd7, 0x54, 0x97, 0xb1, 0x59, - 0x48, 0x95, 0x8e, 0x6b, 0x43, 0x6d, 0xbb, 0xc9, 0x27, 0x72, 0xda, 0xf2, 0xc7, 0x38, 0x84, 0xc0, - 0xbb, 0xae, 0x3a, 0x9c, 0xd8, 0x82, 0x5d, 0x9f, 0x2c, 0x2e, 0x05, 0xd5, 0x81, 0x64, 0x40, 0xad, - 0x87, 0x58, 0xe5, 0x4c, 0x03, 0x61, 0x9d, 0xb6, 0x70, 0x33, 0x03, 0xc7, 0x32, 0x1f, 0x1e, 0xa6, - 0x98, 0xc2, 0xa7, 0x73, 0x0e, 0x9c, 0xf9, 0x9e, 0xd4, 0x40, 0x5b, 0x6a, 0xa0, 0xcd, 0x8a, 0xdf, - 0x83, 0x2d, 0x95, 0xd2, 0x76, 0x39, 0x7d, 0xf9, 0xac, 0x9f, 0xf9, 0x02, 0xdf, 0xcd, 0xa1, 0xe2, - 0x10, 0xf9, 0x7e, 0xa2, 0x64, 0xbc, 0xf5, 0xad, 0x45, 0x1b, 0x20, 0x0e, 0x19, 0xa9, 0xc3, 0xd3, - 0xf1, 0xa5, 0x0f, 0x5c, 0x4c, 0xef, 0xee, 0xb9, 0x6d, 0xe3, 0xd3, 0x3f, 0x50, 0xa1, 0x6e, 0x65, - 0x54, 0xe2, 0x2b, 0x5a, 0x63, 0xc9, 0x40, 0xbc, 0x4a, 0x21, 0x7a, 0x78, 0x85, 0x94, 0x5c, 0x1d, - 0xc0, 0x0a, 0xbb, 0xa6, 0xfa, 0x7a, 0x29, 0x91, 0x94, 0x42, 0xab, 0x03, 0xc1, 0xcd, 0xe1, 0xdb, - 0xa2, 0x28, 0x78, 0x36, 0x47, 0x06, 0x7b, 0xc4, 0x49, 0x06, 0xcb, 0x55, 0x5a, 0x9d, 0xe6, 0x50, - 0x61, 0x03, 0x56, 0xe4, 0x01, 0x5b, 0xea, 0xe4, 0x64, 0xb1, 0xd1, 0x57, 0x14, 0x6c, 0x48, 0x80, - 0x16, 0x2f, 0x40, 0xb4, 0x78, 0x17, 0xda, 0x33, 0xfd, 0x67, 0x4a, 0x57, 0x2d, 0x5c, 0xb0, 0x00, - 0x76, 0xea, 0x82, 0x79, 0x0b, 0x17, 0x2c, 0x48, 0xf5, 0x9d, 0xd3, 0xfc, 0x2d, 0x57, 0x3d, 0xa9, - 0x57, 0x3d, 0x99, 0x53, 0xb5, 0x70, 0x01, 0xad, 0x53, 0x81, 0x70, 0x31, 0xb6, 0x2e, 0x7a, 0x3f, - 0x73, 0xa1, 0x7d, 0xee, 0xd7, 0x95, 0x33, 0xe2, 0x6e, 0x7f, 0x81, 0x0a, 0xe4, 0x2f, 0x50, 0x7b, - 0xf1, 0x17, 0xe2, 0x06, 0xfe, 0xc2, 0x55, 0x02, 0xfe, 0x0f, 0x0f, 0xcf, 0x28, 0x33, 0x16, 0x8c, - 0x48, 0x66, 0x5c, 0x00, 0xba, 0x8d, 0x6a, 0x22, 0xdc, 0xe1, 0xa3, 0x13, 0x4a, 0x84, 0x09, 0x20, - 0x15, 0x65, 0xae, 0xef, 0xcb, 0x0c, 0x74, 0xd7, 0x54, 0x83, 0x62, 0xa2, 0xfa, 0xbb, 0x92, 0xe6, - 0x9a, 0x29, 0x2f, 0x02, 0x69, 0x0e, 0xe7, 0x75, 0x20, 0xbc, 0x68, 0x5d, 0x7a, 0xcf, 0xd9, 0xec, - 0xee, 0xbd, 0xe4, 0x40, 0x39, 0xd9, 0xaa, 0xae, 0x54, 0xe6, 0x05, 0xe2, 0xe6, 0x60, 0x07, 0xa4, - 0xf2, 0x2b, 0x1b, 0xea, 0xda, 0xaf, 0x0c, 0xb6, 0x7c, 0xd5, 0xf2, 0xae, 0xae, 0x85, 0xf1, 0x28, - 0x3b, 0x8f, 0x28, 0xbd, 0xd7, 0x34, 0xe0, 0xf4, 0xa1, 0xe3, 0x2a, 0xe3, 0xb9, 0xf4, 0x2e, 0xe1, - 0x66, 0xd4, 0x1e, 0x60, 0xf8, 0x55, 0x29, 0xf8, 0xd2, 0xc7, 0xaf, 0xa5, 0x77, 0xf7, 0x34, 0x62, - 0x28, 0x50, 0xdb, 0x12, 0xdd, 0x0a, 0x3b, 0x3c, 0xb8, 0xc1, 0xff, 0x37, 0x17, 0xf2, 0x3a, 0xf5, - 0x78, 0x6f, 0xc8, 0x31, 0x3f, 0x36, 0xc8, 0x31, 0x8f, 0xd9, 0xca, 0x31, 0x52, 0x63, 0xac, 0x21, - 0x90, 0x94, 0xaa, 0xa2, 0x91, 0x4d, 0xe1, 0xfa, 0x11, 0x99, 0x61, 0xe4, 0x41, 0x24, 0xa1, 0xc4, - 0x4c, 0x5f, 0x3b, 0xf9, 0x66, 0xe7, 0x28, 0xf4, 0x90, 0x49, 0x72, 0x4c, 0xdc, 0xa9, 0xab, 0xdd, - 0x46, 0xf3, 0xd5, 0x4e, 0x94, 0xc5, 0xe7, 0xd9, 0x6d, 0xba, 0x90, 0xd9, 0xa6, 0x65, 0x1e, 0x58, - 0xc6, 0xe9, 0x8e, 0x1d, 0x4a, 0x4f, 0x97, 0x4a, 0xb0, 0xfe, 0x7d, 0xd9, 0xcf, 0x4e, 0x2b, 0x9d, - 0x57, 0x89, 0x11, 0x20, 0xa6, 0x25, 0xbb, 0x99, 0x5f, 0x47, 0xa3, 0xc3, 0x31, 0x15, 0x5f, 0xc2, - 0x04, 0xaa, 0x64, 0xf1, 0x19, 0x1f, 0x29, 0x12, 0xca, 0xd5, 0xe6, 0x9a, 0xc7, 0x30, 0xbb, 0xb5, - 0x6b, 0xd5, 0xd1, 0x7e, 0xd4, 0x42, 0xbf, 0x47, 0xb6, 0x0d, 0x20, 0xcd, 0xf9, 0x49, 0x7b, 0xfa, - 0xf4, 0x6c, 0x4f, 0x4f, 0x61, 0x3a, 0x91, 0xdd, 0xf7, 0xb6, 0xa6, 0xfa, 0xce, 0x69, 0x5f, 0x23, - 0x3b, 0xe0, 0x9f, 0x5c, 0xc8, 0x6d, 0xd5, 0xf4, 0xde, 0x58, 0xf9, 0x7e, 0xc3, 0xca, 0x7f, 0xc8, - 0x52, 0xe1, 0xae, 0x1e, 0x71, 0x60, 0xc4, 0x00, 0x8b, 0x9d, 0x3c, 0x21, 0xb3, 0x54, 0x30, 0x2c, - 0xf9, 0x97, 0x65, 0x71, 0x15, 0x7a, 0xc9, 0xe7, 0x40, 0x15, 0x4a, 0xd1, 0x1c, 0x5a, 0xda, 0xad, - 0xf6, 0xcf, 0xc7, 0xa0, 0x62, 0x6d, 0x24, 0xfc, 0xd3, 0x24, 0x9b, 0x2a, 0x5d, 0xdc, 0x98, 0x40, - 0xa4, 0x48, 0x98, 0x4c, 0x4e, 0x9a, 0xfe, 0x7d, 0x61, 0xf2, 0xd1, 0x9a, 0x6a, 0x92, 0x30, 0xb5, - 0x9a, 0x7f, 0x06, 0x8d, 0x09, 0x47, 0x22, 0x52, 0xbc, 0xa6, 0x96, 0xd0, 0x16, 0x2b, 0x16, 0x69, - 0x99, 0xf0, 0x00, 0x19, 0xcb, 0xf6, 0xb6, 0xcc, 0xf5, 0x7d, 0xa9, 0xbe, 0x81, 0x9a, 0x5a, 0x3f, - 0xad, 0xe3, 0x5f, 0x47, 0xe3, 0xc2, 0xcc, 0x7d, 0x82, 0xac, 0xf2, 0xa7, 0x64, 0x71, 0xb1, 0xcf, - 0x50, 0x21, 0xcc, 0x81, 0xed, 0x4b, 0x6c, 0x3b, 0x2e, 0x1c, 0xca, 0x9c, 0x3f, 0x9d, 0xea, 0xfb, - 0x54, 0x3d, 0x09, 0x3a, 0x7b, 0xb3, 0xef, 0x5d, 0x07, 0x6e, 0xed, 0x37, 0xb4, 0xe1, 0x9f, 0x60, - 0x65, 0x7d, 0x3c, 0x69, 0xf8, 0xe4, 0x99, 0x08, 0xe3, 0x09, 0xc6, 0x9a, 0x08, 0x79, 0xf1, 0xf1, - 0x33, 0x1f, 0x8d, 0x6a, 0x94, 0xe8, 0x8b, 0x35, 0xe4, 0xe8, 0x6f, 0x94, 0x1a, 0x05, 0x5e, 0x1b, - 0xbc, 0x72, 0xe1, 0x30, 0x85, 0x6f, 0x94, 0x1a, 0xf9, 0xa7, 0x59, 0x11, 0x1f, 0x67, 0xe6, 0xc7, - 0x22, 0xfe, 0x0c, 0x80, 0xaf, 0xa7, 0x9d, 0xb3, 0x23, 0x5c, 0x00, 0x52, 0xff, 0x42, 0x34, 0xaa, - 0x39, 0x16, 0x24, 0x22, 0x3f, 0x26, 0x95, 0xfa, 0x5b, 0x98, 0x42, 0x5c, 0x0a, 0xb1, 0x39, 0x4d, - 0xa6, 0xab, 0x75, 0x43, 0x6d, 0x95, 0xa7, 0xa6, 0xda, 0xaf, 0xd6, 0xa9, 0x1b, 0x95, 0xf0, 0x8f, - 0x22, 0xba, 0x51, 0x5f, 0xd4, 0xf8, 0xc7, 0x12, 0xb6, 0x21, 0x3c, 0x41, 0x6a, 0xe9, 0x7d, 0x95, - 0x6b, 0x37, 0x94, 0xab, 0x47, 0x6f, 0x0e, 0x76, 0xa4, 0xaf, 0x5e, 0x52, 0xba, 0x2f, 0xab, 0xa3, - 0x79, 0xff, 0xb8, 0x72, 0xf5, 0x68, 0xe6, 0x42, 0xbb, 0xc6, 0x66, 0x9e, 0x47, 0xc5, 0x64, 0x3a, - 0x9a, 0x97, 0x10, 0x85, 0x05, 0x9e, 0x7b, 0xbd, 0x54, 0x98, 0x04, 0x9f, 0x08, 0xc7, 0x9a, 0x97, - 0xc0, 0xde, 0xf7, 0xeb, 0x95, 0xfc, 0x32, 0xcd, 0xa6, 0x01, 0xa4, 0x79, 0x88, 0x4c, 0x47, 0x6c, - 0x1a, 0x3c, 0xd4, 0x1d, 0x54, 0xb3, 0x6c, 0xc8, 0x9d, 0x33, 0x6a, 0xe8, 0xb0, 0x94, 0x68, 0xa3, - 0x40, 0x32, 0x87, 0x17, 0x28, 0xac, 0x8d, 0x9a, 0x95, 0xd3, 0x45, 0x6e, 0x07, 0xa0, 0x7a, 0x7a, - 0x91, 0xb1, 0x78, 0x18, 0x47, 0x15, 0x4f, 0x0f, 0xfb, 0xb4, 0x42, 0x4a, 0xdf, 0x5c, 0x7b, 0x09, - 0xdd, 0xee, 0x21, 0x84, 0x26, 0x06, 0x75, 0xa5, 0xbb, 0xba, 0x27, 0x70, 0x94, 0x80, 0xa2, 0xca, - 0x0a, 0x59, 0x7c, 0xca, 0x97, 0x5b, 0x27, 0xcc, 0x01, 0x93, 0x3b, 0xf5, 0x0e, 0xd2, 0x7b, 0x2a, - 0xd5, 0xbf, 0x2f, 0xd3, 0xd5, 0x0a, 0xcf, 0x3a, 0xc0, 0xcb, 0x49, 0x0c, 0xa0, 0xdc, 0x66, 0x15, - 0x2a, 0x07, 0x47, 0xcf, 0xf9, 0xc6, 0x92, 0xa7, 0x31, 0xdc, 0xd5, 0x3c, 0xd0, 0x7c, 0x93, 0x3d, - 0x46, 0xd7, 0x0d, 0x91, 0xa9, 0x99, 0x8d, 0xac, 0x5c, 0x3a, 0x90, 0x39, 0xd9, 0xef, 0x3d, 0xe3, - 0xd2, 0x9f, 0xc9, 0x44, 0x60, 0xe6, 0x77, 0x52, 0x03, 0xf9, 0x6d, 0x1f, 0x53, 0xd4, 0xf6, 0xc6, - 0x01, 0x67, 0x26, 0xef, 0x38, 0x74, 0x45, 0xae, 0x0b, 0x43, 0xcc, 0xdb, 0x92, 0xa1, 0xd5, 0xbd, - 0x26, 0x3f, 0x71, 0xb6, 0xcf, 0xb6, 0x0c, 0x5a, 0x23, 0x39, 0x4c, 0x6a, 0x65, 0x71, 0x35, 0x5a, - 0xe9, 0x73, 0xa2, 0x0e, 0x7b, 0x9a, 0x30, 0x44, 0xb5, 0x3b, 0x4d, 0xf6, 0x71, 0xc4, 0x0a, 0x87, - 0xe9, 0x8a, 0x7f, 0x07, 0x15, 0x24, 0x75, 0xdd, 0x50, 0x58, 0x16, 0x37, 0xf9, 0x70, 0x81, 0xf0, - 0xb3, 0x9c, 0x5e, 0x4b, 0xc1, 0x98, 0x90, 0x14, 0x75, 0xb5, 0x82, 0xa8, 0xa1, 0x05, 0x4c, 0x5b, - 0xbb, 0x4e, 0x5c, 0x53, 0x2d, 0xfa, 0xab, 0x53, 0x7d, 0xfd, 0xe9, 0xe3, 0x3b, 0x94, 0x1d, 0xdb, - 0x01, 0x5c, 0xbd, 0x10, 0x2d, 0x5b, 0x21, 0x56, 0xfd, 0x38, 0xd5, 0xd7, 0x9f, 0x1a, 0x3c, 0xae, - 0xde, 0x99, 0x71, 0xf9, 0x5c, 0x3f, 0xfe, 0x8a, 0xf7, 0xba, 0x0b, 0x79, 0x28, 0x86, 0x95, 0x81, - 0x48, 0xe8, 0x8d, 0x70, 0x28, 0xb9, 0xb9, 0x36, 0x10, 0xdc, 0x12, 0xa8, 0xbf, 0x65, 0xb1, 0x8e, - 0xfb, 0x46, 0xb7, 0x45, 0xee, 0xbb, 0xdb, 0x36, 0x84, 0xd3, 0x0c, 0x4b, 0x00, 0xaa, 0x00, 0x54, - 0x3f, 0xd6, 0x76, 0x29, 0xd5, 0xff, 0x6b, 0xa5, 0xef, 0xb4, 0xd2, 0x73, 0x5d, 0xe9, 0x68, 0xf3, - 0xfe, 0x0f, 0x17, 0xbe, 0x6e, 0xdb, 0x35, 0xbf, 0x37, 0x76, 0x51, 0xd0, 0x20, 0x8b, 0xcd, 0xc9, - 0xdd, 0x45, 0xb9, 0x78, 0xd9, 0x18, 0x40, 0x98, 0xa9, 0x43, 0x52, 0xbc, 0xc3, 0x7e, 0x22, 0x4e, - 0x1b, 0xc3, 0x53, 0xcb, 0x9e, 0xda, 0xe6, 0x2d, 0x25, 0x73, 0xe8, 0x41, 0xab, 0xe1, 0xf1, 0x13, - 0x90, 0x2b, 0x1c, 0x22, 0x2f, 0x73, 0xae, 0x70, 0x88, 0xe7, 0x51, 0x41, 0x44, 0xd3, 0xa4, 0xfa, - 0xf1, 0xdf, 0xbc, 0x07, 0x8d, 0x8d, 0x48, 0xc9, 0x37, 0xa2, 0xf1, 0x2d, 0xba, 0x64, 0xe5, 0x67, - 0x8b, 0x98, 0xf7, 0xaf, 0x02, 0xc3, 0xfb, 0xd7, 0x0c, 0x54, 0x5c, 0x47, 0xbf, 0x8a, 0x05, 0xa2, - 0x42, 0xbf, 0x5e, 0xe0, 0xfd, 0xbc, 0x00, 0x4d, 0xd3, 0x44, 0xd0, 0x97, 0x13, 0x35, 0x8d, 0x81, - 0xfa, 0x7b, 0xf1, 0xf1, 0xeb, 0x7f, 0xe6, 0x4c, 0xb6, 0xe7, 0xe7, 0x38, 0x59, 0x3c, 0xcd, 0x31, - 0x8a, 0xc8, 0x23, 0xdc, 0xd0, 0x81, 0x6e, 0xe5, 0xbd, 0x4e, 0xed, 0x79, 0x06, 0x44, 0x8f, 0xa1, - 0x96, 0x76, 0xa5, 0x65, 0xb0, 0xa2, 0x76, 0x7d, 0xe5, 0xaa, 0x9a, 0xaa, 0x8d, 0x35, 0xab, 0xc5, - 0x15, 0xcb, 0x4a, 0x95, 0xb6, 0xf3, 0x4a, 0xdb, 0x25, 0x00, 0x9f, 0x5b, 0x56, 0xeb, 0xaf, 0xd9, - 0x20, 0xae, 0x5b, 0x46, 0xea, 0xe0, 0xf2, 0x44, 0xeb, 0xd6, 0xfe, 0x50, 0xf4, 0x2f, 0xab, 0xd6, - 0x9a, 0xa9, 0x4b, 0x80, 0x56, 0xad, 0x16, 0xfd, 0x2b, 0x97, 0xad, 0xa3, 0x55, 0x7d, 0xef, 0x2a, - 0xdd, 0xfd, 0xb4, 0xca, 0x23, 0xae, 0x5a, 0x05, 0x36, 0x18, 0x50, 0xc2, 0x28, 0x37, 0xb7, 0xb0, - 0x8f, 0x9c, 0x85, 0xba, 0xc5, 0x1a, 0xf3, 0x6a, 0xbc, 0x54, 0xe9, 0xb9, 0xa6, 0x1c, 0x39, 0xab, - 0x5c, 0xbb, 0xac, 0x74, 0x5e, 0xa4, 0x4f, 0xc6, 0x65, 0x1e, 0xf0, 0x80, 0x07, 0xa9, 0x05, 0xba, - 0xd5, 0x1e, 0xa6, 0x89, 0xa0, 0x0d, 0x4b, 0x9c, 0x79, 0x5b, 0xa6, 0x76, 0xb0, 0x36, 0x2b, 0x40, - 0x7b, 0x4c, 0x60, 0xcc, 0x05, 0xc9, 0x85, 0xee, 0x3f, 0xba, 0x50, 0x89, 0xb9, 0xd5, 0xbd, 0xc1, - 0x42, 0x5e, 0x32, 0xb0, 0x90, 0x69, 0xb9, 0x2c, 0x84, 0x60, 0x93, 0x9f, 0xe6, 0x62, 0x83, 0x2c, - 0xae, 0x45, 0xaf, 0xf8, 0x6c, 0x69, 0x21, 0xcc, 0x31, 0x93, 0x10, 0x26, 0xc7, 0xf9, 0x36, 0xf7, - 0x75, 0x21, 0x1a, 0x43, 0xba, 0xe2, 0x17, 0xa2, 0x31, 0x61, 0xf5, 0x0f, 0x6d, 0x1f, 0x4e, 0xc3, - 0xfb, 0x90, 0x94, 0x09, 0xc5, 0xd0, 0x9f, 0x7a, 0xbd, 0xa0, 0x65, 0xfc, 0x7c, 0x54, 0x18, 0x68, - 0x08, 0x07, 0x12, 0x84, 0x9e, 0xd8, 0x30, 0x19, 0x4a, 0x84, 0x71, 0xf4, 0xf3, 0xbf, 0x56, 0xf6, - 0xee, 0xf6, 0x43, 0xa1, 0x3a, 0x63, 0x81, 0x78, 0x70, 0x33, 0xd9, 0x75, 0x30, 0x63, 0x6a, 0x81, - 0x30, 0x11, 0xa0, 0xab, 0x6a, 0xd7, 0xa7, 0x8f, 0x5e, 0x49, 0x1f, 0x6d, 0xf5, 0xe3, 0x62, 0xde, - 0x8f, 0x26, 0x46, 0x13, 0x55, 0x4d, 0x89, 0x64, 0xb4, 0x31, 0xfc, 0x16, 0x5c, 0xf6, 0x60, 0xd7, - 0x61, 0x3f, 0x96, 0xdc, 0x3a, 0x81, 0x57, 0x7a, 0xba, 0x94, 0x9d, 0x57, 0x88, 0x22, 0x1c, 0x5e, - 0x8f, 0x72, 0x81, 0xf8, 0xa7, 0xd0, 0xe8, 0x68, 0x02, 0x4b, 0xfc, 0x85, 0xfa, 0x65, 0x8a, 0x14, - 0x51, 0x83, 0x07, 0xb2, 0x06, 0x41, 0xd8, 0x27, 0x75, 0x7c, 0x0d, 0x42, 0x09, 0x29, 0x1e, 0x96, - 0xa0, 0xf1, 0x68, 0xfd, 0xc6, 0xc1, 0x14, 0x0b, 0x25, 0x6c, 0x07, 0xf0, 0x94, 0x44, 0x9d, 0x0a, - 0x74, 0x28, 0x5e, 0xcc, 0x79, 0xc3, 0xc1, 0xdd, 0xd0, 0x37, 0x9c, 0x19, 0x64, 0x57, 0xe1, 0x37, - 0x9c, 0x0a, 0xcf, 0x9a, 0x97, 0xfd, 0xab, 0xc5, 0x55, 0xa5, 0xe0, 0x4a, 0x3d, 0x57, 0xe3, 0xb7, - 0x57, 0x59, 0x56, 0x04, 0x17, 0x3c, 0x78, 0x5f, 0x65, 0x58, 0x51, 0xbb, 0x23, 0x2b, 0xf2, 0x7c, - 0x97, 0xbc, 0x88, 0x61, 0x3d, 0x41, 0x54, 0x44, 0xb6, 0x02, 0xbc, 0x01, 0x59, 0x44, 0xbb, 0x60, - 0xcd, 0x0a, 0x7d, 0xb2, 0xf8, 0xb8, 0x4f, 0x6b, 0x21, 0x4c, 0x27, 0xeb, 0xca, 0x68, 0x12, 0x43, - 0x36, 0x8b, 0x06, 0x56, 0xe1, 0x95, 0xc5, 0xd9, 0x68, 0xa6, 0x8f, 0x2e, 0x6e, 0xe3, 0xc4, 0x42, - 0x17, 0xde, 0xd5, 0x68, 0x2c, 0x6b, 0xfc, 0xed, 0x31, 0x5a, 0x70, 0xc3, 0x41, 0x69, 0xb0, 0xd0, - 0x9e, 0x61, 0xf2, 0x85, 0x62, 0xec, 0x46, 0xbc, 0xff, 0xca, 0x31, 0xbc, 0xaa, 0x16, 0x98, 0x5f, - 0xe2, 0xde, 0x3b, 0xe4, 0x2a, 0x96, 0xc8, 0xe2, 0x22, 0xb4, 0xd0, 0x67, 0x8b, 0x0b, 0x73, 0x6f, - 0x82, 0x53, 0x81, 0xf0, 0xea, 0xbf, 0x77, 0x31, 0x7a, 0x50, 0xbd, 0xcd, 0x7d, 0xf1, 0x7a, 0xce, - 0xe2, 0x94, 0x1f, 0xc7, 0x5e, 0x23, 0x8b, 0x2b, 0x51, 0x8d, 0xcf, 0x9e, 0x22, 0xcc, 0x4d, 0x89, - 0x25, 0xa3, 0x1d, 0xa7, 0x5e, 0x83, 0xc6, 0xb1, 0xdd, 0x18, 0xad, 0x94, 0x54, 0xa2, 0x16, 0xb0, - 0x56, 0x4a, 0x1e, 0x34, 0x96, 0xfc, 0xd0, 0x1f, 0xcb, 0xfd, 0x6c, 0x91, 0xf7, 0xdf, 0xb9, 0xd0, - 0x83, 0xda, 0xd8, 0x36, 0xc4, 0x82, 0xf7, 0xe0, 0x4a, 0xe5, 0x5f, 0xa4, 0xef, 0x4a, 0x70, 0x28, - 0x60, 0x4e, 0x41, 0xde, 0x95, 0x66, 0x51, 0x9b, 0x59, 0x7c, 0x2a, 0xe2, 0xeb, 0x0f, 0x58, 0xce, - 0x92, 0xaf, 0x03, 0x58, 0xc5, 0xf3, 0xb2, 0xf8, 0x2c, 0x7a, 0xc6, 0x67, 0x49, 0x09, 0xe1, 0x61, - 0x6d, 0x82, 0x88, 0xbb, 0x1a, 0x9e, 0xa6, 0x4c, 0x57, 0x6b, 0x73, 0x2c, 0x48, 0xd6, 0xfc, 0x5f, - 0xb9, 0xd0, 0x94, 0x9c, 0xb6, 0xf7, 0x85, 0x05, 0x2a, 0xc5, 0x27, 0xbf, 0xb5, 0x4e, 0xf4, 0x02, - 0xd6, 0x94, 0x30, 0x91, 0x91, 0x38, 0x01, 0x31, 0x64, 0x34, 0xaf, 0x76, 0x55, 0xd0, 0xa6, 0x3d, - 0x69, 0x17, 0x15, 0x8e, 0xb9, 0xa8, 0x3c, 0x48, 0xcd, 0xa5, 0x61, 0x69, 0x13, 0x7b, 0x66, 0x37, - 0x2a, 0x0a, 0xc7, 0x9a, 0x17, 0x57, 0x85, 0x43, 0xc4, 0xaf, 0xd4, 0xaf, 0xfd, 0x26, 0x75, 0x4b, - 0x70, 0x5d, 0x81, 0x56, 0x87, 0x7f, 0xf3, 0x8b, 0x50, 0x61, 0x30, 0x1c, 0x8a, 0x27, 0x4a, 0x0a, - 0x31, 0x39, 0x66, 0xe6, 0x92, 0x43, 0x4c, 0x24, 0xc2, 0x89, 0x64, 0x20, 0x92, 0x54, 0xa1, 0xfd, - 0x00, 0xcb, 0xcf, 0x41, 0xe3, 0x03, 0x0d, 0xd8, 0x2d, 0x43, 0xaa, 0x89, 0xad, 0x69, 0x6a, 0x04, - 0xb5, 0xae, 0xdf, 0x58, 0xe8, 0x7d, 0x01, 0x8d, 0x37, 0xb4, 0x56, 0xb1, 0x51, 0xdb, 0x53, 0x6c, - 0x82, 0x64, 0x6c, 0xea, 0xff, 0x58, 0xc0, 0x71, 0xe1, 0xbb, 0x93, 0xf6, 0xdb, 0xfb, 0x27, 0xec, - 0xd5, 0x69, 0x2d, 0xf6, 0x70, 0xba, 0x63, 0x7b, 0xf5, 0x1b, 0x7b, 0x58, 0xf0, 0xcb, 0x8d, 0x5b, - 0x16, 0x87, 0xb2, 0x22, 0x5b, 0x76, 0x8e, 0xdd, 0x96, 0x05, 0xcb, 0x75, 0x72, 0xad, 0x20, 0x0f, - 0xc4, 0xab, 0x88, 0xe2, 0x17, 0x64, 0x38, 0xf5, 0x82, 0x41, 0x14, 0xbf, 0xf3, 0x6c, 0x7b, 0xd1, - 0x74, 0xb8, 0x6c, 0x77, 0xa0, 0x07, 0x5e, 0x8e, 0x8a, 0xc0, 0x77, 0xac, 0xa6, 0x9a, 0x08, 0x76, - 0x20, 0x75, 0xd0, 0x42, 0xca, 0xab, 0xa1, 0x3f, 0x28, 0xd5, 0x06, 0xe6, 0xd7, 0xc0, 0xf8, 0x9f, - 0xa1, 0xf1, 0xe1, 0x88, 0xca, 0x62, 0x89, 0x5c, 0x41, 0x22, 0x3e, 0xe3, 0xe1, 0x19, 0x6b, 0x34, - 0x4d, 0xf0, 0xe5, 0xb3, 0x4a, 0xdb, 0x29, 0x62, 0x9b, 0xcf, 0x38, 0xc5, 0x12, 0xc2, 0x1b, 0x1b, - 0x55, 0xbc, 0x28, 0x8b, 0x4b, 0xd1, 0xb3, 0x3e, 0x5e, 0x5d, 0x0f, 0xc6, 0xa5, 0x20, 0x3c, 0xaa, - 0x6b, 0x08, 0x18, 0xfc, 0xca, 0x86, 0x5a, 0xde, 0x1d, 0x6a, 0xdb, 0x9d, 0xea, 0xdb, 0xad, 0xec, - 0xed, 0x48, 0xf5, 0xef, 0xf3, 0xfe, 0x0d, 0x7b, 0xa1, 0xd2, 0xba, 0xb8, 0x37, 0x78, 0xd6, 0x7a, - 0x03, 0xcf, 0x9a, 0x9a, 0xbb, 0x49, 0x01, 0x1b, 0x5b, 0x37, 0x14, 0x96, 0x2c, 0x56, 0xf6, 0xf3, - 0x93, 0x0d, 0x44, 0x35, 0xea, 0x5d, 0xd8, 0xb6, 0x76, 0x07, 0x74, 0x67, 0x21, 0x1a, 0x0d, 0xcd, - 0xf9, 0xc7, 0xe9, 0x22, 0x87, 0x4d, 0xf9, 0x80, 0x2c, 0x4e, 0xa0, 0x8b, 0x1c, 0xfe, 0xa3, 0xab, - 0x78, 0x11, 0xb3, 0xee, 0x5c, 0xfa, 0x9d, 0x4b, 0x5f, 0x77, 0x45, 0xf0, 0xe5, 0x9a, 0x6a, 0x66, - 0x91, 0x2d, 0x45, 0x88, 0x38, 0x3a, 0xea, 0x8e, 0x9a, 0x60, 0xcc, 0xa6, 0x17, 0x0b, 0xe3, 0xc8, - 0x90, 0xe9, 0xdd, 0x43, 0xab, 0xe1, 0x9f, 0x47, 0xc5, 0x2a, 0x6f, 0xf1, 0x07, 0x22, 0x46, 0x1b, - 0x79, 0xbd, 0x54, 0x98, 0x04, 0x8d, 0x3d, 0x35, 0xb5, 0xcd, 0x8b, 0x3d, 0x55, 0x35, 0xd5, 0x7e, - 0xbf, 0x5e, 0xc9, 0xbf, 0x84, 0xc6, 0x53, 0xbe, 0x09, 0x7d, 0x14, 0xea, 0x0f, 0x27, 0xc6, 0x1a, - 0xb6, 0x9f, 0x25, 0xd0, 0x8f, 0x11, 0x40, 0xf3, 0x53, 0x1d, 0xad, 0x0f, 0x03, 0x76, 0xf1, 0x14, - 0x7d, 0x47, 0x74, 0x9f, 0xd5, 0x8d, 0xc1, 0x60, 0xb7, 0x4a, 0x68, 0x5a, 0xa0, 0x39, 0x10, 0x6e, - 0x08, 0xd4, 0x35, 0x48, 0x35, 0xb5, 0x62, 0x28, 0x14, 0x97, 0x12, 0x09, 0x08, 0xd2, 0xad, 0xee, - 0xb7, 0x02, 0x30, 0x4d, 0xb3, 0x83, 0x11, 0xc6, 0x2b, 0xed, 0x9f, 0xa4, 0xae, 0x1f, 0xf1, 0xd4, - 0xd4, 0x7a, 0xd2, 0x07, 0x2e, 0xfa, 0xed, 0xe0, 0x0c, 0x8f, 0x43, 0x45, 0x96, 0x8f, 0x43, 0xd6, - 0x83, 0xd4, 0x1f, 0x87, 0x7e, 0xae, 0xb2, 0x67, 0x60, 0x04, 0xc5, 0xd6, 0x61, 0xfd, 0x4c, 0xfe, - 0x53, 0xb4, 0x81, 0x30, 0x9d, 0x74, 0x8e, 0xb9, 0x44, 0xf6, 0x57, 0xc4, 0x11, 0x10, 0x94, 0x2f, - 0x7e, 0x0a, 0x55, 0xa1, 0x4a, 0x4a, 0x68, 0xaa, 0x8f, 0x2c, 0x3c, 0x3a, 0xeb, 0x7a, 0x4c, 0x8e, - 0xd9, 0x55, 0x9b, 0xa5, 0xe0, 0x16, 0x95, 0xe0, 0x55, 0xd1, 0xc8, 0xa6, 0x86, 0x70, 0x30, 0xb9, - 0x3c, 0x1e, 0x6d, 0xdc, 0x10, 0x0b, 0x7e, 0xf3, 0x13, 0xa4, 0xd4, 0x70, 0x02, 0x57, 0xf2, 0xb2, - 0x38, 0x91, 0x3a, 0x2c, 0x8d, 0x4e, 0xf5, 0xef, 0x6b, 0x8e, 0x05, 0xe9, 0xa9, 0x2c, 0x90, 0x13, - 0x8f, 0xf1, 0x29, 0xc6, 0x05, 0xc2, 0x64, 0x88, 0xfd, 0x9b, 0xe9, 0x6a, 0x55, 0x7f, 0x12, 0x6e, - 0x0a, 0x27, 0xa2, 0xae, 0x25, 0x2f, 0x18, 0xb9, 0x4d, 0x95, 0x41, 0xa4, 0x2c, 0x1c, 0xd1, 0xe5, - 0x87, 0x08, 0x84, 0xc3, 0xd1, 0x4d, 0x98, 0x0a, 0x87, 0x0a, 0x1e, 0xf7, 0xf6, 0x4f, 0x33, 0xe7, - 0xb6, 0x01, 0x2a, 0xde, 0xb4, 0x0b, 0x79, 0xec, 0xdb, 0xde, 0x1b, 0x7c, 0xb6, 0xc6, 0xf0, 0x82, - 0x64, 0xbe, 0x0b, 0x11, 0xac, 0xf0, 0xa2, 0xc5, 0xfc, 0x0a, 0xb8, 0xed, 0x38, 0x20, 0x04, 0xe9, - 0x0c, 0x78, 0x2b, 0x09, 0x69, 0x38, 0x2c, 0x49, 0x84, 0x59, 0xb0, 0x64, 0x58, 0x5a, 0xb2, 0x63, - 0x33, 0xb3, 0xdb, 0x39, 0x68, 0x1c, 0x3b, 0x10, 0x55, 0x20, 0x04, 0x11, 0x8e, 0xf3, 0x8c, 0x52, - 0x05, 0x42, 0xfc, 0xc3, 0xfb, 0x6b, 0xd6, 0x0b, 0x73, 0xad, 0x14, 0x6c, 0x8a, 0x87, 0x93, 0x5b, - 0x57, 0xc4, 0xa3, 0x4d, 0xb1, 0x3b, 0x26, 0x43, 0xfd, 0xdc, 0x2c, 0x43, 0x55, 0xca, 0xe2, 0x0b, - 0xec, 0xe2, 0x14, 0x98, 0xc5, 0x59, 0x3a, 0xf4, 0xd1, 0x51, 0xe5, 0x46, 0x5b, 0x6a, 0xf0, 0x78, - 0x99, 0xd2, 0x36, 0xa8, 0xf4, 0x5c, 0xcb, 0x9c, 0xfc, 0x42, 0xe9, 0xe8, 0xcf, 0xb4, 0xef, 0x54, - 0xe4, 0x0e, 0x65, 0x7b, 0xdb, 0xd0, 0x7b, 0x67, 0x33, 0xed, 0x3b, 0xe7, 0xb2, 0x6b, 0xf8, 0x29, - 0x59, 0x5c, 0x8c, 0x04, 0xb8, 0x7a, 0x5a, 0xe2, 0x4c, 0x6f, 0xf0, 0x4a, 0x4f, 0xbb, 0xd2, 0x76, - 0x36, 0x33, 0xd0, 0x4a, 0x6e, 0x33, 0x5f, 0xb9, 0xd0, 0x6c, 0x5b, 0x6a, 0xdd, 0x1b, 0x6b, 0xb7, - 0xd6, 0x20, 0x23, 0x98, 0x04, 0x79, 0x03, 0x52, 0xf9, 0x5d, 0x6e, 0x58, 0x0b, 0x1a, 0x6b, 0x9a, - 0x68, 0x36, 0x49, 0x46, 0x72, 0xda, 0x09, 0x0a, 0x5d, 0x2e, 0x84, 0x65, 0x8d, 0x95, 0xd2, 0xd6, - 0xda, 0x40, 0x38, 0x7e, 0x1f, 0x2f, 0xc4, 0x85, 0xb2, 0x38, 0x1f, 0x95, 0xf9, 0xac, 0xb0, 0xd5, - 0x96, 0x60, 0xef, 0xf6, 0x21, 0xf9, 0x94, 0xd2, 0x4b, 0x2d, 0xb8, 0xfe, 0x88, 0xa8, 0x25, 0x74, - 0xf0, 0xfb, 0x42, 0xd9, 0x4f, 0xd0, 0x19, 0xb9, 0xe3, 0x45, 0x2e, 0x1d, 0x34, 0x89, 0x14, 0xe8, - 0xe6, 0xb8, 0xd0, 0xfe, 0x03, 0x87, 0xc6, 0x90, 0xf6, 0xbc, 0x0f, 0x15, 0xae, 0x94, 0xb6, 0x6a, - 0x4b, 0x0b, 0x9b, 0xd4, 0x42, 0x89, 0x50, 0x04, 0x7d, 0xa9, 0x52, 0x29, 0x2e, 0xe0, 0x17, 0xe3, - 0x66, 0x8c, 0x97, 0x05, 0xa6, 0x36, 0x2d, 0x13, 0xc6, 0x91, 0x6f, 0x83, 0x68, 0x49, 0x8b, 0xf9, - 0xe5, 0x68, 0x6c, 0xc8, 0x14, 0xb7, 0x02, 0x4b, 0x4c, 0x6c, 0xb9, 0xc0, 0x43, 0x6b, 0x43, 0xc0, - 0x0a, 0x16, 0x80, 0x86, 0xcb, 0xa1, 0x23, 0x17, 0x26, 0x6a, 0x4b, 0x84, 0x88, 0x35, 0xfb, 0x10, - 0x5c, 0x61, 0x58, 0x07, 0x44, 0x6d, 0x13, 0xfd, 0x39, 0x67, 0xe9, 0xb5, 0x7a, 0x8e, 0x93, 0xc5, - 0x50, 0x8e, 0xd7, 0xd3, 0x3a, 0xd6, 0xa5, 0xa9, 0x8c, 0xd1, 0x8b, 0x93, 0xb9, 0x2b, 0xf3, 0xd0, - 0xe8, 0xa3, 0xe1, 0x48, 0x7d, 0x14, 0x0f, 0xae, 0xcc, 0x83, 0xb7, 0x1c, 0xf9, 0xaf, 0x39, 0x16, - 0x2c, 0xf3, 0x44, 0xa2, 0x21, 0xa9, 0x5e, 0x65, 0x07, 0x65, 0x9e, 0x64, 0x20, 0xb1, 0xe5, 0xeb, - 0xca, 0x17, 0xe3, 0xcf, 0x6b, 0xf2, 0x99, 0xff, 0x01, 0x53, 0x17, 0xfe, 0x42, 0x30, 0xee, 0x29, - 0xa2, 0x5d, 0xf8, 0x8b, 0xb5, 0x2e, 0xfc, 0x05, 0x6a, 0x17, 0xb7, 0xcf, 0x83, 0xf6, 0x47, 0xa8, - 0x18, 0x87, 0xdc, 0xc7, 0x6e, 0x90, 0xa3, 0xb0, 0x68, 0xfc, 0x8c, 0x2c, 0x96, 0xfb, 0xf4, 0x52, - 0xc1, 0x0b, 0xc9, 0xac, 0xb4, 0x08, 0xfb, 0x2b, 0x56, 0xaf, 0xf3, 0xc0, 0x8f, 0xf4, 0xce, 0xcb, - 0x37, 0x07, 0x3b, 0x70, 0x18, 0xf2, 0x02, 0xc1, 0xe5, 0xf9, 0x81, 0x5f, 0x6f, 0xc5, 0xbf, 0x82, - 0xc6, 0x48, 0x11, 0x48, 0x52, 0x55, 0x80, 0xbb, 0xc5, 0xc9, 0xe1, 0x69, 0x99, 0xe0, 0x55, 0x37, - 0xc7, 0x47, 0xc7, 0xf2, 0xe9, 0x94, 0xb6, 0xe1, 0x9f, 0x44, 0x85, 0x0d, 0xe1, 0xc6, 0x70, 0x92, - 0x18, 0xd3, 0xcd, 0xc6, 0x4f, 0x49, 0xb8, 0x44, 0x18, 0x97, 0xee, 0xed, 0x1c, 0x3a, 0xf1, 0x39, - 0x4d, 0x98, 0x53, 0xe0, 0x53, 0x1b, 0x42, 0x1d, 0x5f, 0x86, 0x0a, 0x62, 0xea, 0x1e, 0x07, 0x93, - 0xba, 0x12, 0xf5, 0xa6, 0x85, 0x0b, 0x84, 0xd1, 0x43, 0x27, 0x3e, 0xcf, 0x1c, 0xdf, 0x46, 0xc1, - 0x71, 0x21, 0x5f, 0x85, 0x46, 0x27, 0xc2, 0x8d, 0xb1, 0x06, 0x9a, 0x8a, 0x09, 0x5f, 0x14, 0x48, - 0x91, 0x30, 0x4b, 0xe9, 0x3c, 0x07, 0xc6, 0x52, 0x9e, 0x28, 0xbb, 0xb4, 0x3c, 0x94, 0x6f, 0x02, - 0x1c, 0xdf, 0xc2, 0x21, 0x04, 0xae, 0xa9, 0x6b, 0x9a, 0x1a, 0x1a, 0x48, 0x1e, 0x25, 0x6c, 0x3a, - 0xce, 0x14, 0x0b, 0x2f, 0x83, 0x23, 0xfc, 0xa6, 0x40, 0x43, 0x42, 0x2a, 0x03, 0x9d, 0x04, 0xd4, - 0x82, 0x01, 0x9a, 0x16, 0xc8, 0xf6, 0x59, 0x8f, 0x72, 0xfd, 0x03, 0x92, 0x98, 0x28, 0x7d, 0xe8, - 0x0a, 0x4e, 0x58, 0x6a, 0x05, 0xed, 0x67, 0x3a, 0xe7, 0x7f, 0xca, 0x3e, 0x44, 0x14, 0xeb, 0x5e, - 0x29, 0x8c, 0xeb, 0x70, 0xb9, 0x96, 0x33, 0x03, 0x5b, 0xa4, 0x43, 0x9f, 0xc4, 0x97, 0x60, 0xe0, - 0x33, 0x92, 0x5d, 0x01, 0xdc, 0x82, 0xb1, 0x5f, 0x2f, 0xeb, 0x01, 0xfb, 0x53, 0x56, 0xb7, 0x8c, - 0x98, 0xee, 0xf5, 0xc7, 0x61, 0xeb, 0xee, 0x41, 0x41, 0x6a, 0xdd, 0xbd, 0xae, 0x9c, 0x5e, 0xa6, - 0xbd, 0x7e, 0x8d, 0x65, 0x6c, 0xff, 0xc8, 0xeb, 0x97, 0xc7, 0xd8, 0x31, 0xb8, 0x79, 0xc3, 0x5b, - 0x58, 0xe6, 0xc2, 0x87, 0x43, 0x2d, 0xed, 0xda, 0x0b, 0xd8, 0x4a, 0xc6, 0xe3, 0x76, 0x1c, 0x8d, - 0xb2, 0x58, 0xe6, 0xd3, 0x0a, 0x6d, 0xba, 0xc2, 0xdb, 0x9d, 0x74, 0xa5, 0xc1, 0xf2, 0x4b, 0x90, - 0xab, 0x59, 0x20, 0xa6, 0x7b, 0xd8, 0x30, 0xd3, 0xd5, 0x2c, 0x08, 0x33, 0xe1, 0xf6, 0x05, 0x97, - 0xae, 0x66, 0x01, 0x1b, 0xeb, 0xa9, 0xcc, 0x97, 0x04, 0xc6, 0x71, 0x35, 0x0b, 0x7c, 0xb5, 0x66, - 0x0d, 0x0d, 0x89, 0x7c, 0xca, 0x64, 0x71, 0xae, 0x66, 0x0d, 0x3d, 0xdb, 0x60, 0xeb, 0x0c, 0x85, - 0x40, 0x29, 0x18, 0x8b, 0x66, 0xf6, 0xac, 0x52, 0x17, 0x55, 0xf8, 0x6c, 0xd9, 0x1a, 0xd5, 0x64, - 0xb0, 0xee, 0xd8, 0x10, 0x09, 0x01, 0xc2, 0x7e, 0x7b, 0x0f, 0x92, 0xb7, 0x97, 0x9c, 0xc6, 0xf7, - 0xc6, 0xd9, 0xf9, 0x9a, 0xe1, 0xbe, 0x31, 0x2f, 0xf7, 0xec, 0xb4, 0xc5, 0xab, 0x3a, 0x90, 0x0c, - 0x18, 0x2e, 0x20, 0xc4, 0x33, 0x02, 0xfb, 0x19, 0xc1, 0x59, 0xea, 0xed, 0xe5, 0xc0, 0xad, 0xd3, - 0xb6, 0x03, 0x7e, 0x31, 0x2a, 0xc4, 0xf2, 0x0a, 0xa1, 0x0e, 0xf8, 0xa3, 0xe1, 0x12, 0xa3, 0xfb, - 0x3b, 0x8d, 0x9c, 0x81, 0xab, 0xf8, 0x57, 0xd1, 0x18, 0x18, 0x7d, 0xa2, 0xc4, 0x85, 0x8f, 0x7c, - 0xaf, 0xe9, 0x7d, 0x9f, 0xf9, 0x62, 0xb5, 0x94, 0x0c, 0x84, 0x1b, 0xc8, 0x39, 0x4a, 0xda, 0xe5, - 0x0c, 0x97, 0x16, 0x7b, 0xaf, 0x17, 0x20, 0xde, 0xdc, 0xf6, 0xf6, 0x44, 0x63, 0xa8, 0xb0, 0x38, - 0x4b, 0xf0, 0xa0, 0xd8, 0xb3, 0xa4, 0x18, 0x3a, 0xf0, 0xe4, 0x1c, 0x26, 0x4b, 0x73, 0xc2, 0x31, - 0x80, 0xab, 0x0d, 0x09, 0xc7, 0x50, 0x02, 0x0b, 0xda, 0x63, 0x61, 0xa9, 0x4b, 0xbc, 0xf8, 0x17, - 0xe7, 0x06, 0x66, 0x00, 0x62, 0xd0, 0x35, 0x35, 0xee, 0xd6, 0x43, 0x32, 0x64, 0x5b, 0xda, 0x46, - 0x1a, 0x92, 0xa1, 0x73, 0x5f, 0x66, 0xff, 0x31, 0x8b, 0x90, 0x0c, 0x1b, 0x10, 0x3e, 0x81, 0xf1, - 0xe9, 0x30, 0x56, 0x78, 0x30, 0x77, 0x4a, 0xd7, 0x05, 0x12, 0x5b, 0x60, 0x87, 0x63, 0x30, 0xe1, - 0x61, 0xc0, 0x3a, 0xdb, 0x7b, 0x3a, 0x33, 0xb0, 0xdd, 0x6c, 0xba, 0x8d, 0xed, 0x8c, 0x55, 0x40, - 0xec, 0xb8, 0x4a, 0x59, 0x55, 0x11, 0xeb, 0xb8, 0x4a, 0x59, 0xd5, 0x38, 0x96, 0x39, 0x31, 0x6c, - 0x69, 0xa1, 0x31, 0xda, 0x00, 0xd9, 0x4d, 0x84, 0x55, 0x8e, 0x63, 0x99, 0x23, 0x65, 0x8b, 0xde, - 0x63, 0x2e, 0x34, 0xde, 0x70, 0x4f, 0xe1, 0x57, 0xa2, 0x89, 0x09, 0xb6, 0x40, 0x93, 0x02, 0x71, - 0xf0, 0xaf, 0xdc, 0x3a, 0x61, 0xac, 0x76, 0x8f, 0xa9, 0xa9, 0xf6, 0xe7, 0xd6, 0xf2, 0xeb, 0xd1, - 0x03, 0x86, 0x22, 0x46, 0x4c, 0xc4, 0x61, 0x27, 0xcc, 0xb5, 0xc2, 0x44, 0xfd, 0x62, 0x04, 0x32, - 0xa3, 0x19, 0x86, 0xaf, 0xb2, 0x92, 0x1e, 0xf1, 0xf8, 0x0c, 0xd2, 0xa3, 0xde, 0x15, 0x08, 0x90, - 0x46, 0xd1, 0x51, 0x5d, 0x92, 0xc8, 0xe3, 0x33, 0xa2, 0xcf, 0xb4, 0x21, 0x02, 0xe4, 0x01, 0x0e, - 0x4d, 0x5e, 0x13, 0x0d, 0x49, 0xda, 0x2e, 0x23, 0x41, 0xbc, 0x9e, 0x45, 0x05, 0x9b, 0x02, 0xe1, - 0x06, 0xac, 0x41, 0x18, 0x2b, 0x3c, 0x9e, 0x3b, 0xfb, 0x16, 0x4d, 0x6a, 0x22, 0x9b, 0xa2, 0x7e, - 0xdc, 0x88, 0x17, 0xd1, 0x98, 0x44, 0x53, 0x30, 0x28, 0x25, 0x28, 0x43, 0xc8, 0xbb, 0x3d, 0x6d, - 0xe7, 0x7d, 0x19, 0x4d, 0xb3, 0x81, 0xe1, 0xdd, 0xe0, 0x32, 0xcd, 0x18, 0x26, 0x68, 0xbf, 0xd9, - 0xf8, 0x18, 0x2e, 0x43, 0x7c, 0x0c, 0xef, 0x7f, 0x2a, 0x44, 0x93, 0xaa, 0xe3, 0x81, 0x30, 0x36, - 0x22, 0xa7, 0x12, 0xf2, 0xdb, 0xa8, 0x88, 0x98, 0xe1, 0x13, 0x5d, 0x49, 0xe5, 0x46, 0x59, 0xfc, - 0x89, 0x4f, 0x2b, 0x14, 0x6a, 0x59, 0xd7, 0x8b, 0x9a, 0x5a, 0xdd, 0x0b, 0x5f, 0x26, 0x09, 0xde, - 0x60, 0x16, 0x89, 0x26, 0xbd, 0xbf, 0x63, 0xa8, 0xa5, 0x3d, 0xd5, 0xd7, 0x72, 0x73, 0xb0, 0x03, - 0x52, 0x7e, 0x98, 0x61, 0xfc, 0x5a, 0xdf, 0xfc, 0x06, 0x73, 0x34, 0xd9, 0xa7, 0x71, 0xa0, 0x3f, - 0x5d, 0x70, 0x79, 0x38, 0x16, 0x0d, 0x65, 0x6f, 0x6c, 0xcb, 0x9c, 0x19, 0xc8, 0xf1, 0x6d, 0xd0, - 0x40, 0xf0, 0xfd, 0xd7, 0xc3, 0xb1, 0x12, 0x4b, 0x1c, 0x15, 0xaa, 0xf4, 0x48, 0x94, 0x8c, 0xc2, - 0x18, 0xfd, 0x44, 0x16, 0x7f, 0xec, 0x83, 0x12, 0x0d, 0x1d, 0x66, 0x40, 0x06, 0x64, 0x0c, 0x68, - 0xe6, 0x85, 0x0e, 0x74, 0xcc, 0x3f, 0x88, 0x0a, 0x37, 0xe1, 0x64, 0x09, 0x2a, 0x3f, 0x2b, 0xf2, - 0xc3, 0x0f, 0x7e, 0x3e, 0xe2, 0x71, 0xfe, 0xb5, 0x5a, 0x29, 0x1e, 0x8e, 0x86, 0xd6, 0x4a, 0xc1, - 0x68, 0x24, 0x94, 0x20, 0x06, 0x91, 0x16, 0x35, 0xfc, 0x02, 0x34, 0x19, 0xb2, 0x51, 0x8a, 0x0d, - 0x0d, 0x7a, 0x42, 0x4a, 0xcc, 0xba, 0x8a, 0xfc, 0x56, 0x55, 0xea, 0x7c, 0x27, 0xc3, 0x8d, 0x52, - 0xb4, 0x09, 0xd4, 0xdd, 0xe3, 0xfd, 0xf4, 0x27, 0x5f, 0x8a, 0x26, 0x42, 0xf2, 0x24, 0x9c, 0x04, - 0x54, 0x3d, 0xdd, 0x40, 0x3a, 0xf5, 0xe7, 0x16, 0xab, 0xeb, 0x29, 0x21, 0x35, 0x48, 0xc1, 0x64, - 0x94, 0x84, 0x9b, 0xf0, 0x6b, 0xbf, 0xb1, 0xed, 0x80, 0x3a, 0x3e, 0x52, 0x8d, 0x88, 0xed, 0x80, - 0x5e, 0x84, 0xbf, 0x13, 0x4e, 0x04, 0xea, 0x1a, 0xa4, 0x65, 0xcd, 0xe1, 0x20, 0xde, 0xb0, 0x63, - 0xc9, 0x77, 0x8c, 0xc5, 0xfc, 0x0f, 0xd1, 0xec, 0xc4, 0x96, 0x70, 0xec, 0x47, 0x81, 0x70, 0x72, - 0x79, 0x94, 0x24, 0x62, 0x5a, 0x07, 0xa3, 0xa5, 0xa4, 0xc1, 0x99, 0x1e, 0xfd, 0xc3, 0x81, 0xf1, - 0x53, 0xd1, 0xe8, 0x50, 0x7c, 0xab, 0xbf, 0x29, 0x02, 0x42, 0x9a, 0x9f, 0xfc, 0xf2, 0xb6, 0xba, - 0xd0, 0x03, 0xcc, 0x1a, 0xbf, 0xd7, 0xb4, 0x54, 0xea, 0x39, 0xf3, 0x48, 0x1e, 0x9c, 0x62, 0x38, - 0x39, 0xa7, 0xdd, 0x85, 0x26, 0xa8, 0xcd, 0xf4, 0x08, 0xba, 0xfc, 0xf3, 0xb9, 0x3c, 0x03, 0xde, - 0x6a, 0xb5, 0x42, 0x61, 0x1c, 0xbb, 0xb6, 0xe9, 0xa6, 0xd2, 0xf9, 0xca, 0x1b, 0x68, 0x2c, 0x1b, - 0xf7, 0x17, 0xb8, 0x5a, 0xb9, 0xd5, 0x58, 0xf5, 0x8f, 0xce, 0x67, 0x22, 0xf8, 0x2e, 0x8b, 0x24, - 0xe3, 0x5b, 0x89, 0x06, 0x80, 0x0d, 0x01, 0x4c, 0xbc, 0xa3, 0xd2, 0x97, 0xcf, 0x66, 0xcf, 0x7c, - 0x4c, 0x35, 0x00, 0x0c, 0x80, 0xfb, 0x79, 0x34, 0x29, 0xb7, 0x1b, 0x7e, 0x12, 0x1a, 0xb5, 0x45, - 0xda, 0x4a, 0x78, 0x9f, 0xfa, 0x27, 0xb6, 0x00, 0x08, 0x34, 0x34, 0x49, 0x9a, 0x05, 0x80, 0xfa, - 0xa3, 0xc2, 0xf5, 0x34, 0xe7, 0xfd, 0x77, 0x1c, 0x9a, 0x01, 0x21, 0x9e, 0x8d, 0x83, 0xd3, 0x94, - 0x04, 0x6b, 0xcd, 0x61, 0x3e, 0x9f, 0x94, 0xc5, 0x27, 0x58, 0x2e, 0x34, 0x8b, 0x44, 0x64, 0xcf, - 0x9f, 0x05, 0xad, 0xa1, 0x2c, 0x08, 0x08, 0x35, 0xcb, 0x99, 0x50, 0xc4, 0x56, 0x12, 0x58, 0xd4, - 0x38, 0xd6, 0xe3, 0x82, 0xb0, 0x17, 0xef, 0x3f, 0xba, 0xd0, 0x4c, 0x1b, 0x2c, 0x7e, 0x4b, 0x17, - 0x79, 0xc5, 0x6a, 0x59, 0x7c, 0x09, 0xfd, 0xd0, 0xe7, 0x4c, 0x16, 0x61, 0x2a, 0x3b, 0x75, 0xfa, - 0xba, 0x32, 0xeb, 0xc7, 0xd2, 0x1c, 0x2a, 0x56, 0x3b, 0x59, 0x15, 0xa8, 0x93, 0x1a, 0xbe, 0xf1, - 0x76, 0xf9, 0x19, 0x1a, 0xdd, 0xa0, 0x76, 0x44, 0x17, 0xc0, 0xa3, 0x56, 0x08, 0xe3, 0x4f, 0xcd, - 0xc7, 0xff, 0x92, 0xfd, 0x01, 0xe6, 0xa7, 0xd0, 0x52, 0xdb, 0x1a, 0xc7, 0x77, 0x64, 0x2e, 0x7c, - 0x41, 0xd5, 0x0e, 0x50, 0xe7, 0x7e, 0x06, 0x8d, 0x65, 0xda, 0x8d, 0x68, 0x43, 0x5c, 0xe3, 0xd0, - 0x34, 0x9d, 0x66, 0xd0, 0x0b, 0xdd, 0x0b, 0x35, 0x74, 0xd9, 0x72, 0xd6, 0x5e, 0xa7, 0x5a, 0x8b, - 0x61, 0x57, 0xac, 0x71, 0x5b, 0xb9, 0x6e, 0xcf, 0xb6, 0xf2, 0xfe, 0x85, 0x0b, 0x95, 0x98, 0xc7, - 0xfe, 0xdb, 0xba, 0x03, 0xaa, 0x64, 0xf1, 0x45, 0xf4, 0xbc, 0xcf, 0x96, 0x22, 0xc2, 0x03, 0x2c, - 0x81, 0xf1, 0xca, 0x31, 0xaf, 0xfb, 0x0f, 0xc9, 0xba, 0x5f, 0x17, 0x08, 0x47, 0x92, 0xdf, 0x78, - 0xdd, 0xaf, 0x51, 0xef, 0x85, 0xe1, 0x88, 0x76, 0x11, 0x9e, 0x62, 0xbe, 0x35, 0x85, 0x23, 0x49, - 0xb2, 0xce, 0x01, 0x52, 0x5b, 0xe7, 0x97, 0x4e, 0x68, 0xbe, 0x8b, 0x7e, 0x52, 0x97, 0xb3, 0x58, - 0x71, 0xe3, 0x11, 0x2d, 0x56, 0xf8, 0xdc, 0x9d, 0x59, 0xac, 0x7f, 0x69, 0x58, 0xac, 0x74, 0xec, - 0xbf, 0xad, 0x8b, 0x95, 0xc4, 0x77, 0xb5, 0xa5, 0x88, 0xc0, 0xb3, 0x04, 0x86, 0xe9, 0x37, 0xaf, - 0xd6, 0x17, 0xd0, 0xf8, 0x1f, 0x4a, 0x81, 0x86, 0xe4, 0x66, 0xb2, 0x08, 0x2a, 0xe6, 0xcb, 0xe2, - 0x13, 0x68, 0xae, 0xcf, 0x58, 0x2a, 0x94, 0x28, 0xdb, 0x4e, 0x29, 0xfd, 0x57, 0xd3, 0x1f, 0xb7, - 0xa4, 0x8f, 0x9d, 0x4a, 0xef, 0x39, 0xa5, 0x74, 0x7e, 0x4c, 0x62, 0x85, 0x6e, 0x77, 0xa1, 0x09, - 0x14, 0xf6, 0x0e, 0x4c, 0xc5, 0x72, 0x54, 0xac, 0x59, 0x98, 0x90, 0x7b, 0x2d, 0xf6, 0x5e, 0xd0, - 0x4b, 0x85, 0x12, 0x76, 0x42, 0x4a, 0x93, 0xf1, 0x26, 0xa9, 0x1c, 0xeb, 0x8d, 0xe7, 0xfa, 0x75, - 0x20, 0x6a, 0xfb, 0x95, 0x83, 0x8a, 0x25, 0xde, 0x36, 0xef, 0x41, 0xbb, 0x39, 0x50, 0x12, 0xd2, - 0xf4, 0x93, 0x6b, 0x83, 0x9b, 0xa5, 0xc6, 0x00, 0xdd, 0x5b, 0xf3, 0x73, 0x9f, 0x1f, 0xf1, 0x1b, - 0x91, 0xf6, 0xfc, 0x38, 0x3a, 0xd5, 0xbf, 0x0f, 0xfb, 0x7e, 0x90, 0x02, 0x3a, 0x1e, 0xfb, 0x1e, - 0x85, 0x59, 0xa0, 0x2d, 0x25, 0xa1, 0x7d, 0xce, 0x9e, 0xd0, 0x23, 0x69, 0xc0, 0xc4, 0x9c, 0xe7, - 0x50, 0xc9, 0x0a, 0xe9, 0xf6, 0x0c, 0x87, 0x7f, 0x82, 0xf5, 0x66, 0x23, 0x2b, 0x33, 0x02, 0xec, - 0x0b, 0x7f, 0x9f, 0x46, 0xba, 0x57, 0xcb, 0x2a, 0x16, 0xc9, 0xe2, 0x02, 0x34, 0xdf, 0x67, 0xfb, - 0x75, 0xfa, 0x38, 0xc7, 0x0e, 0xdd, 0xfb, 0x7b, 0xa3, 0x90, 0xfb, 0x95, 0x26, 0x29, 0xbe, 0xb5, - 0x56, 0x8a, 0x37, 0x56, 0x6e, 0x15, 0xf1, 0x0d, 0xa7, 0xa6, 0xda, 0x2f, 0xfd, 0x12, 0x5f, 0xa9, - 0x9e, 0x46, 0x88, 0xa8, 0xb8, 0x37, 0x52, 0x37, 0x3b, 0xf2, 0x4e, 0xa3, 0x17, 0x0b, 0x45, 0xe6, - 0xd0, 0x9b, 0x21, 0xb5, 0x25, 0xd9, 0x6c, 0x6a, 0x4b, 0xf6, 0x85, 0x47, 0x2f, 0x16, 0x8a, 0xcc, - 0xb1, 0x3f, 0x43, 0xfc, 0x42, 0x82, 0x34, 0x63, 0x04, 0x06, 0x48, 0xf3, 0xca, 0xbe, 0xeb, 0x2a, - 0xc6, 0x9f, 0xf4, 0x0f, 0x1d, 0xfa, 0x8c, 0x45, 0x9d, 0x7f, 0x1e, 0x8d, 0x4d, 0x92, 0xd0, 0x29, - 0xea, 0xd7, 0x0a, 0xf4, 0x96, 0x6c, 0xb9, 0x30, 0x36, 0x7d, 0xf6, 0x44, 0xfa, 0xa3, 0x1b, 0x43, - 0x1f, 0x6e, 0xaf, 0xa9, 0xf6, 0x23, 0x5a, 0x53, 0x13, 0xe2, 0x9f, 0x45, 0x88, 0x3c, 0xf0, 0xaa, - 0xcd, 0x0b, 0xf5, 0xf7, 0x66, 0xa6, 0x18, 0x5b, 0xd7, 0x80, 0x9f, 0x29, 0x6b, 0x5d, 0xa3, 0x36, - 0x2e, 0x82, 0xa7, 0x95, 0x68, 0x9c, 0x28, 0xe7, 0xf0, 0x3b, 0x8f, 0x56, 0xc8, 0xa8, 0xf4, 0xa8, - 0xe7, 0xab, 0x56, 0x47, 0x5d, 0x53, 0x1d, 0xe6, 0x40, 0x98, 0x05, 0xb9, 0x44, 0x60, 0x7d, 0x65, - 0xba, 0x5a, 0x53, 0x7d, 0xef, 0xa7, 0xfa, 0x76, 0xa5, 0x0f, 0x92, 0xa0, 0x80, 0xde, 0xfd, 0x2e, - 0xbb, 0x29, 0xc4, 0x6b, 0xee, 0x19, 0x54, 0x14, 0x20, 0x45, 0x64, 0x02, 0x31, 0x61, 0xb4, 0x42, - 0x61, 0x02, 0xf4, 0x4f, 0x7f, 0xfb, 0xb5, 0x1a, 0x7e, 0x33, 0x2a, 0x8a, 0x49, 0xf1, 0xc6, 0x8d, - 0xc1, 0xe4, 0x9b, 0x78, 0x06, 0xc7, 0x0a, 0xbe, 0x5c, 0x0e, 0x6a, 0x3f, 0x6e, 0x50, 0x74, 0x69, - 0x1d, 0x08, 0x3c, 0x8b, 0x06, 0xd5, 0x0f, 0xab, 0xb5, 0x55, 0xc9, 0x37, 0x2b, 0x5e, 0x91, 0xc5, - 0x35, 0x68, 0x95, 0xcf, 0x01, 0x0f, 0xfa, 0x46, 0x4c, 0x52, 0xad, 0x30, 0x7d, 0x7d, 0xc9, 0x69, - 0x23, 0xfe, 0x92, 0xd3, 0xbe, 0xe7, 0xdd, 0xc7, 0xa1, 0x42, 0xb5, 0xa7, 0x04, 0xbf, 0x04, 0x15, - 0xaa, 0xa5, 0xf4, 0x80, 0x35, 0x79, 0x8f, 0x63, 0x28, 0xf8, 0x17, 0x8b, 0xa1, 0x7e, 0x00, 0x77, - 0xd7, 0x22, 0xa4, 0x17, 0x5a, 0xc8, 0xa6, 0x65, 0xac, 0x6c, 0x3a, 0x56, 0x98, 0x6a, 0xca, 0xbf, - 0x8a, 0x33, 0xaf, 0xb2, 0x32, 0xeb, 0x3e, 0x0e, 0x4d, 0xb7, 0x44, 0xf1, 0x16, 0x59, 0x78, 0x25, - 0x39, 0xde, 0x60, 0x00, 0x53, 0x2c, 0x11, 0xb3, 0x38, 0xd0, 0x58, 0x6b, 0x26, 0xaf, 0xec, 0x42, - 0xa8, 0x2a, 0xda, 0xd8, 0x08, 0x39, 0x9b, 0xee, 0xf6, 0x03, 0xbd, 0xda, 0x70, 0xa0, 0x4f, 0x33, - 0x91, 0x7c, 0x6d, 0x32, 0xde, 0x14, 0x4c, 0x0e, 0x77, 0x88, 0xd3, 0xec, 0x35, 0x3a, 0xde, 0xc2, - 0xb8, 0xa1, 0x96, 0xae, 0xcc, 0x7e, 0x62, 0x76, 0xe0, 0xfd, 0xd8, 0x85, 0x26, 0x40, 0x25, 0x39, - 0x09, 0xee, 0x7a, 0xc2, 0xac, 0x30, 0x10, 0xc6, 0x9c, 0xfc, 0x5d, 0xc5, 0x03, 0x32, 0x01, 0x0f, - 0x43, 0x9b, 0xb9, 0xb2, 0xf8, 0x18, 0x9a, 0xe3, 0xcb, 0x41, 0x5f, 0xe0, 0x81, 0x3e, 0xac, 0x71, - 0x86, 0x77, 0x15, 0xc2, 0x46, 0xdb, 0x95, 0x2b, 0x49, 0x88, 0x6e, 0x10, 0x65, 0x88, 0xab, 0x95, - 0x45, 0x95, 0x30, 0x5d, 0xf7, 0x20, 0xc7, 0xd1, 0x59, 0x0c, 0x27, 0xe7, 0x91, 0x02, 0xe2, 0x76, - 0x52, 0xb5, 0x2e, 0x1a, 0x8b, 0x36, 0x44, 0xeb, 0xb7, 0x52, 0x16, 0x76, 0x9d, 0x33, 0xeb, 0x36, - 0x8e, 0x72, 0xb2, 0xd8, 0xc2, 0xb1, 0x92, 0x6d, 0x82, 0x1e, 0x26, 0x65, 0xf0, 0x44, 0x9a, 0xde, - 0xd5, 0xae, 0xec, 0x19, 0x20, 0x61, 0xf5, 0x7b, 0xaf, 0x29, 0xfd, 0xfb, 0x31, 0xf3, 0xec, 0x52, - 0xde, 0x3f, 0x91, 0xde, 0xf5, 0x41, 0xba, 0x7d, 0xdf, 0x57, 0x2d, 0xef, 0xc2, 0x33, 0x75, 0xfa, - 0xd0, 0xf1, 0xf4, 0x81, 0x9d, 0xb4, 0x39, 0xa4, 0x68, 0x56, 0x5b, 0x77, 0x1e, 0x84, 0x97, 0x48, - 0x1c, 0xcd, 0xd6, 0xb2, 0x8b, 0xaf, 0x2b, 0xa7, 0xc5, 0xa7, 0x4c, 0xe2, 0x2c, 0x92, 0x66, 0xb2, - 0x5a, 0x14, 0x95, 0x15, 0x41, 0x80, 0x5d, 0x58, 0x09, 0x6f, 0xcb, 0xe2, 0x9b, 0x34, 0xc0, 0x6e, - 0x34, 0xd8, 0x18, 0xaa, 0xa3, 0x41, 0x76, 0x4b, 0xd3, 0xc7, 0xf6, 0xa6, 0xfa, 0x3f, 0xd4, 0xb2, - 0xc1, 0x92, 0x3c, 0xb0, 0x24, 0xb0, 0xeb, 0x95, 0xd4, 0xc0, 0x41, 0x0a, 0x99, 0xe9, 0x6a, 0x85, - 0x11, 0x68, 0xd1, 0xe9, 0x09, 0x7b, 0xec, 0x6a, 0x4d, 0x1f, 0x26, 0x79, 0xcf, 0xc0, 0x9d, 0x10, - 0x5a, 0x28, 0xfb, 0x0e, 0x03, 0x3c, 0x8d, 0xcd, 0xbb, 0x19, 0x8d, 0xdd, 0x14, 0x6e, 0xc0, 0x66, - 0xba, 0x34, 0x61, 0x99, 0xd5, 0xb2, 0xa9, 0x8c, 0x46, 0x1b, 0x60, 0xd9, 0x60, 0xe7, 0x01, 0xb6, - 0x8d, 0x50, 0x42, 0x52, 0xad, 0x5d, 0xea, 0xcc, 0xee, 0xbf, 0x8e, 0x4f, 0xe5, 0x4f, 0xd3, 0xdd, - 0xfd, 0xe9, 0x4b, 0xc7, 0xfd, 0x2c, 0x58, 0x45, 0xa5, 0x2c, 0xbe, 0x80, 0x96, 0xfa, 0xac, 0xe7, - 0x56, 0x98, 0xc3, 0x46, 0x13, 0x4e, 0xf5, 0x0d, 0xa8, 0x3d, 0xe0, 0x1c, 0xb7, 0x30, 0x5c, 0xb2, - 0x36, 0x3e, 0x29, 0xc4, 0xf9, 0x3a, 0x2b, 0xb7, 0xac, 0x8d, 0xc6, 0x12, 0x34, 0x4a, 0x1a, 0xac, - 0x4d, 0x7a, 0xca, 0xa1, 0xba, 0xa6, 0x44, 0x38, 0x22, 0x25, 0x12, 0xda, 0x12, 0x01, 0x71, 0x43, - 0x2f, 0x16, 0x8a, 0x28, 0xf5, 0xfc, 0x4c, 0x29, 0xff, 0x33, 0xe6, 0xfc, 0x76, 0xe9, 0x16, 0x63, - 0xfa, 0xf9, 0xbd, 0x28, 0xdb, 0x7b, 0x0a, 0x8e, 0x1d, 0xa5, 0xfb, 0xac, 0x72, 0xfd, 0x03, 0xa5, - 0x7d, 0x37, 0x1d, 0xee, 0xae, 0x74, 0x77, 0x3b, 0x9c, 0x45, 0x2a, 0xe1, 0xb1, 0x74, 0x41, 0x9f, - 0x07, 0x68, 0x73, 0xbe, 0x9b, 0x43, 0x13, 0xa8, 0xac, 0xb1, 0x16, 0x8b, 0x65, 0x44, 0xb4, 0x49, - 0xca, 0xe2, 0xab, 0xbe, 0x9c, 0x2a, 0x61, 0x39, 0xf4, 0x92, 0xfe, 0xe8, 0x54, 0xba, 0x7f, 0x6f, - 0x99, 0x87, 0x8e, 0x33, 0xbd, 0xf3, 0x60, 0xb6, 0xa5, 0x2d, 0x88, 0xf7, 0x24, 0x04, 0x3d, 0x04, - 0xa1, 0x2b, 0xfd, 0xf9, 0xb6, 0xcc, 0xd9, 0x5d, 0xe9, 0x9d, 0x07, 0xd5, 0xb9, 0xc0, 0xde, 0xae, - 0x50, 0xf2, 0x75, 0xe5, 0xd4, 0xf8, 0x83, 0xfe, 0x22, 0xda, 0xdc, 0x3f, 0x1a, 0x9a, 0xfa, 0x7f, - 0xe0, 0xcf, 0xf9, 0x20, 0xff, 0x2f, 0x1c, 0x2a, 0x4c, 0x04, 0xa3, 0x9a, 0x17, 0xf2, 0xdf, 0x71, - 0xb2, 0x38, 0xc8, 0xf9, 0xa0, 0x4c, 0xf8, 0x94, 0xab, 0xdb, 0xb2, 0xb1, 0x2e, 0xfc, 0xd6, 0xc6, - 0x70, 0xc8, 0x93, 0xfe, 0xb8, 0x25, 0xf3, 0x99, 0xba, 0xc2, 0x52, 0xd7, 0xbb, 0x55, 0x56, 0x70, - 0xec, 0xd8, 0x7c, 0xdd, 0x1a, 0x41, 0x5d, 0xc6, 0x2a, 0x60, 0x59, 0xfa, 0xc2, 0xc9, 0xf4, 0xa1, - 0x2b, 0x1a, 0x6c, 0xfa, 0x70, 0x6f, 0x66, 0x60, 0x1f, 0x04, 0xea, 0xf0, 0x54, 0xad, 0xae, 0xae, - 0xf4, 0x00, 0xed, 0x3c, 0x35, 0xd5, 0x9e, 0x54, 0x5f, 0xbf, 0x47, 0xef, 0x5e, 0x8b, 0xe1, 0x5e, - 0xa6, 0xd2, 0xb8, 0x65, 0x50, 0xad, 0x25, 0xf2, 0xa4, 0x27, 0x7d, 0xe8, 0x8a, 0xb2, 0xf3, 0x08, - 0x74, 0x0a, 0x40, 0x0e, 0xed, 0xf1, 0xa6, 0xf4, 0x17, 0xd1, 0x11, 0xf9, 0xc7, 0x90, 0x5e, 0xfc, - 0x3f, 0xf0, 0x03, 0x56, 0x15, 0xaf, 0xcb, 0xe2, 0xab, 0x68, 0x83, 0xcf, 0x71, 0x49, 0x69, 0xe6, - 0x09, 0xcc, 0xac, 0xc2, 0x6a, 0x04, 0x6e, 0xfd, 0x25, 0xc7, 0x2c, 0xa2, 0x2f, 0x39, 0x6d, 0xbe, - 0xbd, 0xd7, 0x5c, 0x68, 0xa6, 0x4d, 0xc7, 0x77, 0xe0, 0xa6, 0x46, 0xfd, 0x4b, 0x46, 0x59, 0xfb, - 0x80, 0xd2, 0xf1, 0x61, 0xbb, 0x67, 0x36, 0x6a, 0x8e, 0x01, 0x6d, 0x93, 0xd4, 0x50, 0xb1, 0x5e, - 0x16, 0xfd, 0xa8, 0xd6, 0xe7, 0x8c, 0xa8, 0x25, 0x09, 0x71, 0x5f, 0x94, 0x84, 0x16, 0xda, 0xcb, - 0x71, 0xec, 0x90, 0x78, 0x2f, 0x1a, 0x47, 0xd7, 0x2b, 0xf3, 0x4e, 0x68, 0x28, 0xe3, 0x67, 0x21, - 0x5d, 0x96, 0xd7, 0x62, 0xf0, 0xeb, 0x25, 0x6a, 0x3d, 0xc3, 0x1b, 0x46, 0xe1, 0xa7, 0x19, 0x96, - 0x01, 0x78, 0xd1, 0x38, 0xfa, 0x0b, 0x7f, 0x03, 0x1c, 0xe9, 0x0c, 0x65, 0x7c, 0x89, 0x9e, 0x47, - 0x15, 0xc2, 0xf2, 0x6b, 0x69, 0x51, 0xa7, 0xa2, 0xd1, 0x52, 0x28, 0xac, 0x09, 0xff, 0x7e, 0xf2, - 0xcb, 0xe8, 0xcb, 0x3a, 0x26, 0x27, 0xe2, 0xbe, 0x37, 0x65, 0xc5, 0xd0, 0xf0, 0xcb, 0xe9, 0x37, - 0x67, 0x68, 0xcf, 0x98, 0xe9, 0x41, 0x9a, 0xea, 0xc5, 0x42, 0x11, 0x4c, 0x8a, 0xe1, 0x22, 0x64, - 0xe4, 0x85, 0xa3, 0xbe, 0x1b, 0x5e, 0x58, 0x70, 0x57, 0xf2, 0xc2, 0xc2, 0xef, 0x79, 0x21, 0xb3, - 0x1a, 0x73, 0x36, 0x32, 0x16, 0x8a, 0xf2, 0xe2, 0x85, 0xff, 0xc1, 0x8a, 0x17, 0x42, 0xc7, 0x77, - 0x80, 0x17, 0xfe, 0x42, 0xe3, 0x85, 0x9c, 0x95, 0x71, 0x13, 0x1d, 0x1f, 0x18, 0x27, 0x61, 0x8e, - 0x28, 0xc8, 0x62, 0x39, 0xe1, 0x88, 0x8f, 0x03, 0xf2, 0xd0, 0x67, 0xa6, 0xab, 0x55, 0x69, 0x3b, - 0xab, 0x5c, 0x6a, 0x21, 0xb4, 0x30, 0x33, 0x48, 0x42, 0x56, 0x67, 0xec, 0xa9, 0xf4, 0x43, 0xe8, - 0x6a, 0xea, 0xd1, 0x8e, 0x4d, 0x36, 0x22, 0xde, 0x3c, 0x58, 0xde, 0xa3, 0x6b, 0x41, 0xd6, 0xc7, - 0x1b, 0x68, 0xac, 0x07, 0xa6, 0x88, 0x7f, 0x12, 0x8d, 0xc6, 0x97, 0x51, 0xaa, 0xd6, 0x9e, 0x69, - 0xe1, 0x06, 0x83, 0x9d, 0x7a, 0xe1, 0xe6, 0x4a, 0x80, 0xbd, 0x1b, 0xd1, 0x78, 0x43, 0x85, 0xc5, - 0x5d, 0xd8, 0x2a, 0xee, 0xd2, 0x83, 0xa8, 0x30, 0x1c, 0x09, 0x49, 0x6f, 0x12, 0x96, 0x0b, 0x3f, - 0x54, 0xc8, 0x90, 0x94, 0x08, 0x12, 0x2e, 0x8b, 0xff, 0xf6, 0x66, 0x39, 0xbc, 0x4c, 0x6a, 0x22, - 0x11, 0x29, 0x4e, 0x11, 0xc3, 0x5f, 0xd2, 0x94, 0xe4, 0x4b, 0xcc, 0x37, 0x00, 0xac, 0x0d, 0x67, - 0xe4, 0xff, 0x22, 0xab, 0x44, 0x32, 0x4f, 0x99, 0x84, 0x3b, 0x30, 0x52, 0xd2, 0x18, 0xda, 0x38, - 0x12, 0x43, 0x03, 0xf3, 0x34, 0x46, 0x31, 0x43, 0x82, 0xd3, 0x38, 0x0f, 0x4b, 0x58, 0x40, 0xe6, - 0x0f, 0x47, 0x62, 0xcb, 0xde, 0xd8, 0x9b, 0x19, 0xf8, 0x0c, 0xdb, 0x5e, 0xf4, 0xa4, 0xfb, 0x3e, - 0x4d, 0x1f, 0xfb, 0x80, 0xee, 0x97, 0xc3, 0x43, 0x3b, 0x3a, 0x89, 0x24, 0xfb, 0x27, 0x2e, 0x34, - 0xcb, 0xae, 0xcf, 0x3b, 0xb0, 0x25, 0x36, 0x18, 0xc4, 0x83, 0x99, 0x76, 0x5b, 0x02, 0xae, 0x00, - 0x16, 0xf2, 0x01, 0xa0, 0x66, 0x5e, 0xfe, 0x92, 0x2c, 0xd6, 0xa1, 0x9f, 0xfb, 0x86, 0x41, 0x55, - 0x98, 0x97, 0x3f, 0xfd, 0x94, 0x96, 0x41, 0xf3, 0x46, 0xd8, 0x8a, 0xc6, 0x1b, 0x7a, 0xb6, 0x74, - 0xab, 0xa7, 0x2b, 0xce, 0xa5, 0xaf, 0x38, 0x75, 0x6d, 0xc6, 0xa5, 0x4d, 0x34, 0x53, 0xb3, 0x1f, - 0x7e, 0xa8, 0xa5, 0xc9, 0x78, 0x20, 0x42, 0xc3, 0x80, 0xc1, 0x0f, 0xfd, 0x0d, 0xb2, 0x90, 0x79, - 0x83, 0xf4, 0xfe, 0x45, 0x21, 0x9a, 0x5a, 0x2d, 0xd5, 0x35, 0xd5, 0x93, 0xed, 0x1d, 0x48, 0x6c, - 0xd1, 0x13, 0x54, 0x9b, 0xcf, 0x6e, 0x8f, 0xed, 0xd9, 0x4d, 0x95, 0x82, 0xec, 0x11, 0xfe, 0xa2, - 0xc5, 0x11, 0xee, 0xb1, 0x3d, 0xc2, 0xb5, 0x1e, 0x98, 0x93, 0x7c, 0x83, 0xe9, 0x24, 0xaf, 0x90, - 0xc5, 0x05, 0xcc, 0xc2, 0x9f, 0xa3, 0x1d, 0xd7, 0xe9, 0xf6, 0x33, 0xd9, 0x13, 0x1d, 0xd9, 0xde, - 0x53, 0xd0, 0x5f, 0xa6, 0xab, 0x35, 0x9e, 0x7c, 0x13, 0x36, 0x84, 0x49, 0x61, 0x79, 0xb7, 0x9f, - 0xe0, 0x3b, 0x39, 0x54, 0x14, 0x24, 0xbc, 0x8a, 0x04, 0x3e, 0x58, 0x6c, 0x8a, 0xe9, 0x6f, 0x39, - 0x6b, 0x1a, 0xef, 0x83, 0x27, 0xec, 0x25, 0xb2, 0xb8, 0xc8, 0xa7, 0x75, 0x25, 0x3c, 0xce, 0x2e, - 0x51, 0x62, 0xa2, 0xa8, 0x9f, 0x01, 0x78, 0x7d, 0x62, 0xbe, 0xed, 0xd7, 0x9a, 0xb8, 0x9f, 0xd5, - 0xb9, 0xe6, 0x88, 0x5f, 0xb7, 0x2b, 0x12, 0xb2, 0x18, 0x43, 0x11, 0x9f, 0xcd, 0x0a, 0x13, 0xe6, - 0x64, 0x2f, 0xbe, 0x97, 0xed, 0x3d, 0x60, 0x1e, 0x14, 0x6b, 0x40, 0x9d, 0x73, 0x2a, 0x33, 0xab, - 0x83, 0x39, 0xa2, 0xbf, 0xe4, 0xb4, 0x11, 0x7b, 0xff, 0xdc, 0x85, 0xa6, 0x99, 0x3e, 0x78, 0x07, - 0x98, 0xd2, 0x66, 0xc3, 0x39, 0xfd, 0xc8, 0x30, 0xf3, 0x87, 0x0f, 0x6a, 0x6c, 0x25, 0x0f, 0xac, - 0xc9, 0x9e, 0x36, 0xcc, 0x99, 0x4a, 0xd8, 0xd4, 0xcf, 0x64, 0xf1, 0x75, 0xf4, 0x63, 0x9f, 0x1d, - 0xd6, 0xdf, 0x98, 0x3f, 0xbd, 0x80, 0x26, 0x5b, 0x8c, 0x96, 0x2f, 0x25, 0x26, 0xb9, 0x9c, 0xbd, - 0x49, 0x2e, 0x18, 0xd9, 0x7a, 0x6f, 0x8e, 0x45, 0x13, 0xb1, 0x0a, 0x6d, 0x75, 0x34, 0xd4, 0xd4, - 0x20, 0x2d, 0x6f, 0x08, 0xd4, 0xf3, 0xeb, 0x73, 0x5f, 0x91, 0x9e, 0x95, 0xc5, 0xa7, 0xf5, 0x57, - 0xa4, 0x79, 0x95, 0x55, 0x6b, 0x21, 0xbe, 0x9d, 0x96, 0x79, 0x24, 0xd5, 0xbf, 0x4f, 0x0b, 0x20, - 0x9a, 0xdd, 0x75, 0x29, 0x7d, 0x70, 0x87, 0x16, 0x38, 0x5a, 0x7f, 0x6c, 0x0a, 0xa0, 0x31, 0xcd, - 0x24, 0x8d, 0x2e, 0xcc, 0xd8, 0x0a, 0x59, 0xac, 0xf6, 0xd1, 0x32, 0xe1, 0x19, 0xad, 0x13, 0xf0, - 0x14, 0x28, 0x55, 0x4e, 0xbf, 0xbb, 0x6e, 0xe5, 0xb2, 0x0a, 0xcf, 0xc2, 0xf9, 0xc2, 0x82, 0xf9, - 0x4b, 0xca, 0x16, 0xce, 0x5f, 0xf8, 0xf4, 0xfc, 0xc5, 0xea, 0x7f, 0x8b, 0xe7, 0x2f, 0x9a, 0x97, - 0xdc, 0xf2, 0x74, 0x42, 0xfd, 0x7b, 0xc9, 0xfc, 0x45, 0x73, 0xfd, 0xb4, 0x0f, 0xbe, 0x8d, 0x43, - 0x45, 0x8d, 0x18, 0x11, 0xcd, 0xe2, 0x1a, 0x47, 0x42, 0xd5, 0x0a, 0x85, 0xd7, 0x32, 0x03, 0xad, - 0xa9, 0x81, 0x2b, 0xf0, 0xba, 0x53, 0xba, 0xb2, 0xa9, 0x4e, 0x12, 0x6b, 0x6b, 0xd6, 0x4a, 0xf1, - 0x66, 0x29, 0x7e, 0x73, 0xb0, 0x43, 0xfd, 0x5d, 0x15, 0x8d, 0x24, 0xe3, 0xd1, 0x86, 0x06, 0x5c, - 0xb0, 0x2c, 0x19, 0x0c, 0x91, 0xf2, 0xb5, 0xc1, 0xcd, 0x92, 0xda, 0x89, 0x5a, 0xbc, 0xa5, 0xa9, - 0x4e, 0x6a, 0x90, 0x92, 0x5f, 0xb5, 0x6c, 0x8b, 0x37, 0x45, 0x92, 0xe1, 0x46, 0x29, 0x73, 0xa1, - 0x7d, 0xae, 0x5f, 0xfb, 0x0a, 0xbf, 0x18, 0x15, 0x6d, 0x6a, 0x08, 0xd4, 0xeb, 0xb7, 0x3d, 0x10, - 0x26, 0xb4, 0x42, 0xa1, 0x18, 0x76, 0x90, 0xb2, 0x77, 0xb7, 0x5f, 0x2b, 0x54, 0x65, 0x09, 0xf5, - 0xef, 0x6a, 0xf5, 0x2c, 0x61, 0x1c, 0xb0, 0xb5, 0x42, 0x61, 0x1c, 0xb4, 0x22, 0x56, 0xbc, 0x5a, - 0x39, 0xbf, 0x1c, 0x8d, 0x0b, 0x49, 0x9b, 0x02, 0x4d, 0x0d, 0x20, 0x3e, 0x91, 0x57, 0x22, 0x9c, - 0x5f, 0xd8, 0x50, 0x21, 0x4c, 0x84, 0x0e, 0xe0, 0x22, 0xa1, 0xb4, 0x0c, 0xfa, 0x0d, 0xd5, 0x7c, - 0x05, 0x1a, 0x2d, 0x45, 0xf0, 0x93, 0x2b, 0x78, 0xfa, 0xe0, 0x1e, 0x48, 0x91, 0x30, 0x85, 0x68, - 0xe3, 0xf6, 0xe2, 0xbc, 0x2f, 0xbd, 0xa7, 0x08, 0x3f, 0x22, 0xd5, 0xfc, 0x53, 0xfa, 0x05, 0xb6, - 0x48, 0x7f, 0x05, 0xa2, 0x65, 0xc2, 0x44, 0x1a, 0xe6, 0xf0, 0x43, 0x65, 0xa0, 0x3f, 0xdb, 0xd2, - 0xa6, 0xdf, 0x6f, 0x9f, 0x42, 0x63, 0x9a, 0xf0, 0x5b, 0x37, 0xcd, 0xe1, 0x05, 0x0d, 0x49, 0x19, - 0x6d, 0x48, 0x1e, 0xbd, 0xd5, 0x86, 0xa4, 0x86, 0xaf, 0x40, 0xc5, 0xb8, 0x0f, 0x6c, 0xb5, 0x8e, - 0xf4, 0x37, 0x35, 0xbd, 0x34, 0x27, 0x8f, 0xa0, 0x5e, 0xc1, 0x2f, 0x45, 0x08, 0xba, 0xc1, 0x8d, - 0xc7, 0x32, 0x26, 0xef, 0x7a, 0xb1, 0x30, 0x0e, 0x3e, 0x4a, 0x4d, 0xde, 0xf5, 0x1a, 0x3e, 0x09, - 0x33, 0xc5, 0x78, 0xd1, 0xbc, 0x2a, 0x8b, 0xeb, 0x7d, 0x5a, 0xa1, 0x50, 0x93, 0x3e, 0xbe, 0x23, - 0xdb, 0xbb, 0x1d, 0x68, 0x44, 0xe2, 0xee, 0x86, 0x23, 0xc9, 0x45, 0x42, 0x79, 0x5d, 0x34, 0xda, - 0x50, 0x9e, 0x48, 0xc6, 0xc3, 0x91, 0xfa, 0xf2, 0x50, 0x13, 0x58, 0x06, 0x94, 0x37, 0x06, 0x62, - 0xa4, 0x2c, 0x91, 0xb9, 0xd0, 0xae, 0x1c, 0xeb, 0xcf, 0x9c, 0x68, 0x81, 0x56, 0x73, 0xfd, 0x5a, - 0xa7, 0xbc, 0x1f, 0x8d, 0x57, 0xff, 0xc6, 0x73, 0x85, 0xbd, 0x67, 0xc6, 0x63, 0xbb, 0x5d, 0x6c, - 0x5b, 0x6f, 0xac, 0x11, 0x4a, 0xc8, 0xfa, 0xc2, 0xfe, 0x79, 0xea, 0x41, 0xd2, 0x32, 0x48, 0xee, - 0xca, 0x46, 0x40, 0xfe, 0xc7, 0xaa, 0x9c, 0x52, 0x2f, 0xbd, 0x89, 0x3d, 0x71, 0x2c, 0xb2, 0xb7, - 0xe3, 0x13, 0xc3, 0xaf, 0x42, 0x80, 0xa5, 0x3a, 0x40, 0x0b, 0xd3, 0xc9, 0x4a, 0xec, 0x6e, 0x4f, - 0x1f, 0xd8, 0x99, 0x6e, 0x39, 0x93, 0x3e, 0x7e, 0x62, 0xe8, 0x5c, 0x47, 0xf6, 0x4c, 0xab, 0xb2, - 0xf3, 0x88, 0x1f, 0x60, 0xf8, 0x28, 0x2a, 0x8c, 0xe3, 0x58, 0x17, 0x13, 0xad, 0xc3, 0x38, 0xac, - 0x69, 0x6a, 0xac, 0x93, 0x20, 0xa6, 0x45, 0xe5, 0x73, 0xb2, 0xf8, 0x8c, 0x0f, 0xc0, 0x85, 0x05, - 0xd9, 0x5d, 0x64, 0x71, 0xa5, 0xfa, 0xfa, 0x55, 0x24, 0x5a, 0x06, 0x75, 0xe6, 0x02, 0x09, 0x97, - 0xe0, 0x0a, 0xd3, 0xf1, 0x9e, 0xf2, 0xe1, 0x67, 0xea, 0x2a, 0x86, 0x86, 0xfc, 0x57, 0x9c, 0x31, - 0x10, 0xeb, 0x24, 0x3c, 0x33, 0xbf, 0x07, 0x77, 0x6c, 0xb6, 0x46, 0x38, 0xcf, 0x29, 0xd7, 0x3f, - 0xa0, 0xbb, 0x75, 0x29, 0xd9, 0xc3, 0x38, 0x5b, 0x8e, 0xba, 0xb0, 0x71, 0x8e, 0xb4, 0xcc, 0xfe, - 0x63, 0xe9, 0x03, 0x3b, 0xbf, 0x6a, 0x79, 0x97, 0x48, 0xfd, 0xb5, 0xda, 0x18, 0x98, 0x8e, 0x2a, - 0x3c, 0xe1, 0x58, 0xf3, 0xe2, 0xf2, 0x70, 0xac, 0x79, 0x49, 0x79, 0xa8, 0x29, 0xd0, 0xe0, 0x81, - 0xf1, 0x01, 0x03, 0xd3, 0xb8, 0x23, 0x1b, 0x61, 0x59, 0xed, 0x10, 0xfb, 0x37, 0x01, 0x83, 0x7c, - 0xbd, 0xec, 0xa7, 0xe0, 0xe7, 0xa4, 0xe5, 0x41, 0x81, 0x1e, 0x52, 0x03, 0x6d, 0xd0, 0x5c, 0xed, - 0xdf, 0x10, 0x4b, 0x96, 0x06, 0x5b, 0xc8, 0xe5, 0xda, 0xc2, 0x63, 0x10, 0xc5, 0x3c, 0xd3, 0x73, - 0x22, 0xb3, 0x77, 0x3b, 0xc4, 0xae, 0xc1, 0x9c, 0x57, 0x1d, 0x00, 0xf0, 0x3c, 0xf0, 0x7a, 0xfa, - 0xca, 0x05, 0x8b, 0x97, 0x9a, 0xc8, 0x6b, 0x8c, 0x8a, 0x98, 0xc8, 0x6b, 0xec, 0xc8, 0xcd, 0xb0, - 0x23, 0x97, 0x5e, 0x87, 0x39, 0x8e, 0x37, 0x87, 0xe3, 0x80, 0x94, 0x6b, 0xe4, 0x26, 0x82, 0xc6, - 0x4d, 0x0a, 0x86, 0x53, 0xfe, 0x6b, 0x5c, 0xc4, 0xcd, 0x6c, 0xac, 0x42, 0xfd, 0x9b, 0x78, 0xf9, - 0xcf, 0xc9, 0x5d, 0xfe, 0xa3, 0x71, 0xd0, 0x82, 0x9c, 0x05, 0xbd, 0x80, 0x2e, 0xe8, 0x31, 0xc3, - 0x2d, 0x68, 0xba, 0x4e, 0x17, 0xd2, 0x75, 0x5a, 0x34, 0xec, 0x3a, 0xa5, 0x2b, 0x2d, 0x27, 0xe2, - 0x6f, 0xb1, 0x29, 0xe2, 0xaf, 0xb7, 0x1a, 0x21, 0xfd, 0x4b, 0xfc, 0x0c, 0x54, 0xdc, 0x1c, 0x68, - 0x08, 0x87, 0x30, 0x7b, 0x04, 0x3a, 0xeb, 0x05, 0x0e, 0xbe, 0x08, 0x0b, 0xd1, 0x58, 0xe6, 0xeb, - 0xaa, 0x80, 0xd7, 0x18, 0x8e, 0xe0, 0x0e, 0x0a, 0xfd, 0xea, 0x9f, 0xb8, 0x24, 0xf0, 0x26, 0x09, - 0x7f, 0xa5, 0xfe, 0xe9, 0x4d, 0x17, 0xa0, 0x19, 0x38, 0x39, 0xbb, 0x94, 0xb3, 0x40, 0xe8, 0xe5, - 0xe1, 0xde, 0x3d, 0xdd, 0xdf, 0x35, 0x9f, 0xee, 0x9b, 0xb0, 0x17, 0x86, 0x76, 0xba, 0xd7, 0xde, - 0xce, 0xd3, 0x1d, 0xd2, 0x3c, 0x91, 0xfb, 0x89, 0x76, 0xb4, 0x6f, 0x84, 0x15, 0x4a, 0x72, 0xb9, - 0x58, 0xc6, 0x81, 0xa3, 0xbb, 0xab, 0x72, 0x2e, 0xb6, 0x50, 0xa0, 0xe0, 0x02, 0xcf, 0xee, 0x43, - 0x60, 0xc7, 0x5f, 0x57, 0x16, 0xca, 0x9c, 0xab, 0x88, 0xf3, 0x6b, 0x50, 0xfc, 0x8b, 0xcc, 0xc5, - 0x8a, 0x89, 0x12, 0xa4, 0x5f, 0xac, 0xa6, 0x18, 0xbb, 0xa1, 0x07, 0xaa, 0xae, 0x5a, 0x08, 0xc9, - 0x62, 0x00, 0x6d, 0xf4, 0x39, 0x2e, 0x03, 0x61, 0x0a, 0x49, 0xdc, 0xdf, 0xbf, 0x8f, 0xed, 0xee, - 0x4b, 0x8e, 0x4e, 0xe8, 0x97, 0x1c, 0xa5, 0xfb, 0x97, 0x9c, 0x86, 0x3d, 0xab, 0x7a, 0x53, 0x38, - 0x34, 0xd3, 0xe6, 0x0b, 0xdf, 0xbd, 0x48, 0x4f, 0x63, 0xa6, 0x38, 0x8f, 0x48, 0x78, 0xd8, 0x12, - 0x69, 0xe7, 0x98, 0x29, 0xff, 0x50, 0x40, 0x0d, 0xe3, 0xef, 0xbb, 0x0d, 0xf5, 0xb6, 0x69, 0x3f, - 0x6d, 0xfc, 0x96, 0xf7, 0xd3, 0xdd, 0xbb, 0x91, 0x74, 0x01, 0xd3, 0xbc, 0x91, 0x9c, 0xa6, 0x5f, - 0x98, 0x02, 0x2d, 0x6f, 0x7d, 0x23, 0xfd, 0x23, 0x47, 0x7d, 0x16, 0xee, 0x86, 0x8d, 0xe4, 0x97, - 0xc5, 0x97, 0xd1, 0x6a, 0x9f, 0xf3, 0x88, 0x84, 0xe9, 0x96, 0x48, 0xdb, 0xd9, 0x50, 0xfe, 0x59, - 0x01, 0x9a, 0x01, 0xfe, 0x49, 0xdf, 0x6f, 0xa1, 0xdb, 0xb9, 0x85, 0x5e, 0x46, 0xe3, 0xa8, 0xb4, - 0xa6, 0x6d, 0xa3, 0x62, 0x88, 0xcf, 0x60, 0xa8, 0x10, 0x4a, 0x0c, 0x1b, 0x86, 0x75, 0xcb, 0x33, - 0xc0, 0x8d, 0xf8, 0xec, 0x39, 0x3e, 0x74, 0xe4, 0xa4, 0xf5, 0x96, 0x71, 0x9a, 0x6e, 0xf5, 0xec, - 0x51, 0x5b, 0x7e, 0xb3, 0x2d, 0x63, 0xf3, 0x85, 0x3b, 0xb8, 0x65, 0x1c, 0x47, 0x24, 0x4c, 0xb7, - 0x44, 0xda, 0x6e, 0xcb, 0xfc, 0x71, 0x01, 0x93, 0x94, 0xed, 0xfb, 0x0d, 0x73, 0xff, 0x6e, 0x98, - 0x3a, 0x59, 0xdc, 0x88, 0x7e, 0xea, 0x73, 0x98, 0x6c, 0x61, 0x8a, 0x66, 0xd5, 0x76, 0x8b, 0xdb, - 0xa5, 0xd7, 0x85, 0xa6, 0x5b, 0xf6, 0x7f, 0x07, 0x74, 0xaf, 0x7e, 0xc3, 0x83, 0xd0, 0x6c, 0xcb, - 0x18, 0xca, 0xfa, 0x10, 0x8d, 0xb1, 0x9f, 0x18, 0x63, 0x42, 0xcb, 0x14, 0x4b, 0x0e, 0x38, 0x32, - 0xa6, 0x81, 0xf9, 0x6c, 0xbf, 0xf7, 0x5c, 0xd8, 0x7c, 0x62, 0xd9, 0x9b, 0x49, 0x29, 0x1e, 0x09, - 0x34, 0xac, 0x89, 0x86, 0xa4, 0xb5, 0xd8, 0x63, 0x9e, 0x6e, 0xc0, 0x9f, 0xa2, 0xb1, 0x91, 0x68, - 0x48, 0x32, 0x86, 0x06, 0xf8, 0x46, 0x9b, 0x90, 0xed, 0x8f, 0x5f, 0x6c, 0x7a, 0x56, 0x2c, 0xb1, - 0xb4, 0xf9, 0x4e, 0xf5, 0xf7, 0x33, 0x6b, 0x89, 0x84, 0x4f, 0x77, 0x1c, 0x39, 0x25, 0x44, 0xe6, - 0xfc, 0xf9, 0x54, 0x5f, 0x7b, 0xfa, 0xe0, 0xb5, 0x6c, 0x6b, 0x57, 0xba, 0xfb, 0x3c, 0x5d, 0x53, - 0xec, 0x28, 0xbc, 0x7f, 0x3a, 0x0a, 0x3f, 0x9b, 0x5a, 0xf5, 0x75, 0x6f, 0xb8, 0xe7, 0x2c, 0x66, - 0x8c, 0x56, 0x69, 0xa8, 0x54, 0xbc, 0x96, 0xa6, 0xd4, 0x05, 0x12, 0xd2, 0x92, 0xc5, 0x99, 0xc1, - 0x83, 0x99, 0xe3, 0xea, 0xc4, 0x00, 0x11, 0x60, 0x39, 0xa9, 0xf7, 0xcc, 0x89, 0x6f, 0x48, 0x75, - 0x1b, 0x59, 0x47, 0xde, 0x42, 0xeb, 0xc4, 0x60, 0x3f, 0x92, 0xea, 0x18, 0x6f, 0xca, 0x0d, 0x02, - 0x24, 0x54, 0xcc, 0x6d, 0x2d, 0x3c, 0x4c, 0xac, 0xca, 0x8d, 0x11, 0xd1, 0x41, 0xb3, 0x04, 0x6f, - 0x64, 0xfe, 0x09, 0x6f, 0x18, 0xba, 0xd2, 0x0e, 0x15, 0x47, 0xfa, 0xdb, 0x4c, 0xa6, 0xdd, 0xaa, - 0x6e, 0xe3, 0x50, 0xf1, 0xea, 0x40, 0x0c, 0x6c, 0x98, 0xf9, 0xa5, 0xda, 0x63, 0x3d, 0x67, 0xed, - 0x7b, 0xa9, 0x81, 0x82, 0xa1, 0x39, 0x31, 0x5e, 0x27, 0x8d, 0xdc, 0xcf, 0xa0, 0xb1, 0x4c, 0xf1, - 0x88, 0x5c, 0x2b, 0xff, 0x78, 0x14, 0x18, 0x27, 0x05, 0x92, 0xc1, 0xcd, 0x90, 0x67, 0x64, 0xad, - 0x94, 0x4c, 0x86, 0x23, 0xda, 0xf1, 0x16, 0x40, 0xc5, 0xd8, 0x78, 0x84, 0x09, 0xda, 0x82, 0x13, - 0x31, 0xea, 0xa5, 0xc2, 0x22, 0x70, 0x33, 0x01, 0x25, 0x20, 0xd1, 0xb0, 0xd6, 0x85, 0xdf, 0x2a, - 0xaf, 0x0b, 0xbf, 0xb5, 0x31, 0x21, 0x25, 0xe7, 0x96, 0x79, 0x32, 0x1f, 0xf6, 0x28, 0xed, 0xbb, - 0x35, 0x4d, 0x5a, 0x5d, 0xf8, 0x2d, 0xbf, 0xde, 0x9e, 0xff, 0x39, 0x1a, 0x83, 0x7f, 0x68, 0xb1, - 0x58, 0x97, 0xcb, 0x62, 0x95, 0x8f, 0x96, 0x09, 0x4f, 0xb3, 0xdd, 0xd7, 0x54, 0x97, 0xd2, 0xc7, - 0xd4, 0x72, 0xf8, 0x03, 0xbb, 0x78, 0x58, 0x7f, 0x83, 0x76, 0xc1, 0xff, 0x8a, 0x43, 0x08, 0xb8, - 0x31, 0x3e, 0x6b, 0x20, 0xc8, 0xc2, 0x36, 0x4e, 0x16, 0x7f, 0xd7, 0xc7, 0x94, 0x0b, 0x31, 0xfd, - 0x6f, 0x98, 0xcc, 0xa1, 0xb6, 0xdd, 0x99, 0xeb, 0x3d, 0xea, 0x2a, 0xc1, 0x66, 0x4e, 0xca, 0x47, - 0x87, 0xb4, 0x00, 0x0c, 0xa9, 0xbe, 0xdd, 0xa9, 0xc1, 0xe3, 0xa0, 0x22, 0x24, 0x2f, 0x47, 0x38, - 0x53, 0x11, 0x80, 0x95, 0xe6, 0x8c, 0xc6, 0x13, 0x8e, 0x6d, 0xa4, 0x01, 0x0a, 0x36, 0x6e, 0x8e, - 0x26, 0x92, 0x1b, 0x1b, 0xc2, 0x89, 0xe4, 0x5c, 0x3f, 0xf3, 0x75, 0xea, 0x90, 0xe4, 0x38, 0x1d, - 0x34, 0x54, 0xa3, 0x36, 0x30, 0x65, 0x7b, 0x9b, 0xd2, 0x73, 0x8d, 0x18, 0x1c, 0x0c, 0x12, 0x13, - 0x1c, 0x8b, 0xd6, 0xb7, 0xc8, 0x24, 0x16, 0xb3, 0x51, 0x41, 0xd4, 0x9d, 0x0e, 0x51, 0x6f, 0x48, - 0x99, 0x30, 0x8e, 0x04, 0x01, 0xdf, 0xb9, 0x57, 0x79, 0xff, 0x98, 0x16, 0x08, 0x84, 0x7f, 0x0a, - 0x15, 0x49, 0xf1, 0x78, 0x34, 0xbe, 0x3a, 0x51, 0xcf, 0x66, 0x44, 0xd0, 0x0a, 0x85, 0x71, 0x06, - 0xb6, 0xa2, 0x95, 0xf3, 0x4b, 0x50, 0x71, 0x1c, 0x10, 0xad, 0x09, 0xb1, 0xaf, 0x35, 0x7a, 0xa9, - 0x50, 0x04, 0xb8, 0xd6, 0x54, 0xfb, 0xf5, 0x42, 0xcd, 0x55, 0xa0, 0x70, 0xa4, 0xae, 0x02, 0x06, - 0xf7, 0x88, 0x2a, 0x54, 0xbc, 0x16, 0x2f, 0x98, 0xc8, 0xa6, 0x28, 0x3f, 0xc3, 0xb4, 0xee, 0xd9, - 0x25, 0x5b, 0x92, 0xb3, 0x64, 0xb5, 0xa5, 0xe6, 0x3d, 0x5d, 0x80, 0x1e, 0x52, 0xe7, 0x20, 0xfc, - 0x16, 0x35, 0x7f, 0xfe, 0x61, 0x54, 0xb7, 0x5d, 0xbe, 0x2f, 0x76, 0x53, 0x18, 0x15, 0x05, 0x1a, - 0x1a, 0x30, 0xa9, 0x08, 0xff, 0xc7, 0xa9, 0xb7, 0xb4, 0x42, 0xe1, 0x79, 0x12, 0xf5, 0x99, 0xd9, - 0x16, 0x06, 0xa4, 0xa8, 0x41, 0x3b, 0xa6, 0x7e, 0xeb, 0xcd, 0xc1, 0x0e, 0xcd, 0x9c, 0x0e, 0xbb, - 0x0d, 0xfa, 0xb5, 0x9e, 0xf8, 0x83, 0x1c, 0x21, 0x18, 0xa3, 0x9b, 0x30, 0x79, 0xcd, 0x6a, 0x93, - 0x56, 0xf9, 0x53, 0x59, 0x7c, 0xcd, 0xa7, 0x37, 0x10, 0x56, 0x67, 0x4f, 0x6f, 0x23, 0xa3, 0x60, - 0x3e, 0xa8, 0x1e, 0x32, 0xcc, 0x70, 0xd2, 0x07, 0x2e, 0x66, 0x06, 0x5a, 0x4b, 0xcd, 0x18, 0xeb, - 0x81, 0xe0, 0xc0, 0xfc, 0xde, 0xaf, 0xf7, 0x7c, 0x7b, 0x36, 0xab, 0xdb, 0x6a, 0xa1, 0xdc, 0xdf, - 0x3b, 0x75, 0x85, 0x61, 0xa7, 0x8e, 0xcc, 0x77, 0xc5, 0xb0, 0x59, 0x97, 0xa3, 0x22, 0xf5, 0x10, - 0xa6, 0xd1, 0x60, 0xa2, 0x75, 0xe0, 0x8c, 0x48, 0x9f, 0x4e, 0xe8, 0x6f, 0x7e, 0x16, 0x42, 0x5a, - 0xf6, 0x66, 0xd8, 0x11, 0x05, 0x7e, 0xa6, 0xc4, 0xfb, 0xb7, 0xa3, 0xd1, 0xb4, 0x15, 0x52, 0x92, - 0xce, 0x81, 0xda, 0x67, 0xe2, 0xbe, 0xda, 0xad, 0x1b, 0xc1, 0x3f, 0x5e, 0x3b, 0xf8, 0x2c, 0x94, - 0x7b, 0x94, 0x90, 0x44, 0xb9, 0x47, 0xc1, 0x05, 0x9e, 0x38, 0x66, 0x80, 0x03, 0x39, 0xde, 0x26, - 0xba, 0x72, 0x8f, 0x42, 0xa9, 0x87, 0xeb, 0xf8, 0x84, 0x14, 0x88, 0x07, 0x37, 0xab, 0xb7, 0x41, - 0x29, 0x42, 0x13, 0xab, 0xff, 0x8e, 0x2c, 0x6e, 0xf5, 0x19, 0x6b, 0x84, 0xcd, 0xe9, 0xb3, 0x27, - 0x32, 0x97, 0xdf, 0x4f, 0xef, 0xed, 0xce, 0x7c, 0xf6, 0x2b, 0xd8, 0x0e, 0x37, 0x07, 0x77, 0xc2, - 0xa8, 0x95, 0xbd, 0x1d, 0xe9, 0x43, 0x57, 0x94, 0xde, 0x6b, 0xe0, 0x1a, 0x52, 0x53, 0x5b, 0x0e, - 0x7f, 0x28, 0x7b, 0x77, 0x97, 0xb3, 0xd9, 0xaf, 0xca, 0x75, 0x9f, 0x22, 0x7c, 0x1b, 0xcc, 0xde, - 0xf8, 0x30, 0x7b, 0xa2, 0x83, 0xed, 0xf8, 0xe6, 0x60, 0xbb, 0xdf, 0xf8, 0x61, 0xbe, 0x83, 0xc3, - 0xa9, 0xde, 0x9a, 0x25, 0xb2, 0xf2, 0xa6, 0x9b, 0x56, 0x5e, 0x4d, 0x24, 0xb9, 0x48, 0x80, 0xa5, - 0xf7, 0x63, 0x59, 0xdc, 0xe0, 0x03, 0x70, 0x61, 0x35, 0x84, 0x5a, 0x4c, 0x7f, 0x74, 0x22, 0x35, - 0x70, 0xe5, 0xe6, 0x60, 0x17, 0x2e, 0xbd, 0x39, 0xd8, 0xb5, 0x20, 0xd5, 0xd7, 0x2f, 0xd6, 0x4b, - 0x91, 0xa4, 0x32, 0xf8, 0xae, 0xd2, 0xd7, 0x77, 0x73, 0xb0, 0x63, 0x21, 0x2d, 0x81, 0x54, 0x67, - 0x9a, 0x8c, 0xa0, 0xec, 0x3c, 0x92, 0xea, 0xdb, 0x4d, 0x22, 0x36, 0x42, 0xaf, 0xfc, 0x0a, 0x54, - 0x88, 0xa3, 0x91, 0x62, 0xfb, 0x80, 0x82, 0xca, 0x85, 0xb2, 0x38, 0xdf, 0x07, 0x25, 0xc2, 0xa3, - 0x70, 0xab, 0xca, 0x7e, 0x7e, 0x55, 0x39, 0xb3, 0x2b, 0x75, 0x5d, 0x65, 0x1d, 0x5a, 0x57, 0x1a, - 0x9f, 0x5c, 0xe0, 0x07, 0x68, 0xfe, 0xa7, 0xa8, 0x28, 0x16, 0xa8, 0x97, 0xd6, 0x86, 0xdf, 0x02, - 0x4b, 0x81, 0x42, 0xc8, 0xa7, 0xaa, 0x15, 0x0a, 0x02, 0x78, 0x37, 0x41, 0xa7, 0x10, 0x03, 0xf0, - 0xe6, 0x60, 0x47, 0xba, 0xbb, 0x45, 0x39, 0x79, 0xe6, 0xc9, 0x05, 0x0b, 0xcc, 0x5d, 0x0b, 0x0b, - 0xfc, 0x5a, 0xeb, 0x0a, 0xf5, 0x1a, 0x85, 0x96, 0xf8, 0xec, 0x76, 0x88, 0x96, 0x57, 0x04, 0xb8, - 0x6b, 0x57, 0x2b, 0x99, 0x31, 0x88, 0x85, 0xfc, 0x07, 0x2e, 0xec, 0x1f, 0x9d, 0xd3, 0xf0, 0xfe, - 0xe6, 0x6f, 0xaf, 0x18, 0xf8, 0x9b, 0x29, 0xef, 0x6a, 0x2e, 0x39, 0x6c, 0x42, 0x40, 0x1a, 0x38, - 0x5d, 0x07, 0x87, 0x1e, 0xb4, 0x6a, 0xa7, 0x4a, 0xf5, 0xb0, 0x88, 0x20, 0x7d, 0x16, 0x59, 0x11, - 0x6e, 0x66, 0x45, 0x90, 0x5c, 0x3c, 0xf4, 0x37, 0x36, 0x7a, 0x8c, 0x26, 0x03, 0x0d, 0x10, 0x4c, - 0xd7, 0x0f, 0x3f, 0xf8, 0x32, 0xe7, 0x5c, 0x4a, 0xea, 0xb1, 0xa4, 0x7e, 0x8f, 0x0c, 0xe7, 0x4f, - 0x39, 0x54, 0x44, 0x8b, 0xf8, 0xa9, 0x68, 0xb4, 0x2a, 0xcd, 0x12, 0xbe, 0x5b, 0xe0, 0x27, 0xbf, - 0x70, 0xae, 0xd6, 0x18, 0x11, 0x8d, 0x5c, 0xe1, 0x18, 0xcf, 0xa3, 0x82, 0x70, 0xac, 0x79, 0x09, - 0x79, 0x9c, 0xc6, 0x7f, 0xab, 0x03, 0x55, 0xa1, 0x19, 0x3f, 0x0c, 0xed, 0xb7, 0x3a, 0x50, 0x7d, - 0xb7, 0x8e, 0xa7, 0xbb, 0x66, 0xaa, 0x96, 0xfa, 0x90, 0xf8, 0x5f, 0x90, 0xcc, 0x86, 0xcf, 0xa2, - 0x62, 0x7c, 0xd3, 0x17, 0xe3, 0x52, 0x80, 0x3c, 0x36, 0xcf, 0xb4, 0xc2, 0xa2, 0x8a, 0x02, 0xf9, - 0x75, 0x78, 0xef, 0x22, 0x34, 0xde, 0x50, 0xc7, 0xe4, 0x99, 0x1d, 0x6f, 0x97, 0x67, 0xd6, 0xfb, - 0xd5, 0x68, 0x6c, 0xda, 0xcb, 0x9e, 0xdc, 0x35, 0xa1, 0xc4, 0xf7, 0x87, 0xc7, 0xf7, 0x87, 0xc7, - 0xbd, 0x74, 0x78, 0xbc, 0x6a, 0x3a, 0x3c, 0xb0, 0xf1, 0x8f, 0x7e, 0x78, 0xcc, 0xb3, 0x3c, 0x3c, - 0xd8, 0xee, 0x08, 0x00, 0x96, 0xf1, 0x99, 0x73, 0x83, 0x84, 0x4e, 0x19, 0x66, 0x8f, 0x08, 0x33, - 0x2d, 0x8f, 0x8f, 0x9a, 0x6a, 0x72, 0x80, 0x7c, 0xe9, 0x42, 0xb3, 0x6d, 0x7b, 0xb8, 0xbf, 0xcf, - 0x91, 0x57, 0x0d, 0xe7, 0xc8, 0x13, 0x0e, 0xe7, 0x08, 0x4b, 0x95, 0x7c, 0x8e, 0x93, 0x2e, 0x0e, - 0x4d, 0x77, 0x68, 0x7e, 0xdb, 0x4e, 0x95, 0x45, 0x86, 0x53, 0x65, 0xb6, 0x15, 0x3f, 0xae, 0xa9, - 0x4e, 0x50, 0xee, 0x41, 0x06, 0xb7, 0x16, 0x4d, 0xcc, 0xa9, 0xb0, 0x3d, 0x62, 0x4a, 0x51, 0x41, - 0xa3, 0xa4, 0x05, 0x44, 0x30, 0x19, 0xd6, 0xae, 0x96, 0xd4, 0x4e, 0x55, 0x08, 0xef, 0x4f, 0x50, - 0x81, 0xfa, 0x8b, 0x9f, 0x89, 0x10, 0xe6, 0x6b, 0x1b, 0x93, 0x96, 0x77, 0xfa, 0x87, 0x50, 0x11, - 0x54, 0x87, 0x73, 0x2f, 0xf5, 0xbc, 0x1b, 0x15, 0x6b, 0x0e, 0x57, 0xe4, 0x0c, 0x1b, 0x53, 0xb7, - 0xa5, 0x32, 0xfc, 0x56, 0x4d, 0xc8, 0xdb, 0x32, 0x0a, 0x4d, 0x5d, 0x21, 0x25, 0xd5, 0x61, 0x27, - 0xc0, 0x43, 0xe7, 0xfe, 0x3a, 0x02, 0x7e, 0x0c, 0xc7, 0x34, 0x73, 0x04, 0x0c, 0x37, 0x97, 0x60, - 0xfb, 0xa9, 0xb5, 0x12, 0xc6, 0xc3, 0x8c, 0x25, 0xa8, 0x8b, 0x20, 0xad, 0xa0, 0x89, 0x22, 0x6c, - 0xc8, 0x27, 0x3c, 0x9e, 0x3e, 0x7e, 0x2d, 0xbd, 0xbb, 0x87, 0x32, 0x85, 0x04, 0xb9, 0xc9, 0x77, - 0xf7, 0x2b, 0x47, 0xce, 0x66, 0x7b, 0x4f, 0xa7, 0xdf, 0x6b, 0x23, 0x61, 0x51, 0x6e, 0xb8, 0xf0, - 0x1d, 0xce, 0xd8, 0xc7, 0xfd, 0xcd, 0x1f, 0x56, 0x6b, 0xfc, 0xc1, 0x32, 0xce, 0x09, 0x15, 0xd0, - 0x7e, 0x14, 0x4e, 0x6e, 0x56, 0xd7, 0xfe, 0x70, 0x4c, 0xe1, 0xff, 0xe3, 0xd0, 0xa4, 0xdc, 0x36, - 0xf7, 0x81, 0x70, 0xa7, 0x31, 0x89, 0xa2, 0x61, 0x99, 0x44, 0x7f, 0x01, 0xbe, 0xac, 0x60, 0x5d, - 0x12, 0xee, 0x6e, 0xb3, 0x14, 0xdc, 0x72, 0x5f, 0x6d, 0xe4, 0xf5, 0x5a, 0xa8, 0x7f, 0xd0, 0x7f, - 0x2f, 0x95, 0xc5, 0x0a, 0x2d, 0xd4, 0xff, 0x82, 0x9a, 0xda, 0xe6, 0xc5, 0x20, 0xa5, 0x95, 0x79, - 0x88, 0x48, 0xd5, 0x7b, 0x4d, 0x13, 0x96, 0x58, 0x31, 0x49, 0xe9, 0xb8, 0x36, 0xd4, 0xb6, 0x9b, - 0xc6, 0xfe, 0xe7, 0x5f, 0x87, 0xbc, 0xa4, 0xcc, 0x23, 0x2e, 0xce, 0xb5, 0xa0, 0x15, 0xe2, 0xae, - 0x97, 0x8c, 0xa8, 0x6b, 0xad, 0x2d, 0x5f, 0x8f, 0xc6, 0x6c, 0x91, 0xb6, 0xe2, 0xbe, 0x0b, 0x71, - 0xdf, 0x58, 0xd3, 0x48, 0xcb, 0x84, 0x17, 0x94, 0xb6, 0xcb, 0x43, 0xfb, 0x7b, 0x94, 0x0b, 0x87, - 0x68, 0xff, 0xd9, 0x33, 0x1f, 0xa7, 0x8f, 0xee, 0x55, 0x76, 0xf4, 0xeb, 0x97, 0xd1, 0xbd, 0xbb, - 0xcb, 0x61, 0xe1, 0x66, 0x2e, 0xb4, 0x6b, 0xf0, 0xf4, 0x45, 0x8b, 0xf4, 0x54, 0xa1, 0x0a, 0x3e, - 0xe8, 0x29, 0x9f, 0xed, 0x12, 0x10, 0xa6, 0x93, 0xbc, 0x9c, 0x96, 0x37, 0xdd, 0x6b, 0x2e, 0xac, - 0xf4, 0xcd, 0x6d, 0x79, 0x7f, 0xb3, 0xa0, 0x65, 0x06, 0x16, 0x64, 0x7b, 0x6d, 0x1c, 0x86, 0xf5, - 0x08, 0x7f, 0xbd, 0xcd, 0x85, 0x26, 0x90, 0x3c, 0x82, 0xab, 0xa1, 0x2d, 0xff, 0x1b, 0x0e, 0x8d, - 0xa7, 0xe6, 0x83, 0xb8, 0x82, 0x37, 0x71, 0x38, 0x43, 0xb5, 0x5f, 0xfa, 0xa5, 0xfb, 0xe1, 0x61, - 0x20, 0x12, 0x31, 0x6f, 0xb3, 0x2c, 0xae, 0xe1, 0xc7, 0x83, 0xe1, 0x21, 0x29, 0x77, 0x2f, 0x35, - 0xfc, 0xbc, 0x39, 0xd8, 0x41, 0x72, 0x8c, 0xe0, 0x1d, 0x0c, 0x89, 0xa2, 0xb2, 0xdb, 0xf6, 0x0f, - 0xbd, 0x7b, 0x9a, 0x04, 0x5a, 0x91, 0x3b, 0x32, 0xbb, 0xce, 0x67, 0x7e, 0xbd, 0x0b, 0x7e, 0xbe, - 0xfb, 0xef, 0x53, 0x1f, 0xb8, 0x66, 0x7b, 0xdd, 0xe5, 0xc6, 0x6f, 0x97, 0x37, 0x2f, 0xa4, 0x25, - 0x15, 0x9c, 0x8f, 0x6f, 0x71, 0xa1, 0xa9, 0x7e, 0x29, 0x19, 0xdf, 0x6a, 0x18, 0xd2, 0xba, 0x40, - 0x62, 0x0b, 0x6f, 0x7a, 0xe9, 0x33, 0xc3, 0xa9, 0xc8, 0x3d, 0x96, 0x0f, 0x58, 0x22, 0xe6, 0x3d, - 0xc8, 0xc9, 0xe2, 0x4f, 0xf8, 0x87, 0x86, 0x76, 0xec, 0xce, 0xf6, 0x1e, 0x30, 0x60, 0x06, 0x7e, - 0x51, 0xee, 0x17, 0x86, 0xe4, 0x9d, 0x38, 0x5b, 0x95, 0x5a, 0x45, 0x50, 0x3a, 0x79, 0x29, 0xfb, - 0xd9, 0x29, 0x08, 0x44, 0xa3, 0xe2, 0xbf, 0x63, 0x77, 0xfa, 0xe0, 0xc5, 0x54, 0xdf, 0x2e, 0xa5, - 0x73, 0x1f, 0x0b, 0x06, 0x1d, 0x60, 0x84, 0x17, 0x7a, 0xcb, 0xec, 0x11, 0x2e, 0x7f, 0x5b, 0x73, - 0xc9, 0x7d, 0xa7, 0x3c, 0xae, 0x0e, 0x53, 0x25, 0xc1, 0x1f, 0x73, 0xe8, 0x41, 0x48, 0xa2, 0xa7, - 0xf2, 0x66, 0x62, 0x3a, 0xb2, 0x29, 0x5c, 0xcf, 0x9b, 0x78, 0xb9, 0x5e, 0xa7, 0x22, 0x3e, 0xcb, - 0xa9, 0x3a, 0x11, 0xf3, 0x26, 0x64, 0xb1, 0x92, 0x7f, 0x68, 0x8b, 0x56, 0x08, 0x69, 0x2c, 0xd3, - 0x2d, 0x67, 0x20, 0x07, 0x9f, 0xfb, 0x51, 0xbd, 0x2a, 0x7b, 0xe3, 0x68, 0x7a, 0xcf, 0x29, 0x82, - 0xb3, 0x11, 0x0c, 0x63, 0x55, 0xea, 0x7e, 0xc4, 0x12, 0xab, 0x68, 0x53, 0xa8, 0x5c, 0xef, 0x45, - 0x45, 0xe6, 0x5d, 0x17, 0x9a, 0x6e, 0x85, 0x4c, 0x55, 0x34, 0x12, 0x91, 0x82, 0x49, 0x7e, 0x8e, - 0xfd, 0xa0, 0x09, 0x88, 0x8a, 0xda, 0xa3, 0x79, 0x40, 0x25, 0x62, 0xde, 0x03, 0x9c, 0x2c, 0xbe, - 0xc4, 0x7b, 0x18, 0x14, 0xb7, 0xb7, 0x95, 0x2b, 0x27, 0x0f, 0x66, 0xae, 0xef, 0xcb, 0xf6, 0xdc, - 0x18, 0x3a, 0xd4, 0x03, 0xf9, 0x13, 0xdc, 0x8f, 0x31, 0x98, 0xe2, 0x72, 0x82, 0xa9, 0x06, 0x0d, - 0x70, 0x18, 0xd5, 0x4a, 0xfe, 0x45, 0x3b, 0x54, 0x13, 0xea, 0xfc, 0x61, 0xab, 0x89, 0x77, 0x28, - 0x48, 0xc2, 0x30, 0xa5, 0x41, 0x82, 0xe4, 0x7f, 0xe6, 0xd0, 0xf8, 0x9a, 0xc6, 0x58, 0x34, 0x9e, - 0xb4, 0xdd, 0xa3, 0x86, 0x6a, 0xcb, 0x3d, 0x9a, 0x03, 0x91, 0x88, 0x79, 0x3f, 0xe0, 0x64, 0x31, - 0xc4, 0x3f, 0xa4, 0xf4, 0x0e, 0x2a, 0x6d, 0x24, 0xfc, 0x84, 0x71, 0x05, 0xaf, 0x60, 0xab, 0x00, - 0xc7, 0x52, 0x72, 0xaa, 0x9c, 0xec, 0x4a, 0xf5, 0xef, 0xa3, 0x51, 0xa0, 0x54, 0x20, 0xe5, 0xfd, - 0x63, 0xd9, 0xf7, 0xae, 0x57, 0x78, 0xa8, 0xbb, 0x38, 0x33, 0x8f, 0x73, 0x31, 0x21, 0x1e, 0xf3, - 0x3e, 0xec, 0xb0, 0x92, 0xc3, 0x78, 0x74, 0xea, 0x8c, 0x6f, 0x77, 0xa1, 0xf1, 0xd4, 0x0c, 0xd3, - 0x06, 0x59, 0x43, 0xb5, 0x25, 0xb2, 0x39, 0x10, 0x89, 0x98, 0xb7, 0x97, 0x93, 0xc5, 0xb7, 0xf9, - 0xf1, 0x60, 0xc1, 0x49, 0x39, 0xd2, 0x2f, 0x0c, 0x3f, 0xb5, 0xb4, 0x1c, 0xd9, 0x5e, 0x12, 0x1e, - 0x33, 0x35, 0xd0, 0x06, 0xfe, 0x25, 0xc4, 0xf0, 0x93, 0x02, 0xe0, 0x6b, 0x79, 0x57, 0xf6, 0xcc, - 0x69, 0xa5, 0x73, 0x5f, 0x6a, 0x60, 0x20, 0x75, 0xfd, 0x00, 0x61, 0x65, 0xd8, 0x0d, 0x25, 0xd3, - 0xd5, 0x9a, 0xdd, 0x71, 0x4e, 0x79, 0xff, 0xac, 0xd2, 0x71, 0x50, 0x79, 0xff, 0x6c, 0xea, 0x7a, - 0xf7, 0x57, 0x2d, 0xef, 0x62, 0x1a, 0x3c, 0xe1, 0x7e, 0x2c, 0xbf, 0xdd, 0xac, 0x12, 0xa2, 0xc3, - 0x85, 0x1e, 0x10, 0x43, 0x21, 0x7c, 0x5d, 0x5c, 0x17, 0xa5, 0xc4, 0x30, 0xdd, 0x08, 0x28, 0x08, - 0x39, 0x3d, 0xdd, 0x1e, 0x7b, 0x00, 0x38, 0x24, 0xbd, 0x97, 0x39, 0x59, 0x7c, 0x8b, 0xe7, 0x53, - 0x7d, 0xef, 0xa7, 0x8f, 0x5e, 0x81, 0x81, 0x83, 0xea, 0xc8, 0x1d, 0x82, 0xac, 0xd5, 0x35, 0xb5, - 0x37, 0x07, 0x3b, 0x32, 0x03, 0x47, 0xc8, 0xfc, 0xfe, 0xea, 0xa8, 0xf2, 0xfe, 0x71, 0x80, 0x28, - 0x4d, 0xf5, 0xef, 0xab, 0xda, 0xb0, 0x9a, 0x44, 0xc9, 0x95, 0x3b, 0x6a, 0xaa, 0xab, 0x74, 0x2b, - 0x0c, 0x5c, 0x38, 0x17, 0xa7, 0x43, 0x20, 0xb4, 0xc9, 0x7c, 0xd8, 0xa7, 0xb4, 0x5d, 0xd6, 0x88, - 0x01, 0x6e, 0xc7, 0x98, 0x12, 0x0b, 0xbc, 0x4f, 0xe4, 0xc9, 0xd7, 0x22, 0xd1, 0x90, 0xa4, 0x92, - 0xe3, 0x7f, 0xe7, 0xd0, 0x54, 0xb0, 0x35, 0xc4, 0xd8, 0x2c, 0x8f, 0x47, 0x1b, 0x29, 0x4d, 0xbc, - 0x66, 0x5f, 0x56, 0x0d, 0x8e, 0x92, 0xe5, 0x11, 0x47, 0x18, 0x42, 0x99, 0x1d, 0x9c, 0x2c, 0xbe, - 0xa2, 0x52, 0x66, 0x57, 0x2e, 0x65, 0x9e, 0xa5, 0x94, 0x51, 0xba, 0x2f, 0x2a, 0x1f, 0xb5, 0x64, - 0x06, 0x3f, 0x51, 0x7a, 0xae, 0x01, 0x84, 0x3a, 0x40, 0x2a, 0x6d, 0xa9, 0xa2, 0x96, 0xdc, 0x91, - 0x43, 0x12, 0x8c, 0xf0, 0x3c, 0xdf, 0x48, 0x10, 0xe6, 0xfb, 0x5c, 0x68, 0x3a, 0x7e, 0xed, 0xb4, - 0x41, 0x79, 0x7e, 0x2e, 0x3a, 0x0c, 0x30, 0x81, 0x31, 0xa0, 0x5f, 0x9e, 0x37, 0x3c, 0x21, 0xc5, - 0x55, 0x4e, 0x16, 0xdf, 0xe0, 0x4b, 0xd2, 0xed, 0xd7, 0x86, 0x76, 0x74, 0x5a, 0x10, 0xe4, 0x75, - 0xbb, 0x9a, 0x52, 0xa5, 0xa3, 0x2d, 0xbd, 0xeb, 0x3c, 0x31, 0xf3, 0x69, 0xdf, 0xa5, 0xee, 0x00, - 0x88, 0xad, 0x79, 0xf4, 0x0a, 0x40, 0x7c, 0xd5, 0xb2, 0xad, 0x4a, 0xd4, 0xfe, 0xcc, 0x21, 0x56, - 0xe6, 0x42, 0x3b, 0xf0, 0x8b, 0xa7, 0x7c, 0x4f, 0xda, 0x13, 0x2c, 0x61, 0xa2, 0x58, 0xa2, 0x7c, - 0x5e, 0x79, 0x9d, 0x8a, 0x13, 0x3f, 0x00, 0xb1, 0x20, 0xcc, 0xf6, 0x43, 0x95, 0x5a, 0x66, 0x9a, - 0x32, 0x0b, 0x25, 0x8f, 0xad, 0xed, 0x98, 0x7b, 0x5e, 0x9e, 0xd0, 0x84, 0x72, 0x03, 0x9c, 0x2c, - 0xfe, 0x2e, 0x4f, 0x7c, 0x9c, 0x09, 0x52, 0x03, 0xad, 0x99, 0xae, 0xd6, 0x1c, 0x4c, 0x61, 0xff, - 0x81, 0xed, 0x92, 0x7b, 0x35, 0x80, 0x6b, 0x76, 0x68, 0x60, 0x34, 0x95, 0xea, 0xdf, 0x67, 0x6e, - 0x07, 0x2d, 0x4c, 0x17, 0x90, 0xa4, 0x14, 0x09, 0x4a, 0x11, 0xb8, 0x9b, 0x61, 0x02, 0x2e, 0xe6, - 0x05, 0x0b, 0x02, 0x6a, 0x19, 0x04, 0x13, 0xe5, 0x6f, 0x33, 0x56, 0x6f, 0xef, 0x94, 0x43, 0x6e, - 0x1c, 0xfe, 0x80, 0x0b, 0xc2, 0x0f, 0xe2, 0xd5, 0x50, 0x13, 0xa1, 0xeb, 0x6d, 0xae, 0x55, 0xaa, - 0x2d, 0x23, 0x0c, 0x25, 0x97, 0x2f, 0x1f, 0x50, 0x42, 0xab, 0x33, 0x9c, 0x2c, 0xfe, 0x92, 0xf7, - 0x82, 0x6e, 0x92, 0xb2, 0xe1, 0xbe, 0x5d, 0xc4, 0x90, 0x81, 0x89, 0xc5, 0xed, 0x5e, 0x49, 0x1e, - 0xf8, 0x41, 0x40, 0xb2, 0x02, 0xb9, 0x39, 0xd8, 0xa1, 0x9c, 0x7e, 0x37, 0x7d, 0xb4, 0x3b, 0x7d, - 0x6c, 0x2f, 0xa8, 0x81, 0xc1, 0xb7, 0x50, 0x2d, 0xdf, 0x79, 0x44, 0xb9, 0x71, 0x3d, 0x73, 0xe0, - 0x54, 0xb6, 0xf7, 0x94, 0xd2, 0x32, 0x08, 0x1b, 0x92, 0x1f, 0xd1, 0x86, 0xfc, 0x84, 0x64, 0x1b, - 0x5d, 0x1d, 0xc0, 0xeb, 0x4f, 0xa7, 0xcc, 0x13, 0x56, 0xe8, 0xe6, 0x42, 0x51, 0xda, 0x94, 0xe5, - 0x07, 0x4c, 0xa8, 0xf3, 0x39, 0x27, 0x8b, 0xef, 0xf0, 0xa5, 0xd6, 0xd4, 0x69, 0xc4, 0xad, 0x0c, - 0x34, 0x7a, 0xc5, 0x92, 0x46, 0x66, 0xc0, 0x11, 0x52, 0xaa, 0x9c, 0x9f, 0x97, 0x27, 0xa5, 0xe0, - 0x53, 0xfc, 0xaf, 0x39, 0x34, 0xde, 0xc0, 0x5a, 0xcc, 0x47, 0xb8, 0xa1, 0xda, 0xf2, 0x08, 0xcf, - 0x81, 0x48, 0xc4, 0xbc, 0xeb, 0x65, 0x71, 0x8e, 0x7a, 0xa7, 0x38, 0x3e, 0x74, 0xe4, 0x24, 0x3d, - 0xc1, 0x27, 0xc3, 0xcf, 0x4c, 0xfb, 0x35, 0xa5, 0xa7, 0x8b, 0x14, 0x82, 0x88, 0xe9, 0xcb, 0xf3, - 0xa8, 0xe5, 0x2f, 0x73, 0x08, 0xad, 0x90, 0x34, 0xd1, 0x6a, 0xa6, 0xc5, 0x6e, 0x67, 0xc6, 0x39, - 0xcb, 0xa9, 0x3a, 0x11, 0xf3, 0x6e, 0x92, 0xc5, 0x27, 0xf9, 0xf1, 0x86, 0x29, 0x73, 0xcf, 0x21, - 0xba, 0x77, 0x7c, 0x84, 0xd0, 0x3c, 0xee, 0xd5, 0x9a, 0x2d, 0x24, 0x88, 0x15, 0x30, 0x6a, 0x3e, - 0xdf, 0x51, 0xef, 0x20, 0xfb, 0xb4, 0x16, 0x22, 0x4f, 0xd1, 0xd1, 0x3f, 0x6a, 0xb5, 0xc0, 0x8c, - 0x30, 0x96, 0x97, 0x1c, 0x2b, 0xb0, 0x44, 0xcc, 0x7b, 0x82, 0x93, 0xc5, 0x4d, 0xfc, 0xa3, 0x64, - 0xfc, 0xc7, 0xf6, 0xa6, 0xfa, 0xce, 0x81, 0x21, 0x67, 0xaa, 0x6f, 0x57, 0xa6, 0xab, 0x95, 0x80, - 0x92, 0xe5, 0xb7, 0x94, 0x2c, 0x3f, 0x06, 0x80, 0x48, 0x10, 0x90, 0x30, 0x09, 0xa3, 0x99, 0x6b, - 0xfc, 0x43, 0xa3, 0x5c, 0x03, 0xd3, 0x17, 0xf8, 0x05, 0x16, 0xf8, 0x93, 0xe8, 0x5a, 0x89, 0xf2, - 0xb7, 0xb5, 0x50, 0x6f, 0xba, 0xc4, 0xcc, 0x7f, 0xec, 0x42, 0x63, 0xc1, 0x06, 0x1a, 0x48, 0x30, - 0xcb, 0x0a, 0x37, 0x06, 0xf7, 0xd9, 0x8e, 0xf5, 0x89, 0x98, 0xf7, 0x4b, 0x4e, 0x16, 0xcf, 0x73, - 0xfc, 0x64, 0xc3, 0x24, 0x12, 0x1c, 0xf7, 0x73, 0xa0, 0x29, 0x25, 0x14, 0xc1, 0x9b, 0x07, 0xd4, - 0x15, 0x06, 0x38, 0x76, 0x87, 0x0d, 0x9d, 0xb8, 0x06, 0x70, 0x10, 0x71, 0x2c, 0x67, 0x9f, 0xa5, - 0x2f, 0x9c, 0x84, 0xda, 0xaf, 0x5a, 0xde, 0x25, 0x4d, 0xc0, 0xb8, 0x11, 0x17, 0x0e, 0xd1, 0xec, - 0x70, 0xd0, 0x84, 0x8d, 0x49, 0x0a, 0x60, 0xcc, 0xdd, 0x78, 0x06, 0xef, 0x70, 0x37, 0xe6, 0xff, - 0x96, 0x43, 0x0f, 0x60, 0x44, 0x71, 0x8c, 0x17, 0x4a, 0xab, 0x39, 0x96, 0xb4, 0x60, 0x41, 0x2c, - 0xaf, 0x4f, 0x16, 0x50, 0x70, 0xe7, 0x7f, 0x89, 0x7f, 0x88, 0xc6, 0x55, 0x3d, 0xaf, 0xb4, 0x5d, - 0x32, 0xd2, 0x6e, 0x1e, 0x5b, 0x45, 0x2f, 0x87, 0xef, 0xb3, 0x3f, 0xe1, 0xd4, 0x03, 0xdb, 0x60, - 0x8c, 0xd3, 0x23, 0xbc, 0xd5, 0xa5, 0x21, 0xb1, 0x39, 0x10, 0x97, 0x42, 0xda, 0x02, 0xf8, 0x37, - 0x0e, 0xf1, 0x62, 0x28, 0xb4, 0xb6, 0xa9, 0x2e, 0x22, 0x25, 0x75, 0x49, 0xf9, 0x51, 0x0b, 0x41, - 0x38, 0x07, 0xc6, 0x72, 0x2b, 0x58, 0x81, 0x25, 0x62, 0xde, 0xc3, 0x9c, 0x2c, 0xbe, 0xce, 0x97, - 0x90, 0x81, 0x5e, 0x1d, 0x50, 0xde, 0x3f, 0xae, 0x5c, 0xd8, 0xab, 0x5e, 0x0d, 0xb1, 0xba, 0xd0, - 0xfd, 0x82, 0x5d, 0x4d, 0x99, 0x27, 0xdb, 0xf6, 0x45, 0xb6, 0xa7, 0x37, 0xd5, 0xbf, 0x6f, 0x43, - 0x6d, 0xd5, 0xbc, 0xaa, 0x35, 0x35, 0xe9, 0xb3, 0x27, 0x94, 0x41, 0x2c, 0x3a, 0x31, 0xc0, 0x70, - 0x66, 0x7b, 0xcb, 0xf3, 0x15, 0x7a, 0x12, 0x78, 0x8c, 0x09, 0x55, 0x34, 0xfe, 0x0b, 0xf5, 0xc6, - 0x8f, 0x15, 0x14, 0x1b, 0xc2, 0xf1, 0x64, 0x53, 0xa0, 0x81, 0x92, 0xe0, 0x71, 0x6b, 0x45, 0x8d, - 0x11, 0x4a, 0x25, 0x42, 0x69, 0x7e, 0x80, 0x89, 0x98, 0x57, 0x92, 0xc5, 0xe7, 0x78, 0x9e, 0x38, - 0xe0, 0x1e, 0xe9, 0x4a, 0xef, 0x3a, 0x06, 0x78, 0xbb, 0x1f, 0x33, 0x97, 0x95, 0xa5, 0xbe, 0xf8, - 0x28, 0xdd, 0x7e, 0x38, 0xd5, 0xbf, 0x67, 0x73, 0x34, 0x91, 0x64, 0x96, 0xaa, 0xc7, 0x3b, 0xdd, - 0x02, 0xcd, 0x66, 0x46, 0x8f, 0xf3, 0x87, 0x1c, 0x7a, 0x10, 0x4e, 0x80, 0xe1, 0x50, 0xb2, 0x82, - 0xb2, 0x44, 0xc9, 0x1a, 0x30, 0x11, 0xf3, 0xbe, 0x26, 0x8b, 0xa5, 0x2a, 0x4a, 0xd8, 0x4d, 0x85, - 0x45, 0xc9, 0xa2, 0x0c, 0x0f, 0x7f, 0xae, 0xef, 0x71, 0x87, 0xe1, 0x1b, 0xd8, 0xf4, 0x7f, 0xe4, - 0xd0, 0x43, 0x70, 0x19, 0x35, 0x7e, 0xf8, 0x95, 0xa6, 0x68, 0x32, 0x60, 0x96, 0x43, 0x6d, 0x41, - 0x55, 0x8c, 0xe6, 0x8d, 0x00, 0x3a, 0x11, 0xf3, 0x06, 0x55, 0xb4, 0x48, 0x34, 0x8f, 0xa1, 0xb6, - 0xdd, 0x43, 0xbf, 0xfa, 0xc8, 0x5d, 0x42, 0xfc, 0x3d, 0x19, 0x84, 0xa0, 0x06, 0x98, 0xaf, 0x7b, - 0x5e, 0x9e, 0x68, 0x95, 0xff, 0x52, 0xfd, 0x8a, 0x3a, 0x4f, 0x67, 0x39, 0x34, 0x66, 0x85, 0x84, - 0xc5, 0x3b, 0xde, 0xea, 0x68, 0x64, 0xd2, 0x09, 0x9a, 0x19, 0xaf, 0x56, 0x4f, 0xe4, 0x9d, 0x9f, - 0xc8, 0xe2, 0x02, 0x1e, 0x01, 0x97, 0x50, 0x2b, 0xdc, 0x5e, 0xf6, 0xe0, 0xac, 0x81, 0xcc, 0x80, - 0xea, 0xed, 0x1a, 0xe4, 0x67, 0xfd, 0xd8, 0xb4, 0x66, 0x13, 0xaa, 0xdc, 0x56, 0xfe, 0x36, 0x49, - 0x28, 0xf8, 0x0e, 0xff, 0x2f, 0x1c, 0x1a, 0x4b, 0xbe, 0x08, 0x41, 0x50, 0x6d, 0x86, 0xc3, 0x44, - 0x68, 0x34, 0xdf, 0x1a, 0x0d, 0x30, 0x64, 0xd8, 0x2a, 0x67, 0xa8, 0xe7, 0xa7, 0xea, 0xe3, 0x66, - 0x5f, 0xcc, 0xdc, 0xab, 0x9d, 0x70, 0x60, 0x21, 0xcb, 0x52, 0x7d, 0x03, 0xd9, 0xd3, 0xdb, 0x40, - 0xe1, 0xa0, 0xf4, 0x5e, 0x4b, 0xef, 0x39, 0xa5, 0xb4, 0xef, 0xce, 0xfc, 0xba, 0x17, 0xcc, 0x29, - 0xa0, 0x1b, 0x07, 0x29, 0xc1, 0x88, 0x6e, 0x79, 0x58, 0xc5, 0xf1, 0x2c, 0x87, 0x26, 0xf8, 0xa5, - 0x60, 0x34, 0x1e, 0xd2, 0xd0, 0xb6, 0x50, 0x83, 0xb2, 0xf5, 0x14, 0x73, 0xb7, 0x39, 0x88, 0x21, - 0x8d, 0xea, 0xee, 0x5d, 0x2b, 0x8b, 0xf3, 0xf9, 0x12, 0xe5, 0xfa, 0x01, 0xa5, 0xed, 0x94, 0x19, - 0x0f, 0x37, 0xcf, 0xd6, 0x80, 0x41, 0x03, 0x1c, 0x50, 0xde, 0x69, 0x36, 0xc3, 0x56, 0x57, 0xd2, - 0xff, 0xcd, 0x21, 0xa4, 0xa7, 0x7f, 0xe1, 0x6d, 0x54, 0x3a, 0xec, 0x7a, 0xf2, 0x3a, 0x81, 0x90, - 0xb9, 0x39, 0x8e, 0xd5, 0x3e, 0x93, 0x60, 0xdd, 0xab, 0x9f, 0x22, 0x63, 0xac, 0xcf, 0x2d, 0xf9, - 0x36, 0xd5, 0x3e, 0x33, 0xdc, 0x4e, 0x88, 0xff, 0x9d, 0x0b, 0x4d, 0x36, 0xe8, 0xab, 0xc0, 0x8f, - 0x8b, 0xf7, 0x39, 0x2a, 0xb5, 0x00, 0x88, 0x92, 0xe2, 0x89, 0xbc, 0x60, 0x09, 0x4d, 0x86, 0x40, - 0xbe, 0x99, 0x4f, 0x58, 0x03, 0x46, 0x01, 0x24, 0x77, 0x45, 0xee, 0x50, 0x47, 0xa5, 0x62, 0x72, - 0xfd, 0x7c, 0xe6, 0xcc, 0x00, 0x78, 0x58, 0x10, 0x92, 0xbd, 0x35, 0x32, 0xf8, 0x32, 0x4f, 0xaa, - 0xaf, 0x3f, 0xd5, 0xbf, 0x1d, 0x14, 0xfb, 0xca, 0x85, 0xc3, 0x43, 0x3b, 0x3a, 0xc1, 0x3c, 0x1b, - 0x34, 0x44, 0xca, 0xde, 0x8e, 0xf4, 0x85, 0x53, 0xd0, 0x27, 0x93, 0xfa, 0xfe, 0x65, 0x9c, 0x9f, - 0x55, 0x73, 0x02, 0x61, 0x36, 0xf9, 0x22, 0xf7, 0xfc, 0x7c, 0xcf, 0x46, 0x70, 0xf5, 0x50, 0x89, - 0xfb, 0xcf, 0x1c, 0xe2, 0xb1, 0xfe, 0x18, 0xd6, 0x37, 0x3d, 0x45, 0xcc, 0x2f, 0x18, 0x14, 0x26, - 0x61, 0xbb, 0xba, 0x58, 0x10, 0x42, 0xc9, 0x4e, 0x4e, 0x16, 0x7f, 0xce, 0x3f, 0xaa, 0xdf, 0xdd, - 0x49, 0xd8, 0x26, 0x88, 0x19, 0x75, 0xe1, 0xb0, 0xd2, 0x7d, 0xb6, 0x2e, 0x48, 0x22, 0xe8, 0xbb, - 0x9f, 0x82, 0xc4, 0x3b, 0x64, 0x5b, 0x58, 0x81, 0x94, 0x0d, 0x1d, 0xfe, 0x34, 0x7d, 0xe1, 0x57, - 0xd9, 0xde, 0x5e, 0xe5, 0xc3, 0xa3, 0xe9, 0xfd, 0x57, 0x18, 0xf5, 0x91, 0xb5, 0xf6, 0x14, 0x6f, - 0x79, 0x3d, 0xef, 0x0f, 0xe7, 0xe3, 0xfb, 0x38, 0x84, 0xaa, 0xa2, 0xf1, 0x50, 0x34, 0x62, 0xbd, - 0x8b, 0xf4, 0x3a, 0x7b, 0x3c, 0x19, 0x10, 0x82, 0x67, 0x50, 0x16, 0x9f, 0xe2, 0xa7, 0x50, 0xb5, - 0xc5, 0x6e, 0xa5, 0xb3, 0x37, 0x7b, 0xf1, 0x3d, 0xa5, 0xff, 0x74, 0xba, 0x65, 0x9b, 0x7b, 0x16, - 0xe1, 0x00, 0x3d, 0x5f, 0x64, 0xae, 0xf7, 0xb0, 0x95, 0x8c, 0x12, 0xfc, 0x11, 0xf7, 0x2c, 0xbb, - 0xd1, 0x07, 0xf1, 0xd7, 0xd4, 0xa1, 0xf7, 0x73, 0x68, 0xdc, 0xfa, 0x08, 0x33, 0x78, 0x13, 0xf3, - 0x65, 0x6b, 0xe9, 0xf0, 0xe7, 0x38, 0x03, 0x11, 0x04, 0x36, 0xca, 0xe2, 0x42, 0x9e, 0xa4, 0x12, - 0x33, 0x8c, 0x7e, 0x3a, 0x3b, 0x7a, 0xab, 0xa1, 0x3f, 0xea, 0xf6, 0xd8, 0x0d, 0xbd, 0x29, 0x62, - 0x18, 0x7c, 0xb1, 0x96, 0x5b, 0xd4, 0xe2, 0xba, 0x9b, 0x93, 0x5a, 0xd7, 0xe2, 0xba, 0x9b, 0x9b, - 0x98, 0xd4, 0xbb, 0x59, 0x16, 0x97, 0xf2, 0x3e, 0x18, 0x9f, 0x96, 0xe8, 0xb6, 0x4c, 0xb9, 0xb8, - 0x5d, 0x53, 0x1f, 0x65, 0xba, 0x5a, 0x3d, 0xb5, 0xd1, 0x90, 0x67, 0xe8, 0x93, 0x4b, 0x43, 0x2d, - 0x7b, 0xdd, 0x13, 0x73, 0x60, 0xf1, 0xf8, 0xbd, 0xde, 0x99, 0x76, 0xe3, 0x0f, 0xa9, 0x9f, 0x54, - 0x07, 0x3f, 0xc0, 0xa1, 0x49, 0xb9, 0x69, 0xe2, 0xcc, 0x82, 0x96, 0x4d, 0x5a, 0x40, 0xb3, 0xa0, - 0x65, 0x97, 0x71, 0xce, 0xbb, 0x0e, 0x0b, 0x5a, 0x86, 0x54, 0x69, 0x38, 0x7d, 0xa1, 0xdb, 0xa2, - 0x6c, 0xb8, 0x75, 0x03, 0xa9, 0x0e, 0xd5, 0xd1, 0xff, 0x39, 0x87, 0xa6, 0x58, 0xa6, 0x79, 0xb4, - 0x13, 0xaf, 0xac, 0x53, 0x7d, 0xda, 0x89, 0x57, 0x36, 0xb9, 0x23, 0xbd, 0x3f, 0x36, 0x23, 0x83, - 0xd3, 0x94, 0xba, 0x2d, 0xca, 0x1c, 0x1e, 0xbd, 0x60, 0x0b, 0x33, 0x2e, 0x90, 0xa6, 0xf9, 0x80, - 0x4c, 0x68, 0x4e, 0xf3, 0x61, 0xc8, 0x7c, 0xe7, 0x34, 0x1f, 0xc6, 0xa4, 0x6a, 0x56, 0xf3, 0x81, - 0xd3, 0xec, 0xb9, 0x2d, 0xca, 0x86, 0x9b, 0x0f, 0xc8, 0xc9, 0xa6, 0x8e, 0xfe, 0x5f, 0xc1, 0x88, - 0x9a, 0xb0, 0xda, 0xaa, 0xb8, 0x14, 0x92, 0x22, 0xc9, 0x70, 0xa0, 0xc1, 0x8c, 0x81, 0x15, 0x94, - 0xa5, 0xe8, 0x6e, 0x0d, 0x98, 0x88, 0x79, 0xf7, 0x71, 0xb2, 0xb8, 0x81, 0x9f, 0x69, 0xb8, 0xa9, - 0xeb, 0x20, 0x20, 0x95, 0xb8, 0x9f, 0x24, 0x57, 0xf6, 0xce, 0xbd, 0xa9, 0x2f, 0x3e, 0xcc, 0x74, - 0xb5, 0x82, 0x5b, 0xfd, 0x4a, 0x69, 0xab, 0x63, 0x33, 0x07, 0x7d, 0x04, 0x29, 0x09, 0x6a, 0x2d, - 0xca, 0xdf, 0x4e, 0xd0, 0x3e, 0xdf, 0xe1, 0xff, 0x0f, 0x2d, 0x2b, 0xa1, 0x99, 0x04, 0xce, 0x67, - 0xba, 0x91, 0x0a, 0x4f, 0xe4, 0x0d, 0x9b, 0x88, 0x79, 0x7f, 0x47, 0x16, 0x9f, 0xe7, 0x67, 0x1a, - 0x9e, 0xb3, 0x4c, 0x74, 0x98, 0x09, 0x32, 0xa8, 0x0d, 0x10, 0xc6, 0xf7, 0x49, 0xf7, 0x88, 0xf1, - 0x55, 0xa7, 0xfc, 0x3f, 0x71, 0x68, 0x9a, 0x41, 0x5f, 0xe7, 0x84, 0xb2, 0x0d, 0xa0, 0x25, 0xca, - 0xb6, 0xb0, 0x89, 0x98, 0xb7, 0x51, 0x16, 0x05, 0x7e, 0x9a, 0x41, 0x1d, 0xa8, 0x43, 0xb8, 0xed, - 0x2a, 0x60, 0x5a, 0x7d, 0x23, 0x9f, 0xd6, 0x7f, 0xe6, 0x48, 0x22, 0x1d, 0x13, 0x86, 0xa5, 0x0e, - 0x0a, 0x25, 0x23, 0x7e, 0x73, 0xf3, 0x84, 0x4c, 0xc4, 0xbc, 0xff, 0x93, 0x2c, 0xd6, 0xda, 0x2e, - 0x6c, 0xa2, 0x50, 0x29, 0x37, 0xeb, 0xa2, 0x1c, 0x1b, 0x80, 0x24, 0xc1, 0xcf, 0xc9, 0x07, 0x77, - 0xfe, 0x4f, 0x39, 0x34, 0xa5, 0x26, 0x12, 0x4e, 0x2e, 0x97, 0x42, 0x24, 0x95, 0x23, 0x15, 0x9e, - 0x4c, 0xf8, 0x5a, 0x82, 0x59, 0xe2, 0x6b, 0x03, 0x99, 0x88, 0xa9, 0x27, 0xf4, 0x02, 0x7e, 0xaa, - 0xb2, 0xf3, 0x23, 0xe5, 0xcc, 0x2e, 0xa5, 0xe3, 0x20, 0x18, 0x82, 0x50, 0x05, 0xaa, 0x4d, 0xb9, - 0x83, 0x64, 0x14, 0x8e, 0x84, 0x93, 0x9b, 0x34, 0x1d, 0x11, 0x16, 0xb3, 0x39, 0x34, 0x59, 0x0c, - 0x85, 0xc8, 0xd7, 0xa5, 0x10, 0xc5, 0xc6, 0x4a, 0xff, 0x93, 0x0b, 0xa4, 0xe2, 0xf2, 0x78, 0x5e, - 0x70, 0x89, 0x98, 0x37, 0x8e, 0xb7, 0xa2, 0x72, 0x71, 0x3b, 0xd5, 0x7e, 0xbd, 0x7f, 0x5c, 0xbd, - 0x0d, 0x19, 0x10, 0x72, 0xae, 0x86, 0xb7, 0x62, 0xaf, 0xd5, 0x25, 0x2f, 0x10, 0x0a, 0x6d, 0xa2, - 0x1f, 0x65, 0x90, 0x3b, 0xcf, 0xa1, 0xb1, 0x4c, 0x10, 0x30, 0xf3, 0xdd, 0x96, 0xa9, 0xb4, 0xbd, - 0xdb, 0x1a, 0x60, 0xf4, 0x23, 0x62, 0x3e, 0x3f, 0x51, 0x0b, 0x20, 0x06, 0xa1, 0x79, 0xdd, 0xd3, - 0x73, 0x0a, 0x48, 0xf8, 0x45, 0x5d, 0x56, 0x9f, 0xe9, 0x2d, 0xb1, 0xb3, 0x7a, 0x50, 0x87, 0x7b, - 0x91, 0x43, 0x63, 0x99, 0x50, 0x4b, 0xbc, 0xd7, 0x8e, 0xd5, 0x39, 0x0d, 0xd7, 0x00, 0x43, 0x86, - 0xfb, 0xaa, 0x7a, 0xa2, 0x4d, 0xd4, 0xc2, 0x34, 0x91, 0xe1, 0x4e, 0xc9, 0x29, 0x60, 0x06, 0xfa, - 0xb8, 0xdb, 0x6b, 0x6b, 0x89, 0xa2, 0x59, 0x67, 0xa8, 0x43, 0xbe, 0xca, 0xa1, 0xb1, 0x4c, 0xa8, - 0x1b, 0xbb, 0x37, 0x67, 0xe7, 0x21, 0x1b, 0x60, 0x74, 0xd1, 0x54, 0xe0, 0x1f, 0xa0, 0xdc, 0x2a, - 0xda, 0x14, 0x22, 0x83, 0x9e, 0xc9, 0xbe, 0x6c, 0x04, 0xf5, 0x0a, 0x66, 0xf0, 0x73, 0x7c, 0x79, - 0x0c, 0x9e, 0x3f, 0xc7, 0xa1, 0x22, 0x7c, 0x80, 0xaa, 0xc3, 0x9e, 0x6d, 0x79, 0xb4, 0x32, 0x63, - 0xf6, 0xd8, 0x03, 0x90, 0x01, 0xbf, 0xae, 0x2e, 0x89, 0xb1, 0x94, 0xd1, 0x44, 0x9b, 0x42, 0xee, - 0xd9, 0xac, 0x8a, 0x83, 0x7c, 0xd7, 0x3c, 0x58, 0x3e, 0x9f, 0xc1, 0x1e, 0x73, 0xa1, 0x62, 0x2d, - 0xa0, 0x89, 0x59, 0x8e, 0xd6, 0xaa, 0x6c, 0xe5, 0x68, 0x06, 0x82, 0x8c, 0xf7, 0x37, 0x9c, 0x2c, - 0x9e, 0xe5, 0xf8, 0x07, 0x98, 0x11, 0x13, 0xfe, 0x29, 0x3b, 0x28, 0xf3, 0x35, 0xa8, 0x3b, 0xa1, - 0xca, 0x77, 0xf3, 0xb6, 0xdb, 0x47, 0xbd, 0xe1, 0x4d, 0x60, 0x76, 0xea, 0x86, 0xda, 0x2a, 0xb3, - 0x4a, 0xc7, 0x58, 0x4f, 0x69, 0xf5, 0xd8, 0x70, 0x60, 0x84, 0x60, 0x3f, 0x52, 0x27, 0x98, 0xd7, - 0xb6, 0xf8, 0x86, 0xda, 0x2a, 0xa2, 0x01, 0x28, 0x61, 0xcb, 0x4c, 0x7b, 0xde, 0x5a, 0xa9, 0x8b, - 0x07, 0xdd, 0x1c, 0x0b, 0xaa, 0x7b, 0xe8, 0x0b, 0x0e, 0x4d, 0x60, 0x76, 0xad, 0xe5, 0xd0, 0x8d, - 0xf5, 0xb6, 0x43, 0xcf, 0x05, 0x23, 0x43, 0xff, 0xa9, 0x2c, 0x7a, 0xa9, 0xce, 0x33, 0xd5, 0xbf, - 0xaf, 0x39, 0x16, 0xa4, 0xb2, 0x2c, 0xfc, 0x62, 0x86, 0x6b, 0xad, 0xed, 0xa4, 0xc3, 0x65, 0x4c, - 0xb3, 0xde, 0x6e, 0x8e, 0x05, 0x09, 0x13, 0xf8, 0x53, 0x0e, 0x4d, 0x60, 0xf6, 0xb0, 0x25, 0x02, - 0xc6, 0x7a, 0x5b, 0x04, 0x72, 0xc1, 0x08, 0x02, 0x0d, 0xb2, 0xb8, 0x98, 0x9f, 0xc2, 0x70, 0x03, - 0x8f, 0x36, 0x6a, 0xf7, 0x74, 0x13, 0x47, 0xf0, 0x18, 0x51, 0x2a, 0xf7, 0x8d, 0x0c, 0x25, 0xfe, - 0xb2, 0x0b, 0x8d, 0xd3, 0x36, 0x8c, 0x8a, 0xcd, 0x23, 0xb6, 0xdb, 0x89, 0xc1, 0x65, 0x8e, 0x33, - 0x10, 0xc1, 0xe4, 0x6f, 0x38, 0x59, 0xbc, 0xc8, 0xf1, 0x53, 0x98, 0x6d, 0xe7, 0xd9, 0x50, 0x5b, - 0x45, 0xb6, 0xde, 0x41, 0xe7, 0xad, 0xa7, 0x43, 0xde, 0x89, 0xed, 0x37, 0x93, 0x77, 0x5a, 0xc9, - 0xfc, 0x57, 0x1c, 0x9a, 0xc4, 0xb0, 0x99, 0x7a, 0x7c, 0xd7, 0x7c, 0xdc, 0x81, 0x11, 0xd5, 0xb3, - 0xd7, 0xcc, 0xd2, 0xe1, 0x01, 0x09, 0x05, 0x7f, 0x47, 0x16, 0x6b, 0xf8, 0x12, 0x96, 0x7e, 0x71, - 0x0c, 0xa1, 0x3d, 0xa7, 0x61, 0x0a, 0x92, 0x49, 0xd5, 0x22, 0x40, 0x28, 0x97, 0x8e, 0xd2, 0x08, - 0xc8, 0x4a, 0xf7, 0x45, 0xe5, 0xd8, 0x31, 0x66, 0x81, 0xf8, 0xf8, 0x52, 0x3b, 0xc4, 0xa0, 0x6b, - 0x86, 0x13, 0xff, 0x3e, 0x3c, 0x8b, 0x6f, 0xa8, 0xad, 0xaa, 0x0a, 0x87, 0x2c, 0x34, 0x66, 0x7a, - 0x9d, 0xad, 0x26, 0x89, 0x05, 0xd1, 0xd7, 0xf7, 0x0b, 0xfc, 0x83, 0x80, 0x53, 0x73, 0x2c, 0xe8, - 0x09, 0x86, 0x43, 0xf4, 0x79, 0x90, 0xf8, 0xa0, 0xe0, 0xa5, 0xc9, 0x62, 0xd3, 0x1c, 0x0b, 0x66, - 0xba, 0x5a, 0x55, 0xc0, 0x61, 0x4f, 0x93, 0xe6, 0x58, 0x50, 0x85, 0xd3, 0xd6, 0xf7, 0x9f, 0x71, - 0x68, 0x22, 0x30, 0xb9, 0x35, 0xd4, 0xd4, 0x85, 0xb7, 0xe1, 0x82, 0x1a, 0x00, 0xc5, 0xe6, 0xf1, - 0x61, 0xe1, 0x08, 0x4a, 0xbf, 0x90, 0xc5, 0x17, 0xa9, 0x88, 0xa4, 0x99, 0xfb, 0xb8, 0xe7, 0xe5, - 0x14, 0xc0, 0x5b, 0xe0, 0xcd, 0xc1, 0x0e, 0xa2, 0xdf, 0x1f, 0xbc, 0x96, 0x6e, 0x39, 0x93, 0x1a, - 0xec, 0xcb, 0x0c, 0x7e, 0x42, 0xd5, 0xc4, 0x0f, 0x7b, 0x67, 0x38, 0x19, 0xec, 0xa8, 0x0c, 0xe8, - 0x0f, 0x38, 0x34, 0x51, 0xbf, 0xce, 0xdb, 0x20, 0x94, 0x03, 0x60, 0x8b, 0x90, 0x09, 0x8e, 0x20, - 0xf4, 0x73, 0x46, 0x88, 0xd2, 0x6a, 0xa9, 0x10, 0xa5, 0x15, 0xb0, 0x7c, 0xc7, 0xed, 0x73, 0x1a, - 0xb8, 0xd1, 0xd0, 0x08, 0xa3, 0xe1, 0x42, 0x13, 0x75, 0xc3, 0x36, 0x1b, 0x34, 0x72, 0x00, 0x6c, - 0xd1, 0x30, 0xc1, 0x11, 0x34, 0xfe, 0x91, 0x93, 0xc5, 0x4f, 0x38, 0x75, 0x66, 0x54, 0xae, 0xa9, - 0x23, 0x72, 0x80, 0x63, 0xf9, 0xa8, 0x56, 0x0e, 0x79, 0x4b, 0xb5, 0x9f, 0xe9, 0xee, 0xf6, 0xcc, - 0x81, 0x23, 0xca, 0x85, 0xc3, 0x99, 0xae, 0x56, 0xb5, 0x30, 0x7d, 0xe8, 0x0a, 0xbc, 0x00, 0x28, - 0x6d, 0xdb, 0xb2, 0x3d, 0x7d, 0x99, 0x0f, 0x3f, 0x4b, 0xef, 0x39, 0x05, 0x1d, 0x69, 0xfc, 0x26, - 0x7b, 0x7a, 0x1b, 0x94, 0xa4, 0xbb, 0xdb, 0xd7, 0x10, 0xbd, 0x38, 0x9d, 0x7f, 0xfc, 0xbe, 0x70, - 0x95, 0xe8, 0x19, 0x07, 0xfb, 0x95, 0x9d, 0x57, 0x08, 0x28, 0x65, 0x59, 0x98, 0x92, 0x65, 0xbe, - 0x11, 0x50, 0x92, 0xff, 0x3d, 0x0e, 0x8d, 0x23, 0x0f, 0x52, 0x40, 0x43, 0xbb, 0xe7, 0x2a, 0x03, - 0x01, 0xe7, 0x38, 0x03, 0x11, 0xea, 0x49, 0xea, 0x7d, 0x6c, 0xa2, 0xfe, 0xa6, 0x05, 0xb4, 0x9b, - 0xc9, 0x4a, 0x7a, 0x6b, 0xf4, 0xb1, 0x30, 0x8b, 0xa1, 0x8c, 0x1f, 0x09, 0x0a, 0xff, 0xcc, 0x81, - 0x59, 0x15, 0x63, 0x83, 0x08, 0xa8, 0x3c, 0xe1, 0x70, 0x55, 0x36, 0xa1, 0x54, 0x96, 0x1f, 0x30, - 0x41, 0xed, 0x2d, 0x59, 0x5c, 0xca, 0xcf, 0x62, 0x6d, 0xa5, 0xc8, 0x1c, 0x63, 0x30, 0xc2, 0x8d, - 0x48, 0x8c, 0x31, 0xd6, 0xb2, 0x31, 0x7d, 0xe9, 0x38, 0x73, 0x8f, 0xb6, 0x36, 0xaf, 0xb3, 0xb5, - 0x4f, 0x04, 0x9b, 0x3b, 0xfe, 0xaa, 0x0b, 0x8d, 0xa7, 0xf6, 0x70, 0x80, 0xe8, 0x1c, 0x3b, 0x73, - 0x39, 0x03, 0x86, 0x8f, 0x0e, 0x03, 0x45, 0x50, 0xfb, 0x5b, 0xc3, 0xa1, 0x9b, 0x8b, 0x93, 0xfd, - 0xa1, 0x9b, 0x03, 0x79, 0x27, 0x0e, 0xdd, 0x59, 0xbc, 0x23, 0xf7, 0xe3, 0xff, 0x1b, 0x87, 0x26, - 0xad, 0x8e, 0x36, 0x4b, 0xc4, 0x1e, 0x1a, 0x88, 0x67, 0x62, 0x06, 0xb9, 0x10, 0xb6, 0xa7, 0xae, - 0x19, 0x90, 0x90, 0xb0, 0x83, 0x93, 0xc5, 0x97, 0xe9, 0x63, 0x47, 0xe6, 0xcc, 0x80, 0xfe, 0x92, - 0x79, 0xe9, 0xb8, 0x7b, 0x89, 0x72, 0x71, 0x3b, 0xb1, 0x5c, 0xb9, 0xfa, 0xa9, 0xca, 0x22, 0xb4, - 0x1d, 0xce, 0x00, 0xaa, 0xdc, 0x1e, 0x7b, 0x5a, 0x65, 0xfa, 0x2f, 0x67, 0x7a, 0x4e, 0xd0, 0xbd, - 0x6d, 0x6d, 0xdb, 0x61, 0xb3, 0x31, 0xb4, 0xd7, 0xc1, 0x7d, 0x2e, 0xf4, 0xa0, 0x5f, 0x6a, 0xa4, - 0xa3, 0x5d, 0x1e, 0x8f, 0x36, 0xda, 0x6c, 0x10, 0x2b, 0x28, 0xdb, 0x0d, 0x62, 0x0d, 0x4c, 0x48, - 0xf0, 0x11, 0x7e, 0xd6, 0x9a, 0xa2, 0xdb, 0xae, 0x9e, 0x19, 0x18, 0x3a, 0x42, 0x0d, 0x7f, 0x57, - 0x18, 0x2d, 0xa1, 0x53, 0x03, 0x7b, 0x34, 0xb8, 0x54, 0xdf, 0x05, 0x00, 0x55, 0x39, 0xe5, 0xf5, - 0xed, 0xe9, 0xc3, 0xbd, 0xd9, 0x5e, 0x42, 0x93, 0xd4, 0xc0, 0xee, 0x4c, 0xeb, 0x15, 0xa5, 0xfb, - 0x2c, 0x35, 0x4e, 0xbc, 0x00, 0x34, 0xf1, 0xdd, 0x0a, 0x4d, 0xbe, 0x1e, 0x85, 0x1e, 0xa8, 0x6a, - 0x90, 0x02, 0x11, 0x62, 0x55, 0x0a, 0x04, 0x31, 0xdb, 0xb0, 0xe4, 0x82, 0x50, 0x6a, 0xcc, 0xcd, - 0x03, 0x92, 0xbe, 0xf0, 0x8d, 0x92, 0xc5, 0xdf, 0xb8, 0xf8, 0xe9, 0xec, 0x83, 0x1c, 0xc1, 0x94, - 0x4e, 0xbd, 0xfb, 0xbc, 0x2b, 0x4f, 0x92, 0x5c, 0x3b, 0x96, 0x1a, 0xd8, 0xa3, 0x11, 0x40, 0x2b, - 0x57, 0xae, 0x5d, 0x49, 0xf7, 0xb5, 0x65, 0xf6, 0x6e, 0x07, 0x19, 0x81, 0xfd, 0xd4, 0x57, 0x2d, - 0xef, 0xea, 0xaf, 0xd2, 0x7d, 0xfd, 0xca, 0xe0, 0xbb, 0xe9, 0x0b, 0xe4, 0xa7, 0xda, 0xf0, 0xfa, - 0x07, 0x5a, 0x2d, 0x04, 0x33, 0x20, 0xc1, 0x42, 0xe1, 0xac, 0x1a, 0x68, 0xcb, 0xbe, 0x77, 0x3d, - 0x73, 0xa2, 0x47, 0xdd, 0x73, 0xb8, 0x7f, 0x70, 0xeb, 0x00, 0x48, 0x10, 0x4f, 0xe0, 0x48, 0xcb, - 0xbe, 0x77, 0x3d, 0x75, 0xe3, 0xa3, 0x6c, 0xef, 0x36, 0xb2, 0xd0, 0x31, 0xb0, 0x72, 0xf5, 0xd3, - 0xcc, 0x40, 0xa7, 0xd2, 0xd3, 0x91, 0xde, 0xb9, 0x57, 0xe3, 0x07, 0x90, 0x3a, 0x1b, 0xfa, 0xcc, - 0xde, 0xf8, 0x50, 0xe9, 0x3f, 0x7d, 0x73, 0xb0, 0x03, 0x0a, 0x21, 0xc1, 0x07, 0xf1, 0x3a, 0xeb, - 0x6a, 0x5d, 0x17, 0x48, 0x6c, 0x81, 0x5d, 0x90, 0xed, 0x3d, 0x9d, 0x19, 0xd8, 0x0e, 0xbb, 0x9e, - 0xee, 0x85, 0x67, 0x7c, 0x8b, 0x47, 0x30, 0xef, 0xb8, 0x8c, 0x4e, 0xfe, 0xf9, 0x02, 0x34, 0xd9, - 0x34, 0x5f, 0x1b, 0x04, 0xb3, 0x9e, 0xd9, 0x02, 0xc8, 0xf6, 0xb9, 0xdc, 0x12, 0x96, 0xda, 0x73, - 0x8f, 0x92, 0xc5, 0xff, 0xd7, 0xc5, 0xbf, 0xe4, 0xb0, 0x04, 0xf0, 0x7a, 0xbf, 0x91, 0xd9, 0x7f, - 0xf6, 0x97, 0x4d, 0x52, 0x7c, 0x2b, 0x09, 0xad, 0x8e, 0xd7, 0x04, 0xc9, 0x35, 0x8e, 0x29, 0xfa, - 0xfd, 0x8a, 0xf9, 0x06, 0x2b, 0x66, 0x89, 0xc5, 0x8a, 0x11, 0x86, 0x5f, 0x31, 0xfc, 0x5f, 0x93, - 0xcb, 0x9a, 0x81, 0x55, 0xe4, 0x25, 0x27, 0x95, 0x3a, 0xd8, 0xb1, 0x1b, 0x99, 0x44, 0x42, 0x16, - 0x9f, 0xe1, 0x27, 0xc1, 0x78, 0xd5, 0x8f, 0x92, 0xe3, 0x96, 0x98, 0xcd, 0x62, 0x3b, 0xfe, 0x3d, - 0x1a, 0x27, 0x04, 0x5f, 0x80, 0x35, 0x1a, 0x18, 0xb8, 0xf9, 0xf1, 0x23, 0xe5, 0x83, 0xfc, 0x3f, - 0x71, 0x06, 0x43, 0x7d, 0xba, 0x0d, 0xe6, 0x0e, 0x37, 0x6a, 0x7d, 0x17, 0xf8, 0xf2, 0x01, 0xfd, - 0x56, 0x51, 0x14, 0x86, 0x41, 0x71, 0x14, 0x9a, 0x0a, 0x97, 0x14, 0x5c, 0x5e, 0x2d, 0x25, 0xc2, - 0x71, 0x09, 0x5b, 0x2a, 0xf1, 0x36, 0x8f, 0xb5, 0xb9, 0x70, 0x14, 0xd5, 0xf9, 0xf9, 0x82, 0x13, - 0x74, 0xd3, 0x2e, 0x59, 0x3c, 0xe1, 0xe2, 0xa7, 0xc1, 0x9d, 0x87, 0x81, 0x20, 0xaa, 0x98, 0x36, - 0x57, 0xee, 0x6d, 0xa8, 0xef, 0x82, 0x09, 0x8a, 0x98, 0x14, 0x81, 0xfa, 0x69, 0xb0, 0x4b, 0xe9, - 0x1d, 0xcc, 0xee, 0xf8, 0x4c, 0x6b, 0x41, 0x56, 0x3f, 0xde, 0xc0, 0xaa, 0x64, 0x39, 0x78, 0x40, - 0x69, 0x3b, 0x45, 0x22, 0x2e, 0xe0, 0x5d, 0xa0, 0xbd, 0x79, 0x28, 0xd7, 0xae, 0xc0, 0x23, 0x01, - 0x30, 0x02, 0x76, 0x87, 0xc3, 0x7d, 0x22, 0xd3, 0xd5, 0x1a, 0xd2, 0x3f, 0xae, 0x74, 0x9e, 0xcb, - 0xbe, 0x77, 0x3d, 0xdd, 0xbb, 0x1f, 0x12, 0x49, 0x67, 0xcf, 0x60, 0x53, 0x9a, 0x93, 0x67, 0xb4, - 0x9d, 0x9b, 0xee, 0xdd, 0x9f, 0xba, 0xb6, 0x4b, 0x69, 0xdf, 0xad, 0x5c, 0xec, 0xbc, 0x39, 0xf8, - 0xa1, 0x7e, 0x77, 0xd9, 0xd1, 0xa9, 0x5c, 0xec, 0x64, 0xa7, 0x10, 0xda, 0x66, 0x7b, 0xaf, 0x02, - 0x77, 0x33, 0x71, 0x49, 0x3c, 0xb1, 0xcf, 0x7a, 0x97, 0x8c, 0x60, 0xed, 0x92, 0x81, 0x52, 0x6e, - 0xde, 0xef, 0xb2, 0x9a, 0x62, 0x1c, 0xeb, 0x24, 0x8f, 0x29, 0x56, 0xe1, 0x46, 0x30, 0xc5, 0x00, - 0x4e, 0xa6, 0xf8, 0xf7, 0x38, 0x59, 0xfc, 0x9d, 0x9c, 0x19, 0x56, 0x01, 0xc8, 0x0c, 0x07, 0xcc, - 0x13, 0xcc, 0x58, 0x29, 0x69, 0xf9, 0x8a, 0x99, 0x86, 0x9a, 0xbd, 0x1b, 0x26, 0xf4, 0x80, 0xca, - 0xf6, 0x0f, 0xf7, 0xa6, 0x6e, 0xf4, 0xa4, 0x2f, 0x7c, 0x4c, 0xa2, 0x77, 0xf7, 0xed, 0x4e, 0xf5, - 0xb5, 0x64, 0x77, 0x7c, 0x96, 0x7e, 0xaf, 0x4d, 0xd9, 0xfe, 0xf9, 0xad, 0x13, 0x2f, 0x11, 0x7e, - 0x0b, 0x13, 0xef, 0x33, 0x17, 0xb5, 0x7c, 0xc0, 0x10, 0xab, 0xc3, 0x91, 0xd5, 0x81, 0x37, 0x31, - 0xed, 0xca, 0x1c, 0x88, 0xa1, 0x83, 0x0d, 0x63, 0xf9, 0x60, 0x82, 0x26, 0x94, 0xbb, 0x8e, 0x6d, - 0xea, 0x48, 0x32, 0x8c, 0xc6, 0x70, 0x44, 0xad, 0x2c, 0x6f, 0x04, 0x20, 0x42, 0xbd, 0x9f, 0xe4, - 0x47, 0x3d, 0x88, 0x8d, 0xa7, 0xfe, 0x7b, 0xb1, 0x73, 0xe8, 0xc8, 0xde, 0xa1, 0x5f, 0x7d, 0xc4, - 0xd2, 0x4e, 0xd9, 0xdd, 0x99, 0xbd, 0xf8, 0x9e, 0x72, 0xb2, 0x4b, 0xa3, 0x01, 0xec, 0x16, 0x90, - 0x20, 0xbc, 0x23, 0x91, 0x20, 0xea, 0xa2, 0x4d, 0x11, 0x8d, 0x6c, 0x07, 0x5c, 0xa8, 0x64, 0x19, - 0xce, 0xbc, 0xa5, 0x8d, 0x4f, 0x6c, 0x4a, 0x46, 0xd7, 0x06, 0x03, 0x0d, 0x12, 0x6f, 0x72, 0x94, - 0xb3, 0x83, 0xa4, 0xc4, 0x5b, 0x90, 0x7f, 0x03, 0x42, 0xbf, 0x03, 0x9c, 0x2c, 0xae, 0xe2, 0xe7, - 0x28, 0x83, 0x2d, 0xca, 0xde, 0x5e, 0xed, 0x6e, 0x41, 0x0c, 0x91, 0xb0, 0x05, 0x61, 0xba, 0xfd, - 0x13, 0xf0, 0x30, 0x74, 0x1b, 0xa0, 0xc8, 0xa6, 0xc4, 0x20, 0xa0, 0x3a, 0x02, 0xaf, 0x5b, 0x4c, - 0x90, 0x17, 0xbd, 0xcf, 0x8e, 0x80, 0x20, 0x74, 0x36, 0xa4, 0x72, 0xc8, 0x41, 0xa6, 0xd2, 0xe5, - 0x88, 0x0b, 0x3d, 0x54, 0x1d, 0x4e, 0xd8, 0x10, 0xc6, 0x84, 0xa7, 0x2d, 0x28, 0xa5, 0xcc, 0xc2, - 0x11, 0xb4, 0x20, 0xa4, 0x39, 0x48, 0x48, 0xd3, 0x76, 0x79, 0xe8, 0xd0, 0x85, 0x61, 0x49, 0xc3, - 0x40, 0x39, 0x92, 0x46, 0xf4, 0x3e, 0x77, 0x4b, 0xa4, 0x09, 0xc1, 0x78, 0x55, 0xda, 0xf4, 0x70, - 0x08, 0x81, 0x02, 0x10, 0xc7, 0x12, 0xb0, 0x89, 0x80, 0xc0, 0x24, 0x93, 0x75, 0x7b, 0x9d, 0x40, - 0x74, 0x1b, 0xa2, 0xc5, 0x3c, 0x49, 0xd7, 0x48, 0x7c, 0xae, 0xe7, 0x90, 0x40, 0x00, 0x07, 0x6e, - 0x40, 0x06, 0xc6, 0xec, 0x8d, 0xbd, 0xea, 0x4d, 0xb2, 0xab, 0x55, 0xd9, 0xbb, 0x47, 0xe9, 0xbc, - 0xc8, 0x84, 0x06, 0xb0, 0x36, 0xa7, 0x4d, 0x06, 0x12, 0x5b, 0xd4, 0x01, 0xbf, 0xe7, 0x42, 0xc5, - 0x38, 0x72, 0x01, 0x1e, 0xaf, 0xc7, 0x32, 0xa8, 0x01, 0x3b, 0xdc, 0x87, 0x1d, 0x20, 0xc8, 0x68, - 0x2f, 0x62, 0x8e, 0x39, 0x89, 0x44, 0x3c, 0xc0, 0xa1, 0x0c, 0xd4, 0x7a, 0xf7, 0x66, 0x12, 0xe8, - 0x00, 0x97, 0x64, 0xba, 0x5a, 0x61, 0x8c, 0x65, 0x1e, 0x38, 0xc6, 0x00, 0x1c, 0x02, 0xc3, 0xcd, - 0xf7, 0xc0, 0xaf, 0xd4, 0x40, 0xdb, 0xd0, 0x91, 0xbd, 0xa9, 0xfe, 0x3d, 0xd0, 0x06, 0x1a, 0xa4, - 0xfa, 0xf6, 0xa7, 0x06, 0xf6, 0xc0, 0xa1, 0x05, 0xe5, 0x89, 0xa4, 0x14, 0x53, 0xd7, 0xff, 0x99, - 0x5d, 0x90, 0x4c, 0xd9, 0xc1, 0x87, 0x5a, 0x45, 0xbb, 0xfc, 0x6d, 0xf5, 0x5f, 0x43, 0x2c, 0x84, - 0x3e, 0x17, 0x2a, 0x5a, 0xbb, 0x25, 0x1c, 0xc3, 0x44, 0x30, 0xbd, 0x7d, 0xd2, 0x1a, 0xdb, 0xb7, - 0x4f, 0x1d, 0x80, 0x90, 0x20, 0xcb, 0xc9, 0xe2, 0x67, 0x1c, 0x3f, 0x35, 0x7b, 0xf5, 0x72, 0xf6, - 0xc6, 0x0e, 0x76, 0xac, 0x98, 0x12, 0x47, 0x38, 0x47, 0x52, 0x40, 0x2b, 0x4a, 0x0a, 0xf6, 0x57, - 0x6a, 0xa0, 0x0d, 0xfe, 0x60, 0xbb, 0x64, 0xc9, 0x92, 0xea, 0xdb, 0x95, 0xea, 0x6b, 0x49, 0x5f, - 0x38, 0xc5, 0xd2, 0xa3, 0xcc, 0x43, 0x40, 0xae, 0xed, 0x1a, 0x3a, 0xf4, 0x59, 0xba, 0xbb, 0x3d, - 0xf3, 0x61, 0x5f, 0xaa, 0x5f, 0x4e, 0x7d, 0xf1, 0x51, 0xf6, 0xf3, 0x83, 0xa9, 0xbe, 0xdd, 0xca, - 0x40, 0x7f, 0xb6, 0xa7, 0x07, 0xbe, 0x03, 0xfa, 0x7f, 0xf7, 0xa3, 0xc3, 0xd2, 0x2e, 0xb1, 0x25, - 0x8c, 0x55, 0xcd, 0x27, 0x34, 0x7b, 0x6c, 0xeb, 0x15, 0xaf, 0xd7, 0x0d, 0x63, 0x8f, 0x6d, 0x20, - 0xe0, 0x2a, 0x59, 0x9c, 0xc5, 0x23, 0x38, 0x1d, 0x30, 0xc9, 0x26, 0xe9, 0x7f, 0x33, 0x4a, 0x44, - 0x6b, 0xab, 0x4b, 0xc3, 0x40, 0xd5, 0x31, 0x1e, 0xe5, 0x10, 0x02, 0xf5, 0xaf, 0xf5, 0x18, 0xf5, - 0x3a, 0xdb, 0x31, 0xb2, 0x20, 0x64, 0x8c, 0x35, 0x78, 0x8c, 0xa0, 0x9e, 0x85, 0x31, 0xb2, 0x0a, - 0x63, 0xb5, 0x04, 0x2c, 0x2b, 0x7d, 0xc3, 0x8e, 0x91, 0xff, 0x08, 0xdc, 0x23, 0xf0, 0xe8, 0xac, - 0xdc, 0x23, 0xd8, 0xa1, 0xcd, 0xb6, 0xad, 0x27, 0xe3, 0x7a, 0x45, 0x16, 0x1f, 0xa3, 0xee, 0x11, - 0x78, 0x5c, 0x25, 0xac, 0x36, 0x16, 0xa7, 0x41, 0x66, 0x15, 0xb1, 0x5e, 0x7e, 0xf8, 0xf1, 0x1d, - 0x71, 0xa1, 0x22, 0x55, 0xea, 0xb7, 0xde, 0x1f, 0xb4, 0xc6, 0x76, 0x7f, 0xe8, 0x00, 0x64, 0x88, - 0x7f, 0xc4, 0xc9, 0xe2, 0x69, 0x8e, 0x5e, 0x14, 0xd4, 0x2a, 0x72, 0x51, 0xd8, 0x67, 0xab, 0x7a, - 0xd4, 0x81, 0xee, 0x84, 0xd6, 0xf1, 0x21, 0xde, 0x8e, 0x89, 0xf2, 0x7b, 0x5d, 0x68, 0x1a, 0xf0, - 0x6c, 0x7a, 0x4e, 0x69, 0xe6, 0xe9, 0x66, 0xf7, 0x7b, 0x1b, 0x40, 0x5b, 0xf7, 0x7b, 0x5b, 0x78, - 0x42, 0xc8, 0x0f, 0x38, 0x59, 0x0c, 0xf0, 0xb3, 0x0c, 0x71, 0x65, 0x4c, 0xd0, 0xee, 0x17, 0x9c, - 0xeb, 0xb5, 0xd7, 0x26, 0xf2, 0xf1, 0x79, 0xda, 0xd1, 0x16, 0x07, 0x4b, 0x7c, 0xf0, 0x66, 0xf2, - 0x5a, 0x19, 0x84, 0x31, 0xe2, 0x5a, 0x14, 0x77, 0xa6, 0xee, 0xb7, 0x94, 0x8b, 0x9a, 0x36, 0xe6, - 0x41, 0x12, 0x1b, 0x40, 0x5b, 0x92, 0xd8, 0xc2, 0x13, 0x92, 0x64, 0xc0, 0x8e, 0xe3, 0x69, 0x83, - 0xfd, 0xa2, 0x09, 0x1c, 0x27, 0xb3, 0xd5, 0xd5, 0x1f, 0x6d, 0x67, 0x87, 0x76, 0x74, 0x42, 0x0b, - 0x77, 0x83, 0xa9, 0x65, 0x22, 0x87, 0x5a, 0xa9, 0xbe, 0x96, 0x54, 0xdf, 0x39, 0xbb, 0xae, 0x55, - 0xc6, 0xde, 0xbf, 0x1f, 0x60, 0x60, 0x09, 0xa9, 0x04, 0xfe, 0xec, 0x57, 0xca, 0xe0, 0x01, 0xd8, - 0x76, 0xa9, 0xbe, 0x7e, 0x4d, 0xeb, 0xef, 0x60, 0x4e, 0x69, 0x22, 0x6d, 0x6e, 0xe4, 0x8f, 0xbf, - 0x1b, 0x45, 0x93, 0x2f, 0x8a, 0x09, 0xf8, 0x74, 0xb5, 0xd4, 0x1c, 0x0e, 0x4a, 0xb5, 0xf1, 0x68, - 0x73, 0x38, 0x24, 0xc5, 0xf9, 0x45, 0x36, 0xb4, 0xb3, 0x84, 0xa6, 0x04, 0x5f, 0x3c, 0xb2, 0x46, - 0x84, 0xea, 0x7f, 0xe6, 0x92, 0xc5, 0xaf, 0x39, 0xfe, 0x6d, 0x67, 0xda, 0xc1, 0xfd, 0x50, 0x8b, - 0xf6, 0x9f, 0xbe, 0x74, 0x5c, 0x13, 0xe4, 0x95, 0xfe, 0xfd, 0xb0, 0x08, 0xb3, 0x3b, 0xce, 0x65, - 0x8e, 0xef, 0x4f, 0xf5, 0xef, 0x4b, 0x7d, 0x71, 0x23, 0xd5, 0xbf, 0x27, 0xd5, 0x7f, 0x46, 0xf9, - 0x60, 0x5b, 0xb6, 0xe7, 0xa2, 0x72, 0x63, 0x7b, 0xaa, 0xef, 0xfd, 0xf4, 0xf9, 0x13, 0x10, 0x67, - 0xc6, 0xdc, 0x95, 0xfb, 0x4e, 0x7e, 0x1c, 0xcf, 0xe3, 0x4b, 0xee, 0x65, 0x23, 0x9d, 0xc7, 0xf2, - 0x18, 0xa1, 0x24, 0x78, 0x2d, 0xe3, 0x3f, 0xf1, 0xe4, 0xee, 0x70, 0x51, 0x5b, 0xd9, 0x3c, 0xf6, - 0x90, 0x0d, 0xa0, 0xed, 0x1e, 0xb2, 0x85, 0x27, 0xb3, 0xf9, 0x3e, 0x7e, 0xdc, 0x98, 0x65, 0xb0, - 0x8d, 0x35, 0xb3, 0x95, 0x79, 0xe4, 0x69, 0x12, 0x34, 0x98, 0xf4, 0x85, 0xcc, 0x0e, 0xdc, 0xc1, - 0xa2, 0xd6, 0x91, 0x42, 0x2a, 0x25, 0x1e, 0x5c, 0x21, 0x25, 0xcd, 0x64, 0xb0, 0x8a, 0xc1, 0x6a, - 0x4b, 0x83, 0xb2, 0xfc, 0x80, 0x19, 0xbe, 0xfa, 0x2a, 0x7d, 0xfc, 0xb3, 0x25, 0xc0, 0x12, 0xf6, - 0x60, 0xd5, 0x08, 0xe0, 0x40, 0x03, 0xd6, 0xae, 0x88, 0x1f, 0x39, 0x25, 0xfe, 0x2f, 0x17, 0xd8, - 0x16, 0x9b, 0x49, 0x61, 0xf9, 0xb2, 0x69, 0x4b, 0x8b, 0x79, 0x79, 0x42, 0x13, 0x62, 0xfc, 0x1b, - 0x27, 0x8b, 0x7f, 0xc6, 0xf1, 0x73, 0x9c, 0xa9, 0x41, 0x4e, 0xf0, 0x53, 0xc3, 0x79, 0xbe, 0xdb, - 0x34, 0xbc, 0x13, 0xa7, 0xba, 0xb5, 0x8d, 0xb3, 0x69, 0x0e, 0xf8, 0xf7, 0xad, 0xce, 0xb3, 0xb5, - 0xc9, 0x40, 0xb2, 0x29, 0x91, 0xc7, 0x79, 0x06, 0x80, 0xf9, 0x9f, 0x67, 0x14, 0x9e, 0x50, 0x7f, - 0x37, 0x27, 0x8b, 0x3f, 0xe4, 0xbd, 0x70, 0xc1, 0x2f, 0x87, 0xcb, 0x2c, 0x79, 0x5b, 0xc4, 0xc6, - 0x21, 0xfa, 0x4d, 0x37, 0x0f, 0x18, 0x8c, 0xf6, 0x73, 0xee, 0xa7, 0x46, 0xcc, 0xa6, 0x12, 0x78, - 0x50, 0x2a, 0x63, 0x7a, 0xdf, 0x85, 0xa6, 0xac, 0xdd, 0x1a, 0x09, 0xe6, 0xb1, 0x08, 0x2d, 0xc1, - 0x6c, 0x17, 0xa1, 0x0d, 0x34, 0xb3, 0x23, 0x6b, 0xf9, 0xc7, 0xaa, 0x44, 0x82, 0x57, 0xcf, 0xd1, - 0xa1, 0x23, 0x6d, 0x34, 0x05, 0x61, 0x47, 0xfa, 0xc2, 0xa9, 0xec, 0x8e, 0xcb, 0x99, 0x9e, 0x13, - 0xe9, 0x3d, 0x67, 0x32, 0xbf, 0xee, 0x75, 0xe7, 0x09, 0x87, 0xc9, 0x51, 0xe1, 0x7e, 0x72, 0xe4, - 0xe4, 0xd8, 0x1a, 0xc1, 0xa6, 0x8a, 0xff, 0x95, 0x43, 0xbc, 0x6e, 0xf0, 0xb3, 0x4e, 0x6a, 0x8c, - 0x35, 0x04, 0x92, 0x92, 0x59, 0xbb, 0x6e, 0x86, 0xb1, 0xd5, 0xae, 0x5b, 0x81, 0x12, 0x1a, 0xb4, - 0x71, 0xb2, 0x58, 0xc9, 0x97, 0xb0, 0x31, 0x00, 0x89, 0xf2, 0xe3, 0xec, 0x89, 0x4c, 0xfb, 0x4e, - 0xea, 0x5b, 0x6f, 0xae, 0x29, 0x25, 0x69, 0xd5, 0x70, 0xfa, 0x1c, 0x08, 0xa1, 0x51, 0xe1, 0x7d, - 0x32, 0xdf, 0x10, 0x1a, 0x91, 0x68, 0x48, 0x4a, 0x92, 0xb1, 0xe0, 0x25, 0xf0, 0x3f, 0x38, 0xc4, - 0x33, 0xde, 0x42, 0xb6, 0x58, 0x9b, 0x61, 0x6c, 0xb1, 0xb6, 0x02, 0x25, 0x58, 0xef, 0xe1, 0x64, - 0xb1, 0x82, 0x9f, 0x45, 0xdc, 0x4a, 0x31, 0x22, 0x2c, 0x6e, 0xd4, 0xe8, 0xd4, 0xe0, 0x8b, 0xc4, - 0xd4, 0x60, 0x6c, 0x57, 0xba, 0x97, 0xdf, 0x12, 0xb6, 0xa0, 0xf3, 0xa1, 0x43, 0x22, 0x72, 0x97, - 0x3a, 0xe9, 0xba, 0x35, 0x91, 0x3d, 0xfa, 0x66, 0x18, 0x5b, 0xf4, 0xad, 0x40, 0x99, 0x49, 0x5f, - 0xac, 0x4e, 0xfa, 0x71, 0xed, 0x71, 0x9d, 0x35, 0x9a, 0x76, 0x97, 0xb0, 0xb7, 0x4e, 0x16, 0x7d, - 0x8c, 0xf8, 0x0f, 0x7d, 0xb7, 0x09, 0x71, 0xfe, 0x6b, 0x97, 0xfe, 0x42, 0xa6, 0xe1, 0xfc, 0xb8, - 0xdd, 0xdb, 0x50, 0x2e, 0xc6, 0xa5, 0xc3, 0x03, 0x12, 0x7c, 0x65, 0x97, 0x2c, 0xfe, 0xa5, 0x76, - 0xda, 0xb0, 0x51, 0x62, 0x58, 0xe4, 0xc8, 0x69, 0x73, 0xd6, 0xf6, 0xb4, 0x61, 0x29, 0xf5, 0x9d, - 0x9d, 0x30, 0xda, 0x68, 0xd9, 0xb0, 0x53, 0xcc, 0x6c, 0x3c, 0xc5, 0xdf, 0xda, 0xa6, 0x53, 0x77, - 0xdc, 0x44, 0xf2, 0xf8, 0xa8, 0xd1, 0xfe, 0x31, 0x9b, 0xd7, 0xc9, 0x5c, 0xd2, 0x3f, 0x3e, 0x2c, - 0x1c, 0xa1, 0xfc, 0x21, 0x4e, 0x16, 0x97, 0xf3, 0x3e, 0x33, 0xe1, 0x95, 0xb6, 0xab, 0xa9, 0xeb, - 0x1f, 0xb0, 0xd8, 0x10, 0x57, 0xb1, 0x12, 0x36, 0x7a, 0x19, 0x5b, 0x03, 0x6b, 0x8f, 0xbf, 0x5d, - 0x6b, 0xef, 0xaf, 0x34, 0x36, 0x0b, 0x31, 0xa5, 0x83, 0xc1, 0x68, 0x53, 0x24, 0x69, 0xc7, 0x66, - 0x59, 0x98, 0x61, 0xd8, 0xac, 0x11, 0x54, 0xf7, 0xa8, 0x9d, 0xcf, 0x4f, 0xd1, 0x8c, 0xd8, 0xb3, - 0x9f, 0x9d, 0x56, 0x3a, 0xaf, 0x92, 0xdd, 0x66, 0x5d, 0xec, 0x18, 0x83, 0x35, 0x27, 0x84, 0x67, - 0x00, 0xbe, 0x86, 0x19, 0xe9, 0xdf, 0x6b, 0x8c, 0xd4, 0x19, 0x2f, 0x33, 0xcc, 0x30, 0x8c, 0xd4, - 0x12, 0xaf, 0x88, 0xd1, 0xeb, 0x05, 0x10, 0x60, 0xbc, 0x5e, 0x4c, 0x18, 0x2d, 0x75, 0x3f, 0x3d, - 0x12, 0x8c, 0xca, 0xdf, 0x26, 0x7f, 0x11, 0x3e, 0xb9, 0xdf, 0x85, 0x26, 0xaf, 0x0e, 0xd7, 0xc7, - 0x73, 0xd1, 0x33, 0x8d, 0xd9, 0x02, 0xc8, 0xd6, 0x04, 0xc3, 0x12, 0x96, 0x20, 0xf8, 0x31, 0x27, - 0x8b, 0x61, 0x7e, 0x22, 0xb8, 0x35, 0xeb, 0x18, 0x6e, 0x80, 0x02, 0xe5, 0xfd, 0xe3, 0x4a, 0xef, - 0xf6, 0x1c, 0x3c, 0x69, 0xa0, 0xd2, 0xdd, 0x07, 0x52, 0x7d, 0xe7, 0xa0, 0x02, 0xa0, 0xbf, 0x6a, - 0xd9, 0xa6, 0x9c, 0xec, 0x82, 0x12, 0xf5, 0xef, 0xb6, 0xb3, 0x43, 0xef, 0x9d, 0x65, 0x01, 0xe0, - 0x18, 0x5d, 0xe8, 0x1e, 0xf1, 0xa4, 0xff, 0x67, 0xed, 0xf8, 0x70, 0x9e, 0x74, 0x33, 0xcc, 0x30, - 0xc7, 0x87, 0x25, 0x4d, 0xde, 0x51, 0x0f, 0xcf, 0x12, 0xd6, 0x53, 0xc0, 0xb0, 0x9e, 0x67, 0x99, - 0x9d, 0x05, 0x4c, 0xcb, 0xa0, 0xc2, 0x77, 0xcb, 0xcb, 0x80, 0xff, 0x6b, 0x17, 0x63, 0x04, 0x4f, - 0x51, 0xb5, 0x37, 0x82, 0xcf, 0x41, 0xb4, 0x74, 0x78, 0x40, 0x82, 0xe6, 0x7f, 0xe1, 0x64, 0xf1, - 0x0a, 0x67, 0x34, 0x83, 0x07, 0x44, 0xc8, 0x49, 0x71, 0x64, 0x18, 0x4f, 0x02, 0x16, 0xf8, 0x3b, - 0xbb, 0x8b, 0xc0, 0x47, 0x31, 0x91, 0xe7, 0xf3, 0x23, 0x5a, 0x48, 0xfc, 0x7f, 0x75, 0xa1, 0xa9, - 0xb9, 0xd4, 0x58, 0x17, 0xad, 0x95, 0xe2, 0x8d, 0x76, 0x36, 0xb1, 0x3a, 0x9c, 0x0a, 0x35, 0x8c, - 0x4d, 0x6c, 0x2e, 0x30, 0x21, 0xf3, 0xbf, 0x72, 0xb2, 0xf8, 0xd7, 0x1c, 0xff, 0xb4, 0x1d, 0x99, - 0xcb, 0x3c, 0x6c, 0x74, 0x1a, 0x88, 0xd0, 0x45, 0x74, 0x24, 0xb8, 0xc5, 0x5d, 0x3f, 0x0d, 0xd6, - 0x3e, 0x1d, 0x1a, 0xd5, 0x15, 0x0e, 0xf1, 0x1b, 0xa4, 0x78, 0x78, 0xd3, 0x56, 0xe7, 0xbd, 0x6b, - 0x86, 0xb1, 0xdd, 0xbb, 0x56, 0xa0, 0x84, 0xda, 0x6f, 0x62, 0xc9, 0x0f, 0xe2, 0x81, 0x68, 0x7c, - 0x4b, 0x0b, 0x94, 0xed, 0xb6, 0xad, 0x71, 0x30, 0x19, 0xb0, 0xdf, 0xb5, 0x86, 0xf8, 0x20, 0xbf, - 0x01, 0x79, 0xc3, 0xe0, 0xba, 0xf2, 0x98, 0xbd, 0xcb, 0x9f, 0xc1, 0x73, 0xe5, 0xf1, 0x61, 0xe1, - 0xf4, 0x73, 0x56, 0xe0, 0xa7, 0xc1, 0x44, 0xe0, 0xf1, 0x80, 0x23, 0x0a, 0xd9, 0xb0, 0x76, 0x15, - 0x8e, 0x51, 0x39, 0x73, 0x90, 0x8b, 0x93, 0xa1, 0x67, 0x39, 0x34, 0xd9, 0x38, 0x8a, 0xd7, 0xa2, - 0x11, 0x29, 0x61, 0x3e, 0x89, 0x2c, 0x80, 0x6c, 0x4f, 0x22, 0x4b, 0x58, 0x7d, 0xe6, 0xaa, 0x79, - 0x8f, 0x19, 0x03, 0x3c, 0x43, 0x4a, 0x07, 0xc9, 0x52, 0xe0, 0x1e, 0x16, 0x02, 0x9e, 0x32, 0xf9, - 0xb9, 0xf9, 0x20, 0xfb, 0x16, 0x46, 0xe9, 0xbf, 0x70, 0x0c, 0x5f, 0x80, 0xa1, 0x51, 0x17, 0xe6, - 0x79, 0xc3, 0xb8, 0x14, 0xe5, 0x04, 0x21, 0x9d, 0x9f, 0x2f, 0x38, 0xc1, 0xb9, 0x09, 0x62, 0x0b, - 0xe4, 0x62, 0xc4, 0xc6, 0x76, 0x74, 0x3b, 0x57, 0x8f, 0x84, 0x11, 0x6a, 0x61, 0xfd, 0xfe, 0x92, - 0x03, 0x53, 0x79, 0xf0, 0x2c, 0x8b, 0x05, 0x13, 0xbc, 0x83, 0xe3, 0x59, 0x2c, 0x98, 0x70, 0x34, - 0x95, 0x67, 0xa0, 0x74, 0x8b, 0xb6, 0x17, 0xf9, 0x59, 0x5a, 0x7e, 0x7c, 0xf0, 0x35, 0x82, 0xa1, - 0x37, 0xc7, 0x82, 0x04, 0xad, 0x61, 0xea, 0x87, 0x73, 0xaa, 0x62, 0xf1, 0x6a, 0x56, 0x31, 0xf8, - 0x57, 0x0e, 0x95, 0x40, 0x38, 0xfb, 0x70, 0x28, 0x5e, 0x15, 0x8d, 0x6c, 0x6a, 0x08, 0x07, 0x93, - 0xcb, 0xe3, 0xd1, 0xc6, 0x0d, 0xb1, 0xa0, 0xd9, 0xf4, 0xc4, 0x0e, 0xd2, 0xd6, 0xf4, 0xc4, 0xbe, - 0x01, 0x41, 0xfa, 0x77, 0x65, 0x71, 0x09, 0xff, 0x10, 0xf1, 0x85, 0xec, 0xdb, 0x85, 0xbd, 0xaf, - 0xb6, 0x7f, 0x9a, 0x39, 0xb7, 0x8d, 0xc4, 0xf0, 0xb7, 0xaf, 0xc2, 0xa8, 0xbe, 0xc0, 0x2f, 0xcd, - 0x17, 0x55, 0xf0, 0xc1, 0x0a, 0xbd, 0x53, 0xae, 0x76, 0x14, 0x24, 0xc3, 0xe1, 0xff, 0x91, 0x75, - 0x9d, 0x83, 0x28, 0x8b, 0x4e, 0xae, 0x73, 0x04, 0x62, 0x78, 0xa9, 0x41, 0x03, 0xd4, 0xb7, 0x69, - 0x25, 0xf5, 0x82, 0x50, 0x67, 0x0b, 0x47, 0x58, 0x24, 0x73, 0x3a, 0xd7, 0xd1, 0xcf, 0x0c, 0x40, - 0x19, 0x21, 0x29, 0x4f, 0x8e, 0x44, 0xc2, 0x31, 0xf2, 0x19, 0x0e, 0x4d, 0xd3, 0x87, 0x25, 0x05, - 0x9b, 0xe2, 0xe1, 0x24, 0xc4, 0x9d, 0xb6, 0x50, 0x29, 0xda, 0x00, 0xda, 0xaa, 0x14, 0x6d, 0xe1, - 0x09, 0xda, 0x5b, 0xf0, 0x05, 0x87, 0xd8, 0x64, 0xf6, 0xb4, 0x2b, 0x6d, 0x67, 0x33, 0x03, 0xad, - 0x04, 0x6d, 0xeb, 0x62, 0x47, 0x57, 0x96, 0x5c, 0x14, 0xc9, 0x47, 0x89, 0x2b, 0xcb, 0xef, 0x71, - 0xe0, 0x3c, 0xba, 0x52, 0xda, 0x1a, 0x0b, 0x84, 0xe3, 0x09, 0x6b, 0xe7, 0xd1, 0x95, 0xd2, 0xd6, - 0x5a, 0xb5, 0xd6, 0xd1, 0x79, 0x54, 0x07, 0xd2, 0xbd, 0x8f, 0x74, 0x44, 0x7a, 0xb7, 0x0f, 0xc9, - 0xa7, 0x70, 0x26, 0x0d, 0x03, 0x22, 0xc6, 0xe2, 0x91, 0xb0, 0x98, 0x2d, 0x74, 0xc4, 0x37, 0x59, - 0x9e, 0x5a, 0x43, 0x32, 0x15, 0xaf, 0xdb, 0x1a, 0x93, 0x12, 0xbc, 0xbd, 0xf8, 0xc4, 0xc2, 0x39, - 0x2a, 0xde, 0x2d, 0xa0, 0xf5, 0xe5, 0xf9, 0x1c, 0x7d, 0x24, 0xc7, 0xce, 0x65, 0xdd, 0xfd, 0xca, - 0xd1, 0x5d, 0xee, 0x52, 0x58, 0x99, 0x6c, 0x26, 0xc3, 0x5c, 0x18, 0x06, 0xd9, 0x45, 0xfc, 0xc2, - 0x7c, 0x90, 0xa5, 0x09, 0x98, 0x93, 0x18, 0xad, 0x53, 0x90, 0x0a, 0x1b, 0x42, 0x4e, 0xaf, 0x6d, - 0xaa, 0xaf, 0x97, 0x12, 0x49, 0x29, 0xb4, 0x3a, 0x10, 0xdc, 0x1c, 0x56, 0x0f, 0x99, 0x85, 0x16, - 0x67, 0xa1, 0x0d, 0x2c, 0x45, 0x5d, 0x18, 0x49, 0x13, 0x82, 0xff, 0x31, 0xee, 0x76, 0x10, 0xe0, - 0x35, 0xfe, 0xd5, 0x11, 0xc8, 0x0a, 0xe5, 0x6f, 0xc3, 0x1f, 0xda, 0x09, 0xd3, 0x20, 0x35, 0x4b, - 0x0d, 0x89, 0xf2, 0xb7, 0xf1, 0xff, 0xb9, 0x74, 0xfa, 0x73, 0x1a, 0x2e, 0x57, 0xed, 0x85, 0x04, - 0x46, 0x4e, 0xf0, 0xf6, 0x0c, 0x88, 0x82, 0xd8, 0xba, 0x98, 0x58, 0x40, 0x1a, 0xd6, 0xba, 0x76, - 0xd0, 0x80, 0x7e, 0x86, 0xae, 0x75, 0xcb, 0xe2, 0x91, 0xac, 0x75, 0xaa, 0x95, 0xe1, 0xff, 0x3b, - 0xcb, 0x7a, 0x5f, 0x4e, 0xd4, 0x34, 0x06, 0xea, 0x25, 0x07, 0xd6, 0x4b, 0x20, 0x86, 0x67, 0xbd, - 0x1a, 0x20, 0x41, 0x67, 0x2f, 0x27, 0x8b, 0xaf, 0xd1, 0x90, 0xee, 0x78, 0xde, 0x98, 0x9c, 0xa0, - 0x43, 0x07, 0xba, 0x95, 0xf7, 0x3a, 0x09, 0x72, 0x8b, 0x1d, 0x67, 0xdb, 0xa6, 0xd5, 0x48, 0x78, - 0x72, 0x34, 0x11, 0xc6, 0x58, 0x0e, 0x11, 0x53, 0x79, 0xc3, 0x86, 0x4c, 0xf0, 0x73, 0x87, 0xdd, - 0xb4, 0x09, 0x47, 0x53, 0xf9, 0x5c, 0x50, 0xdd, 0x6d, 0xbb, 0x9a, 0x5d, 0xdb, 0x04, 0xdb, 0x05, - 0x76, 0xd8, 0x2a, 0x7b, 0x5b, 0x53, 0x7d, 0xe7, 0x20, 0xd4, 0x3f, 0x1b, 0xa5, 0xdd, 0x31, 0xf6, - 0xba, 0xcd, 0x26, 0x4f, 0xf0, 0xff, 0x1b, 0x23, 0x11, 0xd3, 0xdb, 0xe3, 0xd6, 0x98, 0x64, 0x2f, - 0x11, 0x33, 0x40, 0xc3, 0x4a, 0xc4, 0x06, 0x58, 0x82, 0x6e, 0x5c, 0x16, 0x9f, 0xa6, 0xac, 0x5a, - 0xbb, 0xb1, 0x40, 0x4e, 0x27, 0xf7, 0x6c, 0xc0, 0x59, 0x5c, 0xb9, 0x76, 0xa5, 0x25, 0x80, 0x83, - 0xef, 0x83, 0xdd, 0x7d, 0x46, 0xdd, 0x9e, 0xea, 0x84, 0x3e, 0x44, 0xc7, 0x54, 0x19, 0x88, 0x84, - 0xde, 0x08, 0x87, 0x92, 0x9b, 0x6b, 0x03, 0xc1, 0x2d, 0x81, 0x7a, 0x29, 0x61, 0xb6, 0x54, 0xb5, - 0x05, 0xb5, 0xb5, 0x54, 0x75, 0x68, 0x41, 0xd0, 0xae, 0x87, 0x2b, 0x1c, 0xc5, 0x4a, 0x69, 0xbb, - 0x94, 0xea, 0xff, 0xb5, 0xd2, 0x77, 0x5a, 0xe9, 0xb9, 0xae, 0x74, 0xb4, 0xb9, 0x6d, 0x6b, 0x46, - 0x22, 0x32, 0xd6, 0xbd, 0x11, 0x4b, 0xf0, 0x7f, 0x44, 0x38, 0xd1, 0xcb, 0x31, 0x12, 0x35, 0x69, - 0x55, 0xb4, 0xde, 0x86, 0x13, 0x19, 0x40, 0x1c, 0x39, 0x51, 0x0e, 0xa4, 0x1e, 0x8a, 0x46, 0xc3, - 0x09, 0xf6, 0x5f, 0xfa, 0xd0, 0x29, 0xe5, 0xc6, 0x21, 0xb2, 0x82, 0x6d, 0x6b, 0x1c, 0xcc, 0xcd, - 0xa2, 0xf4, 0x43, 0x0d, 0xea, 0xa8, 0xff, 0x84, 0x6c, 0x44, 0xbf, 0x94, 0x88, 0x36, 0xc5, 0x83, - 0xd2, 0xda, 0xe0, 0x66, 0xa9, 0x31, 0x60, 0xbd, 0x11, 0x8d, 0x30, 0x14, 0x9b, 0x59, 0xd6, 0x61, - 0x69, 0x49, 0x83, 0x98, 0xf7, 0x17, 0x0c, 0x0a, 0x44, 0x3f, 0x71, 0xf6, 0x84, 0x76, 0x6c, 0xb8, - 0x6d, 0x6b, 0x1c, 0xd8, 0x4a, 0x9c, 0x0c, 0x24, 0x81, 0x07, 0xc2, 0x44, 0x48, 0xf8, 0x0d, 0x87, - 0x1e, 0x58, 0x21, 0xe5, 0x22, 0x63, 0x15, 0xbc, 0xce, 0x1a, 0x17, 0xa7, 0x10, 0xbb, 0xbf, 0xb4, - 0xc1, 0x83, 0xea, 0xe7, 0xed, 0x6a, 0x1c, 0xe4, 0x39, 0x3b, 0x3c, 0xca, 0xdf, 0x8e, 0x04, 0x1a, - 0xa5, 0x77, 0xf8, 0x83, 0x2e, 0x34, 0xf9, 0x95, 0x26, 0x29, 0xbe, 0xb5, 0x56, 0x8a, 0x37, 0x56, - 0x6e, 0x15, 0x83, 0xea, 0xb4, 0xd5, 0x54, 0x9b, 0x39, 0x87, 0x05, 0x90, 0x2d, 0xe7, 0xb0, 0x84, - 0x25, 0xcb, 0xed, 0x14, 0x27, 0x8b, 0x0d, 0xfc, 0xe2, 0xf4, 0xf1, 0x13, 0x43, 0xe7, 0x3a, 0xc0, - 0xfe, 0x06, 0x14, 0x4b, 0x65, 0xca, 0xf5, 0x0f, 0xd2, 0x87, 0x8e, 0xc3, 0x8f, 0xf4, 0xa1, 0x2b, - 0xd4, 0x47, 0x8d, 0x94, 0xac, 0xf7, 0xaf, 0x72, 0xdf, 0x52, 0x2b, 0x87, 0xcc, 0x43, 0x31, 0x29, - 0xde, 0x98, 0x28, 0x0f, 0xe0, 0x21, 0x62, 0x45, 0x27, 0x8c, 0xf5, 0x1d, 0x1a, 0x5c, 0x4b, 0x5d, - 0x60, 0x95, 0x2b, 0x6d, 0x42, 0x3f, 0x31, 0x95, 0xf9, 0xae, 0xd3, 0x1f, 0x33, 0x02, 0xae, 0x9e, - 0x27, 0xdb, 0x20, 0xe0, 0xe6, 0x14, 0x3b, 0x6c, 0xb2, 0x48, 0x34, 0x24, 0x35, 0x06, 0x22, 0x24, - 0x40, 0xd0, 0x97, 0x1c, 0x9a, 0x80, 0x8f, 0xa7, 0x2a, 0x9a, 0x78, 0xd8, 0x3a, 0x2b, 0x84, 0x5e, - 0x9f, 0xcf, 0x82, 0x7c, 0x07, 0x5f, 0x97, 0xc9, 0xc8, 0x70, 0x22, 0x4c, 0x48, 0xcb, 0x08, 0x61, - 0x7a, 0x21, 0x57, 0xa3, 0x7b, 0x98, 0xfa, 0xe1, 0xfd, 0xe6, 0x8d, 0xe9, 0xcf, 0x82, 0xe5, 0x49, - 0x8a, 0xc1, 0x59, 0x17, 0x9a, 0xb2, 0x42, 0x4a, 0x56, 0x6e, 0x59, 0x1b, 0x8d, 0x25, 0xe8, 0x0b, - 0x12, 0xce, 0x5b, 0x69, 0x65, 0xff, 0x63, 0x06, 0x73, 0xca, 0xe5, 0x63, 0x05, 0x4d, 0x96, 0xe8, - 0x25, 0x4e, 0x16, 0x1b, 0xf9, 0xc7, 0x09, 0xe3, 0x3b, 0xbe, 0x43, 0xd9, 0xb1, 0x3d, 0x7b, 0x63, - 0x6f, 0x66, 0xe0, 0x33, 0x30, 0xbc, 0x86, 0x30, 0xc5, 0xda, 0x43, 0xa4, 0xbb, 0x12, 0x00, 0xc9, - 0xaa, 0xec, 0x6e, 0x87, 0x95, 0x87, 0x53, 0x58, 0x02, 0x45, 0x76, 0x0d, 0xdb, 0x07, 0xa8, 0xf8, - 0xf8, 0x67, 0x2c, 0x68, 0x54, 0xb7, 0x25, 0x11, 0x8d, 0x25, 0xca, 0xeb, 0x9a, 0x12, 0xaa, 0x30, - 0x9d, 0x28, 0x7f, 0x9b, 0xfe, 0xa5, 0x12, 0x4b, 0x7f, 0x52, 0xfc, 0xdc, 0x8a, 0x54, 0x38, 0xf4, - 0xf7, 0xf0, 0xa4, 0x62, 0x23, 0x80, 0xcf, 0xcb, 0x13, 0x9a, 0x90, 0xea, 0x8b, 0x3b, 0x43, 0x2a, - 0xeb, 0xb7, 0xc8, 0xfc, 0x48, 0x55, 0xfe, 0x76, 0x92, 0x79, 0x8b, 0x3c, 0xe3, 0xc2, 0xd9, 0xa5, - 0x71, 0x88, 0x76, 0x8a, 0x21, 0xce, 0x33, 0x9f, 0xe0, 0xad, 0x48, 0x61, 0x01, 0x67, 0xab, 0x60, - 0xb3, 0x03, 0x27, 0xa4, 0xbb, 0x80, 0x13, 0xb2, 0x91, 0x87, 0xf1, 0xca, 0xaa, 0xb5, 0xca, 0xb5, - 0xcb, 0x4a, 0xe7, 0x45, 0x65, 0x7b, 0x1b, 0xf8, 0xf6, 0x11, 0x9c, 0x3b, 0x0f, 0x0f, 0xed, 0xe8, - 0x74, 0xfb, 0xf3, 0x81, 0x2a, 0x23, 0x6a, 0xfa, 0xbe, 0x4f, 0xd3, 0xc7, 0x3e, 0x00, 0x12, 0xab, - 0x10, 0x26, 0x82, 0x82, 0xf9, 0x8c, 0x83, 0x48, 0x42, 0xe8, 0x48, 0xc9, 0xd4, 0x0c, 0xe4, 0xf8, - 0x43, 0x0e, 0x4d, 0xac, 0x96, 0xea, 0x9a, 0xea, 0xc9, 0x72, 0x08, 0x24, 0xb6, 0x58, 0x85, 0x6f, - 0x31, 0x00, 0x38, 0x84, 0x6f, 0xc9, 0x81, 0x23, 0x44, 0x09, 0xe0, 0x13, 0x30, 0x7b, 0xf1, 0xbd, - 0x6c, 0xef, 0x01, 0xf3, 0xc8, 0xdd, 0xb6, 0x35, 0x10, 0x1e, 0xc8, 0x3b, 0xdb, 0x1e, 0x9b, 0x90, - 0xfa, 0x45, 0x95, 0xb1, 0x7f, 0x40, 0x76, 0x4a, 0x20, 0x19, 0xdc, 0x5c, 0xd5, 0x94, 0x48, 0x46, - 0x1b, 0xd7, 0x4a, 0xc9, 0x64, 0x38, 0x52, 0x6f, 0xbd, 0x53, 0x4c, 0x60, 0x8e, 0x3b, 0xc5, 0x02, - 0x9a, 0x60, 0xd6, 0xcd, 0x61, 0x25, 0x32, 0x5c, 0xed, 0x6a, 0x6a, 0xd5, 0xeb, 0xc0, 0xae, 0x4f, - 0x94, 0x23, 0x67, 0xc1, 0x26, 0x7b, 0xe8, 0x04, 0xc9, 0x6c, 0xe0, 0x1e, 0x16, 0x02, 0xa3, 0xfa, - 0xb2, 0xf7, 0x25, 0x0b, 0x54, 0xdf, 0x90, 0xea, 0xca, 0x83, 0xec, 0xd7, 0x13, 0xe5, 0x38, 0x39, - 0x71, 0xf9, 0xdb, 0x5a, 0x1e, 0xe4, 0x77, 0xc8, 0xdf, 0x35, 0xa1, 0x77, 0x20, 0x73, 0xda, 0x0a, - 0x09, 0x27, 0x60, 0xec, 0x75, 0x21, 0x5e, 0x45, 0x20, 0xfc, 0x16, 0x9b, 0xb8, 0xde, 0x2c, 0xa4, - 0x99, 0x61, 0x6c, 0x6f, 0x4b, 0x56, 0xa0, 0x84, 0x18, 0xbf, 0xcf, 0xc9, 0x62, 0x84, 0x7f, 0x92, - 0xdc, 0x73, 0xf1, 0xde, 0x57, 0x97, 0x2a, 0x3e, 0x2f, 0xd2, 0xc7, 0xf7, 0x99, 0xd2, 0x9c, 0x11, - 0x10, 0x6c, 0xf0, 0xe4, 0xbe, 0xb5, 0x66, 0x60, 0xd2, 0xeb, 0x5d, 0x66, 0x43, 0x36, 0x27, 0x3a, - 0xd1, 0xf3, 0x08, 0xa7, 0x39, 0xae, 0x52, 0xef, 0x23, 0x2a, 0xc5, 0x3e, 0x76, 0xa1, 0x49, 0x4c, - 0x9e, 0x7f, 0xec, 0x21, 0x6b, 0x19, 0xed, 0xd8, 0x00, 0x61, 0x7b, 0xb5, 0x36, 0x03, 0x32, 0x99, - 0xe5, 0x36, 0xf1, 0x3c, 0x51, 0x5a, 0x62, 0x5c, 0xe1, 0x90, 0x75, 0xd7, 0xb2, 0x65, 0x5a, 0xca, - 0x64, 0x47, 0x2a, 0x50, 0x0b, 0x90, 0x2b, 0xa9, 0x01, 0x12, 0xe5, 0x26, 0xbd, 0xf3, 0x60, 0xb6, - 0xa5, 0x0d, 0x0e, 0x6c, 0x4c, 0xa3, 0x55, 0xde, 0x15, 0xdf, 0x94, 0x46, 0x09, 0x48, 0xce, 0x87, - 0xa3, 0xff, 0x41, 0xea, 0x78, 0x76, 0x15, 0xd4, 0x84, 0x12, 0x40, 0xac, 0xf9, 0x0e, 0x34, 0x60, - 0x01, 0x6d, 0x35, 0xa3, 0xb6, 0xf0, 0xcc, 0x32, 0xfb, 0x05, 0xff, 0xa0, 0x99, 0x74, 0x35, 0xd5, - 0x6e, 0xbf, 0x25, 0xf1, 0x6a, 0xaa, 0xbf, 0x29, 0xf9, 0xd6, 0x78, 0x6b, 0xbe, 0x29, 0xf9, 0xc2, - 0x21, 0x86, 0x80, 0x6d, 0x2e, 0xfc, 0x76, 0xc7, 0xe6, 0xde, 0xb7, 0x7c, 0xbb, 0xb3, 0x48, 0xf0, - 0x6f, 0xf9, 0x76, 0x67, 0x95, 0xc4, 0x1f, 0x27, 0xcc, 0xf0, 0xf3, 0x24, 0x16, 0x1b, 0xa5, 0x44, - 0x82, 0x50, 0x08, 0xbc, 0xd3, 0xd9, 0x5c, 0x1f, 0xf9, 0x02, 0x62, 0x82, 0x2c, 0xf3, 0xbe, 0x78, - 0x0b, 0x04, 0x81, 0x65, 0x14, 0x82, 0x71, 0x92, 0xe8, 0x61, 0x0f, 0x98, 0x52, 0x80, 0x5b, 0xde, - 0xbb, 0x2c, 0xf3, 0x8b, 0xbb, 0xe7, 0xe6, 0x01, 0x49, 0xa8, 0xf1, 0xbf, 0x72, 0xb2, 0xb8, 0x9b, - 0xe3, 0x05, 0xc0, 0xb2, 0xa6, 0xb6, 0xbc, 0xa6, 0xb6, 0x79, 0x49, 0xb9, 0x96, 0xed, 0x3c, 0x73, - 0xa1, 0x1d, 0xd0, 0xa3, 0x7c, 0x48, 0x4f, 0x54, 0xee, 0xfe, 0x11, 0x21, 0x05, 0x4e, 0x9a, 0xa6, - 0x09, 0x35, 0x1e, 0x22, 0xf0, 0xe0, 0xbc, 0x98, 0xd9, 0x2f, 0x3e, 0x50, 0xda, 0x4e, 0x65, 0xba, - 0x5a, 0xf3, 0xeb, 0x98, 0xa1, 0x64, 0xa5, 0x77, 0xe9, 0x2d, 0x52, 0xb2, 0x3c, 0xa8, 0x22, 0xa8, - 0x92, 0xb1, 0xd5, 0x85, 0xa6, 0x30, 0xc6, 0x52, 0x90, 0x24, 0x64, 0x79, 0x43, 0xc0, 0xe2, 0xf4, - 0xb3, 0x04, 0xb3, 0x3d, 0xfd, 0x6c, 0xa0, 0x19, 0xb3, 0x67, 0x91, 0x9f, 0x02, 0x39, 0x62, 0x52, - 0xfd, 0xfb, 0x32, 0x03, 0xad, 0xa9, 0x81, 0x2b, 0x20, 0x89, 0xb8, 0x4b, 0xb5, 0x62, 0x1a, 0x46, - 0x16, 0x9b, 0xe0, 0x67, 0xda, 0x77, 0xa6, 0xbb, 0xcf, 0xc3, 0xd6, 0x62, 0x64, 0x96, 0x2a, 0xef, - 0xf3, 0x79, 0x3d, 0x47, 0x49, 0xf1, 0x04, 0x5c, 0xeb, 0xc8, 0x5f, 0x34, 0x41, 0x08, 0x5e, 0x4d, - 0xbb, 0x34, 0x27, 0xfa, 0x61, 0xc9, 0x60, 0x09, 0x36, 0x8c, 0x13, 0xbd, 0x1d, 0x19, 0xf6, 0x73, - 0xb2, 0xb8, 0x94, 0xd7, 0x6d, 0xb4, 0x0c, 0x64, 0x98, 0xa3, 0x07, 0x2c, 0x66, 0xf0, 0xcf, 0x74, - 0xb5, 0xb2, 0x50, 0xc0, 0x63, 0xdc, 0x35, 0xdf, 0x8c, 0x04, 0xe5, 0x6f, 0xc3, 0x1f, 0xe4, 0xae, - 0xbb, 0xd3, 0x85, 0xa6, 0x30, 0x46, 0x47, 0x4e, 0xd4, 0xb0, 0x04, 0xb3, 0xa5, 0x86, 0x0d, 0x34, - 0xa1, 0xc6, 0x3e, 0xa0, 0x06, 0xd8, 0x2c, 0x99, 0xa8, 0xa1, 0x15, 0x0f, 0x47, 0x8d, 0x95, 0xbe, - 0xdb, 0x47, 0x0d, 0x95, 0xdd, 0x4e, 0xd6, 0xd4, 0xbc, 0x0c, 0x21, 0xec, 0x75, 0xc1, 0x66, 0x32, - 0x3c, 0x91, 0x17, 0x2c, 0xb3, 0x24, 0x5e, 0x64, 0x94, 0x02, 0x06, 0x22, 0x3c, 0x6e, 0x67, 0x5e, - 0x93, 0x03, 0x08, 0x74, 0xe0, 0x6f, 0x23, 0x1d, 0x4e, 0x70, 0x68, 0xf4, 0x0f, 0xa5, 0x40, 0x43, - 0x72, 0xb3, 0x39, 0x37, 0x26, 0x94, 0xdb, 0x2a, 0x3d, 0x68, 0xb5, 0x1e, 0x9d, 0x7b, 0x31, 0x5f, - 0x92, 0xee, 0xde, 0xad, 0x5e, 0x3d, 0xb6, 0x9d, 0x52, 0xfa, 0xaf, 0x82, 0xa1, 0x0b, 0xb8, 0xeb, - 0xb9, 0x6d, 0x6b, 0x30, 0x4e, 0xd3, 0xf9, 0x87, 0x2c, 0x70, 0xda, 0x8c, 0xbf, 0x50, 0xb9, 0x97, - 0x93, 0xc5, 0x0e, 0x8e, 0xf7, 0xa0, 0x69, 0xc4, 0x78, 0xc1, 0xb3, 0x1a, 0x60, 0x3c, 0x62, 0x6d, - 0x8d, 0xa7, 0x3a, 0x1a, 0x14, 0x0a, 0x17, 0xcc, 0x5f, 0x38, 0x7f, 0x81, 0x17, 0x95, 0xd7, 0x05, - 0x13, 0x81, 0x58, 0xb8, 0xbc, 0x79, 0xb1, 0x8f, 0x73, 0x09, 0x93, 0x02, 0xb1, 0x58, 0x43, 0x38, - 0x88, 0x35, 0x94, 0xe5, 0xbf, 0x48, 0x44, 0x23, 0x15, 0xa6, 0x92, 0xd7, 0x1e, 0x41, 0x0f, 0x23, - 0x24, 0xc6, 0xc2, 0x2b, 0xa5, 0xad, 0x62, 0x53, 0x72, 0x33, 0x3f, 0xb9, 0xc8, 0xe5, 0x1e, 0xaf, - 0xfe, 0x15, 0x8d, 0x87, 0xdf, 0xc2, 0x70, 0x1e, 0x57, 0xdd, 0x24, 0x34, 0xc1, 0x00, 0xf4, 0x83, - 0xba, 0xd1, 0xb1, 0x78, 0x34, 0x19, 0x5d, 0xf4, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xe9, 0x9c, - 0x56, 0x6d, 0xd6, 0x21, 0x04, 0x00, + 0x10, 0x99, 0x19, 0x92, 0xc2, 0x5a, 0x34, 0x25, 0xa8, 0x84, 0xb0, 0xb6, 0x00, 0x3b, 0x14, 0x33, + 0x39, 0x64, 0x71, 0x3c, 0x15, 0x67, 0xad, 0xf8, 0x88, 0xf4, 0x7a, 0x0d, 0xbb, 0xc5, 0x46, 0x0b, + 0xcf, 0x06, 0xbd, 0x89, 0xec, 0xec, 0x51, 0x12, 0x56, 0xa5, 0xdf, 0xa2, 0x80, 0xe0, 0x0a, 0xa6, + 0xa2, 0x04, 0x40, 0x4e, 0xa2, 0x68, 0x1b, 0xb7, 0xd3, 0x04, 0x70, 0x00, 0x0e, 0xb2, 0xe5, 0x3b, + 0x9b, 0x17, 0x01, 0xc8, 0x10, 0xb5, 0x3f, 0x8e, 0xfb, 0xac, 0x13, 0x2b, 0x70, 0x8a, 0x2c, 0xd1, + 0x54, 0xd8, 0x9c, 0x81, 0x26, 0xb1, 0x77, 0xeb, 0x9e, 0x7f, 0x18, 0x0c, 0x4c, 0x66, 0x9b, 0xb5, + 0xf8, 0xb8, 0x1d, 0x0d, 0x00, 0x6a, 0x8e, 0x47, 0xce, 0x42, 0xff, 0x51, 0x30, 0x59, 0x5b, 0x06, + 0x9a, 0xee, 0xb2, 0xf3, 0x3f, 0xd7, 0xed, 0xf8, 0xe7, 0x0c, 0x34, 0xb9, 0x12, 0xdb, 0x84, 0xe0, + 0x38, 0xaf, 0xab, 0xf4, 0x85, 0xad, 0x36, 0x11, 0x0c, 0x67, 0xc2, 0x3e, 0x35, 0x64, 0x1e, 0x33, + 0x9a, 0xa4, 0xd8, 0x64, 0x85, 0xe5, 0xad, 0xc8, 0x30, 0xe3, 0x11, 0x8c, 0xe1, 0xad, 0x60, 0x1f, + 0x09, 0xfe, 0x8f, 0x28, 0xdb, 0xe7, 0x0f, 0x13, 0x75, 0x44, 0x6e, 0xe9, 0x46, 0x55, 0x52, 0x04, + 0x28, 0x11, 0xdf, 0x21, 0xfc, 0x30, 0xdc, 0x87, 0x83, 0x57, 0xb4, 0xa1, 0x4e, 0x40, 0x4f, 0xc5, + 0x8c, 0xbd, 0x9b, 0x16, 0x39, 0x12, 0x1b, 0x3c, 0x0d, 0xb8, 0x97, 0x6d, 0xb3, 0xd0, 0x43, 0xe3, + 0x7d, 0xc5, 0x06, 0x9b, 0xb5, 0xfe, 0x2b, 0xb1, 0xe8, 0x5e, 0xa8, 0x21, 0xc1, 0xf4, 0xe1, 0x23, + 0x25, 0xfa, 0x46, 0xa0, 0xc5, 0x82, 0x7d, 0xc7, 0xc4, 0x47, 0x62, 0xd1, 0xbd, 0x06, 0x17, 0xc2, + 0x22, 0xc5, 0xf8, 0xb9, 0x93, 0xda, 0x50, 0x67, 0xe1, 0x3f, 0xcc, 0x44, 0xf9, 0x46, 0x17, 0xaa, + 0x3d, 0x3a, 0xe6, 0xa2, 0x3d, 0xc2, 0x41, 0xc3, 0x99, 0x17, 0x29, 0x30, 0x9a, 0xf6, 0x08, 0x9c, + 0x47, 0xb5, 0xe1, 0x03, 0xa3, 0xea, 0x90, 0x48, 0x88, 0x3f, 0x98, 0x5d, 0x6c, 0xa8, 0x1b, 0xb6, + 0x0b, 0x34, 0x48, 0xc6, 0x57, 0x7e, 0x34, 0x4d, 0x92, 0x8d, 0xa5, 0xcf, 0xbc, 0x55, 0x96, 0xbe, + 0x96, 0xd1, 0x48, 0xc1, 0xa3, 0xb4, 0x42, 0x95, 0x4a, 0x18, 0x8d, 0xd4, 0xad, 0x3f, 0x7d, 0xa6, + 0x06, 0xea, 0xb6, 0xbf, 0x2a, 0x6f, 0x39, 0x75, 0x45, 0x2f, 0xda, 0x83, 0xb0, 0xb0, 0x53, 0x05, + 0x69, 0x40, 0x1a, 0xc5, 0x16, 0xa3, 0x37, 0xfa, 0xa5, 0x8b, 0xde, 0xe8, 0xb9, 0x51, 0xf4, 0x46, + 0x29, 0xc7, 0xbd, 0xeb, 0x9a, 0xa3, 0x77, 0x5c, 0x34, 0x47, 0x2f, 0xde, 0x84, 0xe6, 0x28, 0x3f, + 0x38, 0xc9, 0xa2, 0x39, 0xfa, 0x13, 0x8b, 0xee, 0x68, 0x8b, 0x53, 0x77, 0x34, 0x41, 0x9c, 0xe5, + 0x08, 0x34, 0x5f, 0x1a, 0x08, 0xd4, 0x43, 0x98, 0x79, 0x9c, 0xf3, 0xdf, 0xa2, 0x57, 0x2a, 0x4a, + 0xa3, 0x57, 0x32, 0x4d, 0xd2, 0x74, 0x6c, 0x63, 0xd5, 0x32, 0xfd, 0x6b, 0x57, 0x2d, 0xd3, 0xa9, + 0x7b, 0x49, 0xcb, 0x54, 0x10, 0x9c, 0xe1, 0xaa, 0x65, 0xfa, 0x13, 0xab, 0x7a, 0x89, 0xf1, 0x12, + 0xcb, 0x73, 0xf7, 0x12, 0xb3, 0x63, 0xba, 0xbb, 0xa0, 0x19, 0x79, 0xc1, 0x1e, 0xb4, 0x68, 0x6e, + 0x4a, 0xcd, 0x08, 0x43, 0xfb, 0x12, 0xd5, 0xc8, 0x05, 0x8c, 0x98, 0x09, 0x6a, 0x27, 0xa9, 0x51, + 0x1e, 0x4d, 0xb5, 0x48, 0xd2, 0xac, 0x34, 0xa8, 0x4a, 0x1b, 0x04, 0xb3, 0x9b, 0xf8, 0x16, 0xb1, + 0x15, 0x8c, 0xee, 0x05, 0xbf, 0x71, 0x31, 0x71, 0xb6, 0x1d, 0x5e, 0x83, 0x12, 0x4f, 0x2c, 0xba, + 0xb7, 0xb2, 0x5c, 0x53, 0xdb, 0xcc, 0x87, 0xad, 0xd8, 0x13, 0x1b, 0x1c, 0x8c, 0xef, 0xe8, 0x8c, + 0x0d, 0x44, 0x12, 0x67, 0xdb, 0xb5, 0xf6, 0x8b, 0x5a, 0x67, 0x3f, 0x4d, 0x2b, 0x36, 0x78, 0xda, + 0xc0, 0xcf, 0xb1, 0x81, 0xa8, 0xb6, 0x6b, 0x27, 0x75, 0xce, 0x30, 0x3f, 0x67, 0x77, 0x1b, 0x9a, + 0x7c, 0xdf, 0xb9, 0x0d, 0xf9, 0xac, 0x56, 0xf7, 0xf9, 0x06, 0x72, 0x2f, 0xb7, 0x5a, 0xdd, 0x3f, + 0x33, 0x16, 0xab, 0xfb, 0x62, 0x3a, 0x27, 0x52, 0x62, 0x35, 0xc3, 0xb7, 0x9a, 0x72, 0xa7, 0x70, + 0xc1, 0x73, 0x00, 0xf1, 0x5d, 0x17, 0x8b, 0x6f, 0x76, 0x18, 0x5a, 0x43, 0x60, 0x27, 0x9c, 0x0b, + 0xc3, 0x6e, 0x68, 0xfd, 0xfc, 0x2d, 0x1b, 0x5a, 0x3b, 0x0c, 0xac, 0xdd, 0xac, 0x95, 0xa7, 0xde, + 0xeb, 0xd6, 0xca, 0xd3, 0x7e, 0xb8, 0xb5, 0xf2, 0xab, 0x68, 0xdc, 0x66, 0x25, 0x18, 0xd2, 0xe9, + 0x80, 0xe9, 0x86, 0x74, 0xe3, 0x31, 0xc1, 0x28, 0x13, 0x0b, 0x2c, 0x3b, 0xcc, 0x24, 0x99, 0xa1, + 0x8c, 0xaa, 0xd1, 0xd4, 0xc6, 0x4c, 0xcf, 0xb8, 0x37, 0x99, 0xe9, 0xbb, 0xa7, 0x6b, 0x18, 0xe4, + 0x54, 0xe9, 0x32, 0x87, 0xbe, 0xe1, 0x04, 0x07, 0x91, 0x2c, 0x2e, 0x00, 0x46, 0x58, 0xbb, 0xfc, + 0x35, 0x28, 0x10, 0xa8, 0xf4, 0x0b, 0x76, 0xab, 0xb4, 0xac, 0x86, 0xa8, 0x9f, 0x31, 0xb6, 0x4d, + 0xa3, 0x19, 0xf8, 0xd1, 0x14, 0x02, 0xff, 0x2e, 0x03, 0x4d, 0xb1, 0x4d, 0xfb, 0xde, 0x97, 0xb9, + 0xd6, 0xd8, 0x64, 0xae, 0x2e, 0xb9, 0x76, 0x9a, 0x6a, 0xc3, 0x10, 0xdd, 0x11, 0x64, 0xae, 0xb3, + 0x61, 0x1c, 0x0b, 0x90, 0xaa, 0x6d, 0x20, 0xfd, 0x24, 0x01, 0xce, 0x0d, 0x3b, 0x52, 0xc7, 0x6e, + 0x88, 0xd3, 0x6d, 0xd8, 0x68, 0x14, 0x9e, 0xf4, 0x7f, 0xc9, 0x44, 0x33, 0x21, 0xa6, 0xa7, 0xd3, + 0xe6, 0xee, 0xc7, 0xb2, 0x24, 0x8d, 0x11, 0x7b, 0x08, 0xf8, 0x2e, 0x7e, 0x19, 0x40, 0x98, 0x07, + 0xd0, 0x29, 0xd8, 0x2a, 0xc5, 0x53, 0x9c, 0xd5, 0xb8, 0xe1, 0x7a, 0x64, 0x1b, 0x0d, 0x1f, 0x48, + 0x98, 0x4d, 0x1d, 0xf7, 0x0d, 0x36, 0x43, 0x2a, 0x12, 0xf2, 0xa1, 0x05, 0xe4, 0x79, 0x89, 0xb7, + 0x46, 0xc0, 0x33, 0x9f, 0x25, 0x6e, 0x62, 0x03, 0xed, 0xb1, 0xa1, 0xee, 0xe4, 0xd9, 0x33, 0x5a, + 0xe7, 0xde, 0xd8, 0xe0, 0x60, 0x6c, 0xf8, 0x80, 0x19, 0xde, 0x0d, 0xf3, 0x2c, 0xfa, 0x37, 0x8c, + 0x14, 0x7f, 0x06, 0x16, 0xe8, 0xf0, 0x85, 0x96, 0x07, 0x82, 0xb5, 0x4a, 0x9d, 0xd6, 0x85, 0x33, + 0x58, 0xb5, 0x77, 0x6a, 0x5d, 0x6d, 0xda, 0xe5, 0xd3, 0xb1, 0xe1, 0x9e, 0xeb, 0x91, 0x6d, 0xb2, + 0x6d, 0xda, 0xfc, 0x2b, 0x0e, 0xb3, 0x56, 0xcc, 0x85, 0x99, 0x66, 0xad, 0xd3, 0x61, 0xbe, 0x04, + 0x3f, 0xbb, 0x98, 0xb8, 0x2e, 0x53, 0xa5, 0x17, 0xd0, 0xf3, 0x42, 0xaa, 0x03, 0x32, 0x72, 0xaf, + 0xb0, 0x0a, 0x41, 0x8b, 0x1c, 0x2a, 0x9a, 0x85, 0x0a, 0xdc, 0xfb, 0xde, 0xfb, 0xd7, 0x66, 0xdd, + 0xd8, 0x54, 0x15, 0xd8, 0xef, 0x1b, 0xae, 0xcd, 0x1c, 0x72, 0x6d, 0x2e, 0x7f, 0x0d, 0xdb, 0xe2, + 0xae, 0xb0, 0xf8, 0xcd, 0x18, 0x14, 0x16, 0xd8, 0x03, 0x31, 0x5b, 0x6f, 0x16, 0x12, 0x05, 0x76, + 0x8f, 0xd9, 0x30, 0x80, 0x86, 0xf6, 0xa2, 0x8d, 0x6a, 0x2f, 0xee, 0x25, 0x0b, 0xf3, 0x94, 0xe7, + 0x6e, 0x85, 0xba, 0x34, 0xd6, 0xb8, 0xff, 0x21, 0x03, 0x3d, 0x0c, 0x6a, 0x61, 0xeb, 0x20, 0x58, + 0x23, 0xf7, 0x63, 0xa2, 0x87, 0x55, 0x86, 0x56, 0x33, 0x63, 0x4c, 0x5a, 0x4d, 0x1c, 0x72, 0x8a, + 0x68, 0x35, 0x27, 0x38, 0x35, 0x99, 0x7c, 0xa9, 0x19, 0xd6, 0x34, 0xd3, 0x90, 0xab, 0x3c, 0x62, + 0x86, 0x35, 0xe5, 0xe9, 0xc5, 0xd3, 0xf6, 0x1e, 0x36, 0x24, 0x2b, 0x06, 0x55, 0x41, 0x1a, 0x19, + 0x69, 0x90, 0xd2, 0xee, 0x87, 0x58, 0x40, 0xf2, 0x12, 0x30, 0xca, 0x9e, 0x91, 0xe6, 0xf6, 0x91, + 0x4f, 0x8f, 0x59, 0x15, 0xea, 0x30, 0xad, 0xc2, 0xd6, 0x4c, 0xf4, 0x48, 0x9a, 0xe1, 0xee, 0xfd, + 0x0b, 0x5a, 0x6b, 0xb9, 0xa0, 0xa3, 0x9d, 0x12, 0x4e, 0xd9, 0x06, 0xf7, 0x74, 0x1e, 0x0c, 0x07, + 0xbb, 0xa5, 0x75, 0x75, 0x24, 0xba, 0x77, 0xb0, 0xca, 0x68, 0xf0, 0x18, 0x25, 0xef, 0x5c, 0x9d, + 0x2a, 0x79, 0xd1, 0x7b, 0x42, 0xfa, 0x9d, 0x12, 0x17, 0x38, 0x77, 0xde, 0x36, 0xe2, 0xc8, 0xa7, + 0xc7, 0xd2, 0x80, 0x7a, 0x6f, 0x2e, 0xca, 0x87, 0xfb, 0x72, 0x07, 0x5e, 0xbf, 0x0b, 0x19, 0x28, + 0xd7, 0x78, 0x48, 0xc8, 0xbb, 0xb7, 0x3f, 0x43, 0x95, 0xba, 0x32, 0x04, 0x5a, 0x2c, 0x6e, 0xcf, + 0x20, 0xc1, 0xee, 0x70, 0x70, 0x5c, 0xb8, 0xb0, 0xd6, 0x4c, 0x0c, 0xd7, 0x23, 0xdb, 0xd8, 0xca, + 0xd8, 0x50, 0x77, 0x6c, 0x20, 0xa2, 0x5d, 0xb9, 0x64, 0x79, 0x02, 0xc9, 0x59, 0x10, 0x06, 0xd4, + 0xf0, 0xbb, 0xa0, 0xf2, 0x4d, 0xb0, 0xa0, 0xa2, 0x61, 0x51, 0xe3, 0x17, 0x4e, 0x80, 0x5d, 0x17, + 0x3b, 0xb0, 0xb6, 0xf7, 0x5c, 0xbc, 0xe7, 0x78, 0xf2, 0xbb, 0xed, 0x23, 0x07, 0xae, 0xde, 0x18, + 0x6a, 0x8b, 0x0f, 0x34, 0x27, 0xba, 0x76, 0xc2, 0x9b, 0xa7, 0x3f, 0xa0, 0x57, 0x8f, 0xea, 0xb4, + 0xc6, 0x81, 0xab, 0x5a, 0x57, 0x87, 0xd6, 0x79, 0x9e, 0x84, 0xf6, 0xc5, 0xb6, 0x62, 0xfa, 0x74, + 0x19, 0xec, 0x0b, 0x0f, 0x6e, 0xe2, 0xcb, 0x3d, 0x5a, 0xcb, 0x60, 0xf2, 0xd3, 0x2f, 0xf5, 0x71, + 0x3e, 0x8f, 0x82, 0xe3, 0x9f, 0xbe, 0xd4, 0x53, 0x3b, 0x74, 0x8e, 0x05, 0xd0, 0x36, 0x0e, 0xd9, + 0xa6, 0x3f, 0xa8, 0x74, 0x3f, 0xf8, 0xe3, 0x1c, 0xe2, 0x0d, 0xff, 0x60, 0x38, 0x28, 0x2c, 0x2f, + 0x80, 0xfb, 0x1c, 0x50, 0xa5, 0x7a, 0xc1, 0xa5, 0x5a, 0x5c, 0x47, 0x40, 0x81, 0xe4, 0x4e, 0xd7, + 0x07, 0xd7, 0x59, 0xaf, 0xde, 0x83, 0x89, 0x03, 0xa7, 0x4b, 0x3c, 0x61, 0x23, 0xa0, 0xf0, 0xfc, + 0x91, 0xfd, 0x91, 0x78, 0xff, 0x56, 0x68, 0x56, 0xe4, 0x09, 0x2a, 0x61, 0xaf, 0xcf, 0x3f, 0x3f, + 0x36, 0xd8, 0x9c, 0x38, 0x3b, 0x38, 0x72, 0xe4, 0x54, 0x31, 0x64, 0x7a, 0x20, 0xd5, 0x38, 0x9d, + 0xa7, 0xf3, 0x5b, 0x6e, 0x34, 0x4d, 0xd6, 0x4f, 0x9c, 0xa6, 0xc9, 0xbe, 0x15, 0x9a, 0x86, 0x6f, + 0xe1, 0xd0, 0xd4, 0x3a, 0xeb, 0x5d, 0xab, 0x0d, 0x04, 0x21, 0x3a, 0x7a, 0x2e, 0x78, 0x32, 0xbb, + 0xd5, 0x8b, 0x2f, 0x02, 0x14, 0x6b, 0x7b, 0x0f, 0xc3, 0xa8, 0xc5, 0x1e, 0xd8, 0x2f, 0xb2, 0x59, + 0x74, 0xa7, 0xc8, 0x97, 0xb1, 0xc9, 0x9f, 0x16, 0xdd, 0x07, 0xdb, 0x24, 0xbb, 0x0d, 0x69, 0x44, + 0xe4, 0x73, 0x5c, 0xfd, 0x51, 0xe9, 0xaa, 0xaf, 0xb2, 0xd0, 0x14, 0x5b, 0xa7, 0x07, 0x04, 0xd5, + 0x4f, 0x95, 0xa0, 0x7a, 0x45, 0x95, 0x5e, 0x42, 0x2f, 0x08, 0xce, 0x03, 0x1f, 0x33, 0x25, 0xf5, + 0x77, 0x45, 0x28, 0xdf, 0x48, 0xf8, 0x49, 0x9f, 0x17, 0x77, 0x1b, 0x89, 0x62, 0xf6, 0x79, 0x79, + 0x74, 0x14, 0x8d, 0x94, 0x29, 0x59, 0x60, 0x83, 0xd0, 0xbb, 0x68, 0x92, 0xe6, 0xa4, 0xd7, 0x24, + 0x59, 0xf5, 0x47, 0x61, 0x87, 0x27, 0xd2, 0x9b, 0xb7, 0xdf, 0x13, 0x89, 0x4c, 0xdc, 0x54, 0x04, + 0x3d, 0x67, 0x73, 0x45, 0x7a, 0x74, 0x14, 0x45, 0x10, 0x55, 0xf8, 0xd4, 0x58, 0x1d, 0x8e, 0x5e, + 0xba, 0x45, 0x87, 0x23, 0x32, 0x21, 0xe2, 0x71, 0xb4, 0xcc, 0xa9, 0x45, 0xf2, 0xa4, 0xf6, 0x38, + 0x32, 0x4e, 0xc1, 0xd4, 0x14, 0x55, 0xb8, 0x68, 0x8a, 0x1e, 0x1f, 0x45, 0x53, 0x44, 0x46, 0x61, + 0xf5, 0x42, 0x6f, 0xbb, 0xe9, 0x85, 0x9e, 0xbf, 0x65, 0xbd, 0x90, 0x55, 0xff, 0xf3, 0xa6, 0x8b, + 0xfe, 0x67, 0xa9, 0x2a, 0x3d, 0x63, 0xd1, 0xff, 0x3c, 0x69, 0xd3, 0xff, 0xbc, 0xbd, 0x69, 0x69, + 0xa8, 0xd8, 0x83, 0x15, 0x3e, 0xef, 0xb2, 0xea, 0x20, 0x8b, 0xee, 0x67, 0xd3, 0xcd, 0xea, 0x7e, + 0x7e, 0x88, 0x4f, 0xd1, 0x57, 0xae, 0xda, 0x9e, 0xd6, 0x7b, 0x47, 0xdb, 0xf3, 0xd3, 0x09, 0x49, + 0x68, 0xc7, 0x61, 0x77, 0x41, 0xd9, 0xc4, 0x30, 0x73, 0x93, 0x6e, 0x91, 0x99, 0xe3, 0xff, 0xc2, + 0x0c, 0xc6, 0x0e, 0xba, 0x9b, 0x7e, 0x4e, 0x95, 0xde, 0xa7, 0xf1, 0x83, 0xdf, 0x61, 0xd3, 0xbb, + 0x83, 0x35, 0x62, 0x72, 0xfb, 0x30, 0xfc, 0x2c, 0x93, 0x2b, 0xa4, 0x35, 0x95, 0x55, 0x2b, 0x6e, + 0x0c, 0xb5, 0x91, 0xc0, 0xeb, 0x37, 0x86, 0xda, 0xca, 0x2b, 0x56, 0x56, 0x90, 0xc2, 0xe5, 0xd2, + 0xca, 0xb5, 0x72, 0xc5, 0x8d, 0xa1, 0x36, 0x9a, 0xd1, 0x46, 0x5a, 0x53, 0xb9, 0xba, 0xca, 0x68, + 0x54, 0x51, 0xfe, 0x7d, 0x69, 0x59, 0x50, 0x92, 0x73, 0x8d, 0x71, 0xcc, 0xf8, 0xed, 0xb9, 0xc6, + 0x28, 0x66, 0x00, 0xf7, 0x49, 0xd6, 0x41, 0xe4, 0x71, 0x64, 0x0c, 0xf9, 0x4f, 0x68, 0x3c, 0xe3, + 0x31, 0x45, 0x38, 0x74, 0x1c, 0xdb, 0xcf, 0x20, 0xc2, 0xa1, 0x63, 0xcd, 0xf7, 0x5d, 0x84, 0xc3, + 0xb5, 0x28, 0x17, 0x22, 0x79, 0xd1, 0x10, 0x87, 0x18, 0xf1, 0xd3, 0x42, 0x51, 0xb0, 0xc7, 0x38, + 0xd4, 0xdf, 0x46, 0x9c, 0xe2, 0x0b, 0x1c, 0x96, 0xd9, 0x90, 0x87, 0xb4, 0x17, 0xff, 0x8d, 0x5b, + 0xcc, 0xc3, 0x7d, 0x9c, 0x2a, 0x75, 0x5a, 0x95, 0x97, 0x91, 0xdb, 0xae, 0xbc, 0xbc, 0x6b, 0x91, + 0x0e, 0xdd, 0xdc, 0xd7, 0x66, 0xdc, 0xa3, 0xee, 0x6b, 0x33, 0x7f, 0x62, 0xee, 0x6b, 0x05, 0x3f, + 0x5d, 0xf7, 0xb5, 0x87, 0x7e, 0x12, 0xee, 0x6b, 0xb6, 0x08, 0x7c, 0xb3, 0x6e, 0x5f, 0x04, 0xbe, + 0x6f, 0x38, 0x34, 0x9e, 0x6a, 0x2a, 0x0b, 0x66, 0x8f, 0xf1, 0x6d, 0x72, 0x55, 0xfd, 0x57, 0xfc, + 0xe8, 0xaa, 0x7f, 0xfa, 0x05, 0xfe, 0x4d, 0x26, 0x8a, 0xdb, 0xc3, 0x86, 0x51, 0xd4, 0xf3, 0x4c, + 0x14, 0xb7, 0x05, 0x37, 0x15, 0xc5, 0x8d, 0x89, 0xde, 0xe6, 0x34, 0x2a, 0x78, 0xe4, 0x8e, 0x18, + 0x15, 0xfc, 0xc1, 0x19, 0xb5, 0x6d, 0xce, 0xa8, 0x24, 0x39, 0xb6, 0xd7, 0x77, 0x44, 0x74, 0x9b, + 0x3b, 0x6a, 0x44, 0x37, 0x67, 0x24, 0xb7, 0x3a, 0xab, 0x3d, 0xe2, 0xa3, 0x24, 0x78, 0x8c, 0x8b, + 0x1a, 0xd4, 0xe7, 0xdf, 0x00, 0x1f, 0xbf, 0x4d, 0x71, 0xde, 0x3c, 0xf7, 0xa0, 0xe5, 0xc4, 0x07, + 0xac, 0xe5, 0xc4, 0xdc, 0x51, 0x8f, 0xe1, 0x07, 0x59, 0x55, 0x84, 0x2d, 0x19, 0x2b, 0x20, 0x54, + 0xe0, 0x1a, 0x9d, 0x4c, 0x67, 0x8a, 0xc5, 0x32, 0xd6, 0x2b, 0x90, 0x4d, 0xdb, 0x59, 0x1c, 0x3f, + 0x31, 0xa4, 0x0d, 0x75, 0xc6, 0x06, 0xa2, 0xf3, 0xc3, 0xbe, 0x06, 0x65, 0x61, 0x55, 0xe0, 0xc3, + 0xf9, 0x45, 0x0b, 0x97, 0x07, 0x82, 0x0d, 0xde, 0x30, 0x94, 0xc8, 0xcb, 0xcb, 0x9e, 0x7a, 0xea, + 0xa9, 0xe7, 0x8b, 0x8a, 0x2c, 0x79, 0x30, 0x4a, 0x4d, 0x7b, 0xb0, 0xc7, 0x18, 0x12, 0xdd, 0xb0, + 0x07, 0xe3, 0xa9, 0x3d, 0x98, 0x0b, 0x89, 0x6e, 0x98, 0x85, 0x9d, 0xe1, 0xd0, 0x24, 0xd8, 0x55, + 0x7a, 0x98, 0x10, 0x01, 0xf0, 0x8f, 0xaa, 0xf4, 0x3b, 0xc1, 0x56, 0x25, 0xfa, 0xb4, 0xe1, 0x7d, + 0xb6, 0x7d, 0x06, 0x5c, 0x17, 0x1b, 0x88, 0x1a, 0x67, 0x83, 0x4d, 0x36, 0xd2, 0x1f, 0xb2, 0x69, + 0x22, 0xb6, 0x08, 0x8c, 0x38, 0xc0, 0xa4, 0x99, 0x0d, 0x7e, 0x27, 0xdb, 0x3e, 0xed, 0x16, 0x66, + 0xef, 0xf1, 0x9f, 0x6a, 0x98, 0xbd, 0x07, 0xd1, 0xef, 0x6e, 0xd6, 0xda, 0xe6, 0x3f, 0x70, 0xaa, + 0xf4, 0xf7, 0x1c, 0xfa, 0x3b, 0x4e, 0x70, 0xc8, 0xff, 0xc4, 0x6f, 0x38, 0x57, 0x77, 0x5c, 0x78, + 0xcb, 0x93, 0xfd, 0xa7, 0xc1, 0x17, 0x37, 0x36, 0xd8, 0xcc, 0xa6, 0xaf, 0x24, 0x3a, 0x33, 0xb5, + 0x2d, 0x76, 0xb5, 0x2f, 0xde, 0xfb, 0x99, 0xbb, 0xd0, 0xff, 0x64, 0x9b, 0x8e, 0x1e, 0x70, 0x4a, + 0xa0, 0xeb, 0x91, 0x6d, 0xc4, 0x3d, 0x18, 0x82, 0xb4, 0xe2, 0x1c, 0x43, 0x54, 0xe0, 0x9a, 0x38, + 0x3a, 0xa0, 0x35, 0x5f, 0x04, 0x91, 0x1c, 0xfe, 0xe8, 0xe5, 0xf8, 0x89, 0x2b, 0xf1, 0xf6, 0x3e, + 0x68, 0x4c, 0xa2, 0xd9, 0x1a, 0xa9, 0xb0, 0x9c, 0xbe, 0xc1, 0x85, 0x7f, 0x95, 0x89, 0xa6, 0xd8, + 0xd6, 0x75, 0xff, 0x99, 0xe3, 0xa4, 0xa0, 0xb4, 0x9d, 0xe6, 0x38, 0x54, 0x5f, 0xe9, 0x22, 0x03, + 0x77, 0x91, 0x50, 0x67, 0xdf, 0x39, 0x09, 0x75, 0x99, 0x2a, 0xbd, 0x82, 0x96, 0x09, 0xce, 0xb3, + 0x30, 0x54, 0xd2, 0x16, 0x18, 0x4b, 0x21, 0xa4, 0xfe, 0x7b, 0x0e, 0x4d, 0x97, 0x95, 0x70, 0x70, + 0x8b, 0x23, 0xa5, 0xcf, 0xb3, 0x4e, 0x49, 0x75, 0x41, 0x2a, 0x45, 0x28, 0x2b, 0x8a, 0x7e, 0x89, + 0xd1, 0x15, 0x65, 0x18, 0x96, 0xc1, 0x2e, 0x61, 0xdd, 0x92, 0x91, 0x66, 0x08, 0x9a, 0xc2, 0x15, + 0xd4, 0x31, 0xc6, 0x2f, 0xaf, 0xaa, 0x52, 0x05, 0x2a, 0x13, 0xdc, 0x27, 0x25, 0xce, 0x81, 0xf4, + 0x56, 0xb1, 0x81, 0x3d, 0x5a, 0xe7, 0x5e, 0x67, 0x20, 0x49, 0x0b, 0x9c, 0x7e, 0x9e, 0x89, 0x66, + 0xb8, 0x8d, 0x72, 0xef, 0x03, 0xeb, 0xaa, 0xb1, 0x01, 0x2b, 0x9e, 0x04, 0x00, 0xeb, 0x74, 0x78, + 0x26, 0xdc, 0x55, 0x35, 0xaf, 0x8d, 0x41, 0x55, 0x03, 0x63, 0x61, 0x67, 0x5d, 0x73, 0x2c, 0x36, + 0x39, 0x26, 0x28, 0x65, 0x4a, 0xd6, 0xaa, 0x92, 0x8c, 0xaa, 0x85, 0x14, 0x1b, 0x9b, 0xe6, 0x7c, + 0xd2, 0xdb, 0xa3, 0xed, 0xc9, 0x40, 0x13, 0x57, 0x28, 0xe1, 0x54, 0x7a, 0xf8, 0x8c, 0xdb, 0xa7, + 0x87, 0xaf, 0x27, 0x96, 0xe7, 0x98, 0x3d, 0x81, 0x13, 0xc1, 0x94, 0xb8, 0x59, 0x2a, 0x2e, 0x73, + 0x3e, 0xd6, 0x96, 0xf0, 0x4c, 0xd4, 0x6a, 0xbc, 0xc3, 0xd4, 0x37, 0xe2, 0x2d, 0x83, 0x9f, 0xb2, + 0x39, 0x54, 0xc9, 0xd3, 0xaa, 0xb4, 0x04, 0x2d, 0x12, 0xac, 0x6b, 0x13, 0x79, 0xf0, 0x70, 0x4e, + 0x09, 0xb9, 0x67, 0xb2, 0xd0, 0x24, 0xb6, 0xc7, 0xcf, 0x0e, 0x62, 0x15, 0x94, 0x8d, 0xb9, 0x99, + 0x54, 0xe8, 0xb4, 0x82, 0x65, 0x75, 0xfc, 0xef, 0x07, 0x40, 0x95, 0x00, 0x7d, 0xc4, 0xb9, 0xb6, + 0x91, 0xb5, 0xe6, 0x4b, 0xb1, 0x41, 0xf2, 0xea, 0x91, 0xaf, 0x40, 0xcb, 0xbb, 0xac, 0x61, 0x94, + 0x54, 0x69, 0x19, 0x7a, 0x51, 0xb0, 0x9d, 0xb4, 0x0d, 0x38, 0xd2, 0x5f, 0x9b, 0xdf, 0x11, 0x22, + 0x88, 0xd9, 0x0a, 0x7e, 0x03, 0xca, 0x33, 0xd4, 0x6b, 0x98, 0xb7, 0x07, 0xd4, 0xad, 0x3f, 0x16, + 0x82, 0xa5, 0xc2, 0x10, 0x68, 0x69, 0xd1, 0x03, 0xda, 0x05, 0x43, 0x32, 0xd4, 0xbd, 0x83, 0xd5, + 0xfc, 0xcc, 0x0f, 0x6f, 0x52, 0x16, 0x6d, 0x5a, 0x1a, 0x5a, 0x84, 0x35, 0x3f, 0x45, 0xb2, 0xa5, + 0x7f, 0x61, 0x37, 0x87, 0xa6, 0x94, 0x6d, 0x54, 0x6a, 0x37, 0xe1, 0xc8, 0xf1, 0x24, 0x98, 0x02, + 0xff, 0x32, 0xca, 0xf5, 0xf9, 0xfd, 0x4a, 0xb0, 0xb2, 0x3a, 0x54, 0xc0, 0x61, 0xa1, 0x1d, 0x0e, + 0x2b, 0x40, 0x0b, 0xc5, 0x69, 0xc0, 0x31, 0x83, 0x87, 0x20, 0x95, 0xda, 0xd1, 0xfa, 0x92, 0x72, + 0x55, 0x92, 0xd0, 0xcb, 0x82, 0x73, 0x68, 0xf1, 0xd1, 0xf8, 0x67, 0x91, 0xf8, 0xf1, 0xd3, 0xfe, + 0x40, 0x9d, 0x42, 0xec, 0x64, 0xb0, 0xc1, 0xf2, 0xfa, 0x5a, 0x22, 0x09, 0xbd, 0xc6, 0xd1, 0x51, + 0x0a, 0x2f, 0x65, 0x22, 0x9e, 0x1d, 0x21, 0xd4, 0x18, 0xf0, 0x87, 0x94, 0x7b, 0xfd, 0x1a, 0xd5, + 0xd3, 0x6b, 0xe4, 0x9e, 0x1c, 0xca, 0xb1, 0xa0, 0x85, 0xe5, 0xde, 0xb0, 0x17, 0x64, 0x26, 0x38, + 0x37, 0x2a, 0xdc, 0xad, 0x47, 0x61, 0x70, 0xbc, 0x51, 0x78, 0xcb, 0xe0, 0x33, 0xc5, 0x9b, 0x94, + 0x2d, 0xf1, 0xc3, 0xfd, 0x95, 0xd5, 0x70, 0xcb, 0x66, 0xd5, 0xa0, 0xf1, 0xb4, 0xbb, 0x0b, 0x81, + 0xbb, 0xd8, 0x4a, 0x3b, 0xcf, 0x72, 0x13, 0x79, 0xc9, 0x78, 0xde, 0x2c, 0xf1, 0x4b, 0x8c, 0x57, + 0x5d, 0x36, 0xdf, 0xd8, 0x2d, 0x92, 0x58, 0x02, 0x6b, 0x56, 0x9c, 0x04, 0xc9, 0x75, 0x0e, 0x21, + 0x73, 0x64, 0xbe, 0x0c, 0x8d, 0xf3, 0x85, 0x2a, 0x3e, 0xf2, 0x85, 0x20, 0xed, 0x61, 0x2e, 0xc9, + 0xf8, 0x43, 0xca, 0xc4, 0xd9, 0x44, 0xfc, 0xc2, 0x80, 0x83, 0xa1, 0x28, 0xeb, 0x95, 0x8d, 0x56, + 0x7c, 0xa9, 0xf3, 0x2d, 0xc1, 0xb2, 0x06, 0xe6, 0x2d, 0x21, 0x50, 0x09, 0xba, 0x66, 0x37, 0xb2, + 0x66, 0xa5, 0x55, 0xc3, 0x9e, 0x69, 0xe6, 0xa3, 0xb5, 0x68, 0xd8, 0x0b, 0x9c, 0xe3, 0xb8, 0x68, + 0xdb, 0x0b, 0xff, 0x3e, 0x03, 0x4d, 0x5d, 0xeb, 0x2f, 0x0b, 0x04, 0xeb, 0x02, 0x7e, 0x58, 0xed, + 0xed, 0xb9, 0x3d, 0x7c, 0x8d, 0x73, 0xa9, 0xcf, 0xa8, 0xd2, 0x2f, 0xd8, 0xa5, 0xce, 0x21, 0x66, + 0x73, 0x74, 0xa2, 0x18, 0x55, 0xd1, 0x7a, 0x1c, 0x39, 0xc2, 0xc3, 0xb1, 0x6b, 0x0f, 0x1a, 0x49, + 0x83, 0x32, 0xf1, 0x94, 0xde, 0x51, 0xa5, 0x5f, 0x19, 0x49, 0x83, 0xaa, 0xc9, 0x7c, 0xf0, 0x1a, + 0x61, 0x36, 0x37, 0x86, 0xda, 0x34, 0xb5, 0xcd, 0x6d, 0x9e, 0xb1, 0x68, 0xdb, 0x48, 0xa4, 0x35, + 0x36, 0x10, 0xd1, 0x39, 0x98, 0xa1, 0xc3, 0x5a, 0x73, 0x8b, 0xb3, 0x37, 0xc9, 0x38, 0x64, 0x58, + 0xe9, 0xb8, 0xed, 0x92, 0x38, 0x1b, 0x64, 0x9d, 0xa4, 0x73, 0x67, 0x7f, 0xf2, 0xfc, 0x76, 0x2d, + 0x7a, 0x06, 0x20, 0xaa, 0xf0, 0x5a, 0x06, 0x9a, 0x66, 0xed, 0x74, 0x7f, 0xdc, 0x7d, 0x6b, 0x90, + 0x96, 0xc7, 0xdc, 0x6e, 0xdb, 0xea, 0x46, 0xa2, 0xbe, 0xad, 0xc1, 0x7a, 0x40, 0x92, 0x76, 0x15, + 0x5f, 0x79, 0x32, 0x26, 0xa1, 0x40, 0xc0, 0x8a, 0xb2, 0x52, 0x95, 0x96, 0xa3, 0x72, 0xc1, 0x75, + 0x37, 0xc4, 0xd9, 0x2c, 0x14, 0xd8, 0xf6, 0xd0, 0x79, 0x2b, 0xff, 0x7d, 0x06, 0x9a, 0xf2, 0x00, + 0x5a, 0x53, 0x43, 0xeb, 0x52, 0x55, 0x7a, 0x06, 0x3d, 0x25, 0x38, 0xf7, 0x48, 0x9c, 0xc3, 0xc2, + 0x6a, 0x6c, 0xa0, 0xdd, 0x0e, 0xae, 0x7f, 0x93, 0x81, 0xf8, 0x07, 0xc0, 0xea, 0x2d, 0x79, 0x4d, + 0x95, 0x56, 0xa0, 0x0a, 0xc1, 0x65, 0x2f, 0xac, 0x20, 0xe0, 0xdc, 0x42, 0x27, 0xb4, 0x46, 0xb3, + 0x0c, 0x09, 0x05, 0x0b, 0xad, 0x95, 0x0e, 0x68, 0x5d, 0x30, 0x06, 0x68, 0xfd, 0xbe, 0x74, 0x9c, + 0xca, 0x65, 0xe5, 0x72, 0xf9, 0x75, 0x0c, 0xdc, 0x5e, 0x31, 0x6d, 0x09, 0x60, 0xb7, 0x4f, 0x70, + 0xaa, 0xf4, 0x26, 0xb5, 0x25, 0xa8, 0x62, 0x27, 0x0c, 0x93, 0x9c, 0x6f, 0xd5, 0xea, 0x2f, 0x22, + 0x06, 0x00, 0x8b, 0x0c, 0xfd, 0xff, 0x22, 0xa9, 0xbc, 0x7c, 0x01, 0x31, 0x01, 0x58, 0x24, 0x57, + 0xac, 0x5a, 0xbd, 0xae, 0xc2, 0xf8, 0x59, 0x04, 0xf9, 0xdf, 0x1d, 0x76, 0x01, 0x4e, 0x1b, 0x82, + 0x09, 0xcc, 0x20, 0xf2, 0x24, 0xeb, 0x28, 0xd4, 0x78, 0x40, 0x46, 0x13, 0x74, 0x98, 0xc5, 0xc1, + 0x52, 0x68, 0x7c, 0x9b, 0xc5, 0xaa, 0xb4, 0x40, 0x60, 0xcb, 0x53, 0xdc, 0x3b, 0xbd, 0x05, 0x44, + 0x5d, 0x61, 0x1b, 0xf3, 0x2b, 0xd9, 0x7b, 0x9c, 0x65, 0xb8, 0xf2, 0xdd, 0xcc, 0x3d, 0x66, 0x2f, + 0xf0, 0x52, 0xd3, 0xda, 0x23, 0xdb, 0x30, 0x64, 0x9b, 0x66, 0x5a, 0x7b, 0x8c, 0x27, 0x23, 0x45, + 0x9a, 0x8d, 0xcb, 0x4f, 0x0d, 0xf6, 0x4b, 0x55, 0xe9, 0x65, 0xf4, 0x92, 0xe0, 0x3c, 0x7c, 0xf1, + 0x11, 0xf0, 0xd8, 0xd3, 0x27, 0x5d, 0x59, 0x0d, 0x03, 0xe0, 0x9b, 0x0b, 0x30, 0xc8, 0x52, 0x8e, + 0xff, 0x31, 0x03, 0xf1, 0x6c, 0xff, 0xfb, 0xe3, 0x42, 0xfe, 0xd2, 0x72, 0x21, 0x5d, 0x69, 0x35, + 0x72, 0x0f, 0x71, 0x54, 0x10, 0xb8, 0x87, 0x0f, 0x93, 0xe4, 0xfb, 0x2d, 0x5d, 0xda, 0xee, 0xe3, + 0x9a, 0xda, 0x06, 0x19, 0xd1, 0xc9, 0x31, 0x93, 0x7b, 0x59, 0xa3, 0x4a, 0xd5, 0xa8, 0x4a, 0x70, + 0xd9, 0x12, 0xf1, 0x49, 0x56, 0xcc, 0x44, 0x14, 0x9b, 0x78, 0x6e, 0xa6, 0xb5, 0x03, 0xa6, 0xc8, + 0x9c, 0x17, 0x74, 0x19, 0xd0, 0x78, 0x30, 0x23, 0xbe, 0x00, 0x8d, 0x0b, 0x35, 0xd5, 0xd6, 0x2a, + 0x21, 0x72, 0x2f, 0x65, 0xe3, 0x27, 0x3f, 0x03, 0xe5, 0xbc, 0x0f, 0xa9, 0xf6, 0x33, 0x70, 0x05, + 0xf9, 0x55, 0xf8, 0x6f, 0x32, 0xd0, 0x2c, 0x8b, 0xd8, 0x6b, 0x15, 0xd6, 0xb6, 0x19, 0x37, 0xfd, + 0x45, 0xa7, 0xe8, 0x0a, 0xdb, 0x42, 0x32, 0xe0, 0x38, 0x89, 0x3a, 0x7c, 0x13, 0x55, 0xa0, 0x09, + 0x7e, 0xef, 0xa0, 0x1c, 0x50, 0xde, 0x11, 0xc2, 0xf7, 0x91, 0x14, 0xdc, 0x2c, 0x7c, 0xb3, 0xf4, + 0x71, 0x55, 0x2a, 0x14, 0x48, 0x0f, 0x23, 0xff, 0x00, 0x68, 0x01, 0x41, 0x23, 0x48, 0x3e, 0x40, + 0x5a, 0xf0, 0x2f, 0x38, 0xdc, 0xc3, 0x1e, 0x4d, 0x95, 0xf5, 0xc0, 0x00, 0x6f, 0x53, 0x38, 0xb6, + 0x4e, 0x95, 0x6a, 0xd0, 0x1b, 0x42, 0x9a, 0xb5, 0x1b, 0xf7, 0x2c, 0xd5, 0x3c, 0x6c, 0x79, 0x10, + 0x60, 0x52, 0x85, 0x37, 0x32, 0xd0, 0x6c, 0xd7, 0x31, 0xef, 0x0f, 0xe0, 0xb7, 0xda, 0x38, 0x8f, + 0x72, 0x5e, 0x6c, 0x94, 0x3b, 0xea, 0xae, 0x93, 0x18, 0xee, 0xb3, 0x9c, 0x16, 0xc0, 0xfe, 0xaf, + 0x54, 0x69, 0x1d, 0x5a, 0x23, 0xa4, 0xdb, 0x1a, 0x71, 0x5e, 0xfa, 0xfd, 0x4e, 0x25, 0x77, 0x3d, + 0x8b, 0xe5, 0xae, 0xb5, 0x81, 0x60, 0x9d, 0x7e, 0x11, 0x74, 0xc6, 0xdd, 0x00, 0xde, 0xb5, 0x06, + 0xf9, 0xc2, 0x61, 0x26, 0x70, 0x9a, 0xdb, 0x55, 0xd6, 0xb9, 0xa0, 0xd9, 0x06, 0x51, 0xc3, 0x93, + 0xab, 0xd7, 0x7f, 0x26, 0xbe, 0xbd, 0xd9, 0x78, 0xb4, 0x72, 0x55, 0x2e, 0x3b, 0x97, 0xcb, 0x4f, + 0x8e, 0xb3, 0xd1, 0xd3, 0xee, 0x1f, 0x15, 0xa7, 0x40, 0x7c, 0x1b, 0x0b, 0x4a, 0x84, 0x8e, 0x85, + 0x1a, 0x87, 0x85, 0x51, 0xec, 0x4b, 0xfa, 0x12, 0x1a, 0x47, 0xd0, 0x25, 0xb9, 0x5d, 0x8f, 0xa9, + 0xd2, 0x43, 0x82, 0x51, 0x26, 0x4e, 0xb2, 0xbe, 0xa3, 0x18, 0x8c, 0x3f, 0xe2, 0x64, 0xa3, 0x9e, + 0x7f, 0x03, 0x8d, 0x0b, 0x6d, 0x0c, 0x7c, 0x58, 0xfd, 0xa1, 0xe1, 0x08, 0x83, 0xb5, 0xce, 0x46, + 0x99, 0x58, 0x44, 0xba, 0xf7, 0xef, 0x4c, 0x9c, 0xd8, 0x4a, 0x38, 0xbb, 0x0b, 0x07, 0x12, 0xa7, + 0xa2, 0xf3, 0x0d, 0x4d, 0x59, 0x3b, 0xfc, 0x2e, 0x92, 0x8d, 0x3e, 0xac, 0x2c, 0x85, 0xc5, 0xfa, + 0x1e, 0xc0, 0xfa, 0xc6, 0x4c, 0x48, 0x60, 0x41, 0xb2, 0x5d, 0x20, 0x76, 0x33, 0x66, 0x55, 0xf8, + 0x3f, 0x66, 0xa0, 0xc9, 0xb4, 0xfb, 0xfd, 0x01, 0xf7, 0xaf, 0x59, 0xc4, 0x05, 0xee, 0x90, 0xe2, + 0x2a, 0x72, 0x23, 0xa4, 0x14, 0x0b, 0xeb, 0xc4, 0xd7, 0xcd, 0xbe, 0x05, 0xe2, 0x5c, 0xcb, 0xa6, + 0x8d, 0x09, 0xbd, 0x1b, 0xd2, 0xa9, 0x13, 0x1c, 0xe2, 0xc9, 0x70, 0x2c, 0x80, 0xff, 0x30, 0xe8, + 0x31, 0x72, 0x8f, 0xb8, 0x8c, 0x2c, 0x3e, 0x91, 0xee, 0xb8, 0xf5, 0xdb, 0x61, 0xe0, 0x40, 0x7a, + 0xe8, 0x89, 0x0c, 0x34, 0xd5, 0x32, 0xd0, 0xfd, 0x71, 0xf0, 0x55, 0x16, 0x84, 0x57, 0xe0, 0x76, + 0xf0, 0x58, 0x2c, 0x3a, 0xd6, 0xc3, 0xf7, 0xaa, 0xd2, 0xaf, 0xd1, 0x3b, 0x82, 0xdb, 0x56, 0x88, + 0x0b, 0x52, 0x6d, 0xe3, 0xcd, 0x01, 0x43, 0x24, 0x03, 0xde, 0x7c, 0x12, 0x66, 0xec, 0x6d, 0x94, + 0x67, 0xb8, 0x53, 0x31, 0x52, 0x4a, 0x8c, 0x08, 0x2c, 0x15, 0xe2, 0xbc, 0x78, 0x4f, 0x54, 0xfb, + 0x64, 0x0f, 0x7c, 0x52, 0xeb, 0x3d, 0x94, 0xf8, 0xea, 0x4c, 0x6c, 0xe0, 0x6b, 0x6a, 0xa0, 0x4b, + 0x14, 0xf4, 0x96, 0x3e, 0xfc, 0x2f, 0x50, 0x66, 0x59, 0xf5, 0x5a, 0x7c, 0x12, 0x13, 0x61, 0x3b, + 0xf5, 0xdf, 0xe2, 0x64, 0x58, 0x43, 0x59, 0xf5, 0x5a, 0xb2, 0x78, 0xbd, 0x94, 0x5f, 0x88, 0x32, + 0x1b, 0x94, 0x06, 0xbc, 0xf7, 0x13, 0x21, 0x70, 0xb4, 0xfe, 0xdb, 0xc0, 0xaa, 0xda, 0xce, 0x66, + 0xad, 0xf7, 0xb0, 0xd1, 0xbe, 0x41, 0x69, 0xe0, 0x97, 0xa2, 0xcc, 0x15, 0xd5, 0x6b, 0xf1, 0xd6, + 0x4f, 0x04, 0x7d, 0xa1, 0xfe, 0x5b, 0x7c, 0x18, 0xda, 0xaf, 0x30, 0x06, 0x67, 0x67, 0xb8, 0x58, + 0xd6, 0x9b, 0x14, 0x0e, 0x4e, 0x40, 0xb9, 0xc6, 0xf6, 0xf2, 0x6f, 0xa1, 0x5c, 0x1d, 0xbf, 0x56, + 0x99, 0x71, 0x8d, 0x97, 0xa9, 0xd2, 0x0b, 0x02, 0x2d, 0x14, 0x17, 0xb1, 0xdc, 0x66, 0xb1, 0x27, + 0x7e, 0xbc, 0x2b, 0x16, 0x3d, 0x4a, 0x95, 0xfd, 0xb0, 0xdb, 0x6c, 0x13, 0x99, 0x76, 0xe5, 0x3f, + 0x80, 0xb1, 0xf1, 0xc6, 0x66, 0x98, 0xc6, 0x46, 0xb4, 0x50, 0x7c, 0x99, 0xb0, 0x26, 0xc4, 0x26, + 0x9e, 0x24, 0xe8, 0xc4, 0xf6, 0x9b, 0x64, 0x48, 0xb5, 0xad, 0xb2, 0xbc, 0x0c, 0xfe, 0x9e, 0x5f, + 0xb6, 0x6e, 0xd5, 0xa2, 0xca, 0xf2, 0xb2, 0xa2, 0x62, 0xad, 0xb3, 0x9f, 0xec, 0x37, 0x1d, 0x8a, + 0x5f, 0x8a, 0x72, 0x30, 0x51, 0x6d, 0x70, 0x12, 0x18, 0xe4, 0x48, 0x91, 0x38, 0x95, 0xc0, 0x5a, + 0x74, 0xaf, 0x71, 0x3e, 0x95, 0xe5, 0x32, 0xa9, 0xe4, 0x9f, 0x37, 0xf1, 0x00, 0xe3, 0xfc, 0x41, + 0xf1, 0xc0, 0x14, 0x16, 0x0f, 0xc4, 0x06, 0x06, 0x2b, 0xab, 0xcd, 0x17, 0x64, 0x39, 0x4b, 0xe0, + 0x65, 0x1b, 0xe6, 0x26, 0x8f, 0xb3, 0x04, 0x5e, 0x81, 0x8d, 0xd3, 0x28, 0x73, 0xe3, 0x34, 0x96, + 0xa0, 0xcc, 0x75, 0xd5, 0x65, 0xc4, 0xd5, 0x03, 0x7f, 0x5e, 0xff, 0x2d, 0x4e, 0xb7, 0xf5, 0x5d, + 0x57, 0x5d, 0xe6, 0xa9, 0x2c, 0x97, 0xf5, 0x3a, 0xfe, 0x6d, 0xea, 0xb1, 0x32, 0xce, 0x14, 0xac, + 0x1b, 0x1e, 0x2b, 0xcf, 0xb2, 0x1d, 0xb5, 0xb6, 0xa8, 0x76, 0xfc, 0xb8, 0x69, 0xa5, 0x78, 0xe5, + 0xaa, 0x76, 0x59, 0xbf, 0x2e, 0xf1, 0xcb, 0x17, 0xb4, 0x9e, 0x8b, 0x3a, 0x7c, 0xec, 0x3e, 0xa1, + 0x5d, 0xfe, 0x24, 0xd1, 0xdb, 0x4a, 0xbd, 0x5a, 0x56, 0xa3, 0xdc, 0x3a, 0x65, 0xb3, 0x4f, 0xdf, + 0x26, 0xe2, 0xf6, 0xf1, 0x94, 0x2a, 0x2d, 0x16, 0x68, 0xa1, 0x38, 0xaf, 0x4c, 0xa2, 0xc9, 0x63, + 0x93, 0x7d, 0xdf, 0x69, 0xa7, 0x76, 0x55, 0x96, 0x6b, 0x9d, 0x97, 0x71, 0x58, 0x12, 0xf3, 0x36, + 0xd0, 0xf6, 0xfc, 0x37, 0x26, 0xa3, 0x0a, 0xae, 0x1e, 0x47, 0x39, 0x55, 0x3a, 0xc4, 0x51, 0x4e, + 0xb5, 0x8d, 0x63, 0x99, 0x54, 0x80, 0x5c, 0x1b, 0xab, 0xea, 0x81, 0x64, 0x89, 0xb1, 0x81, 0x5e, + 0xd3, 0xfc, 0xdd, 0x03, 0x96, 0x95, 0xb1, 0x81, 0xde, 0x62, 0x0f, 0x98, 0xa7, 0xeb, 0x85, 0xc4, + 0x27, 0x55, 0x2f, 0x64, 0x18, 0x51, 0xd2, 0x1f, 0x78, 0x0b, 0xa3, 0x39, 0x53, 0xb9, 0x87, 0x56, + 0x16, 0x51, 0x1e, 0xf5, 0x30, 0x87, 0x26, 0x19, 0xcb, 0x24, 0x21, 0x0d, 0x51, 0x6a, 0xc6, 0x86, + 0xa4, 0xbd, 0xc5, 0x36, 0x4e, 0xb6, 0x6e, 0x06, 0xa4, 0xb3, 0xd6, 0xe8, 0xd4, 0xec, 0x2b, 0x7e, + 0xb8, 0x1f, 0x90, 0xcb, 0xf5, 0xc8, 0xd6, 0xb2, 0xea, 0xb5, 0xd7, 0x23, 0x5b, 0x57, 0x55, 0xac, + 0xba, 0x1e, 0xd9, 0xba, 0xa2, 0x7a, 0x6d, 0xa2, 0xb7, 0x95, 0xdc, 0x79, 0xdb, 0x80, 0x7c, 0x1b, + 0x87, 0x72, 0x3f, 0x0e, 0xf8, 0xc1, 0xd7, 0x73, 0x82, 0x3b, 0xfe, 0x7d, 0x8b, 0xd4, 0x83, 0x5f, + 0x23, 0x6d, 0x2e, 0xae, 0xa0, 0xd2, 0x36, 0xc8, 0x81, 0x6b, 0x62, 0x0a, 0x1c, 0xc0, 0x4a, 0x6f, + 0xa7, 0xdf, 0xdf, 0x1b, 0x43, 0x6d, 0xb8, 0x4b, 0xf9, 0x7c, 0x6f, 0xe3, 0x82, 0xd0, 0x46, 0xc5, + 0xff, 0xf1, 0x46, 0xc5, 0xbf, 0xe0, 0x69, 0xcf, 0x22, 0xcf, 0x53, 0xcf, 0x2d, 0x5e, 0xbc, 0xf8, + 0xe9, 0x22, 0x99, 0x0e, 0xc9, 0x37, 0x73, 0x28, 0x1b, 0x33, 0xe4, 0xd8, 0x95, 0x64, 0x82, 0xf8, + 0x90, 0xdb, 0x06, 0x61, 0x36, 0x1d, 0xf6, 0x07, 0x1a, 0x8b, 0xaf, 0xda, 0x20, 0x9c, 0xb6, 0xf2, + 0x54, 0x96, 0x5b, 0x81, 0x69, 0x7e, 0x6c, 0xb0, 0xb9, 0x4c, 0x22, 0x13, 0x1f, 0x56, 0x71, 0x98, + 0xbf, 0x0e, 0xca, 0xfb, 0x17, 0xc9, 0x30, 0x20, 0xbf, 0x83, 0xd8, 0xc9, 0x1a, 0x59, 0x33, 0x71, + 0x50, 0x30, 0x97, 0x6c, 0x71, 0x55, 0x4c, 0x9b, 0x52, 0x9d, 0x5d, 0x17, 0x2c, 0xdd, 0x28, 0xd6, + 0x33, 0x74, 0xaf, 0x6c, 0x5e, 0x4e, 0x26, 0x3c, 0x0f, 0x83, 0xf9, 0xd9, 0xee, 0x06, 0xc5, 0x4e, + 0xd1, 0xac, 0xf8, 0x2a, 0xf1, 0x85, 0x71, 0xbc, 0x5e, 0x76, 0xe3, 0xbf, 0xfe, 0x2b, 0xf1, 0x8e, + 0xd3, 0x5a, 0x6b, 0x7b, 0xe2, 0xcb, 0xfe, 0x78, 0xcb, 0x41, 0xed, 0xd4, 0xc1, 0x91, 0xed, 0xe7, + 0x20, 0x07, 0x32, 0xa8, 0xc6, 0x0a, 0xff, 0x15, 0x87, 0xa6, 0xad, 0xf4, 0x85, 0xc2, 0x16, 0x33, + 0x47, 0x59, 0xf9, 0x2d, 0x1f, 0x44, 0x79, 0x3a, 0x19, 0xba, 0xce, 0xb0, 0xb2, 0xe4, 0x4c, 0xa5, + 0xb2, 0xa5, 0x42, 0x7c, 0x01, 0xc8, 0xd6, 0xcd, 0x64, 0x4b, 0xa8, 0x91, 0xe7, 0xc6, 0x40, 0x28, + 0xcc, 0xda, 0xf5, 0x11, 0x3a, 0x57, 0x6b, 0x3e, 0x37, 0xb2, 0xfd, 0x9c, 0x41, 0xea, 0x5a, 0x86, + 0x32, 0xa2, 0x64, 0xba, 0x4e, 0x48, 0x2c, 0x80, 0x17, 0x9b, 0xb5, 0xd5, 0x04, 0xb6, 0xa0, 0xf0, + 0x1f, 0x33, 0xd1, 0x74, 0x97, 0x2e, 0xf7, 0xbe, 0x7e, 0xd9, 0x4a, 0xe9, 0xa6, 0xd4, 0x2f, 0x43, + 0x6a, 0x00, 0x4c, 0xef, 0xf0, 0xac, 0x5a, 0x99, 0x08, 0x6b, 0x41, 0xb9, 0x1c, 0xe1, 0x52, 0xa9, + 0x7d, 0xe7, 0xa4, 0x57, 0xfb, 0x12, 0xeb, 0x58, 0xbb, 0xd2, 0x77, 0x2e, 0xab, 0xf4, 0x05, 0xf7, + 0xc0, 0x31, 0x46, 0x10, 0x77, 0x3f, 0x0b, 0x71, 0x4e, 0xaa, 0xf3, 0x1b, 0x45, 0x1b, 0xfc, 0xbf, + 0x93, 0xd3, 0xad, 0x26, 0xe9, 0x2d, 0x4c, 0x10, 0x7d, 0x89, 0x75, 0x6c, 0xe4, 0x4c, 0xa9, 0x83, + 0xbb, 0x63, 0x63, 0x56, 0x30, 0xa3, 0xa0, 0x8e, 0xf5, 0x6b, 0x5c, 0x46, 0xdf, 0x3c, 0x38, 0xeb, + 0x27, 0x46, 0x0d, 0xd7, 0x09, 0x43, 0x18, 0xcf, 0xda, 0x5d, 0xc9, 0x72, 0xd7, 0xc1, 0x31, 0x92, + 0x16, 0x20, 0x30, 0xb0, 0xef, 0x84, 0x29, 0x69, 0xa9, 0xa5, 0x86, 0x48, 0xf3, 0x63, 0x43, 0x27, + 0xb4, 0xce, 0x6d, 0xf1, 0x43, 0x97, 0x80, 0x4a, 0x4e, 0xf6, 0x9f, 0x26, 0x51, 0xb1, 0xb0, 0x1d, + 0x9c, 0x99, 0x83, 0x04, 0x1f, 0x27, 0xc1, 0x43, 0xd8, 0x06, 0xef, 0x04, 0x38, 0xa1, 0x43, 0x37, + 0xf6, 0xac, 0xa0, 0x51, 0x11, 0x23, 0xbc, 0x21, 0xc2, 0x49, 0xf7, 0x23, 0x12, 0xe7, 0x11, 0x13, + 0x12, 0x9c, 0xe5, 0x04, 0xce, 0x22, 0x36, 0xb0, 0xc7, 0x34, 0x62, 0x80, 0x0b, 0xbc, 0x2b, 0x07, + 0xcd, 0x70, 0xeb, 0xff, 0xf3, 0xba, 0xc1, 0x43, 0x1c, 0xca, 0x27, 0xfd, 0x4d, 0x57, 0x83, 0x1c, + 0x3c, 0xf0, 0x8b, 0xf6, 0x81, 0xdd, 0x77, 0xcb, 0xf8, 0x9e, 0xcd, 0xef, 0x40, 0x56, 0xa5, 0xd5, + 0x82, 0x63, 0x68, 0xf1, 0x05, 0xd6, 0x90, 0xc4, 0x62, 0x84, 0x4f, 0x9a, 0xe2, 0xb5, 0xee, 0x88, + 0x5d, 0xd9, 0x03, 0xfe, 0x8d, 0x20, 0x41, 0x81, 0x03, 0x95, 0x1d, 0xc3, 0xf1, 0xdb, 0x5c, 0x10, + 0x50, 0xee, 0x18, 0xed, 0x4e, 0x6e, 0x17, 0x0a, 0x9a, 0xf5, 0x6b, 0x34, 0xdd, 0x75, 0x0f, 0x5c, + 0x0c, 0x01, 0x16, 0x59, 0x0d, 0x01, 0x1e, 0x72, 0xb5, 0xc6, 0xc1, 0x3c, 0x23, 0x63, 0x07, 0xf0, + 0x6b, 0x55, 0x7a, 0x1b, 0xfd, 0x4a, 0x48, 0x01, 0xad, 0xe2, 0x93, 0x80, 0xe3, 0x6c, 0xe0, 0x7e, + 0x13, 0xc8, 0xae, 0x2d, 0x1f, 0x4d, 0xc2, 0xe8, 0xd3, 0xc4, 0x72, 0x2b, 0xdc, 0x9c, 0xe0, 0x1f, + 0x1f, 0x2d, 0x9c, 0x32, 0xa0, 0xaa, 0xbb, 0x9f, 0x95, 0x73, 0x99, 0xcd, 0x15, 0xfe, 0x66, 0x91, + 0xec, 0x8f, 0x91, 0x82, 0xf3, 0x25, 0xa7, 0x43, 0xfc, 0xcd, 0xbc, 0x1b, 0xe5, 0x2e, 0xfe, 0xf0, + 0xf3, 0x46, 0xf1, 0x87, 0x87, 0x41, 0x7e, 0x1c, 0x77, 0xf8, 0xb0, 0x12, 0x0a, 0xdf, 0x31, 0x77, + 0xf8, 0xdb, 0x9e, 0x46, 0xf3, 0x81, 0xcb, 0xfb, 0x6d, 0x72, 0x79, 0xff, 0xd7, 0x26, 0x53, 0x0c, + 0xa1, 0x8b, 0xfb, 0xee, 0xa4, 0x27, 0x78, 0x69, 0xf0, 0x95, 0xf4, 0x9e, 0xe0, 0x39, 0x30, 0xc8, + 0x58, 0x1c, 0xc1, 0x5f, 0x40, 0x39, 0x81, 0xf7, 0xdf, 0x0f, 0x29, 0x61, 0xec, 0x16, 0x3f, 0x11, + 0x24, 0xa9, 0xa4, 0x48, 0x9c, 0x4c, 0xc8, 0xc8, 0xad, 0x9d, 0x89, 0xb3, 0x83, 0x23, 0xbb, 0x3a, + 0xbf, 0x2f, 0xcd, 0x12, 0x32, 0xe6, 0xff, 0x89, 0x4c, 0xea, 0xf9, 0x17, 0x51, 0x76, 0xbd, 0xaf, + 0xc1, 0x17, 0xc6, 0xee, 0xf0, 0x58, 0x94, 0x35, 0x5b, 0x80, 0x12, 0x6a, 0x83, 0x88, 0x23, 0xaa, + 0xc5, 0x0f, 0x9c, 0xc7, 0xbd, 0xb3, 0x85, 0xcc, 0x82, 0xe4, 0x38, 0x19, 0x9a, 0x58, 0xc9, 0xab, + 0xfc, 0xbb, 0x4f, 0x5e, 0xf1, 0x15, 0x8c, 0xe7, 0xf4, 0x14, 0x3c, 0x9f, 0x22, 0x55, 0x7a, 0x94, + 0xf1, 0x9c, 0x9e, 0x4a, 0x72, 0x25, 0x24, 0xaf, 0xee, 0x8a, 0x0f, 0x92, 0xf0, 0x2d, 0x06, 0xbe, + 0x31, 0x3d, 0xa5, 0xef, 0x56, 0x0c, 0x60, 0xaf, 0xd3, 0x5d, 0x6f, 0xaa, 0xa9, 0x1c, 0xb9, 0x2d, + 0x2e, 0x79, 0x16, 0x8b, 0xfe, 0x69, 0x63, 0xb6, 0xe8, 0x2f, 0x39, 0xc9, 0xa9, 0xd2, 0x31, 0x0e, + 0x75, 0x73, 0x82, 0xed, 0xc5, 0x15, 0x77, 0x71, 0x5a, 0xcb, 0xe7, 0xfa, 0x51, 0x1e, 0x3b, 0x19, + 0x1b, 0xbc, 0xc4, 0x6e, 0x2c, 0x79, 0xc3, 0x0d, 0xcf, 0x16, 0xf2, 0xda, 0xe3, 0x66, 0xb1, 0x81, + 0xa8, 0xe4, 0xaf, 0xd3, 0x9a, 0x2f, 0x26, 0x2e, 0x0e, 0x9a, 0x61, 0x7f, 0x8e, 0x77, 0x8d, 0x9c, + 0xbc, 0xc2, 0x36, 0xd3, 0x22, 0x43, 0xc0, 0xe2, 0xeb, 0x6d, 0x5a, 0x8e, 0x68, 0x57, 0x87, 0x13, + 0x07, 0x4e, 0x93, 0x78, 0x62, 0xfb, 0xcf, 0xc5, 0x7b, 0x4f, 0xb1, 0x1f, 0x2d, 0xfc, 0x8f, 0xd9, + 0x68, 0xb2, 0x65, 0x72, 0x3f, 0x2f, 0x8a, 0xf8, 0xdb, 0xd4, 0x14, 0xf1, 0x33, 0x6e, 0x14, 0xf1, + 0xbd, 0x42, 0x0a, 0x47, 0x52, 0x92, 0xc2, 0x77, 0x8a, 0x17, 0xff, 0xd1, 0x09, 0x61, 0xe2, 0xd0, + 0x62, 0x87, 0x4e, 0x43, 0x4a, 0x73, 0x13, 0x24, 0xef, 0xa1, 0x4c, 0xc6, 0xb5, 0x9a, 0x6f, 0xe6, + 0x10, 0xaa, 0xf5, 0xfa, 0x21, 0x3e, 0x55, 0x1d, 0x91, 0x3a, 0xe1, 0x67, 0x95, 0x29, 0x16, 0xd7, + 0xb0, 0xe3, 0x9b, 0x5b, 0x01, 0x19, 0xb1, 0xb6, 0x0f, 0x6b, 0xa7, 0x8e, 0x83, 0xd4, 0x76, 0xbe, + 0x11, 0xfd, 0xe2, 0x04, 0xec, 0x9d, 0x3f, 0x50, 0xa7, 0x98, 0xae, 0xcd, 0xad, 0xed, 0x5a, 0xf3, + 0xd6, 0x64, 0xdf, 0x00, 0xb4, 0x2d, 0x92, 0x99, 0x2f, 0x38, 0xec, 0xcd, 0x33, 0x7e, 0x24, 0x7b, + 0x73, 0xfe, 0x30, 0x87, 0xc6, 0x7b, 0x9b, 0xc2, 0x81, 0x9a, 0x5a, 0x6f, 0xbd, 0x42, 0xae, 0xd9, + 0xc7, 0xaa, 0xf4, 0xa1, 0x60, 0x96, 0x8a, 0x1f, 0x58, 0x7c, 0x77, 0xb1, 0x5a, 0x43, 0x1b, 0xba, + 0x12, 0x8f, 0x9c, 0x8d, 0x0d, 0x0d, 0x24, 0x86, 0x3e, 0x2f, 0xf6, 0x68, 0x3d, 0xe7, 0x74, 0x4a, + 0xdd, 0x51, 0xa3, 0xcf, 0xa4, 0xb5, 0x5d, 0x27, 0xe8, 0x07, 0xf6, 0x18, 0xca, 0x16, 0x98, 0x14, + 0x19, 0xd1, 0xd1, 0x43, 0x36, 0x3f, 0x5b, 0x78, 0x8a, 0x43, 0x93, 0xac, 0xf0, 0xc9, 0xbf, 0x8c, + 0xb2, 0x1b, 0x95, 0x60, 0x83, 0xa1, 0xc6, 0x2f, 0x4a, 0x0f, 0xce, 0x0b, 0xab, 0xf5, 0xb6, 0x18, + 0xee, 0x64, 0xe8, 0x37, 0xeb, 0x0d, 0x84, 0xcc, 0x42, 0x17, 0x60, 0x5c, 0x60, 0x05, 0xc6, 0x54, + 0x11, 0xa6, 0xd9, 0x14, 0x8b, 0x6f, 0xa3, 0x7c, 0x3b, 0x43, 0xc9, 0xaf, 0x30, 0xe7, 0x99, 0x36, + 0x50, 0x35, 0x7e, 0x29, 0xa0, 0xa9, 0x98, 0xc7, 0x3e, 0xd4, 0x64, 0xbe, 0x85, 0x1d, 0xe3, 0xd0, + 0x43, 0x3a, 0x8c, 0x63, 0x9b, 0xef, 0x4a, 0x46, 0x1e, 0x49, 0x4c, 0x45, 0x1d, 0x26, 0x39, 0x73, + 0x53, 0xbb, 0xf3, 0x18, 0x6e, 0x61, 0x8c, 0xaa, 0xe6, 0x87, 0xca, 0xa0, 0x28, 0x7b, 0x94, 0x79, + 0xfb, 0xd8, 0xa3, 0x95, 0x56, 0x53, 0xba, 0x2c, 0xc3, 0x26, 0xdc, 0x63, 0x35, 0xa5, 0x9b, 0x02, + 0x57, 0xaa, 0xca, 0x2c, 0xa2, 0x5c, 0x27, 0x6b, 0x44, 0xb7, 0xdc, 0xa6, 0x12, 0x05, 0x3e, 0x0e, + 0x87, 0x3c, 0xb1, 0xaa, 0x44, 0x27, 0x83, 0xd6, 0x82, 0x2a, 0x43, 0x6d, 0xda, 0xcf, 0x6d, 0x26, + 0x79, 0x0b, 0x2c, 0xdb, 0x07, 0xaa, 0xb4, 0x81, 0x52, 0xb7, 0xef, 0xb2, 0x0a, 0x9f, 0x9b, 0xa6, + 0x6e, 0x2b, 0x47, 0x21, 0x6f, 0x5d, 0x28, 0xd3, 0x71, 0x3f, 0x80, 0x32, 0xcd, 0xbd, 0x15, 0xca, + 0x94, 0x31, 0x2f, 0x19, 0x7f, 0x9b, 0xcc, 0x4b, 0xbe, 0xe6, 0x54, 0xa9, 0x8f, 0x43, 0x5f, 0x72, + 0x42, 0x6a, 0x10, 0xc7, 0xe1, 0x93, 0xdc, 0x89, 0x21, 0xf2, 0xc5, 0x3b, 0x4c, 0x12, 0xfd, 0x5d, + 0x26, 0x9a, 0xe5, 0x36, 0xdb, 0xfb, 0xcd, 0xc4, 0x21, 0xd3, 0xcd, 0x71, 0x9b, 0xac, 0x06, 0x9b, + 0xb8, 0x38, 0x29, 0x24, 0x76, 0xc3, 0x09, 0x85, 0xd4, 0x70, 0xeb, 0xbe, 0xba, 0xf8, 0x0a, 0x3a, + 0x48, 0x0d, 0x2b, 0x12, 0xb4, 0x4b, 0xf8, 0x89, 0x22, 0x2a, 0xcd, 0x01, 0x18, 0x62, 0x7e, 0x17, + 0x10, 0x49, 0x4f, 0x06, 0xc4, 0xa6, 0xa2, 0x09, 0xcc, 0xf2, 0x19, 0x0d, 0x3c, 0x77, 0xeb, 0x1a, + 0xf8, 0x8c, 0x9b, 0xd4, 0xc0, 0xdb, 0xed, 0x37, 0x32, 0x7f, 0x04, 0xfb, 0x8d, 0xac, 0x9b, 0xb1, + 0xdf, 0xc8, 0xbe, 0x49, 0xfb, 0x8d, 0x9c, 0x9b, 0xb6, 0xdf, 0xe0, 0x3b, 0x4d, 0xc4, 0x0a, 0xb2, + 0xac, 0x0f, 0x55, 0x29, 0x4c, 0x11, 0xeb, 0x07, 0x4e, 0x4d, 0xfa, 0x8d, 0xa1, 0x16, 0x70, 0xad, + 0x67, 0xe9, 0x06, 0xad, 0xaf, 0x3b, 0x76, 0xa5, 0x35, 0xd1, 0xbd, 0x03, 0xb2, 0xde, 0x12, 0x44, + 0xcb, 0xe8, 0xd1, 0x8b, 0x3d, 0x06, 0x1e, 0x2e, 0xf6, 0xe8, 0x18, 0xb7, 0xa2, 0xbc, 0xd8, 0x63, + 0x13, 0x05, 0x18, 0x58, 0x56, 0x42, 0x39, 0xa0, 0x29, 0x26, 0x52, 0x31, 0x88, 0xe2, 0xaa, 0x17, + 0x89, 0x73, 0x6c, 0xba, 0x66, 0xfb, 0x8e, 0x93, 0x8e, 0xfc, 0xef, 0xad, 0x6f, 0x18, 0x48, 0xc0, + 0xde, 0x52, 0xa5, 0x5f, 0x5a, 0xdf, 0xb0, 0xdb, 0xa7, 0x30, 0xb6, 0xbd, 0x79, 0x0c, 0x59, 0x80, + 0x7e, 0xb0, 0x21, 0xc7, 0x84, 0x5b, 0x32, 0xe4, 0xc8, 0xbb, 0xfd, 0x86, 0x1c, 0x55, 0x28, 0xa7, + 0xd1, 0x1b, 0x0a, 0x7d, 0x58, 0x47, 0x24, 0x4c, 0x38, 0xb4, 0x12, 0x29, 0x12, 0x8b, 0x8c, 0xd0, + 0xd4, 0xc7, 0xb4, 0xb3, 0x7b, 0xb4, 0xb6, 0x83, 0xf0, 0x14, 0x15, 0x7b, 0x48, 0x64, 0x2a, 0x1c, + 0x2c, 0x2f, 0x79, 0xf6, 0x33, 0xad, 0x7f, 0xa7, 0x4c, 0xba, 0xf0, 0xef, 0x22, 0x7c, 0xaa, 0x44, + 0xcc, 0x53, 0xa9, 0x4a, 0xcb, 0x05, 0x72, 0x80, 0xe2, 0x8b, 0xb6, 0x83, 0x06, 0xf9, 0x33, 0x73, + 0x20, 0x2f, 0x78, 0xcc, 0x48, 0x7d, 0x58, 0xe3, 0x0d, 0xb4, 0x77, 0x2c, 0xda, 0x51, 0x26, 0xc9, + 0x78, 0x58, 0x5e, 0x62, 0xec, 0x4e, 0x26, 0x1b, 0x62, 0xf3, 0x42, 0xc6, 0xee, 0x64, 0x86, 0xbb, + 0xdd, 0x09, 0x63, 0x69, 0xf2, 0x1b, 0x1a, 0x46, 0x32, 0x1f, 0x63, 0xec, 0x27, 0xd3, 0x60, 0xec, + 0x34, 0xe9, 0xd6, 0xc9, 0xbe, 0xe3, 0x44, 0xeb, 0x86, 0xe5, 0x34, 0x09, 0x02, 0xf9, 0x2a, 0xca, + 0x09, 0x7b, 0x7d, 0xfe, 0xb0, 0x11, 0xf1, 0x70, 0xba, 0xd3, 0x91, 0xdd, 0xe7, 0x0f, 0x93, 0xb7, + 0x05, 0x5a, 0x8a, 0x79, 0x16, 0x63, 0x37, 0x52, 0xca, 0xff, 0x11, 0x4d, 0x6c, 0xf2, 0xd7, 0xd4, + 0x6e, 0x54, 0xea, 0x9a, 0xea, 0xbd, 0xeb, 0xeb, 0x15, 0x2c, 0xe2, 0x99, 0x58, 0xfa, 0xa6, 0x2a, + 0xad, 0x15, 0xac, 0x35, 0x62, 0x39, 0xeb, 0x69, 0x42, 0x45, 0x9e, 0x5a, 0x64, 0x68, 0x31, 0x48, + 0x44, 0xb5, 0xce, 0x6d, 0xb1, 0x81, 0x0e, 0x68, 0x74, 0x63, 0xa8, 0x6d, 0x89, 0x21, 0x45, 0x6d, + 0x67, 0x2b, 0x64, 0xeb, 0xa0, 0x7c, 0x39, 0x63, 0xfb, 0x35, 0xd5, 0x04, 0x7a, 0xd3, 0xf6, 0xeb, + 0x21, 0x8b, 0xed, 0xd7, 0xa6, 0xa5, 0x21, 0x8f, 0x5e, 0xe5, 0xf7, 0x36, 0x28, 0x8c, 0x95, 0xd7, + 0xeb, 0x28, 0xdb, 0xbb, 0x41, 0xf1, 0x87, 0xb1, 0x28, 0x67, 0x22, 0x64, 0x10, 0x85, 0x12, 0x83, + 0xc6, 0x91, 0xf4, 0x1f, 0x1e, 0x3a, 0xf7, 0x25, 0x5a, 0xcf, 0xb9, 0x44, 0xf4, 0xea, 0x8d, 0xa1, + 0xb6, 0xc5, 0xfa, 0x04, 0xf1, 0x0f, 0x19, 0x7a, 0xf0, 0x85, 0x28, 0xd3, 0x57, 0x57, 0x4b, 0xd2, + 0x30, 0xe5, 0xab, 0xd2, 0x44, 0x41, 0xff, 0x2d, 0xe6, 0xc4, 0x7b, 0xa2, 0xf1, 0x96, 0xab, 0xb2, + 0xfe, 0x83, 0x7f, 0x1c, 0x65, 0x05, 0xbd, 0xb5, 0x9b, 0x48, 0x7a, 0xa5, 0x29, 0xaa, 0x34, 0x49, + 0xc0, 0x05, 0xd0, 0xea, 0x93, 0x4b, 0x32, 0xfe, 0xc5, 0x97, 0xa0, 0x09, 0x00, 0x15, 0x65, 0xf5, + 0xde, 0x10, 0xc4, 0xb6, 0x23, 0x82, 0x26, 0xb6, 0x1c, 0x77, 0xd2, 0x3e, 0xd9, 0x23, 0xb3, 0x85, + 0xfc, 0x32, 0x34, 0x9e, 0xbc, 0x30, 0x9b, 0x9f, 0xc5, 0x51, 0xe4, 0xc8, 0x73, 0x66, 0x96, 0x8a, + 0xf9, 0xb0, 0x36, 0x5f, 0xe3, 0xe6, 0x67, 0x75, 0x4a, 0xff, 0x58, 0x44, 0x36, 0x2b, 0xf9, 0x4a, + 0x34, 0x91, 0xa2, 0x17, 0xbc, 0xbd, 0x0f, 0x19, 0x16, 0xa6, 0x1e, 0xc1, 0x5a, 0x63, 0xbc, 0x26, + 0xf1, 0x0b, 0x27, 0x88, 0xfd, 0x9c, 0xb5, 0x9e, 0x7f, 0x1e, 0x8d, 0x5f, 0xbf, 0xa9, 0x8c, 0x24, + 0x69, 0x9d, 0x85, 0xb7, 0x78, 0xb6, 0x2a, 0x15, 0x08, 0x66, 0xa9, 0x38, 0x01, 0xe7, 0x9e, 0xd3, + 0x91, 0x83, 0x8e, 0x8d, 0x68, 0x39, 0x1f, 0x46, 0x6c, 0xbe, 0x7e, 0x12, 0x04, 0xad, 0x38, 0xdd, + 0x85, 0xb0, 0x67, 0xce, 0x27, 0xb1, 0xb0, 0x58, 0x7a, 0xc3, 0xb8, 0x1a, 0x17, 0xcf, 0x25, 0xcf, + 0x7e, 0x46, 0x00, 0x9a, 0x6d, 0xc0, 0x2f, 0x07, 0xc3, 0x24, 0xbc, 0xec, 0x87, 0x4d, 0xf7, 0x54, + 0x5a, 0x28, 0xce, 0xb6, 0x58, 0xf8, 0x19, 0xf8, 0xc2, 0xb0, 0x1e, 0x34, 0x9a, 0xf1, 0x1f, 0xe8, + 0xf7, 0x2c, 0xb4, 0x89, 0x06, 0x2a, 0xc3, 0x92, 0x20, 0x52, 0x24, 0x56, 0xd8, 0x30, 0x6a, 0xbc, + 0xf5, 0x73, 0xad, 0xef, 0x4a, 0x65, 0x75, 0x31, 0x35, 0xa9, 0x1a, 0x51, 0x5b, 0xb4, 0xfe, 0x2b, + 0x90, 0x94, 0x81, 0x7c, 0x0a, 0x93, 0xd3, 0x24, 0x4b, 0x00, 0x36, 0xc1, 0x91, 0xc9, 0x70, 0x3a, + 0x19, 0x01, 0x2e, 0x1d, 0xb2, 0xe2, 0x0d, 0x05, 0xfc, 0x38, 0x42, 0x99, 0x41, 0x46, 0xb0, 0x15, + 0xe2, 0xbc, 0xd8, 0xc0, 0x6e, 0xb0, 0x15, 0x33, 0x2c, 0x91, 0x77, 0x25, 0xce, 0xed, 0x89, 0x0d, + 0xf4, 0x82, 0xe9, 0x98, 0xd6, 0x71, 0x5c, 0x3b, 0x7a, 0x42, 0xb6, 0xf4, 0xf9, 0x21, 0x81, 0x8b, + 0x96, 0xa1, 0x7c, 0xfb, 0x91, 0xdc, 0x54, 0x08, 0x20, 0x62, 0x8f, 0xce, 0xd2, 0x69, 0xe2, 0x02, + 0xd6, 0x14, 0x89, 0x12, 0x19, 0x80, 0x89, 0x59, 0xf2, 0x0f, 0xb6, 0xab, 0xf0, 0x68, 0x06, 0x9a, + 0xad, 0x53, 0x8f, 0xab, 0x70, 0x38, 0xcb, 0xdb, 0xcf, 0x51, 0x97, 0x44, 0x39, 0x55, 0xba, 0xc4, + 0xa1, 0x8b, 0x9c, 0x90, 0xee, 0x3b, 0xe2, 0xbe, 0x94, 0x6c, 0x0d, 0x04, 0xda, 0xbc, 0x3b, 0xcc, + 0xcd, 0xff, 0x95, 0x89, 0x1e, 0x76, 0x9f, 0xf5, 0xcf, 0x93, 0xbd, 0xb9, 0xbb, 0xa1, 0x88, 0x88, + 0xfd, 0x78, 0xda, 0x13, 0x11, 0xe7, 0xb1, 0xfc, 0x8e, 0x0b, 0xec, 0xa4, 0xe7, 0x7a, 0x3a, 0x33, + 0xd0, 0x4c, 0x33, 0x52, 0x46, 0x59, 0x50, 0xa9, 0x53, 0xfc, 0x61, 0x9f, 0xb7, 0x5e, 0x56, 0x7e, + 0xcb, 0x7f, 0xce, 0xa1, 0xf1, 0x21, 0x25, 0xb8, 0x59, 0x09, 0xbe, 0x6e, 0x5c, 0xd0, 0xd2, 0xdd, + 0x9c, 0x2a, 0xfd, 0x51, 0x30, 0x8b, 0xc5, 0xdf, 0xc6, 0x06, 0x76, 0xc7, 0x77, 0x13, 0x42, 0x28, + 0xd1, 0xbd, 0x23, 0x31, 0xb8, 0x23, 0x36, 0x78, 0x29, 0xd1, 0xbd, 0x63, 0x93, 0xb2, 0x45, 0x07, + 0xb9, 0xfe, 0x2b, 0xb1, 0x68, 0xc7, 0xa6, 0xa6, 0xf5, 0xca, 0x02, 0xfc, 0x22, 0xea, 0x40, 0x7c, + 0xb8, 0x9f, 0xde, 0x16, 0xda, 0x02, 0x8b, 0x26, 0x17, 0xd4, 0x05, 0x7d, 0x9b, 0x95, 0x20, 0x49, + 0x30, 0x4a, 0x7e, 0x41, 0x8f, 0x78, 0x4f, 0x6b, 0x65, 0xb5, 0x91, 0x02, 0x90, 0xde, 0x3a, 0x3a, + 0x0d, 0x43, 0x1c, 0x9c, 0x6a, 0x2d, 0xe2, 0xc3, 0xec, 0x2e, 0x99, 0x55, 0x34, 0x4a, 0x0c, 0x1d, + 0xa9, 0xf0, 0x46, 0x06, 0x2a, 0x70, 0x1f, 0xe5, 0xde, 0xd7, 0x7d, 0xbc, 0x6b, 0x71, 0x60, 0x98, + 0x9b, 0x02, 0xfc, 0xcd, 0x35, 0x59, 0x02, 0x73, 0x11, 0x50, 0xbc, 0x78, 0x4e, 0xdb, 0xd9, 0x96, + 0xe8, 0xde, 0x91, 0xec, 0xdf, 0x1a, 0xbb, 0x72, 0xc6, 0xe2, 0xcf, 0x40, 0xa2, 0x14, 0xa5, 0xdc, + 0x9e, 0x94, 0xbb, 0x9c, 0x1e, 0x06, 0xff, 0x61, 0x9c, 0xcd, 0xed, 0xf0, 0xbe, 0x05, 0x43, 0xeb, + 0xeb, 0x91, 0x71, 0x0b, 0xf2, 0xd8, 0xb5, 0x28, 0xaf, 0xb6, 0xde, 0xa7, 0xf8, 0xc3, 0xe0, 0x0f, + 0x47, 0x04, 0x00, 0x4b, 0x74, 0x3a, 0xd6, 0x52, 0x21, 0x4e, 0x87, 0x05, 0xeb, 0xb4, 0x02, 0xf6, + 0x8b, 0xd3, 0xba, 0xda, 0xb5, 0xde, 0x43, 0xe6, 0x98, 0x96, 0xd6, 0xfc, 0x3a, 0x34, 0x11, 0x26, + 0x29, 0xd5, 0xd5, 0x05, 0x95, 0x50, 0x88, 0x08, 0x55, 0x17, 0xeb, 0xc7, 0x6f, 0xad, 0xa1, 0x42, + 0x5f, 0x88, 0xb7, 0x8d, 0x49, 0x41, 0x9a, 0x6b, 0x38, 0x5f, 0xb6, 0x36, 0xe6, 0x57, 0x20, 0x54, + 0xeb, 0x2d, 0x53, 0x82, 0xe1, 0x72, 0x1d, 0xec, 0xb2, 0x8d, 0xfc, 0xf8, 0x0f, 0x0b, 0x4c, 0xb1, + 0xe1, 0x14, 0x5a, 0x26, 0x81, 0xd6, 0x8a, 0x04, 0xa8, 0xf4, 0xc8, 0x4c, 0x1b, 0xbe, 0x1a, 0x8d, + 0x6f, 0x0a, 0x29, 0xc1, 0x35, 0x81, 0x4d, 0x8a, 0x9f, 0xc8, 0x57, 0x45, 0x9d, 0xcc, 0x32, 0x4b, + 0xc5, 0x59, 0xc9, 0xbe, 0xab, 0x23, 0x87, 0xfa, 0xa8, 0x56, 0x38, 0xac, 0x97, 0x5a, 0xb2, 0x82, + 0xe6, 0xcb, 0x66, 0x73, 0xbe, 0x0a, 0x4d, 0x24, 0xdb, 0x5a, 0x1e, 0x68, 0xf0, 0xfa, 0x0c, 0xc7, + 0x02, 0x1c, 0x3f, 0xd3, 0x5a, 0x43, 0x4d, 0x97, 0x8e, 0x1f, 0xd7, 0xba, 0xda, 0xe9, 0x58, 0xd6, + 0x46, 0xfc, 0x6a, 0x84, 0x60, 0x4b, 0xf5, 0x39, 0x13, 0xc1, 0xc0, 0x22, 0x55, 0x9a, 0x27, 0x30, + 0xc5, 0xe2, 0x0c, 0x18, 0xc9, 0x2c, 0x81, 0x5b, 0xc4, 0x2c, 0x99, 0xd6, 0xf0, 0xaf, 0xeb, 0xb0, + 0xa2, 0xff, 0xd2, 0xc1, 0x1a, 0x04, 0x04, 0x0b, 0x74, 0xf6, 0xd0, 0x2c, 0x35, 0x62, 0x71, 0xd3, + 0x02, 0xdb, 0x68, 0x66, 0xcb, 0x92, 0x03, 0x9c, 0x2a, 0xed, 0xe5, 0x50, 0x07, 0x27, 0xa4, 0xb9, + 0x4a, 0x86, 0x67, 0x72, 0x4a, 0x2c, 0xc8, 0xf8, 0xb0, 0x5a, 0xe0, 0xe7, 0x1a, 0x67, 0x3d, 0xf7, + 0x6b, 0x1c, 0x73, 0x76, 0xd7, 0x38, 0x73, 0xd7, 0xaf, 0x71, 0xd6, 0x5d, 0x2b, 0x3c, 0x68, 0x77, + 0x81, 0xbd, 0xaf, 0x10, 0x6a, 0x89, 0xce, 0xbb, 0xa2, 0x1a, 0x21, 0xdd, 0x12, 0x52, 0x6e, 0x6a, + 0x7a, 0xa4, 0xd7, 0x9d, 0x81, 0x66, 0x59, 0x92, 0xe0, 0xdc, 0x47, 0x48, 0x2f, 0xc3, 0xfa, 0xf6, + 0x56, 0xab, 0xd2, 0x2a, 0xf4, 0xba, 0x90, 0x66, 0x39, 0xe2, 0x5c, 0x4b, 0x3a, 0x29, 0xb7, 0x27, + 0xc6, 0xf2, 0x06, 0xf7, 0x64, 0xa0, 0xd9, 0x29, 0x47, 0xbb, 0xf7, 0xa1, 0x86, 0x18, 0x69, 0xa6, + 0x5b, 0x82, 0x58, 0xc8, 0xee, 0x88, 0xfd, 0x2a, 0x8e, 0x02, 0x3b, 0xbb, 0xb3, 0x51, 0x01, 0xa3, + 0xf7, 0xb6, 0x42, 0xce, 0x51, 0x17, 0xc8, 0xf9, 0x83, 0x2a, 0x85, 0x58, 0xc0, 0x79, 0x9f, 0x3d, + 0x08, 0x0a, 0x3e, 0x76, 0xa8, 0xc1, 0x40, 0x93, 0x1a, 0x62, 0x2c, 0x00, 0x03, 0x3f, 0xd8, 0xc6, + 0xbf, 0xf0, 0x35, 0x52, 0xdb, 0x45, 0xf3, 0x81, 0x7c, 0xc9, 0xf9, 0x40, 0x3e, 0x9a, 0xfa, 0x81, + 0x24, 0xdd, 0xcd, 0xe7, 0xd1, 0x6f, 0x20, 0x61, 0x26, 0x63, 0x5d, 0x95, 0x2a, 0x95, 0x0b, 0x4c, + 0xb1, 0xf8, 0xac, 0xd6, 0xf7, 0x69, 0xbc, 0xe5, 0x72, 0xe2, 0xcb, 0x7e, 0xc8, 0x5b, 0x7f, 0x63, + 0xa8, 0x8d, 0x2e, 0xe7, 0x7a, 0x64, 0xab, 0x39, 0xdd, 0xeb, 0x91, 0xad, 0xcc, 0x4a, 0xa8, 0x91, + 0xa4, 0x39, 0x14, 0xff, 0x0e, 0x9a, 0x50, 0x1b, 0xf0, 0xfb, 0x95, 0x5a, 0xf8, 0x20, 0xbc, 0x9a, + 0x25, 0xaa, 0xb4, 0x58, 0x60, 0xcb, 0xc5, 0xb9, 0x23, 0xfb, 0xbe, 0x8b, 0x77, 0x9c, 0xa6, 0x9f, + 0x4b, 0x1c, 0xfd, 0x26, 0xb9, 0x75, 0x7f, 0xbc, 0xe5, 0x60, 0x32, 0xd2, 0x3c, 0xd2, 0x7d, 0x76, + 0x64, 0xeb, 0x3e, 0xd3, 0x20, 0xd6, 0xec, 0xc6, 0x68, 0xf3, 0xb2, 0x7f, 0x80, 0x36, 0x2f, 0xe7, + 0x16, 0xb4, 0x79, 0x06, 0xbd, 0x9c, 0x12, 0x8c, 0x0c, 0x4b, 0xe2, 0x34, 0x37, 0x96, 0xd8, 0xce, + 0x6f, 0xcb, 0x04, 0x05, 0xf5, 0x7d, 0x49, 0x30, 0xd7, 0x5a, 0xf8, 0xc5, 0x31, 0x10, 0xcc, 0xc5, + 0xaa, 0x54, 0x44, 0x08, 0xe6, 0xb9, 0xa3, 0xee, 0x8d, 0xd5, 0x0d, 0x38, 0xf5, 0x2e, 0x8d, 0x79, + 0xb3, 0x53, 0x62, 0x84, 0x59, 0xa8, 0xa0, 0xd2, 0xef, 0x0b, 0x2f, 0xb7, 0x9b, 0x65, 0xca, 0xca, + 0x6f, 0x0b, 0x67, 0xa3, 0x87, 0x52, 0xd4, 0x85, 0x1a, 0x0b, 0x8f, 0x64, 0xa0, 0x19, 0x52, 0x5d, + 0x1d, 0xa9, 0x54, 0xea, 0x18, 0xbb, 0xef, 0xb7, 0xdc, 0x0d, 0x4d, 0x39, 0x53, 0xb2, 0xea, 0x6a, + 0x68, 0x3a, 0x89, 0x35, 0x2b, 0xad, 0x2c, 0x77, 0xb7, 0x15, 0x7d, 0xd1, 0x89, 0x06, 0x1c, 0xa1, + 0x44, 0xc0, 0xa2, 0xc5, 0xcd, 0x72, 0x4e, 0x51, 0xa5, 0xf5, 0xe8, 0x37, 0x42, 0x8a, 0x89, 0x8b, + 0xf3, 0xb4, 0xf3, 0x3b, 0x09, 0x45, 0xb7, 0xfb, 0x84, 0xd6, 0x7c, 0xda, 0x66, 0xe7, 0x6a, 0x50, + 0x3b, 0x6e, 0x13, 0xb3, 0xc4, 0x0b, 0xed, 0xc9, 0x40, 0x33, 0x5d, 0x3f, 0x71, 0xef, 0xbf, 0x40, + 0xeb, 0x55, 0xe9, 0x3d, 0xf4, 0xae, 0x90, 0x6a, 0xfa, 0xa2, 0x30, 0x96, 0x2d, 0x1a, 0xe5, 0x15, + 0xfa, 0xa7, 0xa9, 0x88, 0x37, 0x42, 0xd5, 0x06, 0x9a, 0xea, 0x0c, 0x01, 0xda, 0x7b, 0x68, 0x1c, + 0xb1, 0x08, 0x25, 0xa0, 0x52, 0xa1, 0x4a, 0xf3, 0x49, 0x1c, 0x58, 0xac, 0xba, 0x9c, 0x1d, 0x8b, + 0xee, 0xa5, 0x36, 0xdf, 0xc9, 0x3d, 0x17, 0xe2, 0x07, 0x77, 0x51, 0x05, 0xe6, 0xf7, 0xa5, 0x33, + 0x83, 0xd3, 0xf3, 0x33, 0x0a, 0xa6, 0x39, 0x42, 0xce, 0xca, 0xc6, 0xa8, 0xfc, 0x4b, 0x28, 0xcb, + 0x6f, 0x3a, 0x22, 0x14, 0x61, 0x5f, 0x7c, 0xbd, 0x40, 0x9c, 0x4e, 0x07, 0x8e, 0x0d, 0xf4, 0xea, + 0xa3, 0x12, 0x57, 0x04, 0x20, 0x59, 0x5e, 0x91, 0x71, 0x2b, 0x7e, 0x3b, 0x87, 0x72, 0x95, 0x3a, + 0x5f, 0x18, 0x6b, 0x28, 0x60, 0x43, 0x37, 0xa8, 0x52, 0x9d, 0x40, 0x0b, 0xc5, 0x37, 0xe1, 0x91, + 0xab, 0xf1, 0x7a, 0x6b, 0x74, 0x00, 0x3c, 0xf6, 0x29, 0x55, 0xf4, 0x10, 0xbb, 0x86, 0xce, 0xfe, + 0xc4, 0xd0, 0xc1, 0xe4, 0x77, 0x7b, 0x21, 0x2b, 0x08, 0x31, 0x41, 0xc5, 0x4e, 0x0b, 0xd8, 0x58, + 0x75, 0x07, 0xe8, 0x22, 0x69, 0xaa, 0x56, 0xd2, 0xbe, 0x7f, 0xaf, 0x4c, 0xbf, 0xc1, 0x1f, 0xe6, + 0x10, 0x0a, 0x18, 0x31, 0xd2, 0x43, 0x04, 0xff, 0x88, 0x0e, 0xfc, 0xe3, 0xd8, 0xde, 0x85, 0x34, + 0xb0, 0x3a, 0x91, 0x68, 0x97, 0xab, 0x92, 0x24, 0x30, 0x43, 0x89, 0x4f, 0x41, 0xb4, 0x86, 0xf8, + 0x89, 0x5d, 0xda, 0xae, 0x9d, 0xc9, 0xab, 0x5d, 0x89, 0xc1, 0x6f, 0xb4, 0xbe, 0x4f, 0x12, 0x1d, + 0xe7, 0x89, 0x58, 0xf9, 0xc2, 0x01, 0x70, 0x95, 0x80, 0xd7, 0x09, 0x92, 0x4f, 0xc9, 0xcc, 0x00, + 0xfc, 0xb7, 0x1c, 0xca, 0xc3, 0x56, 0xb4, 0xc6, 0xe4, 0xb2, 0xf1, 0xe4, 0x9e, 0x1e, 0xc3, 0xe4, + 0x2a, 0x98, 0x6e, 0x30, 0xbd, 0xb7, 0x55, 0xe9, 0x4d, 0xc1, 0x32, 0x9c, 0xf8, 0x2a, 0x9b, 0x08, + 0x8a, 0xc6, 0x4b, 0x27, 0x02, 0xdb, 0x5d, 0x5f, 0xc0, 0xe6, 0x41, 0x2d, 0x9b, 0x17, 0x0a, 0x4c, + 0xe5, 0x40, 0x7c, 0x06, 0xdb, 0x2f, 0x5b, 0xc6, 0xe5, 0xff, 0x19, 0x27, 0xad, 0x08, 0x34, 0xd5, + 0x99, 0xc8, 0x95, 0x38, 0x20, 0xce, 0x72, 0x99, 0xba, 0x81, 0xd0, 0x89, 0xe7, 0xb6, 0xbd, 0xa7, + 0xb8, 0x9d, 0xd3, 0x4f, 0x3d, 0xba, 0x97, 0x66, 0x00, 0xa0, 0x0a, 0xe6, 0xe4, 0x37, 0x67, 0xe2, + 0x2d, 0x97, 0x59, 0x75, 0x36, 0xce, 0x14, 0x63, 0xc8, 0x58, 0x8d, 0x74, 0x9b, 0xe0, 0x1b, 0x4d, + 0xa4, 0xae, 0xc3, 0xfb, 0xc8, 0xed, 0xbb, 0x1e, 0xd9, 0x4a, 0xdc, 0x76, 0x62, 0x03, 0x7b, 0xe2, + 0x5f, 0x9f, 0x8c, 0xf7, 0xb4, 0x42, 0x24, 0xbb, 0xf8, 0xa1, 0x4b, 0xb1, 0xa1, 0x6e, 0xd0, 0x21, + 0xea, 0x6b, 0x86, 0xbc, 0xcd, 0xf6, 0x69, 0xf1, 0xbf, 0x43, 0x79, 0x81, 0xd0, 0x2a, 0xbc, 0x0c, + 0xec, 0xb6, 0x31, 0x0e, 0x2f, 0x70, 0x86, 0x7d, 0x81, 0xab, 0x6b, 0xb0, 0xa3, 0xf4, 0xcb, 0xaa, + 0xf4, 0xa2, 0x60, 0xe9, 0x20, 0x16, 0xd3, 0x65, 0xad, 0x26, 0xd0, 0x4d, 0x17, 0xc6, 0x66, 0x3a, + 0x20, 0x38, 0xc8, 0xd2, 0x97, 0x57, 0x39, 0x34, 0x85, 0x7c, 0x88, 0x99, 0x42, 0x6e, 0x8a, 0x3d, + 0x26, 0x0d, 0x37, 0x04, 0x4b, 0x75, 0x62, 0x43, 0x70, 0xf6, 0x14, 0x17, 0xd3, 0xb9, 0xb0, 0xe9, + 0xb1, 0x60, 0x56, 0x3a, 0xb4, 0x62, 0xd8, 0xb0, 0xcc, 0xc7, 0x39, 0x08, 0xbf, 0x87, 0x43, 0x53, + 0xa9, 0x8a, 0x89, 0x99, 0x16, 0x4a, 0xed, 0x29, 0x0d, 0x4d, 0x37, 0x04, 0x4b, 0x5f, 0x50, 0xa5, + 0xa5, 0x82, 0x5b, 0x6f, 0x71, 0x2e, 0x9d, 0x9a, 0xc5, 0x9c, 0x91, 0x9d, 0x8b, 0x5b, 0x3f, 0xfe, + 0x15, 0x33, 0x5f, 0xc7, 0x04, 0xc3, 0xa0, 0x6e, 0x96, 0x99, 0xaf, 0x63, 0xb2, 0xf1, 0x9a, 0x1f, + 0xd5, 0x06, 0xa3, 0x34, 0x54, 0x7b, 0x46, 0xc1, 0x34, 0x33, 0x5b, 0xc7, 0x4a, 0x34, 0x11, 0x1f, + 0x7a, 0xb5, 0xe1, 0x2a, 0x95, 0x67, 0x8c, 0xf3, 0x98, 0x60, 0xad, 0x11, 0x79, 0x48, 0xcc, 0x04, + 0xd7, 0x1b, 0x88, 0x4f, 0xd9, 0xda, 0x84, 0x8f, 0x70, 0x28, 0xa7, 0x16, 0x5c, 0xfd, 0x41, 0x65, + 0xbe, 0x51, 0x95, 0x14, 0x81, 0x14, 0x89, 0x6f, 0xc3, 0x35, 0xd3, 0x7a, 0x0f, 0xc5, 0xfb, 0xbe, + 0x2d, 0xf6, 0xc4, 0xae, 0x1e, 0xd3, 0x7a, 0x0f, 0x8f, 0x44, 0xb6, 0x8d, 0x34, 0xb7, 0x6b, 0x5d, + 0x3b, 0x12, 0x67, 0xdb, 0xf1, 0x60, 0x3a, 0x52, 0x63, 0x1c, 0xfd, 0x8b, 0x49, 0xf8, 0x1f, 0x48, + 0x73, 0x81, 0xa3, 0xcd, 0x05, 0x9a, 0xea, 0x3c, 0x1f, 0x84, 0x02, 0xfe, 0xe4, 0xd9, 0xcf, 0xe2, + 0x9f, 0x74, 0x11, 0xd8, 0x25, 0x1f, 0xe1, 0xdf, 0xb0, 0xa6, 0xac, 0x99, 0x64, 0x48, 0x4e, 0x8a, + 0xad, 0x49, 0x69, 0x1e, 0x81, 0x44, 0x34, 0x90, 0x62, 0xa3, 0xff, 0x4c, 0x62, 0x70, 0x67, 0x6c, + 0x70, 0x4f, 0x62, 0xb0, 0xdd, 0xd0, 0xc9, 0xb1, 0xf9, 0x69, 0x56, 0x5a, 0xdc, 0x8b, 0x40, 0xb5, + 0x8e, 0x29, 0x33, 0xd6, 0xbd, 0x68, 0x76, 0x1a, 0x93, 0x58, 0x8b, 0x4b, 0x51, 0x25, 0xca, 0x51, + 0xfc, 0xf8, 0x39, 0xc8, 0x37, 0xa4, 0x6d, 0x0b, 0x05, 0x52, 0x24, 0xce, 0x03, 0x0f, 0xb4, 0x44, + 0x6b, 0x0b, 0xb1, 0xee, 0x25, 0xcf, 0xed, 0x11, 0xe2, 0x6a, 0xd1, 0xd9, 0x9f, 0x3c, 0xbb, 0x55, + 0x26, 0xad, 0xf9, 0x3f, 0xd0, 0x04, 0x50, 0xd8, 0x54, 0x7c, 0x8a, 0xbb, 0xae, 0x00, 0xe3, 0xcc, + 0x2a, 0xb3, 0x1d, 0x71, 0xbb, 0x62, 0x7a, 0x8a, 0x4f, 0xba, 0x63, 0x1f, 0x6c, 0x45, 0xc9, 0x1e, + 0x86, 0xcc, 0xf6, 0xe2, 0x3f, 0x40, 0xb9, 0xfa, 0xa6, 0xe3, 0x6f, 0xf3, 0xf8, 0xdb, 0x8f, 0xba, + 0x7e, 0x1b, 0x82, 0x2e, 0x98, 0x21, 0xbe, 0x69, 0x2f, 0x71, 0x8e, 0xed, 0xbb, 0xb1, 0xe8, 0x5e, + 0xcb, 0xe7, 0x68, 0x4b, 0xfd, 0xde, 0xe5, 0x35, 0xd6, 0x7b, 0xc3, 0xef, 0x07, 0x82, 0x0d, 0xf8, + 0x83, 0x53, 0xc7, 0xfc, 0x4c, 0x54, 0x33, 0xdd, 0xe0, 0x99, 0xc0, 0x5b, 0x6e, 0x19, 0x4e, 0x9c, + 0x63, 0x24, 0xde, 0x23, 0xc9, 0x54, 0x6c, 0x50, 0x28, 0x5b, 0x5a, 0xcf, 0x7a, 0x0b, 0x4d, 0xb6, + 0xbd, 0x8c, 0xb7, 0x2f, 0x6d, 0xc9, 0x3b, 0x68, 0x8a, 0xe3, 0x61, 0xbb, 0x7d, 0xa3, 0xbf, 0x8c, + 0xa6, 0x38, 0xf6, 0xe3, 0xa6, 0x94, 0xa2, 0x24, 0x7a, 0x9d, 0x0b, 0x2d, 0x26, 0x4e, 0x01, 0x44, + 0x43, 0xee, 0x14, 0x89, 0xcc, 0x45, 0xe8, 0xa8, 0x6b, 0x1c, 0xa6, 0x87, 0xae, 0x71, 0x16, 0x1c, + 0xaf, 0xd7, 0x03, 0x22, 0x2a, 0xfc, 0x86, 0x43, 0x53, 0x2d, 0x63, 0xde, 0x17, 0x2a, 0xc0, 0xc2, + 0xff, 0x7e, 0xaa, 0x11, 0x68, 0xd2, 0x42, 0x96, 0xbe, 0x6e, 0x27, 0x4b, 0x97, 0xe0, 0x88, 0xd7, + 0xa4, 0x6c, 0x14, 0xa2, 0x94, 0x66, 0x54, 0x22, 0x24, 0xe8, 0x8b, 0x16, 0x12, 0x74, 0xfe, 0xe8, + 0x24, 0x28, 0x19, 0xe0, 0xfe, 0xa3, 0x40, 0x9d, 0x3b, 0x79, 0x0f, 0x51, 0xa0, 0x2e, 0x93, 0x7b, + 0x40, 0x81, 0x3e, 0xa0, 0x40, 0x7f, 0xde, 0x14, 0xe8, 0x0b, 0x66, 0x98, 0xdf, 0x09, 0x86, 0x02, + 0x32, 0x45, 0x98, 0xdf, 0x71, 0xc1, 0xec, 0xfc, 0x0c, 0x4b, 0x36, 0xe7, 0x07, 0xc4, 0xe7, 0x9d, + 0x26, 0x3e, 0xdf, 0xb5, 0x11, 0x9f, 0x15, 0xaa, 0x54, 0x4a, 0x89, 0xcf, 0xa5, 0x63, 0x21, 0x3e, + 0xe7, 0x83, 0x89, 0x4f, 0x38, 0xd8, 0xa4, 0xc4, 0x5b, 0x0e, 0x62, 0x27, 0xd5, 0xa2, 0x07, 0x04, + 0x69, 0x6a, 0x82, 0xd4, 0xe5, 0xd5, 0x78, 0x40, 0x90, 0xde, 0x4e, 0x82, 0x94, 0x64, 0x50, 0x9b, + 0x06, 0x1b, 0x4d, 0x1e, 0x1b, 0x83, 0x24, 0x25, 0x19, 0x2b, 0xc1, 0x89, 0xd4, 0x49, 0x93, 0x1a, + 0x98, 0xa8, 0x70, 0x57, 0x06, 0x9a, 0x6a, 0x39, 0xa9, 0xfb, 0xc3, 0x00, 0xed, 0x0d, 0x8b, 0x05, + 0xce, 0x74, 0x57, 0x60, 0xb7, 0x58, 0xdd, 0xd0, 0x44, 0x78, 0x90, 0x11, 0x8b, 0x0d, 0xc9, 0x06, + 0xea, 0x83, 0xc2, 0xbf, 0xe4, 0x10, 0x6f, 0x68, 0x12, 0x19, 0x82, 0xf6, 0x5d, 0x3b, 0x41, 0x5b, + 0x76, 0x13, 0x04, 0xed, 0xe8, 0x52, 0xd6, 0x02, 0x34, 0xce, 0x17, 0x5a, 0x1e, 0x08, 0xd6, 0xc2, + 0xbe, 0xe5, 0xca, 0xc6, 0xcf, 0x92, 0x12, 0x55, 0x7a, 0x0e, 0x3d, 0x23, 0xb8, 0xcc, 0x49, 0x9c, + 0x4e, 0x62, 0x15, 0x1a, 0xeb, 0xb0, 0x9f, 0x2f, 0x3e, 0x55, 0x4b, 0xbf, 0x9f, 0xe8, 0xa9, 0x6a, + 0x97, 0xbf, 0x86, 0xad, 0x48, 0x79, 0xaa, 0x3d, 0x1c, 0x8e, 0x8b, 0x6c, 0x39, 0xd2, 0x55, 0xf6, + 0x23, 0x7d, 0x4a, 0x9f, 0x1a, 0x3d, 0xd2, 0x09, 0x4c, 0x30, 0x9c, 0x31, 0x1c, 0xa1, 0x71, 0x50, + 0xf6, 0xcf, 0x98, 0x81, 0xec, 0x2e, 0xc7, 0x86, 0xf7, 0xb9, 0x5f, 0xc4, 0xc2, 0x3f, 0xcf, 0x40, + 0xf9, 0x66, 0xbf, 0xfb, 0xe3, 0x94, 0x5e, 0x1f, 0xcb, 0x29, 0x8d, 0x31, 0x57, 0x5a, 0xc9, 0x72, + 0x55, 0x2a, 0x43, 0x92, 0xe0, 0xd8, 0x04, 0x71, 0x3a, 0xec, 0x9e, 0x09, 0xe3, 0xe9, 0xb5, 0x24, + 0x89, 0x2c, 0x94, 0x0f, 0x8a, 0x3f, 0xe6, 0xa0, 0x5f, 0xb3, 0x1f, 0xf4, 0xe2, 0x9b, 0xb8, 0xbb, + 0x59, 0x41, 0x90, 0x17, 0x92, 0x8b, 0xfa, 0xb4, 0x85, 0x17, 0xf5, 0x8c, 0xc6, 0x8b, 0xde, 0x53, + 0x3c, 0xe8, 0x12, 0x53, 0x5a, 0x0a, 0xaa, 0x75, 0x9c, 0xcd, 0x84, 0x4a, 0x4b, 0xc7, 0x53, 0x39, + 0xa9, 0x29, 0x1e, 0x5d, 0x62, 0xcf, 0x62, 0x31, 0x33, 0x05, 0x79, 0x9b, 0x86, 0xa8, 0xcd, 0xf9, + 0x01, 0x44, 0x6d, 0xc9, 0x41, 0x4e, 0x95, 0x54, 0x0e, 0x75, 0x72, 0x82, 0xe3, 0x5c, 0xc5, 0xdf, + 0xd9, 0x61, 0xc3, 0x30, 0xdc, 0x26, 0xb1, 0x9c, 0xb1, 0xb7, 0x73, 0x2c, 0xba, 0x33, 0x71, 0xb4, + 0x4f, 0xe7, 0x8e, 0x31, 0xe5, 0x0b, 0xfc, 0x59, 0x62, 0x70, 0x87, 0xd6, 0xd5, 0x02, 0xe5, 0x64, + 0x97, 0xf1, 0x50, 0x66, 0xdf, 0xe6, 0x73, 0xc0, 0xe1, 0x69, 0x2d, 0x47, 0x62, 0x03, 0x51, 0xe3, + 0x0a, 0x9f, 0x1b, 0xd9, 0xd5, 0x09, 0xed, 0x0b, 0xbf, 0xcb, 0x40, 0x53, 0x98, 0x19, 0xdd, 0x1f, + 0x77, 0xf6, 0x55, 0x8b, 0x02, 0x3e, 0xc5, 0x9d, 0x65, 0x4d, 0xb5, 0xe1, 0xce, 0x6a, 0x2d, 0xe7, + 0x75, 0xcc, 0xca, 0x5e, 0xd8, 0x57, 0x54, 0xe9, 0x25, 0xf4, 0x82, 0xe0, 0xdc, 0x82, 0xb1, 0xde, + 0xd8, 0xc2, 0xaf, 0xa6, 0xa2, 0x19, 0x20, 0xf0, 0xa2, 0x2c, 0x9a, 0x71, 0x61, 0x97, 0x92, 0x4b, + 0xc6, 0x19, 0xc1, 0xb6, 0x66, 0x92, 0x4b, 0x46, 0xdc, 0x5d, 0xf0, 0xf1, 0x81, 0xa8, 0x07, 0x4c, + 0x25, 0xff, 0x3f, 0x8e, 0x5c, 0xb4, 0x3f, 0x75, 0x6a, 0xba, 0xbd, 0xaa, 0xb4, 0x8c, 0xd5, 0x74, + 0x2f, 0xa1, 0x63, 0xc4, 0x5b, 0x23, 0x34, 0x44, 0x2b, 0x0d, 0x07, 0x85, 0x03, 0x31, 0xc5, 0x06, + 0xa2, 0xfa, 0x25, 0xb3, 0x64, 0xe6, 0xcc, 0x18, 0x53, 0x66, 0xce, 0x77, 0xa9, 0x43, 0x5e, 0xa6, + 0xa9, 0x8e, 0x35, 0x1c, 0xf2, 0xe6, 0x38, 0x3f, 0x0d, 0x9e, 0x37, 0x86, 0xb9, 0x97, 0xfe, 0xca, + 0x70, 0x05, 0x1e, 0xe7, 0x2b, 0x63, 0xb8, 0xe4, 0xbd, 0x8f, 0x26, 0x03, 0xab, 0x21, 0x35, 0x85, + 0x03, 0x21, 0x1c, 0x43, 0x22, 0x0b, 0x1f, 0x3e, 0x4e, 0xf4, 0x6f, 0xaf, 0x13, 0x9f, 0x20, 0xc8, + 0x63, 0x28, 0xa2, 0x75, 0xf5, 0xb3, 0x8c, 0x2d, 0x75, 0x02, 0x23, 0x51, 0x76, 0x6c, 0x1d, 0xf9, + 0xcd, 0x68, 0x82, 0x11, 0x18, 0xc2, 0xe7, 0xdf, 0x90, 0xca, 0x0a, 0x5f, 0x32, 0x9b, 0x40, 0x74, + 0x5e, 0x6c, 0x44, 0xca, 0xf6, 0x14, 0x0b, 0x2c, 0x5e, 0xa3, 0xf0, 0x06, 0x62, 0x32, 0xfe, 0xfb, + 0xd2, 0xec, 0xdd, 0x5c, 0x46, 0x3e, 0x27, 0xb3, 0xcd, 0xf9, 0xfd, 0x1c, 0x9a, 0x54, 0xef, 0x6d, + 0xf2, 0xd7, 0x6e, 0xa4, 0x31, 0x78, 0x73, 0xdc, 0xb3, 0x33, 0xad, 0xc4, 0xad, 0x80, 0x93, 0x69, + 0x02, 0xbb, 0x82, 0xd2, 0x15, 0xaa, 0xf4, 0xa2, 0x60, 0xeb, 0x2f, 0x0a, 0xf0, 0xed, 0xf8, 0xa1, + 0x4b, 0x80, 0xdf, 0x60, 0x12, 0xe0, 0xbd, 0x48, 0x99, 0x0a, 0x00, 0x55, 0x3a, 0x27, 0xdb, 0x18, + 0xfc, 0x66, 0xea, 0x17, 0x38, 0x2e, 0x9d, 0xea, 0xd8, 0x0e, 0xc8, 0x16, 0x17, 0x41, 0xec, 0xc7, + 0x64, 0xb8, 0x08, 0x3e, 0xa2, 0x53, 0xa1, 0x56, 0x07, 0x4a, 0x5c, 0x63, 0xf3, 0x16, 0xdc, 0xc6, + 0x51, 0x77, 0xc1, 0xdc, 0x9b, 0xfa, 0x30, 0xf6, 0x22, 0x24, 0x1f, 0x06, 0xb7, 0x4d, 0xe2, 0x4b, + 0x58, 0xe4, 0xfc, 0x70, 0xa2, 0x7b, 0x47, 0xfc, 0xc2, 0x49, 0xea, 0xce, 0x33, 0x5f, 0x8b, 0x1e, + 0xd7, 0x86, 0xb6, 0x17, 0x51, 0x47, 0xc3, 0xf7, 0xc1, 0x35, 0x7b, 0x75, 0x0d, 0x31, 0x9b, 0xc5, + 0x41, 0xa4, 0x48, 0x91, 0x28, 0xd1, 0xf1, 0x46, 0x22, 0xad, 0xc0, 0x7c, 0x43, 0xc0, 0xe1, 0xd5, + 0x35, 0x58, 0x56, 0xb6, 0x2d, 0xd1, 0x7c, 0x56, 0x67, 0x28, 0xc9, 0xbb, 0xd4, 0x0b, 0xdb, 0xad, + 0xef, 0xbb, 0xe1, 0x83, 0x28, 0x93, 0xa1, 0x58, 0x65, 0x1e, 0xba, 0x35, 0x65, 0xde, 0x19, 0x8e, + 0x89, 0x79, 0x68, 0x89, 0x2c, 0x67, 0x46, 0x3d, 0xdc, 0x42, 0xf7, 0x8a, 0x04, 0x36, 0xfc, 0xee, + 0x58, 0xf2, 0xdb, 0x83, 0x40, 0x38, 0x92, 0x87, 0xe8, 0xe0, 0x95, 0xf8, 0xc9, 0x16, 0x2a, 0xa2, + 0x84, 0x9f, 0xf0, 0x62, 0xc4, 0x06, 0x3a, 0x40, 0x8c, 0x72, 0x3d, 0xb2, 0x8d, 0xcd, 0x78, 0x4f, + 0xdf, 0x8d, 0xe4, 0x99, 0xad, 0x20, 0xde, 0xd3, 0x4b, 0xae, 0x36, 0x8f, 0x9c, 0x1c, 0x8c, 0x1f, + 0xee, 0x27, 0x1e, 0x75, 0x4c, 0x98, 0xc4, 0x8d, 0x08, 0xd5, 0x06, 0xfc, 0xa1, 0xa6, 0x06, 0x26, + 0x36, 0x17, 0x16, 0x9a, 0x31, 0xc5, 0xe2, 0x73, 0xe6, 0xdf, 0x10, 0xd8, 0x39, 0xa8, 0x84, 0x02, + 0x4d, 0xc1, 0x5a, 0x05, 0xc4, 0x4f, 0x41, 0xb0, 0x44, 0x4f, 0xec, 0xbf, 0x98, 0xec, 0xbf, 0x9c, + 0xfc, 0x76, 0x47, 0x3c, 0xda, 0x05, 0xf2, 0x0f, 0x99, 0x19, 0x84, 0xff, 0xc0, 0x16, 0xd1, 0x7a, + 0xea, 0x18, 0x22, 0x5a, 0x63, 0x6b, 0x23, 0x6b, 0x44, 0xeb, 0xe9, 0x26, 0xe2, 0xc5, 0x87, 0x0d, + 0x8b, 0xb4, 0xc6, 0xad, 0xe6, 0x3f, 0x42, 0x59, 0x61, 0xef, 0x86, 0x50, 0xc1, 0x34, 0x0c, 0xaa, + 0x8b, 0xc7, 0x0c, 0xaa, 0x1b, 0x08, 0xa0, 0x8a, 0xaa, 0xb4, 0x48, 0xc0, 0x43, 0x88, 0x4f, 0xba, + 0x82, 0x29, 0xac, 0xd2, 0xe2, 0x57, 0x8b, 0x9b, 0xf3, 0xdf, 0x72, 0x8c, 0xcb, 0x24, 0x16, 0x14, + 0x81, 0x0f, 0x68, 0x07, 0xa7, 0x4a, 0xbb, 0x39, 0xc1, 0x5a, 0x27, 0x6e, 0xa1, 0x4e, 0x93, 0x24, + 0x62, 0x8f, 0x3f, 0x10, 0x6c, 0xf0, 0xd6, 0x2f, 0x52, 0x3e, 0x0a, 0x2b, 0x41, 0xbf, 0xb7, 0xbe, + 0xe8, 0x7a, 0x64, 0x5b, 0xfc, 0x48, 0xdf, 0x48, 0xa4, 0x9b, 0x45, 0x5e, 0xa6, 0xa7, 0xa5, 0xda, + 0x96, 0xf8, 0xea, 0xab, 0xd8, 0x40, 0x6b, 0xfc, 0xe0, 0x15, 0xd7, 0x06, 0xc5, 0x1e, 0xad, 0xfd, + 0x62, 0xd9, 0xba, 0x55, 0xa4, 0xa0, 0xe5, 0x20, 0xcd, 0x42, 0x20, 0x5b, 0x67, 0x62, 0x75, 0xcf, + 0x9c, 0x71, 0x53, 0xee, 0x99, 0x95, 0x84, 0xcc, 0x92, 0x82, 0x8a, 0x17, 0x7b, 0x4b, 0xce, 0x64, + 0x9c, 0x44, 0x2d, 0x35, 0xe2, 0x64, 0x3a, 0x84, 0xe1, 0x24, 0x6a, 0xa9, 0xd7, 0xb1, 0x0c, 0xc9, + 0x54, 0x5c, 0xe0, 0x1e, 0xb5, 0x0a, 0x4f, 0x98, 0x06, 0x6d, 0x2a, 0x5d, 0xa9, 0x4a, 0x95, 0x46, + 0x9e, 0xe2, 0x57, 0xcc, 0x6d, 0xc1, 0x17, 0x13, 0x97, 0x1a, 0xc2, 0x43, 0x9b, 0x3b, 0x25, 0x48, + 0x71, 0x62, 0x03, 0x5f, 0xe8, 0x34, 0x5f, 0xdb, 0x41, 0xad, 0x73, 0x5b, 0xfc, 0xc0, 0x79, 0x23, + 0x8d, 0xf1, 0x07, 0x68, 0x52, 0xc0, 0x5f, 0x4f, 0xb2, 0x71, 0x63, 0x81, 0xd2, 0x43, 0xf8, 0x61, + 0xc3, 0xe1, 0xd5, 0x6d, 0x55, 0xe2, 0x02, 0xeb, 0xef, 0xd8, 0x60, 0x33, 0xa4, 0xfe, 0x01, 0x97, + 0x87, 0xe2, 0xd8, 0x40, 0x7b, 0xbc, 0xf5, 0x6c, 0xf2, 0x64, 0x1b, 0x48, 0x94, 0x65, 0x5b, 0xf7, + 0x1f, 0xe2, 0x53, 0xf9, 0x3c, 0x9a, 0xc0, 0xe0, 0xd6, 0x9b, 0xea, 0xfa, 0x1c, 0x1a, 0x4f, 0x61, + 0xfd, 0xa6, 0x24, 0x3c, 0xdb, 0x38, 0x55, 0xfa, 0x53, 0xf4, 0x07, 0x21, 0x05, 0xb9, 0x24, 0x4e, + 0x27, 0x38, 0xd1, 0xb8, 0xa2, 0x06, 0x7b, 0x49, 0x34, 0x8e, 0x96, 0x5c, 0x59, 0x40, 0x47, 0x5c, + 0xe3, 0xd8, 0x57, 0xf7, 0x1a, 0x67, 0x7b, 0xef, 0x4c, 0xb5, 0xe4, 0x35, 0x8e, 0x60, 0xe7, 0xc2, + 0x72, 0x34, 0xc9, 0x0a, 0x06, 0xfc, 0x2c, 0x06, 0xd9, 0xc2, 0x3a, 0x4c, 0x04, 0x37, 0x03, 0xe5, + 0x34, 0x06, 0x02, 0xf5, 0x06, 0x11, 0x26, 0x93, 0x5f, 0x85, 0xed, 0x99, 0x68, 0xa6, 0x63, 0x15, + 0xf7, 0x07, 0xed, 0xfc, 0xa6, 0x85, 0xdf, 0xfd, 0xc5, 0xa8, 0xd8, 0x0d, 0x56, 0x55, 0xee, 0x0d, + 0x7b, 0x47, 0xc9, 0x1a, 0xc9, 0x6f, 0xb9, 0x75, 0xb7, 0x47, 0x9c, 0xa0, 0xd0, 0xe1, 0xf6, 0x58, + 0x60, 0x09, 0x20, 0x97, 0xc6, 0xe7, 0xb1, 0xf0, 0x2f, 0x39, 0x34, 0x3b, 0xcd, 0xcc, 0xf9, 0x37, + 0xd1, 0x78, 0x8a, 0xb1, 0x48, 0x70, 0xad, 0x34, 0xc9, 0x19, 0x70, 0x14, 0x04, 0xb3, 0x03, 0xe3, + 0x9d, 0x6e, 0x24, 0xa8, 0xa3, 0x75, 0x7c, 0x35, 0xc9, 0xe7, 0x9f, 0x91, 0x26, 0x9f, 0x3f, 0xc8, + 0x78, 0x70, 0x3e, 0xff, 0xd9, 0x2c, 0x8c, 0x63, 0x77, 0xf7, 0x0e, 0xad, 0xf3, 0x3c, 0xb8, 0x63, + 0x43, 0x56, 0xff, 0xc2, 0x7f, 0xe1, 0xd1, 0x0c, 0x33, 0xc1, 0x9f, 0x85, 0xa1, 0x58, 0x6e, 0x8d, + 0x0f, 0xc2, 0x99, 0x41, 0x7c, 0x2d, 0xf1, 0x41, 0x26, 0xd0, 0x2b, 0x64, 0x98, 0xc3, 0x4f, 0xb3, + 0x46, 0xfa, 0xb8, 0xeb, 0xec, 0xc5, 0x42, 0xc2, 0x19, 0x01, 0x73, 0x31, 0x2b, 0x35, 0x67, 0x44, + 0xf8, 0xa1, 0x32, 0x5b, 0x3c, 0xe6, 0x5f, 0xdc, 0x04, 0x3b, 0x42, 0x99, 0x8e, 0x6d, 0x9c, 0x93, + 0xeb, 0xc8, 0x26, 0x4a, 0x40, 0x7b, 0xa0, 0xb5, 0xd2, 0x40, 0xa0, 0x7e, 0x9d, 0x8e, 0xb9, 0x6e, + 0x37, 0x47, 0xe2, 0xb7, 0x72, 0x24, 0x39, 0x63, 0xe4, 0x48, 0x84, 0xb1, 0x73, 0x24, 0x56, 0x4e, + 0xa4, 0xcd, 0xc9, 0x89, 0x8c, 0x1b, 0x3b, 0x27, 0xf2, 0xf2, 0x0f, 0xe4, 0x44, 0x1c, 0x1c, 0x88, + 0x9d, 0x8e, 0xcb, 0xfd, 0x11, 0xe9, 0x38, 0x93, 0xdb, 0x19, 0x9f, 0xce, 0x4c, 0xe1, 0xb6, 0x73, + 0x3b, 0x1f, 0x53, 0x66, 0x07, 0xdd, 0xd4, 0x77, 0x59, 0x66, 0x07, 0x23, 0x44, 0x83, 0xd9, 0x99, + 0x3b, 0x2a, 0xb3, 0x43, 0x99, 0x1c, 0x83, 0x76, 0x9d, 0xe0, 0x4e, 0xbb, 0xa6, 0xfc, 0xf2, 0x0f, + 0xa7, 0x5d, 0x4d, 0xf6, 0x2a, 0xef, 0xc7, 0x66, 0xaf, 0x0c, 0x51, 0xde, 0x44, 0x86, 0xbd, 0x32, + 0x44, 0x79, 0x84, 0xbd, 0x62, 0xf4, 0xd5, 0x94, 0xbd, 0x32, 0x24, 0x7b, 0x16, 0xf6, 0x6a, 0xd2, + 0x7d, 0xc3, 0x5e, 0x4d, 0xfe, 0x11, 0xd9, 0xab, 0x12, 0x94, 0x55, 0xa7, 0x84, 0x6a, 0x89, 0x36, + 0x99, 0xe8, 0x24, 0x94, 0x50, 0xad, 0x35, 0x33, 0xb9, 0x8e, 0x61, 0xb1, 0xc6, 0x9b, 0x8a, 0xd0, + 0x94, 0x50, 0xad, 0xfe, 0xb6, 0x9a, 0xc4, 0xff, 0x14, 0x72, 0x9f, 0xed, 0xf8, 0x74, 0x6d, 0xa5, + 0x3f, 0xfc, 0x94, 0x08, 0x18, 0x15, 0xc7, 0x05, 0x63, 0x58, 0x83, 0x3c, 0x4a, 0xd7, 0x7b, 0xac, + 0xbc, 0xc1, 0x06, 0x3b, 0x6f, 0xc0, 0xa7, 0x18, 0xbd, 0x26, 0x1c, 0xf4, 0xf9, 0x37, 0xc0, 0xe8, + 0xb7, 0xc2, 0x39, 0x10, 0xa2, 0x1d, 0x6e, 0x07, 0xd1, 0x02, 0x5b, 0x89, 0x76, 0xb3, 0x0a, 0x88, + 0x76, 0xf3, 0x77, 0x6c, 0xb0, 0x99, 0x64, 0xee, 0x4d, 0x43, 0xb4, 0x9b, 0xcd, 0xf9, 0x0f, 0xd1, + 0x78, 0x85, 0x46, 0x05, 0x9e, 0xe6, 0x1e, 0x15, 0x38, 0xc5, 0x35, 0xb5, 0x45, 0x05, 0xc6, 0xa1, + 0xf0, 0xcc, 0xc1, 0x68, 0x50, 0x9a, 0x0b, 0x27, 0x88, 0x8d, 0x92, 0x4e, 0xa9, 0xd0, 0xea, 0xfb, + 0x8c, 0x5b, 0x98, 0xf5, 0x22, 0x9a, 0x34, 0x6a, 0x0c, 0xe0, 0xd4, 0xbc, 0xc6, 0xd3, 0xaa, 0xb4, + 0x04, 0x2d, 0x12, 0x52, 0x10, 0x52, 0xe2, 0x74, 0x38, 0x32, 0x5a, 0x0e, 0xac, 0x46, 0xe1, 0xae, + 0x4c, 0x34, 0xd3, 0xd1, 0xe3, 0xfe, 0x20, 0xeb, 0x65, 0x0b, 0x59, 0x9f, 0x86, 0xb8, 0x65, 0x53, + 0xee, 0x52, 0x35, 0x32, 0x4d, 0x25, 0xce, 0x0a, 0xc7, 0xef, 0x26, 0x41, 0xbf, 0x23, 0x17, 0xcd, + 0x00, 0x95, 0xaf, 0x83, 0x08, 0xfe, 0x95, 0x1b, 0x11, 0xfc, 0xdc, 0x28, 0x44, 0x70, 0x4a, 0xbd, + 0xa7, 0x85, 0x2e, 0xfe, 0x33, 0xce, 0xa6, 0xbf, 0x2e, 0xfd, 0x82, 0x53, 0xa5, 0x33, 0x9c, 0x60, + 0x94, 0x8a, 0xdd, 0x9c, 0x36, 0x14, 0xd5, 0x5a, 0x2e, 0x81, 0x9e, 0x16, 0xb2, 0xc5, 0xc5, 0xf7, + 0x7c, 0x15, 0x1f, 0x68, 0x4e, 0x74, 0xed, 0x34, 0xe5, 0x31, 0xd8, 0xde, 0x4a, 0x7f, 0xa3, 0x7b, + 0xa2, 0xda, 0x91, 0x73, 0xd7, 0x23, 0xdb, 0x20, 0x87, 0x19, 0xe0, 0x5f, 0xe8, 0x9b, 0x1c, 0xfe, + 0x4a, 0x6b, 0x3e, 0x0d, 0xf4, 0x3f, 0xf1, 0xea, 0x3d, 0x70, 0x15, 0x18, 0x01, 0xad, 0xff, 0x8a, + 0xd6, 0x72, 0xc8, 0xcc, 0xe9, 0x30, 0xd4, 0x0d, 0x47, 0xae, 0x33, 0x13, 0xe4, 0x79, 0x3b, 0x78, + 0x25, 0xf6, 0xdd, 0xd5, 0xc4, 0xc9, 0xbe, 0x64, 0xdf, 0xa9, 0xe4, 0xd5, 0xa3, 0x5a, 0xf4, 0xcc, + 0xf5, 0xc8, 0x36, 0xaa, 0x6c, 0xe7, 0xff, 0x92, 0x43, 0xd3, 0x83, 0x0a, 0xf6, 0x9f, 0xb5, 0xc6, + 0xbb, 0x24, 0xf0, 0xa4, 0x72, 0xaa, 0xd4, 0xc1, 0x09, 0xee, 0x6d, 0xc4, 0xa6, 0xd8, 0xd5, 0x63, + 0x89, 0x03, 0x47, 0x48, 0x3c, 0x98, 0x9e, 0x73, 0x46, 0xea, 0x87, 0xde, 0x1b, 0x43, 0x6d, 0xb1, + 0xc1, 0x66, 0x32, 0x7d, 0x63, 0xad, 0x3a, 0x33, 0x70, 0xf6, 0x33, 0x5a, 0x12, 0x1b, 0xe8, 0x30, + 0x99, 0x1b, 0x4c, 0x8b, 0xeb, 0xab, 0x1f, 0xde, 0x17, 0x1b, 0xd8, 0x8f, 0xc5, 0x1b, 0xfb, 0xd8, + 0xfd, 0x8b, 0x1f, 0xba, 0x94, 0xd8, 0x7f, 0x3c, 0x7e, 0xa0, 0x45, 0x9f, 0xbd, 0xfb, 0x6c, 0xf8, + 0x61, 0x0e, 0x4d, 0xd9, 0xa4, 0x28, 0x8d, 0xa4, 0x18, 0xc2, 0xde, 0x11, 0x6d, 0x01, 0x91, 0x8b, + 0x39, 0xeb, 0xc5, 0x26, 0x32, 0x9b, 0xc1, 0x0e, 0x23, 0x9e, 0xf0, 0x20, 0x9c, 0x17, 0x39, 0x29, + 0x7c, 0x10, 0xfa, 0x7a, 0x86, 0x77, 0xc6, 0x06, 0xda, 0x47, 0xf6, 0x47, 0xe2, 0xfd, 0x5b, 0xe1, + 0xb0, 0xf4, 0x42, 0xbc, 0x7e, 0xf8, 0x09, 0xc9, 0x15, 0xc7, 0xba, 0x06, 0xe7, 0x4c, 0xf8, 0x97, + 0x98, 0xd4, 0x0c, 0xd9, 0x66, 0x6c, 0x0f, 0x47, 0x8e, 0x71, 0x86, 0x56, 0xa9, 0x63, 0x32, 0x29, + 0x90, 0xa7, 0x09, 0xee, 0x02, 0x89, 0x24, 0x6f, 0x7d, 0x9a, 0xcc, 0x2a, 0x78, 0x9a, 0xcc, 0xdf, + 0xf4, 0xb0, 0xd2, 0x3d, 0x4d, 0x66, 0xf3, 0x92, 0x4e, 0x4e, 0x95, 0xf6, 0x70, 0xa8, 0x85, 0x13, + 0x52, 0xdc, 0x3d, 0x71, 0x2d, 0x8c, 0x47, 0xcb, 0x13, 0x47, 0x07, 0xb4, 0xe6, 0x8b, 0xa6, 0x4d, + 0xe9, 0xf0, 0x3e, 0x13, 0xa5, 0x5e, 0x3d, 0x1c, 0xef, 0x69, 0xd5, 0x3a, 0xfb, 0xe9, 0x65, 0xd0, + 0xab, 0xe2, 0x87, 0x2e, 0x61, 0xd5, 0xa5, 0x3e, 0x0a, 0x44, 0x0b, 0xbb, 0x1e, 0xd9, 0x76, 0x8d, + 0x63, 0x6f, 0xe1, 0x35, 0x8e, 0xae, 0x1e, 0xcb, 0x59, 0x1c, 0x53, 0xf9, 0x49, 0xc8, 0x59, 0x52, + 0xac, 0xea, 0x1e, 0x97, 0xb3, 0x7c, 0x42, 0x43, 0x2c, 0xb8, 0xcb, 0x59, 0xea, 0x6e, 0x4a, 0xce, + 0x82, 0xb9, 0x78, 0x46, 0xce, 0x62, 0x31, 0x80, 0xa1, 0xcd, 0x9c, 0x32, 0x97, 0xc3, 0xdc, 0x18, + 0x84, 0x2e, 0x7e, 0x55, 0xda, 0x44, 0x84, 0x2e, 0xb5, 0x76, 0xa8, 0xed, 0xde, 0xc1, 0xca, 0x5d, + 0xe0, 0x03, 0xd7, 0x23, 0xdb, 0x48, 0x48, 0x51, 0xdb, 0xfd, 0x6e, 0x8d, 0xc4, 0x7b, 0x5a, 0x69, + 0xf8, 0xfd, 0xd8, 0x50, 0x77, 0x2c, 0x7a, 0x36, 0xb1, 0xff, 0xb8, 0xad, 0x2f, 0x11, 0xde, 0xfc, + 0x39, 0x47, 0x73, 0x58, 0x5b, 0x1e, 0xad, 0xcd, 0x6e, 0x8f, 0xd6, 0x1a, 0x55, 0x7a, 0xce, 0xfa, + 0x68, 0xcd, 0x67, 0x43, 0xb9, 0xea, 0x98, 0x75, 0xd7, 0x17, 0xda, 0x60, 0xb4, 0xb2, 0x1c, 0x8c, + 0xde, 0x69, 0xf2, 0xaa, 0x31, 0xbf, 0x68, 0x46, 0xa6, 0x79, 0xb7, 0x39, 0x89, 0xb3, 0x41, 0xc3, + 0x6d, 0xdb, 0x68, 0x42, 0x0a, 0xfd, 0xbb, 0x4c, 0x34, 0xcd, 0xda, 0xe9, 0x27, 0x4c, 0x07, 0x51, + 0x93, 0x1e, 0x3b, 0xd0, 0xdd, 0xed, 0x0b, 0x57, 0xf2, 0x9a, 0x2a, 0xad, 0x40, 0x15, 0x82, 0xeb, + 0x51, 0xdc, 0xac, 0x51, 0xd1, 0x67, 0x99, 0x10, 0xc4, 0x90, 0x89, 0x67, 0x67, 0x81, 0xd1, 0x3f, + 0x75, 0x06, 0x31, 0xbc, 0xb3, 0x52, 0xc1, 0x23, 0x1c, 0xca, 0x03, 0x79, 0xd9, 0x72, 0x5f, 0xbd, + 0x4e, 0xad, 0x00, 0x0d, 0xd6, 0xa4, 0x4a, 0x41, 0xc1, 0x52, 0x21, 0xae, 0x67, 0x7f, 0x19, 0x66, + 0xcc, 0x87, 0x2e, 0x15, 0x7b, 0x92, 0xdf, 0xed, 0xd3, 0x76, 0x45, 0x01, 0x26, 0xe2, 0x6d, 0xad, + 0x89, 0xe6, 0xb3, 0xa9, 0x04, 0x75, 0xf1, 0x0e, 0x55, 0x8b, 0x76, 0xce, 0x87, 0x0a, 0x9d, 0x54, + 0xc3, 0xbf, 0xb5, 0x9e, 0x73, 0x5a, 0x57, 0xc7, 0xc8, 0xb1, 0x4f, 0x8b, 0x64, 0xcb, 0x17, 0x4b, + 0x36, 0xa8, 0x52, 0x1d, 0x5a, 0x2f, 0xa4, 0xdb, 0x40, 0xb1, 0x8c, 0x84, 0x50, 0x64, 0x8e, 0x35, + 0xd1, 0xbd, 0x83, 0xd2, 0xd6, 0xc5, 0x1e, 0xa0, 0xe7, 0xc0, 0x16, 0x9d, 0xb9, 0xa5, 0x5a, 0xfb, + 0x2e, 0x2d, 0xda, 0x09, 0xa7, 0x57, 0xf8, 0x0f, 0x24, 0x98, 0xa2, 0xf3, 0x23, 0xf7, 0xc7, 0x05, + 0x5c, 0x69, 0xb1, 0xcd, 0x49, 0x73, 0x01, 0xc7, 0x62, 0x9f, 0x73, 0x37, 0xaf, 0xde, 0x1b, 0xaa, + 0x54, 0x85, 0x56, 0x0a, 0x69, 0x0f, 0xc3, 0xc0, 0xa1, 0x30, 0x90, 0x29, 0x33, 0x72, 0x8f, 0xbb, + 0x51, 0xf8, 0x37, 0x99, 0x90, 0xb6, 0xd8, 0x71, 0xf5, 0x16, 0x5a, 0x2c, 0x85, 0x46, 0x97, 0x87, + 0xbf, 0xe7, 0x14, 0xe0, 0x4b, 0x3f, 0xf8, 0xaa, 0xb2, 0x57, 0xb1, 0xcc, 0x66, 0xff, 0x73, 0x4b, + 0x02, 0xf7, 0x95, 0x6c, 0xc6, 0x42, 0x10, 0xdc, 0xe3, 0x43, 0x61, 0x32, 0x16, 0xba, 0x0c, 0x45, + 0x12, 0x50, 0x92, 0x57, 0x9f, 0x36, 0x2d, 0xd9, 0xcf, 0xa9, 0x52, 0x17, 0x87, 0xda, 0x39, 0xc1, + 0x75, 0x0f, 0xc5, 0x26, 0x38, 0x0a, 0x7a, 0xdd, 0xee, 0x90, 0x01, 0xdd, 0x5f, 0x65, 0x40, 0xa2, + 0xdf, 0x9f, 0xf7, 0x45, 0x2d, 0x29, 0x57, 0x25, 0x09, 0xbd, 0x2c, 0xb8, 0x6f, 0x85, 0xf1, 0x52, + 0x31, 0xcc, 0x81, 0xbb, 0x31, 0x5d, 0x62, 0x3c, 0x9a, 0x2c, 0xd5, 0xd5, 0x61, 0x0e, 0xca, 0x0c, + 0x0d, 0xe2, 0x78, 0x96, 0x24, 0x55, 0x9a, 0xc3, 0xc2, 0xfa, 0x14, 0x88, 0x7c, 0x4c, 0xe1, 0xdb, + 0x78, 0x76, 0xb8, 0x31, 0x3d, 0x3b, 0x95, 0x28, 0x5b, 0x07, 0x9a, 0x50, 0x41, 0x86, 0x27, 0x13, + 0xcc, 0xa7, 0x9f, 0x10, 0xa0, 0x44, 0x7c, 0xc4, 0x36, 0x30, 0x40, 0x6b, 0x65, 0x35, 0x8d, 0x70, + 0xa8, 0x72, 0x59, 0xb9, 0x5c, 0x01, 0x27, 0x43, 0x7b, 0xde, 0x87, 0xa6, 0xf8, 0xfc, 0xbe, 0xf0, + 0xca, 0xc0, 0x06, 0x9f, 0xbf, 0xda, 0x1b, 0x0a, 0x7d, 0x18, 0x08, 0xd6, 0x91, 0x1b, 0x84, 0x7d, + 0xb6, 0x9c, 0xb5, 0xe2, 0x63, 0x23, 0xbb, 0xda, 0x93, 0x9f, 0x35, 0xeb, 0x6c, 0x64, 0xf7, 0x0e, + 0x22, 0x69, 0x27, 0x31, 0xe8, 0xb5, 0xce, 0x7e, 0x92, 0x20, 0xc0, 0xd9, 0x8f, 0x0f, 0xba, 0xe5, + 0xbb, 0xa9, 0x56, 0xa5, 0x55, 0x56, 0x8a, 0x72, 0x19, 0xac, 0x80, 0x30, 0xf3, 0x18, 0xa6, 0x21, + 0xb4, 0x3d, 0x84, 0x70, 0xa1, 0x27, 0x72, 0x63, 0xa8, 0x8d, 0x94, 0xe3, 0xdb, 0x02, 0x57, 0xb1, + 0xb2, 0xdc, 0x2a, 0x1f, 0xb9, 0xc6, 0x39, 0xac, 0x1b, 0xb2, 0x31, 0xb8, 0x7d, 0xce, 0xa9, 0xd2, + 0x69, 0xce, 0x61, 0xdf, 0xa0, 0x72, 0x3a, 0x0b, 0xaa, 0x8f, 0x76, 0xda, 0x16, 0x69, 0x99, 0x18, + 0xfe, 0x1e, 0xee, 0xc7, 0x6a, 0x32, 0x9d, 0xf6, 0x76, 0x6b, 0x08, 0xdc, 0x62, 0x6c, 0xa8, 0x1b, + 0x9e, 0x4c, 0x72, 0x64, 0x80, 0xbb, 0xb1, 0x04, 0xd7, 0x10, 0x95, 0x03, 0x78, 0xd9, 0xbe, 0xa1, + 0x5d, 0xb9, 0x04, 0x52, 0xf6, 0xd8, 0x40, 0x94, 0x64, 0x76, 0xd0, 0x09, 0x75, 0xdb, 0x24, 0x2d, + 0x0c, 0x7a, 0xce, 0xd8, 0x18, 0xf4, 0x69, 0x0c, 0x83, 0xbe, 0x06, 0x4d, 0x62, 0xb5, 0x4e, 0x34, + 0xb7, 0x2a, 0x76, 0xee, 0xb2, 0x55, 0x89, 0x33, 0x5d, 0x73, 0xe9, 0x57, 0x96, 0xcb, 0xb6, 0x86, + 0x7c, 0x17, 0x87, 0x26, 0xf9, 0x42, 0x15, 0xc4, 0x92, 0x47, 0x3f, 0x25, 0xac, 0x2a, 0xcb, 0x05, + 0x67, 0xb8, 0xc7, 0x48, 0x4e, 0xad, 0xc3, 0xfd, 0xd4, 0x82, 0x07, 0xc6, 0x9b, 0x4f, 0x4d, 0x74, + 0x8a, 0xc4, 0x65, 0xb1, 0x81, 0xdd, 0xf1, 0x4f, 0x2e, 0xd9, 0x5a, 0x8c, 0xf4, 0x44, 0x60, 0x47, + 0x74, 0x92, 0xa9, 0xd8, 0x13, 0x1b, 0xd8, 0x0f, 0x0a, 0x08, 0x98, 0x18, 0x73, 0xd8, 0xb2, 0xed, + 0xfb, 0x7c, 0x2b, 0x87, 0xb2, 0xeb, 0x75, 0x10, 0xc4, 0xf6, 0x73, 0x13, 0xc4, 0x47, 0xdc, 0x30, + 0x06, 0x86, 0x51, 0x6c, 0x5d, 0xb3, 0x46, 0x95, 0xde, 0x10, 0xa0, 0x83, 0xf8, 0x2a, 0x4c, 0x85, + 0xcc, 0x00, 0xc3, 0x3b, 0xa8, 0x7f, 0xe2, 0x87, 0xc8, 0x11, 0xb1, 0x79, 0x80, 0xf4, 0x23, 0x37, + 0xdc, 0xa5, 0xb4, 0xce, 0x7e, 0xad, 0x79, 0x48, 0xeb, 0xbb, 0xa2, 0x9d, 0xda, 0x91, 0xe8, 0xda, + 0x29, 0xc3, 0x80, 0x25, 0x57, 0x39, 0x55, 0x1a, 0xe4, 0xd0, 0x00, 0x27, 0xd8, 0xd1, 0x85, 0xd8, + 0xc5, 0x25, 0x06, 0x8f, 0xc4, 0xdb, 0x76, 0x69, 0x7d, 0xdd, 0xe6, 0xb5, 0xc5, 0x69, 0x1c, 0xe0, + 0x26, 0xdc, 0x18, 0x6a, 0xbb, 0x31, 0xb4, 0x35, 0x7e, 0xf1, 0x5c, 0x7c, 0x47, 0xa7, 0xfe, 0x87, + 0x71, 0xc1, 0x41, 0xdc, 0x43, 0xdc, 0x60, 0x0f, 0xf7, 0x27, 0x9b, 0xbf, 0x4b, 0xf6, 0xf5, 0xc7, + 0xa2, 0x7b, 0x6b, 0x37, 0x37, 0x50, 0x31, 0x1c, 0x3b, 0x75, 0x98, 0x65, 0x72, 0xfb, 0x30, 0xf1, + 0xd6, 0xfb, 0xf2, 0x93, 0xd8, 0xe0, 0xe5, 0x64, 0xdf, 0xc9, 0xe4, 0x37, 0x57, 0xc0, 0x1c, 0x8b, + 0x8e, 0x69, 0x35, 0x5d, 0x01, 0x4c, 0x51, 0xb8, 0x3b, 0x0b, 0xe5, 0x9b, 0x53, 0xbf, 0x3f, 0x5e, + 0x8c, 0x55, 0x16, 0xde, 0xca, 0x9d, 0xed, 0xb6, 0xb0, 0x55, 0x00, 0xe3, 0x97, 0x07, 0xb5, 0xdd, + 0x27, 0x58, 0x76, 0xf9, 0xee, 0xd3, 0x76, 0x6d, 0x9c, 0x2a, 0xb5, 0x70, 0xa8, 0x99, 0x13, 0x1c, + 0x87, 0x20, 0xd6, 0x6a, 0x9f, 0x7e, 0xa2, 0xed, 0x3e, 0xc1, 0x22, 0x7c, 0xd8, 0x0d, 0x7c, 0xe2, + 0xc4, 0x12, 0x4c, 0xeb, 0x6c, 0x1f, 0x39, 0xd3, 0x02, 0xe2, 0x2f, 0x9d, 0x49, 0xdf, 0x7d, 0x4e, + 0x6b, 0x3b, 0x08, 0x71, 0xf0, 0xf5, 0x97, 0x91, 0x59, 0x2c, 0x4e, 0x55, 0x72, 0x35, 0x16, 0xed, + 0x88, 0x1f, 0x3f, 0x3d, 0x72, 0xb8, 0x19, 0x12, 0x40, 0xd0, 0x97, 0x0f, 0x38, 0xb3, 0xbf, 0xc9, + 0x46, 0x73, 0x4a, 0xbd, 0xe1, 0xda, 0x8d, 0x96, 0xd8, 0x8f, 0x96, 0x57, 0xf0, 0x1d, 0xe7, 0x2b, + 0xb8, 0xcc, 0x1e, 0xfb, 0x0c, 0x27, 0xb4, 0xb9, 0x72, 0x2b, 0x4f, 0xe0, 0x6a, 0x34, 0x0e, 0xa7, + 0x21, 0xaa, 0x0e, 0x11, 0x40, 0xc2, 0x09, 0x2c, 0x8c, 0x32, 0xf1, 0x49, 0x78, 0x1a, 0x60, 0xfc, + 0x44, 0xf7, 0x8e, 0xca, 0x6a, 0xa0, 0x70, 0x8b, 0xc1, 0xc1, 0xe4, 0xc9, 0xe2, 0x27, 0x47, 0xba, + 0xf7, 0x6b, 0x43, 0x11, 0xd9, 0xe8, 0xc1, 0xfb, 0xd1, 0xa4, 0xcd, 0xbe, 0x60, 0xb8, 0x09, 0x70, + 0x47, 0x65, 0x79, 0x88, 0xbc, 0x82, 0xcb, 0x55, 0xa9, 0x4c, 0xb0, 0x55, 0x89, 0x4b, 0x6c, 0xc3, + 0x5b, 0xf2, 0x15, 0xb8, 0x7f, 0xc8, 0x36, 0x84, 0x05, 0x89, 0x67, 0xdd, 0x3c, 0x12, 0xef, 0xe7, + 0x10, 0xaa, 0xc3, 0x7b, 0x8f, 0x23, 0x36, 0x66, 0xb3, 0x56, 0x97, 0x4c, 0x85, 0xf8, 0x7b, 0x22, + 0x13, 0x32, 0x42, 0x36, 0x06, 0x95, 0xb0, 0xd7, 0xe7, 0x9f, 0x0f, 0xd2, 0x65, 0x16, 0x62, 0x40, + 0xb4, 0x1c, 0x3f, 0xdc, 0x0f, 0xb2, 0xe4, 0xd8, 0xc0, 0x60, 0xbc, 0x27, 0x5a, 0x74, 0x63, 0xa8, + 0x4d, 0x87, 0x6a, 0x9f, 0xdf, 0x1b, 0x56, 0xe6, 0x6b, 0x9d, 0x5f, 0x40, 0x22, 0xc3, 0x78, 0x5b, + 0xeb, 0xc8, 0xae, 0x4e, 0x82, 0x3a, 0x0c, 0xa4, 0x51, 0xc4, 0x3e, 0x92, 0x72, 0xc5, 0x1a, 0xa9, + 0xb2, 0x4a, 0x66, 0x66, 0x52, 0xf2, 0x09, 0xa7, 0x4a, 0xdd, 0x1c, 0x3a, 0xc4, 0x09, 0xa3, 0x40, + 0x8e, 0xe8, 0x8d, 0xb7, 0x5e, 0xd1, 0xc9, 0x55, 0x9c, 0xb0, 0x81, 0xdc, 0x0a, 0x8c, 0x1e, 0xc9, + 0x93, 0x01, 0x1a, 0x0c, 0x23, 0x69, 0xdf, 0x1e, 0x6d, 0xf7, 0x39, 0x5b, 0x7a, 0x87, 0xeb, 0x91, + 0xad, 0x46, 0x0e, 0xa1, 0xeb, 0x91, 0xad, 0xb6, 0xf7, 0x24, 0xd1, 0xdb, 0x5a, 0xe4, 0x8a, 0xe0, + 0x2e, 0x67, 0xa1, 0x47, 0x53, 0xce, 0xec, 0xfe, 0xc0, 0x77, 0xbf, 0xb2, 0x50, 0xc8, 0x0e, 0xac, + 0x84, 0x57, 0x87, 0x17, 0x54, 0x83, 0x33, 0x40, 0x59, 0x71, 0x1f, 0x1e, 0xd0, 0xd0, 0x89, 0xe8, + 0x9b, 0x49, 0x06, 0xbf, 0xeb, 0xb8, 0xcf, 0x84, 0x9c, 0xd1, 0xce, 0x47, 0x7c, 0x9f, 0x05, 0x9d, + 0x54, 0xa8, 0x90, 0x6c, 0xdd, 0xd1, 0x01, 0x2d, 0xba, 0x9f, 0x6d, 0x49, 0xf1, 0xe0, 0x8d, 0xa1, + 0x36, 0xa2, 0xa9, 0x62, 0x76, 0x83, 0x50, 0x30, 0x2d, 0x5d, 0xda, 0xee, 0xe3, 0x36, 0x6c, 0xf8, + 0xdf, 0x70, 0x28, 0xdf, 0xbe, 0xb7, 0x7c, 0x81, 0x89, 0xa1, 0x38, 0x9d, 0x4c, 0x37, 0x51, 0x4d, + 0x01, 0x1a, 0x17, 0x6a, 0xaa, 0xad, 0x55, 0x42, 0x21, 0xc3, 0xe7, 0x94, 0xfc, 0xd4, 0x6b, 0x0c, + 0x70, 0xc1, 0xd8, 0xc7, 0x04, 0x86, 0x19, 0x34, 0xad, 0x4a, 0x16, 0xd8, 0x75, 0x92, 0x14, 0x28, + 0x1e, 0x2b, 0x51, 0x8d, 0xf1, 0x80, 0x95, 0x04, 0x9e, 0x67, 0xb7, 0xd0, 0xc6, 0x24, 0xa3, 0xcd, + 0x20, 0xba, 0xf0, 0xe4, 0x78, 0xc3, 0xfb, 0xf6, 0x0e, 0x22, 0xf1, 0x6a, 0x93, 0x8f, 0xa1, 0x01, + 0x67, 0x09, 0x1f, 0x33, 0x56, 0x04, 0x8e, 0xad, 0x05, 0xf3, 0x29, 0x3b, 0xf3, 0xb9, 0x15, 0x2d, + 0x02, 0x0a, 0x6f, 0xe1, 0x54, 0x69, 0x87, 0x15, 0x2d, 0x6e, 0xb6, 0xa1, 0x45, 0xc0, 0x57, 0x16, + 0xb4, 0x98, 0x12, 0x21, 0xae, 0xa9, 0x90, 0x57, 0x55, 0x56, 0x49, 0x6b, 0x2a, 0x7e, 0x18, 0x42, + 0xe4, 0xff, 0x68, 0xaa, 0x6e, 0x41, 0x39, 0x58, 0xa7, 0x4a, 0x5e, 0x53, 0x71, 0xbb, 0x2e, 0x36, + 0xd0, 0x9e, 0xe8, 0x3b, 0x49, 0x1e, 0x95, 0x53, 0x3b, 0x62, 0xd1, 0x8e, 0xd8, 0xe0, 0x60, 0x6c, + 0xf8, 0x00, 0x3c, 0xc8, 0x23, 0xdb, 0x87, 0x6d, 0x8a, 0x5d, 0xa2, 0x0c, 0xc0, 0xb9, 0xbb, 0xb4, + 0x96, 0x6e, 0x6a, 0x03, 0x75, 0x63, 0xa8, 0xad, 0x2a, 0x10, 0x96, 0x15, 0x6f, 0xdd, 0x96, 0x44, + 0x6f, 0xab, 0xa9, 0x73, 0xbd, 0x05, 0x3d, 0x1f, 0xfb, 0x02, 0x7d, 0xcd, 0xa5, 0x50, 0xf4, 0x11, + 0xd3, 0x24, 0xbb, 0xaa, 0x2f, 0x44, 0x0d, 0x8b, 0x0c, 0x0e, 0x8a, 0xf2, 0x3a, 0x44, 0x18, 0xca, + 0x6a, 0x6b, 0x09, 0x90, 0x2c, 0x20, 0x48, 0x25, 0xde, 0x1a, 0x81, 0xfc, 0x37, 0x94, 0x8b, 0x07, + 0x6a, 0x36, 0x36, 0xd4, 0x9d, 0x3c, 0x7b, 0x46, 0xeb, 0xdc, 0x0b, 0x5b, 0x43, 0x09, 0x1b, 0xd0, + 0x17, 0x2e, 0xb4, 0x2b, 0x0c, 0x7f, 0x24, 0xde, 0xe7, 0x5d, 0xeb, 0x25, 0xcc, 0x35, 0xd9, 0x67, + 0x0b, 0x67, 0x5b, 0x44, 0xd0, 0xaa, 0x83, 0xbf, 0x81, 0xef, 0x50, 0x2d, 0xb4, 0x9d, 0x89, 0x75, + 0x61, 0xad, 0xc6, 0xdf, 0x3c, 0x6b, 0xb5, 0xe7, 0x36, 0xb2, 0x56, 0x25, 0x21, 0x55, 0x6a, 0x44, + 0x7e, 0xc1, 0x05, 0x65, 0x88, 0xe5, 0x44, 0x8e, 0x8c, 0x6f, 0x2e, 0x40, 0x10, 0x3e, 0xd8, 0x0e, + 0x78, 0xc3, 0xa9, 0x6e, 0x9e, 0x60, 0x55, 0x5c, 0x68, 0xc8, 0x27, 0xe8, 0x56, 0xbb, 0x3e, 0xd0, + 0x3b, 0xb3, 0x0c, 0xaf, 0xfa, 0x9f, 0x01, 0x13, 0x02, 0xdb, 0x73, 0x6f, 0x31, 0x21, 0xcd, 0x9c, + 0x2a, 0x6d, 0xe5, 0xd0, 0x9f, 0x0a, 0x6e, 0xc7, 0x20, 0xbe, 0x35, 0x96, 0x57, 0xf7, 0xb6, 0xbc, + 0xb7, 0xbb, 0x33, 0xd1, 0xcc, 0x55, 0x01, 0x62, 0x78, 0xb1, 0x26, 0x60, 0x11, 0x4c, 0xaf, 0x73, + 0xbe, 0x58, 0x4b, 0x53, 0x47, 0x5e, 0xd7, 0xdf, 0xaa, 0xec, 0x31, 0xbd, 0x55, 0x35, 0x56, 0x99, + 0xdb, 0x4b, 0xaa, 0xb4, 0xd0, 0x78, 0xab, 0x1e, 0xd7, 0xff, 0xf1, 0x18, 0x2f, 0xd4, 0x8d, 0xa1, + 0xb6, 0x78, 0x4f, 0x44, 0x3b, 0x75, 0x16, 0x98, 0xed, 0xe4, 0xa5, 0xe6, 0xe4, 0xd5, 0x5d, 0x4b, + 0x16, 0x2f, 0xfe, 0xbe, 0x74, 0xbc, 0xca, 0xe5, 0xe4, 0x72, 0xf9, 0x75, 0xa6, 0xf4, 0x6d, 0xbd, + 0x15, 0x71, 0xc0, 0x73, 0xf5, 0x8a, 0x2a, 0x3d, 0x66, 0x45, 0x1c, 0xd3, 0x28, 0x22, 0xb2, 0x64, + 0x81, 0x1e, 0x9b, 0x42, 0x95, 0x44, 0xe9, 0x4f, 0xb5, 0x61, 0x4c, 0x8c, 0xe4, 0xd8, 0x40, 0x2f, + 0x39, 0x98, 0xb3, 0x83, 0x54, 0xae, 0x15, 0xbf, 0x70, 0x82, 0x09, 0x26, 0xed, 0x72, 0x2b, 0xff, + 0xcf, 0x4c, 0x54, 0xe0, 0x1c, 0xfb, 0xfe, 0xb8, 0x9a, 0xef, 0x8c, 0xe1, 0x6a, 0x82, 0x81, 0x31, + 0xbe, 0x9a, 0x4f, 0x6a, 0xe7, 0x77, 0xa6, 0xda, 0x21, 0xab, 0x5f, 0xc4, 0xdd, 0xbe, 0xa9, 0x24, + 0x81, 0x70, 0xca, 0x83, 0x49, 0xbb, 0x14, 0x76, 0xab, 0x9c, 0x12, 0xef, 0x7f, 0xc9, 0x40, 0xb3, + 0x65, 0xa5, 0xc1, 0x18, 0x78, 0x79, 0x30, 0xd0, 0x70, 0x47, 0x2e, 0x60, 0x85, 0xf5, 0x02, 0x2e, + 0xd2, 0x31, 0x26, 0xb9, 0x80, 0x33, 0x09, 0xb1, 0x88, 0xa9, 0x37, 0x86, 0x58, 0xbc, 0x5b, 0x57, + 0x8e, 0x84, 0xaa, 0x4c, 0xb7, 0x4d, 0xe2, 0x1c, 0xfa, 0x22, 0x9a, 0x5b, 0x8f, 0xe7, 0x9f, 0xe6, + 0x01, 0xfc, 0x2f, 0x99, 0xe8, 0x61, 0xf7, 0x31, 0xef, 0x8f, 0xeb, 0xb6, 0x6e, 0x0c, 0xd7, 0x8d, + 0xcd, 0x3c, 0x10, 0x1b, 0xec, 0xb0, 0x6d, 0xce, 0x3d, 0x77, 0xd1, 0x8c, 0xdc, 0x75, 0xe9, 0x8e, + 0xc5, 0x48, 0xb2, 0x9b, 0x18, 0xdc, 0xc1, 0x1e, 0x31, 0x7d, 0x22, 0xd9, 0xb7, 0x0f, 0x1a, 0xb0, + 0x6f, 0x5f, 0xe1, 0x3f, 0x66, 0xa2, 0x82, 0xb2, 0x7a, 0xc5, 0xeb, 0x27, 0x66, 0x7a, 0x77, 0xe4, + 0xb6, 0xbd, 0x6e, 0xbd, 0x6d, 0xcf, 0xb0, 0x2a, 0x26, 0xb8, 0x6d, 0x60, 0x97, 0xa8, 0x1d, 0xfd, + 0x24, 0xbe, 0xff, 0xd2, 0xdd, 0xbf, 0x73, 0x3f, 0x50, 0x9e, 0x56, 0xf2, 0xa1, 0x2a, 0x85, 0x51, + 0x50, 0x48, 0xb9, 0xd1, 0x62, 0x11, 0x0b, 0x8c, 0xb1, 0x81, 0x5e, 0x76, 0xf9, 0x06, 0x11, 0xeb, + 0x76, 0x75, 0xad, 0x86, 0x82, 0xb0, 0x21, 0xac, 0xc1, 0xe0, 0xde, 0x2c, 0xf4, 0x90, 0xcb, 0x47, + 0xef, 0x8f, 0x0b, 0xfd, 0xda, 0x18, 0x2e, 0xb4, 0x25, 0x12, 0x11, 0x0c, 0xd2, 0xbd, 0x03, 0x76, + 0xef, 0x5e, 0xb9, 0xc4, 0xed, 0x9c, 0x2a, 0xb5, 0x72, 0x68, 0x27, 0x27, 0xa4, 0x3e, 0x0a, 0xd1, + 0xc7, 0x9a, 0x4c, 0x9b, 0x77, 0x77, 0xff, 0x85, 0x58, 0xb4, 0x23, 0xd9, 0x7f, 0x1a, 0x28, 0xa4, + 0xd8, 0x40, 0x54, 0x1b, 0xda, 0x16, 0xef, 0x3d, 0x4d, 0x43, 0xe2, 0xe8, 0x55, 0x40, 0xf9, 0x0e, + 0x36, 0x27, 0xb7, 0x0f, 0xc3, 0x5d, 0x67, 0x97, 0x4f, 0xee, 0x7a, 0xef, 0x67, 0xda, 0xc0, 0x00, + 0xb8, 0xa7, 0x15, 0xfe, 0xa7, 0x4c, 0x34, 0xcb, 0x31, 0x91, 0x75, 0xe2, 0x8f, 0x7d, 0xe7, 0xdf, + 0xb4, 0x8a, 0x63, 0x4a, 0x75, 0x06, 0x96, 0xdc, 0xf9, 0x45, 0x69, 0xef, 0x3c, 0x16, 0x95, 0x5c, + 0x4d, 0xec, 0x3f, 0xf7, 0x64, 0xf1, 0x93, 0x5a, 0xcb, 0x4e, 0xad, 0xf5, 0x6b, 0x9b, 0x58, 0xe6, + 0x3e, 0x40, 0x00, 0x5b, 0x54, 0x69, 0x33, 0x0a, 0x0b, 0x69, 0xf6, 0xfd, 0x47, 0x43, 0x01, 0x07, + 0xb2, 0xd0, 0x6c, 0xd7, 0xcf, 0x3e, 0x40, 0x02, 0x77, 0x10, 0x09, 0x98, 0xb6, 0xe4, 0xe9, 0x0e, + 0xe3, 0x4e, 0xa2, 0x81, 0xbf, 0xce, 0x80, 0x94, 0x53, 0xee, 0x58, 0xe0, 0x2e, 0x19, 0xe8, 0xf2, + 0x1f, 0xa3, 0x9c, 0x40, 0x53, 0xb8, 0xb1, 0x29, 0x4c, 0x80, 0x6b, 0xbd, 0x2a, 0xbd, 0x27, 0x90, + 0x22, 0x71, 0x2d, 0x98, 0x33, 0x9a, 0x16, 0x4b, 0x9d, 0xfd, 0x23, 0x91, 0x56, 0x2d, 0x32, 0xe4, + 0xf9, 0xd0, 0x57, 0xa7, 0xcc, 0xd7, 0x9a, 0xcf, 0x8d, 0x6c, 0x3f, 0x07, 0xb5, 0x45, 0xc5, 0x9e, + 0xf5, 0xde, 0x90, 0xaf, 0x76, 0xbe, 0x76, 0x3c, 0x1a, 0xef, 0xf9, 0x8a, 0x14, 0x9a, 0x49, 0xf2, + 0x99, 0x52, 0x99, 0x0c, 0x5f, 0xf2, 0x82, 0x2a, 0x2d, 0x45, 0xcf, 0x0a, 0x33, 0xed, 0xbb, 0x92, + 0xca, 0x40, 0x98, 0xd5, 0xc8, 0x15, 0xfe, 0x6f, 0x99, 0x68, 0x96, 0xdb, 0x76, 0xde, 0x1f, 0xb7, + 0x6c, 0xb5, 0x45, 0xb5, 0xf3, 0x48, 0x4a, 0xe3, 0x27, 0x9c, 0xf4, 0x19, 0x3b, 0x2c, 0xc2, 0x75, + 0x9b, 0x82, 0xd1, 0x8d, 0x33, 0x5d, 0xd7, 0xdd, 0xbc, 0x6a, 0x84, 0x3f, 0x4a, 0x73, 0x1a, 0xe2, + 0xe3, 0x44, 0x1d, 0xf5, 0xe9, 0x97, 0x26, 0xed, 0x6c, 0xb8, 0x65, 0xe8, 0x2b, 0xb2, 0x19, 0x2c, + 0x82, 0x5c, 0x68, 0xdf, 0x04, 0x34, 0xd1, 0xb2, 0x11, 0xfc, 0x52, 0xf0, 0xf1, 0xa5, 0xf7, 0x03, + 0x9f, 0x11, 0x29, 0x12, 0xa7, 0x12, 0x71, 0x53, 0x74, 0xaf, 0x8f, 0xf8, 0xbe, 0x54, 0x96, 0xcb, + 0xa4, 0x92, 0x7f, 0x1e, 0x8d, 0xf3, 0xf9, 0xfd, 0x4a, 0xb0, 0xb2, 0xda, 0xcc, 0xdf, 0xf7, 0xb0, + 0x60, 0x94, 0x89, 0x53, 0x08, 0x68, 0xed, 0x6c, 0x4e, 0x0c, 0xef, 0x8d, 0x0d, 0x0c, 0x56, 0x56, + 0xcb, 0x46, 0x1d, 0xff, 0x36, 0xca, 0x33, 0x06, 0xc4, 0x0a, 0x97, 0x4c, 0x26, 0x2d, 0x3d, 0x5b, + 0x21, 0xce, 0x8b, 0xf7, 0x44, 0xb5, 0x4f, 0xf6, 0x90, 0xc3, 0x31, 0x42, 0x1f, 0xc2, 0xb5, 0x49, + 0x6e, 0x1f, 0x26, 0xa6, 0x54, 0x96, 0x3e, 0xfc, 0x2f, 0x50, 0x66, 0x59, 0xf5, 0x5a, 0x8c, 0x6c, + 0x27, 0x02, 0xdc, 0xe8, 0xbf, 0x0d, 0xb3, 0xcb, 0xb2, 0xea, 0xb5, 0x04, 0xd6, 0xf4, 0x52, 0x7e, + 0x21, 0xca, 0x6c, 0x50, 0x1a, 0x48, 0xda, 0x3d, 0x0c, 0x14, 0xfa, 0x6f, 0xc3, 0xef, 0x52, 0xdb, + 0xd9, 0xac, 0xf5, 0x1e, 0x36, 0xda, 0x37, 0x28, 0x0d, 0xfc, 0x52, 0x94, 0xb9, 0xa2, 0x7a, 0xad, + 0x99, 0x6a, 0xef, 0x31, 0x41, 0xff, 0x2d, 0x3e, 0x0c, 0xed, 0x57, 0x18, 0x83, 0xb3, 0x33, 0x5c, + 0x2c, 0xeb, 0x4d, 0xf8, 0x4e, 0x0e, 0xe5, 0x84, 0xb0, 0xe2, 0x8b, 0x48, 0xd4, 0x75, 0x82, 0x5a, + 0x20, 0x45, 0xe2, 0x07, 0xe4, 0x10, 0xb1, 0xe6, 0xc2, 0x18, 0xa3, 0x25, 0x7e, 0xe2, 0x4a, 0xbc, + 0xbd, 0xcf, 0x12, 0x15, 0xc0, 0x88, 0x90, 0x7e, 0x63, 0xa8, 0xf5, 0xc6, 0x50, 0x1b, 0xb1, 0x81, + 0x2a, 0xf6, 0x94, 0x57, 0xac, 0xac, 0x58, 0x53, 0x81, 0xff, 0x2c, 0x93, 0x2b, 0xa4, 0x35, 0xf8, + 0xaf, 0xe5, 0x52, 0xe5, 0xca, 0x8a, 0xf2, 0x62, 0x4f, 0x65, 0x55, 0xe5, 0x9a, 0x4a, 0x69, 0x65, + 0xe5, 0x5b, 0xd2, 0x9a, 0xca, 0xd5, 0x55, 0x32, 0xf9, 0x26, 0x2f, 0xa1, 0x9c, 0x8f, 0x03, 0x7e, + 0x85, 0xca, 0xe3, 0x8b, 0x74, 0x16, 0x26, 0x4b, 0x2f, 0x32, 0x6c, 0x38, 0xb5, 0xce, 0xfe, 0xc4, + 0xfe, 0x73, 0x5a, 0x5b, 0xd4, 0xbe, 0xe3, 0xa4, 0x23, 0xff, 0x7b, 0x2b, 0x8a, 0x85, 0x28, 0x5c, + 0x6f, 0xa9, 0xd2, 0x2f, 0xad, 0x28, 0xf6, 0x55, 0x42, 0x14, 0x18, 0xc9, 0xce, 0x59, 0x8c, 0x8b, + 0x6d, 0xe2, 0xe8, 0xc8, 0xf3, 0x63, 0x83, 0xcd, 0x86, 0x66, 0x5a, 0x1b, 0x56, 0xb5, 0x0b, 0x9f, + 0xc4, 0xa2, 0x1d, 0x74, 0xa8, 0x22, 0x2b, 0xa2, 0x5d, 0xce, 0x92, 0x79, 0xc8, 0x4c, 0x47, 0xc7, + 0x90, 0x79, 0x05, 0xb6, 0x2f, 0xd3, 0x04, 0x6f, 0x2c, 0x59, 0xb7, 0x04, 0x65, 0xae, 0xab, 0x2e, + 0x23, 0x61, 0xb9, 0x30, 0x14, 0xeb, 0xbf, 0x8d, 0x88, 0x04, 0xb4, 0xef, 0xba, 0xea, 0x32, 0x4f, + 0x65, 0xb9, 0xac, 0xd7, 0xf1, 0x6f, 0x53, 0x63, 0xda, 0x3c, 0x23, 0xe6, 0xee, 0x2b, 0xd4, 0x98, + 0xf6, 0x59, 0xb6, 0x23, 0x98, 0xd1, 0x9a, 0xda, 0xa7, 0x2b, 0x57, 0xb5, 0xcb, 0xfa, 0x83, 0x18, + 0xbf, 0x7c, 0x41, 0xeb, 0xb9, 0xa8, 0x6f, 0xec, 0xee, 0x13, 0xda, 0xe5, 0x4f, 0x12, 0xbd, 0xad, + 0xd4, 0xc8, 0xb6, 0x0a, 0xe5, 0x34, 0x7a, 0x43, 0xa1, 0x0f, 0xeb, 0x88, 0x3b, 0x3c, 0x84, 0x49, + 0x83, 0x22, 0xb1, 0xc8, 0xe6, 0xc0, 0x6f, 0x58, 0x16, 0x02, 0xfd, 0x09, 0x66, 0x51, 0xc9, 0xb3, + 0x9f, 0x69, 0xfd, 0x3b, 0x65, 0xd2, 0x85, 0x7f, 0x17, 0xe1, 0x53, 0xc5, 0x8e, 0xf1, 0x13, 0x4b, + 0x2b, 0x55, 0x69, 0xb9, 0x40, 0x0e, 0xd0, 0x60, 0xbc, 0xe9, 0x41, 0x43, 0x6e, 0x4f, 0xe6, 0x40, + 0x5e, 0xf0, 0xd0, 0x70, 0x9f, 0x20, 0xa8, 0x06, 0x3a, 0x36, 0x16, 0xed, 0x28, 0x93, 0x64, 0x3c, + 0x2c, 0x2f, 0xa1, 0xdc, 0x3a, 0x65, 0xb3, 0x4f, 0x47, 0x0e, 0xc4, 0xa3, 0xfd, 0x71, 0x55, 0x2a, + 0x14, 0x68, 0xa1, 0x38, 0xa3, 0x4c, 0xf2, 0x18, 0x57, 0x34, 0xd9, 0xf7, 0x9d, 0x76, 0x6a, 0x57, + 0x65, 0xb9, 0xd6, 0x79, 0x59, 0xa6, 0x2d, 0xf8, 0xdf, 0x9b, 0x08, 0x41, 0x0e, 0xd0, 0x10, 0xe8, + 0x6f, 0xaa, 0xd2, 0x5a, 0xc1, 0x52, 0x21, 0x56, 0x10, 0xb2, 0xe2, 0xac, 0x9a, 0x6c, 0xd5, 0xf1, + 0xc0, 0x2a, 0xa9, 0x66, 0x4d, 0x85, 0x5c, 0xec, 0xf9, 0xe5, 0x6a, 0xf9, 0x75, 0xfd, 0xdf, 0x8a, + 0x35, 0x65, 0xe5, 0xc5, 0x1e, 0x28, 0x7d, 0x0f, 0xff, 0x90, 0x56, 0xae, 0x34, 0xac, 0xf4, 0x63, + 0x03, 0x51, 0x68, 0x27, 0x5b, 0x06, 0xe5, 0xff, 0x88, 0x26, 0x36, 0xf9, 0x6b, 0x6a, 0x37, 0x2a, + 0x75, 0x4d, 0xf5, 0x38, 0x0e, 0xea, 0x14, 0xbc, 0x51, 0xf8, 0xf3, 0xd6, 0x1a, 0xb1, 0x3c, 0x79, + 0x7e, 0xbb, 0x16, 0x3d, 0x03, 0xf7, 0xd4, 0x7c, 0x8a, 0x23, 0x43, 0x8b, 0x93, 0x27, 0xcf, 0x25, + 0x4e, 0x45, 0xb5, 0xce, 0x6d, 0xb1, 0x81, 0x0e, 0x68, 0x74, 0x63, 0xa8, 0x6d, 0x09, 0x94, 0xe2, + 0xa8, 0xa7, 0x66, 0x85, 0x6c, 0x1d, 0xb4, 0xf0, 0x5a, 0x26, 0xa4, 0x71, 0xbd, 0x1f, 0x19, 0xdc, + 0xe5, 0x96, 0x57, 0x77, 0x9a, 0xdb, 0xab, 0x7b, 0xaf, 0x3f, 0xb6, 0x6b, 0x54, 0xe9, 0x0d, 0xb4, + 0x5a, 0x48, 0x79, 0x04, 0xb7, 0xf6, 0xd4, 0xfe, 0xdb, 0x4c, 0xf4, 0x30, 0x38, 0x9e, 0x43, 0x62, + 0x06, 0x9f, 0x7f, 0x95, 0xf7, 0xa3, 0x1a, 0xdf, 0xc7, 0xca, 0xcd, 0x3a, 0x3d, 0x3b, 0x38, 0x3d, + 0x37, 0x5e, 0xd5, 0x8a, 0x18, 0xdf, 0x44, 0xe3, 0x1a, 0x7c, 0x7e, 0xfd, 0x63, 0x18, 0x06, 0x26, + 0x96, 0x2e, 0xd3, 0x9f, 0x56, 0xa3, 0x4c, 0x2c, 0x8a, 0x5d, 0xed, 0x8b, 0xef, 0xbf, 0xe2, 0x67, + 0x9c, 0xe7, 0xbc, 0x24, 0x9a, 0x8d, 0xcf, 0xbf, 0x01, 0xcc, 0x27, 0x63, 0x03, 0x7b, 0x46, 0x8e, + 0x74, 0x19, 0xb9, 0x66, 0x8d, 0xae, 0x78, 0x64, 0x58, 0x06, 0x06, 0x11, 0x3a, 0x32, 0x94, 0x8d, + 0x71, 0xe4, 0xdd, 0x96, 0x91, 0xa1, 0x2b, 0xff, 0x8a, 0x83, 0x3b, 0x9d, 0xa7, 0x4a, 0x05, 0x0c, + 0x77, 0x9a, 0x07, 0xdc, 0x69, 0x2c, 0x1a, 0xd5, 0xf6, 0x1e, 0x36, 0xf3, 0xdb, 0x9b, 0x0c, 0xea, + 0xbb, 0xaa, 0xf4, 0x16, 0x7a, 0x53, 0x48, 0xbb, 0xeb, 0xa2, 0x00, 0x33, 0xa4, 0x9b, 0x1a, 0xef, + 0x89, 0x68, 0xe7, 0x3b, 0x41, 0x1f, 0x45, 0xd2, 0xd2, 0xf4, 0x5d, 0x19, 0x39, 0xd2, 0x35, 0xf2, + 0xe9, 0x31, 0x2b, 0x5f, 0x5a, 0xd8, 0x9d, 0x89, 0x1e, 0x49, 0x31, 0xf4, 0xfd, 0x71, 0x55, 0x5d, + 0xae, 0x58, 0xd6, 0x1d, 0xba, 0x62, 0xef, 0xa9, 0xd2, 0x3b, 0xe8, 0x2d, 0x21, 0xfd, 0xfe, 0x89, + 0xcf, 0x8f, 0xfd, 0x6c, 0xa8, 0xc6, 0x0d, 0xd6, 0x58, 0xb8, 0xc3, 0x7a, 0x38, 0xe5, 0x4a, 0xc8, + 0x17, 0x54, 0xea, 0xee, 0xd0, 0x75, 0x2b, 0xc3, 0xb9, 0x45, 0x8c, 0x0f, 0x92, 0x2b, 0x37, 0x57, + 0x95, 0xe6, 0x08, 0x6c, 0xb9, 0x38, 0xd9, 0x76, 0x39, 0x64, 0xb6, 0x96, 0x5f, 0xc6, 0xc0, 0x3f, + 0xd0, 0xc3, 0x85, 0x69, 0xe1, 0x1f, 0xd2, 0x48, 0x9b, 0xd0, 0x6f, 0x84, 0xe2, 0x4b, 0xbf, 0x0d, + 0xe2, 0x2b, 0x8e, 0x3d, 0x3e, 0x1e, 0xef, 0x39, 0x6a, 0x5a, 0x70, 0x1c, 0x38, 0x5f, 0x0c, 0xfb, + 0xac, 0xb5, 0xb6, 0xc7, 0xae, 0x1e, 0x4b, 0xf6, 0x6f, 0x05, 0x47, 0xe5, 0xd8, 0x40, 0x24, 0xb9, + 0xeb, 0x9b, 0x78, 0xe4, 0xac, 0x5d, 0x5a, 0xc3, 0x2e, 0xa2, 0xb0, 0x2b, 0x13, 0xcd, 0x49, 0xf5, + 0xfd, 0x07, 0x97, 0x64, 0x6c, 0xef, 0x90, 0xcb, 0x06, 0xea, 0xa7, 0x45, 0x6f, 0xc9, 0x02, 0x5b, + 0xa0, 0x13, 0x38, 0x41, 0x7a, 0x7c, 0xf6, 0x9b, 0x71, 0x30, 0xcb, 0xed, 0x66, 0xc0, 0x88, 0x3f, + 0xfa, 0xcd, 0x58, 0x49, 0x6f, 0x06, 0x36, 0xca, 0x81, 0x9b, 0x01, 0x81, 0xcf, 0x98, 0x72, 0xb1, + 0x00, 0xd6, 0x60, 0x93, 0x4a, 0xc4, 0x0f, 0x9c, 0x97, 0xd9, 0x66, 0x7c, 0xb9, 0xe3, 0x8a, 0xcc, + 0xd7, 0x2f, 0x99, 0x79, 0x45, 0x78, 0x00, 0xdd, 0xb4, 0x17, 0x85, 0x3f, 0xc0, 0xa1, 0x9c, 0x06, + 0xaf, 0xbf, 0xc9, 0x5b, 0x4f, 0xac, 0xca, 0xfe, 0xa0, 0x4a, 0x1f, 0x0b, 0xa4, 0x48, 0x6c, 0x04, + 0x7b, 0x59, 0x76, 0xa0, 0x62, 0xe3, 0x04, 0xed, 0x15, 0x3a, 0x59, 0xb7, 0xb5, 0x1b, 0xee, 0x87, + 0x0e, 0x83, 0x91, 0x08, 0xc8, 0xab, 0x74, 0x12, 0xfa, 0xc2, 0x01, 0x9d, 0x1a, 0xc4, 0x81, 0xa6, + 0x74, 0xd4, 0xd5, 0x7b, 0x7a, 0xe4, 0x0b, 0x1c, 0xab, 0x02, 0x5b, 0xc3, 0xc1, 0x80, 0x23, 0xbb, + 0xda, 0x93, 0xfd, 0x07, 0x64, 0xf2, 0xe5, 0x12, 0xbf, 0x2a, 0x6d, 0x42, 0x3e, 0x21, 0xfd, 0x61, + 0x89, 0x73, 0x5d, 0x4f, 0x9f, 0xbd, 0xbf, 0xa9, 0x2e, 0x68, 0x15, 0x26, 0x4e, 0x4c, 0xa1, 0xea, + 0x3f, 0xbb, 0xde, 0x55, 0x16, 0xd4, 0xee, 0xf5, 0xbb, 0x5a, 0x3d, 0x06, 0xb9, 0x2a, 0x9b, 0x8c, + 0xc3, 0x94, 0xab, 0x32, 0x0e, 0x54, 0xf7, 0x8a, 0x74, 0xf5, 0xc7, 0xb9, 0xfd, 0xd7, 0x38, 0xf4, + 0x68, 0x05, 0x76, 0x7a, 0xa6, 0x3d, 0x8c, 0x40, 0x84, 0x77, 0xe0, 0xfe, 0x1b, 0x8b, 0x1a, 0x6d, + 0x0a, 0xe2, 0x1c, 0xf0, 0xd9, 0x36, 0x11, 0x00, 0x36, 0x53, 0x8c, 0xb7, 0x7e, 0x0e, 0x46, 0x72, + 0x36, 0x4a, 0x6c, 0x6f, 0x26, 0xf2, 0xa4, 0x1e, 0xf1, 0xc1, 0x3b, 0x33, 0x0a, 0xa4, 0xd5, 0xa8, + 0x52, 0x35, 0xaa, 0x12, 0x46, 0xdd, 0x42, 0x51, 0x48, 0x7f, 0x2a, 0xec, 0xba, 0x0a, 0xff, 0x96, + 0x43, 0x9e, 0x72, 0x5f, 0xe8, 0xae, 0x41, 0xda, 0x5a, 0x55, 0x92, 0x51, 0xb5, 0x30, 0xea, 0x1c, + 0xc4, 0x39, 0x5a, 0xf3, 0xc5, 0x91, 0x43, 0xbd, 0x63, 0x04, 0xb5, 0x7d, 0x99, 0x68, 0x6e, 0x9a, + 0x21, 0x1f, 0xc0, 0xda, 0xd8, 0xb0, 0xda, 0xe8, 0x7b, 0x28, 0x0a, 0xe9, 0xcf, 0xc5, 0x02, 0x6c, + 0xff, 0x8c, 0xd0, 0x14, 0x70, 0xf7, 0xd4, 0x71, 0xbc, 0x01, 0x5d, 0x7f, 0x40, 0xb9, 0x61, 0x6f, + 0x68, 0x13, 0x96, 0x28, 0xd3, 0x58, 0x17, 0xbf, 0x16, 0x68, 0xa1, 0x28, 0x03, 0xae, 0xa7, 0x19, + 0x75, 0x40, 0x22, 0x67, 0xa4, 0xb6, 0xc5, 0x1b, 0x71, 0x63, 0xa8, 0xcd, 0xf0, 0x1e, 0x5b, 0x13, + 0x30, 0xcb, 0x18, 0x6b, 0xce, 0xe5, 0xc1, 0x40, 0x03, 0xa9, 0x48, 0xf4, 0xb6, 0xca, 0x74, 0x74, + 0x7e, 0x03, 0x95, 0xef, 0xc2, 0x99, 0xae, 0xc6, 0x07, 0x43, 0xe4, 0xbb, 0x79, 0xe4, 0xd3, 0x58, + 0x6e, 0xf4, 0x7d, 0xe9, 0x53, 0xc1, 0x25, 0x72, 0x1e, 0x15, 0xcb, 0x56, 0x56, 0xad, 0x90, 0xc7, + 0x11, 0x51, 0xae, 0x3c, 0xae, 0x66, 0x6d, 0x59, 0x59, 0x45, 0x4d, 0x8d, 0x9c, 0x03, 0xe2, 0x5b, + 0x79, 0xdc, 0x9a, 0xca, 0x55, 0x15, 0xab, 0xd7, 0xae, 0xa1, 0x72, 0xdb, 0x5f, 0xdb, 0x7c, 0x20, + 0x20, 0xf1, 0x2a, 0x85, 0x9e, 0x67, 0x89, 0xba, 0x0c, 0x87, 0x85, 0xa2, 0xe2, 0xe8, 0xf8, 0xee, + 0xd3, 0x23, 0xfb, 0x8f, 0xc4, 0x0f, 0x5d, 0x8a, 0x0d, 0x44, 0x01, 0xb0, 0xe2, 0x9d, 0x5d, 0x89, + 0x53, 0x51, 0x33, 0xda, 0x0d, 0x85, 0xb0, 0xa7, 0x51, 0x76, 0x28, 0xec, 0x0d, 0x86, 0x09, 0x1b, + 0x3e, 0x47, 0x95, 0x66, 0x0b, 0x50, 0x22, 0xf2, 0x24, 0x9a, 0x59, 0x57, 0xbf, 0x7e, 0x36, 0x87, + 0x2e, 0x8d, 0x1c, 0xfa, 0x46, 0x86, 0x2a, 0x7e, 0x21, 0xca, 0x54, 0xfc, 0x75, 0xc4, 0x4e, 0x1e, + 0x24, 0xe9, 0x8a, 0xbf, 0xce, 0xe8, 0xa1, 0x1f, 0xdc, 0xb1, 0xe3, 0xa4, 0x87, 0x5e, 0xc1, 0xaf, + 0x44, 0x13, 0x95, 0x8f, 0x94, 0xda, 0x26, 0x1d, 0x4e, 0xd6, 0xf8, 0x1a, 0x14, 0x56, 0xa6, 0x6e, + 0xad, 0x31, 0xc6, 0x20, 0x81, 0xae, 0x60, 0x0c, 0x6b, 0x13, 0x7e, 0x2d, 0x9a, 0x50, 0xdb, 0x14, + 0x0c, 0x2a, 0xfe, 0x70, 0x4d, 0x58, 0x69, 0x24, 0x12, 0xf6, 0xa7, 0x54, 0x69, 0xb1, 0xc0, 0x96, + 0x8b, 0x73, 0xc9, 0x48, 0xbd, 0x9f, 0x69, 0x3d, 0xe7, 0x60, 0x3c, 0x4a, 0x9d, 0x91, 0x68, 0x0c, + 0x6c, 0x7b, 0xfe, 0x0d, 0x94, 0x17, 0x0a, 0x2b, 0x8d, 0x35, 0x3a, 0x84, 0xf9, 0x6b, 0x15, 0x9c, + 0xea, 0x62, 0x7c, 0xe9, 0x02, 0x55, 0x2a, 0x14, 0x2c, 0x15, 0xb6, 0x29, 0xe2, 0xf1, 0xbe, 0x2f, + 0xcd, 0x56, 0xb9, 0x8c, 0x5c, 0x4e, 0xb6, 0xb4, 0xe4, 0x8f, 0x70, 0xfa, 0xf6, 0x2a, 0x8d, 0x46, + 0x08, 0xdb, 0x62, 0xf7, 0x70, 0xdd, 0x0c, 0x60, 0x2f, 0xd4, 0xa7, 0x42, 0x82, 0xb9, 0xae, 0x55, + 0xa5, 0x57, 0x05, 0xe8, 0x2f, 0xbe, 0x0c, 0xdf, 0x84, 0x34, 0x95, 0xf0, 0x4d, 0xc6, 0xf2, 0x7f, + 0x30, 0x79, 0x66, 0x2b, 0x08, 0x6a, 0xa1, 0x10, 0x14, 0xaa, 0x3a, 0x69, 0x3a, 0xb4, 0x4d, 0x1b, + 0x18, 0x88, 0x1f, 0xba, 0xf4, 0x7d, 0xe9, 0xb8, 0x6e, 0x2e, 0x2b, 0x97, 0xcb, 0x9f, 0x26, 0xc3, + 0x88, 0xfc, 0x6f, 0x9c, 0x02, 0xf5, 0x52, 0x1c, 0x91, 0xd2, 0x14, 0xa8, 0xd3, 0x85, 0x9a, 0x57, + 0xff, 0x66, 0xe2, 0xc1, 0xbc, 0xc5, 0xc6, 0x8f, 0x00, 0x81, 0xfb, 0x8b, 0xf8, 0x0b, 0x66, 0xfc, + 0x08, 0xeb, 0x17, 0x70, 0xe4, 0x08, 0x43, 0xf3, 0xea, 0x92, 0x7e, 0xc6, 0xec, 0xc8, 0x66, 0xe9, + 0xc8, 0x73, 0xcd, 0xd2, 0x01, 0xb0, 0x8b, 0x55, 0xc7, 0xb1, 0x68, 0xd4, 0x25, 0x4b, 0x47, 0x25, + 0x42, 0xf5, 0xde, 0x50, 0x18, 0x48, 0x30, 0x22, 0x7c, 0xc7, 0x5a, 0x11, 0xa6, 0x58, 0x2c, 0x20, + 0x26, 0xe7, 0x03, 0xbb, 0xe3, 0x5f, 0x9d, 0x24, 0x71, 0x42, 0x01, 0x26, 0x99, 0x56, 0xb3, 0xaa, + 0x10, 0x32, 0x8f, 0xcd, 0x25, 0xce, 0xa5, 0x60, 0xcd, 0xc9, 0xe8, 0x20, 0x5e, 0xf5, 0xce, 0x6c, + 0xf4, 0xcb, 0x46, 0x55, 0x6a, 0x40, 0x9b, 0x04, 0x27, 0xda, 0x33, 0x12, 0x29, 0x1a, 0xc0, 0x00, + 0x66, 0xc8, 0x14, 0x2d, 0x5d, 0xe3, 0x2c, 0xe0, 0x77, 0x8d, 0x83, 0xa3, 0xb6, 0xda, 0x5f, 0x98, + 0x9b, 0xc8, 0xa4, 0xfd, 0xfe, 0x27, 0x0e, 0xf1, 0xec, 0xd7, 0xee, 0x8f, 0xb7, 0x6e, 0xfe, 0xe8, + 0x3c, 0x01, 0x49, 0xbc, 0x77, 0x9d, 0x43, 0xf9, 0xb2, 0x12, 0x0e, 0x6e, 0x61, 0xdf, 0x90, 0x57, + 0xa9, 0x17, 0x19, 0xcd, 0xc7, 0xc6, 0x0b, 0xa4, 0x48, 0xcc, 0x85, 0x3d, 0xd6, 0x89, 0x92, 0x82, + 0xe0, 0x0c, 0x9c, 0x31, 0xd7, 0x25, 0x1f, 0x12, 0xf1, 0x3b, 0x5b, 0x61, 0x06, 0x35, 0x86, 0x75, + 0x2f, 0x50, 0x25, 0x8f, 0x19, 0xd4, 0x78, 0x3a, 0x8c, 0x05, 0x3c, 0xa0, 0xd6, 0xb9, 0x37, 0xf9, + 0xed, 0x65, 0x0c, 0x93, 0x8e, 0x54, 0xbc, 0x25, 0x2f, 0xaa, 0xd2, 0xf3, 0xe8, 0x39, 0xc1, 0x31, + 0x57, 0x31, 0x1f, 0x3a, 0xeb, 0x45, 0xc6, 0xb1, 0x93, 0x8f, 0x33, 0xe9, 0x33, 0xff, 0x2b, 0x87, + 0xa6, 0x30, 0x3d, 0xef, 0xb7, 0x64, 0x60, 0xa9, 0x19, 0x3b, 0xfc, 0x2c, 0x01, 0x63, 0x37, 0x95, + 0x06, 0x3d, 0x35, 0xc3, 0x69, 0x92, 0x43, 0x8e, 0x71, 0x68, 0x72, 0xcd, 0x26, 0x5f, 0xe3, 0x8f, + 0x73, 0xc6, 0xaf, 0xd9, 0xcf, 0x78, 0xb1, 0xfe, 0x7a, 0xd1, 0x33, 0x26, 0x98, 0x22, 0x79, 0xf9, + 0x62, 0xf2, 0xea, 0xae, 0x44, 0xf7, 0x8e, 0xb4, 0xc7, 0x4c, 0x2c, 0x37, 0xec, 0xb3, 0x15, 0xf3, + 0xa1, 0x7b, 0xfa, 0x53, 0xfe, 0x7f, 0x38, 0x94, 0x6f, 0x76, 0xfc, 0xb9, 0x1d, 0x72, 0x32, 0x07, + 0x4d, 0x01, 0xb4, 0xcb, 0x1e, 0xf3, 0x0a, 0xdb, 0x31, 0x2f, 0x4a, 0x71, 0xcc, 0xf0, 0xb4, 0xcc, + 0x4b, 0x7d, 0xca, 0x1b, 0x6d, 0x84, 0x5d, 0x75, 0x1a, 0xc2, 0xee, 0xe9, 0xa0, 0x38, 0x2a, 0x61, + 0x37, 0x4e, 0x27, 0xec, 0xd6, 0xca, 0x15, 0x77, 0x9e, 0xb2, 0x23, 0x34, 0x5a, 0xd6, 0x2d, 0xd3, + 0x68, 0xd9, 0xb7, 0x91, 0x46, 0xcb, 0xb9, 0x4d, 0x34, 0x9a, 0x49, 0x50, 0x8d, 0x73, 0x27, 0xa8, + 0x1c, 0xa0, 0x71, 0xe7, 0x08, 0x2a, 0x26, 0xb2, 0x7d, 0xae, 0x6b, 0x64, 0x7b, 0x58, 0x2a, 0x86, + 0x6c, 0x2b, 0x49, 0x42, 0x9a, 0xdc, 0x76, 0x3a, 0xe2, 0x25, 0x55, 0x2a, 0x41, 0x4b, 0x05, 0xe7, + 0x7d, 0x11, 0xf3, 0x61, 0x1a, 0xe9, 0x11, 0xcd, 0xff, 0xcb, 0x21, 0x9e, 0xed, 0xfa, 0x73, 0x43, + 0x35, 0xdb, 0x33, 0xd0, 0x14, 0x60, 0x06, 0x7f, 0x14, 0x54, 0x13, 0xb6, 0x07, 0xab, 0xc6, 0xb6, + 0x34, 0xd4, 0xe3, 0x79, 0x25, 0xeb, 0xd0, 0x6c, 0xce, 0x4d, 0x87, 0xc1, 0xf6, 0x8b, 0xb1, 0xe1, + 0xab, 0xf1, 0x9e, 0x2f, 0xc0, 0x3e, 0x12, 0xae, 0x8d, 0xd6, 0xd7, 0x16, 0x6f, 0xc1, 0x21, 0x91, + 0xaf, 0x1c, 0xc7, 0x11, 0xa7, 0x8f, 0x6a, 0xcd, 0xa7, 0x13, 0x83, 0x2d, 0xf1, 0xde, 0x4f, 0xd9, + 0xd8, 0xd2, 0x25, 0x8b, 0x54, 0xa9, 0x18, 0x09, 0x82, 0x73, 0x61, 0x62, 0x1e, 0xc9, 0xe3, 0x8c, + 0x57, 0x40, 0xe1, 0xa1, 0x30, 0x92, 0x61, 0xf8, 0xc2, 0xdf, 0x4f, 0x50, 0xf0, 0xfa, 0x18, 0xa0, + 0x00, 0x6b, 0xed, 0x00, 0x0a, 0x66, 0xb0, 0xa1, 0x6b, 0x1d, 0x80, 0xb0, 0x8b, 0x43, 0x93, 0x56, + 0x28, 0x61, 0x16, 0x0a, 0x96, 0xdb, 0xa0, 0x60, 0xa1, 0x2a, 0x4d, 0xa1, 0x50, 0x30, 0x4e, 0x6f, + 0xe9, 0x19, 0x0b, 0x10, 0x94, 0x2c, 0x50, 0x25, 0x01, 0xcd, 0x17, 0x6c, 0xc3, 0x8b, 0x33, 0xc0, + 0x74, 0xd3, 0x9c, 0x09, 0x09, 0xeb, 0xfa, 0xaf, 0x32, 0x70, 0x02, 0xe9, 0x9f, 0xf2, 0x7d, 0xa4, + 0xc1, 0x5c, 0xed, 0xc7, 0x50, 0x52, 0xa1, 0x4a, 0xa5, 0xe8, 0x15, 0xc1, 0xbe, 0x01, 0x37, 0x1b, + 0x47, 0xf5, 0x5f, 0x72, 0xd0, 0xe4, 0x95, 0xbe, 0x90, 0xe5, 0x38, 0x6b, 0x9d, 0x4e, 0x04, 0x15, + 0xaa, 0xf4, 0x02, 0xcb, 0x0c, 0x2f, 0x34, 0x59, 0xd5, 0xb1, 0x05, 0x4e, 0x05, 0x5d, 0x94, 0x25, + 0xc0, 0x03, 0xc3, 0x0f, 0xc3, 0xd6, 0x8b, 0x38, 0x84, 0xb2, 0xc9, 0x0f, 0xcf, 0xb6, 0x7d, 0x84, + 0x0d, 0xa6, 0x08, 0x23, 0x7a, 0x58, 0x2e, 0x78, 0x99, 0xc9, 0x05, 0x67, 0x9a, 0xc9, 0xa4, 0xdc, + 0xb9, 0x60, 0x6c, 0xe9, 0x6f, 0xa4, 0x91, 0x26, 0x3c, 0xf0, 0x32, 0xf3, 0xc9, 0xca, 0x62, 0xfa, + 0xbb, 0x3e, 0x59, 0x6c, 0x7f, 0x23, 0x15, 0x0b, 0x2b, 0x85, 0xcb, 0xbe, 0xf3, 0x52, 0xb8, 0x20, + 0x25, 0xd6, 0x72, 0x4c, 0x63, 0x44, 0x83, 0x58, 0x5b, 0xc5, 0x12, 0x6b, 0xf3, 0x59, 0x32, 0xad, + 0xd8, 0x43, 0x4d, 0x29, 0x09, 0x99, 0x66, 0x9a, 0x4f, 0x12, 0x2a, 0xad, 0xd8, 0xb3, 0x7c, 0xb5, + 0x5c, 0x56, 0x41, 0x83, 0x5b, 0x14, 0x51, 0xb2, 0x6d, 0x2d, 0xb1, 0xa1, 0xad, 0x26, 0x72, 0x27, + 0xfd, 0x8d, 0x25, 0x36, 0xb4, 0xd5, 0xe2, 0xe2, 0xf8, 0xf1, 0xae, 0x58, 0xf4, 0xa8, 0xd6, 0x13, + 0x8d, 0x1f, 0xe9, 0x8f, 0x0d, 0xec, 0x31, 0x43, 0xc5, 0x56, 0x56, 0x93, 0xd8, 0x93, 0xfd, 0x57, + 0xb4, 0xe8, 0x7e, 0xea, 0xeb, 0x4d, 0x0c, 0x6c, 0xab, 0xf9, 0x5f, 0xba, 0x05, 0x4d, 0xc0, 0x51, + 0x9c, 0x2c, 0xd2, 0xf2, 0xc7, 0x60, 0x44, 0x26, 0x38, 0x42, 0xf2, 0xea, 0xae, 0xf8, 0xe0, 0x29, + 0xe3, 0xa0, 0xb1, 0x91, 0x95, 0x45, 0x56, 0xbe, 0x9b, 0x53, 0xa5, 0x9d, 0x1c, 0xda, 0xce, 0x09, + 0x76, 0xa0, 0x17, 0x1b, 0x61, 0x4a, 0xfa, 0x76, 0xde, 0xa1, 0x60, 0x9b, 0x5f, 0x66, 0x42, 0x5e, + 0xf4, 0xfb, 0x09, 0x7f, 0xd5, 0xa4, 0x37, 0x7a, 0xc3, 0xf8, 0x0b, 0xac, 0x69, 0x31, 0xfe, 0x9a, + 0x63, 0x09, 0xb1, 0xc9, 0x1c, 0x8b, 0x25, 0x6c, 0x81, 0x82, 0x50, 0xbd, 0x37, 0xac, 0xc0, 0x4e, + 0x10, 0xb5, 0xa3, 0xfb, 0xd0, 0xfa, 0x7b, 0x4d, 0x86, 0x9e, 0x47, 0x87, 0xd6, 0x86, 0xf7, 0x69, + 0xad, 0xed, 0xf1, 0x9e, 0x48, 0xfc, 0xe0, 0x79, 0x5b, 0xbc, 0x32, 0x99, 0x19, 0x98, 0x8a, 0x13, + 0xec, 0x7b, 0x2e, 0xf2, 0x04, 0x65, 0x02, 0x0d, 0x9c, 0x22, 0x9a, 0xe7, 0xe0, 0x3c, 0x34, 0x07, + 0xae, 0x2a, 0x93, 0xcf, 0x6c, 0x75, 0xa3, 0x4e, 0xe3, 0x1b, 0x78, 0xf3, 0xb7, 0x68, 0x8a, 0x2f, + 0x84, 0x65, 0xfb, 0xe5, 0x81, 0x0f, 0xfd, 0xa0, 0x64, 0xc2, 0x07, 0x99, 0x0b, 0x56, 0xb2, 0xce, + 0x5a, 0xf1, 0x17, 0x38, 0x91, 0xda, 0x82, 0xba, 0xc0, 0x87, 0xfe, 0x05, 0x10, 0xa2, 0xb9, 0xae, + 0x98, 0x04, 0x79, 0x6e, 0xde, 0x9a, 0xec, 0x1b, 0x20, 0x2a, 0x00, 0x48, 0x54, 0xea, 0xec, 0xcf, + 0x7f, 0x88, 0x72, 0x95, 0x8f, 0x1a, 0xbd, 0xfe, 0x3a, 0xca, 0x88, 0xbf, 0xad, 0x4a, 0x6f, 0x0a, + 0xb4, 0x50, 0x5c, 0x69, 0xfc, 0x45, 0x8c, 0x5b, 0x12, 0x7d, 0x87, 0xe2, 0x17, 0x0f, 0xe0, 0xb8, + 0x81, 0x2d, 0x60, 0xc2, 0x79, 0x63, 0xa8, 0x35, 0xe8, 0xf5, 0xd7, 0x05, 0x1a, 0x8a, 0x3d, 0xf5, + 0x8a, 0x37, 0x14, 0x5e, 0xf0, 0xa1, 0x37, 0x14, 0x56, 0x8a, 0x3d, 0x0d, 0x81, 0x50, 0x78, 0x41, + 0x63, 0xa0, 0x2e, 0x54, 0xec, 0x69, 0x0c, 0xfa, 0x02, 0x41, 0x5f, 0x78, 0x8b, 0x4c, 0xc7, 0xe5, + 0x3f, 0x46, 0x7c, 0x83, 0xf7, 0xa3, 0x8a, 0x86, 0xc6, 0xf0, 0x96, 0xd2, 0xa6, 0xfa, 0x4d, 0x80, + 0xa0, 0x88, 0x65, 0xdc, 0x6b, 0xaa, 0xb4, 0x42, 0x70, 0xa9, 0x16, 0x97, 0x34, 0x78, 0x3f, 0x5a, + 0xa0, 0xe8, 0x85, 0x0b, 0xd6, 0x37, 0xd5, 0x6f, 0x5a, 0x00, 0x11, 0x6f, 0x8a, 0xb5, 0xf6, 0x03, + 0xf1, 0xaf, 0x4e, 0x92, 0xa8, 0x20, 0xd8, 0xe6, 0xc9, 0x34, 0x83, 0x70, 0x19, 0x86, 0xff, 0x1d, + 0x9a, 0x14, 0x32, 0xf6, 0xa1, 0x5c, 0xa9, 0xf7, 0x6e, 0x21, 0x26, 0xef, 0x35, 0xaa, 0x54, 0x2d, + 0xd8, 0xaa, 0xc4, 0x65, 0x46, 0x30, 0x30, 0x6c, 0xda, 0xd3, 0xd5, 0xa1, 0x9d, 0xea, 0x1e, 0x39, + 0x70, 0x15, 0xf8, 0x34, 0x6d, 0x28, 0xa2, 0x9d, 0xdd, 0xa3, 0xb5, 0x9c, 0xd2, 0xfa, 0xba, 0xe1, + 0xf3, 0xd4, 0xb0, 0x75, 0xc9, 0x62, 0xad, 0x65, 0xe7, 0x88, 0x7a, 0x5c, 0xb6, 0x8d, 0xc7, 0xff, + 0x77, 0x1c, 0x9a, 0x4e, 0x8b, 0xd6, 0xfa, 0xfd, 0x8a, 0x52, 0xa7, 0xd4, 0x31, 0x2c, 0x22, 0x44, + 0xe3, 0x13, 0xdc, 0xdb, 0x88, 0x01, 0xe6, 0xbc, 0x9b, 0x48, 0xc5, 0x82, 0xb0, 0xaf, 0x41, 0x29, + 0x26, 0xfc, 0x1e, 0x04, 0x35, 0xea, 0x6d, 0xd5, 0xbe, 0x6b, 0x86, 0x39, 0xea, 0x0f, 0x2a, 0x71, + 0x28, 0xfa, 0x24, 0x31, 0xd8, 0x9b, 0xf8, 0x3c, 0x3a, 0x72, 0xe8, 0x6b, 0xed, 0x54, 0xb7, 0x76, + 0x7e, 0x2f, 0xcc, 0x50, 0xeb, 0xea, 0x48, 0x7e, 0xfa, 0x65, 0xaa, 0xe9, 0xbb, 0xcf, 0x83, 0xff, + 0xcf, 0x1c, 0x7a, 0xc4, 0xac, 0x09, 0xfb, 0xea, 0x7d, 0x1f, 0x63, 0xbd, 0xd5, 0x9a, 0x8d, 0x41, + 0xc5, 0xbb, 0x31, 0x50, 0x5f, 0x47, 0x94, 0x12, 0x24, 0x16, 0x6a, 0xfa, 0xb6, 0xe2, 0x76, 0x8e, + 0x5d, 0x96, 0xd9, 0x62, 0x41, 0x78, 0x63, 0x50, 0x09, 0xe9, 0x4d, 0x8a, 0x21, 0x14, 0x0f, 0x01, + 0x67, 0x9c, 0xb0, 0x64, 0xe4, 0x70, 0x8b, 0x16, 0x19, 0x32, 0x97, 0xc7, 0xa4, 0xf3, 0xd2, 0x71, + 0xe4, 0x70, 0x47, 0x2c, 0xda, 0x01, 0xeb, 0x4c, 0x1c, 0xf9, 0x4e, 0x6b, 0xd9, 0x19, 0xef, 0xdf, + 0x0f, 0x27, 0x05, 0x68, 0x75, 0xe4, 0xd0, 0xd7, 0x66, 0x52, 0x99, 0x81, 0xe8, 0x33, 0x8b, 0xe5, + 0xf4, 0x93, 0xe4, 0xdb, 0x39, 0xf4, 0x50, 0x68, 0x93, 0x0f, 0x32, 0x9a, 0xfc, 0xd2, 0x17, 0xde, + 0xb8, 0x32, 0x50, 0xeb, 0xad, 0xaf, 0x09, 0x07, 0x82, 0x3a, 0xf2, 0x1c, 0x87, 0xaf, 0xe9, 0x6a, + 0x55, 0x5a, 0x29, 0xa4, 0x6e, 0x25, 0x2e, 0xd2, 0xae, 0x0e, 0x27, 0x0e, 0x9c, 0x8e, 0xf7, 0xb4, + 0xc6, 0x7b, 0xbe, 0xd2, 0x7a, 0xce, 0x6b, 0xbd, 0x87, 0xb5, 0x6d, 0xe7, 0xa8, 0x0d, 0x0a, 0x3b, + 0x21, 0x48, 0x99, 0x98, 0x7a, 0x2c, 0xfe, 0x13, 0x0e, 0xcd, 0xb4, 0xd4, 0xd6, 0x6c, 0x09, 0x85, + 0x95, 0x86, 0xea, 0x40, 0x5d, 0x88, 0x84, 0x47, 0xc5, 0x41, 0x9f, 0x52, 0xb5, 0x11, 0x97, 0xc3, + 0x5c, 0x36, 0x35, 0xad, 0x57, 0x16, 0x84, 0x70, 0xb1, 0xa7, 0xaa, 0x46, 0x7f, 0x66, 0x8f, 0x7d, + 0x52, 0xee, 0x55, 0x1a, 0x02, 0xfe, 0x1a, 0x25, 0x4c, 0x8d, 0x75, 0xab, 0x03, 0x75, 0xce, 0x59, + 0xc2, 0x14, 0x53, 0x7d, 0x80, 0xef, 0xe2, 0xd0, 0x6c, 0xdf, 0x06, 0x7f, 0x20, 0xa8, 0xd0, 0xf1, + 0x42, 0xcc, 0xce, 0x92, 0x40, 0x43, 0x38, 0x35, 0x5e, 0xba, 0x76, 0x62, 0x31, 0x4c, 0xd4, 0x9c, + 0x94, 0x91, 0x78, 0x2f, 0xd9, 0x77, 0x32, 0xd1, 0x77, 0xc8, 0x36, 0x9d, 0x74, 0x43, 0xf1, 0x5b, + 0x39, 0x34, 0x35, 0xb0, 0x69, 0x4d, 0x20, 0xec, 0xad, 0x5f, 0xeb, 0x0f, 0x2a, 0xde, 0xba, 0x2d, + 0x65, 0x81, 0x26, 0x7f, 0x18, 0x6b, 0x6c, 0x26, 0xc2, 0xe9, 0xb9, 0xd5, 0x8b, 0xcf, 0x04, 0x36, + 0x2d, 0x08, 0xeb, 0xa5, 0x0b, 0x9a, 0xa0, 0x78, 0x41, 0xad, 0x5e, 0x5e, 0x0c, 0x48, 0xd6, 0x43, + 0x0a, 0x3d, 0x34, 0xf6, 0x4c, 0xfc, 0xc0, 0xf9, 0x91, 0x5d, 0x9d, 0xb2, 0xdb, 0x58, 0xfc, 0x35, + 0x0e, 0x3d, 0xd4, 0xe0, 0xfd, 0x88, 0xad, 0xa8, 0x56, 0x82, 0xb5, 0x8a, 0x3f, 0xac, 0xc3, 0xd1, + 0x04, 0x3c, 0x93, 0x7d, 0x9c, 0x2a, 0x75, 0x72, 0x42, 0xea, 0x76, 0x62, 0x50, 0x47, 0x85, 0xd6, + 0x29, 0x35, 0xd2, 0xda, 0x62, 0x52, 0x44, 0x6e, 0x06, 0x0e, 0x13, 0x43, 0xd0, 0x58, 0x64, 0x90, + 0x4e, 0x92, 0x5e, 0x0b, 0xfd, 0x0e, 0xe1, 0x36, 0xf1, 0xde, 0x53, 0x70, 0xab, 0xb4, 0x96, 0x23, + 0xda, 0xd6, 0x9e, 0x78, 0xef, 0xa7, 0x54, 0x97, 0xac, 0xf5, 0x5d, 0x91, 0x53, 0x4f, 0x87, 0x57, + 0x39, 0x34, 0x8d, 0xc1, 0x14, 0xb8, 0x1a, 0x23, 0xb5, 0x3c, 0xbc, 0x9e, 0x5f, 0xab, 0xd2, 0xdb, + 0x82, 0x6b, 0x03, 0xb1, 0xcc, 0x82, 0xd1, 0x60, 0x25, 0x18, 0xa1, 0x59, 0xd6, 0xe0, 0x8a, 0xd7, + 0xb4, 0xf6, 0x03, 0xb1, 0xe1, 0xf6, 0xc4, 0x59, 0x55, 0x76, 0x1d, 0x9a, 0xff, 0x33, 0x0e, 0xcd, + 0xd6, 0x47, 0xd9, 0xe0, 0xd3, 0x09, 0x01, 0xc3, 0x1c, 0xa8, 0x21, 0xb0, 0xd9, 0x5b, 0x8f, 0xe7, + 0x36, 0x11, 0xcf, 0x0d, 0x9b, 0x7f, 0x0a, 0xe9, 0x1a, 0x8a, 0xbf, 0x31, 0x42, 0x86, 0x19, 0x26, + 0xd9, 0x98, 0x76, 0xd6, 0xbe, 0x6b, 0xb6, 0x3c, 0x06, 0xe7, 0x77, 0x92, 0xc8, 0x6f, 0x3d, 0x5f, + 0x68, 0x3d, 0xe7, 0xf4, 0x7b, 0x15, 0xf4, 0x2b, 0x61, 0x25, 0x14, 0x1b, 0xe8, 0x8d, 0x5f, 0x3c, + 0xa7, 0xed, 0x6c, 0x73, 0xde, 0xa0, 0xa7, 0x0c, 0x34, 0x9b, 0xee, 0xf3, 0x7c, 0x03, 0xcb, 0x4f, + 0x4d, 0x32, 0x54, 0xe4, 0xc5, 0x2c, 0x3f, 0xf5, 0x28, 0xc3, 0x2c, 0xe9, 0x3b, 0x63, 0x65, 0xaa, + 0x6e, 0x2e, 0xf3, 0x44, 0x89, 0xc9, 0x07, 0x4d, 0x36, 0x48, 0xc2, 0x69, 0x26, 0x1f, 0x34, 0x3e, + 0x5d, 0xb6, 0xfe, 0x97, 0x98, 0x6c, 0x92, 0xf9, 0x86, 0xa7, 0xf4, 0x1c, 0x26, 0x97, 0x24, 0x9f, + 0x68, 0xbd, 0x12, 0x8f, 0x9c, 0x25, 0x69, 0x23, 0x71, 0x8c, 0x3c, 0x26, 0xc9, 0xe3, 0x39, 0x97, + 0xac, 0xb4, 0x53, 0x30, 0x9a, 0xf8, 0xa3, 0x2a, 0xfd, 0xce, 0x99, 0x79, 0x76, 0x23, 0x9b, 0xd0, + 0xc2, 0x66, 0xf7, 0x80, 0xe5, 0x8b, 0x38, 0xd1, 0x45, 0x57, 0x47, 0x6c, 0xa8, 0x5b, 0xeb, 0x39, + 0x97, 0xec, 0x3f, 0x0d, 0xfb, 0x31, 0xb2, 0xfd, 0x5c, 0x62, 0xf8, 0x6b, 0x0f, 0x61, 0x83, 0x18, + 0x7a, 0xcc, 0x93, 0x18, 0xdc, 0x11, 0x1b, 0xbc, 0xc4, 0xe2, 0x61, 0x4f, 0x8a, 0xdc, 0xb5, 0x7f, + 0xc1, 0xa1, 0xa9, 0xeb, 0x9b, 0xde, 0x7f, 0x5f, 0x09, 0xca, 0x24, 0xc7, 0xa4, 0xac, 0xe3, 0x18, + 0x9c, 0x96, 0x71, 0x62, 0xe9, 0x01, 0x4e, 0x95, 0xf6, 0x72, 0x82, 0x5b, 0x0b, 0xf1, 0x63, 0x28, + 0x5c, 0x60, 0xe4, 0xa6, 0x5c, 0x80, 0xf3, 0xcb, 0x92, 0x17, 0x8e, 0x18, 0xd8, 0x31, 0x2f, 0x1c, + 0x7b, 0x4d, 0x49, 0x54, 0x55, 0xe6, 0xa9, 0x4b, 0x74, 0xec, 0x82, 0xbb, 0x9b, 0xec, 0x3f, 0x0d, + 0xcf, 0xa1, 0xd6, 0x72, 0x84, 0x1d, 0x8a, 0xae, 0xc5, 0xb3, 0x64, 0xf1, 0x62, 0xd9, 0x6d, 0x42, + 0xfc, 0x29, 0xc0, 0x48, 0x2b, 0x82, 0xde, 0x5a, 0xe5, 0xfd, 0xa6, 0xfa, 0x35, 0x24, 0x2a, 0xab, + 0x4f, 0xc7, 0x9f, 0xb5, 0x38, 0xfb, 0xe3, 0xc4, 0xd2, 0xf7, 0x55, 0xa9, 0x56, 0x48, 0xdd, 0x4a, + 0x5c, 0xae, 0xe3, 0xa3, 0x0d, 0xa4, 0x6e, 0x41, 0xd8, 0xac, 0x5c, 0x10, 0x52, 0x6a, 0x8b, 0x09, + 0x6d, 0x86, 0xe3, 0xf0, 0xc1, 0xcd, 0xf1, 0x54, 0x07, 0xea, 0x3c, 0x23, 0x91, 0x88, 0xb6, 0x2b, + 0x1a, 0xef, 0x89, 0xd0, 0x4b, 0x24, 0xa7, 0xfe, 0x04, 0xbf, 0x83, 0x43, 0x79, 0xa1, 0x5a, 0xaf, + 0xbf, 0xd2, 0x1f, 0x56, 0x82, 0x9b, 0xbd, 0xf5, 0x05, 0xd3, 0xf0, 0xcc, 0x7e, 0xa3, 0x4a, 0xef, + 0x0a, 0x96, 0x0a, 0x71, 0x95, 0xfe, 0x6b, 0x81, 0x8f, 0xfc, 0x2c, 0xb6, 0x01, 0x46, 0xfc, 0xb3, + 0x48, 0xfc, 0xdb, 0x3d, 0xf0, 0x3d, 0xfd, 0xff, 0xee, 0xfd, 0x14, 0x97, 0xe8, 0xa4, 0xc1, 0x59, + 0xd5, 0x72, 0xfc, 0x4b, 0x16, 0xcb, 0x96, 0xc1, 0xf5, 0x77, 0x77, 0x5a, 0x83, 0xf7, 0x23, 0xfd, + 0x92, 0x56, 0xeb, 0x70, 0x1b, 0xfa, 0xff, 0xd9, 0xfb, 0xf3, 0xf0, 0xa8, 0x8e, 0x2c, 0x51, 0x10, + 0xaf, 0x9b, 0x48, 0x20, 0x05, 0xab, 0x2f, 0x06, 0xe4, 0x64, 0x4b, 0xa7, 0xb1, 0x2d, 0xd2, 0x02, + 0xc1, 0x05, 0x63, 0x5b, 0x36, 0xb6, 0xaf, 0x24, 0xa0, 0x64, 0x36, 0x39, 0x59, 0xca, 0x65, 0x57, + 0x15, 0x95, 0xca, 0xbc, 0x88, 0x2c, 0xa4, 0xcc, 0xac, 0xcc, 0x94, 0x6c, 0xec, 0x76, 0xff, 0x84, + 0x91, 0x00, 0x19, 0x81, 0xe0, 0x9a, 0x55, 0xc6, 0x2c, 0x65, 0x36, 0x53, 0x20, 0x81, 0x17, 0x10, + 0x92, 0x30, 0xdd, 0xdf, 0xef, 0xf5, 0x37, 0xd3, 0xdd, 0xd5, 0x9b, 0xfb, 0xf5, 0x32, 0xdd, 0xdf, + 0xeb, 0x65, 0x9c, 0x37, 0x33, 0xf5, 0xe6, 0xeb, 0xc7, 0xf4, 0xbc, 0x37, 0xf3, 0xbd, 0xf1, 0xbc, + 0xee, 0x99, 0xef, 0xc6, 0x89, 0xb8, 0x37, 0x6e, 0xde, 0x45, 0x29, 0xc0, 0x66, 0x29, 0xff, 0x03, + 0xca, 0x88, 0x13, 0x71, 0xe3, 0x9c, 0x88, 0x73, 0xe2, 0xc4, 0x89, 0x13, 0xe7, 0x50, 0x13, 0xff, + 0x24, 0x3c, 0x9c, 0x5f, 0xc8, 0x62, 0xbd, 0xcf, 0x12, 0x40, 0x58, 0xad, 0xd2, 0x48, 0x3d, 0x4e, + 0xce, 0x89, 0xd1, 0x72, 0x10, 0x75, 0x40, 0x12, 0xa2, 0xb4, 0x76, 0xee, 0x4d, 0x7d, 0xf9, 0x21, + 0x4b, 0x13, 0x56, 0xd2, 0xe9, 0xb3, 0xf9, 0xdc, 0xbc, 0x79, 0x7e, 0xcb, 0xcf, 0xf0, 0x1f, 0x71, + 0x68, 0x3c, 0x5e, 0xa3, 0xeb, 0x62, 0xea, 0x61, 0xff, 0x75, 0x29, 0x1e, 0x2d, 0x99, 0x3c, 0x64, + 0x6a, 0xe7, 0x1f, 0xc9, 0xe2, 0x5a, 0x5f, 0x6e, 0x3b, 0x41, 0x04, 0xe9, 0xdc, 0x14, 0x9b, 0xb3, + 0x31, 0x1e, 0x6d, 0x9c, 0xf3, 0xb6, 0x14, 0x8f, 0x92, 0x4d, 0x8f, 0xdd, 0x19, 0x6e, 0x0e, 0xec, + 0x4c, 0x7f, 0x7a, 0x32, 0x7d, 0xb4, 0xdd, 0xc3, 0xee, 0x83, 0x78, 0xba, 0xdb, 0xfd, 0xb9, 0x7d, + 0xaa, 0xe3, 0x9b, 0x6c, 0x54, 0x8a, 0xc5, 0x8d, 0x2a, 0x1b, 0x86, 0x42, 0x25, 0x53, 0x30, 0x09, + 0x25, 0x59, 0xac, 0xf3, 0xd9, 0x80, 0x08, 0x3f, 0x64, 0xf6, 0x8b, 0x90, 0x5a, 0x33, 0x27, 0xb0, + 0x11, 0x8b, 0xe6, 0x50, 0xa8, 0x4c, 0x57, 0xd2, 0x77, 0x9e, 0x4a, 0x1f, 0xbc, 0xa8, 0xad, 0x3a, + 0xf3, 0x44, 0xab, 0x9b, 0x86, 0xcd, 0x17, 0xf8, 0x33, 0xaa, 0xa2, 0x67, 0xae, 0x22, 0x47, 0x94, + 0x12, 0x3c, 0x44, 0x1c, 0x1e, 0xd1, 0x1e, 0xca, 0x76, 0x94, 0xe4, 0xc4, 0x02, 0xba, 0x78, 0xaa, + 0xf7, 0x94, 0x7e, 0x6e, 0xb1, 0x1b, 0xa5, 0xfd, 0x47, 0xf8, 0x3f, 0xe6, 0x90, 0xdb, 0xa2, 0x76, + 0x69, 0x20, 0xdc, 0xd0, 0x14, 0x97, 0x4a, 0x1e, 0xc9, 0x23, 0xfd, 0x6c, 0xa3, 0x2c, 0xfe, 0xc2, + 0xe7, 0xd0, 0x89, 0xb0, 0xc2, 0x06, 0x91, 0x8d, 0x50, 0x4f, 0x38, 0x1b, 0xb2, 0xd7, 0x29, 0x7b, + 0xf7, 0xc0, 0xc5, 0xba, 0x2d, 0x32, 0x0e, 0x5f, 0xe2, 0xdf, 0x73, 0x21, 0x8f, 0x56, 0xbd, 0x2c, + 0xd6, 0x94, 0xa3, 0x84, 0xe3, 0x63, 0x40, 0x89, 0x1b, 0x53, 0xff, 0x0b, 0x4e, 0x16, 0x2f, 0x73, + 0xbe, 0x21, 0xc1, 0x85, 0x0e, 0xf6, 0x60, 0x51, 0x1f, 0x6b, 0x1a, 0xe6, 0xe1, 0xa2, 0x74, 0x59, + 0xed, 0xba, 0xd9, 0x77, 0xf0, 0x84, 0x31, 0xe4, 0x80, 0xf9, 0xbf, 0xe2, 0xd0, 0x64, 0xa3, 0x88, + 0xae, 0x8a, 0x35, 0xc1, 0xc6, 0x32, 0x15, 0xa3, 0x7e, 0x94, 0x93, 0xc5, 0xc3, 0x9c, 0xcf, 0x06, + 0x48, 0xf8, 0x5d, 0xeb, 0xf2, 0x61, 0x6c, 0x2e, 0xc1, 0x58, 0xd3, 0x6d, 0xec, 0x2f, 0x36, 0xe3, + 0xb2, 0xc0, 0x6b, 0xa5, 0xd4, 0x08, 0x78, 0x4d, 0x73, 0xc0, 0x8b, 0x02, 0xe5, 0xe2, 0x45, 0xcb, + 0x87, 0x81, 0x57, 0xa3, 0xd4, 0x78, 0xe7, 0xf0, 0xa2, 0xdf, 0xaf, 0x50, 0xb7, 0x45, 0x14, 0xf0, + 0x0d, 0x61, 0xd9, 0x11, 0xa6, 0x83, 0xce, 0x64, 0xaa, 0xb7, 0x8a, 0x7d, 0x68, 0xe9, 0x52, 0xf4, + 0xef, 0x1c, 0x9a, 0x69, 0xfb, 0x8d, 0xfb, 0xc3, 0xf4, 0xf7, 0x82, 0xe1, 0xea, 0xa2, 0xd4, 0xe4, + 0xbc, 0x67, 0x52, 0xc6, 0x08, 0x7a, 0x70, 0xcf, 0x90, 0x79, 0x8a, 0xbe, 0xb9, 0xb8, 0x97, 0xcc, + 0x67, 0x67, 0x39, 0x93, 0xfd, 0xec, 0x7d, 0xee, 0x5b, 0x34, 0xa0, 0x7d, 0x53, 0x59, 0x16, 0xf7, + 0xf9, 0x47, 0x02, 0xb8, 0x7f, 0x34, 0x03, 0xee, 0x2f, 0xd6, 0xc0, 0x55, 0x7d, 0xda, 0x64, 0x6f, + 0xdb, 0xc6, 0x39, 0x18, 0xdc, 0xd6, 0xdc, 0x39, 0x83, 0xdb, 0x37, 0x95, 0x23, 0x7d, 0x05, 0x25, + 0xa1, 0x52, 0xce, 0xd2, 0xf2, 0xb6, 0x9d, 0xb3, 0x31, 0xbd, 0xfd, 0xec, 0x5b, 0x30, 0xbd, 0x7d, + 0x53, 0x59, 0xe4, 0x1b, 0x59, 0xd2, 0xf2, 0x71, 0x61, 0xe9, 0x0b, 0x26, 0x2b, 0xdc, 0x9f, 0x0e, + 0x61, 0x85, 0x3b, 0x74, 0x4f, 0x59, 0xe1, 0x58, 0x4c, 0x6c, 0x0c, 0x72, 0xff, 0x77, 0x9e, 0x06, + 0xb9, 0x4f, 0xef, 0x1f, 0x83, 0x1c, 0x2c, 0xa5, 0xda, 0xd2, 0x1f, 0x0c, 0x65, 0x99, 0xfb, 0x64, + 0x48, 0xcb, 0x9c, 0xb3, 0xea, 0xfb, 0x5d, 0x5a, 0xed, 0xfa, 0x86, 0xb0, 0xda, 0x39, 0x8f, 0xf4, + 0x2e, 0x5b, 0xf4, 0x8e, 0xe5, 0x61, 0xd1, 0x73, 0x46, 0xe0, 0x65, 0x59, 0x5c, 0xec, 0x6c, 0xed, + 0x9b, 0xe1, 0x6c, 0xed, 0x73, 0xb6, 0xef, 0x75, 0x38, 0xda, 0xf7, 0x5e, 0xbf, 0xc3, 0xf6, 0x3d, + 0xc2, 0x96, 0xff, 0x61, 0x62, 0xe9, 0x0f, 0xac, 0x4d, 0x7d, 0x7f, 0x9f, 0x87, 0xa9, 0xef, 0xe8, + 0xbd, 0x68, 0xea, 0xa3, 0x52, 0xfc, 0x07, 0x4e, 0x36, 0xbf, 0x63, 0xce, 0x36, 0xbf, 0x5f, 0x7c, + 0xbb, 0x36, 0xbf, 0x6f, 0x2a, 0x8b, 0x7d, 0xa3, 0xb0, 0x4c, 0xbc, 0x54, 0xfc, 0x80, 0xdb, 0xff, + 0xd6, 0xb1, 0xae, 0x0e, 0xe3, 0xe8, 0xd3, 0xaf, 0x39, 0xac, 0xab, 0x83, 0x07, 0x7c, 0x1b, 0x72, + 0x8c, 0x7f, 0xce, 0xfe, 0x0e, 0x6b, 0x59, 0xb3, 0xe2, 0x78, 0x1a, 0x2f, 0x67, 0x98, 0x66, 0x45, + 0x93, 0x5f, 0x46, 0x85, 0xee, 0x05, 0x31, 0x81, 0xb1, 0x1e, 0x52, 0x2f, 0x88, 0x62, 0x07, 0x97, + 0x3d, 0x83, 0xf5, 0xf0, 0xa1, 0xe1, 0x5b, 0x0f, 0xf3, 0x3a, 0x41, 0xf2, 0x0f, 0xf8, 0x09, 0xf2, + 0xa6, 0x8d, 0x5d, 0x72, 0x62, 0x1e, 0xd6, 0x80, 0x63, 0xf7, 0xa6, 0xd5, 0x52, 0x97, 0x46, 0x96, + 0xe6, 0xcb, 0x1e, 0x47, 0xf3, 0x25, 0x18, 0x09, 0x7f, 0xf9, 0xdd, 0x98, 0x2f, 0x59, 0x45, 0xcd, + 0xc1, 0x92, 0xd9, 0x99, 0x6b, 0xc9, 0x04, 0xd3, 0xe1, 0xe6, 0x6f, 0xdb, 0x92, 0xa9, 0x0f, 0xaf, + 0x30, 0xc7, 0xa8, 0x79, 0xde, 0xce, 0xa8, 0x39, 0x19, 0x8f, 0xac, 0xf9, 0xbb, 0x33, 0x6a, 0xea, + 0x72, 0xbd, 0x75, 0xd4, 0x30, 0x0c, 0x9c, 0x53, 0xee, 0x21, 0x03, 0xe7, 0x27, 0xf6, 0x06, 0xce, + 0x12, 0xba, 0x1a, 0xbf, 0x03, 0x03, 0xa7, 0x61, 0x87, 0xb4, 0x33, 0x76, 0x5e, 0x76, 0x34, 0x76, + 0x3e, 0x82, 0x87, 0x9b, 0xf8, 0xae, 0x8c, 0x9d, 0xfa, 0xfa, 0xfc, 0x81, 0x93, 0xdd, 0xf3, 0xaf, + 0x9d, 0xed, 0x9e, 0xee, 0x3c, 0x24, 0xdd, 0x5b, 0xdf, 0xa9, 0xdd, 0x93, 0x15, 0x0b, 0x4e, 0x26, + 0xd0, 0x7f, 0x18, 0xca, 0xfa, 0x77, 0xfa, 0x9e, 0xb6, 0xfe, 0xe9, 0x72, 0xda, 0xce, 0x0c, 0xf8, + 0x0f, 0x43, 0x99, 0x01, 0x4f, 0xdf, 0xd3, 0x66, 0x40, 0x5b, 0x04, 0xe9, 0x40, 0xf8, 0x00, 0x1a, + 0xd9, 0x18, 0x0d, 0x35, 0x35, 0x48, 0x25, 0xd3, 0x89, 0x40, 0xca, 0x31, 0x73, 0xad, 0xc4, 0xb5, + 0x38, 0x29, 0xec, 0x1c, 0x59, 0xf4, 0xf9, 0x08, 0xb8, 0xe0, 0x81, 0xe1, 0xd1, 0x08, 0x8e, 0xd9, + 0xeb, 0x17, 0x32, 0x67, 0xfb, 0x55, 0x0d, 0xe7, 0xa3, 0x43, 0x34, 0x91, 0x38, 0x40, 0xf2, 0xf5, + 0x68, 0xd4, 0x9b, 0x52, 0xdd, 0xa6, 0x68, 0x74, 0x73, 0xc9, 0x0c, 0xfc, 0x8d, 0xa9, 0x16, 0x6f, + 0xd1, 0xd5, 0xea, 0x95, 0xd1, 0x90, 0x54, 0x39, 0x4f, 0x55, 0x14, 0x69, 0x03, 0xc1, 0x4b, 0xbf, + 0xe2, 0x21, 0x25, 0xa0, 0x43, 0x0d, 0xb6, 0xed, 0xce, 0x5c, 0xa7, 0x59, 0xc6, 0x29, 0x30, 0x1f, + 0x83, 0x24, 0x5c, 0x60, 0x75, 0xc3, 0x49, 0xb8, 0x66, 0x62, 0x63, 0xda, 0x0f, 0x65, 0x71, 0x89, + 0x2f, 0xa7, 0x4a, 0x58, 0x90, 0xea, 0x6f, 0x03, 0xd5, 0xae, 0x4a, 0x84, 0x4b, 0x54, 0xe8, 0x54, + 0xe9, 0x7c, 0x2f, 0x7d, 0xe0, 0x12, 0x74, 0x5d, 0x96, 0xea, 0xdd, 0x4d, 0x68, 0x8b, 0x73, 0x68, + 0xf9, 0x73, 0x3a, 0xe1, 0x33, 0x1c, 0x9a, 0x26, 0xbd, 0x15, 0x93, 0x22, 0xa1, 0x40, 0x5d, 0x83, + 0xa4, 0x1e, 0x39, 0x6b, 0x89, 0x25, 0xab, 0xaa, 0x29, 0x19, 0xdd, 0xb8, 0xb1, 0xe4, 0x71, 0x82, + 0x70, 0x2e, 0x6b, 0x33, 0x9c, 0x0d, 0x89, 0x84, 0x7c, 0x8e, 0xfd, 0x08, 0x81, 0xd4, 0xc0, 0x61, + 0xa5, 0x6d, 0x67, 0xa6, 0xef, 0x2c, 0xe8, 0x60, 0xe9, 0x8b, 0xa7, 0xd4, 0xd5, 0xd2, 0xd5, 0xea, + 0x89, 0x45, 0x43, 0x37, 0x07, 0x3a, 0xd4, 0xa6, 0xe1, 0x48, 0xbd, 0x87, 0x4d, 0x03, 0xa6, 0xad, + 0x07, 0x4d, 0x86, 0xa5, 0x06, 0xba, 0x32, 0x1f, 0x7e, 0x9e, 0xde, 0x73, 0xda, 0xb3, 0x39, 0xdc, + 0xd0, 0x40, 0x63, 0x25, 0x2a, 0x2d, 0x03, 0x73, 0xe6, 0xcf, 0xf3, 0x3b, 0x0e, 0x80, 0xbf, 0xc4, + 0x21, 0x3e, 0x22, 0xbd, 0x59, 0x1b, 0x0d, 0xad, 0x81, 0xcd, 0x03, 0x8c, 0x61, 0x4f, 0xe4, 0x21, + 0xba, 0xea, 0x64, 0xf1, 0x35, 0x9f, 0x45, 0x63, 0xa1, 0xd2, 0x5c, 0x76, 0x73, 0xa0, 0x23, 0x7d, + 0xf0, 0x52, 0x2c, 0x1a, 0x52, 0xfa, 0xfb, 0x32, 0xbf, 0xde, 0xa5, 0x9c, 0xea, 0x4a, 0x5d, 0x6b, + 0x4b, 0x5d, 0xdb, 0xa5, 0xec, 0xdd, 0x93, 0x6e, 0x27, 0x73, 0x51, 0x25, 0xd2, 0x91, 0x7b, 0xe6, + 0xd1, 0xd8, 0x72, 0x16, 0xdd, 0x6b, 0xa6, 0x6e, 0x67, 0x2b, 0xac, 0x30, 0x1d, 0x56, 0xc1, 0xf0, + 0x4d, 0xdd, 0xf4, 0xa1, 0xcc, 0x99, 0x11, 0x68, 0xa6, 0xed, 0x37, 0xee, 0x0f, 0x53, 0x77, 0xf8, + 0xd6, 0x4c, 0xdd, 0x95, 0x4f, 0xc9, 0x62, 0x29, 0x71, 0x4f, 0xf5, 0x68, 0x2f, 0x69, 0x4c, 0x60, + 0xf7, 0x48, 0xca, 0x2e, 0xef, 0xa1, 0x11, 0xe8, 0x31, 0x32, 0x51, 0x09, 0x18, 0x59, 0x35, 0x8e, + 0x4a, 0x5a, 0x4b, 0xce, 0x63, 0xd4, 0x2e, 0xbf, 0xd6, 0xfc, 0x1c, 0xe0, 0x0e, 0x9c, 0x33, 0x8f, + 0x73, 0xcc, 0x61, 0x11, 0x26, 0x15, 0x4e, 0xf2, 0xfa, 0x69, 0x31, 0x01, 0xcd, 0x89, 0xbf, 0x8a, + 0x16, 0x5d, 0x1f, 0x04, 0x3f, 0x35, 0x2b, 0xa5, 0x2f, 0x9f, 0x00, 0x87, 0xfa, 0xd2, 0xcc, 0x87, + 0xdd, 0x4a, 0xfb, 0x6e, 0x55, 0x8e, 0xe1, 0x50, 0x53, 0x5b, 0x9a, 0x22, 0xc9, 0xf0, 0xd7, 0x2d, + 0x5b, 0x13, 0x52, 0xc3, 0xc6, 0x1c, 0x50, 0x56, 0xad, 0xc6, 0x60, 0x5a, 0xfd, 0x6c, 0xfd, 0x38, + 0x5a, 0xf1, 0x96, 0x2c, 0x36, 0xa1, 0x84, 0x2f, 0x1f, 0x1a, 0x09, 0x4f, 0xdb, 0x70, 0x4d, 0xfa, + 0xe8, 0x85, 0xf4, 0x85, 0x93, 0xe6, 0x21, 0xc3, 0x1a, 0x30, 0x72, 0x93, 0xf6, 0x65, 0xef, 0x1f, + 0x70, 0x68, 0x96, 0xf3, 0x57, 0xef, 0x0b, 0x3e, 0xf2, 0xfe, 0xe5, 0x6c, 0x34, 0x6d, 0xcd, 0x96, + 0x48, 0xf0, 0xfb, 0x2b, 0x9f, 0x5b, 0xb9, 0xf2, 0x39, 0xe2, 0x74, 0xe5, 0x13, 0x56, 0xcf, 0x9a, + 0x56, 0x57, 0x3e, 0xcb, 0x86, 0x7d, 0xe5, 0xf3, 0xbc, 0xa7, 0x4a, 0x54, 0xae, 0x5d, 0xd1, 0xed, + 0x1f, 0xb8, 0xc2, 0xf9, 0x22, 0xe8, 0x80, 0xdd, 0x45, 0x50, 0xa3, 0x2c, 0x6e, 0x30, 0x5d, 0x04, + 0xad, 0xbc, 0xbd, 0x8b, 0xa0, 0x9b, 0x03, 0x1f, 0xa6, 0x0f, 0x9d, 0x48, 0x1f, 0xd8, 0x09, 0xca, + 0xc8, 0xf7, 0xf7, 0x42, 0xbf, 0x25, 0xf7, 0x42, 0x1d, 0x79, 0x78, 0x6c, 0x63, 0xf7, 0x63, 0x87, + 0xbb, 0x9f, 0xb9, 0xf9, 0xdf, 0xfd, 0x24, 0xe3, 0x4d, 0x8e, 0x57, 0x3f, 0x1f, 0x0d, 0xe9, 0xb0, + 0x1d, 0x94, 0xc5, 0x9f, 0xdb, 0x5f, 0xef, 0x2c, 0xb9, 0xed, 0xeb, 0x1d, 0x3c, 0x42, 0xdb, 0xdb, + 0x9d, 0x7d, 0x79, 0xf9, 0x6b, 0xe3, 0xcb, 0x32, 0xc7, 0x1b, 0x9c, 0x39, 0xce, 0x37, 0x38, 0x4c, + 0x4c, 0x71, 0x3c, 0x9e, 0xef, 0x2f, 0x74, 0xbe, 0xbf, 0xd0, 0xc9, 0xf3, 0x42, 0xc7, 0xa0, 0x49, + 0x8e, 0xfd, 0x16, 0x6e, 0x2c, 0xc6, 0x0d, 0xf7, 0xc6, 0x22, 0xaf, 0x2b, 0x87, 0xf1, 0x0f, 0xf8, + 0x95, 0xc3, 0x5f, 0xd8, 0x5c, 0x39, 0x4c, 0xc0, 0x78, 0xdf, 0x9f, 0x97, 0x0a, 0x17, 0x1c, 0x2f, + 0x15, 0x20, 0xcd, 0x41, 0x44, 0x15, 0xd7, 0x0e, 0x97, 0x0a, 0x55, 0xf9, 0x5d, 0x2a, 0x7c, 0x2b, + 0x37, 0x0a, 0xfc, 0x3d, 0x7b, 0xa3, 0x30, 0xf1, 0x1e, 0xbc, 0x51, 0x38, 0x05, 0xaa, 0xb2, 0x5a, + 0xb1, 0x26, 0x19, 0x88, 0x27, 0x9b, 0x62, 0x78, 0xa8, 0x70, 0x77, 0x94, 0x94, 0x45, 0xc9, 0x67, + 0x51, 0xcd, 0x0c, 0x34, 0x01, 0xa5, 0xec, 0x30, 0x95, 0xce, 0xc3, 0xa9, 0xde, 0x3e, 0x2c, 0xbb, + 0x70, 0xda, 0xfe, 0xe1, 0x0e, 0xd4, 0xe2, 0x83, 0xfc, 0xff, 0xcc, 0xa1, 0x12, 0xb6, 0x98, 0xa4, + 0xc2, 0x90, 0x18, 0xf7, 0xf3, 0x5d, 0x9c, 0x2c, 0xfe, 0x8e, 0xcf, 0x16, 0x4a, 0xf8, 0xb9, 0x71, + 0xcc, 0x73, 0x12, 0xa4, 0xd2, 0x4c, 0x61, 0x40, 0x40, 0xe9, 0xec, 0x21, 0x89, 0x3b, 0x6e, 0x05, + 0x09, 0xdb, 0x71, 0xdc, 0xf3, 0x4e, 0xea, 0x9f, 0x0c, 0xe5, 0xa4, 0x7e, 0xdf, 0xdc, 0xe1, 0x94, + 0xdc, 0x8f, 0x77, 0x38, 0x8f, 0x3c, 0x88, 0x77, 0x38, 0xee, 0x07, 0xfd, 0x0e, 0x67, 0xea, 0x03, + 0x71, 0x87, 0xc3, 0x5c, 0xb0, 0x4c, 0xfb, 0x56, 0x2f, 0x58, 0x86, 0xbc, 0xee, 0x98, 0xfe, 0x80, + 0x5f, 0x77, 0xcc, 0xb8, 0x87, 0xaf, 0x3b, 0x5e, 0x93, 0xc5, 0x75, 0x68, 0x8d, 0xcf, 0xd1, 0xfe, + 0x28, 0x4c, 0x57, 0xf6, 0x76, 0xa4, 0x2f, 0x9e, 0x36, 0xd5, 0x83, 0xa1, 0xc9, 0x68, 0x9e, 0xd5, + 0x2e, 0x38, 0x4e, 0x8d, 0x40, 0xd3, 0x6d, 0x7a, 0xfd, 0xed, 0xb9, 0xde, 0x00, 0xc2, 0x65, 0xba, + 0x5a, 0xef, 0xd9, 0xeb, 0x8d, 0xf3, 0x23, 0xd0, 0x0c, 0xd8, 0xac, 0x6c, 0xcd, 0xcf, 0x3f, 0x36, + 0xdf, 0x6c, 0x3c, 0x2f, 0x8b, 0x25, 0xec, 0x79, 0x74, 0xb4, 0x21, 0x8a, 0x51, 0xfe, 0x8f, 0x70, + 0xff, 0x89, 0xcb, 0x0d, 0x68, 0xf6, 0x07, 0x9c, 0x2c, 0xfe, 0x3e, 0xa7, 0x87, 0x34, 0xfb, 0x82, + 0x63, 0x63, 0x9a, 0xd9, 0x90, 0xf1, 0xd6, 0x02, 0x9c, 0x29, 0x3d, 0xd7, 0x52, 0x7d, 0x7b, 0x54, + 0xe5, 0x09, 0x27, 0x4d, 0x34, 0x7b, 0x3f, 0x2a, 0xdd, 0xed, 0xd9, 0x8f, 0xdb, 0x32, 0x5d, 0xad, + 0x5a, 0x70, 0x1e, 0x95, 0xf5, 0x0e, 0xf7, 0x18, 0x52, 0x39, 0x5f, 0xfd, 0x14, 0xde, 0xd9, 0x66, + 0xba, 0x5a, 0xab, 0x44, 0xb8, 0xca, 0x36, 0x04, 0x4f, 0x7b, 0x45, 0x16, 0x97, 0xa1, 0x25, 0xbe, + 0x21, 0x88, 0x2c, 0x4c, 0xb1, 0x41, 0x90, 0xe5, 0x2e, 0xef, 0x27, 0x23, 0xd0, 0x4c, 0xdb, 0x7e, + 0xee, 0x0f, 0xae, 0x6a, 0xb8, 0x45, 0xae, 0xc2, 0xeb, 0x1c, 0xb8, 0xea, 0x31, 0x36, 0xf0, 0xda, + 0x3d, 0xcb, 0x58, 0xd7, 0x5c, 0x68, 0xea, 0x32, 0x29, 0x79, 0x37, 0xb8, 0xaa, 0xd9, 0x74, 0x67, + 0x88, 0xa3, 0x5c, 0xe9, 0x57, 0x86, 0xcb, 0xab, 0x44, 0xc0, 0x20, 0xd5, 0xb7, 0x8f, 0x16, 0xe2, + 0x3c, 0x9b, 0xa9, 0xfe, 0xd3, 0x34, 0xad, 0x23, 0xfc, 0x9f, 0x3e, 0x74, 0xa5, 0xcc, 0xa3, 0x9c, + 0xda, 0x9d, 0xd9, 0x7f, 0x8e, 0xde, 0x4e, 0xe4, 0xb4, 0x63, 0xae, 0x02, 0x97, 0xc9, 0x62, 0x35, + 0xaa, 0xf4, 0x39, 0xa1, 0x2d, 0x3c, 0x06, 0x51, 0x84, 0x6c, 0xa6, 0x8d, 0x84, 0xac, 0xfb, 0xef, + 0x23, 0xd0, 0x34, 0xeb, 0x4e, 0x7e, 0x7b, 0xb6, 0x0e, 0x2d, 0xa6, 0xdd, 0xbd, 0xba, 0xc2, 0x69, + 0x9e, 0x10, 0xc7, 0x99, 0x12, 0xa6, 0xdb, 0xcc, 0xb7, 0x5d, 0x00, 0xa9, 0x73, 0x05, 0x68, 0xda, + 0x8a, 0x70, 0xc2, 0x9e, 0x6f, 0x22, 0x66, 0xbe, 0xa9, 0x95, 0xc5, 0xa5, 0x2c, 0xdf, 0x3c, 0x67, + 0xbe, 0x60, 0xbe, 0xf5, 0x08, 0x7c, 0x6f, 0x98, 0x23, 0xf0, 0x2d, 0x96, 0xc5, 0x05, 0xac, 0x5b, + 0xfa, 0x13, 0xf6, 0xdf, 0x1b, 0xc2, 0x39, 0xbd, 0x26, 0x37, 0x18, 0x5f, 0xb9, 0x2c, 0x3e, 0xae, + 0x07, 0xa1, 0x70, 0x9b, 0x55, 0x2e, 0xdb, 0xb8, 0x7c, 0x35, 0xb9, 0x71, 0xf9, 0xa0, 0x2b, 0x6a, + 0xdf, 0x35, 0x77, 0x65, 0x1b, 0xa2, 0xaf, 0xe2, 0x14, 0x27, 0x8b, 0x27, 0x38, 0xf4, 0x11, 0xe7, + 0x73, 0x9c, 0x0a, 0xe1, 0x5d, 0x9b, 0xb9, 0xfd, 0x8e, 0x22, 0xc3, 0xfd, 0xab, 0x0b, 0x4d, 0xb7, + 0x19, 0xdf, 0xfd, 0x21, 0x26, 0xde, 0x30, 0x84, 0x89, 0xcb, 0x5f, 0x4c, 0x4c, 0x97, 0x45, 0x37, + 0x11, 0x13, 0xbc, 0x21, 0x74, 0x1c, 0x1b, 0xf9, 0x92, 0x64, 0x56, 0x71, 0xa6, 0xd0, 0xb0, 0xd9, + 0xf3, 0x53, 0x97, 0xc5, 0x03, 0xd5, 0x35, 0x38, 0xcc, 0x21, 0x65, 0xd0, 0x97, 0xd1, 0x48, 0x89, + 0x75, 0x51, 0xc0, 0x29, 0x97, 0x49, 0x91, 0x30, 0x95, 0x0d, 0x65, 0xa2, 0xdd, 0x77, 0xc3, 0xe1, + 0xcb, 0x4f, 0x80, 0x8c, 0x17, 0x20, 0xae, 0x6f, 0xe1, 0x02, 0x64, 0xc4, 0x70, 0x2f, 0x40, 0x5e, + 0x60, 0x76, 0xd4, 0x02, 0x7d, 0x65, 0xe8, 0x3b, 0xea, 0x43, 0x0e, 0xfb, 0xa2, 0xb5, 0xaf, 0x17, + 0x25, 0xda, 0xf7, 0x3b, 0xda, 0xbd, 0xa3, 0xb3, 0xed, 0x70, 0xa1, 0x87, 0xa8, 0xa1, 0x04, 0x82, + 0x61, 0x46, 0x36, 0x46, 0xf9, 0x05, 0xa8, 0x20, 0x12, 0x68, 0xa4, 0x39, 0x83, 0x70, 0xfe, 0x6f, + 0x5c, 0x20, 0x3c, 0x4c, 0x2f, 0x74, 0x3c, 0xf5, 0x2a, 0x30, 0x09, 0x3e, 0x8e, 0xeb, 0x80, 0xc6, + 0x38, 0x01, 0x38, 0x4c, 0x0f, 0xa5, 0x31, 0x4e, 0x00, 0x3e, 0x46, 0x39, 0x7a, 0x49, 0x39, 0x7e, + 0x9c, 0xba, 0xbc, 0x92, 0xb4, 0xde, 0xaf, 0xa3, 0x87, 0xb4, 0xab, 0x00, 0xb2, 0x40, 0x68, 0x9c, + 0xf7, 0x32, 0x59, 0x9c, 0xed, 0x33, 0xd7, 0xe6, 0x8e, 0x00, 0x02, 0x97, 0xfa, 0xcd, 0x80, 0x15, + 0x2a, 0x65, 0xd0, 0x6c, 0x9f, 0x19, 0xbb, 0xdc, 0x2e, 0x88, 0x6c, 0xfd, 0x4b, 0x0e, 0x95, 0x2c, + 0x93, 0x92, 0x06, 0x70, 0x8d, 0xc3, 0x9f, 0x45, 0xa3, 0x82, 0x0d, 0xd1, 0xa6, 0x90, 0xb6, 0x01, + 0xcf, 0x80, 0xd0, 0x49, 0x50, 0x26, 0x14, 0xa7, 0xfa, 0xf6, 0x31, 0x3b, 0xde, 0x04, 0x97, 0x9f, + 0x56, 0xf1, 0xcf, 0xa1, 0xe2, 0x40, 0x10, 0xdf, 0x51, 0x6b, 0x9c, 0x3d, 0x15, 0x2b, 0xbd, 0x5a, + 0xa9, 0x30, 0x3a, 0xd5, 0xb7, 0x4f, 0xd9, 0x71, 0x31, 0xdb, 0xb3, 0xb5, 0xa6, 0xda, 0xaf, 0x97, + 0x57, 0x54, 0xca, 0xe2, 0x4b, 0x68, 0xb1, 0xcf, 0x76, 0x54, 0xc2, 0xa3, 0xb0, 0xbe, 0x8c, 0xe8, + 0x24, 0x20, 0x90, 0x26, 0xd1, 0x2b, 0xff, 0xcc, 0x85, 0x1e, 0xb1, 0x68, 0x7f, 0x7f, 0xb0, 0xe0, + 0x5a, 0xc3, 0x6e, 0xf1, 0x68, 0x2e, 0x33, 0x98, 0x66, 0x36, 0xbf, 0x6d, 0x82, 0xc4, 0x7b, 0xb7, + 0x27, 0x8b, 0x30, 0xd5, 0x81, 0xae, 0xde, 0x0c, 0x87, 0x90, 0x1f, 0x2f, 0x5f, 0xcc, 0x2a, 0xfa, + 0xaa, 0xe7, 0xf2, 0x5d, 0xf5, 0x55, 0x08, 0xc1, 0x5f, 0xab, 0x54, 0x1e, 0x03, 0x42, 0x3e, 0x26, + 0x8b, 0x1e, 0x1f, 0x53, 0x2c, 0xf0, 0x6c, 0x53, 0xc2, 0x67, 0x4c, 0x3d, 0xff, 0x32, 0x1a, 0x0d, + 0xbf, 0x58, 0xa6, 0xc1, 0x11, 0xa2, 0xd9, 0x72, 0x3a, 0x02, 0xc2, 0x26, 0x6c, 0x55, 0x85, 0xca, + 0xd6, 0xc8, 0xed, 0x63, 0x90, 0x31, 0x8e, 0xd7, 0xfb, 0x1b, 0x0e, 0x4d, 0x5e, 0x26, 0x25, 0xab, + 0xd4, 0x95, 0x0c, 0x40, 0x77, 0x97, 0x1f, 0xc8, 0xc4, 0xd9, 0x8c, 0x89, 0xc6, 0x94, 0xc5, 0x1f, + 0xf2, 0x00, 0x22, 0x06, 0x56, 0xf8, 0x7d, 0x17, 0x9a, 0x62, 0x6a, 0x7a, 0x7f, 0x30, 0xc2, 0x4a, + 0x03, 0x23, 0xb8, 0xcd, 0x8c, 0x40, 0x67, 0x30, 0x3f, 0x0e, 0x78, 0x56, 0x16, 0x9f, 0x46, 0x0b, + 0x7c, 0x76, 0xd4, 0x10, 0x4a, 0xec, 0x28, 0xe9, 0xfd, 0x47, 0x17, 0x2a, 0x7a, 0x3d, 0x1a, 0x01, + 0xaf, 0xfe, 0x79, 0x68, 0xe4, 0xdb, 0xea, 0xdf, 0x74, 0x0d, 0x94, 0xc8, 0xe2, 0x24, 0x1f, 0x29, + 0x12, 0x46, 0x2b, 0x9d, 0x3d, 0x99, 0xfd, 0xe7, 0x94, 0x8e, 0xbe, 0x9a, 0x6a, 0x3f, 0x29, 0xe4, + 0x17, 0xa2, 0x02, 0xf5, 0x2f, 0x96, 0x66, 0xec, 0x9a, 0x1f, 0xaf, 0xb5, 0xa1, 0x1b, 0x8b, 0x0a, + 0xcd, 0x57, 0xa0, 0x22, 0xf5, 0x7f, 0xcc, 0x2d, 0xf9, 0xad, 0x73, 0x0d, 0x9e, 0x7f, 0x01, 0x15, + 0xab, 0x7f, 0x03, 0x93, 0x14, 0xe4, 0xd5, 0x58, 0x6f, 0xc0, 0xaf, 0x46, 0xc5, 0x89, 0xa6, 0xba, + 0x88, 0x94, 0x5c, 0xd5, 0xd4, 0x48, 0x1c, 0x05, 0xe7, 0xcb, 0xe2, 0x5c, 0x9f, 0x5e, 0x2a, 0x3c, + 0x9a, 0xed, 0x39, 0xad, 0x0f, 0x1b, 0xff, 0x91, 0xe9, 0x6a, 0x55, 0x2e, 0xee, 0xcd, 0x5c, 0xdf, + 0x47, 0xa2, 0x45, 0xea, 0xd0, 0x15, 0x2a, 0xca, 0x68, 0xaa, 0x4f, 0xa3, 0x21, 0x83, 0x32, 0x61, + 0xba, 0xbe, 0x91, 0x68, 0x02, 0x9e, 0x14, 0xa2, 0x60, 0x60, 0x4a, 0x3f, 0x67, 0x3e, 0x01, 0x4e, + 0xcd, 0xb5, 0x9c, 0xa4, 0xfa, 0xf6, 0x51, 0x55, 0x90, 0xd5, 0x01, 0x5f, 0x46, 0xa3, 0xc9, 0x0f, + 0x46, 0xda, 0x00, 0x09, 0x98, 0x72, 0x61, 0x0c, 0x71, 0xa9, 0xa6, 0xd9, 0x44, 0xf4, 0x2a, 0xfe, + 0x0d, 0xc4, 0x93, 0x9f, 0xd5, 0x52, 0x22, 0x18, 0x0f, 0x63, 0xfd, 0x85, 0x4c, 0x04, 0x56, 0x76, + 0x2c, 0xaa, 0x05, 0x9e, 0x68, 0x1d, 0x9d, 0x9d, 0xd9, 0x1b, 0xe4, 0x95, 0x88, 0xdf, 0x02, 0x8e, + 0xaf, 0x41, 0xe3, 0x48, 0xe9, 0x7a, 0x29, 0xae, 0xee, 0xdf, 0x64, 0x92, 0xf0, 0xfb, 0xe0, 0x9c, + 0x2a, 0x3a, 0xc8, 0x4c, 0xfb, 0xce, 0xf4, 0xd1, 0x0b, 0xfe, 0x9c, 0x5a, 0xfe, 0x65, 0x8d, 0x48, + 0xab, 0xd7, 0x90, 0x38, 0xeb, 0x5e, 0x36, 0x55, 0xdb, 0xea, 0x35, 0xda, 0xa8, 0x70, 0xae, 0xe2, + 0xcc, 0x67, 0xfd, 0x99, 0xfe, 0xe3, 0x7e, 0xbd, 0x9a, 0xa1, 0x15, 0x8e, 0xd5, 0x3e, 0xd2, 0x4c, + 0x2b, 0x1c, 0xae, 0x9d, 0x0e, 0x03, 0xbb, 0x8c, 0xfb, 0xd9, 0x2a, 0x7e, 0x37, 0x87, 0xc6, 0x92, + 0xdf, 0xa0, 0xed, 0x92, 0xf8, 0xe7, 0xf5, 0xb2, 0x18, 0xf2, 0x19, 0x6b, 0x04, 0xa2, 0xcd, 0x93, + 0xd0, 0xeb, 0xfe, 0xa6, 0x88, 0xaa, 0xbb, 0x78, 0xb2, 0x37, 0xf6, 0x66, 0x4f, 0x76, 0xa4, 0x7a, + 0x2f, 0x7a, 0x70, 0x58, 0x20, 0xb5, 0x88, 0x64, 0x33, 0xeb, 0xbd, 0xe8, 0xa9, 0x09, 0xe1, 0x60, + 0x86, 0x83, 0x87, 0x3e, 0xcd, 0x5c, 0xef, 0x56, 0x0b, 0xc4, 0xba, 0x48, 0x34, 0xde, 0x18, 0x68, + 0xf0, 0x40, 0xc6, 0x95, 0xd9, 0x7e, 0xe3, 0x37, 0xf8, 0x30, 0x2a, 0x6a, 0x88, 0x06, 0xc1, 0xcd, + 0x0f, 0xa2, 0xa5, 0xaf, 0x94, 0xc5, 0x57, 0x7c, 0x5a, 0xa1, 0xf0, 0xa2, 0x2a, 0x6b, 0x19, 0xa1, + 0x5f, 0x5a, 0xbf, 0x59, 0x02, 0x37, 0x79, 0x75, 0x39, 0x1f, 0x3f, 0x9e, 0xe9, 0x3b, 0xab, 0xec, + 0xfc, 0xb5, 0x22, 0x77, 0x68, 0xeb, 0x14, 0x4a, 0x60, 0xec, 0xb3, 0xfd, 0x5a, 0x4f, 0xfc, 0x6b, + 0x68, 0x0c, 0xf9, 0xf6, 0x0a, 0xa9, 0x59, 0x6a, 0xc0, 0x5e, 0x85, 0xc5, 0x95, 0x0b, 0x65, 0x71, + 0xbe, 0xcf, 0x50, 0x21, 0x3c, 0x4a, 0xf0, 0xc6, 0xfd, 0x94, 0x02, 0x1f, 0x7e, 0xdd, 0xb2, 0x55, + 0xe5, 0x3a, 0x28, 0x9b, 0xed, 0x37, 0x34, 0xa8, 0x50, 0x8f, 0x53, 0xe8, 0x31, 0x9f, 0x89, 0x2d, + 0x84, 0xf1, 0xda, 0x9a, 0x27, 0xcc, 0x73, 0x82, 0x9c, 0x8f, 0x19, 0xa9, 0x46, 0xe0, 0x6f, 0x7f, + 0xe3, 0x7a, 0x36, 0x47, 0xbd, 0xf5, 0xd8, 0x6e, 0xf4, 0xb4, 0x29, 0xdd, 0xef, 0x5f, 0x66, 0xb7, + 0x3c, 0x26, 0x91, 0xbd, 0xcd, 0x96, 0x47, 0x9b, 0x33, 0x3b, 0x5f, 0x8d, 0x2c, 0x2e, 0x45, 0xd5, + 0x3e, 0x67, 0xdc, 0x84, 0xc7, 0x18, 0xb1, 0x0d, 0xe3, 0xa1, 0xef, 0x24, 0x98, 0x5d, 0x30, 0xed, + 0x42, 0x33, 0xec, 0xba, 0xb9, 0x3f, 0x36, 0xc3, 0x0d, 0x86, 0xcd, 0xd0, 0x63, 0x3e, 0x98, 0x19, + 0x57, 0x89, 0x6d, 0xd8, 0x79, 0x96, 0x38, 0x86, 0xed, 0xb1, 0x5a, 0x16, 0x45, 0xf4, 0x92, 0x6f, + 0x08, 0x32, 0x09, 0xd3, 0x1d, 0xc9, 0xed, 0xfd, 0x3f, 0x46, 0x20, 0xb7, 0x71, 0x83, 0x55, 0x85, + 0xfe, 0x1d, 0xd0, 0xa0, 0x6e, 0xe1, 0x9c, 0xf5, 0x9c, 0x79, 0x05, 0xe6, 0xa9, 0x74, 0xf1, 0x09, + 0x54, 0xd8, 0x1c, 0x0b, 0xd6, 0xd0, 0x14, 0x59, 0x3f, 0x95, 0xc5, 0xd7, 0x7d, 0x50, 0x22, 0xbc, + 0x0a, 0x59, 0x15, 0xd2, 0xc7, 0xf7, 0xa6, 0x7a, 0xcf, 0x37, 0xc7, 0x82, 0x39, 0xfb, 0xde, 0x5c, + 0x4f, 0x76, 0x17, 0xb1, 0xad, 0x97, 0x61, 0x8b, 0x16, 0xbe, 0x83, 0xc6, 0x33, 0xaa, 0x0b, 0x93, + 0x9c, 0xad, 0x12, 0x7a, 0xe6, 0x37, 0xe3, 0x7c, 0xab, 0x49, 0x9a, 0x2e, 0x63, 0x9d, 0x2c, 0xfa, + 0x7d, 0x50, 0x22, 0xd4, 0xe8, 0x6d, 0x41, 0x70, 0x8a, 0xeb, 0xc5, 0x9a, 0x15, 0x62, 0xe5, 0x8a, + 0x25, 0x50, 0x51, 0xbe, 0x6e, 0x95, 0x56, 0x92, 0xea, 0xdd, 0x0d, 0x85, 0xb3, 0xe9, 0xd5, 0x30, + 0x7c, 0x3e, 0xdd, 0xde, 0x92, 0x3e, 0xda, 0xee, 0x87, 0x1e, 0xe9, 0x75, 0x95, 0xc3, 0x64, 0x09, + 0x4f, 0x5a, 0x28, 0x44, 0xda, 0x9e, 0xcf, 0x72, 0xd7, 0x9f, 0xc3, 0x15, 0x88, 0xb9, 0x9f, 0xfb, + 0x2d, 0x1f, 0x90, 0xca, 0x5a, 0x25, 0xb9, 0xac, 0x45, 0xb5, 0x96, 0xfc, 0xb4, 0x4c, 0x92, 0x88, + 0xc6, 0x89, 0x1e, 0xf4, 0x04, 0xeb, 0x40, 0x58, 0xef, 0xe9, 0x02, 0x34, 0x66, 0x35, 0xce, 0xd0, + 0x1f, 0x8e, 0x46, 0x56, 0x44, 0xeb, 0xf9, 0x2a, 0x34, 0x86, 0x9e, 0xcc, 0x98, 0xc4, 0xc6, 0xd8, + 0x48, 0x61, 0xa8, 0x10, 0xc6, 0x80, 0x33, 0x09, 0xd9, 0xa7, 0x0d, 0x75, 0xfc, 0x73, 0xea, 0x19, + 0x0c, 0x7e, 0x6b, 0xe7, 0x10, 0x4c, 0x20, 0xa6, 0x58, 0x28, 0x82, 0x0e, 0x6a, 0xaa, 0xfd, 0x4c, + 0x29, 0xbf, 0x40, 0x4b, 0x6a, 0xc4, 0x70, 0x12, 0x4d, 0x6a, 0x34, 0x8e, 0xa6, 0xb6, 0xca, 0x76, + 0x5f, 0x52, 0xae, 0x1f, 0xd0, 0xd2, 0x58, 0x31, 0x13, 0x59, 0x60, 0x35, 0x91, 0x4a, 0xf7, 0xc9, + 0x6c, 0xf7, 0xc9, 0xf4, 0xa1, 0xd3, 0xca, 0x8d, 0x43, 0xb9, 0x13, 0x39, 0x17, 0x8d, 0x8c, 0xc6, + 0xd6, 0x25, 0xa4, 0x38, 0x61, 0x87, 0xc9, 0xb2, 0x38, 0xd1, 0x47, 0x8a, 0x84, 0x62, 0x50, 0x66, + 0x52, 0x7d, 0x7d, 0x7e, 0x52, 0xc4, 0x2f, 0x46, 0x28, 0x08, 0x59, 0x4a, 0x69, 0x12, 0xe1, 0x62, + 0x98, 0x31, 0xa6, 0x58, 0x18, 0x03, 0x5a, 0x05, 0xcd, 0xd3, 0xaa, 0xd7, 0xf0, 0x4b, 0x58, 0x65, + 0x13, 0xd4, 0x97, 0x27, 0x65, 0x71, 0x16, 0xab, 0x6c, 0x4e, 0x81, 0x8f, 0x9a, 0x6c, 0x90, 0xac, + 0xe2, 0xb9, 0x84, 0xbd, 0x45, 0x28, 0x62, 0xba, 0xd1, 0x6f, 0x11, 0x4c, 0xdd, 0x90, 0x58, 0x37, + 0xcc, 0x7d, 0x41, 0x85, 0xda, 0x06, 0x79, 0x7d, 0x86, 0x25, 0x20, 0xf0, 0xd0, 0x10, 0xc8, 0x05, + 0xa4, 0xf3, 0x5e, 0x72, 0xa1, 0x09, 0x6b, 0x03, 0x89, 0xcd, 0x86, 0xb5, 0xe2, 0xb5, 0x5a, 0x2b, + 0x39, 0x4b, 0x61, 0x86, 0x79, 0x29, 0x18, 0xe6, 0x7b, 0xb2, 0x71, 0xbe, 0xb5, 0x29, 0x2d, 0xc9, + 0x99, 0x52, 0x7d, 0xc2, 0x26, 0x1b, 0x27, 0x4c, 0x9b, 0x98, 0x19, 0xe6, 0x89, 0x31, 0x50, 0x7e, + 0x9a, 0x89, 0xf2, 0x2c, 0x41, 0xa7, 0x99, 0x08, 0xca, 0xde, 0xab, 0x4c, 0xd6, 0xb2, 0xfc, 0x14, + 0xc3, 0x37, 0x49, 0x26, 0x1e, 0x37, 0x93, 0x7c, 0x08, 0xe7, 0x2f, 0xd6, 0x33, 0x03, 0x79, 0x4f, + 0x8e, 0x82, 0x9b, 0x27, 0xcc, 0x9e, 0x35, 0x91, 0x44, 0x32, 0x10, 0x01, 0x9a, 0xdc, 0xfe, 0x26, + 0xb5, 0x30, 0x67, 0x93, 0xc2, 0xa9, 0x15, 0xe9, 0x26, 0x35, 0x3e, 0x47, 0xe9, 0xbc, 0x13, 0xfb, + 0x54, 0x2d, 0x39, 0x5a, 0x16, 0xd0, 0x0c, 0xca, 0x82, 0x0f, 0x17, 0x08, 0x3e, 0x4d, 0xa0, 0xc0, + 0x45, 0x8b, 0x27, 0x10, 0x9b, 0x53, 0xdf, 0x14, 0x88, 0xd4, 0xbf, 0xbd, 0x29, 0xda, 0x34, 0x67, + 0x7e, 0x99, 0xa7, 0x29, 0x31, 0xe7, 0x4d, 0x29, 0x91, 0x9c, 0x3f, 0x27, 0x40, 0xaf, 0xab, 0xe0, + 0xd8, 0x59, 0x8d, 0x50, 0x24, 0x1a, 0x92, 0x96, 0x06, 0x1a, 0xc3, 0x0d, 0x5b, 0x08, 0xeb, 0xe1, + 0xcc, 0x4f, 0x4c, 0xb1, 0x30, 0x26, 0x7d, 0xb4, 0x4f, 0x39, 0xb6, 0x2b, 0xf3, 0x59, 0xbf, 0xb2, + 0xf3, 0x10, 0x6d, 0xcf, 0x00, 0xf0, 0x4f, 0xa0, 0x11, 0xc1, 0x58, 0x13, 0x79, 0x8c, 0xf5, 0xb0, + 0x2c, 0x3e, 0xe4, 0x53, 0x7f, 0x0b, 0xa8, 0xaa, 0x76, 0x9d, 0x27, 0x7d, 0xa2, 0x37, 0x7d, 0xe0, + 0x92, 0x5f, 0x2d, 0xe0, 0x17, 0xa3, 0x91, 0x8d, 0x52, 0x63, 0x34, 0xbe, 0x05, 0x4f, 0xfc, 0xd8, + 0xca, 0xc7, 0x65, 0xd1, 0xeb, 0x23, 0x45, 0x42, 0x89, 0xb2, 0xbd, 0x4d, 0xb9, 0x78, 0x58, 0x39, + 0x75, 0x56, 0xb9, 0xd4, 0xa9, 0x39, 0x2f, 0x7a, 0x96, 0x55, 0xfa, 0x09, 0x04, 0xbf, 0x1e, 0x15, + 0xd6, 0x85, 0xdf, 0xd6, 0x38, 0x0d, 0x87, 0x63, 0x83, 0x12, 0x61, 0x61, 0xaa, 0xb7, 0x0b, 0x8b, + 0xa4, 0x32, 0x0f, 0xa4, 0x6c, 0x4c, 0x1f, 0xee, 0x01, 0xb1, 0x0b, 0x15, 0x99, 0xb3, 0x5b, 0xd3, + 0x47, 0xdb, 0xb3, 0x3b, 0xce, 0x2b, 0xfd, 0x7d, 0xda, 0x3b, 0x54, 0x3f, 0x34, 0xe6, 0x5f, 0x65, + 0xae, 0x01, 0x8a, 0xf5, 0x74, 0x4b, 0xfa, 0x35, 0xc0, 0x13, 0xf4, 0x2f, 0xad, 0x29, 0xf1, 0xe0, + 0x3e, 0x78, 0xad, 0x14, 0x3f, 0xa1, 0x2d, 0x4f, 0x48, 0x0d, 0x1b, 0x99, 0xe7, 0xb3, 0xfc, 0x1e, + 0x2e, 0x87, 0x29, 0x21, 0xad, 0xf6, 0x2f, 0x64, 0x71, 0x75, 0x8e, 0x00, 0x7f, 0x49, 0xb9, 0xfe, + 0x01, 0x6d, 0x96, 0xea, 0xed, 0x53, 0x3b, 0xc2, 0xb7, 0xf3, 0x2c, 0x10, 0x2b, 0xe3, 0x4b, 0xa3, + 0x91, 0x86, 0x70, 0x44, 0x2a, 0x8f, 0x6e, 0xdc, 0xa8, 0xfe, 0x3f, 0xfb, 0x9b, 0xca, 0x49, 0xf1, + 0x89, 0xfe, 0x1f, 0xf8, 0x47, 0x42, 0xb9, 0x7f, 0x14, 0xa9, 0x30, 0x0a, 0x80, 0x8a, 0x2e, 0x4e, + 0x16, 0x0f, 0x72, 0xe8, 0x03, 0xce, 0x37, 0x45, 0xe5, 0x06, 0x0b, 0x46, 0x10, 0xde, 0x82, 0x4b, + 0x23, 0x98, 0x6c, 0xd8, 0x98, 0xbe, 0xa3, 0x2b, 0xbf, 0xbf, 0x61, 0x8f, 0x34, 0xc6, 0xa1, 0xdd, + 0x1f, 0x3a, 0xc5, 0x6a, 0x83, 0x4e, 0x31, 0x2d, 0x57, 0xa7, 0x60, 0x51, 0xca, 0x4f, 0xaf, 0x58, + 0x2a, 0x8b, 0x55, 0x48, 0xf4, 0x3d, 0xac, 0x52, 0x65, 0x55, 0x34, 0x64, 0x20, 0x86, 0x50, 0x62, + 0x9e, 0x28, 0xbb, 0x8b, 0xbd, 0x7f, 0x2f, 0x42, 0x63, 0xd8, 0xaf, 0xf3, 0xcf, 0xa0, 0xa2, 0x08, + 0xe9, 0x8f, 0x35, 0xb2, 0x68, 0x85, 0xc0, 0xec, 0x47, 0xce, 0x11, 0x85, 0x42, 0x2b, 0x57, 0x1b, + 0x26, 0xb7, 0xc4, 0x24, 0xc6, 0xc0, 0x02, 0x0d, 0x69, 0x21, 0x95, 0x12, 0xc4, 0xba, 0xa2, 0x95, + 0xab, 0x3b, 0x35, 0x23, 0x62, 0x46, 0x30, 0x3b, 0xb5, 0x9d, 0x88, 0x31, 0xc8, 0x96, 0xc7, 0x41, + 0xb6, 0xc0, 0x03, 0xdb, 0x89, 0xb2, 0x38, 0x01, 0x64, 0x4b, 0x71, 0x30, 0xd6, 0x64, 0x2d, 0x5a, + 0x0a, 0xed, 0x45, 0x4b, 0xf7, 0xb5, 0xc1, 0x1d, 0xd6, 0xa2, 0xe5, 0x71, 0x34, 0xa2, 0x5e, 0x93, + 0x60, 0xf0, 0x95, 0x7a, 0xf5, 0x2b, 0xf5, 0xfa, 0x57, 0xea, 0x63, 0x4d, 0x7c, 0x42, 0xdb, 0x80, + 0x46, 0xe9, 0xf9, 0xa6, 0x68, 0x9a, 0xb9, 0x55, 0x04, 0x07, 0xac, 0xb2, 0xdf, 0x1c, 0xe8, 0x58, + 0xb3, 0x64, 0xc5, 0x8a, 0x9b, 0x03, 0x5d, 0xd9, 0x93, 0xe7, 0x32, 0xa7, 0xfa, 0x94, 0xee, 0x63, + 0xa9, 0x2f, 0x77, 0x29, 0x9d, 0x3d, 0xd9, 0xcf, 0x2f, 0xa6, 0xae, 0x5d, 0x52, 0xab, 0x57, 0xaf, + 0xa8, 0xde, 0xb0, 0x7a, 0xdd, 0xda, 0x5c, 0x90, 0xab, 0x9f, 0x2a, 0xfb, 0xbb, 0x33, 0xd7, 0x5b, + 0xb5, 0xdd, 0xad, 0x06, 0x15, 0x37, 0x45, 0xc2, 0xc9, 0xda, 0x78, 0x38, 0x28, 0x61, 0xd1, 0xe7, + 0x02, 0x93, 0x94, 0x5e, 0x2a, 0x4c, 0x85, 0xb6, 0xa9, 0xfe, 0xab, 0xe9, 0x13, 0x03, 0x1a, 0x82, + 0x37, 0x07, 0xba, 0x94, 0xb6, 0x6d, 0x7e, 0x1d, 0x8e, 0x5f, 0x88, 0x0a, 0x55, 0xb1, 0xaf, 0xee, + 0x9f, 0x23, 0xa8, 0xd9, 0x07, 0x4a, 0x04, 0x1e, 0x2c, 0x22, 0x38, 0x5f, 0x35, 0xd9, 0x4b, 0xfc, + 0x50, 0xc5, 0xff, 0x92, 0x91, 0x8f, 0x48, 0x3f, 0xac, 0xe8, 0xf2, 0x71, 0xa9, 0xd2, 0x73, 0x2d, + 0xbd, 0xe7, 0xb4, 0x2e, 0x1d, 0x8f, 0xee, 0x56, 0x65, 0x6e, 0x57, 0xab, 0xee, 0x85, 0x94, 0x23, + 0x95, 0x41, 0x7e, 0x6a, 0x1f, 0x83, 0x96, 0x8c, 0xfc, 0xac, 0x47, 0xe3, 0xa8, 0xf8, 0xaa, 0x8d, + 0x46, 0x1b, 0x6a, 0xaa, 0xf1, 0xfb, 0xc4, 0xe2, 0xca, 0x97, 0x64, 0xf1, 0x05, 0x5f, 0x4e, 0x95, + 0xe0, 0x03, 0xb9, 0xae, 0xc8, 0xe7, 0x54, 0xae, 0xb8, 0x7c, 0xa2, 0xa6, 0xba, 0x8c, 0xcd, 0xdb, + 0xab, 0x74, 0x5c, 0x1b, 0x6c, 0xdb, 0x4d, 0x3e, 0x91, 0xd3, 0x96, 0x3f, 0xce, 0x21, 0x04, 0xef, + 0x51, 0xab, 0xc3, 0x89, 0xcd, 0xf8, 0xb1, 0xa0, 0xc5, 0xa1, 0xa0, 0x3a, 0x90, 0x0c, 0xa8, 0xf5, + 0x10, 0xdd, 0x9f, 0x69, 0x20, 0xac, 0xd5, 0x16, 0x6e, 0xa6, 0xff, 0x78, 0xe6, 0xc3, 0xc3, 0x14, + 0x53, 0xf8, 0x74, 0xce, 0x86, 0x33, 0xd7, 0x93, 0xea, 0x6f, 0x4b, 0xf5, 0xb7, 0x59, 0xc9, 0x7b, + 0xf0, 0x3e, 0x54, 0xda, 0x3e, 0x4b, 0x7f, 0x76, 0xce, 0xcf, 0x7c, 0x81, 0x3f, 0xca, 0xa1, 0xe2, + 0x10, 0xf9, 0x7e, 0xa2, 0x64, 0xac, 0xf5, 0xa9, 0x45, 0x1b, 0x20, 0x0e, 0xb2, 0xaa, 0xc3, 0xd3, + 0xf1, 0xa5, 0x0f, 0x5c, 0x4a, 0xef, 0xee, 0xbe, 0x63, 0xe3, 0xd3, 0x3f, 0x50, 0xa1, 0xb2, 0x32, + 0x2a, 0xf1, 0x15, 0xad, 0xb2, 0x14, 0x20, 0x5e, 0xa5, 0x10, 0x3d, 0xba, 0x4c, 0x4a, 0xae, 0x0c, + 0x60, 0x83, 0x5d, 0x53, 0x7d, 0xbd, 0x94, 0x48, 0x4a, 0xa1, 0x95, 0x81, 0xe0, 0xa6, 0xf0, 0x1d, + 0x31, 0x14, 0x3c, 0x9f, 0xa3, 0x83, 0x3d, 0xe6, 0xa4, 0x83, 0xe5, 0x1a, 0xad, 0xce, 0x70, 0xa8, + 0xb0, 0x01, 0x1b, 0xf2, 0x40, 0x2c, 0x75, 0x72, 0xb2, 0xd8, 0xe8, 0x2b, 0x0a, 0x36, 0x24, 0xc0, + 0x8a, 0x17, 0x20, 0x56, 0xbc, 0x8b, 0xed, 0x99, 0xbe, 0xb3, 0xa5, 0x2b, 0xe6, 0xcf, 0x9b, 0x07, + 0x9c, 0x3a, 0x6f, 0xce, 0xfc, 0x79, 0xf3, 0x52, 0xbd, 0xe7, 0xb5, 0x17, 0xca, 0x2b, 0x9e, 0xd6, + 0xab, 0x9e, 0xce, 0xa9, 0x9a, 0x3f, 0x8f, 0xd6, 0xa9, 0x40, 0xb8, 0x18, 0xfb, 0xe3, 0xbd, 0x9f, + 0xb9, 0xd8, 0x3e, 0xfb, 0x9b, 0xca, 0x69, 0x71, 0xb7, 0xbf, 0x40, 0x05, 0xf2, 0x17, 0xa8, 0xbd, + 0xf8, 0x0b, 0x71, 0x03, 0x7f, 0xe1, 0x0a, 0x01, 0xff, 0x87, 0x87, 0x67, 0xd4, 0x19, 0x0b, 0x86, + 0xa5, 0x33, 0xce, 0x03, 0xdb, 0x46, 0x35, 0x51, 0xee, 0xf0, 0xd6, 0x09, 0x25, 0xc2, 0x38, 0xd0, + 0x8a, 0x32, 0xd7, 0xf7, 0x65, 0xfa, 0x8f, 0xd6, 0x54, 0x83, 0x61, 0xa2, 0xfa, 0xbb, 0xd2, 0xe6, + 0x9a, 0xa9, 0x2c, 0x02, 0x6d, 0x0e, 0x67, 0x42, 0x21, 0xb2, 0x68, 0x6d, 0x7a, 0xcf, 0xb9, 0xec, + 0xee, 0xbd, 0x64, 0x43, 0x39, 0xd5, 0xaa, 0xae, 0x54, 0xe6, 0x06, 0xe2, 0xe6, 0x40, 0x07, 0x24, + 0xbf, 0x2c, 0x1b, 0xec, 0xda, 0xaf, 0x0c, 0xb4, 0x7c, 0xdd, 0xf2, 0x9e, 0x6e, 0x85, 0xf1, 0x28, + 0x3b, 0x8f, 0x28, 0x3d, 0xd7, 0x34, 0xe0, 0xf4, 0xa1, 0x13, 0xaa, 0xe0, 0xb9, 0xfc, 0x1e, 0x91, + 0x66, 0xd4, 0x83, 0x66, 0xe8, 0x55, 0x29, 0xf8, 0xd2, 0x27, 0xae, 0xa5, 0x77, 0x77, 0x37, 0x62, + 0x28, 0x30, 0xdb, 0x12, 0xdb, 0x0a, 0x3b, 0x3c, 0x38, 0xc1, 0xff, 0x37, 0x17, 0xf2, 0x3a, 0xf5, + 0x78, 0x7f, 0xe8, 0x31, 0x3f, 0x36, 0xe8, 0x31, 0x4f, 0xd8, 0xea, 0x31, 0x52, 0x63, 0xac, 0x21, + 0x90, 0x94, 0xaa, 0xa2, 0x91, 0x8d, 0xe1, 0xfa, 0x61, 0x39, 0x2e, 0xe5, 0x41, 0x24, 0xa1, 0xc4, + 0x4c, 0x5f, 0x3b, 0xfd, 0x66, 0xe7, 0x08, 0xf4, 0x88, 0x49, 0x73, 0x4c, 0xdc, 0xad, 0xa3, 0xdd, + 0x06, 0xf3, 0xd1, 0x4e, 0x94, 0xc5, 0x17, 0x59, 0x36, 0x9d, 0xcf, 0xb0, 0x69, 0x99, 0x07, 0x96, + 0x71, 0xba, 0x63, 0x87, 0xd2, 0xdd, 0xa5, 0x12, 0xac, 0x6f, 0x5f, 0xf6, 0xf3, 0x33, 0x4a, 0xe7, + 0x55, 0xe2, 0x36, 0x8b, 0x69, 0xc9, 0x32, 0xf3, 0x1b, 0x68, 0x64, 0x38, 0xa6, 0xe2, 0x4b, 0x84, + 0x40, 0x95, 0x2c, 0x3e, 0xe7, 0x23, 0x45, 0x42, 0xb9, 0xda, 0x5c, 0x7b, 0x63, 0xcf, 0xb2, 0x76, + 0xad, 0x3a, 0xda, 0x8f, 0x5a, 0xe8, 0xf7, 0x08, 0xdb, 0x00, 0xd2, 0x9c, 0x9f, 0xb4, 0xd7, 0x7c, + 0x06, 0x6c, 0xe9, 0x29, 0x4c, 0x25, 0xba, 0xfb, 0xde, 0xd6, 0x54, 0xef, 0x79, 0xed, 0x6b, 0x84, + 0x03, 0xfe, 0xc9, 0x85, 0xdc, 0x56, 0x4d, 0xef, 0x8f, 0x95, 0xef, 0x37, 0xac, 0xfc, 0x47, 0x2c, + 0x0d, 0xee, 0xea, 0x16, 0x07, 0x4e, 0x0c, 0xb0, 0xd8, 0xc9, 0x15, 0x32, 0x4b, 0x05, 0xc3, 0x92, + 0x5f, 0x2d, 0x8b, 0x2b, 0xd0, 0x2b, 0x3e, 0x07, 0xaa, 0x50, 0x8a, 0xe6, 0xd0, 0xd2, 0x6e, 0xb5, + 0x7f, 0x31, 0x0a, 0x15, 0x6b, 0x23, 0xe1, 0x9f, 0x25, 0xf9, 0x87, 0xe9, 0xe2, 0xc6, 0x04, 0x22, + 0x45, 0xc2, 0x44, 0xb2, 0xd3, 0xf4, 0xed, 0x0b, 0x93, 0x8f, 0xd6, 0x54, 0x93, 0x14, 0xc3, 0xd5, + 0xfc, 0x73, 0x68, 0x54, 0x38, 0x12, 0x91, 0xe2, 0x35, 0xb5, 0x84, 0xb6, 0xd8, 0xb0, 0x48, 0xcb, + 0x84, 0x87, 0xc8, 0x58, 0xb6, 0xb7, 0x65, 0xae, 0xef, 0x4b, 0xf5, 0xf6, 0xd7, 0xd4, 0xfa, 0x69, + 0x1d, 0xff, 0x06, 0x1a, 0x13, 0x66, 0xce, 0x13, 0x64, 0x95, 0x3f, 0x23, 0x8b, 0x0b, 0x7d, 0x86, + 0x0a, 0x61, 0x16, 0xb0, 0x2f, 0xf1, 0xed, 0xb8, 0x78, 0x28, 0x73, 0xe1, 0x4c, 0xaa, 0xf7, 0x53, + 0x75, 0x27, 0xe8, 0xec, 0xc9, 0x6e, 0xbb, 0x0e, 0xd2, 0xda, 0x6f, 0x68, 0xc3, 0x3f, 0xc5, 0xea, + 0xfa, 0x78, 0xd2, 0xf0, 0xce, 0x33, 0x1e, 0xc6, 0x13, 0x8c, 0x35, 0x11, 0xf2, 0xe2, 0xed, 0x67, + 0x2e, 0x1a, 0xd1, 0x28, 0xd1, 0x1b, 0x6b, 0xcc, 0x9f, 0xea, 0x6f, 0x81, 0xd7, 0x06, 0xaf, 0x5c, + 0x3c, 0x4c, 0xe1, 0x1b, 0xa5, 0x46, 0xfe, 0x59, 0x56, 0xc5, 0x7f, 0x42, 0x16, 0x1f, 0x03, 0x15, + 0x7f, 0x1a, 0xc0, 0xd7, 0xd3, 0xce, 0xd9, 0x11, 0xce, 0x03, 0xad, 0x7f, 0x3e, 0x1a, 0xd1, 0x1c, + 0x0b, 0x12, 0x95, 0x1f, 0x93, 0x4a, 0xfd, 0x2d, 0x4c, 0x22, 0x8f, 0x70, 0xb1, 0x03, 0x5a, 0xa6, + 0xab, 0x75, 0x7d, 0x6d, 0x95, 0xa7, 0xa6, 0xda, 0xaf, 0xd6, 0xa9, 0x8c, 0x4a, 0xe4, 0x47, 0x11, + 0x65, 0xd4, 0x97, 0x35, 0xf9, 0xb1, 0x88, 0x6d, 0x08, 0x57, 0x90, 0x5a, 0x42, 0x6c, 0xe5, 0xda, + 0x0d, 0xe5, 0xea, 0xb1, 0x9b, 0x03, 0x1d, 0xe9, 0xab, 0x97, 0x95, 0xa3, 0x9f, 0xa9, 0xa3, 0x79, + 0xff, 0x84, 0x72, 0xf5, 0x58, 0xe6, 0x62, 0xbb, 0x26, 0x66, 0x5e, 0x44, 0xc5, 0x64, 0x3a, 0x9a, + 0x17, 0x11, 0x83, 0x05, 0x9e, 0x7b, 0xbd, 0x54, 0x98, 0x00, 0x9f, 0x08, 0xc7, 0x9a, 0x17, 0x01, + 0xef, 0xfb, 0xf5, 0x4a, 0x7e, 0x89, 0xe6, 0xd3, 0x00, 0xda, 0x3c, 0xc4, 0x72, 0x24, 0x3e, 0x0d, + 0x1e, 0xfa, 0x80, 0x5a, 0xf3, 0x6c, 0xc8, 0x9d, 0x33, 0xea, 0xe8, 0xb0, 0x98, 0x58, 0xa3, 0x40, + 0x33, 0x87, 0x1b, 0x28, 0x6c, 0x8d, 0x9a, 0x91, 0xd3, 0x45, 0x6e, 0x07, 0x60, 0x7a, 0x7a, 0x99, + 0xf1, 0x78, 0x18, 0x43, 0x0d, 0x4f, 0x8f, 0xfa, 0xb4, 0x42, 0x4a, 0xdf, 0x5c, 0x7f, 0x09, 0xdd, + 0xef, 0x21, 0x84, 0xc6, 0x07, 0x75, 0xa3, 0xbb, 0xca, 0x13, 0x38, 0xae, 0x46, 0x51, 0x65, 0x85, + 0x2c, 0x3e, 0xe3, 0xcb, 0xad, 0x13, 0x66, 0x81, 0x93, 0xaa, 0x7a, 0x06, 0xe9, 0x39, 0x9d, 0xea, + 0xdb, 0x97, 0xe9, 0x6a, 0x85, 0x6b, 0x1d, 0x90, 0xe5, 0x24, 0x6a, 0x56, 0x6e, 0xb3, 0x0a, 0x55, + 0x82, 0xa3, 0x17, 0x7c, 0xa3, 0xc9, 0xd5, 0x18, 0xee, 0x6a, 0x0e, 0x58, 0xbe, 0x09, 0x8f, 0xd1, + 0x75, 0x43, 0x74, 0x6a, 0x86, 0x91, 0x95, 0xcb, 0x07, 0x32, 0xa7, 0xfa, 0xbc, 0x67, 0x5d, 0xfa, + 0x35, 0x99, 0x08, 0xc2, 0xfc, 0x6e, 0x5a, 0x20, 0xbf, 0xed, 0x6d, 0x8a, 0xfa, 0xde, 0x38, 0xe0, + 0xcc, 0x64, 0xea, 0x87, 0xae, 0xc8, 0x71, 0x61, 0x90, 0xb9, 0x5b, 0x32, 0xb4, 0xba, 0xdf, 0xf4, + 0x27, 0xce, 0xf6, 0xda, 0x96, 0x41, 0x6b, 0x38, 0x9b, 0x49, 0xad, 0x2c, 0xae, 0x44, 0xcb, 0x7d, + 0x4e, 0xd4, 0x61, 0x77, 0x13, 0x86, 0xa8, 0x76, 0xbb, 0xc9, 0x3e, 0x8e, 0x78, 0xe1, 0x30, 0x5d, + 0xf1, 0xef, 0xa2, 0x82, 0xa4, 0x6e, 0x1b, 0x0a, 0xcb, 0xe2, 0x46, 0x1f, 0x2e, 0x10, 0x7e, 0x96, + 0xd3, 0x6b, 0x29, 0xb8, 0xdf, 0x92, 0xa2, 0xae, 0x56, 0x50, 0x35, 0xb4, 0x10, 0x83, 0x6b, 0xd6, + 0x8a, 0xab, 0xaa, 0x45, 0x7f, 0x75, 0xaa, 0xb7, 0x2f, 0x7d, 0x62, 0x87, 0xb2, 0x63, 0x3b, 0x80, + 0xab, 0x07, 0xa2, 0x25, 0xcb, 0xc4, 0xaa, 0x1f, 0xa7, 0x7a, 0xfb, 0x52, 0x03, 0x27, 0xd4, 0x33, + 0x33, 0x2e, 0x9f, 0xed, 0xc7, 0x5f, 0xf1, 0x5e, 0x77, 0x21, 0x0f, 0xc5, 0xb0, 0x32, 0x10, 0x09, + 0xbd, 0x19, 0x0e, 0x25, 0x37, 0xd5, 0x06, 0x82, 0x9b, 0x03, 0xf5, 0xb7, 0xac, 0xd6, 0x71, 0xb7, + 0x75, 0x5a, 0xe4, 0xbe, 0x3b, 0xb6, 0x21, 0x92, 0x66, 0x48, 0x02, 0x50, 0x03, 0xa0, 0xfa, 0xb1, + 0xb6, 0xcb, 0xa9, 0xbe, 0x5f, 0x2b, 0xbd, 0x67, 0x94, 0xee, 0xeb, 0x4a, 0x47, 0x9b, 0xf7, 0x7f, + 0xb8, 0xf0, 0x71, 0xdb, 0xae, 0xf9, 0xfd, 0xc1, 0x45, 0x41, 0x83, 0x2e, 0x36, 0x2b, 0x97, 0x8b, + 0x72, 0xf1, 0xb2, 0x71, 0x80, 0x30, 0x53, 0x07, 0xb8, 0x8a, 0xf0, 0x13, 0x79, 0xe6, 0x34, 0x34, + 0xb5, 0xec, 0xa9, 0x6d, 0x66, 0x29, 0x99, 0x43, 0x0f, 0x5b, 0x0d, 0x8f, 0x1f, 0x87, 0x5c, 0xe1, + 0x10, 0xb9, 0x99, 0x73, 0x85, 0x43, 0x3c, 0x4f, 0x9c, 0xcf, 0xe1, 0x26, 0x0e, 0x7c, 0xcb, 0x3d, + 0x68, 0x74, 0x44, 0x4a, 0xbe, 0x19, 0x8d, 0x6f, 0xd6, 0x35, 0x2b, 0x3f, 0x5b, 0xc4, 0xdc, 0x7f, + 0x15, 0x18, 0xee, 0xbf, 0xa6, 0xa1, 0xe2, 0x3a, 0xfa, 0x55, 0xac, 0x10, 0x15, 0xfa, 0xf5, 0x02, + 0xef, 0x17, 0x05, 0x68, 0x8a, 0xa6, 0x82, 0xae, 0x4e, 0xd4, 0x34, 0x06, 0xea, 0xef, 0xc7, 0xcb, + 0xaf, 0xff, 0x89, 0x33, 0xbd, 0xd6, 0x38, 0xcf, 0xc9, 0xe2, 0x19, 0x8e, 0x31, 0x44, 0x1e, 0xe1, + 0x06, 0x0f, 0x1c, 0x55, 0xb6, 0x75, 0x6a, 0xd7, 0x33, 0xa0, 0x7a, 0x0c, 0xb6, 0xb4, 0x2b, 0x2d, + 0x03, 0x15, 0xb5, 0xeb, 0x2a, 0x57, 0xd4, 0x54, 0x6d, 0xa8, 0x59, 0x29, 0x2e, 0x5b, 0x52, 0xaa, + 0xb4, 0x5d, 0x50, 0xda, 0x2e, 0x03, 0xf8, 0xec, 0xb2, 0x5a, 0x7f, 0xcd, 0x7a, 0x71, 0xed, 0x12, + 0x52, 0x07, 0x87, 0x27, 0x5a, 0xb7, 0xe6, 0x87, 0xa2, 0x7f, 0x49, 0xb5, 0xd6, 0x4c, 0x5d, 0x02, + 0xb4, 0x6a, 0xa5, 0xe8, 0x5f, 0xbe, 0x64, 0x2d, 0xad, 0xea, 0x7d, 0x4f, 0x39, 0xda, 0x47, 0xab, + 0x3c, 0xe2, 0x8a, 0x15, 0xe0, 0x83, 0x01, 0x25, 0x8c, 0x71, 0x73, 0x33, 0x7b, 0xc9, 0x59, 0xa8, + 0x7b, 0xac, 0x31, 0xb7, 0xc6, 0x8b, 0x95, 0xee, 0x6b, 0xca, 0x91, 0x73, 0xca, 0xb5, 0xcf, 0x94, + 0xce, 0x4b, 0xf4, 0xca, 0xb8, 0xcc, 0x03, 0x31, 0x23, 0x40, 0x6b, 0x81, 0x6e, 0xb5, 0x8b, 0x69, + 0xa2, 0x68, 0xc3, 0x12, 0x67, 0xee, 0x96, 0xa9, 0x1f, 0xac, 0xcd, 0x0a, 0xd0, 0x2e, 0x13, 0x18, + 0x77, 0x41, 0x72, 0xa0, 0xfb, 0x4f, 0x2e, 0x54, 0x62, 0x6e, 0x75, 0x7f, 0x88, 0x90, 0x57, 0x0c, + 0x22, 0x64, 0x4a, 0xae, 0x08, 0x21, 0xd8, 0xe4, 0x67, 0xb9, 0x58, 0x2f, 0x8b, 0x6b, 0xd0, 0xab, + 0x3e, 0x5b, 0x5a, 0x08, 0xb3, 0xcc, 0x24, 0x84, 0xc9, 0x71, 0x3e, 0xcd, 0x7d, 0x53, 0x88, 0x46, + 0x91, 0xae, 0xf8, 0xf9, 0x68, 0x54, 0x58, 0xfd, 0x43, 0xe3, 0xc3, 0x29, 0x98, 0x0f, 0x49, 0x99, + 0x50, 0x0c, 0xfd, 0xa9, 0xc7, 0x0b, 0x5a, 0xc6, 0xcf, 0x45, 0x85, 0x81, 0x86, 0x70, 0x20, 0x41, + 0xe8, 0x89, 0x1d, 0x93, 0xa1, 0x44, 0x18, 0x43, 0x3f, 0xff, 0x6b, 0x65, 0xef, 0x6e, 0x3f, 0x14, + 0xaa, 0x33, 0x16, 0x88, 0x07, 0x37, 0x11, 0xae, 0x83, 0x19, 0x53, 0x0b, 0x84, 0xf1, 0x00, 0x5d, + 0x55, 0xbb, 0x2e, 0x7d, 0xec, 0x4a, 0xfa, 0x58, 0xab, 0x1f, 0x17, 0xf3, 0x7e, 0x34, 0x3e, 0x9a, + 0xa8, 0x6a, 0x4a, 0x24, 0xa3, 0x8d, 0xe1, 0xb7, 0xe1, 0xb0, 0x07, 0x5c, 0x87, 0x5f, 0x7e, 0xe5, + 0xd6, 0x09, 0xbc, 0xd2, 0xdd, 0xa5, 0xec, 0xbc, 0x42, 0x0c, 0xe1, 0x70, 0x7b, 0x94, 0x0b, 0xc4, + 0x3f, 0x83, 0x46, 0x46, 0x13, 0x58, 0xe3, 0x2f, 0xd4, 0x0f, 0x53, 0xa4, 0x88, 0x3a, 0x3c, 0x90, + 0x35, 0x08, 0xca, 0x3e, 0xa9, 0xe3, 0x6b, 0x10, 0x4a, 0x48, 0xf1, 0xb0, 0x04, 0x8d, 0x47, 0xea, + 0x27, 0x0e, 0xa6, 0x58, 0x28, 0x61, 0x3b, 0x80, 0xab, 0x24, 0xfa, 0xa8, 0x40, 0x87, 0xe2, 0xc5, + 0x9c, 0x3b, 0x1c, 0xdc, 0x0d, 0xbd, 0xc3, 0x99, 0x46, 0xb8, 0x0a, 0xdf, 0xe1, 0x54, 0x78, 0x56, + 0xad, 0xf6, 0xaf, 0x14, 0x57, 0x94, 0x42, 0xf0, 0x81, 0xd9, 0x9a, 0xbc, 0xbd, 0xca, 0x8a, 0x22, + 0x38, 0xe0, 0xc1, 0xfd, 0x2a, 0x23, 0x8a, 0xda, 0x1d, 0x45, 0x91, 0xe7, 0xbb, 0x94, 0x45, 0x8c, + 0xe8, 0x09, 0xa2, 0x22, 0xc2, 0x0a, 0x70, 0x07, 0x64, 0x11, 0x1f, 0x86, 0x75, 0x2b, 0xf4, 0xc9, + 0xe2, 0x93, 0x3e, 0xad, 0x85, 0x30, 0x95, 0xac, 0x2b, 0xa3, 0x4b, 0x0c, 0x61, 0x16, 0x0d, 0xac, + 0xc2, 0x2b, 0x8b, 0x33, 0xd1, 0x74, 0x1f, 0x5d, 0xdc, 0xc6, 0x89, 0x85, 0x2e, 0xbc, 0x2b, 0xd1, + 0x68, 0xd6, 0xf9, 0xdb, 0x63, 0xf4, 0xe0, 0x86, 0x8d, 0xd2, 0xe0, 0xa1, 0x3d, 0xcd, 0xf4, 0x7a, + 0x90, 0xf1, 0x1b, 0xf1, 0xfe, 0x1b, 0xc7, 0xc8, 0xaa, 0x5a, 0x10, 0x7e, 0x89, 0xfb, 0x6f, 0x93, + 0xab, 0x58, 0x24, 0x8b, 0x0b, 0xd0, 0x7c, 0x9f, 0x2d, 0x2e, 0xcc, 0xb9, 0x09, 0x76, 0x05, 0x22, + 0xab, 0xff, 0xde, 0xc5, 0xd8, 0x41, 0xf5, 0x36, 0x0f, 0xc4, 0xed, 0x39, 0x8b, 0x53, 0x7e, 0x12, + 0x7b, 0x95, 0x2c, 0x2e, 0x47, 0x35, 0x3e, 0x7b, 0x8a, 0x30, 0x27, 0x25, 0x96, 0x8c, 0x76, 0x92, + 0x7a, 0x15, 0x1a, 0xc3, 0x76, 0x63, 0xf4, 0x52, 0x52, 0x89, 0x5a, 0xc0, 0x7a, 0x29, 0x79, 0xd0, + 0x68, 0xf2, 0x43, 0xbf, 0x2c, 0xf7, 0xb3, 0x45, 0xde, 0x6b, 0x23, 0xd0, 0xc3, 0xda, 0xd8, 0xd6, + 0xc7, 0x82, 0xf7, 0xe1, 0x4a, 0xe5, 0x5f, 0xa6, 0xf7, 0x4a, 0xb0, 0x29, 0x60, 0x49, 0x41, 0xee, + 0x95, 0x66, 0x50, 0x9f, 0x59, 0xbc, 0x2b, 0xe2, 0xe3, 0x0f, 0x78, 0xce, 0x92, 0xaf, 0x93, 0x7b, + 0xa6, 0x24, 0x7a, 0x28, 0xce, 0xbe, 0x4d, 0x63, 0xf6, 0x85, 0xa5, 0xb2, 0x58, 0xe5, 0x33, 0xd7, + 0x0a, 0x73, 0xc5, 0xb7, 0x9b, 0xe2, 0x92, 0x07, 0xd3, 0x2d, 0xd5, 0x7b, 0x71, 0x7d, 0x2c, 0xa8, + 0x59, 0xdf, 0x2c, 0x1f, 0x6d, 0x9a, 0xbb, 0xa8, 0x78, 0x51, 0x16, 0x9f, 0x47, 0xcf, 0xf9, 0x2c, + 0xe9, 0x2f, 0x3c, 0xaa, 0x2d, 0x0b, 0xf2, 0xac, 0x14, 0x2f, 0x8e, 0x4c, 0x57, 0x6b, 0x73, 0x2c, + 0x48, 0x38, 0xed, 0xaf, 0x5c, 0x68, 0x52, 0x4e, 0xdb, 0x07, 0xc2, 0xef, 0x95, 0xe2, 0x93, 0x1f, + 0x87, 0x11, 0x6b, 0x84, 0x35, 0x25, 0x4c, 0x64, 0x24, 0x4f, 0x8f, 0x18, 0x32, 0x9a, 0x79, 0x4c, + 0x55, 0xef, 0x69, 0x4f, 0xda, 0xf1, 0x88, 0x63, 0x8e, 0x47, 0x0f, 0x53, 0x27, 0x6d, 0x60, 0x28, + 0xe2, 0x45, 0xed, 0x46, 0x45, 0xe1, 0x58, 0xf3, 0xc2, 0xaa, 0x70, 0x88, 0xbc, 0xff, 0xf6, 0x6b, + 0xbf, 0x49, 0xdd, 0x22, 0x5c, 0x57, 0xa0, 0xd5, 0xe1, 0xdf, 0xfc, 0x02, 0x54, 0x18, 0x0c, 0x87, + 0xe2, 0x89, 0x92, 0x42, 0x4c, 0x8e, 0xe9, 0xb9, 0xe4, 0x10, 0x13, 0x89, 0x70, 0x22, 0x19, 0x88, + 0x24, 0x55, 0x68, 0x3f, 0xc0, 0xf2, 0xb3, 0xd0, 0xd8, 0x40, 0x03, 0x7e, 0x0c, 0x22, 0xd5, 0xc4, + 0x56, 0x35, 0x35, 0x82, 0x31, 0xd9, 0x6f, 0x2c, 0xf4, 0xbe, 0x84, 0xc6, 0x1a, 0x5a, 0xab, 0xd8, + 0xa8, 0xed, 0x29, 0x36, 0x41, 0x32, 0x36, 0xf5, 0x7f, 0xac, 0x56, 0xb9, 0xf0, 0x89, 0x4d, 0xfb, + 0xed, 0xfd, 0xfd, 0x42, 0xe6, 0xc0, 0xb6, 0x06, 0xbf, 0xab, 0xba, 0x6b, 0x12, 0xe2, 0xb6, 0xdf, + 0x75, 0xf0, 0x4b, 0x8d, 0x82, 0x02, 0x87, 0x9c, 0x23, 0x82, 0x62, 0x96, 0x9d, 0xa0, 0x00, 0x7f, + 0x79, 0x72, 0x98, 0x21, 0xe2, 0x62, 0x05, 0x31, 0x37, 0x83, 0x84, 0x50, 0x8f, 0x35, 0xc4, 0xdc, + 0x3c, 0xc7, 0xb6, 0x17, 0xcd, 0x72, 0xcc, 0x76, 0x07, 0xd6, 0xe7, 0xa5, 0xa8, 0x08, 0x5e, 0xac, + 0xd5, 0x54, 0x13, 0x75, 0x12, 0x74, 0x1d, 0x5a, 0x48, 0x77, 0x08, 0xe8, 0x0f, 0x4a, 0xb5, 0x81, + 0xf9, 0x35, 0x30, 0xfe, 0x67, 0x68, 0x6c, 0x38, 0xa2, 0x0a, 0x76, 0xa2, 0xcd, 0x90, 0xc8, 0xec, + 0x78, 0x78, 0xc6, 0x1a, 0xcd, 0xfe, 0xfc, 0xd9, 0x39, 0xa5, 0xed, 0x34, 0x79, 0x11, 0xc0, 0x3c, + 0x5e, 0x27, 0x84, 0x37, 0x36, 0xb2, 0x16, 0x92, 0x45, 0xc3, 0x11, 0x92, 0x30, 0x54, 0xf8, 0x52, + 0xbe, 0x42, 0xf2, 0x65, 0x59, 0x5c, 0x8c, 0x9e, 0xf7, 0xf1, 0xea, 0x2a, 0x34, 0x2e, 0x40, 0xe1, + 0x71, 0xdd, 0x1a, 0xc2, 0x50, 0xb5, 0x6c, 0xb0, 0xe5, 0xbd, 0xc1, 0xb6, 0xdd, 0xa9, 0xde, 0xdd, + 0xca, 0xde, 0x8e, 0x54, 0xdf, 0x3e, 0xef, 0xdf, 0xb0, 0x87, 0x47, 0xad, 0x8b, 0xfb, 0x43, 0x52, + 0xae, 0x33, 0x48, 0xca, 0xc9, 0xb9, 0xa2, 0x01, 0xb0, 0xb1, 0x7d, 0x72, 0xc3, 0x92, 0xc5, 0xea, + 0xad, 0xc0, 0x44, 0x03, 0x51, 0x8d, 0x36, 0x26, 0xb6, 0xad, 0x9d, 0x32, 0xd2, 0x59, 0x88, 0x46, + 0x42, 0x73, 0xfe, 0x49, 0xca, 0x5a, 0x20, 0x0a, 0x1e, 0x92, 0xc5, 0x71, 0x94, 0xb5, 0xe0, 0x3f, + 0xca, 0x3b, 0x0b, 0x98, 0xd5, 0xee, 0xd2, 0xcf, 0x97, 0xfa, 0x6a, 0x2f, 0x82, 0x2f, 0xd7, 0x54, + 0x33, 0x4b, 0x7b, 0x31, 0x42, 0xe4, 0x51, 0xa7, 0xfe, 0x28, 0x15, 0x1c, 0xf7, 0xf4, 0x62, 0x61, + 0x0c, 0x19, 0x32, 0x3d, 0x67, 0x69, 0x35, 0xfc, 0x8b, 0xa8, 0x58, 0x95, 0x68, 0xfe, 0x40, 0xc4, + 0xf8, 0x1e, 0x40, 0x2f, 0x15, 0x26, 0x40, 0x63, 0x4f, 0x4d, 0x6d, 0xf3, 0x42, 0x4f, 0x55, 0x4d, + 0xb5, 0xdf, 0xaf, 0x57, 0xf2, 0xaf, 0xa0, 0xb1, 0x54, 0x5a, 0x43, 0x1f, 0x85, 0xfa, 0x25, 0x91, + 0xb1, 0x86, 0xed, 0x67, 0x11, 0xf4, 0x63, 0x04, 0xd0, 0xde, 0xe4, 0x8e, 0xd4, 0x87, 0x01, 0xb2, + 0x63, 0x92, 0xce, 0x87, 0x47, 0xcf, 0xe9, 0x8e, 0x6f, 0x20, 0x23, 0x24, 0x34, 0x25, 0xd0, 0x1c, + 0x08, 0x37, 0x04, 0xea, 0x1a, 0xa4, 0x9a, 0x5a, 0x31, 0x14, 0x8a, 0x4b, 0x89, 0x04, 0x84, 0xf0, + 0x57, 0xb9, 0xbc, 0x00, 0xdc, 0xf0, 0xec, 0x60, 0x84, 0xb1, 0x4a, 0xfb, 0x27, 0xa9, 0xeb, 0x47, + 0x3c, 0x35, 0xb5, 0x9e, 0xf4, 0x81, 0x4b, 0x7e, 0x3b, 0x38, 0xc3, 0x45, 0x58, 0x91, 0xe5, 0x45, + 0x98, 0xf5, 0x20, 0xf5, 0x8b, 0xb0, 0x9f, 0xab, 0x9b, 0x02, 0x88, 0x9f, 0x62, 0xeb, 0xa0, 0x9f, + 0xa6, 0xb7, 0x62, 0xb4, 0x81, 0x30, 0x95, 0x74, 0x8e, 0x65, 0x53, 0xf6, 0x57, 0xe4, 0xd1, 0x23, + 0x18, 0x9a, 0xfc, 0x14, 0xaa, 0x42, 0xd5, 0x0a, 0xd1, 0x64, 0x1f, 0x59, 0x78, 0x74, 0xd6, 0xf5, + 0x88, 0x3d, 0x33, 0xab, 0x36, 0x49, 0xc1, 0xcd, 0x2a, 0xc1, 0xab, 0xa2, 0x91, 0x8d, 0x0d, 0xe1, + 0x60, 0x72, 0x69, 0x3c, 0xda, 0xb8, 0x3e, 0x16, 0xbc, 0xfd, 0x7d, 0xab, 0xd4, 0xb0, 0xef, 0x57, + 0xf2, 0xb2, 0x38, 0x9e, 0x3e, 0xce, 0x1a, 0x99, 0xea, 0xdb, 0xd7, 0x1c, 0x0b, 0x52, 0x5d, 0x40, + 0x20, 0xfb, 0x2c, 0xf3, 0x7e, 0x1a, 0x17, 0x08, 0x13, 0x21, 0x32, 0x78, 0xa6, 0xab, 0x55, 0xfd, + 0x49, 0x64, 0x38, 0xec, 0xc3, 0xfa, 0x8d, 0x40, 0xc1, 0xf0, 0xfd, 0xc7, 0x0c, 0xea, 0x73, 0xe1, + 0xb0, 0x0e, 0x7a, 0x44, 0x0d, 0x1d, 0x8a, 0x6e, 0xc2, 0x64, 0xd8, 0xca, 0xf0, 0xb8, 0xb7, 0x7f, + 0x9a, 0x39, 0xbf, 0x15, 0x50, 0xf1, 0xa6, 0x5d, 0xc8, 0x63, 0xdf, 0xf6, 0xfe, 0x90, 0xb3, 0x35, + 0x86, 0xdb, 0x32, 0xf3, 0xb9, 0x8f, 0x60, 0x85, 0x17, 0x2d, 0x96, 0x57, 0x20, 0x6d, 0xc7, 0x00, + 0x21, 0x48, 0x67, 0x20, 0x5b, 0x49, 0xc0, 0xd3, 0x21, 0x49, 0x22, 0xcc, 0x80, 0x25, 0xc3, 0xd2, + 0x92, 0x1d, 0x9b, 0x59, 0xdc, 0xce, 0x42, 0x63, 0xd8, 0x81, 0xa8, 0x6a, 0x28, 0x28, 0x8e, 0x9c, + 0x67, 0x84, 0xaa, 0x86, 0xe2, 0x1f, 0x5e, 0x79, 0x04, 0xf3, 0xe2, 0x74, 0x8d, 0x14, 0x6c, 0x8a, + 0x87, 0x93, 0x5b, 0xee, 0x54, 0x78, 0x95, 0x5b, 0xd3, 0xdc, 0x7e, 0x6e, 0xd6, 0xdc, 0x2a, 0x65, + 0xf1, 0x25, 0x76, 0x71, 0x0a, 0xcc, 0xe2, 0x2c, 0x1d, 0xfc, 0xe8, 0x98, 0x72, 0xa3, 0x2d, 0x35, + 0x70, 0xa2, 0x4c, 0x69, 0x1b, 0x50, 0xba, 0xaf, 0x65, 0x4e, 0x7d, 0xa9, 0x74, 0xf4, 0x65, 0xda, + 0x77, 0x2a, 0x72, 0x87, 0xb2, 0xbd, 0x6d, 0x70, 0xdb, 0xb9, 0x4c, 0xfb, 0xce, 0xd9, 0xac, 0x66, + 0x27, 0x59, 0xe9, 0x26, 0x05, 0xba, 0x43, 0x88, 0x85, 0x6e, 0x32, 0x13, 0xeb, 0x26, 0xa9, 0xde, + 0x8b, 0xc3, 0x38, 0xb1, 0xa9, 0x7d, 0x21, 0x01, 0x4e, 0xf3, 0x96, 0xa4, 0xa5, 0x46, 0x11, 0xa5, + 0xbb, 0x5d, 0x69, 0x3b, 0x97, 0xe9, 0x6f, 0x25, 0x47, 0xb5, 0xaf, 0x5d, 0x68, 0xa6, 0xed, 0xa4, + 0xdc, 0x1f, 0x2c, 0x52, 0x6b, 0x50, 0x45, 0x4c, 0xa7, 0x14, 0x03, 0x52, 0xf9, 0x9d, 0xdc, 0x58, + 0xa7, 0x24, 0x6b, 0x9a, 0x68, 0x6e, 0x5e, 0x46, 0x72, 0xda, 0xe9, 0x23, 0x5b, 0x47, 0x20, 0xac, + 0xd2, 0x2c, 0x97, 0xb6, 0xd4, 0x06, 0xc2, 0xf1, 0xef, 0xd7, 0xfb, 0xed, 0xae, 0xf7, 0xf9, 0xb2, + 0x38, 0x17, 0x95, 0xf9, 0xac, 0x88, 0xaa, 0xad, 0xf4, 0x9e, 0xed, 0x83, 0xf2, 0x69, 0xa5, 0x87, + 0xfa, 0xde, 0xfd, 0xa1, 0x0b, 0x0c, 0x4a, 0x3a, 0xf8, 0x03, 0x71, 0x4d, 0x43, 0xd0, 0x19, 0xfe, + 0x93, 0x99, 0x5c, 0x3a, 0x68, 0xfa, 0x35, 0xd0, 0xcd, 0x71, 0x3d, 0xff, 0x47, 0x0e, 0x8d, 0x22, + 0xed, 0x79, 0x1f, 0x2a, 0x5c, 0x2e, 0x6d, 0xd1, 0x56, 0x30, 0x76, 0x86, 0x86, 0x12, 0xa1, 0x08, + 0xfa, 0x52, 0x75, 0x6c, 0x5c, 0xc0, 0x2f, 0xc4, 0xcd, 0x98, 0xf7, 0x31, 0x98, 0xda, 0xb4, 0x4c, + 0x18, 0x43, 0xbe, 0x0d, 0xd3, 0x4e, 0x8b, 0xf9, 0xa5, 0x68, 0x74, 0xc8, 0x14, 0x71, 0x04, 0xeb, + 0x7f, 0x6c, 0xb9, 0xc0, 0x43, 0x6b, 0x43, 0xa8, 0x11, 0x16, 0x80, 0x06, 0x3a, 0xa2, 0x23, 0x17, + 0xc6, 0x6b, 0x4b, 0x84, 0x28, 0x69, 0xfb, 0x10, 0x1c, 0xc8, 0xd8, 0xa7, 0xa3, 0x1a, 0xaf, 0xfe, + 0x19, 0x67, 0xf9, 0xde, 0xf8, 0x3c, 0x27, 0x8b, 0xa1, 0x9c, 0xf7, 0x6a, 0x6b, 0xd9, 0xc7, 0x68, + 0x65, 0xcc, 0x8d, 0x06, 0x99, 0xbb, 0x32, 0x0f, 0x8d, 0xb4, 0x1c, 0x8e, 0xd4, 0x47, 0xf1, 0xe0, + 0xca, 0x3c, 0x98, 0xb3, 0xc9, 0x7f, 0xcd, 0xb1, 0x60, 0x99, 0x27, 0x12, 0x0d, 0x49, 0x98, 0x0d, + 0xca, 0x3c, 0xc9, 0x40, 0x62, 0xf3, 0x37, 0x95, 0x2f, 0xc7, 0x5f, 0xd4, 0xb4, 0x4d, 0xff, 0x43, + 0xa6, 0x2e, 0xfc, 0x85, 0xe0, 0x96, 0x55, 0x44, 0xbb, 0xf0, 0x17, 0x6b, 0x5d, 0xf8, 0x0b, 0xd4, + 0x2e, 0xee, 0xdc, 0xdb, 0xe7, 0x1f, 0xa1, 0x62, 0x9c, 0x5e, 0x04, 0x3f, 0x60, 0x1d, 0x81, 0x15, + 0xfd, 0xe7, 0x64, 0xb1, 0xdc, 0xa7, 0x97, 0x0a, 0x5e, 0x48, 0xdc, 0xa7, 0x65, 0x13, 0x59, 0xb6, + 0x72, 0xad, 0x07, 0x7e, 0xa4, 0x77, 0x7e, 0x76, 0x73, 0xa0, 0x03, 0xa7, 0x5c, 0x28, 0x10, 0x5c, + 0x9e, 0x1f, 0xf8, 0xf5, 0x56, 0xfc, 0xab, 0x68, 0x94, 0x14, 0x81, 0x84, 0x7c, 0x05, 0xb8, 0xdb, + 0x67, 0x70, 0xf8, 0x7d, 0x52, 0x26, 0x78, 0x55, 0xe6, 0xf8, 0xe8, 0x78, 0x3e, 0x9d, 0xd2, 0x36, + 0xfc, 0xd3, 0xa8, 0xb0, 0x21, 0xdc, 0x18, 0x4e, 0x12, 0x37, 0xc8, 0x99, 0xf8, 0x12, 0x10, 0x97, + 0x08, 0x63, 0xd2, 0x3d, 0x9d, 0x83, 0x27, 0xbf, 0xa0, 0xc9, 0xc1, 0x0a, 0x7c, 0x6a, 0x43, 0xa8, + 0xe3, 0xcb, 0x50, 0x41, 0x4c, 0xe5, 0x71, 0x70, 0x86, 0x2c, 0x51, 0xcf, 0x8d, 0xb8, 0x40, 0x18, + 0x39, 0x78, 0xf2, 0x8b, 0xcc, 0x89, 0xad, 0x14, 0x1c, 0x17, 0xf2, 0x55, 0x68, 0x64, 0x22, 0xdc, + 0x18, 0x6b, 0xa0, 0x69, 0xe7, 0xf0, 0xb1, 0x87, 0x14, 0x09, 0x33, 0x94, 0xce, 0xf3, 0xe0, 0xe6, + 0xe6, 0x89, 0xb2, 0x4b, 0xcb, 0x43, 0xc5, 0x33, 0xc0, 0xf1, 0x2d, 0x1c, 0x42, 0xf0, 0xa8, 0x78, + 0x55, 0x53, 0x43, 0x03, 0xc9, 0x19, 0x87, 0x9d, 0xfe, 0x99, 0x62, 0x61, 0x35, 0x84, 0x30, 0xd8, + 0x18, 0x68, 0x48, 0x48, 0x65, 0x60, 0xd7, 0x81, 0x5a, 0x70, 0x1d, 0xd4, 0x82, 0x76, 0x3f, 0xef, + 0x51, 0xae, 0x7f, 0x40, 0x92, 0xb0, 0xa5, 0x0f, 0x5d, 0xc1, 0xc9, 0x99, 0xad, 0xa0, 0xfd, 0x4c, + 0xe7, 0xfc, 0x4f, 0xd9, 0x2b, 0xa4, 0x62, 0xfd, 0x3d, 0x11, 0xf3, 0xe8, 0xbb, 0x5c, 0xcb, 0x0f, + 0x84, 0xdf, 0x12, 0x40, 0x9f, 0xe4, 0x15, 0x48, 0xff, 0xe7, 0x24, 0x93, 0x0c, 0x3c, 0xe8, 0xc6, + 0x2f, 0xb2, 0xd9, 0xb7, 0xcb, 0x3f, 0x65, 0x6f, 0x05, 0x10, 0xd3, 0xbd, 0x7e, 0xad, 0x6f, 0xdd, + 0x3d, 0x18, 0x99, 0xad, 0xbb, 0xd7, 0xaf, 0x15, 0x96, 0x68, 0xf7, 0x96, 0xa3, 0x19, 0xaf, 0x4d, + 0x72, 0x6f, 0xe9, 0x31, 0x76, 0x0c, 0x0f, 0xf4, 0xe1, 0x16, 0x33, 0x73, 0xf1, 0xc3, 0xc1, 0x96, + 0x76, 0xed, 0xee, 0x72, 0x39, 0xf3, 0x56, 0x7a, 0x0c, 0x8d, 0x28, 0x5b, 0xe6, 0xd3, 0x0a, 0x6d, + 0xba, 0xc2, 0xec, 0x4e, 0xba, 0xd2, 0x60, 0xf9, 0x45, 0xc8, 0xd5, 0x2c, 0x10, 0xa7, 0x4b, 0xec, + 0x52, 0xeb, 0x6a, 0x16, 0x84, 0xe9, 0x70, 0x96, 0x84, 0x23, 0x64, 0xb3, 0x80, 0xdd, 0x2c, 0x55, + 0xe1, 0x4b, 0x42, 0x1a, 0xb9, 0x9a, 0x05, 0xbe, 0x5a, 0xf3, 0x63, 0x1f, 0xa7, 0x07, 0x42, 0xa4, + 0x7e, 0xec, 0x33, 0x0d, 0x5e, 0xea, 0x50, 0x08, 0x94, 0x82, 0xb1, 0x68, 0x0e, 0xeb, 0x2a, 0x75, + 0x51, 0x85, 0xcf, 0x56, 0xac, 0x51, 0xbb, 0x0c, 0xfb, 0x90, 0x1e, 0x62, 0x58, 0x40, 0x8a, 0x03, + 0xef, 0x41, 0x72, 0x6b, 0x96, 0xd3, 0xf8, 0xfe, 0xd8, 0x3b, 0x5f, 0x37, 0x9c, 0x9e, 0xe6, 0xe4, + 0xee, 0x9d, 0xb6, 0x78, 0x55, 0x07, 0x92, 0x01, 0xc3, 0x71, 0x8a, 0xbc, 0x69, 0xc1, 0x2f, 0xc4, + 0x60, 0x2f, 0xf5, 0xf6, 0x70, 0xf0, 0x20, 0xd7, 0xb6, 0x03, 0x7e, 0x21, 0x2a, 0xc4, 0x6a, 0x11, + 0xa1, 0x0e, 0xbc, 0x24, 0xc4, 0x25, 0xc6, 0xc0, 0x05, 0x34, 0xe6, 0x09, 0xae, 0xe2, 0x5f, 0x43, + 0xa3, 0x60, 0xf4, 0x89, 0x12, 0x17, 0xde, 0xf2, 0xbd, 0x26, 0xcf, 0x0c, 0xe6, 0x8b, 0xd5, 0x52, + 0x32, 0x10, 0x6e, 0x20, 0xfb, 0x28, 0x69, 0x97, 0x33, 0x5c, 0x5a, 0xec, 0xbd, 0x5e, 0x80, 0x78, + 0x73, 0xdb, 0x3b, 0x13, 0x47, 0xa3, 0xc2, 0x62, 0x2f, 0xc1, 0x83, 0x62, 0xf7, 0x92, 0x62, 0xe8, + 0xc0, 0x93, 0xb3, 0x99, 0x2c, 0xce, 0x09, 0xa4, 0x01, 0x8f, 0xa4, 0x48, 0x20, 0x8d, 0x12, 0x58, + 0xd0, 0x1e, 0x0b, 0x1f, 0x6b, 0x12, 0x7f, 0x61, 0x61, 0x6e, 0x48, 0x0d, 0x20, 0x06, 0x5d, 0x53, + 0x63, 0x6e, 0x3d, 0x98, 0x46, 0xb6, 0xa5, 0x6d, 0xb8, 0xc1, 0x34, 0x3a, 0xf7, 0x65, 0xf6, 0x1f, + 0xb7, 0x08, 0xa6, 0xb1, 0x1e, 0xe1, 0x1d, 0x18, 0xef, 0x0e, 0xa3, 0x85, 0x87, 0x73, 0xa7, 0x74, + 0x6d, 0x20, 0xb1, 0x19, 0x38, 0x1c, 0x83, 0x09, 0x8f, 0x02, 0xd6, 0xd9, 0x9e, 0x33, 0x99, 0xfe, + 0xed, 0x66, 0xa7, 0x7b, 0xec, 0x21, 0xae, 0x02, 0xe2, 0x27, 0xc7, 0x54, 0x54, 0x15, 0xb1, 0x4f, + 0x8e, 0xa9, 0xa8, 0x1a, 0xc3, 0x0a, 0x27, 0x46, 0x2c, 0xcd, 0x37, 0xc6, 0x89, 0x20, 0xdc, 0x44, + 0x44, 0xe5, 0x18, 0x56, 0x38, 0x52, 0xb1, 0xe8, 0x3d, 0xee, 0x42, 0x63, 0x0d, 0xc7, 0x21, 0x7e, + 0x39, 0x1a, 0x9f, 0x60, 0x0b, 0x34, 0x2d, 0x10, 0x87, 0x6d, 0xcb, 0xad, 0x13, 0x46, 0x6b, 0xc7, + 0xa5, 0x9a, 0x6a, 0x7f, 0x6e, 0x2d, 0xbf, 0x0e, 0x3d, 0x64, 0x28, 0x62, 0xd4, 0x44, 0x1c, 0x30, + 0xc4, 0x5c, 0x2b, 0x8c, 0xd7, 0xcf, 0x5f, 0xe4, 0xa8, 0x60, 0x82, 0xe1, 0xab, 0xac, 0xb4, 0x47, + 0x3c, 0x3e, 0x83, 0xf6, 0xa8, 0x77, 0x05, 0x0a, 0xa4, 0x51, 0x75, 0x54, 0x97, 0x24, 0xf2, 0xf8, + 0x8c, 0xe8, 0x33, 0x6d, 0x88, 0x02, 0x79, 0x80, 0x43, 0x13, 0x57, 0x45, 0x43, 0x92, 0xc6, 0x65, + 0x24, 0xfc, 0xda, 0xf3, 0xa8, 0x60, 0x63, 0x20, 0xdc, 0x80, 0xed, 0x21, 0xa3, 0x85, 0x27, 0x73, + 0x67, 0xdf, 0xa2, 0x49, 0x4d, 0x64, 0x63, 0xd4, 0x8f, 0x1b, 0xf1, 0x22, 0x1a, 0x95, 0x68, 0x0a, + 0x06, 0xa5, 0x04, 0x15, 0x08, 0x79, 0xb7, 0xa7, 0xed, 0xbc, 0xab, 0xd1, 0x14, 0x1b, 0x18, 0xde, + 0x0d, 0x8f, 0xdd, 0x19, 0x97, 0x12, 0xed, 0x37, 0x1b, 0xd9, 0xc4, 0x65, 0x88, 0x6c, 0xe2, 0xfd, + 0xe7, 0x42, 0x34, 0xa1, 0x3a, 0x1e, 0x08, 0x63, 0xf7, 0x7f, 0xaa, 0x21, 0xbf, 0x83, 0x8a, 0xc8, + 0x03, 0x0a, 0x62, 0xf9, 0xa9, 0xdc, 0x20, 0x8b, 0x3f, 0xf1, 0x69, 0x85, 0x42, 0x2d, 0xfb, 0x68, + 0xa6, 0xa6, 0x56, 0x8f, 0x9f, 0x20, 0x93, 0x64, 0x96, 0x30, 0x8b, 0xe4, 0x5e, 0xa0, 0xaf, 0x63, + 0xb0, 0xa5, 0x3d, 0xd5, 0xdb, 0x72, 0x73, 0xa0, 0x03, 0xd2, 0x1b, 0x99, 0x61, 0xfc, 0x5a, 0xdf, + 0xfc, 0x7a, 0x73, 0xe4, 0xec, 0x67, 0x71, 0x88, 0x46, 0x5d, 0x71, 0x79, 0x34, 0x16, 0x0d, 0x65, + 0x6f, 0x6c, 0xcd, 0x9c, 0xed, 0xcf, 0x79, 0x95, 0xa2, 0x81, 0xe0, 0x63, 0xb6, 0x87, 0x63, 0x35, + 0x96, 0x38, 0x2a, 0x54, 0xe9, 0x91, 0x28, 0x19, 0x81, 0x31, 0xfa, 0x89, 0x2c, 0xfe, 0xd8, 0x07, + 0x25, 0x1a, 0x3a, 0xcc, 0x80, 0x0c, 0xc8, 0x18, 0xd0, 0xcc, 0x0b, 0x1d, 0xe8, 0x98, 0x7f, 0x18, + 0x15, 0x6e, 0xc4, 0x89, 0x61, 0x54, 0x79, 0x56, 0xe4, 0x87, 0x1f, 0xfc, 0x5c, 0xc4, 0xe3, 0x5c, + 0x93, 0xb5, 0x52, 0x3c, 0x1c, 0x0d, 0xad, 0x91, 0x82, 0xd1, 0x48, 0x28, 0x41, 0x5c, 0x59, 0x2d, + 0x6a, 0xf8, 0x79, 0x68, 0x22, 0x64, 0xde, 0x15, 0x1b, 0x1a, 0xf4, 0xe4, 0xbb, 0x58, 0x74, 0x15, + 0xf9, 0xad, 0xaa, 0xd4, 0xf9, 0x4e, 0x86, 0x1b, 0xa5, 0x68, 0x13, 0x18, 0xef, 0xc7, 0xfa, 0xe9, + 0x4f, 0xbe, 0x14, 0x8d, 0x87, 0x44, 0x71, 0x38, 0xe1, 0xb1, 0xba, 0xbb, 0x81, 0x76, 0xea, 0xcf, + 0x2d, 0x56, 0xd7, 0x53, 0x42, 0x6a, 0x90, 0x82, 0xc9, 0x28, 0x09, 0x14, 0xe2, 0xd7, 0x7e, 0x63, + 0xaf, 0x0f, 0x75, 0x7c, 0xa4, 0x1a, 0x11, 0xaf, 0x0f, 0xbd, 0x08, 0x7f, 0x27, 0x9c, 0x08, 0xd4, + 0x35, 0x48, 0x4b, 0x9a, 0xc3, 0x41, 0xcc, 0xb0, 0xa3, 0xc9, 0x77, 0x8c, 0xc5, 0xfc, 0x0f, 0xd1, + 0xcc, 0xc4, 0xe6, 0x70, 0xec, 0x47, 0x81, 0x70, 0x72, 0x69, 0x94, 0x24, 0x9d, 0x5b, 0x0b, 0xa3, + 0xa5, 0xa4, 0xc1, 0x59, 0x6d, 0xfd, 0x43, 0x81, 0xf1, 0x93, 0xd1, 0xc8, 0x50, 0x7c, 0x8b, 0xbf, + 0x29, 0x02, 0x4a, 0x9a, 0x9f, 0xfc, 0xf2, 0xb6, 0xba, 0xd0, 0x43, 0xcc, 0x1a, 0xbf, 0xdf, 0x8c, + 0x61, 0xea, 0x3e, 0xf3, 0x58, 0x1e, 0x92, 0x62, 0x28, 0x3d, 0xa7, 0xdd, 0x85, 0xc6, 0xa9, 0xcd, + 0xf4, 0x68, 0xe1, 0xfc, 0x8b, 0xb9, 0x32, 0x03, 0xee, 0xbb, 0xb5, 0x42, 0x61, 0x0c, 0xbb, 0xb6, + 0x29, 0x53, 0xe9, 0x72, 0xe5, 0x4d, 0x34, 0x9a, 0x8d, 0x71, 0x0e, 0x52, 0xad, 0xdc, 0x6a, 0xac, + 0xfa, 0x47, 0xe7, 0x32, 0xd1, 0xca, 0x97, 0x44, 0x92, 0xf1, 0x2d, 0xc4, 0x02, 0xc0, 0x86, 0x3b, + 0x27, 0xef, 0xda, 0xd2, 0x9f, 0x9d, 0xcb, 0x9e, 0xfd, 0x98, 0x5a, 0x00, 0x18, 0x00, 0xf7, 0x8b, + 0x68, 0x42, 0x6e, 0x37, 0xfc, 0x04, 0x34, 0x62, 0xb3, 0xb4, 0x85, 0xc8, 0x3e, 0xf5, 0x4f, 0xec, + 0x45, 0x11, 0x68, 0x68, 0x92, 0x34, 0x2f, 0x0a, 0xf5, 0x47, 0x85, 0xeb, 0x59, 0xce, 0xfb, 0xff, + 0xe7, 0xd0, 0x34, 0x08, 0x67, 0x6f, 0x1c, 0x9c, 0x66, 0x24, 0x58, 0x63, 0x0e, 0xd0, 0xfa, 0xb4, + 0x2c, 0x3e, 0xc5, 0x4a, 0xa1, 0x19, 0x24, 0xfb, 0x44, 0xfe, 0x22, 0x68, 0x15, 0x15, 0x41, 0x40, + 0xa8, 0x19, 0xce, 0x84, 0x22, 0x5e, 0xae, 0x20, 0xa2, 0xc6, 0xb0, 0x6f, 0x65, 0x88, 0x78, 0xf1, + 0xfe, 0xa3, 0x0b, 0x4d, 0xb7, 0xc1, 0xe2, 0xb7, 0x74, 0x91, 0x57, 0xac, 0x94, 0xc5, 0x57, 0xd0, + 0x0f, 0x7d, 0xce, 0x64, 0x11, 0x26, 0xb3, 0x53, 0xa7, 0xaf, 0x2b, 0xb3, 0x7d, 0x2c, 0xcd, 0xa1, + 0x62, 0xb5, 0x93, 0x15, 0x81, 0x3a, 0xa9, 0xe1, 0xb6, 0xd9, 0xe5, 0x67, 0x68, 0x64, 0x83, 0xda, + 0x11, 0x5d, 0x00, 0x8f, 0x5b, 0x21, 0x8c, 0x3f, 0x35, 0x17, 0xff, 0x4b, 0xf8, 0x03, 0x1c, 0x87, + 0xa1, 0xa5, 0xc6, 0x1a, 0x27, 0x76, 0x64, 0x2e, 0x7e, 0x49, 0xcd, 0x0e, 0x50, 0xe7, 0x7e, 0x0e, + 0x8d, 0x66, 0xda, 0x0d, 0x8b, 0x21, 0xae, 0x71, 0x68, 0x8a, 0x4e, 0x33, 0xe8, 0x85, 0xf2, 0x42, + 0x0d, 0x5d, 0xb6, 0x9c, 0xf5, 0x7b, 0x61, 0xad, 0xc5, 0x90, 0x2b, 0xd6, 0xc8, 0x56, 0xae, 0x3b, + 0xc3, 0x56, 0xde, 0x3f, 0x77, 0xa1, 0x12, 0xf3, 0xd8, 0x7f, 0x5b, 0x39, 0xa0, 0x4a, 0x16, 0x5f, + 0x46, 0x2f, 0xfa, 0x6c, 0x29, 0x22, 0x3c, 0xc4, 0x12, 0x18, 0xaf, 0x1c, 0xf3, 0xba, 0xff, 0x90, + 0xac, 0xfb, 0xb5, 0x81, 0x70, 0x24, 0x79, 0xdb, 0xeb, 0x7e, 0x95, 0x7a, 0x2e, 0x0c, 0x47, 0xb4, + 0x83, 0xf0, 0x24, 0xf3, 0xa9, 0x29, 0x1c, 0x49, 0x92, 0x75, 0x0e, 0x90, 0xda, 0x3a, 0xbf, 0x7c, + 0x52, 0x7b, 0x75, 0xea, 0x27, 0x75, 0x39, 0x8b, 0x15, 0x37, 0x1e, 0xd6, 0x62, 0x85, 0xcf, 0xdd, + 0x9d, 0xc5, 0xfa, 0x17, 0x86, 0xc5, 0x4a, 0xc7, 0xfe, 0xdb, 0xba, 0x58, 0x49, 0x64, 0x5e, 0x5b, + 0x8a, 0x08, 0x3c, 0x4b, 0x60, 0x98, 0x7e, 0xf3, 0x6a, 0x7d, 0x09, 0x8d, 0xfd, 0xa1, 0x14, 0x68, + 0x48, 0x6e, 0x22, 0x8b, 0x80, 0xa6, 0x0a, 0x31, 0x96, 0x0a, 0x25, 0xca, 0xd6, 0xd3, 0x4a, 0xdf, + 0xd5, 0xf4, 0xc7, 0x2d, 0xe9, 0xe3, 0xa7, 0xd3, 0x7b, 0x4e, 0x2b, 0x9d, 0x1f, 0x93, 0x28, 0xaf, + 0xdb, 0x5d, 0x68, 0x1c, 0x85, 0xbd, 0x0b, 0x53, 0xb1, 0x14, 0x15, 0x6b, 0xfe, 0x32, 0xe4, 0x5c, + 0x8b, 0xdf, 0x9d, 0xe8, 0xa5, 0x42, 0x09, 0x3b, 0x21, 0xa5, 0xc9, 0x78, 0x93, 0x54, 0x8e, 0xed, + 0xc6, 0xb3, 0xfd, 0x3a, 0x10, 0xf5, 0x64, 0xcb, 0x41, 0xc5, 0x12, 0x6f, 0x9b, 0xfb, 0xa0, 0xdd, + 0x1c, 0x18, 0x09, 0x69, 0x1e, 0x8d, 0x35, 0xc1, 0x4d, 0x52, 0x63, 0x80, 0xf2, 0xd6, 0xdc, 0xdc, + 0x5b, 0x4e, 0x7c, 0x47, 0xa4, 0xdd, 0x72, 0x8e, 0x4c, 0xf5, 0xed, 0xc3, 0xaf, 0x76, 0x48, 0x01, + 0x1d, 0x8f, 0x7d, 0x8f, 0xc2, 0x0c, 0xb0, 0x96, 0x92, 0xa0, 0x4c, 0xe7, 0x4e, 0xea, 0x31, 0x50, + 0x60, 0x62, 0x2e, 0x18, 0x73, 0xb8, 0xdc, 0xd6, 0x70, 0xf8, 0xa7, 0xd8, 0x77, 0x88, 0x64, 0x65, + 0x46, 0x40, 0x7c, 0xe1, 0xef, 0xb3, 0xc9, 0x6f, 0x2a, 0x16, 0xc8, 0xe2, 0x3c, 0x34, 0xd7, 0x67, + 0xfb, 0x75, 0x7a, 0x39, 0xc7, 0x0e, 0xdd, 0xfb, 0x7b, 0x23, 0x90, 0xfb, 0xd5, 0x26, 0x29, 0xbe, + 0xa5, 0x56, 0x8a, 0x37, 0x56, 0x6e, 0x11, 0xf1, 0x09, 0xa7, 0xa6, 0xda, 0x2f, 0xfd, 0x12, 0x1f, + 0xa9, 0x9e, 0x45, 0x88, 0x98, 0xb8, 0x37, 0xd0, 0x07, 0x92, 0xe4, 0x9e, 0x46, 0x2f, 0x16, 0x8a, + 0xcc, 0x41, 0x53, 0x43, 0x6a, 0x4b, 0xc2, 0x6c, 0x6a, 0x4b, 0xf6, 0x86, 0x47, 0x2f, 0x16, 0x8a, + 0xcc, 0x51, 0x5b, 0x43, 0xfc, 0x7c, 0x82, 0x34, 0xe3, 0xd2, 0x06, 0x48, 0xf3, 0xca, 0xbe, 0xeb, + 0x2a, 0xc6, 0x9f, 0xf4, 0x0d, 0x1e, 0xfa, 0xdc, 0x90, 0xf7, 0xe7, 0x45, 0x34, 0x3a, 0x49, 0x82, + 0xde, 0xa8, 0x5f, 0x2b, 0xd0, 0x5b, 0xb2, 0xe5, 0xc2, 0xe8, 0xf4, 0xb9, 0x93, 0xe9, 0x8f, 0x6e, + 0x0c, 0x7e, 0xb8, 0xbd, 0xa6, 0xda, 0x8f, 0x68, 0x4d, 0x4d, 0x88, 0x7f, 0x1e, 0x21, 0x72, 0x8f, + 0xac, 0x36, 0x2f, 0xd4, 0xaf, 0xb5, 0x99, 0x62, 0xec, 0x2b, 0x04, 0x2f, 0x84, 0x59, 0x5f, 0x21, + 0xb5, 0x71, 0x11, 0x5c, 0xad, 0x44, 0xe3, 0xc4, 0x38, 0x87, 0xef, 0x79, 0xb4, 0x42, 0xc6, 0xa4, + 0x47, 0xdf, 0x2c, 0x6b, 0x75, 0xf4, 0x51, 0xb1, 0xc3, 0x1c, 0x08, 0x33, 0x20, 0x6f, 0x12, 0xac, + 0xaf, 0x4c, 0x57, 0x6b, 0xaa, 0xf7, 0xfd, 0x54, 0xef, 0xae, 0xf4, 0x41, 0x12, 0xce, 0xd1, 0xbb, + 0xdf, 0x65, 0x37, 0x85, 0x78, 0xcd, 0x3d, 0x87, 0x8a, 0x02, 0xa4, 0x88, 0x4c, 0x20, 0x26, 0x8c, + 0x56, 0x28, 0x8c, 0x83, 0xfe, 0xe9, 0x6f, 0xbf, 0x56, 0xc3, 0x6f, 0x42, 0x45, 0x31, 0x29, 0xde, + 0xb8, 0x21, 0x98, 0x7c, 0x0b, 0xcf, 0xe0, 0x68, 0xc1, 0x97, 0x2b, 0x41, 0xed, 0xc7, 0x0d, 0x86, + 0x2e, 0xad, 0x03, 0x81, 0x67, 0xd1, 0xa0, 0xf6, 0x61, 0xb5, 0xb6, 0x2a, 0xf9, 0x56, 0xc5, 0xab, + 0xb2, 0xb8, 0x0a, 0xad, 0xf0, 0x39, 0xe0, 0x41, 0xef, 0x88, 0x49, 0x5a, 0x29, 0xa6, 0xaf, 0xaf, + 0x38, 0x6d, 0xc4, 0x5f, 0x71, 0xda, 0xf7, 0xbc, 0xfb, 0x38, 0x54, 0xa8, 0xf6, 0x94, 0xe0, 0x17, + 0xa1, 0x42, 0xb5, 0x94, 0x6e, 0xb0, 0xa6, 0x77, 0xff, 0x18, 0x0a, 0xfe, 0xc5, 0x6a, 0xa8, 0x1f, + 0xc0, 0xdd, 0xb5, 0x08, 0xe9, 0x85, 0x16, 0xba, 0x69, 0x19, 0xab, 0x9b, 0x8e, 0x16, 0x26, 0x9b, + 0x72, 0x4d, 0xe3, 0x2c, 0xd3, 0xac, 0xce, 0xba, 0x8f, 0x43, 0x53, 0x2d, 0x51, 0xbc, 0x45, 0x11, + 0x5e, 0x49, 0xb6, 0x37, 0x18, 0xc0, 0x24, 0x4b, 0xc4, 0x2c, 0x36, 0x34, 0xd6, 0x37, 0xcb, 0x2b, + 0xbb, 0x10, 0xaa, 0x8a, 0x36, 0x36, 0x42, 0x7e, 0xba, 0x7b, 0x7d, 0x43, 0xaf, 0x36, 0x6c, 0xe8, + 0x53, 0x4c, 0x24, 0x5f, 0x93, 0x8c, 0x37, 0x05, 0x93, 0x43, 0x6d, 0xe2, 0x34, 0xef, 0x90, 0x8e, + 0xb7, 0x30, 0x66, 0xb0, 0xa5, 0x2b, 0xb3, 0x9f, 0xb8, 0x1d, 0x78, 0x3f, 0x76, 0xa1, 0x71, 0x50, + 0x49, 0x76, 0x82, 0x7b, 0x9e, 0x30, 0xcb, 0x0c, 0x84, 0x71, 0x9b, 0x08, 0xa3, 0xe2, 0x01, 0x59, + 0xcf, 0x87, 0xa0, 0xcd, 0x6c, 0x59, 0x7c, 0x02, 0xcd, 0xf2, 0xe5, 0xa0, 0x2f, 0xf0, 0x40, 0x1f, + 0xd6, 0x39, 0xc3, 0xbb, 0x02, 0x61, 0x17, 0xf4, 0xca, 0xe5, 0x24, 0xb8, 0x3a, 0xa8, 0x32, 0xe4, + 0x91, 0x9c, 0x45, 0x15, 0xcd, 0x6a, 0x95, 0xea, 0xdb, 0x07, 0x71, 0x75, 0x0c, 0x3b, 0xe7, 0x91, + 0x02, 0xf2, 0x74, 0xa7, 0x6a, 0x6d, 0x34, 0x16, 0x6d, 0x88, 0xd6, 0x6f, 0xa1, 0x22, 0xec, 0x3a, + 0x67, 0xb6, 0x6d, 0x1c, 0xe3, 0x64, 0xb1, 0x85, 0x63, 0x35, 0xdb, 0x04, 0xdd, 0x4c, 0xca, 0xe0, + 0x8a, 0x34, 0xbd, 0xab, 0x5d, 0xd9, 0xd3, 0x4f, 0x12, 0x22, 0xf4, 0x5c, 0x53, 0xfa, 0xf6, 0x63, + 0xe1, 0xd9, 0xa5, 0xbc, 0x7f, 0x32, 0xbd, 0xeb, 0x83, 0x74, 0xfb, 0xbe, 0xaf, 0x5b, 0xde, 0x83, + 0x6b, 0xea, 0xf4, 0xa1, 0x13, 0xe9, 0x03, 0x3b, 0x69, 0x73, 0x48, 0x47, 0xaf, 0xb6, 0xee, 0x3c, + 0x08, 0x37, 0x91, 0x38, 0x0e, 0xb1, 0x65, 0x17, 0xdf, 0x54, 0x4e, 0x89, 0x4f, 0x9a, 0xc0, 0x59, + 0x24, 0x08, 0x66, 0xad, 0x28, 0xaa, 0x28, 0x82, 0xd0, 0xc8, 0xb0, 0x12, 0xde, 0x91, 0xc5, 0xb7, + 0x68, 0x68, 0xe4, 0x68, 0xb0, 0x31, 0x54, 0x47, 0xc3, 0x23, 0x97, 0xa6, 0x8f, 0xef, 0x4d, 0xf5, + 0x7d, 0xa8, 0x65, 0xbe, 0x26, 0x39, 0xaf, 0x49, 0x48, 0xde, 0x2b, 0xa9, 0xfe, 0x83, 0x14, 0x32, + 0xd3, 0xd5, 0x0a, 0x23, 0xd0, 0xf2, 0x0a, 0x10, 0xf1, 0xd8, 0xd5, 0x9a, 0x3e, 0x4c, 0x72, 0x3c, + 0xc2, 0x43, 0x50, 0x68, 0xa1, 0xec, 0x3b, 0x0c, 0xf0, 0x34, 0xaa, 0xf2, 0x26, 0x34, 0x7a, 0x63, + 0xb8, 0x01, 0x3b, 0x1d, 0xd3, 0xe4, 0x8c, 0x56, 0xcb, 0xa6, 0x32, 0x1a, 0x6d, 0x80, 0x65, 0x83, + 0x1f, 0x60, 0xb0, 0x6d, 0x84, 0x12, 0x92, 0x56, 0xf2, 0x72, 0x67, 0x76, 0xff, 0x75, 0xbc, 0x2b, + 0x7f, 0x9a, 0x3e, 0xda, 0x97, 0xbe, 0x7c, 0xc2, 0xcf, 0x82, 0xd1, 0x1c, 0x72, 0xd6, 0x73, 0x2b, + 0xcc, 0x62, 0xe3, 0x40, 0xa7, 0x7a, 0xfb, 0xd5, 0x1e, 0x70, 0x3e, 0x6f, 0x18, 0x2e, 0x59, 0x1b, + 0x9f, 0x14, 0xe2, 0xdc, 0xc4, 0x95, 0x9b, 0xd7, 0x44, 0x63, 0x09, 0x1a, 0xdf, 0x0e, 0xd6, 0x26, + 0xdd, 0xe5, 0x50, 0x5d, 0x53, 0x22, 0x1c, 0x91, 0x12, 0x09, 0x6d, 0x89, 0x80, 0xba, 0xa1, 0x17, + 0x0b, 0x45, 0x94, 0x7a, 0x7e, 0xa6, 0x94, 0xff, 0x19, 0xb3, 0x7f, 0xbb, 0x74, 0xc7, 0x34, 0x7d, + 0xff, 0x5e, 0x90, 0xed, 0x39, 0x0d, 0xdb, 0x8e, 0x72, 0xf4, 0x9c, 0x72, 0xfd, 0x03, 0xa5, 0x7d, + 0x37, 0x1d, 0xee, 0xae, 0xf4, 0xd1, 0x76, 0xd8, 0x8b, 0x54, 0xc2, 0x63, 0xed, 0x82, 0x5e, 0x0f, + 0xd0, 0xe6, 0xfc, 0x51, 0x0e, 0x8d, 0xa3, 0xba, 0xc6, 0x1a, 0xac, 0x96, 0x11, 0xd5, 0x26, 0x29, + 0x8b, 0xaf, 0xf9, 0x72, 0xaa, 0x84, 0xa5, 0xd0, 0x4b, 0xfa, 0xa3, 0xd3, 0xe9, 0xbe, 0xbd, 0x65, + 0x1e, 0x3a, 0xce, 0xf4, 0xce, 0x83, 0xd9, 0x96, 0xb6, 0x20, 0xe6, 0x49, 0x08, 0x57, 0x09, 0x4a, + 0x57, 0xfa, 0x8b, 0xad, 0x99, 0x73, 0xbb, 0xd2, 0x3b, 0x0f, 0xaa, 0x73, 0x81, 0xdf, 0x29, 0x43, + 0xc9, 0x37, 0x95, 0x93, 0xe3, 0x0f, 0xfb, 0x8b, 0x68, 0x73, 0xff, 0x48, 0x68, 0xea, 0xff, 0x81, + 0x3f, 0xe7, 0x83, 0xfc, 0xbf, 0x72, 0xa8, 0x30, 0x11, 0x8c, 0x6a, 0xef, 0xc7, 0xff, 0x8e, 0x93, + 0xc5, 0x01, 0xce, 0x07, 0x65, 0xc2, 0xa7, 0x5c, 0xdd, 0xe6, 0x0d, 0x75, 0xe1, 0xb7, 0x37, 0x84, + 0x43, 0x9e, 0xf4, 0xc7, 0x2d, 0x99, 0xcf, 0xd5, 0x15, 0x96, 0xba, 0x7e, 0x54, 0x15, 0x05, 0xc7, + 0x8f, 0xcf, 0xd5, 0xbd, 0x11, 0xd4, 0x65, 0xac, 0x02, 0x96, 0xa5, 0x2f, 0x9e, 0x4a, 0x1f, 0xba, + 0xa2, 0xc1, 0xa6, 0x0f, 0xf7, 0x64, 0xfa, 0xf7, 0x41, 0x88, 0x15, 0x4f, 0xd5, 0xca, 0xea, 0x4a, + 0x0f, 0xd0, 0xce, 0x53, 0x53, 0xed, 0x49, 0xf5, 0xf6, 0x79, 0xf4, 0xee, 0xb5, 0xe8, 0xfb, 0x65, + 0x2a, 0x8d, 0x5b, 0x06, 0xd4, 0x5a, 0xa2, 0x4f, 0x7a, 0xd2, 0x87, 0xae, 0x28, 0x3b, 0x8f, 0x40, + 0xa7, 0x00, 0xe4, 0xd0, 0x1e, 0x33, 0xa5, 0xbf, 0x88, 0x8e, 0xc8, 0x3f, 0x8a, 0xf4, 0xe2, 0xff, + 0x81, 0x1f, 0xb0, 0xaa, 0x78, 0x43, 0x16, 0x5f, 0x43, 0xeb, 0x7d, 0x8e, 0x4b, 0x4a, 0x73, 0x4f, + 0x60, 0x66, 0x15, 0x56, 0x23, 0x48, 0xeb, 0xaf, 0x38, 0x66, 0x11, 0x7d, 0xc5, 0x69, 0xf3, 0xed, + 0xbd, 0xe6, 0x42, 0xd3, 0x6d, 0x3a, 0xbe, 0x0b, 0x27, 0x35, 0xfa, 0x5a, 0x66, 0x84, 0xf5, 0xeb, + 0x5d, 0x3a, 0x3e, 0xec, 0xc5, 0xcd, 0xc6, 0x3b, 0x32, 0xa0, 0x6d, 0xd2, 0x1a, 0x2a, 0xd6, 0xc9, + 0xa2, 0x1f, 0xd5, 0xfa, 0x9c, 0x11, 0xb5, 0x24, 0x21, 0xee, 0x8b, 0x92, 0xd0, 0xc2, 0x7a, 0x39, + 0x86, 0x1d, 0x12, 0xef, 0x45, 0x63, 0xe8, 0x7a, 0x65, 0xee, 0x09, 0x0d, 0x65, 0xfc, 0x0c, 0xa4, + 0xeb, 0xf2, 0x5a, 0xf6, 0x04, 0xbd, 0x44, 0xad, 0x67, 0x64, 0xc3, 0x08, 0x7c, 0x35, 0xc3, 0x0a, + 0x00, 0x2f, 0x1a, 0x43, 0x7f, 0xe9, 0x3e, 0xa3, 0x7e, 0x43, 0x19, 0x5f, 0xa2, 0xe7, 0x8c, 0x86, + 0x84, 0x0a, 0x5a, 0x0a, 0xe8, 0xc9, 0x68, 0xa4, 0x14, 0x0a, 0x6b, 0xca, 0xbf, 0x9f, 0xfc, 0x32, + 0xbe, 0x42, 0x1e, 0x95, 0x93, 0x2b, 0xc1, 0x9b, 0xb2, 0x12, 0x68, 0xf8, 0xe6, 0xf4, 0xf6, 0x05, + 0xda, 0x73, 0x66, 0x7a, 0x90, 0xa6, 0x7a, 0xb1, 0x50, 0x04, 0x93, 0x62, 0x38, 0x08, 0x19, 0x65, + 0xe1, 0x88, 0xef, 0x46, 0x16, 0x16, 0xdc, 0x93, 0xb2, 0xb0, 0xf0, 0x7b, 0x59, 0xc8, 0xac, 0xc6, + 0x1c, 0x46, 0xc6, 0x4a, 0x51, 0x5e, 0xb2, 0xf0, 0x3f, 0x5a, 0xc9, 0x42, 0xe8, 0xf8, 0x2e, 0xc8, + 0xc2, 0x5f, 0x68, 0xb2, 0x90, 0xb3, 0x72, 0x6e, 0xa2, 0xe3, 0x03, 0xe7, 0x24, 0x2c, 0x11, 0x05, + 0x59, 0x2c, 0x27, 0x12, 0xf1, 0x49, 0x40, 0x1e, 0xfa, 0xcc, 0x74, 0xb5, 0x2a, 0x6d, 0xe7, 0x94, + 0xcb, 0x2d, 0x84, 0x16, 0x66, 0x01, 0x49, 0xc8, 0xea, 0x8c, 0x3d, 0xd5, 0x7e, 0x08, 0x5d, 0x4d, + 0x3d, 0xda, 0x89, 0xc9, 0x46, 0xc4, 0x9b, 0x07, 0xcb, 0x7b, 0x74, 0x2b, 0xc8, 0xba, 0x78, 0x03, + 0x8d, 0xd2, 0xc1, 0x14, 0xf1, 0x4f, 0xa3, 0x91, 0xf8, 0x30, 0x4a, 0xcd, 0xda, 0xd3, 0x2d, 0x1e, + 0xf5, 0xe0, 0x87, 0xd1, 0x70, 0x72, 0x25, 0xc0, 0xde, 0x0d, 0x68, 0xac, 0xa1, 0xc2, 0xe2, 0x2c, + 0x6c, 0x15, 0x31, 0xeb, 0x61, 0x54, 0x18, 0x8e, 0x84, 0xa4, 0xb7, 0x88, 0xc8, 0x85, 0x1f, 0x2a, + 0x64, 0x48, 0x4a, 0x04, 0x89, 0x94, 0xc5, 0x7f, 0x7b, 0xb3, 0x1c, 0x5e, 0x26, 0x35, 0x91, 0x88, + 0x14, 0xa7, 0x88, 0xe1, 0x2f, 0x69, 0x46, 0xf2, 0x45, 0xe6, 0x13, 0x00, 0xb6, 0x86, 0x33, 0xfa, + 0x7f, 0x91, 0x55, 0x0a, 0xa0, 0x67, 0x4c, 0xca, 0x1d, 0x38, 0x29, 0x69, 0x02, 0x6d, 0x0c, 0x89, + 0x7e, 0x82, 0x65, 0x1a, 0x63, 0x98, 0x21, 0x61, 0x85, 0x9c, 0x87, 0x25, 0xcc, 0x23, 0xf3, 0x87, + 0x63, 0xe8, 0x65, 0x6f, 0xec, 0xcd, 0xf4, 0x7f, 0x8e, 0x7d, 0x2f, 0xba, 0xd3, 0xbd, 0x9f, 0xa6, + 0x8f, 0x7f, 0x40, 0xf9, 0xe5, 0xf0, 0xe0, 0x8e, 0x4e, 0xa2, 0xc9, 0xfe, 0xb1, 0x0b, 0xcd, 0xb0, + 0xeb, 0xf3, 0x2e, 0xb0, 0xc4, 0x7a, 0x83, 0x7a, 0x30, 0xdd, 0x8e, 0x25, 0xe0, 0x08, 0x60, 0xa1, + 0x1f, 0x00, 0x6a, 0xe6, 0xe5, 0x2f, 0xc9, 0x62, 0x1d, 0xfa, 0xb9, 0x6f, 0x08, 0x54, 0x85, 0x39, + 0xf9, 0xd3, 0x4f, 0x69, 0x19, 0x30, 0x33, 0xc2, 0x16, 0x34, 0xd6, 0xd0, 0xb3, 0x65, 0x68, 0x02, + 0xba, 0xe2, 0x5c, 0xfa, 0x8a, 0x53, 0xd7, 0x66, 0x5c, 0xda, 0x48, 0xb3, 0xd2, 0xfb, 0xe1, 0x87, + 0x5a, 0x9a, 0x8c, 0x07, 0x22, 0x34, 0x80, 0x1b, 0xfc, 0xd0, 0xef, 0x20, 0x0b, 0x99, 0x3b, 0x48, + 0xef, 0x9f, 0x17, 0xa2, 0xc9, 0xd5, 0x52, 0x5d, 0x53, 0x3d, 0x61, 0xef, 0x40, 0x62, 0xb3, 0x9e, + 0x8c, 0xdf, 0xbc, 0x77, 0x7b, 0x6c, 0xf7, 0x6e, 0x6a, 0x14, 0x64, 0xb7, 0xf0, 0x97, 0x2d, 0xb6, + 0x70, 0x8f, 0xed, 0x16, 0xae, 0xf5, 0xc0, 0xec, 0xe4, 0xeb, 0x4d, 0x3b, 0x79, 0x85, 0x2c, 0xce, + 0x63, 0x16, 0xfe, 0x2c, 0x6d, 0xbb, 0x4e, 0xb7, 0x9f, 0xcd, 0x9e, 0xec, 0xc8, 0xf6, 0x9c, 0x86, + 0xfe, 0x32, 0x5d, 0xad, 0xf1, 0xe4, 0x5b, 0xc0, 0x10, 0x26, 0x83, 0xe5, 0xbd, 0xbe, 0x83, 0xef, + 0xe4, 0x50, 0x51, 0x90, 0xc8, 0x2a, 0x12, 0x3c, 0x62, 0xa1, 0x29, 0x1b, 0x83, 0xe5, 0xac, 0x69, + 0xb2, 0x0f, 0xae, 0xb0, 0x17, 0xc9, 0xe2, 0x02, 0x9f, 0xd6, 0x95, 0xf0, 0x24, 0xbb, 0x44, 0x89, + 0x8b, 0xa2, 0xbe, 0x07, 0xe0, 0xf5, 0x89, 0xe5, 0xb6, 0x5f, 0x6b, 0xe2, 0x7e, 0x5e, 0x97, 0x9a, + 0xc3, 0xbe, 0xdd, 0xae, 0x48, 0xc8, 0x62, 0x0c, 0x45, 0x7c, 0x36, 0x2b, 0x4c, 0x98, 0x95, 0xbd, + 0xb4, 0x2d, 0xdb, 0x73, 0xc0, 0x3c, 0x28, 0xd6, 0x81, 0x3a, 0x67, 0x57, 0x66, 0x56, 0x07, 0xb3, + 0x45, 0x7f, 0xc5, 0x69, 0x23, 0xf6, 0xfe, 0x99, 0x0b, 0x4d, 0x31, 0x7d, 0xf0, 0x2e, 0x08, 0xa5, + 0x4d, 0x86, 0x7d, 0xfa, 0xb1, 0x21, 0xe6, 0x0f, 0x6f, 0xd4, 0xd8, 0x4b, 0x1e, 0x44, 0x93, 0x3d, + 0x6d, 0x98, 0x3d, 0x95, 0x88, 0xa9, 0x9f, 0xc9, 0xe2, 0x1b, 0xe8, 0xc7, 0x3e, 0x3b, 0xac, 0x6f, + 0x5b, 0x3e, 0xbd, 0x84, 0x26, 0x5a, 0x8c, 0x96, 0x2f, 0x25, 0x2e, 0xb9, 0x9c, 0xbd, 0x4b, 0x2e, + 0x38, 0xd9, 0x7a, 0x6f, 0x8e, 0x46, 0xe3, 0xb1, 0x09, 0x6d, 0x65, 0x34, 0xd4, 0xd4, 0x20, 0x2d, + 0x6d, 0x08, 0xd4, 0xf3, 0xeb, 0x72, 0x6f, 0x91, 0x9e, 0x97, 0xc5, 0x67, 0xf5, 0x5b, 0xa4, 0x39, + 0x95, 0x55, 0x6b, 0x20, 0x32, 0xa1, 0x96, 0x33, 0x26, 0xd5, 0xb7, 0x4f, 0x0b, 0xfd, 0x9a, 0xdd, + 0x75, 0x39, 0x7d, 0x70, 0x87, 0x16, 0xf2, 0x5b, 0xbf, 0x6c, 0x0a, 0xa0, 0x51, 0xcd, 0x24, 0x01, + 0x32, 0xcc, 0xd8, 0x32, 0x59, 0xac, 0xf6, 0xd1, 0x32, 0xe1, 0x39, 0xad, 0x13, 0x78, 0x29, 0x50, + 0xaa, 0x9c, 0x79, 0x6f, 0xed, 0xf2, 0x25, 0x15, 0x9e, 0xf9, 0x73, 0x85, 0x79, 0x73, 0x17, 0x95, + 0xcd, 0x9f, 0x3b, 0xff, 0xd9, 0xb9, 0x0b, 0xd5, 0xff, 0x16, 0xce, 0x5d, 0x30, 0x27, 0xb9, 0xf9, + 0xd9, 0x84, 0xfa, 0xf7, 0xa2, 0xb9, 0x0b, 0x66, 0xfb, 0x69, 0x1f, 0x7c, 0x1b, 0x87, 0x8a, 0x1a, + 0x31, 0x22, 0x9a, 0xc7, 0x35, 0x8e, 0x61, 0xab, 0x15, 0x0a, 0xaf, 0x67, 0xfa, 0x5b, 0x53, 0xfd, + 0x57, 0xe0, 0x76, 0xa7, 0x74, 0x79, 0x53, 0x9d, 0x24, 0xd6, 0xd6, 0xac, 0x91, 0xe2, 0xcd, 0x52, + 0xfc, 0xe6, 0x40, 0x87, 0xfa, 0xbb, 0x2a, 0x1a, 0x49, 0xc6, 0xa3, 0x0d, 0x0d, 0xb8, 0x60, 0x49, + 0x32, 0x18, 0x22, 0xe5, 0x6b, 0x82, 0x9b, 0x24, 0xb5, 0x13, 0xb5, 0x78, 0x73, 0x53, 0x9d, 0xd4, + 0x20, 0x25, 0xbf, 0x6e, 0xd9, 0x1a, 0x6f, 0x8a, 0x24, 0xc3, 0x8d, 0x52, 0xe6, 0x62, 0xfb, 0x6c, + 0xbf, 0xf6, 0x15, 0x7e, 0x21, 0x2a, 0xda, 0xd8, 0x10, 0xa8, 0x67, 0x5e, 0x08, 0x62, 0x65, 0x42, + 0x2b, 0x14, 0x8a, 0x81, 0x83, 0x94, 0xbd, 0xbb, 0xfd, 0x5a, 0xa1, 0xaa, 0x4b, 0xa8, 0x7f, 0x57, + 0xab, 0x7b, 0x09, 0xf3, 0x9c, 0x5c, 0x2b, 0x14, 0xc6, 0x40, 0x2b, 0xe2, 0xc5, 0xab, 0x95, 0xf3, + 0x4b, 0xd1, 0x98, 0x90, 0xb4, 0x31, 0xd0, 0xd4, 0x00, 0xea, 0x13, 0xb9, 0x25, 0xc2, 0x99, 0xa1, + 0x0d, 0x15, 0xc2, 0x78, 0xe8, 0x00, 0x0e, 0x12, 0x4a, 0xcb, 0x80, 0xdf, 0x50, 0xcd, 0x57, 0xa0, + 0x91, 0x52, 0x04, 0x5f, 0xb9, 0xc2, 0x4b, 0x1f, 0xdc, 0x03, 0x29, 0x12, 0x26, 0x11, 0x6b, 0xdc, + 0x5e, 0x9c, 0xb1, 0xa7, 0xe7, 0x34, 0x91, 0x47, 0xa4, 0x9a, 0x7f, 0x46, 0x3f, 0xc0, 0x16, 0xe9, + 0xb7, 0x40, 0xb4, 0x4c, 0x18, 0x4f, 0x03, 0x54, 0x7e, 0xa8, 0xf4, 0xf7, 0x65, 0x5b, 0xda, 0xf4, + 0xf3, 0xed, 0x33, 0x68, 0x54, 0x13, 0xbe, 0xeb, 0xa6, 0xd9, 0xd7, 0xa0, 0x21, 0x29, 0xa3, 0x0d, + 0xc9, 0xa5, 0xb7, 0xda, 0x90, 0xd4, 0xf0, 0x15, 0xa8, 0x18, 0xf7, 0x81, 0xbd, 0xd6, 0x91, 0x7e, + 0xa7, 0xa6, 0x97, 0xe6, 0x64, 0x80, 0xd4, 0x2b, 0xf8, 0xc5, 0x08, 0x41, 0x37, 0xb8, 0xf1, 0x68, + 0xc6, 0xe5, 0x5d, 0x2f, 0x16, 0xc6, 0xc0, 0x47, 0xa9, 0xcb, 0xbb, 0x5e, 0xc3, 0x27, 0x61, 0xa6, + 0x98, 0x57, 0x34, 0xaf, 0xc9, 0xe2, 0x3a, 0x9f, 0x56, 0x28, 0xd4, 0xa4, 0x4f, 0xec, 0xc8, 0xf6, + 0x6c, 0x07, 0x1a, 0x91, 0x88, 0xc9, 0xe1, 0x48, 0x72, 0x81, 0x50, 0x5e, 0x17, 0x8d, 0x36, 0x94, + 0x27, 0x92, 0xf1, 0x70, 0xa4, 0xbe, 0x3c, 0xd4, 0x04, 0x9e, 0x01, 0xe5, 0x8d, 0x81, 0x18, 0x29, + 0x4b, 0x64, 0x2e, 0xb6, 0x2b, 0xc7, 0xfb, 0x32, 0x27, 0x5b, 0xa0, 0xd5, 0x6c, 0xbf, 0xd6, 0x29, + 0xef, 0x47, 0x63, 0xd5, 0xbf, 0xf1, 0x5c, 0xe1, 0xd7, 0x33, 0x63, 0xb1, 0xdf, 0x2e, 0xf6, 0xad, + 0x37, 0xd6, 0x08, 0x25, 0x64, 0x7d, 0xe1, 0xf7, 0x79, 0xea, 0x46, 0xd2, 0x32, 0x40, 0xce, 0xca, + 0x46, 0x40, 0xfe, 0xc7, 0xaa, 0x9e, 0x52, 0x2f, 0xbd, 0x85, 0x5f, 0xe2, 0x58, 0xe4, 0xdd, 0xc7, + 0x3b, 0x86, 0x5f, 0x85, 0x00, 0x4f, 0x75, 0x80, 0x16, 0xa6, 0x92, 0x95, 0x78, 0xb4, 0x3d, 0x7d, + 0x60, 0x67, 0xba, 0xe5, 0x6c, 0xfa, 0xc4, 0xc9, 0xc1, 0xf3, 0x1d, 0xd9, 0xb3, 0xad, 0xca, 0xce, + 0x23, 0x7e, 0x80, 0xe1, 0xa3, 0xa8, 0x30, 0x8e, 0x23, 0x77, 0x8c, 0xb7, 0x0e, 0x4a, 0xb1, 0xaa, + 0xa9, 0xb1, 0x4e, 0x82, 0x08, 0x1d, 0x95, 0x2f, 0xc8, 0xe2, 0x73, 0x3e, 0x00, 0x17, 0xe6, 0x65, + 0x77, 0x91, 0xc5, 0x95, 0xea, 0xed, 0x53, 0x91, 0x68, 0x19, 0xd0, 0x85, 0x0b, 0xa4, 0xca, 0x82, + 0x23, 0x4c, 0xc7, 0x36, 0xe5, 0xc3, 0xcf, 0xd5, 0x55, 0x0c, 0x0d, 0xf9, 0xaf, 0x39, 0x63, 0x08, + 0xdd, 0x09, 0x78, 0x66, 0x7e, 0x0f, 0xce, 0xd8, 0x6c, 0x8d, 0x70, 0x81, 0x53, 0xae, 0x7f, 0x40, + 0xb9, 0x75, 0x31, 0xe1, 0x61, 0x9c, 0xe7, 0x48, 0x5d, 0xd8, 0x38, 0xbb, 0x5d, 0x66, 0xff, 0xf1, + 0xf4, 0x81, 0x9d, 0x5f, 0xb7, 0xbc, 0x47, 0xb4, 0xfe, 0x5a, 0x6d, 0x0c, 0x4c, 0x47, 0x15, 0x9e, + 0x70, 0xac, 0x79, 0x61, 0x79, 0x38, 0xd6, 0xbc, 0xa8, 0x3c, 0xd4, 0x14, 0x68, 0xf0, 0xc0, 0xf8, + 0x40, 0x80, 0x69, 0xd2, 0x91, 0x8d, 0x8d, 0xad, 0x76, 0x88, 0xdf, 0x37, 0x81, 0x80, 0x7c, 0xa3, + 0xec, 0xa7, 0xf0, 0xce, 0x49, 0xcb, 0x60, 0x03, 0x3d, 0xa4, 0xfa, 0xdb, 0xa0, 0xb9, 0xda, 0xbf, + 0x21, 0x0a, 0x30, 0x0d, 0x1d, 0x91, 0x2b, 0xb5, 0x85, 0x27, 0x20, 0xfe, 0x7c, 0xa6, 0xfb, 0x64, + 0x66, 0xef, 0x76, 0x88, 0xc4, 0x83, 0x25, 0xaf, 0x3a, 0x00, 0x90, 0x79, 0xf0, 0xea, 0xe9, 0x6b, + 0x17, 0x2c, 0x5e, 0xea, 0x22, 0xaf, 0x09, 0x2a, 0xe2, 0x22, 0xaf, 0x89, 0x23, 0x37, 0x23, 0x8e, + 0x5c, 0x7a, 0x1d, 0x96, 0x38, 0xde, 0x1c, 0x89, 0x03, 0x5a, 0xae, 0x51, 0x9a, 0x08, 0x9a, 0x34, + 0x29, 0x18, 0xca, 0xf8, 0xaf, 0x49, 0x11, 0x37, 0xc3, 0x58, 0x85, 0xfa, 0x37, 0xf1, 0xf2, 0x9f, + 0x95, 0xbb, 0xfc, 0x47, 0xe2, 0x10, 0x0c, 0x39, 0x0b, 0x7a, 0x1e, 0x5d, 0xd0, 0xa3, 0x86, 0x5a, + 0xd0, 0x74, 0x9d, 0xce, 0xa7, 0xeb, 0xb4, 0x68, 0xc8, 0x75, 0x4a, 0x57, 0x5a, 0x4e, 0xac, 0xe6, + 0x62, 0x53, 0xac, 0x66, 0x6f, 0x35, 0x42, 0xfa, 0x97, 0xf8, 0x69, 0xa8, 0xb8, 0x39, 0xd0, 0x10, + 0x0e, 0x61, 0xf1, 0x08, 0x74, 0xd6, 0x0b, 0x1c, 0xde, 0x22, 0xcc, 0x47, 0xa3, 0x99, 0xaf, 0xab, + 0x0a, 0x5e, 0x63, 0x38, 0x82, 0x3b, 0x28, 0xf4, 0xab, 0x7f, 0xe2, 0x92, 0xc0, 0x5b, 0x24, 0x84, + 0x98, 0xfa, 0xa7, 0x37, 0x5d, 0x80, 0xa6, 0xe1, 0xb4, 0xfa, 0x52, 0xce, 0x02, 0xa1, 0x87, 0x87, + 0xfb, 0x77, 0x77, 0x7f, 0xcf, 0xbc, 0xbb, 0x6f, 0xc4, 0xaf, 0x30, 0xb4, 0xdd, 0xbd, 0xf6, 0x4e, + 0xee, 0xee, 0x90, 0xa0, 0x8b, 0x9c, 0x4f, 0xb4, 0xad, 0x7d, 0x03, 0xac, 0x50, 0x92, 0x85, 0xc7, + 0x32, 0x96, 0x1e, 0xe5, 0xae, 0xca, 0xd9, 0xd8, 0x43, 0x81, 0x82, 0x0b, 0x3c, 0xcb, 0x87, 0x20, + 0x8e, 0xbf, 0xa9, 0x2c, 0x94, 0x39, 0x57, 0x11, 0xe7, 0xd7, 0xa0, 0xf8, 0x97, 0x99, 0x83, 0x15, + 0x13, 0xf3, 0x48, 0x3f, 0x58, 0x4d, 0x32, 0x76, 0x43, 0x37, 0x54, 0xdd, 0xb4, 0x10, 0x92, 0xc5, + 0x00, 0xda, 0xe0, 0x73, 0x5c, 0x06, 0xc2, 0x24, 0x68, 0xa9, 0x4e, 0x0b, 0xd3, 0xdd, 0x57, 0x1c, + 0x9d, 0xd0, 0xaf, 0x38, 0x4a, 0xf7, 0xaf, 0x38, 0x0d, 0x7b, 0xd6, 0xf4, 0xa6, 0x70, 0x68, 0xba, + 0xcd, 0x17, 0xbe, 0x7b, 0x95, 0x9e, 0x46, 0x80, 0x71, 0x1e, 0x91, 0xf0, 0xa8, 0x25, 0xd2, 0xce, + 0x11, 0x60, 0xfe, 0xa1, 0x80, 0x3a, 0xc6, 0x3f, 0x70, 0x0c, 0xf5, 0x8e, 0x89, 0x9f, 0x36, 0x7c, + 0xcb, 0xfc, 0x74, 0xef, 0x32, 0x92, 0xae, 0x60, 0x9a, 0x19, 0xc9, 0x69, 0xfa, 0x85, 0x49, 0xd0, + 0xf2, 0xd6, 0x19, 0xe9, 0x1f, 0x39, 0xfa, 0x66, 0xe1, 0x5e, 0x60, 0x24, 0xbf, 0x2c, 0xae, 0x46, + 0x2b, 0x7d, 0xce, 0x23, 0x12, 0xa6, 0x5a, 0x22, 0x6d, 0xe7, 0x43, 0xf9, 0xa7, 0x05, 0x68, 0x1a, + 0xbc, 0x4f, 0xfa, 0x9e, 0x85, 0xee, 0x24, 0x0b, 0xad, 0x46, 0x63, 0xa8, 0xb6, 0xa6, 0xb1, 0x51, + 0x31, 0xc4, 0x67, 0x30, 0x54, 0x08, 0x25, 0x06, 0x86, 0x61, 0x9f, 0xe5, 0x19, 0xe0, 0x86, 0xbd, + 0xf7, 0x9c, 0x18, 0x3c, 0x72, 0xca, 0x9a, 0x65, 0x9c, 0xa6, 0x5b, 0xdd, 0x7b, 0xd4, 0x96, 0xb7, + 0xc7, 0x32, 0x36, 0x5f, 0xb8, 0x8b, 0x2c, 0xe3, 0x38, 0x22, 0x61, 0xaa, 0x25, 0xd2, 0x76, 0x2c, + 0xf3, 0x47, 0x05, 0x4c, 0x3a, 0xbd, 0xef, 0x19, 0xe6, 0xc1, 0x65, 0x98, 0x3a, 0x59, 0xdc, 0x80, + 0x7e, 0xea, 0x73, 0x98, 0x6c, 0x61, 0x92, 0xe6, 0xd5, 0x76, 0x8b, 0xec, 0xd2, 0xe3, 0x42, 0x53, + 0x2d, 0xfb, 0xbf, 0x0b, 0xb6, 0x57, 0xbf, 0xe1, 0x42, 0x68, 0xa6, 0x65, 0x1c, 0x6a, 0x7d, 0x88, + 0xc6, 0xd8, 0x4f, 0x8c, 0x33, 0xa1, 0x65, 0x72, 0x2c, 0x07, 0x1c, 0x19, 0xd7, 0xc0, 0x7c, 0xd8, + 0x6f, 0x9b, 0x0b, 0xbb, 0x4f, 0x2c, 0x79, 0x2b, 0x29, 0xc5, 0x23, 0x81, 0x86, 0x55, 0xd1, 0x90, + 0xb4, 0x06, 0xbf, 0x98, 0xa7, 0x0c, 0xf8, 0x53, 0x34, 0x3a, 0x12, 0x0d, 0x49, 0xc6, 0xd0, 0x00, + 0xb7, 0xc5, 0x84, 0x6c, 0x7f, 0xfc, 0x42, 0xd3, 0xb5, 0x62, 0x89, 0xa5, 0xcf, 0x77, 0xaa, 0xaf, + 0x8f, 0x59, 0x4b, 0x24, 0xf0, 0xbd, 0xe3, 0xc8, 0x29, 0x21, 0x32, 0x17, 0x2e, 0xa4, 0x7a, 0xdb, + 0xd3, 0x07, 0xaf, 0x65, 0x5b, 0xbb, 0xd2, 0x47, 0x2f, 0xd0, 0x35, 0xc5, 0x8e, 0xc2, 0xfb, 0x27, + 0x23, 0xf0, 0xb5, 0xa9, 0x55, 0x5f, 0xf7, 0xc7, 0xf3, 0x9c, 0x85, 0x8c, 0xd3, 0x2a, 0x0d, 0xfc, + 0x8a, 0xd7, 0xd2, 0xa4, 0xba, 0x40, 0x42, 0x5a, 0xb4, 0x30, 0x33, 0x70, 0x30, 0x73, 0x42, 0x9d, + 0x18, 0x20, 0x02, 0x2c, 0x27, 0xf5, 0x9c, 0x39, 0xfe, 0x4d, 0xa9, 0x6e, 0x03, 0xfb, 0x90, 0xb7, + 0xd0, 0x3a, 0xa5, 0xdb, 0x8f, 0xa4, 0x3a, 0xe6, 0x35, 0xe5, 0x7a, 0x01, 0x22, 0xc1, 0xe5, 0xb6, + 0x16, 0x1e, 0x25, 0x5e, 0xe5, 0xc6, 0xa8, 0xf2, 0x60, 0x59, 0x82, 0x3b, 0x32, 0xff, 0xb8, 0x37, + 0x0d, 0x5d, 0x69, 0x9b, 0x8a, 0x23, 0xfd, 0x6d, 0x26, 0xd3, 0x6e, 0x55, 0xb7, 0x71, 0xa8, 0x78, + 0x65, 0x20, 0x06, 0x3e, 0xcc, 0xfc, 0x62, 0xed, 0xb2, 0x9e, 0xb3, 0x7e, 0x7b, 0xa9, 0x81, 0x82, + 0xa3, 0x39, 0x71, 0x5e, 0x27, 0x8d, 0xdc, 0xcf, 0xa1, 0xd1, 0x4c, 0xf1, 0xb0, 0x9e, 0x56, 0xfe, + 0xd1, 0x08, 0x70, 0x4e, 0x0a, 0x24, 0x83, 0x9b, 0x20, 0x43, 0xcc, 0x1a, 0x29, 0x99, 0x0c, 0x47, + 0xb4, 0xed, 0x2d, 0x80, 0x8a, 0xb1, 0xf3, 0x08, 0x13, 0xb4, 0x05, 0xa7, 0xd0, 0xd4, 0x4b, 0x85, + 0x05, 0xf0, 0xcc, 0x04, 0x8c, 0x80, 0xc4, 0xc2, 0x5a, 0x17, 0x7e, 0xbb, 0xbc, 0x2e, 0xfc, 0xf6, + 0x86, 0x84, 0x94, 0x9c, 0x5d, 0xe6, 0xc9, 0x7c, 0xd8, 0xad, 0xb4, 0xef, 0xd6, 0x2c, 0x69, 0x75, + 0xe1, 0xb7, 0xfd, 0x7a, 0x7b, 0xfe, 0xe7, 0x68, 0x14, 0xfe, 0xa1, 0x45, 0x96, 0xc5, 0xf1, 0xb4, + 0x69, 0x99, 0xf0, 0x2c, 0xdb, 0x7d, 0x4d, 0x75, 0x29, 0xbd, 0x4c, 0x2d, 0x87, 0x3f, 0xf0, 0x13, + 0x0f, 0xeb, 0x6f, 0xd0, 0x2e, 0xf8, 0x5f, 0x71, 0x08, 0x81, 0x34, 0xc6, 0x7b, 0x0d, 0x04, 0x59, + 0xd8, 0xca, 0xc9, 0xe2, 0xef, 0xfa, 0x98, 0x72, 0x21, 0xa6, 0xff, 0x0d, 0x93, 0x39, 0xd8, 0xb6, + 0x3b, 0x73, 0xbd, 0x5b, 0x5d, 0x25, 0xd8, 0xcd, 0x49, 0xf9, 0xe8, 0x90, 0x16, 0x80, 0x21, 0xd5, + 0xbb, 0x3b, 0x35, 0x70, 0x02, 0x4c, 0x84, 0xe4, 0xe6, 0x08, 0xe7, 0x98, 0x02, 0xb0, 0xd2, 0x9c, + 0xd1, 0x78, 0xc2, 0xb1, 0x0d, 0x34, 0x40, 0xc1, 0x86, 0x4d, 0xd1, 0x44, 0x72, 0x43, 0x43, 0x38, + 0x91, 0x9c, 0xed, 0x67, 0xbe, 0x4e, 0x1f, 0x24, 0x39, 0x4e, 0x07, 0x8d, 0x08, 0xa9, 0x0d, 0x4c, + 0xd9, 0xde, 0xa6, 0x74, 0x5f, 0x23, 0x0e, 0x07, 0x03, 0xc4, 0x05, 0xc7, 0xa2, 0xf5, 0x2d, 0x0a, + 0x89, 0x85, 0x6c, 0x54, 0x10, 0x95, 0xd3, 0x21, 0xea, 0x0d, 0x29, 0x13, 0xc6, 0x90, 0x40, 0xea, + 0x3b, 0xf7, 0x2a, 0xef, 0x1f, 0xd7, 0x02, 0x81, 0xf0, 0xcf, 0xa0, 0x22, 0x29, 0x1e, 0x8f, 0xc6, + 0x57, 0x26, 0xea, 0xd9, 0x5c, 0x16, 0x5a, 0xa1, 0x30, 0xc6, 0x20, 0x56, 0xb4, 0x72, 0x7e, 0x11, + 0x2a, 0x8e, 0x03, 0xa2, 0x35, 0x21, 0xf6, 0xb6, 0x46, 0x2f, 0x15, 0x8a, 0x00, 0xd7, 0x9a, 0x6a, + 0xbf, 0x5e, 0xa8, 0x3d, 0x15, 0x28, 0x1c, 0xee, 0x53, 0x01, 0xc3, 0xf3, 0x88, 0x2a, 0x54, 0xbc, + 0x06, 0x2f, 0x98, 0xc8, 0xc6, 0x28, 0x3f, 0xcd, 0xb4, 0xee, 0xd9, 0x25, 0x5b, 0x92, 0xb3, 0x64, + 0xb5, 0xa5, 0xe6, 0x3d, 0x53, 0x80, 0x1e, 0x51, 0xe7, 0x20, 0xfc, 0x36, 0x75, 0x7f, 0xfe, 0x61, + 0x54, 0xf7, 0x5d, 0x7e, 0x20, 0xb8, 0x29, 0x8c, 0x8a, 0x02, 0x0d, 0x0d, 0x98, 0x54, 0x44, 0xfe, + 0xe3, 0xa4, 0x69, 0x5a, 0xa1, 0xf0, 0x22, 0x89, 0x61, 0xcd, 0xb0, 0x85, 0x01, 0x29, 0xea, 0xd0, + 0x8e, 0xa9, 0xdf, 0x7a, 0x73, 0xa0, 0x43, 0x73, 0xa7, 0xc3, 0xcf, 0x06, 0xfd, 0x5a, 0x4f, 0xfc, + 0x41, 0x8e, 0x10, 0x8c, 0xb1, 0x4d, 0x98, 0x5e, 0xcd, 0x6a, 0x93, 0x56, 0xf9, 0x53, 0x59, 0x7c, + 0xdd, 0xa7, 0x37, 0x10, 0x56, 0x66, 0xcf, 0x6c, 0x25, 0xa3, 0x60, 0x3e, 0xa8, 0x6e, 0x32, 0xcc, + 0x70, 0xd2, 0x07, 0x2e, 0x65, 0xfa, 0x5b, 0x4b, 0xcd, 0x18, 0xeb, 0x81, 0xe0, 0xc0, 0xfd, 0xde, + 0xaf, 0xf7, 0x7c, 0x67, 0x98, 0xd5, 0x6d, 0xb5, 0x50, 0x1e, 0x6c, 0x4e, 0x5d, 0x66, 0xe0, 0xd4, + 0xe1, 0xbd, 0x5d, 0x31, 0x30, 0xeb, 0x52, 0x54, 0xa4, 0x6e, 0xc2, 0x34, 0x1a, 0x4c, 0xb4, 0x0e, + 0x1e, 0x23, 0xd2, 0xab, 0x13, 0xfa, 0x9b, 0x9f, 0x81, 0x90, 0x96, 0x77, 0x1b, 0x38, 0xa2, 0xc0, + 0xcf, 0x94, 0x78, 0xff, 0x76, 0x24, 0x9a, 0xb2, 0x4c, 0x4a, 0xd2, 0x39, 0x50, 0xfb, 0x4c, 0x3c, + 0x50, 0xdc, 0xba, 0x01, 0xde, 0xc7, 0x6b, 0x1b, 0x9f, 0x85, 0x71, 0x8f, 0x12, 0x92, 0x18, 0xf7, + 0x28, 0xb8, 0xc0, 0x93, 0x87, 0x19, 0xf0, 0x80, 0x1c, 0xb3, 0x89, 0x6e, 0xdc, 0xa3, 0x50, 0xea, + 0xe6, 0x3a, 0x36, 0x21, 0x05, 0xe2, 0xc1, 0x4d, 0xea, 0x69, 0x50, 0x8a, 0xd0, 0x94, 0xf8, 0xbf, + 0x23, 0x8b, 0x5b, 0x7c, 0xc6, 0x1a, 0x61, 0x53, 0xfa, 0xdc, 0xc9, 0xcc, 0x67, 0xef, 0xa7, 0xf7, + 0x1e, 0xcd, 0x7c, 0xfe, 0x2b, 0x60, 0x87, 0x9b, 0x03, 0x3b, 0x61, 0xd4, 0xca, 0xde, 0x8e, 0xf4, + 0xa1, 0x2b, 0x4a, 0xcf, 0x35, 0x78, 0x1a, 0x52, 0x53, 0x5b, 0x0e, 0x7f, 0x28, 0x7b, 0x77, 0x97, + 0xb3, 0x79, 0xcb, 0xca, 0xf5, 0x37, 0x45, 0xf8, 0x34, 0x98, 0xbd, 0xf1, 0x61, 0xf6, 0x64, 0x07, + 0xdb, 0xf1, 0xcd, 0x81, 0x76, 0xbf, 0xf1, 0xc3, 0x7c, 0x07, 0x87, 0x93, 0xf4, 0x35, 0x4b, 0x64, + 0xe5, 0x4d, 0x35, 0xad, 0xbc, 0x9a, 0x48, 0x72, 0x81, 0x00, 0x4b, 0xef, 0xc7, 0xb2, 0xb8, 0xde, + 0x07, 0xe0, 0xc2, 0x4a, 0x08, 0xb5, 0x98, 0xfe, 0xe8, 0x64, 0xaa, 0xff, 0xca, 0xcd, 0x81, 0x2e, + 0x5c, 0x7a, 0x73, 0xa0, 0x6b, 0x5e, 0xaa, 0xb7, 0x4f, 0xac, 0x97, 0x22, 0x49, 0x65, 0xe0, 0x3d, + 0xa5, 0xb7, 0xf7, 0xe6, 0x40, 0xc7, 0x7c, 0x5a, 0x02, 0x49, 0xea, 0x34, 0x1d, 0x41, 0xd9, 0x79, + 0x24, 0xd5, 0xbb, 0x9b, 0x44, 0x6c, 0x84, 0x5e, 0xf9, 0x65, 0xa8, 0x10, 0x47, 0x23, 0xc5, 0xfe, + 0x01, 0x05, 0x95, 0xf3, 0x65, 0x71, 0xae, 0x0f, 0x4a, 0x84, 0xc7, 0xe1, 0x54, 0x95, 0xfd, 0xe2, + 0xaa, 0x72, 0x76, 0x57, 0xea, 0xba, 0x2a, 0x3a, 0xb4, 0xae, 0x34, 0x39, 0x39, 0xcf, 0x0f, 0xd0, + 0xfc, 0x4f, 0x51, 0x51, 0x2c, 0x50, 0x2f, 0xad, 0x09, 0xbf, 0x0d, 0x9e, 0x02, 0x85, 0x90, 0x09, + 0x57, 0x2b, 0x14, 0x04, 0x78, 0xdd, 0x04, 0x9d, 0x42, 0x0c, 0xc0, 0x9b, 0x03, 0x1d, 0xe9, 0xa3, + 0x2d, 0xca, 0xa9, 0xb3, 0x4f, 0xcf, 0x9b, 0x67, 0xee, 0x5a, 0x98, 0xe7, 0xd7, 0x5a, 0x57, 0xa8, + 0xc7, 0x28, 0xb4, 0xc8, 0x67, 0xc7, 0x21, 0x5a, 0x6e, 0x16, 0x90, 0xae, 0x5d, 0xad, 0x64, 0xc6, + 0x20, 0x16, 0xf2, 0x7f, 0x70, 0xe1, 0xf7, 0xd1, 0x39, 0x0d, 0x1f, 0x6c, 0xf9, 0xf6, 0xaa, 0x41, + 0xbe, 0x99, 0x32, 0xe6, 0xe6, 0x92, 0xc3, 0x26, 0x04, 0xa4, 0x41, 0xd2, 0x75, 0x70, 0xe8, 0x61, + 0xab, 0x76, 0xaa, 0x56, 0x0f, 0x8b, 0x08, 0x12, 0x9f, 0x91, 0x15, 0xe1, 0x66, 0x56, 0x04, 0xc9, + 0x67, 0x44, 0x7f, 0x63, 0xa7, 0xc7, 0x68, 0x32, 0xd0, 0x00, 0xc1, 0x74, 0xfd, 0xf0, 0x83, 0x2f, + 0x73, 0xce, 0x47, 0xa5, 0x6e, 0x4b, 0xea, 0xf7, 0xc8, 0x70, 0xfe, 0x84, 0x43, 0x45, 0xb4, 0x88, + 0x9f, 0x8c, 0x46, 0xaa, 0xda, 0x2c, 0x91, 0xbb, 0x05, 0x7e, 0xf2, 0x0b, 0x67, 0xd9, 0x8d, 0x11, + 0xd5, 0xc8, 0x15, 0x8e, 0xf1, 0x3c, 0x2a, 0x08, 0xc7, 0x9a, 0x17, 0x91, 0xcb, 0x69, 0xfc, 0xb7, + 0x3a, 0x50, 0x15, 0x9a, 0x79, 0x87, 0xa1, 0xfd, 0x56, 0x07, 0xaa, 0x73, 0xeb, 0x58, 0xca, 0x35, + 0x93, 0xb5, 0xa4, 0x95, 0xe4, 0xfd, 0x05, 0xc9, 0x49, 0xf9, 0x3c, 0x2a, 0xc6, 0x27, 0x7d, 0x31, + 0x2e, 0x05, 0xc8, 0x65, 0xf3, 0x74, 0x2b, 0x2c, 0xaa, 0x28, 0x90, 0x5f, 0x87, 0xf7, 0x2e, 0x40, + 0x63, 0x0d, 0x75, 0x4c, 0x86, 0xe0, 0xb1, 0x76, 0x19, 0x82, 0xbd, 0x5f, 0x8f, 0xc4, 0xae, 0xbd, + 0xec, 0xce, 0x5d, 0x13, 0x4a, 0x7c, 0xbf, 0x79, 0x7c, 0xbf, 0x79, 0xdc, 0x4f, 0x9b, 0xc7, 0x6b, + 0xa6, 0xcd, 0x03, 0x3b, 0xff, 0xe8, 0x9b, 0xc7, 0x1c, 0xcb, 0xcd, 0x83, 0xed, 0x8e, 0x00, 0x60, + 0x1d, 0x9f, 0xd9, 0x37, 0x48, 0xe8, 0x94, 0x21, 0x78, 0x44, 0x98, 0x6e, 0xb9, 0x7d, 0xd4, 0x54, + 0x93, 0x0d, 0xe4, 0x2b, 0x17, 0x9a, 0x69, 0xdb, 0xc3, 0x83, 0xbd, 0x8f, 0xbc, 0x66, 0xd8, 0x47, + 0x9e, 0x72, 0xd8, 0x47, 0x58, 0xaa, 0xe4, 0xb3, 0x9d, 0x74, 0x71, 0x68, 0xaa, 0x43, 0xf3, 0x3b, + 0xb6, 0xab, 0x2c, 0x30, 0xec, 0x2a, 0x33, 0xad, 0xe4, 0x71, 0x4d, 0x75, 0x82, 0x4a, 0x0f, 0x32, + 0xb8, 0x35, 0x68, 0x7c, 0x4e, 0x85, 0xed, 0x16, 0x53, 0x8a, 0x0a, 0x1a, 0x25, 0x2d, 0x20, 0x82, + 0xc9, 0xb1, 0x76, 0xa5, 0xa4, 0x76, 0xaa, 0x42, 0x78, 0x7f, 0x82, 0x0a, 0xd4, 0x5f, 0xfc, 0x74, + 0x84, 0xb0, 0x5c, 0xdb, 0x90, 0xb4, 0x3c, 0xd3, 0x3f, 0x82, 0x8a, 0xa0, 0x3a, 0x9c, 0x7b, 0xa8, + 0xe7, 0xdd, 0xa8, 0x58, 0x7b, 0x70, 0x45, 0xf6, 0xb0, 0x51, 0x75, 0x9b, 0x2b, 0xc3, 0x6f, 0xd7, + 0x84, 0xbc, 0x2d, 0x23, 0xd0, 0xe4, 0x65, 0x52, 0x52, 0x1d, 0x76, 0x02, 0x5e, 0xe8, 0x3c, 0x58, + 0x5b, 0xc0, 0x8f, 0x61, 0x9b, 0x66, 0xb6, 0x80, 0xa1, 0xe6, 0x12, 0x7c, 0x3f, 0xb5, 0x56, 0xc2, + 0x58, 0x98, 0xb1, 0x04, 0x7d, 0x22, 0x48, 0x2b, 0x68, 0xa2, 0x08, 0x1b, 0xf2, 0x09, 0x4f, 0xa6, + 0x4f, 0x5c, 0x4b, 0xef, 0xee, 0xa6, 0x42, 0x21, 0x41, 0x4e, 0xf2, 0x47, 0xfb, 0x94, 0x23, 0xe7, + 0xb2, 0x3d, 0x67, 0xd2, 0xdb, 0xda, 0x48, 0x58, 0x94, 0x1b, 0x2e, 0x7c, 0x86, 0x33, 0xf6, 0xf1, + 0x60, 0xcb, 0x87, 0x95, 0x9a, 0x7c, 0xb0, 0x8c, 0x73, 0x42, 0x15, 0xb4, 0x1f, 0x85, 0x93, 0x9b, + 0xd4, 0xb5, 0x3f, 0x94, 0x50, 0xf8, 0x7f, 0x39, 0x34, 0x21, 0xb7, 0xcd, 0x03, 0xa0, 0xdc, 0x69, + 0x42, 0xa2, 0x68, 0x48, 0x21, 0xd1, 0x57, 0x80, 0x0f, 0x2b, 0xd8, 0x96, 0x84, 0xbb, 0xdb, 0x24, + 0x05, 0x37, 0x3f, 0x50, 0x8c, 0xbc, 0x4e, 0x0b, 0xf5, 0x0f, 0xf6, 0xef, 0xc5, 0xb2, 0x58, 0xa1, + 0x85, 0xfa, 0x9f, 0x57, 0x53, 0xdb, 0xbc, 0x10, 0xb4, 0xb4, 0x32, 0x0f, 0x51, 0xa9, 0x7a, 0xae, + 0x69, 0xca, 0x12, 0xab, 0x26, 0x29, 0x1d, 0xd7, 0x06, 0xdb, 0x76, 0xd3, 0xd8, 0xff, 0xfc, 0x1b, + 0x90, 0xdb, 0x95, 0xb9, 0xc4, 0xc5, 0xb9, 0x16, 0xb4, 0x42, 0xdc, 0xf5, 0xa2, 0x61, 0x75, 0xad, + 0xb5, 0xe5, 0xeb, 0xd1, 0xa8, 0xcd, 0xd2, 0x16, 0xdc, 0x77, 0x21, 0xee, 0x1b, 0x5b, 0x1a, 0x69, + 0x99, 0xf0, 0x92, 0xd2, 0xf6, 0xd9, 0xe0, 0xfe, 0x6e, 0xe5, 0xe2, 0x21, 0xda, 0x7f, 0xf6, 0xec, + 0xc7, 0xe9, 0x63, 0x7b, 0x95, 0x1d, 0x7d, 0xfa, 0x61, 0x74, 0xef, 0xee, 0x72, 0x58, 0xb8, 0x99, + 0x8b, 0xed, 0x1a, 0x3c, 0xbd, 0xd1, 0x22, 0x3d, 0x55, 0xa8, 0x8a, 0x0f, 0x7a, 0xc6, 0x67, 0xbb, + 0x04, 0x84, 0xa9, 0x24, 0xb7, 0xa9, 0xe5, 0x49, 0xf7, 0x9a, 0x0b, 0x1b, 0x7d, 0x73, 0x5b, 0x3e, + 0xd8, 0x22, 0x68, 0x89, 0x41, 0x04, 0xd9, 0x1e, 0x1b, 0x87, 0x10, 0x3d, 0x42, 0xdf, 0x36, 0x17, + 0x1a, 0x47, 0xb2, 0x22, 0xae, 0x84, 0xb6, 0xfc, 0x6f, 0x38, 0x34, 0x96, 0xba, 0x0f, 0x42, 0xf6, + 0x55, 0x93, 0x84, 0x33, 0x54, 0xfb, 0xa5, 0x5f, 0xba, 0x1f, 0x1d, 0x02, 0x22, 0x11, 0xf3, 0x36, + 0xcb, 0xe2, 0x2a, 0x7e, 0x2c, 0x38, 0x1e, 0x92, 0x72, 0xf7, 0x62, 0xc3, 0xcf, 0x9b, 0x03, 0x1d, + 0x24, 0xc7, 0x08, 0xe6, 0x60, 0xc8, 0x47, 0x95, 0xdd, 0xba, 0x7f, 0xf0, 0xbd, 0x33, 0x24, 0xd0, + 0x8a, 0xdc, 0x91, 0xd9, 0x75, 0x21, 0xf3, 0xeb, 0x5d, 0xf0, 0xf3, 0xbd, 0xbf, 0x4c, 0x7d, 0xe0, + 0x9a, 0xe9, 0x75, 0x97, 0x1b, 0xbf, 0x5d, 0xde, 0x3c, 0x9f, 0x96, 0x54, 0x70, 0x3e, 0xbe, 0xc5, + 0x85, 0x26, 0xfb, 0xa5, 0x64, 0x7c, 0x8b, 0x61, 0x48, 0x6b, 0x03, 0x89, 0xcd, 0xbc, 0xe9, 0xa6, + 0xcf, 0x0c, 0xa7, 0x22, 0xf7, 0x44, 0x3e, 0x60, 0x89, 0x98, 0xf7, 0x20, 0x27, 0x8b, 0x3f, 0xe1, + 0x1f, 0x19, 0xdc, 0xb1, 0x3b, 0xdb, 0x73, 0xc0, 0x80, 0x19, 0xbc, 0x8b, 0x72, 0xbf, 0x34, 0x28, + 0xef, 0xc4, 0xd9, 0xaa, 0xd4, 0x2a, 0x82, 0xd2, 0xa9, 0xcb, 0xd9, 0xcf, 0x4f, 0x43, 0x20, 0x1a, + 0x15, 0xff, 0x1d, 0xbb, 0xd3, 0x07, 0x2f, 0xa5, 0x7a, 0x77, 0x29, 0x9d, 0xfb, 0x58, 0x30, 0xe8, + 0x00, 0x23, 0x3c, 0xdf, 0x5b, 0x66, 0x8f, 0x70, 0xf9, 0x3b, 0xda, 0x93, 0xdc, 0x77, 0xcb, 0xe3, + 0xea, 0x30, 0x55, 0x12, 0xfc, 0x11, 0x87, 0x1e, 0x86, 0x94, 0x80, 0xaa, 0x6c, 0x26, 0xae, 0x23, + 0x1b, 0xc3, 0xf5, 0xbc, 0x49, 0x96, 0xeb, 0x75, 0x2a, 0xe2, 0x33, 0x9c, 0xaa, 0x13, 0x31, 0x6f, + 0x42, 0x16, 0x2b, 0xf9, 0x47, 0x36, 0x6b, 0x85, 0x90, 0x94, 0x33, 0xdd, 0x72, 0x16, 0x32, 0x0a, + 0xba, 0x1f, 0xd7, 0xab, 0xb2, 0x37, 0x8e, 0xa5, 0xf7, 0x9c, 0x26, 0x38, 0x1b, 0xc1, 0x30, 0x56, + 0xa5, 0xee, 0xc7, 0x2c, 0xb1, 0x8a, 0x36, 0x85, 0xca, 0xf5, 0x5e, 0x54, 0x64, 0xde, 0x73, 0xa1, + 0xa9, 0x56, 0xc8, 0x54, 0x45, 0x23, 0x11, 0x29, 0x98, 0xe4, 0x67, 0xd9, 0x0f, 0x9a, 0x80, 0xa8, + 0xa8, 0x3d, 0x9e, 0x07, 0x54, 0x22, 0xe6, 0x3d, 0xc0, 0xc9, 0xe2, 0x2b, 0xbc, 0x87, 0x41, 0x71, + 0x7b, 0x5b, 0xb9, 0x72, 0xea, 0x60, 0xe6, 0xfa, 0xbe, 0x6c, 0xf7, 0x8d, 0xc1, 0x43, 0xdd, 0x90, + 0x3f, 0xc1, 0xfd, 0x04, 0x83, 0x29, 0x2e, 0x27, 0x98, 0x6a, 0xd0, 0x00, 0x87, 0x51, 0xad, 0xe4, + 0x5f, 0xb6, 0x43, 0x35, 0xa1, 0xce, 0x1f, 0xf6, 0x9a, 0x78, 0x97, 0x82, 0x24, 0x0c, 0x53, 0x1a, + 0x24, 0x48, 0xfe, 0x67, 0x0e, 0x8d, 0xad, 0x69, 0x8c, 0x45, 0xe3, 0x49, 0x5b, 0x1e, 0x35, 0x54, + 0x5b, 0xf2, 0x68, 0x0e, 0x44, 0x22, 0xe6, 0xfd, 0x80, 0x93, 0xc5, 0x10, 0xff, 0x88, 0xd2, 0x33, + 0xa0, 0xb4, 0x91, 0xf0, 0x13, 0xc6, 0x15, 0xbc, 0x8c, 0xad, 0x02, 0x1c, 0x4b, 0xc9, 0xae, 0x72, + 0xaa, 0x2b, 0xd5, 0xb7, 0x8f, 0x46, 0x81, 0x52, 0x81, 0x94, 0xf7, 0x8f, 0x67, 0xb7, 0x5d, 0xaf, + 0xf0, 0xd0, 0xe7, 0xe2, 0xcc, 0x3c, 0xce, 0xc6, 0x84, 0x78, 0xc2, 0xfb, 0xa8, 0xc3, 0x4a, 0x0e, + 0xe3, 0xd1, 0xa9, 0x33, 0xbe, 0xdd, 0x85, 0xc6, 0x52, 0x37, 0x4c, 0x1b, 0x64, 0x0d, 0xd5, 0x96, + 0xc8, 0xe6, 0x40, 0x24, 0x62, 0xde, 0x1e, 0x4e, 0x16, 0xdf, 0xe1, 0xc7, 0x82, 0x07, 0x27, 0x95, + 0x48, 0xbf, 0x30, 0xfc, 0xd4, 0xd2, 0x72, 0x64, 0x7b, 0x48, 0x78, 0xcc, 0x54, 0x7f, 0x1b, 0xbc, + 0x2f, 0x21, 0x8e, 0x9f, 0x14, 0x00, 0x1f, 0xcb, 0xbb, 0xb2, 0x67, 0xcf, 0x28, 0x9d, 0xfb, 0x52, + 0xfd, 0xfd, 0xa9, 0xeb, 0x07, 0x88, 0x28, 0xc3, 0xcf, 0x50, 0x32, 0x5d, 0xad, 0xd9, 0x1d, 0xe7, + 0x95, 0xf7, 0xcf, 0x29, 0x1d, 0x07, 0x95, 0xf7, 0xcf, 0xa5, 0xae, 0x1f, 0xfd, 0xba, 0xe5, 0x3d, + 0x4c, 0x83, 0xa7, 0xdc, 0x4f, 0xe4, 0xc7, 0xcd, 0x2a, 0x21, 0x3a, 0x5c, 0xe8, 0x21, 0x31, 0x14, + 0xc2, 0xc7, 0xc5, 0xb5, 0x51, 0x4a, 0x0c, 0xd3, 0x89, 0x80, 0x82, 0x90, 0xdd, 0xd3, 0xed, 0xb1, + 0x07, 0x80, 0x4d, 0xd2, 0xfb, 0x19, 0x27, 0x8b, 0x6f, 0xf3, 0x7c, 0xaa, 0xf7, 0xfd, 0xf4, 0xb1, + 0x2b, 0x30, 0x70, 0x30, 0x1d, 0xb9, 0x43, 0x90, 0xf9, 0xbb, 0xa6, 0xf6, 0xe6, 0x40, 0x47, 0xa6, + 0xff, 0x08, 0x99, 0xdf, 0x5f, 0x1d, 0x53, 0xde, 0x3f, 0x01, 0x10, 0xa5, 0xa9, 0xbe, 0x7d, 0x55, + 0xeb, 0x57, 0x92, 0x28, 0xb9, 0x72, 0x47, 0x4d, 0x75, 0x95, 0xee, 0x85, 0x81, 0x0b, 0x67, 0xe3, + 0x74, 0x08, 0x84, 0x36, 0x99, 0x0f, 0x7b, 0x95, 0xb6, 0xcf, 0x34, 0x62, 0xc0, 0xb3, 0x63, 0x4c, + 0x89, 0x79, 0xde, 0xa7, 0xf2, 0x94, 0x6b, 0x91, 0x68, 0x48, 0x52, 0xc9, 0xf1, 0xbf, 0x71, 0x68, + 0x32, 0xf8, 0x1a, 0x62, 0x6c, 0x96, 0xc6, 0xa3, 0x8d, 0x94, 0x26, 0x5e, 0xf3, 0x5b, 0x56, 0x0d, + 0x8e, 0x92, 0xe5, 0x31, 0x47, 0x18, 0x42, 0x99, 0x1d, 0x9c, 0x2c, 0xbe, 0xaa, 0x52, 0x66, 0x57, + 0x2e, 0x65, 0x9e, 0xa7, 0x94, 0x51, 0x8e, 0x5e, 0x52, 0x3e, 0x6a, 0xc9, 0x0c, 0x7c, 0xa2, 0x74, + 0x5f, 0x03, 0x08, 0x75, 0x80, 0x54, 0xdb, 0x52, 0x55, 0x2d, 0xb9, 0x23, 0x87, 0x24, 0x18, 0xe1, + 0x39, 0xbe, 0xe1, 0x20, 0xcc, 0xf7, 0xba, 0xd0, 0x54, 0x7c, 0xdb, 0x69, 0x83, 0xf2, 0xdc, 0x5c, + 0x74, 0x18, 0x60, 0x02, 0x63, 0x40, 0xbf, 0x3c, 0x6f, 0x78, 0x42, 0x8a, 0xab, 0x9c, 0x2c, 0xbe, + 0xc9, 0x97, 0xa4, 0xdb, 0xaf, 0x0d, 0xee, 0xe8, 0xb4, 0x20, 0xc8, 0x1b, 0x76, 0x35, 0xa5, 0x4a, + 0x47, 0x5b, 0x7a, 0xd7, 0x05, 0xe2, 0xe6, 0xd3, 0xbe, 0x4b, 0xe5, 0x00, 0x88, 0xad, 0x79, 0xec, + 0x0a, 0x40, 0x7c, 0xdd, 0xb2, 0xb5, 0x4a, 0xd4, 0xfe, 0xcc, 0x21, 0x56, 0xe6, 0x62, 0x3b, 0xc8, + 0x8b, 0x67, 0x7c, 0x4f, 0xdb, 0x13, 0x2c, 0x61, 0xa2, 0x58, 0xa2, 0x7c, 0x4e, 0x79, 0x9d, 0x8a, + 0x13, 0xdf, 0x0f, 0xb1, 0x20, 0xcc, 0xfe, 0x43, 0x95, 0x5a, 0x66, 0x9a, 0x32, 0x0b, 0x23, 0x8f, + 0xad, 0xef, 0x98, 0x7b, 0x4e, 0x9e, 0xd0, 0x84, 0x72, 0xfd, 0x9c, 0x2c, 0xfe, 0x2e, 0x4f, 0xde, + 0x38, 0x13, 0xa4, 0xfa, 0x5b, 0x33, 0x5d, 0xad, 0x39, 0x98, 0x02, 0xff, 0x81, 0xef, 0x92, 0x7b, + 0x25, 0x80, 0x6b, 0x7e, 0x68, 0xe0, 0x34, 0x95, 0xea, 0xdb, 0x67, 0x6e, 0x07, 0x2d, 0x4c, 0x07, + 0x90, 0xa4, 0x14, 0x09, 0x4a, 0x11, 0x38, 0x9b, 0x61, 0x02, 0x2e, 0xe4, 0x05, 0x0b, 0x02, 0x6a, + 0x19, 0x04, 0x13, 0xe5, 0xef, 0x30, 0x5e, 0x6f, 0xef, 0x96, 0x43, 0x6e, 0x1c, 0xfe, 0x80, 0x0b, + 0xc2, 0x0f, 0xe2, 0xd5, 0x50, 0x13, 0xa1, 0xeb, 0x6d, 0xb6, 0x55, 0xaa, 0x2d, 0x23, 0x0c, 0x25, + 0x97, 0x2f, 0x1f, 0x50, 0x42, 0xab, 0xb3, 0x9c, 0x2c, 0xfe, 0x92, 0xf7, 0x82, 0x6d, 0x92, 0x8a, + 0xe1, 0xde, 0x5d, 0xc4, 0x91, 0x81, 0x89, 0xc5, 0xed, 0x5e, 0x4e, 0x2e, 0xf8, 0x41, 0x41, 0xb2, + 0x02, 0xb9, 0x39, 0xd0, 0xa1, 0x9c, 0x79, 0x2f, 0x7d, 0xec, 0x68, 0xfa, 0xf8, 0x5e, 0x30, 0x03, + 0xc3, 0xdb, 0x42, 0xb5, 0x7c, 0xe7, 0x11, 0xe5, 0xc6, 0xf5, 0xcc, 0x81, 0xd3, 0xd9, 0x9e, 0xd3, + 0x4a, 0xcb, 0x00, 0x30, 0x24, 0x3f, 0x2c, 0x86, 0xfc, 0x84, 0x64, 0x1b, 0x5d, 0x19, 0xc0, 0xeb, + 0x4f, 0xa7, 0xcc, 0x53, 0x56, 0xe8, 0xe6, 0x42, 0x51, 0xda, 0x94, 0xe5, 0x07, 0x4c, 0xa8, 0xf3, + 0x05, 0x27, 0x8b, 0xef, 0xf2, 0xa5, 0xd6, 0xd4, 0x69, 0xc4, 0xad, 0x0c, 0x34, 0x7a, 0xd5, 0x92, + 0x46, 0x66, 0xc0, 0x61, 0x52, 0xaa, 0x9c, 0x9f, 0x93, 0x27, 0xa5, 0xe0, 0x53, 0xfc, 0xaf, 0x39, + 0x34, 0xd6, 0x20, 0x5a, 0xcc, 0x5b, 0xb8, 0xa1, 0xda, 0x72, 0x0b, 0xcf, 0x81, 0x48, 0xc4, 0xbc, + 0xeb, 0x64, 0x71, 0x96, 0x7a, 0xa6, 0x38, 0x31, 0x78, 0xe4, 0x14, 0xdd, 0xc1, 0x27, 0xc2, 0xcf, + 0x4c, 0xfb, 0x35, 0xa5, 0xbb, 0x8b, 0x14, 0x82, 0x8a, 0xe9, 0xcb, 0x73, 0xab, 0xe5, 0x3f, 0xe3, + 0x10, 0x5a, 0x26, 0x69, 0xaa, 0xd5, 0x74, 0x0b, 0x6e, 0x67, 0xc6, 0x39, 0xc3, 0xa9, 0x3a, 0x11, + 0xf3, 0x6e, 0x94, 0xc5, 0xa7, 0xf9, 0xb1, 0x86, 0x29, 0x73, 0xcf, 0x22, 0xb6, 0x77, 0xbc, 0x85, + 0xd0, 0xac, 0xf4, 0xd5, 0x9a, 0x2f, 0x24, 0xa8, 0x15, 0x30, 0x6a, 0x3e, 0xdf, 0x51, 0xef, 0x20, + 0x7c, 0x5a, 0x0b, 0x91, 0xa7, 0xe8, 0xe8, 0x1f, 0xb7, 0x5a, 0x60, 0x46, 0x18, 0xcb, 0x43, 0x8e, + 0x15, 0x58, 0x22, 0xe6, 0x3d, 0xc9, 0xc9, 0xe2, 0x46, 0xfe, 0x71, 0x32, 0xfe, 0xe3, 0x7b, 0x53, + 0xbd, 0xe7, 0xc1, 0x91, 0x33, 0xd5, 0xbb, 0x2b, 0xd3, 0xd5, 0x4a, 0x40, 0xc9, 0xf2, 0x5b, 0x4c, + 0x96, 0x1f, 0x03, 0x40, 0x34, 0x08, 0x48, 0x98, 0x84, 0xd1, 0xcc, 0x75, 0xfe, 0xa1, 0x51, 0xae, + 0x41, 0xe8, 0x0b, 0xfc, 0x3c, 0x0b, 0xfc, 0x49, 0x74, 0xad, 0x44, 0xf9, 0x3b, 0x5a, 0xa8, 0x37, + 0x5d, 0x63, 0xe6, 0x3f, 0x76, 0xa1, 0xd1, 0xe0, 0x03, 0x0d, 0x24, 0x98, 0x61, 0x85, 0x1b, 0x83, + 0xfb, 0x4c, 0xc7, 0xfa, 0x44, 0xcc, 0xfb, 0x15, 0x27, 0x8b, 0x17, 0x38, 0x7e, 0xa2, 0x61, 0x12, + 0x09, 0x8e, 0xfb, 0x39, 0xb0, 0x94, 0x12, 0x8a, 0x60, 0xe6, 0x01, 0x73, 0x85, 0x01, 0x8e, 0xe5, + 0xb0, 0xc1, 0x93, 0xd7, 0x00, 0x0e, 0x22, 0x8e, 0xe5, 0xf0, 0x59, 0xfa, 0xe2, 0x29, 0xa8, 0xfd, + 0xba, 0xe5, 0x3d, 0xd2, 0x04, 0x9c, 0x1b, 0x71, 0xe1, 0x20, 0xcd, 0x0e, 0x07, 0x4d, 0xd8, 0x98, + 0xa4, 0x00, 0xc6, 0x9c, 0x8d, 0xa7, 0xf1, 0x0e, 0x67, 0x63, 0xfe, 0x6f, 0x39, 0xf4, 0x10, 0x46, + 0x14, 0xc7, 0x78, 0xa1, 0xb4, 0x9a, 0x65, 0x49, 0x0b, 0x16, 0xc4, 0xf2, 0xf8, 0x64, 0x01, 0x05, + 0x67, 0xfe, 0x57, 0xf8, 0x47, 0x68, 0x5c, 0xd5, 0x0b, 0x4a, 0xdb, 0x65, 0x23, 0xed, 0xe6, 0xb0, + 0x55, 0xf4, 0x70, 0xf8, 0x3e, 0xfb, 0x13, 0x76, 0x3d, 0xf0, 0x0d, 0xc6, 0x38, 0x3d, 0xc6, 0x5b, + 0x1d, 0x1a, 0x12, 0x9b, 0x02, 0x71, 0x29, 0xa4, 0x2d, 0x80, 0x7f, 0xe7, 0x10, 0x2f, 0x86, 0x42, + 0x6b, 0x9a, 0xea, 0x22, 0x52, 0x52, 0xd7, 0x94, 0x1f, 0xb7, 0x50, 0x84, 0x73, 0x60, 0x2c, 0x59, + 0xc1, 0x0a, 0x2c, 0x11, 0xf3, 0x1e, 0xe6, 0x64, 0xf1, 0x0d, 0xbe, 0x84, 0x0c, 0xf4, 0x6a, 0xbf, + 0xf2, 0xfe, 0x09, 0xe5, 0xe2, 0x5e, 0xf5, 0x68, 0x88, 0xcd, 0x85, 0xee, 0x97, 0xec, 0x6a, 0xca, + 0x3c, 0xd9, 0xb6, 0x2f, 0xb3, 0xdd, 0x3d, 0xa9, 0xbe, 0x7d, 0xeb, 0x6b, 0xab, 0xe6, 0x54, 0xad, + 0xaa, 0x49, 0x9f, 0x3b, 0xa9, 0x0c, 0x60, 0xd5, 0x89, 0x01, 0x86, 0x3d, 0xdb, 0x5b, 0x9e, 0xaf, + 0xd2, 0x93, 0xc0, 0x63, 0x4c, 0xa8, 0xaa, 0xf1, 0x9f, 0xab, 0x27, 0x7e, 0x6c, 0xa0, 0x58, 0x1f, + 0x8e, 0x27, 0x9b, 0x02, 0x0d, 0x94, 0x04, 0x4f, 0x5a, 0x1b, 0x6a, 0x8c, 0x50, 0x2a, 0x11, 0x4a, + 0xf3, 0x03, 0x4c, 0xc4, 0xbc, 0x92, 0x2c, 0xbe, 0xc0, 0xf3, 0xe4, 0x01, 0xee, 0x91, 0xae, 0xf4, + 0xae, 0xe3, 0x80, 0xb7, 0xfb, 0x09, 0x73, 0x59, 0x59, 0xea, 0xcb, 0x8f, 0xd2, 0xed, 0x87, 0x53, + 0x7d, 0x7b, 0x36, 0x45, 0x13, 0x49, 0x66, 0xa9, 0x7a, 0xbc, 0x53, 0x2d, 0xd0, 0x6c, 0x66, 0xec, + 0x38, 0x7f, 0xc0, 0xa1, 0x87, 0x61, 0x07, 0x18, 0x0a, 0x25, 0x2b, 0x28, 0x4b, 0x94, 0xac, 0x01, + 0x13, 0x31, 0xef, 0xeb, 0xb2, 0x58, 0xaa, 0xa2, 0x84, 0x9f, 0xa9, 0xb0, 0x28, 0x59, 0x94, 0xe1, + 0xe1, 0xcf, 0xf6, 0x3d, 0xe9, 0x30, 0x7c, 0x83, 0x98, 0xfe, 0x4f, 0x1c, 0x7a, 0x04, 0x0e, 0xa3, + 0xc6, 0x0f, 0xbf, 0xda, 0x14, 0x4d, 0x06, 0xcc, 0x7a, 0xa8, 0x2d, 0xa8, 0x8a, 0xd1, 0x9c, 0x61, + 0x40, 0x27, 0x62, 0xde, 0xa0, 0x8a, 0x16, 0x89, 0xe6, 0x31, 0xd8, 0xb6, 0x7b, 0xf0, 0x57, 0x1f, + 0xb9, 0x4b, 0xc8, 0x7b, 0x4f, 0x06, 0x21, 0xa8, 0x01, 0xe1, 0xeb, 0x9e, 0x93, 0x27, 0x5a, 0xe5, + 0xbf, 0x54, 0xbf, 0xa2, 0xce, 0xd3, 0x39, 0x0e, 0x8d, 0x5a, 0x26, 0x61, 0xf5, 0x8e, 0xb7, 0xda, + 0x1a, 0x99, 0x74, 0x82, 0x66, 0xc1, 0xab, 0xd5, 0x13, 0x7d, 0xe7, 0x27, 0xb2, 0x38, 0x8f, 0x47, + 0x20, 0x25, 0xd4, 0x0a, 0xb7, 0x97, 0xdd, 0x38, 0x6b, 0x20, 0x33, 0xa0, 0x7a, 0xba, 0x06, 0xfd, + 0x59, 0xdf, 0x36, 0xad, 0xc5, 0x84, 0xaa, 0xb7, 0x95, 0xbf, 0x43, 0x12, 0x0a, 0xbe, 0xcb, 0xff, + 0x2b, 0x87, 0x46, 0x93, 0x2f, 0x42, 0x10, 0x54, 0x9b, 0xe1, 0x30, 0x11, 0x1a, 0xcd, 0xa7, 0x46, + 0x03, 0x0c, 0x19, 0xb6, 0x2a, 0x19, 0xea, 0xf9, 0xc9, 0xfa, 0xb8, 0xd9, 0x1b, 0x33, 0xf7, 0x4a, + 0x27, 0x1c, 0x58, 0xc8, 0xb2, 0x54, 0x6f, 0x7f, 0xf6, 0xcc, 0x56, 0x30, 0x38, 0x28, 0x3d, 0xd7, + 0xd2, 0x7b, 0x4e, 0x2b, 0xed, 0xbb, 0x33, 0xbf, 0xee, 0x01, 0x77, 0x0a, 0xe8, 0xc6, 0x41, 0x4b, + 0x30, 0xa2, 0x5b, 0x1e, 0x56, 0x71, 0x3c, 0xc7, 0xa1, 0x71, 0x7e, 0x29, 0x18, 0x8d, 0x87, 0x34, + 0xb4, 0x2d, 0xcc, 0xa0, 0x6c, 0x3d, 0xc5, 0xdc, 0x6d, 0x0e, 0x62, 0x48, 0xa3, 0xba, 0x7b, 0xd7, + 0xc8, 0xe2, 0x5c, 0xbe, 0x44, 0xb9, 0x7e, 0x40, 0x69, 0x3b, 0x6d, 0xc6, 0xc3, 0xcd, 0xb3, 0x35, + 0xe0, 0xd0, 0x00, 0x1b, 0x94, 0x77, 0x8a, 0xcd, 0xb0, 0xd5, 0x95, 0xf4, 0x7f, 0x71, 0x08, 0xe9, + 0xe9, 0x5f, 0x78, 0x1b, 0x93, 0x0e, 0xbb, 0x9e, 0xbc, 0x4e, 0x20, 0x64, 0x6e, 0x4e, 0x60, 0xb3, + 0xcf, 0x04, 0x58, 0xf7, 0xea, 0xa7, 0xc8, 0x18, 0xeb, 0x73, 0x4b, 0xbe, 0x4d, 0xb3, 0xcf, 0x34, + 0xb7, 0x13, 0xe2, 0x7f, 0xe7, 0x42, 0x13, 0x0d, 0xf6, 0x2a, 0x78, 0xc7, 0xc5, 0xfb, 0x1c, 0x8d, + 0x5a, 0x00, 0x44, 0x49, 0xf1, 0x54, 0x5e, 0xb0, 0x84, 0x26, 0x83, 0xa0, 0xdf, 0xcc, 0x25, 0xa2, + 0x01, 0xa3, 0x00, 0x9a, 0xbb, 0x22, 0x77, 0xa8, 0xa3, 0x52, 0x31, 0xb9, 0x7e, 0x21, 0x73, 0xb6, + 0x1f, 0x5e, 0x58, 0x10, 0x92, 0xbd, 0x3d, 0x3c, 0xf8, 0x32, 0x4f, 0xaa, 0xb7, 0x2f, 0xd5, 0xb7, + 0x1d, 0x0c, 0xfb, 0xca, 0xc5, 0xc3, 0x83, 0x3b, 0x3a, 0xc1, 0x3d, 0x1b, 0x2c, 0x44, 0xca, 0xde, + 0x8e, 0xf4, 0xc5, 0xd3, 0xd0, 0x27, 0x93, 0xfa, 0x7e, 0x35, 0xce, 0xcf, 0xaa, 0x3d, 0x02, 0x61, + 0x98, 0x7c, 0x81, 0x7b, 0x6e, 0xbe, 0x7b, 0x23, 0x3c, 0xf5, 0x50, 0x89, 0xfb, 0x2f, 0x1c, 0xe2, + 0xb1, 0xfd, 0x18, 0xd6, 0x37, 0xdd, 0x45, 0xcc, 0x37, 0x18, 0x14, 0x26, 0x61, 0xbb, 0xba, 0x58, + 0x10, 0x42, 0xc9, 0x4e, 0x4e, 0x16, 0x7f, 0xce, 0x3f, 0xae, 0x9f, 0xdd, 0x49, 0xd8, 0x26, 0x88, + 0x19, 0x75, 0xf1, 0xb0, 0x72, 0xf4, 0x5c, 0x5d, 0x90, 0x44, 0xd0, 0x77, 0x3f, 0x03, 0x89, 0x77, + 0x08, 0x5b, 0x58, 0x81, 0x94, 0x0d, 0x1e, 0xfe, 0x34, 0x7d, 0xf1, 0x57, 0xd9, 0x9e, 0x1e, 0xe5, + 0xc3, 0x63, 0xe9, 0xfd, 0x57, 0x18, 0xf3, 0x91, 0xb5, 0xf5, 0x14, 0xb3, 0xbc, 0x9e, 0xf7, 0x87, + 0xf3, 0xf1, 0xbd, 0x1c, 0x42, 0x55, 0xd1, 0x78, 0x28, 0x1a, 0xb1, 0xe6, 0x22, 0xbd, 0xce, 0x1e, + 0x4f, 0x06, 0x84, 0xe0, 0x19, 0x94, 0xc5, 0x67, 0xf8, 0x49, 0xd4, 0x6c, 0xb1, 0x5b, 0xe9, 0xec, + 0xc9, 0x5e, 0xda, 0xa6, 0xf4, 0x9d, 0x49, 0xb7, 0x6c, 0x75, 0xcf, 0x20, 0x12, 0xa0, 0xfb, 0xcb, + 0xcc, 0xf5, 0x6e, 0xb6, 0x92, 0x31, 0x82, 0x3f, 0xe6, 0x9e, 0x61, 0x37, 0xfa, 0x20, 0xfe, 0x9a, + 0x3a, 0xf4, 0x3e, 0x0e, 0x8d, 0x59, 0x17, 0x61, 0x06, 0x6f, 0x12, 0xbe, 0x6c, 0x2d, 0x1d, 0xfe, + 0x2c, 0x67, 0x20, 0x82, 0xc0, 0x06, 0x59, 0x9c, 0xcf, 0x93, 0x54, 0x62, 0x86, 0xd1, 0x4f, 0x65, + 0x47, 0x6f, 0x35, 0xf4, 0xc7, 0xdd, 0x1e, 0xbb, 0xa1, 0x37, 0x45, 0x0c, 0x83, 0x2f, 0xd6, 0x72, + 0x8b, 0x5a, 0x1c, 0x77, 0x73, 0x52, 0xeb, 0x5a, 0x1c, 0x77, 0x73, 0x13, 0x93, 0x7a, 0x37, 0xc9, + 0xe2, 0x62, 0xde, 0x07, 0xe3, 0xd3, 0x12, 0xdd, 0x96, 0x29, 0x97, 0xb6, 0x6b, 0xe6, 0xa3, 0x4c, + 0x57, 0xab, 0xa7, 0x36, 0x1a, 0xf2, 0x0c, 0x7e, 0x72, 0x79, 0xb0, 0x65, 0xaf, 0x7b, 0x7c, 0x0e, + 0x2c, 0x1e, 0xbf, 0xd7, 0x3b, 0xdd, 0x6e, 0xfc, 0x21, 0xf5, 0x93, 0xea, 0xe0, 0xfb, 0x39, 0x34, + 0x21, 0x37, 0x4d, 0x9c, 0x59, 0xd1, 0xb2, 0x49, 0x0b, 0x68, 0x56, 0xb4, 0xec, 0x32, 0xce, 0x79, + 0xd7, 0x62, 0x45, 0xcb, 0x90, 0x2a, 0x0d, 0xa7, 0x2f, 0x74, 0x5b, 0x94, 0x0d, 0xb5, 0x6e, 0x20, + 0xd5, 0xa1, 0x3a, 0xfa, 0x3f, 0xe3, 0xd0, 0x24, 0xcb, 0x34, 0x8f, 0x76, 0xea, 0x95, 0x75, 0xaa, + 0x4f, 0x3b, 0xf5, 0xca, 0x26, 0x77, 0xa4, 0xf7, 0xc7, 0x66, 0x64, 0x70, 0x9a, 0x52, 0xb7, 0x45, + 0x99, 0xc3, 0xa5, 0x17, 0xb0, 0x30, 0xf3, 0x04, 0xd2, 0x34, 0x1f, 0x90, 0x09, 0xcd, 0x69, 0x3e, + 0x0c, 0x99, 0xef, 0x9c, 0xe6, 0xc3, 0x98, 0x54, 0xcd, 0x6a, 0x3e, 0x70, 0x9a, 0x3d, 0xb7, 0x45, + 0xd9, 0x50, 0xf3, 0x01, 0x39, 0xd9, 0xd4, 0xd1, 0xff, 0x1b, 0x38, 0x51, 0x13, 0x51, 0x5b, 0x15, + 0x97, 0x42, 0x52, 0x24, 0x19, 0x0e, 0x34, 0x98, 0x31, 0xb0, 0x82, 0xb2, 0x54, 0xdd, 0xad, 0x01, + 0x13, 0x31, 0xef, 0x3e, 0x4e, 0x16, 0xd7, 0xf3, 0xd3, 0x0d, 0x27, 0x75, 0x1d, 0x04, 0xb4, 0x12, + 0xf7, 0xd3, 0xe4, 0xc8, 0xde, 0xb9, 0x37, 0xf5, 0xe5, 0x87, 0x99, 0xae, 0x56, 0x78, 0x56, 0xbf, + 0x5c, 0xda, 0xe2, 0xd8, 0xcc, 0xc1, 0x1e, 0x41, 0x4a, 0x82, 0x5a, 0x8b, 0xf2, 0x77, 0x12, 0xb4, + 0xcf, 0x77, 0xf9, 0xff, 0x5d, 0xcb, 0x4a, 0x68, 0x26, 0x81, 0xf3, 0x9e, 0x6e, 0xa4, 0xc2, 0x53, + 0x79, 0xc3, 0x26, 0x62, 0xde, 0xdf, 0x91, 0xc5, 0x17, 0xf9, 0xe9, 0x86, 0xeb, 0x2c, 0x13, 0x1d, + 0xa6, 0x83, 0x0e, 0x6a, 0x03, 0x84, 0xf1, 0x7d, 0xda, 0x3d, 0x6c, 0x7c, 0xd5, 0x29, 0xff, 0x67, + 0x0e, 0x4d, 0x31, 0xd8, 0xeb, 0x9c, 0x50, 0xb6, 0x01, 0xb4, 0x44, 0xd9, 0x16, 0x36, 0x11, 0xf3, + 0x36, 0xca, 0xa2, 0xc0, 0x4f, 0x31, 0x98, 0x03, 0x75, 0x08, 0xb7, 0x5d, 0x05, 0x4c, 0xab, 0x6f, + 0xf8, 0xd3, 0xfa, 0x2f, 0x1c, 0x49, 0xa4, 0x63, 0xc2, 0xb0, 0xd4, 0xc1, 0xa0, 0x64, 0xc4, 0x6f, + 0x76, 0x9e, 0x90, 0x89, 0x98, 0xf7, 0xff, 0x27, 0x8b, 0xb5, 0xb6, 0x0b, 0x9b, 0x18, 0x54, 0xca, + 0xcd, 0xb6, 0x28, 0xc7, 0x06, 0xa0, 0x49, 0xf0, 0xb3, 0xf2, 0xc1, 0x9d, 0xff, 0x13, 0x0e, 0x4d, + 0xaa, 0x89, 0x84, 0x93, 0x4b, 0xa5, 0x10, 0x49, 0xe5, 0x48, 0x95, 0x27, 0x13, 0xbe, 0x96, 0x60, + 0x96, 0xf8, 0xda, 0x40, 0x26, 0x62, 0xea, 0x0e, 0x3d, 0x8f, 0x9f, 0xac, 0xec, 0xfc, 0x48, 0x39, + 0xbb, 0x4b, 0xe9, 0x38, 0x08, 0x8e, 0x20, 0xd4, 0x80, 0x6a, 0x53, 0xee, 0xa0, 0x19, 0x85, 0x23, + 0xe1, 0xe4, 0x46, 0xcd, 0x46, 0x84, 0xd5, 0x6c, 0x0e, 0x4d, 0x14, 0x43, 0x21, 0xf2, 0x75, 0x29, + 0x44, 0xb1, 0xb1, 0xb2, 0xff, 0xe4, 0x02, 0xa9, 0xb8, 0x3c, 0x99, 0x17, 0x5c, 0x22, 0xe6, 0x8d, + 0x63, 0x56, 0x54, 0x2e, 0x6d, 0xa7, 0xd6, 0xaf, 0xf7, 0x4f, 0xa8, 0xa7, 0x21, 0x03, 0x42, 0xce, + 0xd5, 0x70, 0x57, 0xec, 0xb5, 0x3a, 0xe4, 0x05, 0x42, 0xa1, 0x8d, 0xf4, 0xa3, 0x0c, 0x72, 0x17, + 0x38, 0x34, 0x9a, 0x09, 0x02, 0x66, 0x3e, 0xdb, 0x32, 0x95, 0xb6, 0x67, 0x5b, 0x03, 0x8c, 0xbe, + 0x45, 0xcc, 0xe5, 0xc7, 0x6b, 0x01, 0xc4, 0x20, 0x34, 0xaf, 0x7b, 0x6a, 0x4e, 0x01, 0x09, 0xbf, + 0xa8, 0xeb, 0xea, 0xd3, 0xbd, 0x25, 0x76, 0x5e, 0x0f, 0xea, 0x70, 0x2f, 0x71, 0x68, 0x34, 0x13, + 0x6a, 0x89, 0xf7, 0xda, 0x89, 0x3a, 0xa7, 0xe1, 0x1a, 0x60, 0xc8, 0x70, 0x5f, 0x53, 0x77, 0xb4, + 0xf1, 0x5a, 0x98, 0x26, 0x32, 0xdc, 0x49, 0x39, 0x05, 0xcc, 0x40, 0x9f, 0x74, 0x7b, 0x6d, 0x3d, + 0x51, 0x34, 0xef, 0x0c, 0x75, 0xc8, 0x57, 0x39, 0x34, 0x9a, 0x09, 0x75, 0x63, 0x77, 0xe7, 0xec, + 0x3c, 0x64, 0x03, 0x8c, 0xae, 0x9a, 0x0a, 0xfc, 0x43, 0x54, 0x5a, 0x45, 0x9b, 0x42, 0x64, 0xd0, + 0xd3, 0xd9, 0x9b, 0x8d, 0xa0, 0x5e, 0xc1, 0x0c, 0x7e, 0x96, 0x2f, 0x8f, 0xc1, 0xf3, 0xe7, 0x39, + 0x54, 0x84, 0x37, 0x50, 0x75, 0xd8, 0x33, 0x2d, 0xb7, 0x56, 0x66, 0xcc, 0x1e, 0x7b, 0x00, 0x32, + 0xe0, 0x37, 0xd4, 0x25, 0x31, 0x9a, 0x0a, 0x9a, 0x68, 0x53, 0xc8, 0x3d, 0x93, 0x35, 0x71, 0x90, + 0xef, 0x9a, 0x07, 0xcb, 0xe7, 0x33, 0xd8, 0xe3, 0x2e, 0x54, 0xac, 0x05, 0x34, 0x31, 0xeb, 0xd1, + 0x5a, 0x95, 0xad, 0x1e, 0xcd, 0x40, 0x90, 0xf1, 0xfe, 0x86, 0x93, 0xc5, 0x73, 0x1c, 0xff, 0x10, + 0x33, 0x62, 0x22, 0x3f, 0x65, 0x07, 0x63, 0xbe, 0x06, 0x75, 0x37, 0x4c, 0xf9, 0x6e, 0xde, 0x96, + 0x7d, 0xd4, 0x13, 0xde, 0x38, 0x86, 0x53, 0xd7, 0xd7, 0x56, 0x99, 0x4d, 0x3a, 0xc6, 0x7a, 0x4a, + 0xab, 0x27, 0x86, 0x02, 0x23, 0x04, 0xfb, 0x91, 0x3a, 0xc1, 0xbc, 0xc6, 0xe2, 0xeb, 0x6b, 0xab, + 0x88, 0x05, 0xa0, 0x84, 0x2d, 0x33, 0xf1, 0xbc, 0xb5, 0x51, 0x17, 0x0f, 0xba, 0x39, 0x16, 0x54, + 0x79, 0xe8, 0x4b, 0x0e, 0x8d, 0x63, 0xb8, 0xd6, 0x72, 0xe8, 0xc6, 0x7a, 0xdb, 0xa1, 0xe7, 0x82, + 0x91, 0xa1, 0xff, 0x54, 0x16, 0xbd, 0xd4, 0xe6, 0x99, 0xea, 0xdb, 0xd7, 0x1c, 0x0b, 0x52, 0x5d, + 0x16, 0x7e, 0x31, 0xc3, 0xb5, 0xb6, 0x76, 0xd2, 0xe1, 0x32, 0xae, 0x59, 0xef, 0x34, 0xc7, 0x82, + 0x44, 0x08, 0xfc, 0x09, 0x87, 0xc6, 0x31, 0x3c, 0x6c, 0x89, 0x80, 0xb1, 0xde, 0x16, 0x81, 0x5c, + 0x30, 0x82, 0x40, 0x83, 0x2c, 0x2e, 0xe4, 0x27, 0x31, 0xd2, 0xc0, 0xa3, 0x8d, 0xda, 0x3d, 0xd5, + 0x24, 0x11, 0x3c, 0x46, 0x94, 0xca, 0x7d, 0xc3, 0x43, 0x89, 0xff, 0xcc, 0x85, 0xc6, 0x68, 0x0c, + 0xa3, 0x62, 0xf3, 0x98, 0x2d, 0x3b, 0x31, 0xb8, 0xcc, 0x72, 0x06, 0x22, 0x98, 0xfc, 0x0d, 0x27, + 0x8b, 0x97, 0x38, 0x7e, 0x12, 0xc3, 0x76, 0x9e, 0xf5, 0xb5, 0x55, 0x84, 0xf5, 0x0e, 0x3a, 0xb3, + 0x9e, 0x0e, 0x79, 0x37, 0xd8, 0x6f, 0x3a, 0xef, 0xb4, 0x92, 0xf9, 0xaf, 0x39, 0x34, 0x81, 0x11, + 0x33, 0xf5, 0xf8, 0xac, 0xf9, 0xa4, 0x83, 0x20, 0xaa, 0x67, 0x8f, 0x99, 0xa5, 0x43, 0x03, 0x12, + 0x0a, 0xfe, 0x8e, 0x2c, 0xd6, 0xf0, 0x25, 0x2c, 0xfd, 0xe2, 0x18, 0x42, 0xbb, 0x4e, 0xc3, 0x14, + 0x24, 0x93, 0xaa, 0x45, 0x80, 0x50, 0x2e, 0x1f, 0xa3, 0x11, 0x90, 0x95, 0xa3, 0x97, 0x94, 0xe3, + 0xc7, 0x99, 0x05, 0xe2, 0xe3, 0x4b, 0xed, 0x10, 0x83, 0xae, 0x19, 0x49, 0xfc, 0xfb, 0x70, 0x2d, + 0xbe, 0xbe, 0xb6, 0xaa, 0x2a, 0x1c, 0xb2, 0xb0, 0x98, 0xe9, 0x75, 0xb6, 0x96, 0x24, 0x16, 0x44, + 0x5f, 0xdf, 0x2f, 0xf1, 0x0f, 0x03, 0x4e, 0xcd, 0xb1, 0xa0, 0x27, 0x18, 0x0e, 0xd1, 0xeb, 0x41, + 0xf2, 0x06, 0x05, 0x2f, 0x4d, 0x16, 0x9b, 0xe6, 0x58, 0x30, 0xd3, 0xd5, 0xaa, 0x02, 0x0e, 0xb9, + 0x9b, 0x34, 0xc7, 0x82, 0x2a, 0x9c, 0xb6, 0xbe, 0xff, 0x94, 0x43, 0xe3, 0x41, 0xc8, 0xad, 0xa2, + 0xae, 0x2e, 0xbc, 0x8d, 0x14, 0xd4, 0x00, 0x28, 0x36, 0x4f, 0x0e, 0x09, 0x47, 0x50, 0xfa, 0x85, + 0x2c, 0xbe, 0x4c, 0x55, 0x24, 0xcd, 0xdd, 0xc7, 0x3d, 0x27, 0xa7, 0x00, 0xee, 0x02, 0x6f, 0x0e, + 0x74, 0x10, 0xfb, 0xfe, 0xc0, 0xb5, 0x74, 0xcb, 0xd9, 0xd4, 0x40, 0x6f, 0x66, 0xe0, 0x13, 0x6a, + 0x26, 0x7e, 0xd4, 0x3b, 0xcd, 0xc9, 0x61, 0x47, 0x15, 0x40, 0xff, 0x81, 0x43, 0xe3, 0xf5, 0xe3, + 0xbc, 0x0d, 0x42, 0x39, 0x00, 0xb6, 0x08, 0x99, 0xe0, 0x08, 0x42, 0x3f, 0x67, 0x94, 0x28, 0xad, + 0x96, 0x2a, 0x51, 0x5a, 0x01, 0x2b, 0x77, 0xdc, 0x3e, 0xa7, 0x81, 0x1b, 0x1d, 0x8d, 0x30, 0x1a, + 0x2e, 0x34, 0x5e, 0x77, 0x6c, 0xb3, 0x41, 0x23, 0x07, 0xc0, 0x16, 0x0d, 0x13, 0x1c, 0x41, 0xe3, + 0x1f, 0x39, 0x59, 0xfc, 0x84, 0x53, 0x67, 0x46, 0x95, 0x9a, 0x3a, 0x22, 0x07, 0x38, 0x56, 0x8e, + 0x6a, 0xe5, 0x90, 0xb7, 0x54, 0xfb, 0x99, 0x3e, 0xda, 0x9e, 0x39, 0x70, 0x44, 0xb9, 0x78, 0x38, + 0xd3, 0xd5, 0xaa, 0x16, 0xa6, 0x0f, 0x5d, 0x81, 0x1b, 0x00, 0xa5, 0x6d, 0x6b, 0xb6, 0xbb, 0x37, + 0xf3, 0xe1, 0xe7, 0xe9, 0x3d, 0xa7, 0xa1, 0x23, 0x4d, 0xde, 0x64, 0xcf, 0x6c, 0x85, 0x92, 0xf4, + 0xd1, 0xf6, 0x55, 0xc4, 0x2e, 0x4e, 0xe7, 0x1f, 0xdf, 0x2f, 0x5c, 0x25, 0x76, 0xc6, 0x81, 0x3e, + 0x65, 0xe7, 0x15, 0x02, 0x4a, 0x45, 0x16, 0xa6, 0x64, 0x99, 0x6f, 0x18, 0x94, 0xe4, 0x7f, 0x8f, + 0x43, 0x63, 0xc8, 0x85, 0x14, 0xd0, 0xd0, 0xee, 0xba, 0xca, 0x40, 0xc0, 0x59, 0xce, 0x40, 0x84, + 0x7a, 0x92, 0x7a, 0x1e, 0x1b, 0xaf, 0xdf, 0x69, 0x01, 0xed, 0xa6, 0xb3, 0x9a, 0xde, 0x2a, 0x7d, + 0x2c, 0xcc, 0x62, 0x28, 0xe3, 0x87, 0x83, 0xc2, 0xbf, 0x70, 0xe0, 0x56, 0xc5, 0xf8, 0x20, 0x02, + 0x2a, 0x4f, 0x39, 0x1c, 0x95, 0x4d, 0x28, 0x95, 0xe5, 0x07, 0x4c, 0x50, 0x7b, 0x5b, 0x16, 0x17, + 0xf3, 0x33, 0x58, 0x5f, 0x29, 0x32, 0xc7, 0x18, 0x8c, 0x48, 0x23, 0x12, 0x63, 0x8c, 0xf5, 0x6c, + 0x4c, 0x5f, 0x3e, 0xc1, 0x9c, 0xa3, 0xad, 0xdd, 0xeb, 0x6c, 0xfd, 0x13, 0xc1, 0xe7, 0x8e, 0xbf, + 0xea, 0x42, 0x63, 0xa9, 0x3f, 0x1c, 0x20, 0x3a, 0xcb, 0xce, 0x5d, 0xce, 0x80, 0xe1, 0xe3, 0x43, + 0x40, 0x11, 0xd4, 0xfe, 0xd6, 0xb0, 0xe9, 0xe6, 0xe2, 0x64, 0xbf, 0xe9, 0xe6, 0x40, 0xde, 0x8d, + 0x4d, 0x77, 0x06, 0xef, 0x28, 0xfd, 0xf8, 0xff, 0xc6, 0xa1, 0x09, 0x2b, 0xa3, 0xcd, 0x12, 0xf1, + 0x87, 0x06, 0xe2, 0x99, 0x84, 0x41, 0x2e, 0x84, 0xed, 0xae, 0x6b, 0x06, 0x24, 0x24, 0xec, 0xe0, + 0x64, 0x71, 0x35, 0xbd, 0xec, 0xc8, 0x9c, 0xed, 0xd7, 0x6f, 0x32, 0x2f, 0x9f, 0x70, 0x2f, 0x52, + 0x2e, 0x6d, 0x27, 0x9e, 0x2b, 0x57, 0x3f, 0x55, 0x45, 0x84, 0xc6, 0xe1, 0x0c, 0xa0, 0x2a, 0xed, + 0xf1, 0x4b, 0xab, 0x4c, 0xdf, 0x67, 0x99, 0xee, 0x93, 0x94, 0xb7, 0xad, 0x7d, 0x3b, 0x6c, 0x18, + 0x43, 0xbb, 0x1d, 0xdc, 0xe7, 0x42, 0x0f, 0xfb, 0xa5, 0x46, 0x3a, 0xda, 0xa5, 0xf1, 0x68, 0xa3, + 0x0d, 0x83, 0x58, 0x41, 0xd9, 0x32, 0x88, 0x35, 0x30, 0x21, 0xc1, 0x47, 0xf8, 0x5a, 0x6b, 0x92, + 0xee, 0xbb, 0x7a, 0xb6, 0x7f, 0xf0, 0x08, 0x75, 0xfc, 0x5d, 0x66, 0xf4, 0x84, 0x4e, 0xf5, 0xef, + 0xd1, 0xe0, 0x52, 0xbd, 0x17, 0x01, 0x54, 0x95, 0x94, 0xd7, 0xb7, 0xa7, 0x0f, 0xf7, 0x64, 0x7b, + 0x08, 0x4d, 0x52, 0xfd, 0xbb, 0x33, 0xad, 0x57, 0x94, 0xa3, 0xe7, 0xa8, 0x73, 0xe2, 0x45, 0xa0, + 0x89, 0xef, 0x56, 0x68, 0xf2, 0xcd, 0x08, 0xf4, 0x50, 0x55, 0x83, 0x14, 0x88, 0x10, 0xaf, 0x52, + 0x20, 0x88, 0xd9, 0x87, 0x25, 0x17, 0x84, 0x52, 0x63, 0x76, 0x1e, 0x90, 0xf4, 0x86, 0x6f, 0x84, + 0x2c, 0xfe, 0xc6, 0xc5, 0x4f, 0x65, 0x2f, 0xe4, 0x08, 0xa6, 0x74, 0xea, 0xdd, 0x17, 0x5c, 0x79, + 0x92, 0xe4, 0xda, 0xf1, 0x54, 0xff, 0x1e, 0x8d, 0x00, 0x5a, 0xb9, 0x72, 0xed, 0x4a, 0xba, 0xb7, + 0x2d, 0xb3, 0x77, 0x3b, 0xe8, 0x08, 0xec, 0xa7, 0xbe, 0x6e, 0x79, 0x4f, 0xbf, 0x95, 0xee, 0xed, + 0x53, 0x06, 0xde, 0x4b, 0x5f, 0x24, 0x3f, 0xd5, 0x86, 0xd7, 0x3f, 0xd0, 0x6a, 0x21, 0x98, 0x01, + 0x09, 0x16, 0x0a, 0x7b, 0x55, 0x7f, 0x5b, 0x76, 0xdb, 0xf5, 0xcc, 0xc9, 0x6e, 0x95, 0xe7, 0x70, + 0xff, 0xf0, 0xac, 0x03, 0x20, 0x41, 0x3d, 0x81, 0x2d, 0x2d, 0xbb, 0xed, 0x7a, 0xea, 0xc6, 0x47, + 0xd9, 0x9e, 0xad, 0x64, 0xa1, 0x63, 0x60, 0xe5, 0xea, 0xa7, 0x99, 0xfe, 0x4e, 0xa5, 0xbb, 0x23, + 0xbd, 0x73, 0xaf, 0x26, 0x0f, 0x20, 0x75, 0x36, 0xf4, 0x99, 0xbd, 0xf1, 0xa1, 0xd2, 0x77, 0xe6, + 0xe6, 0x40, 0x07, 0x14, 0x42, 0x82, 0x0f, 0xf2, 0xea, 0xac, 0xab, 0x75, 0x6d, 0x20, 0xb1, 0x19, + 0xb8, 0x20, 0xdb, 0x73, 0x26, 0xd3, 0xbf, 0x1d, 0xb8, 0x9e, 0xf2, 0xc2, 0x73, 0xbe, 0x85, 0xc3, + 0x98, 0x77, 0x5c, 0x46, 0x27, 0xff, 0x42, 0x01, 0x9a, 0x68, 0x9a, 0xaf, 0xf5, 0x82, 0xd9, 0xce, + 0x6c, 0x01, 0x64, 0x7b, 0x5d, 0x6e, 0x09, 0x4b, 0xfd, 0xb9, 0x47, 0xc8, 0xe2, 0xff, 0xe3, 0xe2, + 0x5f, 0x71, 0x58, 0x02, 0x78, 0xbd, 0xdf, 0xc8, 0xec, 0x3f, 0xf7, 0xcb, 0x26, 0x29, 0xbe, 0x85, + 0x84, 0x56, 0xc7, 0x6b, 0x82, 0xe4, 0x1a, 0xc7, 0x14, 0xfd, 0x7e, 0xc5, 0xdc, 0xc6, 0x8a, 0x59, + 0x64, 0xb1, 0x62, 0x84, 0xa1, 0x57, 0x0c, 0xff, 0xd7, 0xe4, 0xb0, 0x66, 0x10, 0x15, 0x79, 0xe9, + 0x49, 0xa5, 0x0e, 0x7e, 0xec, 0x46, 0x21, 0x91, 0x90, 0xc5, 0xe7, 0xf8, 0x09, 0x30, 0x5e, 0xf5, + 0xa3, 0x64, 0xbb, 0x25, 0x6e, 0xb3, 0xd8, 0x8f, 0x7f, 0x8f, 0x26, 0x09, 0xe1, 0x2d, 0xc0, 0x2a, + 0x0d, 0x0c, 0x9e, 0xf9, 0xf1, 0xc3, 0x95, 0x83, 0xfc, 0x3f, 0x71, 0x06, 0x47, 0x7d, 0xca, 0x06, + 0xb3, 0x87, 0x1a, 0xb5, 0xce, 0x05, 0xbe, 0x7c, 0x40, 0xbf, 0x55, 0x14, 0x85, 0x21, 0x50, 0x1c, + 0x81, 0x26, 0xc3, 0x21, 0x05, 0x97, 0x57, 0x4b, 0x89, 0x70, 0x5c, 0xc2, 0x9e, 0x4a, 0xbc, 0xcd, + 0x65, 0x6d, 0x2e, 0x1c, 0x45, 0x75, 0x6e, 0xbe, 0xe0, 0x04, 0xdd, 0xb4, 0x4b, 0x16, 0x4f, 0xba, + 0xf8, 0x29, 0x70, 0xe6, 0x61, 0x20, 0x88, 0x29, 0xa6, 0xcd, 0x95, 0x7b, 0x1a, 0xea, 0xbd, 0x68, + 0x82, 0x22, 0x2e, 0x45, 0x60, 0x7e, 0x1a, 0xe8, 0x52, 0x7a, 0x06, 0xb2, 0x3b, 0x3e, 0xd7, 0x5a, + 0x90, 0xd5, 0x8f, 0x19, 0x58, 0xd5, 0x2c, 0x07, 0x0e, 0x28, 0x6d, 0xa7, 0x49, 0xc4, 0x05, 0xcc, + 0x05, 0xda, 0x9d, 0x87, 0x72, 0xed, 0x0a, 0x5c, 0x12, 0x80, 0x20, 0x60, 0x39, 0x1c, 0xce, 0x13, + 0x99, 0xae, 0xd6, 0x90, 0xfe, 0x71, 0xa5, 0xf3, 0x7c, 0x76, 0xdb, 0xf5, 0x74, 0xcf, 0x7e, 0x48, + 0x24, 0x9d, 0x3d, 0x8b, 0x5d, 0x69, 0x4e, 0x9d, 0xd5, 0x38, 0x37, 0xdd, 0xb3, 0x3f, 0x75, 0x6d, + 0x97, 0xd2, 0xbe, 0x5b, 0xb9, 0xd4, 0x79, 0x73, 0xe0, 0x43, 0xfd, 0xec, 0xb2, 0xa3, 0x53, 0xb9, + 0xd4, 0xc9, 0x4e, 0x21, 0xb4, 0xcd, 0xf6, 0x5c, 0x05, 0xe9, 0x66, 0x92, 0x92, 0x78, 0x62, 0x9f, + 0xf7, 0x2e, 0x1a, 0xc6, 0xda, 0x25, 0x03, 0xa5, 0xd2, 0xbc, 0xcf, 0x65, 0x35, 0xc5, 0x38, 0xd6, + 0x49, 0x1e, 0x53, 0xac, 0xc2, 0x0d, 0x63, 0x8a, 0x01, 0x9c, 0x4c, 0xf1, 0xef, 0x71, 0xb2, 0xf8, + 0x3b, 0x39, 0x33, 0xac, 0x02, 0x90, 0x19, 0x0e, 0x98, 0x27, 0x98, 0xf1, 0x52, 0xd2, 0xf2, 0x15, + 0x33, 0x0d, 0x35, 0x7f, 0x37, 0x4c, 0xe8, 0x7e, 0x55, 0xec, 0x1f, 0xee, 0x49, 0xdd, 0xe8, 0x4e, + 0x5f, 0xfc, 0x98, 0x44, 0xef, 0xee, 0xdd, 0x9d, 0xea, 0x6d, 0xc9, 0xee, 0xf8, 0x3c, 0xbd, 0xad, + 0x4d, 0xd9, 0xfe, 0xc5, 0xad, 0x13, 0x2f, 0x11, 0x7e, 0x1b, 0x13, 0xef, 0x73, 0x17, 0xf5, 0x7c, + 0xc0, 0x10, 0x2b, 0xc3, 0x91, 0x95, 0x81, 0xb7, 0x30, 0xed, 0xca, 0x1c, 0x88, 0xa1, 0x83, 0x0d, + 0xe1, 0xf9, 0x60, 0x82, 0x26, 0x94, 0xbb, 0x8e, 0x7d, 0xea, 0x48, 0x32, 0x8c, 0xc6, 0x70, 0x44, + 0xad, 0x2c, 0x6f, 0x04, 0x20, 0x42, 0xbd, 0x9f, 0xe4, 0x47, 0x3d, 0x88, 0x8d, 0xa7, 0xfe, 0x7b, + 0xa9, 0x73, 0xf0, 0xc8, 0xde, 0xc1, 0x5f, 0x7d, 0xc4, 0xd2, 0x4e, 0xd9, 0xdd, 0x99, 0xbd, 0xb4, + 0x4d, 0x39, 0xd5, 0xa5, 0xd1, 0x00, 0xb8, 0x05, 0x34, 0x08, 0xef, 0x70, 0x34, 0x88, 0xba, 0x68, + 0x53, 0x44, 0x23, 0xdb, 0x01, 0x17, 0x2a, 0x59, 0x82, 0x33, 0x6f, 0x69, 0xe3, 0x13, 0x9b, 0x92, + 0xd1, 0x35, 0xc1, 0x40, 0x83, 0xc4, 0x9b, 0x1e, 0xca, 0xd9, 0x41, 0x52, 0xe2, 0xcd, 0xcb, 0xbf, + 0x01, 0xa1, 0xdf, 0x01, 0x4e, 0x16, 0x57, 0xf0, 0xb3, 0x94, 0x81, 0x16, 0x65, 0x6f, 0x8f, 0x76, + 0xb6, 0x20, 0x8e, 0x48, 0xd8, 0x83, 0x30, 0xdd, 0xfe, 0x09, 0xbc, 0x30, 0x74, 0x1b, 0xa0, 0x08, + 0x53, 0x62, 0x10, 0x30, 0x1d, 0xc1, 0xab, 0x5b, 0x4c, 0x90, 0x97, 0xbd, 0xcf, 0x0f, 0x83, 0x20, + 0x74, 0x36, 0xa4, 0x72, 0xc8, 0x41, 0xa6, 0xd2, 0xe5, 0x88, 0x0b, 0x3d, 0x52, 0x1d, 0x4e, 0xd8, + 0x10, 0xc6, 0x84, 0xa7, 0x2d, 0x28, 0xa5, 0xcc, 0xfc, 0x61, 0xb4, 0x20, 0xa4, 0x39, 0x48, 0x48, + 0xd3, 0xf6, 0xd9, 0xe0, 0xa1, 0x8b, 0x43, 0x92, 0x86, 0x81, 0x72, 0x24, 0x8d, 0xe8, 0x7d, 0xe1, + 0x96, 0x48, 0x13, 0x82, 0xf1, 0xaa, 0xb4, 0xe9, 0xe6, 0x10, 0x02, 0x03, 0x20, 0x8e, 0x25, 0x60, + 0x13, 0x01, 0x81, 0x49, 0x26, 0xeb, 0xf6, 0x3a, 0x81, 0xe8, 0x3e, 0x44, 0x0b, 0x79, 0x92, 0xae, + 0x91, 0xbc, 0xb9, 0x9e, 0x45, 0x02, 0x01, 0x1c, 0xb8, 0x01, 0x19, 0x18, 0xb3, 0x37, 0xf6, 0xaa, + 0x27, 0xc9, 0xae, 0x56, 0x65, 0xef, 0x1e, 0xa5, 0xf3, 0x12, 0x13, 0x1a, 0xc0, 0xda, 0x9d, 0x36, + 0x19, 0x48, 0x6c, 0x56, 0x07, 0xbc, 0xcd, 0x85, 0x8a, 0x71, 0xe4, 0x02, 0x3c, 0x5e, 0x8f, 0x65, + 0x50, 0x03, 0x76, 0xb8, 0x8f, 0x3a, 0x40, 0x90, 0xd1, 0x5e, 0xc2, 0x12, 0x73, 0x02, 0x89, 0x78, + 0x80, 0x43, 0x19, 0xa8, 0xf5, 0xee, 0x4d, 0x24, 0xd0, 0x01, 0x2e, 0xc9, 0x74, 0xb5, 0xc2, 0x18, + 0xcb, 0x3c, 0xb0, 0x8d, 0x01, 0x38, 0x04, 0x86, 0x9b, 0xeb, 0x81, 0x5f, 0xa9, 0xfe, 0xb6, 0xc1, + 0x23, 0x7b, 0x53, 0x7d, 0x7b, 0xa0, 0x0d, 0x34, 0x48, 0xf5, 0xee, 0x4f, 0xf5, 0xef, 0x81, 0x4d, + 0x0b, 0xca, 0x13, 0x49, 0x29, 0xa6, 0xae, 0xff, 0xb3, 0xbb, 0x20, 0x99, 0xb2, 0xc3, 0x1b, 0x6a, + 0x15, 0xed, 0xf2, 0x77, 0xd4, 0x7f, 0x0d, 0xb1, 0x10, 0x7a, 0x5d, 0xa8, 0x68, 0xcd, 0xe6, 0x70, + 0x0c, 0x13, 0xc1, 0x74, 0xf7, 0x49, 0x6b, 0x6c, 0xef, 0x3e, 0x75, 0x00, 0x42, 0x82, 0x2c, 0x27, + 0x8b, 0x9f, 0x73, 0xfc, 0xe4, 0xec, 0xd5, 0xcf, 0xb2, 0x37, 0x76, 0xb0, 0x63, 0xc5, 0x94, 0x38, + 0xc2, 0x39, 0x92, 0x02, 0x5a, 0x51, 0x52, 0xb0, 0xbf, 0x52, 0xfd, 0x6d, 0xf0, 0x07, 0xdb, 0x25, + 0x4b, 0x96, 0x54, 0xef, 0xae, 0x54, 0x6f, 0x4b, 0xfa, 0xe2, 0x69, 0x96, 0x1e, 0x65, 0x1e, 0x02, + 0x72, 0x6d, 0xd7, 0xe0, 0xa1, 0xcf, 0xd3, 0x47, 0xdb, 0x33, 0x1f, 0xf6, 0xa6, 0xfa, 0xe4, 0xd4, + 0x97, 0x1f, 0x65, 0xbf, 0x38, 0x98, 0xea, 0xdd, 0xad, 0xf4, 0xf7, 0x65, 0xbb, 0xbb, 0xe1, 0x3b, + 0x60, 0xff, 0x77, 0x3f, 0x3e, 0x24, 0xed, 0x12, 0x9b, 0xc3, 0xd8, 0xd4, 0x7c, 0x52, 0xf3, 0xc7, + 0xb6, 0x5e, 0xf1, 0x7a, 0xdd, 0x10, 0xfe, 0xd8, 0x06, 0x02, 0xae, 0x90, 0xc5, 0x19, 0x3c, 0x82, + 0xdd, 0x01, 0x93, 0x6c, 0x82, 0xfe, 0x37, 0x63, 0x44, 0xb4, 0xf6, 0xba, 0x34, 0x0c, 0x54, 0x1d, + 0xe3, 0x31, 0x0e, 0x21, 0x30, 0xff, 0x5a, 0x8f, 0x51, 0xaf, 0xb3, 0x1d, 0x23, 0x0b, 0x42, 0xc6, + 0x58, 0x83, 0xc7, 0x08, 0xe6, 0x59, 0x18, 0x23, 0x6b, 0x30, 0x56, 0x4b, 0xc0, 0xb3, 0xd2, 0x37, + 0xe4, 0x18, 0xf9, 0x8f, 0xe0, 0x79, 0x04, 0x1e, 0x9d, 0xd5, 0xf3, 0x08, 0x76, 0x68, 0x33, 0x6d, + 0xeb, 0xc9, 0xb8, 0x5e, 0x95, 0xc5, 0x27, 0xe8, 0xf3, 0x08, 0x3c, 0xae, 0x12, 0xd6, 0x1a, 0x8b, + 0xd3, 0x20, 0xb3, 0x86, 0x58, 0x2f, 0x3f, 0xf4, 0xf8, 0x8e, 0xb8, 0x50, 0x91, 0xaa, 0xf5, 0x5b, + 0xf3, 0x07, 0xad, 0xb1, 0xe5, 0x0f, 0x1d, 0x80, 0x0c, 0xf1, 0x0f, 0x39, 0x59, 0x3c, 0xc3, 0xd1, + 0x83, 0x82, 0x5a, 0x45, 0x0e, 0x0a, 0xfb, 0x6c, 0x4d, 0x8f, 0x3a, 0xd0, 0xdd, 0xb0, 0x3a, 0x3e, + 0xc2, 0xdb, 0x09, 0x51, 0x7e, 0xaf, 0x0b, 0x4d, 0x01, 0x99, 0x4d, 0xf7, 0x29, 0xcd, 0x3d, 0xdd, + 0xfc, 0xfc, 0xde, 0x06, 0xd0, 0xf6, 0xf9, 0xbd, 0x2d, 0x3c, 0x21, 0xe4, 0x07, 0x9c, 0x2c, 0x06, + 0xf8, 0x19, 0x86, 0xb8, 0x32, 0x26, 0x68, 0xf7, 0x4b, 0xce, 0xf5, 0xda, 0x6d, 0x13, 0xf9, 0xf8, + 0x1c, 0x6d, 0x6b, 0x8b, 0x83, 0x27, 0x3e, 0xbc, 0x66, 0xf2, 0x5a, 0x39, 0x84, 0x31, 0xea, 0x5a, + 0x14, 0x77, 0xa6, 0xf2, 0x5b, 0xca, 0x45, 0x5d, 0x1b, 0xf3, 0x20, 0x89, 0x0d, 0xa0, 0x2d, 0x49, + 0x6c, 0xe1, 0x09, 0x49, 0x32, 0xe0, 0xc7, 0xf1, 0xac, 0xc1, 0x7f, 0xd1, 0x04, 0x8e, 0x93, 0xd9, + 0xea, 0xe6, 0x8f, 0xb6, 0x73, 0x83, 0x3b, 0x3a, 0xa1, 0x85, 0xbb, 0xc1, 0xd4, 0x32, 0x91, 0x43, + 0xad, 0x54, 0x6f, 0x4b, 0xaa, 0xf7, 0xbc, 0x5d, 0xd7, 0xaa, 0x60, 0xef, 0xdb, 0x0f, 0x30, 0xb0, + 0x84, 0x54, 0x02, 0x7f, 0xfe, 0x2b, 0x65, 0xe0, 0x00, 0xb0, 0x5d, 0xaa, 0xb7, 0x4f, 0xb3, 0xfa, + 0x3b, 0xb8, 0x53, 0x9a, 0x48, 0x9b, 0x1b, 0xf9, 0xe3, 0xef, 0x46, 0xd0, 0xe4, 0x8b, 0x62, 0x02, + 0x3e, 0x5d, 0x2d, 0x35, 0x87, 0x83, 0x52, 0x6d, 0x3c, 0xda, 0x1c, 0x0e, 0x49, 0x71, 0x7e, 0x81, + 0x0d, 0xed, 0x2c, 0xa1, 0x29, 0xc1, 0x17, 0x0e, 0xaf, 0x11, 0xa1, 0xfa, 0x9f, 0xba, 0x64, 0xf1, + 0x1b, 0x8e, 0x7f, 0xc7, 0x99, 0x76, 0x70, 0x3e, 0xd4, 0xa2, 0xfd, 0xa7, 0x2f, 0x9f, 0xd0, 0x14, + 0x79, 0xa5, 0x6f, 0x3f, 0x2c, 0xc2, 0xec, 0x8e, 0xf3, 0x99, 0x13, 0xfb, 0x53, 0x7d, 0xfb, 0x52, + 0x5f, 0xde, 0x48, 0xf5, 0xed, 0x49, 0xf5, 0x9d, 0x55, 0x3e, 0xd8, 0x9a, 0xed, 0xbe, 0xa4, 0xdc, + 0xd8, 0x9e, 0xea, 0x7d, 0x3f, 0x7d, 0xe1, 0x24, 0xc4, 0x99, 0x31, 0x77, 0xe5, 0xbe, 0x9b, 0x1f, + 0xc7, 0xf3, 0xf8, 0x8a, 0x7b, 0xc9, 0x70, 0xe7, 0xb1, 0x3c, 0x46, 0x28, 0x09, 0xaf, 0x96, 0xf1, + 0x9f, 0x78, 0x72, 0x77, 0xb8, 0xa8, 0xaf, 0x6c, 0x1e, 0x3c, 0x64, 0x03, 0x68, 0xcb, 0x43, 0xb6, + 0xf0, 0x64, 0x36, 0xdf, 0xc7, 0x97, 0x1b, 0x33, 0x0c, 0xbe, 0xb1, 0x66, 0xb1, 0x32, 0x87, 0x5c, + 0x4d, 0x82, 0x05, 0x93, 0xde, 0x90, 0xd9, 0x81, 0x3b, 0x78, 0xd4, 0x3a, 0x52, 0x48, 0xa5, 0xc4, + 0xc3, 0xcb, 0xa4, 0xa4, 0x99, 0x0c, 0x56, 0x31, 0x58, 0x6d, 0x69, 0x50, 0x96, 0x1f, 0x30, 0x23, + 0x57, 0x5f, 0xa3, 0x97, 0x7f, 0xb6, 0x04, 0x58, 0xc4, 0x6e, 0xac, 0x1a, 0x01, 0x1c, 0x68, 0xc0, + 0xfa, 0x15, 0xf1, 0xc3, 0xa7, 0xc4, 0xff, 0xe9, 0x02, 0xdf, 0x62, 0x33, 0x29, 0x2c, 0x6f, 0x36, + 0x6d, 0x69, 0x31, 0x27, 0x4f, 0x68, 0x42, 0x8c, 0x7f, 0xe7, 0x64, 0xf1, 0x4f, 0x39, 0x7e, 0x96, + 0x33, 0x35, 0xc8, 0x0e, 0x7e, 0x7a, 0xa8, 0x97, 0xef, 0x36, 0x0d, 0xef, 0xc6, 0xae, 0x6e, 0xed, + 0xe3, 0x6c, 0x9a, 0x03, 0xfe, 0x7d, 0xab, 0xfd, 0x6c, 0x4d, 0x32, 0x90, 0x6c, 0x4a, 0xe4, 0xb1, + 0x9f, 0x01, 0x60, 0xfe, 0xfb, 0x19, 0x85, 0x27, 0xd4, 0xdf, 0xcd, 0xc9, 0xe2, 0x0f, 0x79, 0x2f, + 0x1c, 0xf0, 0xcb, 0xe1, 0x30, 0x4b, 0xee, 0x16, 0xb1, 0x73, 0x88, 0x7e, 0xd2, 0xcd, 0x03, 0x06, + 0xa3, 0xfd, 0x82, 0xfb, 0x99, 0x61, 0x8b, 0xa9, 0x04, 0x1e, 0x94, 0x2a, 0x98, 0xde, 0x77, 0xa1, + 0x49, 0x6b, 0xb6, 0x44, 0x82, 0x79, 0x2c, 0x42, 0x4b, 0x30, 0xdb, 0x45, 0x68, 0x03, 0xcd, 0x70, + 0x64, 0x2d, 0xff, 0x44, 0x95, 0x48, 0xf0, 0xea, 0x3e, 0x36, 0x78, 0xa4, 0x8d, 0xa6, 0x20, 0xec, + 0x48, 0x5f, 0x3c, 0x9d, 0xdd, 0xf1, 0x59, 0xa6, 0xfb, 0x64, 0x7a, 0xcf, 0xd9, 0xcc, 0xaf, 0x7b, + 0xdc, 0x79, 0xc2, 0x61, 0x72, 0x54, 0xb8, 0x9f, 0x1e, 0x3e, 0x39, 0xb6, 0x44, 0xb0, 0xab, 0xe2, + 0x7f, 0xe5, 0x10, 0xaf, 0x3b, 0xfc, 0xac, 0x95, 0x1a, 0x63, 0x0d, 0x81, 0xa4, 0x64, 0xb6, 0xae, + 0x9b, 0x61, 0x6c, 0xad, 0xeb, 0x56, 0xa0, 0x84, 0x06, 0x6d, 0x9c, 0x2c, 0x56, 0xf2, 0x25, 0x6c, + 0x0c, 0x40, 0x62, 0xfc, 0x38, 0x77, 0x32, 0xd3, 0xbe, 0x93, 0xbe, 0xad, 0x37, 0xd7, 0x94, 0x92, + 0xb4, 0x6a, 0x38, 0x7d, 0x0e, 0x84, 0xd0, 0xa8, 0xf0, 0x3e, 0x9d, 0x6f, 0x08, 0x8d, 0x48, 0x34, + 0x24, 0x25, 0xc9, 0x58, 0xf0, 0x12, 0xf8, 0x1f, 0x1c, 0xe2, 0x99, 0xd7, 0x42, 0xb6, 0x58, 0x9b, + 0x61, 0x6c, 0xb1, 0xb6, 0x02, 0x25, 0x58, 0xef, 0xe1, 0x64, 0xb1, 0x82, 0x9f, 0x41, 0x9e, 0x95, + 0x62, 0x44, 0x58, 0xdc, 0xa8, 0xd3, 0xa9, 0xe1, 0x2d, 0x12, 0x53, 0x83, 0xb1, 0x5d, 0xee, 0x5e, + 0x7a, 0x4b, 0xd8, 0x82, 0xcd, 0x87, 0x0e, 0x89, 0xe8, 0x5d, 0xea, 0xa4, 0xeb, 0xde, 0x44, 0xf6, + 0xe8, 0x9b, 0x61, 0x6c, 0xd1, 0xb7, 0x02, 0x65, 0x26, 0x7d, 0xa1, 0x3a, 0xe9, 0x27, 0xb4, 0xcb, + 0x75, 0xd6, 0x69, 0xda, 0x5d, 0xc2, 0x9e, 0x3a, 0x59, 0xf4, 0x31, 0xe2, 0x3f, 0xf4, 0xdd, 0x21, + 0xc4, 0xf9, 0x6f, 0x5c, 0xfa, 0x0d, 0x99, 0x86, 0xf3, 0x93, 0x76, 0x77, 0x43, 0xb9, 0x18, 0x97, + 0x0e, 0x0d, 0x48, 0xf0, 0x95, 0x5d, 0xb2, 0xf8, 0x17, 0xda, 0x6e, 0xc3, 0x46, 0x89, 0x61, 0x91, + 0x23, 0xbb, 0xcd, 0x39, 0xdb, 0xdd, 0x86, 0xa5, 0xd4, 0x77, 0xb6, 0xc3, 0x68, 0xa3, 0x65, 0xc3, + 0x4e, 0x31, 0xb3, 0xf1, 0x0c, 0x7f, 0x6b, 0x4c, 0xa7, 0x72, 0xdc, 0x78, 0x72, 0xf9, 0xa8, 0xd1, + 0xfe, 0x09, 0x9b, 0xdb, 0xc9, 0x5c, 0xd2, 0x3f, 0x39, 0x24, 0x1c, 0xa1, 0xfc, 0x21, 0x4e, 0x16, + 0x97, 0xf2, 0x3e, 0x33, 0xe1, 0x95, 0xb6, 0xab, 0xa9, 0xeb, 0x1f, 0xb0, 0xd8, 0x90, 0xa7, 0x62, + 0x25, 0x6c, 0xf4, 0x32, 0xb6, 0x06, 0xd6, 0x1e, 0x7f, 0xa7, 0xd6, 0xde, 0x5f, 0x69, 0x62, 0x16, + 0x62, 0x4a, 0x07, 0x83, 0xd1, 0xa6, 0x48, 0xd2, 0x4e, 0xcc, 0xb2, 0x30, 0x43, 0x88, 0x59, 0x23, + 0xa8, 0xfe, 0xa2, 0x76, 0x2e, 0x3f, 0x49, 0x73, 0x62, 0xcf, 0x7e, 0x7e, 0x46, 0xe9, 0xbc, 0x4a, + 0xb8, 0xcd, 0xba, 0xd8, 0x31, 0x06, 0x6b, 0x4e, 0x08, 0xcf, 0x00, 0x7c, 0x0d, 0x0b, 0xd2, 0xbf, + 0xd7, 0x04, 0xa9, 0x33, 0x5e, 0x66, 0x98, 0x21, 0x04, 0xa9, 0x25, 0x5e, 0x11, 0xe3, 0xab, 0x17, + 0x40, 0x80, 0x79, 0xf5, 0x62, 0xc2, 0x68, 0xb1, 0xfb, 0xd9, 0xe1, 0x60, 0x54, 0xfe, 0x0e, 0xf9, + 0x8b, 0xc8, 0xc9, 0xfd, 0x2e, 0x34, 0x71, 0x65, 0xb8, 0x3e, 0x9e, 0x8b, 0x9e, 0x69, 0xcc, 0x16, + 0x40, 0xb6, 0x2e, 0x18, 0x96, 0xb0, 0x04, 0xc1, 0x8f, 0x39, 0x59, 0x0c, 0xf3, 0xe3, 0xe1, 0x59, + 0xb3, 0x8e, 0xe1, 0x7a, 0x28, 0x50, 0xde, 0x3f, 0xa1, 0xf4, 0x6c, 0xcf, 0xc1, 0x93, 0x06, 0x2a, + 0xdd, 0x7d, 0x20, 0xd5, 0x7b, 0x1e, 0x2a, 0x00, 0xfa, 0xeb, 0x96, 0xad, 0xca, 0xa9, 0x2e, 0x28, + 0x51, 0xff, 0x6e, 0x3b, 0x37, 0xb8, 0xed, 0x1c, 0x0b, 0x00, 0xdb, 0xe8, 0x7c, 0xf7, 0xb0, 0x27, + 0xfd, 0x3f, 0x6b, 0xdb, 0x87, 0xf3, 0xa4, 0x9b, 0x61, 0x86, 0xd8, 0x3e, 0x2c, 0x69, 0xf2, 0xae, + 0xba, 0x79, 0x96, 0xb0, 0x2f, 0x05, 0x0c, 0xeb, 0x79, 0x86, 0xf9, 0xb1, 0x80, 0x69, 0x19, 0x54, + 0xf8, 0x6e, 0x79, 0x19, 0xf0, 0x7f, 0xed, 0x62, 0x9c, 0xe0, 0x29, 0xaa, 0xf6, 0x4e, 0xf0, 0x39, + 0x88, 0x96, 0x0e, 0x0d, 0x48, 0xd0, 0xfc, 0x2f, 0x9c, 0x2c, 0x5e, 0xe1, 0x8c, 0x6e, 0xf0, 0x80, + 0x08, 0xd9, 0x29, 0x8e, 0x0c, 0xf1, 0x92, 0x80, 0x05, 0xfe, 0xce, 0xce, 0x22, 0xf0, 0x51, 0x4c, + 0xe4, 0xb9, 0xfc, 0xb0, 0x16, 0x12, 0xff, 0x5f, 0x5d, 0x68, 0x72, 0x2e, 0x35, 0xd6, 0x46, 0x6b, + 0xa5, 0x78, 0xa3, 0x9d, 0x4f, 0xac, 0x0e, 0xa7, 0x42, 0x0d, 0xe1, 0x13, 0x9b, 0x0b, 0x4c, 0xc8, + 0xfc, 0x6f, 0x9c, 0x2c, 0xfe, 0x35, 0xc7, 0x3f, 0x6b, 0x47, 0xe6, 0x32, 0x0f, 0x1b, 0x9d, 0x06, + 0x22, 0x74, 0x11, 0x1b, 0x09, 0x6e, 0x71, 0xcf, 0x4f, 0x83, 0xf5, 0x9b, 0x0e, 0x8d, 0xea, 0x0a, + 0x87, 0xf8, 0xf5, 0x52, 0x3c, 0xbc, 0x71, 0x8b, 0x33, 0xef, 0x9a, 0x61, 0x6c, 0x79, 0xd7, 0x0a, + 0x94, 0x50, 0xfb, 0x2d, 0xac, 0xf9, 0x41, 0x3c, 0x10, 0x4d, 0x6e, 0x69, 0x81, 0xb2, 0xdd, 0xb6, + 0x35, 0x0e, 0x2e, 0x03, 0xf6, 0x5c, 0x6b, 0x88, 0x0f, 0xf2, 0xcf, 0x1c, 0x7a, 0x68, 0x99, 0xa4, + 0x8e, 0x24, 0xda, 0x14, 0x0f, 0xc2, 0xa5, 0x67, 0x82, 0xb7, 0x7a, 0x70, 0x6f, 0x04, 0xb1, 0x75, + 0x9d, 0xb4, 0x80, 0x24, 0x48, 0xbe, 0xa9, 0x0a, 0x28, 0x92, 0xb5, 0x2e, 0x4e, 0x40, 0x3c, 0xe0, + 0x06, 0x4d, 0x7d, 0xac, 0x1d, 0x2a, 0x1d, 0x7d, 0xac, 0x73, 0x50, 0xa5, 0x1d, 0x10, 0x1f, 0xeb, + 0xdf, 0x80, 0x4e, 0x65, 0x78, 0x9e, 0xf3, 0x84, 0xfd, 0xb3, 0x46, 0xc3, 0xeb, 0x9c, 0x27, 0x87, + 0x84, 0xd3, 0x75, 0x09, 0x81, 0x9f, 0x02, 0x08, 0xe0, 0x81, 0xc0, 0x63, 0x1b, 0x82, 0x99, 0x5d, + 0x85, 0x63, 0xe4, 0x51, 0x13, 0x56, 0x30, 0xf4, 0x2c, 0x87, 0x26, 0x1a, 0x47, 0xf1, 0x7a, 0x34, + 0x22, 0x25, 0xcc, 0xbb, 0xad, 0x05, 0x90, 0xed, 0x6e, 0x6b, 0x09, 0xab, 0xaf, 0xce, 0x6a, 0xde, + 0x63, 0xc6, 0x00, 0xaf, 0x42, 0xa5, 0x83, 0x64, 0x62, 0x70, 0x0f, 0x09, 0x01, 0xd7, 0xb5, 0xfc, + 0xec, 0x7c, 0x90, 0x7d, 0x1b, 0xa3, 0xf4, 0x5f, 0x38, 0x46, 0xf6, 0xc1, 0xd0, 0xe8, 0x33, 0xed, + 0x39, 0x43, 0x3c, 0x9b, 0xca, 0x09, 0xb4, 0x3a, 0x37, 0x5f, 0x70, 0x82, 0x73, 0x13, 0xc4, 0x4f, + 0xc8, 0xc5, 0x88, 0x8d, 0x5f, 0xe9, 0x76, 0xae, 0x1e, 0x8e, 0xb0, 0xd7, 0x42, 0x17, 0xfe, 0x05, + 0x07, 0xcf, 0x01, 0xe0, 0xf5, 0x5c, 0x2c, 0x98, 0xe0, 0x1d, 0x1e, 0xd7, 0xc5, 0x82, 0x09, 0xc7, + 0xe7, 0x00, 0x0c, 0x94, 0xee, 0xb5, 0xf7, 0x32, 0x3f, 0x03, 0x74, 0xf9, 0x54, 0xdf, 0x3e, 0x78, + 0x4f, 0x05, 0x43, 0x6f, 0x8e, 0x05, 0x09, 0x5a, 0x43, 0xd4, 0x0f, 0xf5, 0x70, 0x8c, 0xc5, 0xab, + 0x59, 0xc5, 0xe0, 0xdf, 0x38, 0x54, 0x02, 0x21, 0xfb, 0xc3, 0xa1, 0x78, 0x55, 0x34, 0xb2, 0xb1, + 0x21, 0x1c, 0x4c, 0x2e, 0x8d, 0x47, 0x1b, 0xd7, 0xc7, 0x82, 0x66, 0xf7, 0x1a, 0x3b, 0x48, 0x5b, + 0xf7, 0x1a, 0xfb, 0x06, 0x04, 0xe9, 0xdf, 0x95, 0xc5, 0x45, 0xfc, 0x23, 0xe4, 0xbd, 0x67, 0xef, + 0x2e, 0xfc, 0xc2, 0x6c, 0xfb, 0xa7, 0x99, 0xf3, 0x5b, 0x49, 0x9e, 0x02, 0xfb, 0x2a, 0x8c, 0xea, + 0x4b, 0xfc, 0xe2, 0x7c, 0x51, 0x85, 0x77, 0x66, 0xa1, 0x77, 0xcb, 0xd5, 0x8e, 0x82, 0x64, 0x38, + 0xfc, 0x3f, 0xb2, 0xcf, 0x03, 0x21, 0x92, 0xa4, 0xd3, 0xf3, 0x40, 0x02, 0x31, 0xb4, 0x66, 0xa4, + 0x01, 0xea, 0x6c, 0x5a, 0x49, 0x5f, 0x7a, 0xa8, 0xb3, 0x85, 0xa3, 0x48, 0x92, 0x39, 0x9d, 0xed, + 0xf8, 0x96, 0x0e, 0x40, 0x19, 0x45, 0x30, 0x4f, 0x89, 0x44, 0x42, 0x4e, 0xf2, 0x19, 0x0e, 0x4d, + 0xd1, 0x87, 0x25, 0x05, 0x9b, 0xe2, 0xe1, 0xe4, 0x16, 0xb2, 0x95, 0xd8, 0x33, 0x9e, 0x11, 0xd0, + 0xd6, 0x6c, 0x6a, 0x0b, 0x4f, 0xd0, 0xde, 0x8c, 0x0f, 0x71, 0xc4, 0xef, 0xb4, 0xbb, 0x5d, 0x69, + 0x3b, 0x97, 0xe9, 0x6f, 0x25, 0x68, 0x5b, 0x17, 0x0f, 0x67, 0x2b, 0x49, 0x90, 0x8f, 0x92, 0xad, + 0xe4, 0xf7, 0x38, 0x78, 0x20, 0xbb, 0x5c, 0xda, 0x12, 0x0b, 0x84, 0xe3, 0x09, 0xeb, 0x07, 0xb2, + 0xcb, 0xa5, 0x2d, 0xb5, 0x6a, 0xad, 0xe3, 0x03, 0x59, 0x1d, 0x48, 0x7f, 0x61, 0xa5, 0x23, 0xd2, + 0xb3, 0x7d, 0x50, 0x3e, 0x8d, 0xb3, 0x85, 0x18, 0x10, 0x31, 0x16, 0x0f, 0x47, 0xc4, 0x6c, 0xa6, + 0x23, 0xbe, 0xc9, 0xca, 0xd4, 0x1a, 0x92, 0x8d, 0x79, 0xed, 0x96, 0x98, 0x94, 0xe0, 0xed, 0x55, + 0x44, 0x16, 0xce, 0xf1, 0x72, 0xc1, 0x02, 0x5a, 0x5f, 0x9e, 0x2f, 0x50, 0x47, 0x00, 0xfc, 0x80, + 0xee, 0x68, 0x9f, 0x72, 0x6c, 0x97, 0xbb, 0x14, 0x56, 0x26, 0x9b, 0xad, 0x31, 0x17, 0x86, 0x41, + 0x76, 0x01, 0x3f, 0x3f, 0x1f, 0x64, 0x69, 0x92, 0xe9, 0x24, 0x46, 0xeb, 0x34, 0xa4, 0xfb, 0x86, + 0xb0, 0xda, 0x6b, 0x9a, 0xea, 0xeb, 0xa5, 0x44, 0x52, 0x0a, 0xad, 0x0c, 0x04, 0x37, 0x85, 0xd5, + 0x4d, 0x66, 0xbe, 0xc5, 0x5e, 0x68, 0x03, 0x4b, 0x51, 0x17, 0x86, 0xd3, 0x84, 0xe0, 0x7f, 0x9c, + 0xbb, 0x13, 0x04, 0x78, 0x9d, 0x7f, 0x6d, 0x18, 0xba, 0x42, 0xf9, 0x3b, 0xf0, 0x87, 0xb6, 0xc3, + 0x34, 0x48, 0xcd, 0x52, 0x43, 0xa2, 0xfc, 0x1d, 0xfc, 0x7f, 0x2e, 0x9d, 0xfe, 0x8c, 0x86, 0x04, + 0x56, 0x7b, 0x21, 0xc1, 0x9f, 0x13, 0xbc, 0xbd, 0x00, 0xa2, 0x20, 0xb6, 0xba, 0xa0, 0x05, 0xa4, + 0x61, 0xad, 0x6b, 0x1b, 0x0d, 0xd8, 0xa0, 0xe8, 0x5a, 0xb7, 0x2c, 0x1e, 0xce, 0x5a, 0xa7, 0x96, + 0x27, 0xfe, 0xbf, 0xb3, 0xa2, 0x77, 0x75, 0xa2, 0xa6, 0x31, 0x50, 0x2f, 0x39, 0x88, 0x5e, 0x02, + 0x31, 0xb4, 0xe8, 0xd5, 0x00, 0x09, 0x3a, 0x7b, 0x39, 0x59, 0x7c, 0x9d, 0x86, 0xad, 0xc7, 0xf3, + 0xc6, 0xe4, 0x3d, 0x1d, 0x3c, 0x70, 0x54, 0xd9, 0xd6, 0x49, 0x90, 0x5b, 0xe8, 0x38, 0xdb, 0x36, + 0xad, 0x86, 0x23, 0x93, 0xa3, 0x89, 0x30, 0xc6, 0x72, 0x90, 0x3c, 0x07, 0x30, 0x30, 0x64, 0x82, + 0x9f, 0x3d, 0x24, 0xd3, 0x26, 0x1c, 0x9f, 0x03, 0xe4, 0x82, 0xea, 0x4f, 0xd3, 0xab, 0xd9, 0xb5, + 0x4d, 0xb0, 0x9d, 0x67, 0x87, 0xad, 0xb2, 0xb7, 0x35, 0xd5, 0x7b, 0x1e, 0xd2, 0x19, 0xb0, 0x91, + 0xe8, 0x1d, 0xe3, 0xcb, 0xdb, 0x30, 0x79, 0x82, 0xff, 0x5f, 0x19, 0x8d, 0x98, 0x9e, 0x90, 0xb7, + 0xc4, 0x24, 0x7b, 0x8d, 0x98, 0x01, 0x1a, 0x52, 0x23, 0x36, 0xc0, 0x12, 0x74, 0xe3, 0xb2, 0xf8, + 0x2c, 0x15, 0xd5, 0xda, 0xa9, 0x0c, 0xf2, 0x56, 0xb9, 0x67, 0x02, 0xce, 0xe2, 0xf2, 0x35, 0xcb, + 0x2d, 0x01, 0x1c, 0xde, 0x77, 0xd8, 0x9d, 0xd9, 0x54, 0xf6, 0x54, 0x27, 0xf4, 0x11, 0x3a, 0xa6, + 0xca, 0x40, 0x24, 0xf4, 0x66, 0x38, 0x94, 0xdc, 0x54, 0x1b, 0x08, 0x6e, 0x0e, 0xd4, 0x4b, 0x09, + 0xb3, 0x37, 0xae, 0x2d, 0xa8, 0xad, 0x37, 0xae, 0x43, 0x0b, 0x82, 0x76, 0x3d, 0x1c, 0x53, 0x29, + 0x56, 0x4a, 0xdb, 0xe5, 0x54, 0xdf, 0xaf, 0x95, 0xde, 0x33, 0x4a, 0xf7, 0x75, 0xa5, 0xa3, 0xcd, + 0x6d, 0x5b, 0x33, 0x1c, 0x95, 0xb1, 0xee, 0xcd, 0x58, 0x82, 0xff, 0x43, 0x22, 0x89, 0x56, 0xc7, + 0x48, 0x64, 0xa8, 0x15, 0xd1, 0x7a, 0x1b, 0x49, 0x64, 0x00, 0x71, 0x94, 0x44, 0x39, 0x90, 0x7a, + 0xb8, 0x1d, 0x0d, 0x27, 0xe0, 0xbf, 0xf4, 0xa1, 0xd3, 0xca, 0x8d, 0x43, 0x64, 0x05, 0xdb, 0xd6, + 0x38, 0xb8, 0xd4, 0x45, 0xe9, 0x87, 0x1a, 0xd4, 0x51, 0xff, 0x31, 0x61, 0x44, 0x7a, 0x2a, 0x5e, + 0x13, 0xdc, 0x24, 0x35, 0x06, 0xac, 0x19, 0xd1, 0x08, 0x43, 0xb1, 0x99, 0x61, 0x1d, 0x7a, 0x97, + 0x34, 0x88, 0x79, 0x7f, 0xc1, 0xa0, 0x40, 0x6c, 0x30, 0xe7, 0x4e, 0x6a, 0xdb, 0x86, 0xdb, 0xb6, + 0xc6, 0x41, 0xac, 0xd0, 0x13, 0x74, 0x02, 0x0f, 0x84, 0x89, 0x02, 0xf1, 0x1b, 0xa3, 0xbd, 0x80, + 0x20, 0xe3, 0x64, 0x2f, 0x30, 0xe2, 0xe2, 0x14, 0x46, 0xf8, 0x97, 0x36, 0x78, 0xd0, 0x3b, 0x08, + 0xbb, 0x1a, 0x07, 0x7d, 0xce, 0x0e, 0x8f, 0xf2, 0x77, 0x22, 0x81, 0x46, 0xe9, 0x5d, 0xfe, 0xa0, + 0x0b, 0x4d, 0x7c, 0xb5, 0x49, 0x8a, 0x6f, 0xa9, 0x95, 0xe2, 0x8d, 0x95, 0x5b, 0xc4, 0xa0, 0x3a, + 0x6d, 0x35, 0xd5, 0x66, 0xc9, 0x61, 0x01, 0x64, 0x2b, 0x39, 0x2c, 0x61, 0xc9, 0x72, 0x3b, 0xcd, + 0xc9, 0x62, 0x03, 0xbf, 0x30, 0x7d, 0xe2, 0xe4, 0xe0, 0xf9, 0x0e, 0xf0, 0x31, 0x02, 0xe3, 0x59, + 0x99, 0x72, 0xfd, 0x83, 0xf4, 0xa1, 0x13, 0xf0, 0x23, 0x7d, 0xe8, 0x0a, 0x7d, 0x87, 0x47, 0x4a, + 0xd6, 0xf9, 0x57, 0xb8, 0x6f, 0xa9, 0x95, 0x43, 0x76, 0xa5, 0x98, 0x14, 0x6f, 0x4c, 0x94, 0x07, + 0xf0, 0x10, 0xb1, 0x31, 0x17, 0xc6, 0xfa, 0x2e, 0x0d, 0x20, 0xa6, 0x2e, 0xb0, 0xca, 0xe5, 0x36, + 0xe1, 0xad, 0x98, 0xca, 0x7c, 0xd7, 0xe9, 0x8f, 0x19, 0x05, 0x57, 0xcf, 0x05, 0x6e, 0x50, 0x70, + 0x73, 0x8a, 0x1d, 0x98, 0x2c, 0x12, 0x0d, 0x49, 0x8d, 0x81, 0x08, 0x09, 0x82, 0xf4, 0x15, 0x87, + 0xc6, 0xe1, 0xed, 0xa9, 0x8a, 0x26, 0x57, 0xb6, 0xce, 0x7c, 0xa1, 0xd7, 0xe7, 0xb3, 0x20, 0xdf, + 0xc5, 0xc7, 0x65, 0x32, 0x32, 0x9c, 0xec, 0x13, 0x52, 0x4f, 0x42, 0x28, 0x62, 0xc8, 0x47, 0xe9, + 0x1e, 0xa2, 0x7e, 0xe8, 0xd8, 0x00, 0xc6, 0x14, 0x6f, 0xc1, 0xf2, 0x24, 0xc5, 0xe0, 0x9c, 0x0b, + 0x4d, 0x5a, 0x26, 0x25, 0x2b, 0x37, 0xaf, 0x89, 0xc6, 0x12, 0xf4, 0x96, 0x0c, 0xe7, 0xe6, 0xb4, + 0xf2, 0x71, 0x32, 0x83, 0x39, 0xe5, 0x2b, 0xb2, 0x82, 0x26, 0x4b, 0xf4, 0x32, 0x27, 0x8b, 0x8d, + 0xfc, 0x93, 0x44, 0xf0, 0x9d, 0xd8, 0xa1, 0xec, 0xd8, 0x9e, 0xbd, 0xb1, 0x37, 0xd3, 0xff, 0x39, + 0x38, 0x97, 0x43, 0x28, 0x66, 0xed, 0xb2, 0xd5, 0x5d, 0x09, 0x80, 0x64, 0x55, 0x1e, 0x6d, 0x87, + 0x95, 0x87, 0xd3, 0x74, 0x02, 0x45, 0x76, 0x0d, 0xd9, 0x07, 0x98, 0x31, 0xf9, 0xe7, 0x2c, 0x68, + 0x54, 0xb7, 0x39, 0x11, 0x8d, 0x25, 0xca, 0xeb, 0x9a, 0x12, 0xaa, 0x32, 0x9d, 0x28, 0x7f, 0x87, + 0xfe, 0xa5, 0x12, 0x4b, 0xbf, 0x36, 0xfd, 0xc2, 0x8a, 0x54, 0x38, 0xbc, 0xf9, 0xd0, 0xa4, 0x62, + 0xa3, 0x9c, 0xcf, 0xc9, 0x13, 0x9a, 0x90, 0xea, 0xcb, 0xbb, 0x43, 0x2a, 0xeb, 0xfb, 0xd6, 0xfc, + 0x48, 0x55, 0xfe, 0x4e, 0x92, 0xb9, 0x6f, 0x3d, 0xeb, 0xc2, 0x19, 0xb4, 0x71, 0x18, 0x7a, 0x8a, + 0x21, 0xce, 0xa5, 0x9f, 0xe0, 0xad, 0x48, 0x61, 0x01, 0x67, 0x6b, 0x60, 0xb3, 0x03, 0x27, 0xa4, + 0xbb, 0x88, 0x93, 0xce, 0x91, 0xcb, 0xff, 0xca, 0xaa, 0x35, 0xca, 0xb5, 0xcf, 0x94, 0xce, 0x4b, + 0xca, 0xf6, 0x36, 0x78, 0xbf, 0x48, 0x70, 0xee, 0x3c, 0x3c, 0xb8, 0xa3, 0xd3, 0xed, 0xcf, 0x07, + 0xaa, 0x8c, 0x5c, 0x45, 0xf4, 0x7e, 0x9a, 0x3e, 0xfe, 0x01, 0x90, 0x58, 0x85, 0x30, 0x11, 0x14, + 0x5c, 0x84, 0x1c, 0x54, 0x12, 0x42, 0x47, 0x4a, 0xa6, 0x66, 0x20, 0xc7, 0x1f, 0x70, 0x68, 0x7c, + 0xb5, 0x54, 0xd7, 0x54, 0x4f, 0x96, 0x43, 0x20, 0xb1, 0xd9, 0x2a, 0x44, 0x8d, 0x01, 0xc0, 0x21, + 0x44, 0x4d, 0x0e, 0x1c, 0x21, 0x4a, 0x00, 0xef, 0x80, 0xd9, 0x4b, 0xdb, 0xb2, 0x3d, 0x07, 0xcc, + 0x23, 0x77, 0xdb, 0xd6, 0x40, 0x08, 0x24, 0xef, 0x4c, 0x7b, 0x6c, 0x42, 0xea, 0x17, 0x55, 0xc1, + 0xfe, 0x01, 0xe1, 0x94, 0x40, 0x32, 0xb8, 0xa9, 0xaa, 0x29, 0x91, 0x8c, 0x36, 0xae, 0x91, 0x92, + 0xc9, 0x70, 0xa4, 0xde, 0x9a, 0x53, 0x4c, 0x60, 0x8e, 0x9c, 0x62, 0x01, 0x4d, 0x30, 0x3b, 0xca, + 0x61, 0x23, 0x32, 0x1c, 0xed, 0x6a, 0x6a, 0xd5, 0xe3, 0xc0, 0xae, 0x4f, 0x94, 0x23, 0xe7, 0xc0, + 0xef, 0x7c, 0xf0, 0x24, 0xc9, 0xde, 0xe0, 0x1e, 0x12, 0x02, 0xa3, 0xba, 0xda, 0xfb, 0x8a, 0x05, + 0xaa, 0x6f, 0x4a, 0x75, 0xe5, 0x41, 0xf6, 0xeb, 0x89, 0x72, 0x9c, 0x80, 0xb9, 0xfc, 0x1d, 0x2d, + 0xd7, 0xf3, 0xbb, 0xe4, 0xef, 0x9a, 0xd0, 0xbb, 0x90, 0x1d, 0x6e, 0x99, 0x84, 0x93, 0x4c, 0xf6, + 0xb8, 0x10, 0xaf, 0x22, 0x10, 0x7e, 0x9b, 0x4d, 0xce, 0xcf, 0x5b, 0xdd, 0x6e, 0xe4, 0xc0, 0xd8, + 0x9e, 0x96, 0xac, 0x40, 0x09, 0x31, 0x7e, 0x9f, 0x93, 0xc5, 0x08, 0xff, 0x34, 0x39, 0xe7, 0x62, + 0xde, 0x57, 0x97, 0x2a, 0xde, 0x2f, 0xd2, 0x27, 0xf6, 0x99, 0x52, 0xb9, 0x11, 0x10, 0xec, 0xd4, + 0xe5, 0xbe, 0xb5, 0x66, 0xe0, 0xb6, 0xec, 0x5d, 0x62, 0x43, 0x36, 0x27, 0x3a, 0xd1, 0xfd, 0x08, + 0xa7, 0x72, 0xae, 0x52, 0xcf, 0x23, 0x2a, 0xc5, 0x3e, 0x76, 0xa1, 0x09, 0xcb, 0xa4, 0x24, 0xc5, + 0x0f, 0xbf, 0x02, 0xb6, 0x8c, 0xe8, 0x6c, 0x80, 0xb0, 0x3d, 0x5a, 0x9b, 0x01, 0x99, 0xec, 0x79, + 0x1b, 0x79, 0x9e, 0x18, 0x2d, 0x31, 0xae, 0xb0, 0xc9, 0xba, 0x6b, 0xd9, 0x32, 0x2d, 0x2d, 0xb4, + 0x23, 0x15, 0xa8, 0x97, 0xcb, 0x95, 0x54, 0x3f, 0x89, 0xe4, 0x93, 0xde, 0x79, 0x30, 0xdb, 0xd2, + 0x06, 0x1b, 0x36, 0xa6, 0xd1, 0x0a, 0xef, 0xb2, 0xdb, 0xa5, 0x51, 0x02, 0x12, 0x10, 0xe2, 0x08, + 0x87, 0x90, 0x1e, 0x9f, 0x5d, 0x05, 0x35, 0xa1, 0x04, 0x10, 0x6b, 0xae, 0x03, 0x0d, 0x58, 0x40, + 0x5b, 0xcb, 0xa8, 0x2d, 0x3c, 0xb3, 0xcc, 0x7e, 0xc1, 0x3f, 0x6c, 0x26, 0x5d, 0x4d, 0xb5, 0xdb, + 0x6f, 0x49, 0xbc, 0x9a, 0xea, 0xdb, 0x25, 0xdf, 0x2a, 0x6f, 0xcd, 0xed, 0x92, 0x2f, 0x1c, 0x62, + 0x08, 0xd8, 0xe6, 0xc2, 0x77, 0x77, 0x2a, 0x7e, 0x89, 0x6a, 0x29, 0x19, 0x08, 0x37, 0x58, 0xdf, + 0xdd, 0xb1, 0x00, 0x4e, 0x77, 0x77, 0x46, 0x38, 0x26, 0x29, 0x88, 0x9f, 0x27, 0xf1, 0xe6, 0x28, + 0x25, 0x12, 0x84, 0x42, 0xf0, 0x02, 0x9f, 0xcd, 0x67, 0x92, 0x2f, 0x20, 0x26, 0xc8, 0x12, 0xef, + 0xcb, 0xb7, 0x40, 0x10, 0x58, 0x46, 0x21, 0x18, 0x27, 0x89, 0x90, 0xf6, 0x90, 0x29, 0xcd, 0xb9, + 0xe5, 0xb9, 0xcb, 0x32, 0x87, 0xba, 0xe5, 0x3d, 0xad, 0x75, 0xce, 0x74, 0xef, 0xff, 0xc2, 0xc9, + 0xe2, 0x6e, 0x8e, 0x17, 0x00, 0xcb, 0x9a, 0xda, 0xf2, 0x9a, 0xda, 0xe6, 0x45, 0xe5, 0x5a, 0x46, + 0xf7, 0xcc, 0xc5, 0x76, 0x40, 0x8f, 0xca, 0x21, 0x3d, 0x19, 0xbb, 0xfb, 0x47, 0x84, 0x14, 0x38, + 0x31, 0x9c, 0xa6, 0xd4, 0x78, 0x88, 0xc2, 0x83, 0x73, 0x7f, 0x66, 0xbf, 0xfc, 0x40, 0x69, 0x3b, + 0x9d, 0xe9, 0x6a, 0xcd, 0xaf, 0x63, 0x86, 0x92, 0x95, 0xde, 0xc5, 0xb7, 0x48, 0xc9, 0xf2, 0xa0, + 0x8a, 0xa0, 0x4a, 0xc6, 0x56, 0x17, 0x9a, 0xc4, 0x38, 0x84, 0x41, 0x22, 0x94, 0xa5, 0x0d, 0x01, + 0x8b, 0xdd, 0xcf, 0x12, 0xcc, 0x76, 0xf7, 0xb3, 0x81, 0x66, 0x5c, 0xbb, 0x45, 0x7e, 0x12, 0xe4, + 0xc1, 0x49, 0xf5, 0xed, 0xcb, 0xf4, 0xb7, 0xa6, 0xfa, 0xaf, 0x80, 0x26, 0xe2, 0x2e, 0xd5, 0x8a, + 0x69, 0xa8, 0x5c, 0xfc, 0xcc, 0x20, 0xd3, 0xbe, 0x33, 0x7d, 0xf4, 0x02, 0xb0, 0x16, 0xa3, 0xb3, + 0x54, 0x79, 0x5f, 0xcc, 0xeb, 0x3a, 0x4a, 0x8a, 0x27, 0xe0, 0x58, 0x47, 0xfe, 0xa2, 0x49, 0x50, + 0xf0, 0x6a, 0xda, 0xa5, 0x05, 0x0a, 0x18, 0x92, 0x0c, 0x96, 0x60, 0x43, 0x04, 0x0a, 0xb0, 0x23, + 0xc3, 0x7e, 0x4e, 0x16, 0x17, 0xf3, 0xba, 0x1f, 0x9a, 0x81, 0x0c, 0xb3, 0xf4, 0xa0, 0xcc, 0x0c, + 0xfe, 0x99, 0xae, 0x56, 0x16, 0x0a, 0x64, 0x8c, 0xbb, 0xe6, 0xf6, 0x48, 0x50, 0xfe, 0x0e, 0xfc, + 0x41, 0xce, 0xba, 0x3b, 0x5d, 0x68, 0x12, 0xe3, 0x58, 0xe5, 0x44, 0x0d, 0x4b, 0x30, 0x5b, 0x6a, + 0xd8, 0x40, 0x13, 0x6a, 0xec, 0x03, 0x6a, 0x80, 0x5f, 0x96, 0x89, 0x1a, 0x5a, 0xf1, 0x50, 0xd4, + 0x58, 0xee, 0xbb, 0x73, 0xd4, 0x50, 0xc5, 0xed, 0x44, 0xcd, 0xcc, 0xcb, 0x10, 0xc2, 0xde, 0x16, + 0x6c, 0x26, 0xc3, 0x53, 0x79, 0xc1, 0x32, 0x4b, 0xe2, 0x65, 0xc6, 0x28, 0x60, 0x20, 0xc2, 0x93, + 0x76, 0x2e, 0x44, 0x39, 0x80, 0x40, 0x07, 0xfe, 0x0e, 0xd2, 0xe1, 0x24, 0x87, 0x46, 0xfe, 0x50, + 0x0a, 0x34, 0x24, 0x37, 0x99, 0xf3, 0x7f, 0x42, 0xb9, 0xad, 0xd1, 0x83, 0x56, 0xeb, 0x11, 0xc8, + 0x17, 0xf2, 0x25, 0xe9, 0xa3, 0xbb, 0xd5, 0xa3, 0xc7, 0xd6, 0xd3, 0x4a, 0xdf, 0x55, 0x70, 0xe6, + 0x81, 0x27, 0x89, 0x6e, 0xdb, 0x1a, 0x8c, 0xd3, 0x54, 0xfe, 0x11, 0x0b, 0x9c, 0x36, 0xe1, 0x2f, + 0x54, 0xee, 0xe5, 0x64, 0xb1, 0x83, 0xe3, 0x3d, 0x68, 0x0a, 0x71, 0x5e, 0xf0, 0xac, 0x04, 0x18, + 0x8f, 0x58, 0x5b, 0xe3, 0xa9, 0x8e, 0x06, 0x85, 0xc2, 0x79, 0x73, 0xe7, 0xcf, 0x9d, 0xe7, 0x45, + 0xe5, 0x75, 0xc1, 0x44, 0x20, 0x16, 0x2e, 0x6f, 0x5e, 0xe8, 0xe3, 0x5c, 0xc2, 0x84, 0x40, 0x2c, + 0xd6, 0x10, 0x0e, 0x62, 0x0b, 0x65, 0xf9, 0x2f, 0x12, 0xd1, 0x48, 0x85, 0xa9, 0xe4, 0xf5, 0xc7, + 0xd0, 0xa3, 0x08, 0x89, 0xb1, 0xf0, 0x72, 0x69, 0x8b, 0xd8, 0x94, 0xdc, 0xc4, 0x4f, 0x2c, 0x72, + 0xb9, 0xc7, 0xaa, 0x7f, 0x45, 0xe3, 0xe1, 0xb7, 0x31, 0x9c, 0xc7, 0x55, 0x37, 0x01, 0x8d, 0x33, + 0x00, 0xfd, 0xa0, 0x6e, 0x64, 0x2c, 0x1e, 0x4d, 0x46, 0x17, 0xfc, 0x7f, 0x01, 0x00, 0x00, 0xff, + 0xff, 0x96, 0x6b, 0x5f, 0x30, 0x0b, 0x28, 0x04, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -33767,7 +33994,7 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type ClusterManagerClient interface { - // * cluster management + //* cluster management CreateCluster(ctx context.Context, in *CreateClusterReq, opts ...grpc.CallOption) (*CreateClusterResp, error) RetryCreateClusterTask(ctx context.Context, in *RetryCreateClusterReq, opts ...grpc.CallOption) (*RetryCreateClusterResp, error) CheckCloudKubeConfig(ctx context.Context, in *KubeConfigReq, opts ...grpc.CallOption) (*KubeConfigResp, error) @@ -33789,7 +34016,7 @@ type ClusterManagerClient interface { CreateVirtualCluster(ctx context.Context, in *CreateVirtualClusterReq, opts ...grpc.CallOption) (*CreateVirtualClusterResp, error) DeleteVirtualCluster(ctx context.Context, in *DeleteVirtualClusterReq, opts ...grpc.CallOption) (*DeleteVirtualClusterResp, error) UpdateVirtualClusterQuota(ctx context.Context, in *UpdateVirtualClusterQuotaReq, opts ...grpc.CallOption) (*UpdateVirtualClusterQuotaResp, error) - // * node management + //* node management GetNode(ctx context.Context, in *GetNodeRequest, opts ...grpc.CallOption) (*GetNodeResponse, error) GetNodeInfo(ctx context.Context, in *GetNodeInfoRequest, opts ...grpc.CallOption) (*GetNodeInfoResponse, error) RecordNodeInfo(ctx context.Context, in *RecordNodeInfoRequest, opts ...grpc.CallOption) (*CommonResp, error) @@ -33802,28 +34029,28 @@ type ClusterManagerClient interface { UpdateNodeLabels(ctx context.Context, in *UpdateNodeLabelsRequest, opts ...grpc.CallOption) (*UpdateNodeLabelsResponse, error) UpdateNodeAnnotations(ctx context.Context, in *UpdateNodeAnnotationsRequest, opts ...grpc.CallOption) (*UpdateNodeAnnotationsResponse, error) UpdateNodeTaints(ctx context.Context, in *UpdateNodeTaintsRequest, opts ...grpc.CallOption) (*UpdateNodeTaintsResponse, error) - // * cluster credential management + //* cluster credential management GetClusterCredential(ctx context.Context, in *GetClusterCredentialReq, opts ...grpc.CallOption) (*GetClusterCredentialResp, error) UpdateClusterCredential(ctx context.Context, in *UpdateClusterCredentialReq, opts ...grpc.CallOption) (*UpdateClusterCredentialResp, error) DeleteClusterCredential(ctx context.Context, in *DeleteClusterCredentialReq, opts ...grpc.CallOption) (*DeleteClusterCredentialResp, error) ListClusterCredential(ctx context.Context, in *ListClusterCredentialReq, opts ...grpc.CallOption) (*ListClusterCredentialResp, error) - // * federation cluster management + //* federation cluster management InitFederationCluster(ctx context.Context, in *InitFederationClusterReq, opts ...grpc.CallOption) (*InitFederationClusterResp, error) AddFederatedCluster(ctx context.Context, in *AddFederatedClusterReq, opts ...grpc.CallOption) (*AddFederatedClusterResp, error) - // * Cloud information management * + //* Cloud information management * CreateCloud(ctx context.Context, in *CreateCloudRequest, opts ...grpc.CallOption) (*CreateCloudResponse, error) UpdateCloud(ctx context.Context, in *UpdateCloudRequest, opts ...grpc.CallOption) (*UpdateCloudResponse, error) DeleteCloud(ctx context.Context, in *DeleteCloudRequest, opts ...grpc.CallOption) (*DeleteCloudResponse, error) GetCloud(ctx context.Context, in *GetCloudRequest, opts ...grpc.CallOption) (*GetCloudResponse, error) ListCloud(ctx context.Context, in *ListCloudRequest, opts ...grpc.CallOption) (*ListCloudResponse, error) - // * Cloud VPC information management * + //* Cloud VPC information management * CreateCloudVPC(ctx context.Context, in *CreateCloudVPCRequest, opts ...grpc.CallOption) (*CreateCloudVPCResponse, error) UpdateCloudVPC(ctx context.Context, in *UpdateCloudVPCRequest, opts ...grpc.CallOption) (*UpdateCloudVPCResponse, error) DeleteCloudVPC(ctx context.Context, in *DeleteCloudVPCRequest, opts ...grpc.CallOption) (*DeleteCloudVPCResponse, error) ListCloudVPC(ctx context.Context, in *ListCloudVPCRequest, opts ...grpc.CallOption) (*ListCloudVPCResponse, error) ListCloudRegions(ctx context.Context, in *ListCloudRegionsRequest, opts ...grpc.CallOption) (*ListCloudRegionsResponse, error) GetVPCCidr(ctx context.Context, in *GetVPCCidrRequest, opts ...grpc.CallOption) (*GetVPCCidrResponse, error) - // * NodeGroup information management * + //* NodeGroup information management * CreateNodeGroup(ctx context.Context, in *CreateNodeGroupRequest, opts ...grpc.CallOption) (*CreateNodeGroupResponse, error) UpdateNodeGroup(ctx context.Context, in *UpdateNodeGroupRequest, opts ...grpc.CallOption) (*UpdateNodeGroupResponse, error) DeleteNodeGroup(ctx context.Context, in *DeleteNodeGroupRequest, opts ...grpc.CallOption) (*DeleteNodeGroupResponse, error) @@ -33841,7 +34068,7 @@ type ClusterManagerClient interface { UpdateGroupMinMaxSize(ctx context.Context, in *UpdateGroupMinMaxSizeRequest, opts ...grpc.CallOption) (*UpdateGroupMinMaxSizeResponse, error) EnableNodeGroupAutoScale(ctx context.Context, in *EnableNodeGroupAutoScaleRequest, opts ...grpc.CallOption) (*EnableNodeGroupAutoScaleResponse, error) DisableNodeGroupAutoScale(ctx context.Context, in *DisableNodeGroupAutoScaleRequest, opts ...grpc.CallOption) (*DisableNodeGroupAutoScaleResponse, error) - // * Task information management * + //* Task information management * CreateTask(ctx context.Context, in *CreateTaskRequest, opts ...grpc.CallOption) (*CreateTaskResponse, error) RetryTask(ctx context.Context, in *RetryTaskRequest, opts ...grpc.CallOption) (*RetryTaskResponse, error) SkipTask(ctx context.Context, in *SkipTaskRequest, opts ...grpc.CallOption) (*SkipTaskResponse, error) @@ -33849,7 +34076,7 @@ type ClusterManagerClient interface { DeleteTask(ctx context.Context, in *DeleteTaskRequest, opts ...grpc.CallOption) (*DeleteTaskResponse, error) GetTask(ctx context.Context, in *GetTaskRequest, opts ...grpc.CallOption) (*GetTaskResponse, error) ListTask(ctx context.Context, in *ListTaskRequest, opts ...grpc.CallOption) (*ListTaskResponse, error) - // * ClusterAutoScalingOption information management * + //* ClusterAutoScalingOption information management * CreateAutoScalingOption(ctx context.Context, in *CreateAutoScalingOptionRequest, opts ...grpc.CallOption) (*CreateAutoScalingOptionResponse, error) UpdateAutoScalingOption(ctx context.Context, in *UpdateAutoScalingOptionRequest, opts ...grpc.CallOption) (*UpdateAutoScalingOptionResponse, error) UpdateAsOptionDeviceProvider(ctx context.Context, in *UpdateAsOptionDeviceProviderRequest, opts ...grpc.CallOption) (*UpdateAsOptionDeviceProviderResponse, error) @@ -33873,6 +34100,7 @@ type ClusterManagerClient interface { ListCloudAccountToPerm(ctx context.Context, in *ListCloudAccountPermRequest, opts ...grpc.CallOption) (*ListCloudAccountPermResponse, error) VerifyCloudAccount(ctx context.Context, in *VerifyCloudAccountRequest, opts ...grpc.CallOption) (*VerifyCloudAccountResponse, error) // Cloud Resource management + GetResourceGroups(ctx context.Context, in *GetResourceGroupsRequest, opts ...grpc.CallOption) (*GetResourceGroupsResponse, error) GetCloudRegions(ctx context.Context, in *GetCloudRegionsRequest, opts ...grpc.CallOption) (*GetCloudRegionsResponse, error) GetCloudRegionZones(ctx context.Context, in *GetCloudRegionZonesRequest, opts ...grpc.CallOption) (*GetCloudRegionZonesResponse, error) ListCloudRegionCluster(ctx context.Context, in *ListCloudRegionClusterRequest, opts ...grpc.CallOption) (*ListCloudRegionClusterResponse, error) @@ -34780,6 +35008,15 @@ func (c *clusterManagerClient) VerifyCloudAccount(ctx context.Context, in *Verif return out, nil } +func (c *clusterManagerClient) GetResourceGroups(ctx context.Context, in *GetResourceGroupsRequest, opts ...grpc.CallOption) (*GetResourceGroupsResponse, error) { + out := new(GetResourceGroupsResponse) + err := c.cc.Invoke(ctx, "/clustermanager.ClusterManager/GetResourceGroups", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *clusterManagerClient) GetCloudRegions(ctx context.Context, in *GetCloudRegionsRequest, opts ...grpc.CallOption) (*GetCloudRegionsResponse, error) { out := new(GetCloudRegionsResponse) err := c.cc.Invoke(ctx, "/clustermanager.ClusterManager/GetCloudRegions", in, out, opts...) @@ -35106,7 +35343,7 @@ func (c *clusterManagerClient) Health(ctx context.Context, in *HealthRequest, op // ClusterManagerServer is the server API for ClusterManager service. type ClusterManagerServer interface { - // * cluster management + //* cluster management CreateCluster(context.Context, *CreateClusterReq) (*CreateClusterResp, error) RetryCreateClusterTask(context.Context, *RetryCreateClusterReq) (*RetryCreateClusterResp, error) CheckCloudKubeConfig(context.Context, *KubeConfigReq) (*KubeConfigResp, error) @@ -35128,7 +35365,7 @@ type ClusterManagerServer interface { CreateVirtualCluster(context.Context, *CreateVirtualClusterReq) (*CreateVirtualClusterResp, error) DeleteVirtualCluster(context.Context, *DeleteVirtualClusterReq) (*DeleteVirtualClusterResp, error) UpdateVirtualClusterQuota(context.Context, *UpdateVirtualClusterQuotaReq) (*UpdateVirtualClusterQuotaResp, error) - // * node management + //* node management GetNode(context.Context, *GetNodeRequest) (*GetNodeResponse, error) GetNodeInfo(context.Context, *GetNodeInfoRequest) (*GetNodeInfoResponse, error) RecordNodeInfo(context.Context, *RecordNodeInfoRequest) (*CommonResp, error) @@ -35141,28 +35378,28 @@ type ClusterManagerServer interface { UpdateNodeLabels(context.Context, *UpdateNodeLabelsRequest) (*UpdateNodeLabelsResponse, error) UpdateNodeAnnotations(context.Context, *UpdateNodeAnnotationsRequest) (*UpdateNodeAnnotationsResponse, error) UpdateNodeTaints(context.Context, *UpdateNodeTaintsRequest) (*UpdateNodeTaintsResponse, error) - // * cluster credential management + //* cluster credential management GetClusterCredential(context.Context, *GetClusterCredentialReq) (*GetClusterCredentialResp, error) UpdateClusterCredential(context.Context, *UpdateClusterCredentialReq) (*UpdateClusterCredentialResp, error) DeleteClusterCredential(context.Context, *DeleteClusterCredentialReq) (*DeleteClusterCredentialResp, error) ListClusterCredential(context.Context, *ListClusterCredentialReq) (*ListClusterCredentialResp, error) - // * federation cluster management + //* federation cluster management InitFederationCluster(context.Context, *InitFederationClusterReq) (*InitFederationClusterResp, error) AddFederatedCluster(context.Context, *AddFederatedClusterReq) (*AddFederatedClusterResp, error) - // * Cloud information management * + //* Cloud information management * CreateCloud(context.Context, *CreateCloudRequest) (*CreateCloudResponse, error) UpdateCloud(context.Context, *UpdateCloudRequest) (*UpdateCloudResponse, error) DeleteCloud(context.Context, *DeleteCloudRequest) (*DeleteCloudResponse, error) GetCloud(context.Context, *GetCloudRequest) (*GetCloudResponse, error) ListCloud(context.Context, *ListCloudRequest) (*ListCloudResponse, error) - // * Cloud VPC information management * + //* Cloud VPC information management * CreateCloudVPC(context.Context, *CreateCloudVPCRequest) (*CreateCloudVPCResponse, error) UpdateCloudVPC(context.Context, *UpdateCloudVPCRequest) (*UpdateCloudVPCResponse, error) DeleteCloudVPC(context.Context, *DeleteCloudVPCRequest) (*DeleteCloudVPCResponse, error) ListCloudVPC(context.Context, *ListCloudVPCRequest) (*ListCloudVPCResponse, error) ListCloudRegions(context.Context, *ListCloudRegionsRequest) (*ListCloudRegionsResponse, error) GetVPCCidr(context.Context, *GetVPCCidrRequest) (*GetVPCCidrResponse, error) - // * NodeGroup information management * + //* NodeGroup information management * CreateNodeGroup(context.Context, *CreateNodeGroupRequest) (*CreateNodeGroupResponse, error) UpdateNodeGroup(context.Context, *UpdateNodeGroupRequest) (*UpdateNodeGroupResponse, error) DeleteNodeGroup(context.Context, *DeleteNodeGroupRequest) (*DeleteNodeGroupResponse, error) @@ -35180,7 +35417,7 @@ type ClusterManagerServer interface { UpdateGroupMinMaxSize(context.Context, *UpdateGroupMinMaxSizeRequest) (*UpdateGroupMinMaxSizeResponse, error) EnableNodeGroupAutoScale(context.Context, *EnableNodeGroupAutoScaleRequest) (*EnableNodeGroupAutoScaleResponse, error) DisableNodeGroupAutoScale(context.Context, *DisableNodeGroupAutoScaleRequest) (*DisableNodeGroupAutoScaleResponse, error) - // * Task information management * + //* Task information management * CreateTask(context.Context, *CreateTaskRequest) (*CreateTaskResponse, error) RetryTask(context.Context, *RetryTaskRequest) (*RetryTaskResponse, error) SkipTask(context.Context, *SkipTaskRequest) (*SkipTaskResponse, error) @@ -35188,7 +35425,7 @@ type ClusterManagerServer interface { DeleteTask(context.Context, *DeleteTaskRequest) (*DeleteTaskResponse, error) GetTask(context.Context, *GetTaskRequest) (*GetTaskResponse, error) ListTask(context.Context, *ListTaskRequest) (*ListTaskResponse, error) - // * ClusterAutoScalingOption information management * + //* ClusterAutoScalingOption information management * CreateAutoScalingOption(context.Context, *CreateAutoScalingOptionRequest) (*CreateAutoScalingOptionResponse, error) UpdateAutoScalingOption(context.Context, *UpdateAutoScalingOptionRequest) (*UpdateAutoScalingOptionResponse, error) UpdateAsOptionDeviceProvider(context.Context, *UpdateAsOptionDeviceProviderRequest) (*UpdateAsOptionDeviceProviderResponse, error) @@ -35212,6 +35449,7 @@ type ClusterManagerServer interface { ListCloudAccountToPerm(context.Context, *ListCloudAccountPermRequest) (*ListCloudAccountPermResponse, error) VerifyCloudAccount(context.Context, *VerifyCloudAccountRequest) (*VerifyCloudAccountResponse, error) // Cloud Resource management + GetResourceGroups(context.Context, *GetResourceGroupsRequest) (*GetResourceGroupsResponse, error) GetCloudRegions(context.Context, *GetCloudRegionsRequest) (*GetCloudRegionsResponse, error) GetCloudRegionZones(context.Context, *GetCloudRegionZonesRequest) (*GetCloudRegionZonesResponse, error) ListCloudRegionCluster(context.Context, *ListCloudRegionClusterRequest) (*ListCloudRegionClusterResponse, error) @@ -35551,6 +35789,9 @@ func (*UnimplementedClusterManagerServer) ListCloudAccountToPerm(ctx context.Con func (*UnimplementedClusterManagerServer) VerifyCloudAccount(ctx context.Context, req *VerifyCloudAccountRequest) (*VerifyCloudAccountResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method VerifyCloudAccount not implemented") } +func (*UnimplementedClusterManagerServer) GetResourceGroups(ctx context.Context, req *GetResourceGroupsRequest) (*GetResourceGroupsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetResourceGroups not implemented") +} func (*UnimplementedClusterManagerServer) GetCloudRegions(ctx context.Context, req *GetCloudRegionsRequest) (*GetCloudRegionsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetCloudRegions not implemented") } @@ -37356,6 +37597,24 @@ func _ClusterManager_VerifyCloudAccount_Handler(srv interface{}, ctx context.Con return interceptor(ctx, in, info, handler) } +func _ClusterManager_GetResourceGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetResourceGroupsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).GetResourceGroups(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/clustermanager.ClusterManager/GetResourceGroups", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).GetResourceGroups(ctx, req.(*GetResourceGroupsRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _ClusterManager_GetCloudRegions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetCloudRegionsRequest) if err := dec(in); err != nil { @@ -38384,6 +38643,10 @@ var _ClusterManager_serviceDesc = grpc.ServiceDesc{ MethodName: "VerifyCloudAccount", Handler: _ClusterManager_VerifyCloudAccount_Handler, }, + { + MethodName: "GetResourceGroups", + Handler: _ClusterManager_GetResourceGroups_Handler, + }, { MethodName: "GetCloudRegions", Handler: _ClusterManager_GetCloudRegions_Handler, diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.gw.go b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.gw.go index dd4dd3fc69..b64c89adc3 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.gw.go +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.gw.go @@ -5599,6 +5599,78 @@ func local_request_ClusterManager_VerifyCloudAccount_0(ctx context.Context, mars } +var ( + filter_ClusterManager_GetResourceGroups_0 = &utilities.DoubleArray{Encoding: map[string]int{"cloudID": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_ClusterManager_GetResourceGroups_0(ctx context.Context, marshaler runtime.Marshaler, client ClusterManagerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetResourceGroupsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["cloudID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cloudID") + } + + protoReq.CloudID, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cloudID", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ClusterManager_GetResourceGroups_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetResourceGroups(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ClusterManager_GetResourceGroups_0(ctx context.Context, marshaler runtime.Marshaler, server ClusterManagerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetResourceGroupsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["cloudID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cloudID") + } + + protoReq.CloudID, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cloudID", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ClusterManager_GetResourceGroups_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetResourceGroups(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_ClusterManager_GetCloudRegions_0 = &utilities.DoubleArray{Encoding: map[string]int{"cloudID": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -10200,6 +10272,26 @@ func RegisterClusterManagerGwServer(ctx context.Context, mux *runtime.ServeMux, }) + mux.Handle("GET", pattern_ClusterManager_GetResourceGroups_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ClusterManager_GetResourceGroups_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ClusterManager_GetResourceGroups_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_ClusterManager_GetCloudRegions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -12841,6 +12933,26 @@ func RegisterClusterManagerGwClient(ctx context.Context, mux *runtime.ServeMux, }) + mux.Handle("GET", pattern_ClusterManager_GetResourceGroups_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ClusterManager_GetResourceGroups_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ClusterManager_GetResourceGroups_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_ClusterManager_GetCloudRegions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -13753,6 +13865,8 @@ var ( pattern_ClusterManager_VerifyCloudAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"clustermanager", "v1", "clouds", "cloudID", "accounts", "available"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ClusterManager_GetResourceGroups_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"clustermanager", "v1", "clouds", "cloudID", "resourcegroups"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ClusterManager_GetCloudRegions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"clustermanager", "v1", "clouds", "cloudID", "regions"}, "", runtime.AssumeColonVerbOpt(true))) pattern_ClusterManager_GetCloudRegionZones_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"clustermanager", "v1", "clouds", "cloudID", "zones"}, "", runtime.AssumeColonVerbOpt(true))) @@ -14015,6 +14129,8 @@ var ( forward_ClusterManager_VerifyCloudAccount_0 = runtime.ForwardResponseMessage + forward_ClusterManager_GetResourceGroups_0 = runtime.ForwardResponseMessage + forward_ClusterManager_GetCloudRegions_0 = runtime.ForwardResponseMessage forward_ClusterManager_GetCloudRegionZones_0 = runtime.ForwardResponseMessage diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.micro.go b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.micro.go index 0a3b66b289..164b9cc378 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.micro.go +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.micro.go @@ -670,6 +670,12 @@ func NewClusterManagerEndpoints() []*api.Endpoint { Body: "*", Handler: "rpc", }, + &api.Endpoint{ + Name: "ClusterManager.GetResourceGroups", + Path: []string{"/clustermanager/v1/clouds/{cloudID}/resourcegroups"}, + Method: []string{"GET"}, + Handler: "rpc", + }, &api.Endpoint{ Name: "ClusterManager.GetCloudRegions", Path: []string{"/clustermanager/v1/clouds/{cloudID}/regions"}, @@ -1009,6 +1015,7 @@ type ClusterManagerService interface { ListCloudAccountToPerm(ctx context.Context, in *ListCloudAccountPermRequest, opts ...client.CallOption) (*ListCloudAccountPermResponse, error) VerifyCloudAccount(ctx context.Context, in *VerifyCloudAccountRequest, opts ...client.CallOption) (*VerifyCloudAccountResponse, error) // Cloud Resource management + GetResourceGroups(ctx context.Context, in *GetResourceGroupsRequest, opts ...client.CallOption) (*GetResourceGroupsResponse, error) GetCloudRegions(ctx context.Context, in *GetCloudRegionsRequest, opts ...client.CallOption) (*GetCloudRegionsResponse, error) GetCloudRegionZones(ctx context.Context, in *GetCloudRegionZonesRequest, opts ...client.CallOption) (*GetCloudRegionZonesResponse, error) ListCloudRegionCluster(ctx context.Context, in *ListCloudRegionClusterRequest, opts ...client.CallOption) (*ListCloudRegionClusterResponse, error) @@ -2014,6 +2021,16 @@ func (c *clusterManagerService) VerifyCloudAccount(ctx context.Context, in *Veri return out, nil } +func (c *clusterManagerService) GetResourceGroups(ctx context.Context, in *GetResourceGroupsRequest, opts ...client.CallOption) (*GetResourceGroupsResponse, error) { + req := c.c.NewRequest(c.name, "ClusterManager.GetResourceGroups", in) + out := new(GetResourceGroupsResponse) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *clusterManagerService) GetCloudRegions(ctx context.Context, in *GetCloudRegionsRequest, opts ...client.CallOption) (*GetCloudRegionsResponse, error) { req := c.c.NewRequest(c.name, "ClusterManager.GetCloudRegions", in) out := new(GetCloudRegionsResponse) @@ -2483,6 +2500,7 @@ type ClusterManagerHandler interface { ListCloudAccountToPerm(context.Context, *ListCloudAccountPermRequest, *ListCloudAccountPermResponse) error VerifyCloudAccount(context.Context, *VerifyCloudAccountRequest, *VerifyCloudAccountResponse) error // Cloud Resource management + GetResourceGroups(context.Context, *GetResourceGroupsRequest, *GetResourceGroupsResponse) error GetCloudRegions(context.Context, *GetCloudRegionsRequest, *GetCloudRegionsResponse) error GetCloudRegionZones(context.Context, *GetCloudRegionZonesRequest, *GetCloudRegionZonesResponse) error ListCloudRegionCluster(context.Context, *ListCloudRegionClusterRequest, *ListCloudRegionClusterResponse) error @@ -2632,6 +2650,7 @@ func RegisterClusterManagerHandler(s server.Server, hdlr ClusterManagerHandler, ListCloudAccount(ctx context.Context, in *ListCloudAccountRequest, out *ListCloudAccountResponse) error ListCloudAccountToPerm(ctx context.Context, in *ListCloudAccountPermRequest, out *ListCloudAccountPermResponse) error VerifyCloudAccount(ctx context.Context, in *VerifyCloudAccountRequest, out *VerifyCloudAccountResponse) error + GetResourceGroups(ctx context.Context, in *GetResourceGroupsRequest, out *GetResourceGroupsResponse) error GetCloudRegions(ctx context.Context, in *GetCloudRegionsRequest, out *GetCloudRegionsResponse) error GetCloudRegionZones(ctx context.Context, in *GetCloudRegionZonesRequest, out *GetCloudRegionZonesResponse) error ListCloudRegionCluster(ctx context.Context, in *ListCloudRegionClusterRequest, out *ListCloudRegionClusterResponse) error @@ -3301,6 +3320,12 @@ func RegisterClusterManagerHandler(s server.Server, hdlr ClusterManagerHandler, Body: "*", Handler: "rpc", })) + opts = append(opts, api.WithEndpoint(&api.Endpoint{ + Name: "ClusterManager.GetResourceGroups", + Path: []string{"/clustermanager/v1/clouds/{cloudID}/resourcegroups"}, + Method: []string{"GET"}, + Handler: "rpc", + })) opts = append(opts, api.WithEndpoint(&api.Endpoint{ Name: "ClusterManager.GetCloudRegions", Path: []string{"/clustermanager/v1/clouds/{cloudID}/regions"}, @@ -3911,6 +3936,10 @@ func (h *clusterManagerHandler) VerifyCloudAccount(ctx context.Context, in *Veri return h.ClusterManagerHandler.VerifyCloudAccount(ctx, in, out) } +func (h *clusterManagerHandler) GetResourceGroups(ctx context.Context, in *GetResourceGroupsRequest, out *GetResourceGroupsResponse) error { + return h.ClusterManagerHandler.GetResourceGroups(ctx, in, out) +} + func (h *clusterManagerHandler) GetCloudRegions(ctx context.Context, in *GetCloudRegionsRequest, out *GetCloudRegionsResponse) error { return h.ClusterManagerHandler.GetCloudRegions(ctx, in, out) } diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.validate.go b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.validate.go index 87d53dd733..140b795137 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.validate.go +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.validate.go @@ -11,11 +11,12 @@ import ( "net/mail" "net/url" "regexp" + "sort" "strings" "time" "unicode/utf8" - "github.com/golang/protobuf/ptypes" + "google.golang.org/protobuf/types/known/anypb" ) // ensure the imports are used @@ -30,19 +31,31 @@ var ( _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = ptypes.DynamicAny{} + _ = anypb.Any{} + _ = sort.Sort ) -// define the regex for a UUID once up-front -var _clustermanager_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") - // Validate checks the field values on Cluster with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Cluster) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Cluster with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in ClusterMultiError, or nil if none found. +func (m *Cluster) ValidateAll() error { + return m.validate(true) +} + +func (m *Cluster) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID // no validation rules for ClusterName @@ -75,62 +88,168 @@ func (m *Cluster) Validate() error { // no validation rules for UpdateTime - for key, val := range m.GetBcsAddons() { - _ = val - - // no validation rules for BcsAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: fmt.Sprintf("BcsAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetBcsAddons())) + i := 0 + for key := range m.GetBcsAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetBcsAddons()[key] + _ = val + + // no validation rules for BcsAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraAddons() { - _ = val - - // no validation rules for ExtraAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: fmt.Sprintf("ExtraAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetExtraAddons())) + i := 0 + for key := range m.GetExtraAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraAddons()[key] + _ = val + + // no validation rules for ExtraAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } // no validation rules for SystemID // no validation rules for ManageType - for key, val := range m.GetMaster() { - _ = val + { + sorted_keys := make([]string, len(m.GetMaster())) + i := 0 + for key := range m.GetMaster() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetMaster()[key] + _ = val + + // no validation rules for Master[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("Master[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("Master[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: fmt.Sprintf("Master[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for Master[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "NetworkSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: fmt.Sprintf("Master[%v]", key), + errors = append(errors, ClusterValidationError{ + field: "NetworkSettings", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: "NetworkSettings", @@ -140,7 +259,26 @@ func (m *Cluster) Validate() error { } } - if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterBasicSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: "ClusterBasicSettings", @@ -150,7 +288,26 @@ func (m *Cluster) Validate() error { } } - if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterAdvanceSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: "ClusterAdvanceSettings", @@ -160,7 +317,26 @@ func (m *Cluster) Validate() error { } } - if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: "NodeSettings", @@ -171,19 +347,27 @@ func (m *Cluster) Validate() error { } if _, ok := _Cluster_Status_InLookup[m.GetStatus()]; !ok { - return ClusterValidationError{ + err := ClusterValidationError{ field: "Status", reason: "value must be in list [CREATING RUNNING DELETING FALURE INITIALIZATION]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Updater if _, ok := _Cluster_NetworkType_InLookup[m.GetNetworkType()]; !ok { - return ClusterValidationError{ + err := ClusterValidationError{ field: "NetworkType", reason: "value must be in list [underlay overlay ]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AutoGenerateMasterNodes @@ -191,7 +375,26 @@ func (m *Cluster) Validate() error { for idx, item := range m.GetTemplate() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("Template[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("Template[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: fmt.Sprintf("Template[%v]", idx), @@ -225,9 +428,29 @@ func (m *Cluster) Validate() error { // no validation rules for Message + if len(errors) > 0 { + return ClusterMultiError(errors) + } + return nil } +// ClusterMultiError is an error wrapping multiple validation errors returned +// by Cluster.ValidateAll() if the designated constraints aren't met. +type ClusterMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterMultiError) AllErrors() []error { return m } + // ClusterValidationError is the validation error returned by Cluster.Validate // if the designated constraints aren't met. type ClusterValidationError struct { @@ -297,12 +520,26 @@ var _Cluster_NetworkType_InLookup = map[string]struct{}{ } // Validate checks the field values on Node with the rules defined in the proto -// definition for this message. If any rules are violated, an error is returned. +// definition for this message. If any rules are violated, the first error +// encountered is returned, or nil if there are no violations. func (m *Node) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Node with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in NodeMultiError, or nil if none found. +func (m *Node) ValidateAll() error { + return m.validate(true) +} + +func (m *Node) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeID // no validation rules for InnerIP @@ -349,9 +586,29 @@ func (m *Node) Validate() error { // no validation rules for ChargeType + if len(errors) > 0 { + return NodeMultiError(errors) + } + return nil } +// NodeMultiError is an error wrapping multiple validation errors returned by +// Node.ValidateAll() if the designated constraints aren't met. +type NodeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeMultiError) AllErrors() []error { return m } + // NodeValidationError is the validation error returned by Node.Validate if the // designated constraints aren't met. type NodeValidationError struct { @@ -407,13 +664,27 @@ var _ interface { } = NodeValidationError{} // Validate checks the field values on NetworkSetting with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NetworkSetting) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NetworkSetting with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NetworkSettingMultiError, +// or nil if none found. +func (m *NetworkSetting) ValidateAll() error { + return m.validate(true) +} + +func (m *NetworkSetting) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterIPv4CIDR // no validation rules for ServiceIPv4CIDR @@ -424,7 +695,26 @@ func (m *NetworkSetting) Validate() error { // no validation rules for EnableVPCCni - if v, ok := interface{}(m.GetSubnetSource()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSubnetSource()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NetworkSettingValidationError{ + field: "SubnetSource", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NetworkSettingValidationError{ + field: "SubnetSource", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSubnetSource()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NetworkSettingValidationError{ field: "SubnetSource", @@ -446,9 +736,30 @@ func (m *NetworkSetting) Validate() error { // no validation rules for ServiceIPv6CIDR + if len(errors) > 0 { + return NetworkSettingMultiError(errors) + } + return nil } +// NetworkSettingMultiError is an error wrapping multiple validation errors +// returned by NetworkSetting.ValidateAll() if the designated constraints +// aren't met. +type NetworkSettingMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NetworkSettingMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NetworkSettingMultiError) AllErrors() []error { return m } + // NetworkSettingValidationError is the validation error returned by // NetworkSetting.Validate if the designated constraints aren't met. type NetworkSettingValidationError struct { @@ -504,17 +815,50 @@ var _ interface { } = NetworkSettingValidationError{} // Validate checks the field values on SubnetSource with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *SubnetSource) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SubnetSource with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in SubnetSourceMultiError, or +// nil if none found. +func (m *SubnetSource) ValidateAll() error { + return m.validate(true) +} + +func (m *SubnetSource) validate(all bool) error { if m == nil { return nil } + var errors []error + for idx, item := range m.GetNew() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SubnetSourceValidationError{ + field: fmt.Sprintf("New[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SubnetSourceValidationError{ + field: fmt.Sprintf("New[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SubnetSourceValidationError{ field: fmt.Sprintf("New[%v]", idx), @@ -526,7 +870,26 @@ func (m *SubnetSource) Validate() error { } - if v, ok := interface{}(m.GetExisted()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetExisted()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SubnetSourceValidationError{ + field: "Existed", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SubnetSourceValidationError{ + field: "Existed", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetExisted()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SubnetSourceValidationError{ field: "Existed", @@ -536,9 +899,29 @@ func (m *SubnetSource) Validate() error { } } + if len(errors) > 0 { + return SubnetSourceMultiError(errors) + } + return nil } +// SubnetSourceMultiError is an error wrapping multiple validation errors +// returned by SubnetSource.ValidateAll() if the designated constraints aren't met. +type SubnetSourceMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SubnetSourceMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SubnetSourceMultiError) AllErrors() []error { return m } + // SubnetSourceValidationError is the validation error returned by // SubnetSource.Validate if the designated constraints aren't met. type SubnetSourceValidationError struct { @@ -594,16 +977,51 @@ var _ interface { } = SubnetSourceValidationError{} // Validate checks the field values on ExistedSubnetIDs with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ExistedSubnetIDs) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ExistedSubnetIDs with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ExistedSubnetIDsMultiError, or nil if none found. +func (m *ExistedSubnetIDs) ValidateAll() error { + return m.validate(true) +} + +func (m *ExistedSubnetIDs) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return ExistedSubnetIDsMultiError(errors) + } + return nil } +// ExistedSubnetIDsMultiError is an error wrapping multiple validation errors +// returned by ExistedSubnetIDs.ValidateAll() if the designated constraints +// aren't met. +type ExistedSubnetIDsMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ExistedSubnetIDsMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ExistedSubnetIDsMultiError) AllErrors() []error { return m } + // ExistedSubnetIDsValidationError is the validation error returned by // ExistedSubnetIDs.Validate if the designated constraints aren't met. type ExistedSubnetIDsValidationError struct { @@ -659,21 +1077,56 @@ var _ interface { } = ExistedSubnetIDsValidationError{} // Validate checks the field values on NewSubnet with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NewSubnet) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NewSubnet with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NewSubnetMultiError, or nil +// if none found. +func (m *NewSubnet) ValidateAll() error { + return m.validate(true) +} + +func (m *NewSubnet) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Mask // no validation rules for Zone // no validation rules for IpCnt + if len(errors) > 0 { + return NewSubnetMultiError(errors) + } + return nil } +// NewSubnetMultiError is an error wrapping multiple validation errors returned +// by NewSubnet.ValidateAll() if the designated constraints aren't met. +type NewSubnetMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NewSubnetMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NewSubnetMultiError) AllErrors() []error { return m } + // NewSubnetValidationError is the validation error returned by // NewSubnet.Validate if the designated constraints aren't met. type NewSubnetValidationError struct { @@ -730,12 +1183,26 @@ var _ interface { // Validate checks the field values on ClusterBasicSetting with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ClusterBasicSetting) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterBasicSetting with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ClusterBasicSettingMultiError, or nil if none found. +func (m *ClusterBasicSetting) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterBasicSetting) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for OS // no validation rules for Version @@ -750,7 +1217,26 @@ func (m *ClusterBasicSetting) Validate() error { // no validation rules for IsAutoUpgradeClusterLevel - if v, ok := interface{}(m.GetArea()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetArea()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterBasicSettingValidationError{ + field: "Area", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterBasicSettingValidationError{ + field: "Area", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetArea()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterBasicSettingValidationError{ field: "Area", @@ -760,7 +1246,26 @@ func (m *ClusterBasicSetting) Validate() error { } } - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterBasicSettingValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterBasicSettingValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterBasicSettingValidationError{ field: "Module", @@ -770,9 +1275,30 @@ func (m *ClusterBasicSetting) Validate() error { } } + if len(errors) > 0 { + return ClusterBasicSettingMultiError(errors) + } + return nil } +// ClusterBasicSettingMultiError is an error wrapping multiple validation +// errors returned by ClusterBasicSetting.ValidateAll() if the designated +// constraints aren't met. +type ClusterBasicSettingMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterBasicSettingMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterBasicSettingMultiError) AllErrors() []error { return m } + // ClusterBasicSettingValidationError is the validation error returned by // ClusterBasicSetting.Validate if the designated constraints aren't met. type ClusterBasicSettingValidationError struct { @@ -831,12 +1357,26 @@ var _ interface { // Validate checks the field values on ClusterAdvanceSetting with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ClusterAdvanceSetting) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterAdvanceSetting with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ClusterAdvanceSettingMultiError, or nil if none found. +func (m *ClusterAdvanceSetting) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterAdvanceSetting) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IPVS // no validation rules for ContainerRuntime @@ -853,7 +1393,26 @@ func (m *ClusterAdvanceSetting) Validate() error { // no validation rules for EnableHa - if v, ok := interface{}(m.GetClusterConnectSetting()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterConnectSetting()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterAdvanceSettingValidationError{ + field: "ClusterConnectSetting", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterAdvanceSettingValidationError{ + field: "ClusterConnectSetting", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterConnectSetting()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterAdvanceSettingValidationError{ field: "ClusterConnectSetting", @@ -863,9 +1422,30 @@ func (m *ClusterAdvanceSetting) Validate() error { } } + if len(errors) > 0 { + return ClusterAdvanceSettingMultiError(errors) + } + return nil } +// ClusterAdvanceSettingMultiError is an error wrapping multiple validation +// errors returned by ClusterAdvanceSetting.ValidateAll() if the designated +// constraints aren't met. +type ClusterAdvanceSettingMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterAdvanceSettingMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterAdvanceSettingMultiError) AllErrors() []error { return m } + // ClusterAdvanceSettingValidationError is the validation error returned by // ClusterAdvanceSetting.Validate if the designated constraints aren't met. type ClusterAdvanceSettingValidationError struct { @@ -924,12 +1504,26 @@ var _ interface { // Validate checks the field values on ClusterConnectSetting with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ClusterConnectSetting) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterConnectSetting with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ClusterConnectSettingMultiError, or nil if none found. +func (m *ClusterConnectSetting) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterConnectSetting) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsExtranet // no validation rules for SubnetId @@ -938,7 +1532,26 @@ func (m *ClusterConnectSetting) Validate() error { // no validation rules for SecurityGroup - if v, ok := interface{}(m.GetInternet()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetInternet()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterConnectSettingValidationError{ + field: "Internet", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterConnectSettingValidationError{ + field: "Internet", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetInternet()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterConnectSettingValidationError{ field: "Internet", @@ -948,9 +1561,30 @@ func (m *ClusterConnectSetting) Validate() error { } } + if len(errors) > 0 { + return ClusterConnectSettingMultiError(errors) + } + return nil } +// ClusterConnectSettingMultiError is an error wrapping multiple validation +// errors returned by ClusterConnectSetting.ValidateAll() if the designated +// constraints aren't met. +type ClusterConnectSettingMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterConnectSettingMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterConnectSettingMultiError) AllErrors() []error { return m } + // ClusterConnectSettingValidationError is the validation error returned by // ClusterConnectSetting.Validate if the designated constraints aren't met. type ClusterConnectSettingValidationError struct { @@ -1008,13 +1642,27 @@ var _ interface { } = ClusterConnectSettingValidationError{} // Validate checks the field values on NodeSetting with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeSetting) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeSetting with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeSettingMultiError, or +// nil if none found. +func (m *NodeSetting) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeSetting) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for DockerGraphPath // no validation rules for MountTarget @@ -1028,7 +1676,26 @@ func (m *NodeSetting) Validate() error { for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeSettingValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeSettingValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeSettingValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -1040,7 +1707,26 @@ func (m *NodeSetting) Validate() error { } - if v, ok := interface{}(m.GetMasterLogin()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetMasterLogin()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeSettingValidationError{ + field: "MasterLogin", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeSettingValidationError{ + field: "MasterLogin", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMasterLogin()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeSettingValidationError{ field: "MasterLogin", @@ -1050,7 +1736,26 @@ func (m *NodeSetting) Validate() error { } } - if v, ok := interface{}(m.GetWorkerLogin()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWorkerLogin()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeSettingValidationError{ + field: "WorkerLogin", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeSettingValidationError{ + field: "WorkerLogin", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWorkerLogin()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeSettingValidationError{ field: "WorkerLogin", @@ -1060,9 +1765,29 @@ func (m *NodeSetting) Validate() error { } } + if len(errors) > 0 { + return NodeSettingMultiError(errors) + } + return nil } +// NodeSettingMultiError is an error wrapping multiple validation errors +// returned by NodeSetting.ValidateAll() if the designated constraints aren't met. +type NodeSettingMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeSettingMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeSettingMultiError) AllErrors() []error { return m } + // NodeSettingValidationError is the validation error returned by // NodeSetting.Validate if the designated constraints aren't met. type NodeSettingValidationError struct { @@ -1118,18 +1843,51 @@ var _ interface { } = NodeSettingValidationError{} // Validate checks the field values on NodeLoginInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeLoginInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeLoginInfo with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeLoginInfoMultiError, or +// nil if none found. +func (m *NodeLoginInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeLoginInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for InitLoginUsername // no validation rules for InitLoginPassword - if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetKeyPair()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeLoginInfoValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeLoginInfoValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeLoginInfoValidationError{ field: "KeyPair", @@ -1139,9 +1897,30 @@ func (m *NodeLoginInfo) Validate() error { } } + if len(errors) > 0 { + return NodeLoginInfoMultiError(errors) + } + return nil } +// NodeLoginInfoMultiError is an error wrapping multiple validation errors +// returned by NodeLoginInfo.ValidateAll() if the designated constraints +// aren't met. +type NodeLoginInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeLoginInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeLoginInfoMultiError) AllErrors() []error { return m } + // NodeLoginInfoValidationError is the validation error returned by // NodeLoginInfo.Validate if the designated constraints aren't met. type NodeLoginInfoValidationError struct { @@ -1197,13 +1976,27 @@ var _ interface { } = NodeLoginInfoValidationError{} // Validate checks the field values on ClusterCredential with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ClusterCredential) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterCredential with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ClusterCredentialMultiError, or nil if none found. +func (m *ClusterCredential) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterCredential) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ServerKey // no validation rules for ClusterID @@ -1228,9 +2021,30 @@ func (m *ClusterCredential) Validate() error { // no validation rules for ClientKey + if len(errors) > 0 { + return ClusterCredentialMultiError(errors) + } + return nil } +// ClusterCredentialMultiError is an error wrapping multiple validation errors +// returned by ClusterCredential.ValidateAll() if the designated constraints +// aren't met. +type ClusterCredentialMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterCredentialMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterCredentialMultiError) AllErrors() []error { return m } + // ClusterCredentialValidationError is the validation error returned by // ClusterCredential.Validate if the designated constraints aren't met. type ClusterCredentialValidationError struct { @@ -1288,12 +2102,27 @@ var _ interface { } = ClusterCredentialValidationError{} // Validate checks the field values on Namespace with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Namespace) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Namespace with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NamespaceMultiError, or nil +// if none found. +func (m *Namespace) ValidateAll() error { + return m.validate(true) +} + +func (m *Namespace) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for FederationClusterID @@ -1313,7 +2142,26 @@ func (m *Namespace) Validate() error { for idx, item := range m.GetQuotaList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NamespaceValidationError{ + field: fmt.Sprintf("QuotaList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NamespaceValidationError{ + field: fmt.Sprintf("QuotaList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NamespaceValidationError{ field: fmt.Sprintf("QuotaList[%v]", idx), @@ -1325,9 +2173,29 @@ func (m *Namespace) Validate() error { } + if len(errors) > 0 { + return NamespaceMultiError(errors) + } + return nil } +// NamespaceMultiError is an error wrapping multiple validation errors returned +// by Namespace.ValidateAll() if the designated constraints aren't met. +type NamespaceMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NamespaceMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NamespaceMultiError) AllErrors() []error { return m } + // NamespaceValidationError is the validation error returned by // Namespace.Validate if the designated constraints aren't met. type NamespaceValidationError struct { @@ -1383,13 +2251,27 @@ var _ interface { } = NamespaceValidationError{} // Validate checks the field values on ResourceQuota with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ResourceQuota) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ResourceQuota with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ResourceQuotaMultiError, or +// nil if none found. +func (m *ResourceQuota) ValidateAll() error { + return m.validate(true) +} + +func (m *ResourceQuota) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Namespace // no validation rules for FederationClusterID @@ -1408,9 +2290,30 @@ func (m *ResourceQuota) Validate() error { // no validation rules for Message + if len(errors) > 0 { + return ResourceQuotaMultiError(errors) + } + return nil } +// ResourceQuotaMultiError is an error wrapping multiple validation errors +// returned by ResourceQuota.ValidateAll() if the designated constraints +// aren't met. +type ResourceQuotaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ResourceQuotaMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ResourceQuotaMultiError) AllErrors() []error { return m } + // ResourceQuotaValidationError is the validation error returned by // ResourceQuota.Validate if the designated constraints aren't met. type ResourceQuotaValidationError struct { @@ -1466,12 +2369,27 @@ var _ interface { } = ResourceQuotaValidationError{} // Validate checks the field values on Credential with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Credential) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Credential with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CredentialMultiError, or +// nil if none found. +func (m *Credential) ValidateAll() error { + return m.validate(true) +} + +func (m *Credential) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Key // no validation rules for Secret @@ -1490,9 +2408,29 @@ func (m *Credential) Validate() error { // no validation rules for GkeProjectID + if len(errors) > 0 { + return CredentialMultiError(errors) + } + return nil } +// CredentialMultiError is an error wrapping multiple validation errors +// returned by Credential.ValidateAll() if the designated constraints aren't met. +type CredentialMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CredentialMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CredentialMultiError) AllErrors() []error { return m } + // CredentialValidationError is the validation error returned by // Credential.Validate if the designated constraints aren't met. type CredentialValidationError struct { @@ -1548,13 +2486,27 @@ var _ interface { } = CredentialValidationError{} // Validate checks the field values on BKOpsPlugin with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *BKOpsPlugin) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on BKOpsPlugin with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in BKOpsPluginMultiError, or +// nil if none found. +func (m *BKOpsPlugin) ValidateAll() error { + return m.validate(true) +} + +func (m *BKOpsPlugin) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for System // no validation rules for Link @@ -1563,9 +2515,29 @@ func (m *BKOpsPlugin) Validate() error { // no validation rules for AllowSkipWhenFailed + if len(errors) > 0 { + return BKOpsPluginMultiError(errors) + } + return nil } +// BKOpsPluginMultiError is an error wrapping multiple validation errors +// returned by BKOpsPlugin.ValidateAll() if the designated constraints aren't met. +type BKOpsPluginMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m BKOpsPluginMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m BKOpsPluginMultiError) AllErrors() []error { return m } + // BKOpsPluginValidationError is the validation error returned by // BKOpsPlugin.Validate if the designated constraints aren't met. type BKOpsPluginValidationError struct { @@ -1621,32 +2593,95 @@ var _ interface { } = BKOpsPluginValidationError{} // Validate checks the field values on Action with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Action) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Action with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in ActionMultiError, or nil if none found. +func (m *Action) ValidateAll() error { + return m.validate(true) +} + +func (m *Action) validate(all bool) error { if m == nil { return nil } - for key, val := range m.GetPlugins() { - _ = val + var errors []error - // no validation rules for Plugins[key] + { + sorted_keys := make([]string, len(m.GetPlugins())) + i := 0 + for key := range m.GetPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetPlugins()[key] + _ = val - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ActionValidationError{ - field: fmt.Sprintf("Plugins[%v]", key), - reason: "embedded message failed validation", - cause: err, + // no validation rules for Plugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ActionValidationError{ + field: fmt.Sprintf("Plugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ActionValidationError{ + field: fmt.Sprintf("Plugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ActionValidationError{ + field: fmt.Sprintf("Plugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } + } + } + if len(errors) > 0 { + return ActionMultiError(errors) } return nil } +// ActionMultiError is an error wrapping multiple validation errors returned by +// Action.ValidateAll() if the designated constraints aren't met. +type ActionMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ActionMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ActionMultiError) AllErrors() []error { return m } + // ActionValidationError is the validation error returned by Action.Validate if // the designated constraints aren't met. type ActionValidationError struct { @@ -1702,13 +2737,47 @@ var _ interface { } = ActionValidationError{} // Validate checks the field values on ClusterMgr with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ClusterMgr) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterMgr with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ClusterMgrMultiError, or +// nil if none found. +func (m *ClusterMgr) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterMgr) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetCreateCluster()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetCreateCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "CreateCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "CreateCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCreateCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "CreateCluster", @@ -1718,7 +2787,26 @@ func (m *ClusterMgr) Validate() error { } } - if v, ok := interface{}(m.GetDeleteCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDeleteCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "DeleteCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "DeleteCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeleteCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "DeleteCluster", @@ -1728,7 +2816,26 @@ func (m *ClusterMgr) Validate() error { } } - if v, ok := interface{}(m.GetAddNodesToCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAddNodesToCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "AddNodesToCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "AddNodesToCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAddNodesToCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "AddNodesToCluster", @@ -1738,7 +2845,26 @@ func (m *ClusterMgr) Validate() error { } } - if v, ok := interface{}(m.GetDeleteNodesFromCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDeleteNodesFromCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "DeleteNodesFromCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "DeleteNodesFromCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeleteNodesFromCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "DeleteNodesFromCluster", @@ -1748,7 +2874,26 @@ func (m *ClusterMgr) Validate() error { } } - if v, ok := interface{}(m.GetImportCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetImportCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "ImportCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "ImportCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetImportCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "ImportCluster", @@ -1758,9 +2903,29 @@ func (m *ClusterMgr) Validate() error { } } + if len(errors) > 0 { + return ClusterMgrMultiError(errors) + } + return nil } +// ClusterMgrMultiError is an error wrapping multiple validation errors +// returned by ClusterMgr.ValidateAll() if the designated constraints aren't met. +type ClusterMgrMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterMgrMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterMgrMultiError) AllErrors() []error { return m } + // ClusterMgrValidationError is the validation error returned by // ClusterMgr.Validate if the designated constraints aren't met. type ClusterMgrValidationError struct { @@ -1816,14 +2981,47 @@ var _ interface { } = ClusterMgrValidationError{} // Validate checks the field values on NodeGroupMgr with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeGroupMgr) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeGroupMgr with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeGroupMgrMultiError, or +// nil if none found. +func (m *NodeGroupMgr) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeGroupMgr) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetCreateNodeGroup()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetCreateNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "CreateNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "CreateNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCreateNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "CreateNodeGroup", @@ -1833,7 +3031,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetDeleteNodeGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDeleteNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "DeleteNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "DeleteNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeleteNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "DeleteNodeGroup", @@ -1843,7 +3060,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetMoveNodesToGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetMoveNodesToGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "MoveNodesToGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "MoveNodesToGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMoveNodesToGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "MoveNodesToGroup", @@ -1853,7 +3089,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetRemoveNodesFromGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRemoveNodesFromGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "RemoveNodesFromGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "RemoveNodesFromGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRemoveNodesFromGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "RemoveNodesFromGroup", @@ -1863,7 +3118,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetCleanNodesInGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCleanNodesInGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "CleanNodesInGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "CleanNodesInGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCleanNodesInGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "CleanNodesInGroup", @@ -1873,7 +3147,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetUpdateDesiredNodes()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetUpdateDesiredNodes()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "UpdateDesiredNodes", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "UpdateDesiredNodes", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUpdateDesiredNodes()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "UpdateDesiredNodes", @@ -1883,7 +3176,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetAddExternalNodesToCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAddExternalNodesToCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "AddExternalNodesToCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "AddExternalNodesToCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAddExternalNodesToCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "AddExternalNodesToCluster", @@ -1893,7 +3205,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetDeleteExternalNodesFromCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDeleteExternalNodesFromCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "DeleteExternalNodesFromCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "DeleteExternalNodesFromCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeleteExternalNodesFromCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "DeleteExternalNodesFromCluster", @@ -1903,9 +3234,29 @@ func (m *NodeGroupMgr) Validate() error { } } + if len(errors) > 0 { + return NodeGroupMgrMultiError(errors) + } + return nil } +// NodeGroupMgrMultiError is an error wrapping multiple validation errors +// returned by NodeGroupMgr.ValidateAll() if the designated constraints aren't met. +type NodeGroupMgrMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeGroupMgrMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeGroupMgrMultiError) AllErrors() []error { return m } + // NodeGroupMgrValidationError is the validation error returned by // NodeGroupMgr.Validate if the designated constraints aren't met. type NodeGroupMgrValidationError struct { @@ -1961,17 +3312,51 @@ var _ interface { } = NodeGroupMgrValidationError{} // Validate checks the field values on OSInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *OSInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OSInfo with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in OSInfoMultiError, or nil if none found. +func (m *OSInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *OSInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Regions + if len(errors) > 0 { + return OSInfoMultiError(errors) + } + return nil } +// OSInfoMultiError is an error wrapping multiple validation errors returned by +// OSInfo.ValidateAll() if the designated constraints aren't met. +type OSInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OSInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OSInfoMultiError) AllErrors() []error { return m } + // OSInfoValidationError is the validation error returned by OSInfo.Validate if // the designated constraints aren't met. type OSInfoValidationError struct { @@ -2027,12 +3412,26 @@ var _ interface { } = OSInfoValidationError{} // Validate checks the field values on Account with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Account) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Account with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in AccountMultiError, or nil if none found. +func (m *Account) ValidateAll() error { + return m.validate(true) +} + +func (m *Account) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for SecretID // no validation rules for SecretKey @@ -2051,9 +3450,29 @@ func (m *Account) Validate() error { // no validation rules for GkeProjectID + if len(errors) > 0 { + return AccountMultiError(errors) + } + return nil } +// AccountMultiError is an error wrapping multiple validation errors returned +// by Account.ValidateAll() if the designated constraints aren't met. +type AccountMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AccountMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AccountMultiError) AllErrors() []error { return m } + // AccountValidationError is the validation error returned by Account.Validate // if the designated constraints aren't met. type AccountValidationError struct { @@ -2109,13 +3528,27 @@ var _ interface { } = AccountValidationError{} // Validate checks the field values on CloudAccount with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudAccount) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudAccount with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudAccountMultiError, or +// nil if none found. +func (m *CloudAccount) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudAccount) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for ProjectID @@ -2126,7 +3559,26 @@ func (m *CloudAccount) Validate() error { // no validation rules for Desc - if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAccount()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudAccountValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudAccountValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudAccountValidationError{ field: "Account", @@ -2146,9 +3598,29 @@ func (m *CloudAccount) Validate() error { // no validation rules for UpdateTime + if len(errors) > 0 { + return CloudAccountMultiError(errors) + } + return nil } +// CloudAccountMultiError is an error wrapping multiple validation errors +// returned by CloudAccount.ValidateAll() if the designated constraints aren't met. +type CloudAccountMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudAccountMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudAccountMultiError) AllErrors() []error { return m } + // CloudAccountValidationError is the validation error returned by // CloudAccount.Validate if the designated constraints aren't met. type CloudAccountValidationError struct { @@ -2205,36 +3677,81 @@ var _ interface { // Validate checks the field values on CreateCloudAccountRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudAccountRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateCloudAccountRequestMultiError, or nil if none found. +func (m *CreateCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 1024 { - return CreateCloudAccountRequestValidationError{ + err := CreateCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudAccountRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return CreateCloudAccountRequestValidationError{ + err := CreateCloudAccountRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetAccountName()) < 1 { - return CreateCloudAccountRequestValidationError{ + err := CreateCloudAccountRequestValidationError{ field: "AccountName", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Desc - if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAccount()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudAccountRequestValidationError{ field: "Account", @@ -2244,7 +3761,26 @@ func (m *CreateCloudAccountRequest) Validate() error { } } - if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetEnable()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudAccountRequestValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudAccountRequestValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudAccountRequestValidationError{ field: "Enable", @@ -2255,22 +3791,51 @@ func (m *CreateCloudAccountRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 1024 { - return CreateCloudAccountRequestValidationError{ + err := CreateCloudAccountRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) < 2 { - return CreateCloudAccountRequestValidationError{ + err := CreateCloudAccountRequestValidationError{ field: "ProjectID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return CreateCloudAccountRequestMultiError(errors) } return nil } +// CreateCloudAccountRequestMultiError is an error wrapping multiple validation +// errors returned by CreateCloudAccountRequest.ValidateAll() if the +// designated constraints aren't met. +type CreateCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudAccountRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateCloudAccountRequestMultiError) AllErrors() []error { return m } + // CreateCloudAccountRequestValidationError is the validation error returned by // CreateCloudAccountRequest.Validate if the designated constraints aren't met. type CreateCloudAccountRequestValidationError struct { @@ -2331,19 +3896,52 @@ var _CreateCloudAccountRequest_CloudID_Pattern = regexp.MustCompile("^[0-9a-zA-Z // Validate checks the field values on CreateCloudAccountResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudAccountResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateCloudAccountResponseMultiError, or nil if none found. +func (m *CreateCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudAccountResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudAccountResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudAccountResponseValidationError{ field: "Data", @@ -2353,9 +3951,30 @@ func (m *CreateCloudAccountResponse) Validate() error { } } + if len(errors) > 0 { + return CreateCloudAccountResponseMultiError(errors) + } + return nil } +// CreateCloudAccountResponseMultiError is an error wrapping multiple +// validation errors returned by CreateCloudAccountResponse.ValidateAll() if +// the designated constraints aren't met. +type CreateCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudAccountResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateCloudAccountResponseMultiError) AllErrors() []error { return m } + // CreateCloudAccountResponseValidationError is the validation error returned // by CreateCloudAccountResponse.Validate if the designated constraints aren't met. type CreateCloudAccountResponseValidationError struct { @@ -2414,45 +4033,94 @@ var _ interface { // Validate checks the field values on UpdateCloudAccountRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudAccountRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateCloudAccountRequestMultiError, or nil if none found. +func (m *UpdateCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 1024 { - return UpdateCloudAccountRequestValidationError{ + err := UpdateCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateCloudAccountRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return UpdateCloudAccountRequestValidationError{ + err := UpdateCloudAccountRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetAccountID()); l < 2 || l > 1024 { - return UpdateCloudAccountRequestValidationError{ + err := UpdateCloudAccountRequestValidationError{ field: "AccountID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateCloudAccountRequest_AccountID_Pattern.MatchString(m.GetAccountID()) { - return UpdateCloudAccountRequestValidationError{ + err := UpdateCloudAccountRequestValidationError{ field: "AccountID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountName // no validation rules for Desc - if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetEnable()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudAccountRequestValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudAccountRequestValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudAccountRequestValidationError{ field: "Enable", @@ -2465,13 +4133,36 @@ func (m *UpdateCloudAccountRequest) Validate() error { // no validation rules for ProjectID if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 1024 { - return UpdateCloudAccountRequestValidationError{ + err := UpdateCloudAccountRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAccount()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudAccountRequestValidationError{ field: "Account", @@ -2481,9 +4172,30 @@ func (m *UpdateCloudAccountRequest) Validate() error { } } + if len(errors) > 0 { + return UpdateCloudAccountRequestMultiError(errors) + } + return nil } +// UpdateCloudAccountRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateCloudAccountRequest.ValidateAll() if the +// designated constraints aren't met. +type UpdateCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudAccountRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateCloudAccountRequestMultiError) AllErrors() []error { return m } + // UpdateCloudAccountRequestValidationError is the validation error returned by // UpdateCloudAccountRequest.Validate if the designated constraints aren't met. type UpdateCloudAccountRequestValidationError struct { @@ -2546,21 +4258,56 @@ var _UpdateCloudAccountRequest_AccountID_Pattern = regexp.MustCompile("^[0-9a-zA // Validate checks the field values on UpdateCloudAccountResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudAccountResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateCloudAccountResponseMultiError, or nil if none found. +func (m *UpdateCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return UpdateCloudAccountResponseMultiError(errors) + } + return nil } +// UpdateCloudAccountResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateCloudAccountResponse.ValidateAll() if +// the designated constraints aren't met. +type UpdateCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudAccountResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateCloudAccountResponseMultiError) AllErrors() []error { return m } + // UpdateCloudAccountResponseValidationError is the validation error returned // by UpdateCloudAccountResponse.Validate if the designated constraints aren't met. type UpdateCloudAccountResponseValidationError struct { @@ -2619,29 +4366,70 @@ var _ interface { // Validate checks the field values on MigrateCloudAccountRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *MigrateCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MigrateCloudAccountRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// MigrateCloudAccountRequestMultiError, or nil if none found. +func (m *MigrateCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *MigrateCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 1024 { - return MigrateCloudAccountRequestValidationError{ + err := MigrateCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_MigrateCloudAccountRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return MigrateCloudAccountRequestValidationError{ + err := MigrateCloudAccountRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountIDs - if v, ok := interface{}(m.GetEncrypt()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetEncrypt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, MigrateCloudAccountRequestValidationError{ + field: "Encrypt", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, MigrateCloudAccountRequestValidationError{ + field: "Encrypt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEncrypt()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return MigrateCloudAccountRequestValidationError{ field: "Encrypt", @@ -2653,9 +4441,30 @@ func (m *MigrateCloudAccountRequest) Validate() error { // no validation rules for All + if len(errors) > 0 { + return MigrateCloudAccountRequestMultiError(errors) + } + return nil } +// MigrateCloudAccountRequestMultiError is an error wrapping multiple +// validation errors returned by MigrateCloudAccountRequest.ValidateAll() if +// the designated constraints aren't met. +type MigrateCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MigrateCloudAccountRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m MigrateCloudAccountRequestMultiError) AllErrors() []error { return m } + // MigrateCloudAccountRequestValidationError is the validation error returned // by MigrateCloudAccountRequest.Validate if the designated constraints aren't met. type MigrateCloudAccountRequestValidationError struct { @@ -2715,22 +4524,57 @@ var _ interface { var _MigrateCloudAccountRequest_CloudID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on OriginEncrypt with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *OriginEncrypt) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OriginEncrypt with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in OriginEncryptMultiError, or +// nil if none found. +func (m *OriginEncrypt) ValidateAll() error { + return m.validate(true) +} + +func (m *OriginEncrypt) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for EncryptType // no validation rules for Kv // no validation rules for Iv + if len(errors) > 0 { + return OriginEncryptMultiError(errors) + } + return nil } +// OriginEncryptMultiError is an error wrapping multiple validation errors +// returned by OriginEncrypt.ValidateAll() if the designated constraints +// aren't met. +type OriginEncryptMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OriginEncryptMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OriginEncryptMultiError) AllErrors() []error { return m } + // OriginEncryptValidationError is the validation error returned by // OriginEncrypt.Validate if the designated constraints aren't met. type OriginEncryptValidationError struct { @@ -2787,21 +4631,56 @@ var _ interface { // Validate checks the field values on MigrateCloudAccountResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *MigrateCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MigrateCloudAccountResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// MigrateCloudAccountResponseMultiError, or nil if none found. +func (m *MigrateCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *MigrateCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return MigrateCloudAccountResponseMultiError(errors) + } + return nil } +// MigrateCloudAccountResponseMultiError is an error wrapping multiple +// validation errors returned by MigrateCloudAccountResponse.ValidateAll() if +// the designated constraints aren't met. +type MigrateCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MigrateCloudAccountResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m MigrateCloudAccountResponseMultiError) AllErrors() []error { return m } + // MigrateCloudAccountResponseValidationError is the validation error returned // by MigrateCloudAccountResponse.Validate if the designated constraints // aren't met. @@ -2861,43 +4740,94 @@ var _ interface { // Validate checks the field values on DeleteCloudAccountRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudAccountRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteCloudAccountRequestMultiError, or nil if none found. +func (m *DeleteCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 1024 { - return DeleteCloudAccountRequestValidationError{ + err := DeleteCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteCloudAccountRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return DeleteCloudAccountRequestValidationError{ + err := DeleteCloudAccountRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetAccountID()); l < 2 || l > 1024 { - return DeleteCloudAccountRequestValidationError{ + err := DeleteCloudAccountRequestValidationError{ field: "AccountID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteCloudAccountRequest_AccountID_Pattern.MatchString(m.GetAccountID()) { - return DeleteCloudAccountRequestValidationError{ + err := DeleteCloudAccountRequestValidationError{ field: "AccountID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DeleteCloudAccountRequestMultiError(errors) } return nil } +// DeleteCloudAccountRequestMultiError is an error wrapping multiple validation +// errors returned by DeleteCloudAccountRequest.ValidateAll() if the +// designated constraints aren't met. +type DeleteCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudAccountRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteCloudAccountRequestMultiError) AllErrors() []error { return m } + // DeleteCloudAccountRequestValidationError is the validation error returned by // DeleteCloudAccountRequest.Validate if the designated constraints aren't met. type DeleteCloudAccountRequestValidationError struct { @@ -2960,21 +4890,56 @@ var _DeleteCloudAccountRequest_AccountID_Pattern = regexp.MustCompile("^[0-9a-zA // Validate checks the field values on DeleteCloudAccountResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudAccountResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteCloudAccountResponseMultiError, or nil if none found. +func (m *DeleteCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return DeleteCloudAccountResponseMultiError(errors) + } + return nil } +// DeleteCloudAccountResponseMultiError is an error wrapping multiple +// validation errors returned by DeleteCloudAccountResponse.ValidateAll() if +// the designated constraints aren't met. +type DeleteCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudAccountResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteCloudAccountResponseMultiError) AllErrors() []error { return m } + // DeleteCloudAccountResponseValidationError is the validation error returned // by DeleteCloudAccountResponse.Validate if the designated constraints aren't met. type DeleteCloudAccountResponseValidationError struct { @@ -3033,19 +4998,54 @@ var _ interface { // Validate checks the field values on ListCloudAccountPermRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudAccountPermRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudAccountPermRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudAccountPermRequestMultiError, or nil if none found. +func (m *ListCloudAccountPermRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudAccountPermRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for AccountName + if len(errors) > 0 { + return ListCloudAccountPermRequestMultiError(errors) + } + return nil } +// ListCloudAccountPermRequestMultiError is an error wrapping multiple +// validation errors returned by ListCloudAccountPermRequest.ValidateAll() if +// the designated constraints aren't met. +type ListCloudAccountPermRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudAccountPermRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudAccountPermRequestMultiError) AllErrors() []error { return m } + // ListCloudAccountPermRequestValidationError is the validation error returned // by ListCloudAccountPermRequest.Validate if the designated constraints // aren't met. @@ -3105,12 +5105,26 @@ var _ interface { // Validate checks the field values on ListCloudAccountPermResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudAccountPermResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudAccountPermResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudAccountPermResponseMultiError, or nil if none found. +func (m *ListCloudAccountPermResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudAccountPermResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -3120,7 +5134,26 @@ func (m *ListCloudAccountPermResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudAccountPermResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudAccountPermResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudAccountPermResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -3132,9 +5165,30 @@ func (m *ListCloudAccountPermResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudAccountPermResponseMultiError(errors) + } + return nil } +// ListCloudAccountPermResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudAccountPermResponse.ValidateAll() if +// the designated constraints aren't met. +type ListCloudAccountPermResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudAccountPermResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudAccountPermResponseMultiError) AllErrors() []error { return m } + // ListCloudAccountPermResponseValidationError is the validation error returned // by ListCloudAccountPermResponse.Validate if the designated constraints // aren't met. @@ -3194,17 +5248,35 @@ var _ interface { // Validate checks the field values on ListCloudAccountRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudAccountRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudAccountRequestMultiError, or nil if none found. +func (m *ListCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) > 1024 { - return ListCloudAccountRequestValidationError{ + err := ListCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountID @@ -3213,9 +5285,30 @@ func (m *ListCloudAccountRequest) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return ListCloudAccountRequestMultiError(errors) + } + return nil } +// ListCloudAccountRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudAccountRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudAccountRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudAccountRequestMultiError) AllErrors() []error { return m } + // ListCloudAccountRequestValidationError is the validation error returned by // ListCloudAccountRequest.Validate if the designated constraints aren't met. type ListCloudAccountRequestValidationError struct { @@ -3274,29 +5367,70 @@ var _ interface { // Validate checks the field values on VerifyCloudAccountRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *VerifyCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on VerifyCloudAccountRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// VerifyCloudAccountRequestMultiError, or nil if none found. +func (m *VerifyCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *VerifyCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 1024 { - return VerifyCloudAccountRequestValidationError{ + err := VerifyCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_VerifyCloudAccountRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return VerifyCloudAccountRequestValidationError{ + err := VerifyCloudAccountRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Desc - if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAccount()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, VerifyCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, VerifyCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return VerifyCloudAccountRequestValidationError{ field: "Account", @@ -3306,9 +5440,30 @@ func (m *VerifyCloudAccountRequest) Validate() error { } } + if len(errors) > 0 { + return VerifyCloudAccountRequestMultiError(errors) + } + return nil } +// VerifyCloudAccountRequestMultiError is an error wrapping multiple validation +// errors returned by VerifyCloudAccountRequest.ValidateAll() if the +// designated constraints aren't met. +type VerifyCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m VerifyCloudAccountRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m VerifyCloudAccountRequestMultiError) AllErrors() []error { return m } + // VerifyCloudAccountRequestValidationError is the validation error returned by // VerifyCloudAccountRequest.Validate if the designated constraints aren't met. type VerifyCloudAccountRequestValidationError struct { @@ -3369,21 +5524,56 @@ var _VerifyCloudAccountRequest_CloudID_Pattern = regexp.MustCompile("^[0-9a-zA-Z // Validate checks the field values on VerifyCloudAccountResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *VerifyCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on VerifyCloudAccountResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// VerifyCloudAccountResponseMultiError, or nil if none found. +func (m *VerifyCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *VerifyCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return VerifyCloudAccountResponseMultiError(errors) + } + return nil } +// VerifyCloudAccountResponseMultiError is an error wrapping multiple +// validation errors returned by VerifyCloudAccountResponse.ValidateAll() if +// the designated constraints aren't met. +type VerifyCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m VerifyCloudAccountResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m VerifyCloudAccountResponseMultiError) AllErrors() []error { return m } + // VerifyCloudAccountResponseValidationError is the validation error returned // by VerifyCloudAccountResponse.Validate if the designated constraints aren't met. type VerifyCloudAccountResponseValidationError struct { @@ -3441,14 +5631,47 @@ var _ interface { } = VerifyCloudAccountResponseValidationError{} // Validate checks the field values on CloudAccountInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CloudAccountInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudAccountInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CloudAccountInfoMultiError, or nil if none found. +func (m *CloudAccountInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudAccountInfo) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetAccount()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudAccountInfoValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudAccountInfoValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudAccountInfoValidationError{ field: "Account", @@ -3458,9 +5681,30 @@ func (m *CloudAccountInfo) Validate() error { } } + if len(errors) > 0 { + return CloudAccountInfoMultiError(errors) + } + return nil } +// CloudAccountInfoMultiError is an error wrapping multiple validation errors +// returned by CloudAccountInfo.ValidateAll() if the designated constraints +// aren't met. +type CloudAccountInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudAccountInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudAccountInfoMultiError) AllErrors() []error { return m } + // CloudAccountInfoValidationError is the validation error returned by // CloudAccountInfo.Validate if the designated constraints aren't met. type CloudAccountInfoValidationError struct { @@ -3517,12 +5761,26 @@ var _ interface { // Validate checks the field values on ListCloudAccountResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudAccountResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudAccountResponseMultiError, or nil if none found. +func (m *ListCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -3532,7 +5790,26 @@ func (m *ListCloudAccountResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudAccountResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudAccountResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudAccountResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -3544,7 +5821,26 @@ func (m *ListCloudAccountResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudAccountResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudAccountResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudAccountResponseValidationError{ field: "WebAnnotations", @@ -3554,9 +5850,30 @@ func (m *ListCloudAccountResponse) Validate() error { } } + if len(errors) > 0 { + return ListCloudAccountResponseMultiError(errors) + } + return nil } +// ListCloudAccountResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudAccountResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudAccountResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudAccountResponseMultiError) AllErrors() []error { return m } + // ListCloudAccountResponseValidationError is the validation error returned by // ListCloudAccountResponse.Validate if the designated constraints aren't met. type ListCloudAccountResponseValidationError struct { @@ -3614,12 +5931,27 @@ var _ interface { } = ListCloudAccountResponseValidationError{} // Validate checks the field values on CloudVPC with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudVPC) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudVPC with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudVPCMultiError, or nil +// if none found. +func (m *CloudVPC) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudVPC) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Region @@ -3648,9 +5980,29 @@ func (m *CloudVPC) Validate() error { // no validation rules for BusinessID + if len(errors) > 0 { + return CloudVPCMultiError(errors) + } + return nil } +// CloudVPCMultiError is an error wrapping multiple validation errors returned +// by CloudVPC.ValidateAll() if the designated constraints aren't met. +type CloudVPCMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudVPCMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudVPCMultiError) AllErrors() []error { return m } + // CloudVPCValidationError is the validation error returned by // CloudVPC.Validate if the designated constraints aren't met. type CloudVPCValidationError struct { @@ -3707,100 +6059,179 @@ var _ interface { // Validate checks the field values on CreateCloudVPCRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudVPCRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudVPCRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateCloudVPCRequestMultiError, or nil if none found. +func (m *CreateCloudVPCRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudVPCRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 100 { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudVPCRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateCloudVPCRequest_NetworkType_InLookup[m.GetNetworkType()]; !ok { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "NetworkType", reason: "value must be in list [overlay underlay]", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetRegion()); l < 2 || l > 100 { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "Region", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudVPCRequest_Region_Pattern.MatchString(m.GetRegion()) { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for RegionName if l := utf8.RuneCountInString(m.GetVpcName()); l < 2 || l > 100 { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "VpcName", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudVPCRequest_VpcName_Pattern.MatchString(m.GetVpcName()) { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "VpcName", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetVpcID()); l < 2 || l > 100 { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "VpcID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudVPCRequest_VpcID_Pattern.MatchString(m.GetVpcID()) { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "VpcID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateCloudVPCRequest_Available_InLookup[m.GetAvailable()]; !ok { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "Available", reason: "value must be in list [true false]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Extra if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 100 { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ReservedIPNum // no validation rules for BusinessID + if len(errors) > 0 { + return CreateCloudVPCRequestMultiError(errors) + } + return nil } +// CreateCloudVPCRequestMultiError is an error wrapping multiple validation +// errors returned by CreateCloudVPCRequest.ValidateAll() if the designated +// constraints aren't met. +type CreateCloudVPCRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudVPCRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateCloudVPCRequestMultiError) AllErrors() []error { return m } + // CreateCloudVPCRequestValidationError is the validation error returned by // CreateCloudVPCRequest.Validate if the designated constraints aren't met. type CreateCloudVPCRequestValidationError struct { @@ -3877,21 +6308,56 @@ var _CreateCloudVPCRequest_Available_InLookup = map[string]struct{}{ // Validate checks the field values on CreateCloudVPCResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudVPCResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudVPCResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateCloudVPCResponseMultiError, or nil if none found. +func (m *CreateCloudVPCResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudVPCResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return CreateCloudVPCResponseMultiError(errors) + } + return nil } +// CreateCloudVPCResponseMultiError is an error wrapping multiple validation +// errors returned by CreateCloudVPCResponse.ValidateAll() if the designated +// constraints aren't met. +type CreateCloudVPCResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudVPCResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateCloudVPCResponseMultiError) AllErrors() []error { return m } + // CreateCloudVPCResponseValidationError is the validation error returned by // CreateCloudVPCResponse.Validate if the designated constraints aren't met. type CreateCloudVPCResponseValidationError struct { @@ -3950,24 +6416,46 @@ var _ interface { // Validate checks the field values on UpdateCloudVPCRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudVPCRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudVPCRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateCloudVPCRequestMultiError, or nil if none found. +func (m *UpdateCloudVPCRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudVPCRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 100 { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateCloudVPCRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for NetworkType @@ -3979,34 +6467,69 @@ func (m *UpdateCloudVPCRequest) Validate() error { // no validation rules for VpcName if l := utf8.RuneCountInString(m.GetVpcID()); l < 2 || l > 100 { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "VpcID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateCloudVPCRequest_VpcID_Pattern.MatchString(m.GetVpcID()) { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "VpcID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _UpdateCloudVPCRequest_Available_InLookup[m.GetAvailable()]; !ok { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "Available", reason: "value must be in list [ true false]", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 100 { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetReservedIPNum()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetReservedIPNum()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudVPCRequestValidationError{ + field: "ReservedIPNum", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudVPCRequestValidationError{ + field: "ReservedIPNum", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetReservedIPNum()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudVPCRequestValidationError{ field: "ReservedIPNum", @@ -4016,7 +6539,26 @@ func (m *UpdateCloudVPCRequest) Validate() error { } } - if v, ok := interface{}(m.GetBusinessID()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetBusinessID()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudVPCRequestValidationError{ + field: "BusinessID", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudVPCRequestValidationError{ + field: "BusinessID", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetBusinessID()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudVPCRequestValidationError{ field: "BusinessID", @@ -4026,9 +6568,30 @@ func (m *UpdateCloudVPCRequest) Validate() error { } } + if len(errors) > 0 { + return UpdateCloudVPCRequestMultiError(errors) + } + return nil } +// UpdateCloudVPCRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateCloudVPCRequest.ValidateAll() if the designated +// constraints aren't met. +type UpdateCloudVPCRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudVPCRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateCloudVPCRequestMultiError) AllErrors() []error { return m } + // UpdateCloudVPCRequestValidationError is the validation error returned by // UpdateCloudVPCRequest.Validate if the designated constraints aren't met. type UpdateCloudVPCRequestValidationError struct { @@ -4097,19 +6660,52 @@ var _UpdateCloudVPCRequest_Available_InLookup = map[string]struct{}{ // Validate checks the field values on UpdateCloudVPCResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudVPCResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudVPCResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateCloudVPCResponseMultiError, or nil if none found. +func (m *UpdateCloudVPCResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudVPCResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudVPCResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudVPCResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudVPCResponseValidationError{ field: "Data", @@ -4119,9 +6715,30 @@ func (m *UpdateCloudVPCResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateCloudVPCResponseMultiError(errors) + } + return nil } +// UpdateCloudVPCResponseMultiError is an error wrapping multiple validation +// errors returned by UpdateCloudVPCResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateCloudVPCResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudVPCResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateCloudVPCResponseMultiError) AllErrors() []error { return m } + // UpdateCloudVPCResponseValidationError is the validation error returned by // UpdateCloudVPCResponse.Validate if the designated constraints aren't met. type UpdateCloudVPCResponseValidationError struct { @@ -4180,43 +6797,94 @@ var _ interface { // Validate checks the field values on DeleteCloudVPCRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudVPCRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudVPCRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteCloudVPCRequestMultiError, or nil if none found. +func (m *DeleteCloudVPCRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudVPCRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 100 { - return DeleteCloudVPCRequestValidationError{ + err := DeleteCloudVPCRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteCloudVPCRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return DeleteCloudVPCRequestValidationError{ + err := DeleteCloudVPCRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetVpcID()); l < 2 || l > 100 { - return DeleteCloudVPCRequestValidationError{ + err := DeleteCloudVPCRequestValidationError{ field: "VpcID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteCloudVPCRequest_VpcID_Pattern.MatchString(m.GetVpcID()) { - return DeleteCloudVPCRequestValidationError{ + err := DeleteCloudVPCRequestValidationError{ field: "VpcID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DeleteCloudVPCRequestMultiError(errors) } return nil } +// DeleteCloudVPCRequestMultiError is an error wrapping multiple validation +// errors returned by DeleteCloudVPCRequest.ValidateAll() if the designated +// constraints aren't met. +type DeleteCloudVPCRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudVPCRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteCloudVPCRequestMultiError) AllErrors() []error { return m } + // DeleteCloudVPCRequestValidationError is the validation error returned by // DeleteCloudVPCRequest.Validate if the designated constraints aren't met. type DeleteCloudVPCRequestValidationError struct { @@ -4279,19 +6947,52 @@ var _DeleteCloudVPCRequest_VpcID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on DeleteCloudVPCResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudVPCResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudVPCResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteCloudVPCResponseMultiError, or nil if none found. +func (m *DeleteCloudVPCResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudVPCResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteCloudVPCResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteCloudVPCResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteCloudVPCResponseValidationError{ field: "Data", @@ -4301,9 +7002,30 @@ func (m *DeleteCloudVPCResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteCloudVPCResponseMultiError(errors) + } + return nil } +// DeleteCloudVPCResponseMultiError is an error wrapping multiple validation +// errors returned by DeleteCloudVPCResponse.ValidateAll() if the designated +// constraints aren't met. +type DeleteCloudVPCResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudVPCResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteCloudVPCResponseMultiError) AllErrors() []error { return m } + // DeleteCloudVPCResponseValidationError is the validation error returned by // DeleteCloudVPCResponse.Validate if the designated constraints aren't met. type DeleteCloudVPCResponseValidationError struct { @@ -4362,17 +7084,35 @@ var _ interface { // Validate checks the field values on ListCloudVPCRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudVPCRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudVPCRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudVPCRequestMultiError, or nil if none found. +func (m *ListCloudVPCRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudVPCRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) > 20 { - return ListCloudVPCRequestValidationError{ + err := ListCloudVPCRequestValidationError{ field: "CloudID", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -4380,17 +7120,42 @@ func (m *ListCloudVPCRequest) Validate() error { // no validation rules for VpcID if _, ok := _ListCloudVPCRequest_NetworkType_InLookup[m.GetNetworkType()]; !ok { - return ListCloudVPCRequestValidationError{ + err := ListCloudVPCRequestValidationError{ field: "NetworkType", reason: "value must be in list [overlay underlay]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for BusinessID + if len(errors) > 0 { + return ListCloudVPCRequestMultiError(errors) + } + return nil } +// ListCloudVPCRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudVPCRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudVPCRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudVPCRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudVPCRequestMultiError) AllErrors() []error { return m } + // ListCloudVPCRequestValidationError is the validation error returned by // ListCloudVPCRequest.Validate if the designated constraints aren't met. type ListCloudVPCRequestValidationError struct { @@ -4454,12 +7219,26 @@ var _ListCloudVPCRequest_NetworkType_InLookup = map[string]struct{}{ // Validate checks the field values on ListCloudVPCResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudVPCResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudVPCResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudVPCResponseMultiError, or nil if none found. +func (m *ListCloudVPCResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudVPCResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -4469,7 +7248,26 @@ func (m *ListCloudVPCResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudVPCResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudVPCResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudVPCResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -4481,9 +7279,30 @@ func (m *ListCloudVPCResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudVPCResponseMultiError(errors) + } + return nil } +// ListCloudVPCResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudVPCResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudVPCResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudVPCResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudVPCResponseMultiError) AllErrors() []error { return m } + // ListCloudVPCResponseValidationError is the validation error returned by // ListCloudVPCResponse.Validate if the designated constraints aren't met. type ListCloudVPCResponseValidationError struct { @@ -4541,13 +7360,27 @@ var _ interface { } = ListCloudVPCResponseValidationError{} // Validate checks the field values on CloudVPCResp with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudVPCResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudVPCResp with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudVPCRespMultiError, or +// nil if none found. +func (m *CloudVPCResp) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudVPCResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Region @@ -4568,9 +7401,29 @@ func (m *CloudVPCResp) Validate() error { // no validation rules for AvailableIPNum + if len(errors) > 0 { + return CloudVPCRespMultiError(errors) + } + return nil } +// CloudVPCRespMultiError is an error wrapping multiple validation errors +// returned by CloudVPCResp.ValidateAll() if the designated constraints aren't met. +type CloudVPCRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudVPCRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudVPCRespMultiError) AllErrors() []error { return m } + // CloudVPCRespValidationError is the validation error returned by // CloudVPCResp.Validate if the designated constraints aren't met. type CloudVPCRespValidationError struct { @@ -4627,22 +7480,61 @@ var _ interface { // Validate checks the field values on ListCloudRegionsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudRegionsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRegionsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudRegionsRequestMultiError, or nil if none found. +func (m *ListCloudRegionsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRegionsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) > 20 { - return ListCloudRegionsRequestValidationError{ + err := ListCloudRegionsRequestValidationError{ field: "CloudID", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListCloudRegionsRequestMultiError(errors) } return nil } +// ListCloudRegionsRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudRegionsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudRegionsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRegionsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudRegionsRequestMultiError) AllErrors() []error { return m } + // ListCloudRegionsRequestValidationError is the validation error returned by // ListCloudRegionsRequest.Validate if the designated constraints aren't met. type ListCloudRegionsRequestValidationError struct { @@ -4701,12 +7593,26 @@ var _ interface { // Validate checks the field values on ListCloudRegionsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudRegionsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRegionsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudRegionsResponseMultiError, or nil if none found. +func (m *ListCloudRegionsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRegionsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -4716,7 +7622,26 @@ func (m *ListCloudRegionsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudRegionsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudRegionsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudRegionsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -4728,9 +7653,30 @@ func (m *ListCloudRegionsResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudRegionsResponseMultiError(errors) + } + return nil } +// ListCloudRegionsResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudRegionsResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudRegionsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRegionsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudRegionsResponseMultiError) AllErrors() []error { return m } + // ListCloudRegionsResponseValidationError is the validation error returned by // ListCloudRegionsResponse.Validate if the designated constraints aren't met. type ListCloudRegionsResponseValidationError struct { @@ -4788,22 +7734,56 @@ var _ interface { } = ListCloudRegionsResponseValidationError{} // Validate checks the field values on CloudRegion with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudRegion) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudRegion with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudRegionMultiError, or +// nil if none found. +func (m *CloudRegion) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudRegion) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for RegionName // no validation rules for Region + if len(errors) > 0 { + return CloudRegionMultiError(errors) + } + return nil } +// CloudRegionMultiError is an error wrapping multiple validation errors +// returned by CloudRegion.ValidateAll() if the designated constraints aren't met. +type CloudRegionMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudRegionMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudRegionMultiError) AllErrors() []error { return m } + // CloudRegionValidationError is the validation error returned by // CloudRegion.Validate if the designated constraints aren't met. type CloudRegionValidationError struct { @@ -4859,18 +7839,53 @@ var _ interface { } = CloudRegionValidationError{} // Validate checks the field values on GetVPCCidrRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *GetVPCCidrRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetVPCCidrRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetVPCCidrRequestMultiError, or nil if none found. +func (m *GetVPCCidrRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetVPCCidrRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for VpcID + if len(errors) > 0 { + return GetVPCCidrRequestMultiError(errors) + } + return nil } +// GetVPCCidrRequestMultiError is an error wrapping multiple validation errors +// returned by GetVPCCidrRequest.ValidateAll() if the designated constraints +// aren't met. +type GetVPCCidrRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetVPCCidrRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetVPCCidrRequestMultiError) AllErrors() []error { return m } + // GetVPCCidrRequestValidationError is the validation error returned by // GetVPCCidrRequest.Validate if the designated constraints aren't met. type GetVPCCidrRequestValidationError struct { @@ -4929,12 +7944,26 @@ var _ interface { // Validate checks the field values on GetVPCCidrResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetVPCCidrResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetVPCCidrResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetVPCCidrResponseMultiError, or nil if none found. +func (m *GetVPCCidrResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetVPCCidrResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -4944,7 +7973,26 @@ func (m *GetVPCCidrResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetVPCCidrResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetVPCCidrResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetVPCCidrResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -4956,9 +8004,30 @@ func (m *GetVPCCidrResponse) Validate() error { } + if len(errors) > 0 { + return GetVPCCidrResponseMultiError(errors) + } + return nil } +// GetVPCCidrResponseMultiError is an error wrapping multiple validation errors +// returned by GetVPCCidrResponse.ValidateAll() if the designated constraints +// aren't met. +type GetVPCCidrResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetVPCCidrResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetVPCCidrResponseMultiError) AllErrors() []error { return m } + // GetVPCCidrResponseValidationError is the validation error returned by // GetVPCCidrResponse.Validate if the designated constraints aren't met. type GetVPCCidrResponseValidationError struct { @@ -5016,12 +8085,26 @@ var _ interface { } = GetVPCCidrResponseValidationError{} // Validate checks the field values on VPCCidr with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *VPCCidr) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on VPCCidr with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in VPCCidrMultiError, or nil if none found. +func (m *VPCCidr) ValidateAll() error { + return m.validate(true) +} + +func (m *VPCCidr) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Vpc // no validation rules for Cidr @@ -5030,9 +8113,29 @@ func (m *VPCCidr) Validate() error { // no validation rules for Status + if len(errors) > 0 { + return VPCCidrMultiError(errors) + } + return nil } +// VPCCidrMultiError is an error wrapping multiple validation errors returned +// by VPCCidr.ValidateAll() if the designated constraints aren't met. +type VPCCidrMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m VPCCidrMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m VPCCidrMultiError) AllErrors() []error { return m } + // VPCCidrValidationError is the validation error returned by VPCCidr.Validate // if the designated constraints aren't met. type VPCCidrValidationError struct { @@ -5088,53 +8191,144 @@ var _ interface { } = VPCCidrValidationError{} // Validate checks the field values on Cloud with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Cloud) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Cloud with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in CloudMultiError, or nil if none found. +func (m *Cloud) ValidateAll() error { + return m.validate(true) +} + +func (m *Cloud) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Name // no validation rules for Editable - for key, val := range m.GetOpsPlugins() { - _ = val - - // no validation rules for OpsPlugins[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CloudValidationError{ - field: fmt.Sprintf("OpsPlugins[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetOpsPlugins())) + i := 0 + for key := range m.GetOpsPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetOpsPlugins()[key] + _ = val + + // no validation rules for OpsPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CloudValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraPlugins() { - _ = val + { + sorted_keys := make([]string, len(m.GetExtraPlugins())) + i := 0 + for key := range m.GetExtraPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraPlugins()[key] + _ = val + + // no validation rules for ExtraPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CloudValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for ExtraPlugins[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudCredential()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "CloudCredential", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return CloudValidationError{ - field: fmt.Sprintf("ExtraPlugins[%v]", key), + errors = append(errors, CloudValidationError{ + field: "CloudCredential", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "CloudCredential", @@ -5144,7 +8338,26 @@ func (m *Cloud) Validate() error { } } - if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetOsManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "OsManagement", @@ -5154,7 +8367,26 @@ func (m *Cloud) Validate() error { } } - if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "ClusterManagement", @@ -5164,7 +8396,26 @@ func (m *Cloud) Validate() error { } } - if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeGroupManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "NodeGroupManagement", @@ -5192,7 +8443,26 @@ func (m *Cloud) Validate() error { // no validation rules for Enable - if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "NetworkInfo", @@ -5202,7 +8472,26 @@ func (m *Cloud) Validate() error { } } - if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetConfInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "ConfInfo", @@ -5214,9 +8503,29 @@ func (m *Cloud) Validate() error { // no validation rules for PlatformInfo + if len(errors) > 0 { + return CloudMultiError(errors) + } + return nil } +// CloudMultiError is an error wrapping multiple validation errors returned by +// Cloud.ValidateAll() if the designated constraints aren't met. +type CloudMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudMultiError) AllErrors() []error { return m } + // CloudValidationError is the validation error returned by Cloud.Validate if // the designated constraints aren't met. type CloudValidationError struct { @@ -5272,13 +8581,27 @@ var _ interface { } = CloudValidationError{} // Validate checks the field values on CloudConfigInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CloudConfigInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudConfigInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CloudConfigInfoMultiError, or nil if none found. +func (m *CloudConfigInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudConfigInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudInternalEnable // no validation rules for CloudDomain @@ -5293,9 +8616,30 @@ func (m *CloudConfigInfo) Validate() error { // no validation rules for VpcDomain + if len(errors) > 0 { + return CloudConfigInfoMultiError(errors) + } + return nil } +// CloudConfigInfoMultiError is an error wrapping multiple validation errors +// returned by CloudConfigInfo.ValidateAll() if the designated constraints +// aren't met. +type CloudConfigInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudConfigInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudConfigInfoMultiError) AllErrors() []error { return m } + // CloudConfigInfoValidationError is the validation error returned by // CloudConfigInfo.Validate if the designated constraints aren't met. type CloudConfigInfoValidationError struct { @@ -5351,16 +8695,51 @@ var _ interface { } = CloudConfigInfoValidationError{} // Validate checks the field values on CloudNetworkInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CloudNetworkInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudNetworkInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CloudNetworkInfoMultiError, or nil if none found. +func (m *CloudNetworkInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudNetworkInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return CloudNetworkInfoMultiError(errors) + } + return nil } +// CloudNetworkInfoMultiError is an error wrapping multiple validation errors +// returned by CloudNetworkInfo.ValidateAll() if the designated constraints +// aren't met. +type CloudNetworkInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudNetworkInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudNetworkInfoMultiError) AllErrors() []error { return m } + // CloudNetworkInfoValidationError is the validation error returned by // CloudNetworkInfo.Validate if the designated constraints aren't met. type CloudNetworkInfoValidationError struct { @@ -5416,42 +8795,88 @@ var _ interface { } = CloudNetworkInfoValidationError{} // Validate checks the field values on NodeGroup with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeGroup) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeGroup with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeGroupMultiError, or nil +// if none found. +func (m *NodeGroup) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeGroup) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeGroupID // no validation rules for Name if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return NodeGroupValidationError{ + err := NodeGroupValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return NodeGroupValidationError{ + err := NodeGroupValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_NodeGroup_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return NodeGroupValidationError{ + err := NodeGroupValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region // no validation rules for EnableAutoscale - if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAutoScaling()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupValidationError{ field: "AutoScaling", @@ -5461,7 +8886,26 @@ func (m *NodeGroup) Validate() error { } } - if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetLaunchTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupValidationError{ field: "LaunchTemplate", @@ -5490,22 +8934,49 @@ func (m *NodeGroup) Validate() error { // no validation rules for Provider if _, ok := _NodeGroup_Status_InLookup[m.GetStatus()]; !ok { - return NodeGroupValidationError{ + err := NodeGroupValidationError{ field: "Status", reason: "value must be in list [CREATING RUNNING DELETING FALURE INITIALIZATION DELETED]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ConsumerID if m.GetNodeTemplate() == nil { - return NodeGroupValidationError{ + err := NodeGroupValidationError{ field: "NodeTemplate", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupValidationError{ field: "NodeTemplate", @@ -5521,7 +8992,26 @@ func (m *NodeGroup) Validate() error { // no validation rules for NodeGroupType - if v, ok := interface{}(m.GetArea()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetArea()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "Area", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "Area", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetArea()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupValidationError{ field: "Area", @@ -5533,9 +9023,29 @@ func (m *NodeGroup) Validate() error { // no validation rules for ExtraInfo + if len(errors) > 0 { + return NodeGroupMultiError(errors) + } + return nil } +// NodeGroupMultiError is an error wrapping multiple validation errors returned +// by NodeGroup.ValidateAll() if the designated constraints aren't met. +type NodeGroupMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeGroupMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeGroupMultiError) AllErrors() []error { return m } + // NodeGroupValidationError is the validation error returned by // NodeGroup.Validate if the designated constraints aren't met. type NodeGroupValidationError struct { @@ -5602,19 +9112,54 @@ var _NodeGroup_Status_InLookup = map[string]struct{}{ } // Validate checks the field values on CloudArea with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudArea) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudArea with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudAreaMultiError, or nil +// if none found. +func (m *CloudArea) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudArea) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for BkCloudID // no validation rules for BkCloudName + if len(errors) > 0 { + return CloudAreaMultiError(errors) + } + return nil } +// CloudAreaMultiError is an error wrapping multiple validation errors returned +// by CloudArea.ValidateAll() if the designated constraints aren't met. +type CloudAreaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudAreaMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudAreaMultiError) AllErrors() []error { return m } + // CloudAreaValidationError is the validation error returned by // CloudArea.Validate if the designated constraints aren't met. type CloudAreaValidationError struct { @@ -5670,29 +9215,51 @@ var _ interface { } = CloudAreaValidationError{} // Validate checks the field values on AutoScalingGroup with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *AutoScalingGroup) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AutoScalingGroup with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// AutoScalingGroupMultiError, or nil if none found. +func (m *AutoScalingGroup) ValidateAll() error { + return m.validate(true) +} + +func (m *AutoScalingGroup) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for AutoScalingID // no validation rules for AutoScalingName if val := m.GetMinSize(); val < 0 || val > 1000 { - return AutoScalingGroupValidationError{ + err := AutoScalingGroupValidationError{ field: "MinSize", reason: "value must be inside range [0, 1000]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxSize(); val < 0 || val > 1000 { - return AutoScalingGroupValidationError{ + err := AutoScalingGroupValidationError{ field: "MaxSize", reason: "value must be inside range [0, 1000]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for DesiredSize @@ -5712,7 +9279,26 @@ func (m *AutoScalingGroup) Validate() error { for idx, item := range m.GetTimeRanges() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AutoScalingGroupValidationError{ + field: fmt.Sprintf("TimeRanges[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AutoScalingGroupValidationError{ + field: fmt.Sprintf("TimeRanges[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return AutoScalingGroupValidationError{ field: fmt.Sprintf("TimeRanges[%v]", idx), @@ -5726,9 +9312,30 @@ func (m *AutoScalingGroup) Validate() error { // no validation rules for AutoUpgrade + if len(errors) > 0 { + return AutoScalingGroupMultiError(errors) + } + return nil } +// AutoScalingGroupMultiError is an error wrapping multiple validation errors +// returned by AutoScalingGroup.ValidateAll() if the designated constraints +// aren't met. +type AutoScalingGroupMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AutoScalingGroupMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AutoScalingGroupMultiError) AllErrors() []error { return m } + // AutoScalingGroupValidationError is the validation error returned by // AutoScalingGroup.Validate if the designated constraints aren't met. type AutoScalingGroupValidationError struct { @@ -5784,33 +9391,76 @@ var _ interface { } = AutoScalingGroupValidationError{} // Validate checks the field values on TimeRange with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *TimeRange) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TimeRange with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in TimeRangeMultiError, or nil +// if none found. +func (m *TimeRange) ValidateAll() error { + return m.validate(true) +} + +func (m *TimeRange) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetName()); l < 2 || l > 1024 { - return TimeRangeValidationError{ + err := TimeRangeValidationError{ field: "Name", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetSchedule()); l < 2 || l > 1024 { - return TimeRangeValidationError{ + err := TimeRangeValidationError{ field: "Schedule", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Zone // no validation rules for DesiredNum + if len(errors) > 0 { + return TimeRangeMultiError(errors) + } + return nil } +// TimeRangeMultiError is an error wrapping multiple validation errors returned +// by TimeRange.ValidateAll() if the designated constraints aren't met. +type TimeRangeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TimeRangeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TimeRangeMultiError) AllErrors() []error { return m } + // TimeRangeValidationError is the validation error returned by // TimeRange.Validate if the designated constraints aren't met. type TimeRangeValidationError struct { @@ -5866,19 +9516,54 @@ var _ interface { } = TimeRangeValidationError{} // Validate checks the field values on DataDisk with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *DataDisk) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DataDisk with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in DataDiskMultiError, or nil +// if none found. +func (m *DataDisk) ValidateAll() error { + return m.validate(true) +} + +func (m *DataDisk) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for DiskType // no validation rules for DiskSize + if len(errors) > 0 { + return DataDiskMultiError(errors) + } + return nil } +// DataDiskMultiError is an error wrapping multiple validation errors returned +// by DataDisk.ValidateAll() if the designated constraints aren't met. +type DataDiskMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DataDiskMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DataDiskMultiError) AllErrors() []error { return m } + // DataDiskValidationError is the validation error returned by // DataDisk.Validate if the designated constraints aren't met. type DataDiskValidationError struct { @@ -5934,13 +9619,27 @@ var _ interface { } = DataDiskValidationError{} // Validate checks the field values on CloudDataDisk with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudDataDisk) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudDataDisk with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudDataDiskMultiError, or +// nil if none found. +func (m *CloudDataDisk) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudDataDisk) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for DiskType // no validation rules for DiskSize @@ -5953,9 +9652,30 @@ func (m *CloudDataDisk) Validate() error { // no validation rules for DiskPartition + if len(errors) > 0 { + return CloudDataDiskMultiError(errors) + } + return nil } +// CloudDataDiskMultiError is an error wrapping multiple validation errors +// returned by CloudDataDisk.ValidateAll() if the designated constraints +// aren't met. +type CloudDataDiskMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudDataDiskMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudDataDiskMultiError) AllErrors() []error { return m } + // CloudDataDiskValidationError is the validation error returned by // CloudDataDisk.Validate if the designated constraints aren't met. type CloudDataDiskValidationError struct { @@ -6012,12 +9732,26 @@ var _ interface { // Validate checks the field values on InternetAccessible with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *InternetAccessible) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InternetAccessible with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// InternetAccessibleMultiError, or nil if none found. +func (m *InternetAccessible) ValidateAll() error { + return m.validate(true) +} + +func (m *InternetAccessible) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for InternetChargeType // no validation rules for InternetMaxBandwidth @@ -6026,9 +9760,30 @@ func (m *InternetAccessible) Validate() error { // no validation rules for BandwidthPackageId + if len(errors) > 0 { + return InternetAccessibleMultiError(errors) + } + return nil } +// InternetAccessibleMultiError is an error wrapping multiple validation errors +// returned by InternetAccessible.ValidateAll() if the designated constraints +// aren't met. +type InternetAccessibleMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InternetAccessibleMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m InternetAccessibleMultiError) AllErrors() []error { return m } + // InternetAccessibleValidationError is the validation error returned by // InternetAccessible.Validate if the designated constraints aren't met. type InternetAccessibleValidationError struct { @@ -6087,12 +9842,26 @@ var _ interface { // Validate checks the field values on InstanceTemplateConfig with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *InstanceTemplateConfig) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InstanceTemplateConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// InstanceTemplateConfigMultiError, or nil if none found. +func (m *InstanceTemplateConfig) ValidateAll() error { + return m.validate(true) +} + +func (m *InstanceTemplateConfig) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Region // no validation rules for Zone @@ -6112,13 +9881,36 @@ func (m *InstanceTemplateConfig) Validate() error { // no validation rules for InstanceType if _, ok := _InstanceTemplateConfig_InstanceChargeType_InLookup[m.GetInstanceChargeType()]; !ok { - return InstanceTemplateConfigValidationError{ + err := InstanceTemplateConfigValidationError{ field: "InstanceChargeType", reason: "value must be in list [PREPAID POSTPAID_BY_HOUR SPOTPAID]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSystemDisk()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: "SystemDisk", @@ -6131,7 +9923,26 @@ func (m *InstanceTemplateConfig) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -6143,7 +9954,26 @@ func (m *InstanceTemplateConfig) Validate() error { } - if v, ok := interface{}(m.GetImageInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetImageInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "ImageInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "ImageInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetImageInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: "ImageInfo", @@ -6162,7 +9992,26 @@ func (m *InstanceTemplateConfig) Validate() error { for idx, item := range m.GetCloudDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: fmt.Sprintf("CloudDataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: fmt.Sprintf("CloudDataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: fmt.Sprintf("CloudDataDisks[%v]", idx), @@ -6176,7 +10025,26 @@ func (m *InstanceTemplateConfig) Validate() error { // no validation rules for InitLoginUsername - if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetKeyPair()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: "KeyPair", @@ -6190,7 +10058,26 @@ func (m *InstanceTemplateConfig) Validate() error { // no validation rules for NodeRole - if v, ok := interface{}(m.GetCharge()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCharge()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "Charge", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "Charge", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCharge()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: "Charge", @@ -6200,7 +10087,26 @@ func (m *InstanceTemplateConfig) Validate() error { } } - if v, ok := interface{}(m.GetInternetAccess()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetInternetAccess()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "InternetAccess", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "InternetAccess", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetInternetAccess()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: "InternetAccess", @@ -6210,9 +10116,30 @@ func (m *InstanceTemplateConfig) Validate() error { } } + if len(errors) > 0 { + return InstanceTemplateConfigMultiError(errors) + } + return nil } +// InstanceTemplateConfigMultiError is an error wrapping multiple validation +// errors returned by InstanceTemplateConfig.ValidateAll() if the designated +// constraints aren't met. +type InstanceTemplateConfigMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InstanceTemplateConfigMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m InstanceTemplateConfigMultiError) AllErrors() []error { return m } + // InstanceTemplateConfigValidationError is the validation error returned by // InstanceTemplateConfig.Validate if the designated constraints aren't met. type InstanceTemplateConfigValidationError struct { @@ -6277,19 +10204,54 @@ var _InstanceTemplateConfig_InstanceChargeType_InLookup = map[string]struct{}{ // Validate checks the field values on InstanceChargePrepaid with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *InstanceChargePrepaid) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InstanceChargePrepaid with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// InstanceChargePrepaidMultiError, or nil if none found. +func (m *InstanceChargePrepaid) ValidateAll() error { + return m.validate(true) +} + +func (m *InstanceChargePrepaid) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Period // no validation rules for RenewFlag + if len(errors) > 0 { + return InstanceChargePrepaidMultiError(errors) + } + return nil } +// InstanceChargePrepaidMultiError is an error wrapping multiple validation +// errors returned by InstanceChargePrepaid.ValidateAll() if the designated +// constraints aren't met. +type InstanceChargePrepaidMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InstanceChargePrepaidMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m InstanceChargePrepaidMultiError) AllErrors() []error { return m } + // InstanceChargePrepaidValidationError is the validation error returned by // InstanceChargePrepaid.Validate if the designated constraints aren't met. type InstanceChargePrepaidValidationError struct { @@ -6348,12 +10310,26 @@ var _ interface { // Validate checks the field values on LaunchConfiguration with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *LaunchConfiguration) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on LaunchConfiguration with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// LaunchConfigurationMultiError, or nil if none found. +func (m *LaunchConfiguration) ValidateAll() error { + return m.validate(true) +} + +func (m *LaunchConfiguration) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for LaunchConfigurationID // no validation rules for LaunchConfigureName @@ -6370,7 +10346,26 @@ func (m *LaunchConfiguration) Validate() error { // no validation rules for InstanceChargeType - if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSystemDisk()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return LaunchConfigurationValidationError{ field: "SystemDisk", @@ -6383,7 +10378,26 @@ func (m *LaunchConfiguration) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return LaunchConfigurationValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -6395,7 +10409,26 @@ func (m *LaunchConfiguration) Validate() error { } - if v, ok := interface{}(m.GetInternetAccess()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetInternetAccess()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "InternetAccess", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "InternetAccess", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetInternetAccess()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return LaunchConfigurationValidationError{ field: "InternetAccess", @@ -6407,7 +10440,26 @@ func (m *LaunchConfiguration) Validate() error { // no validation rules for InitLoginPassword - if v, ok := interface{}(m.GetImageInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetImageInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "ImageInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "ImageInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetImageInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return LaunchConfigurationValidationError{ field: "ImageInfo", @@ -6427,7 +10479,26 @@ func (m *LaunchConfiguration) Validate() error { // no validation rules for Selector - if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetKeyPair()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return LaunchConfigurationValidationError{ field: "KeyPair", @@ -6437,7 +10508,26 @@ func (m *LaunchConfiguration) Validate() error { } } - if v, ok := interface{}(m.GetCharge()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCharge()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "Charge", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "Charge", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCharge()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return LaunchConfigurationValidationError{ field: "Charge", @@ -6447,9 +10537,30 @@ func (m *LaunchConfiguration) Validate() error { } } + if len(errors) > 0 { + return LaunchConfigurationMultiError(errors) + } + return nil } +// LaunchConfigurationMultiError is an error wrapping multiple validation +// errors returned by LaunchConfiguration.ValidateAll() if the designated +// constraints aren't met. +type LaunchConfigurationMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m LaunchConfigurationMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m LaunchConfigurationMultiError) AllErrors() []error { return m } + // LaunchConfigurationValidationError is the validation error returned by // LaunchConfiguration.Validate if the designated constraints aren't met. type LaunchConfigurationValidationError struct { @@ -6507,21 +10618,55 @@ var _ interface { } = LaunchConfigurationValidationError{} // Validate checks the field values on KeyInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *KeyInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KeyInfo with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in KeyInfoMultiError, or nil if none found. +func (m *KeyInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *KeyInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for KeyID // no validation rules for KeySecret // no validation rules for KeyPublic + if len(errors) > 0 { + return KeyInfoMultiError(errors) + } + return nil } +// KeyInfoMultiError is an error wrapping multiple validation errors returned +// by KeyInfo.ValidateAll() if the designated constraints aren't met. +type KeyInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KeyInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m KeyInfoMultiError) AllErrors() []error { return m } + // KeyInfoValidationError is the validation error returned by KeyInfo.Validate // if the designated constraints aren't met. type KeyInfoValidationError struct { @@ -6577,21 +10722,56 @@ var _ interface { } = KeyInfoValidationError{} // Validate checks the field values on ImageInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ImageInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ImageInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ImageInfoMultiError, or nil +// if none found. +func (m *ImageInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ImageInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ImageID // no validation rules for ImageName // no validation rules for ImageType + if len(errors) > 0 { + return ImageInfoMultiError(errors) + } + return nil } +// ImageInfoMultiError is an error wrapping multiple validation errors returned +// by ImageInfo.ValidateAll() if the designated constraints aren't met. +type ImageInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ImageInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ImageInfoMultiError) AllErrors() []error { return m } + // ImageInfoValidationError is the validation error returned by // ImageInfo.Validate if the designated constraints aren't met. type ImageInfoValidationError struct { @@ -6648,12 +10828,26 @@ var _ interface { // Validate checks the field values on ClusterAutoScalingOption with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ClusterAutoScalingOption) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterAutoScalingOption with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ClusterAutoScalingOptionMultiError, or nil if none found. +func (m *ClusterAutoScalingOption) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterAutoScalingOption) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsScaleDownEnable // no validation rules for Expander @@ -6722,7 +10916,26 @@ func (m *ClusterAutoScalingOption) Validate() error { // no validation rules for BufferResourceMemRatio - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterAutoScalingOptionValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterAutoScalingOptionValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterAutoScalingOptionValidationError{ field: "Module", @@ -6732,7 +10945,26 @@ func (m *ClusterAutoScalingOption) Validate() error { } } - if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebhook()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterAutoScalingOptionValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterAutoScalingOptionValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterAutoScalingOptionValidationError{ field: "Webhook", @@ -6745,17 +10977,42 @@ func (m *ClusterAutoScalingOption) Validate() error { // no validation rules for ExpendablePodsPriorityCutoff if m.GetNewPodScaleUpDelay() < 0 { - return ClusterAutoScalingOptionValidationError{ + err := ClusterAutoScalingOptionValidationError{ field: "NewPodScaleUpDelay", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for DevicePoolProvider + if len(errors) > 0 { + return ClusterAutoScalingOptionMultiError(errors) + } + return nil } +// ClusterAutoScalingOptionMultiError is an error wrapping multiple validation +// errors returned by ClusterAutoScalingOption.ValidateAll() if the designated +// constraints aren't met. +type ClusterAutoScalingOptionMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterAutoScalingOptionMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterAutoScalingOptionMultiError) AllErrors() []error { return m } + // ClusterAutoScalingOptionValidationError is the validation error returned by // ClusterAutoScalingOption.Validate if the designated constraints aren't met. type ClusterAutoScalingOptionValidationError struct { @@ -6813,22 +11070,56 @@ var _ interface { } = ClusterAutoScalingOptionValidationError{} // Validate checks the field values on WebhookMode with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *WebhookMode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on WebhookMode with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in WebhookModeMultiError, or +// nil if none found. +func (m *WebhookMode) ValidateAll() error { + return m.validate(true) +} + +func (m *WebhookMode) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Mode // no validation rules for Server // no validation rules for Token + if len(errors) > 0 { + return WebhookModeMultiError(errors) + } + return nil } +// WebhookModeMultiError is an error wrapping multiple validation errors +// returned by WebhookMode.ValidateAll() if the designated constraints aren't met. +type WebhookModeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m WebhookModeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m WebhookModeMultiError) AllErrors() []error { return m } + // WebhookModeValidationError is the validation error returned by // WebhookMode.Validate if the designated constraints aren't met. type WebhookModeValidationError struct { @@ -6884,21 +11175,55 @@ var _ interface { } = WebhookModeValidationError{} // Validate checks the field values on Taint with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Taint) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Taint with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in TaintMultiError, or nil if none found. +func (m *Taint) ValidateAll() error { + return m.validate(true) +} + +func (m *Taint) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Key // no validation rules for Value // no validation rules for Effect + if len(errors) > 0 { + return TaintMultiError(errors) + } + return nil } +// TaintMultiError is an error wrapping multiple validation errors returned by +// Taint.ValidateAll() if the designated constraints aren't met. +type TaintMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TaintMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TaintMultiError) AllErrors() []error { return m } + // TaintValidationError is the validation error returned by Taint.Validate if // the designated constraints aren't met. type TaintValidationError struct { @@ -6954,13 +11279,27 @@ var _ interface { } = TaintValidationError{} // Validate checks the field values on NodeTemplate with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeTemplate) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeTemplate with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeTemplateMultiError, or +// nil if none found. +func (m *NodeTemplate) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeTemplate) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeTemplateID // no validation rules for Name @@ -6972,7 +11311,26 @@ func (m *NodeTemplate) Validate() error { for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -6995,7 +11353,26 @@ func (m *NodeTemplate) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -7011,7 +11388,26 @@ func (m *NodeTemplate) Validate() error { // no validation rules for PreStartUserScript - if v, ok := interface{}(m.GetBcsScaleOutAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetBcsScaleOutAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "BcsScaleOutAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "BcsScaleOutAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetBcsScaleOutAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "BcsScaleOutAddons", @@ -7021,7 +11417,26 @@ func (m *NodeTemplate) Validate() error { } } - if v, ok := interface{}(m.GetBcsScaleInAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetBcsScaleInAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "BcsScaleInAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "BcsScaleInAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetBcsScaleInAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "BcsScaleInAddons", @@ -7031,7 +11446,26 @@ func (m *NodeTemplate) Validate() error { } } - if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleOutExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "ScaleOutExtraAddons", @@ -7041,7 +11475,26 @@ func (m *NodeTemplate) Validate() error { } } - if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "ScaleInExtraAddons", @@ -7063,7 +11516,26 @@ func (m *NodeTemplate) Validate() error { // no validation rules for Desc - if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRuntime()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "Runtime", @@ -7073,7 +11545,26 @@ func (m *NodeTemplate) Validate() error { } } - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "Module", @@ -7097,9 +11588,29 @@ func (m *NodeTemplate) Validate() error { // no validation rules for AllowSkipScaleInWhenFailed + if len(errors) > 0 { + return NodeTemplateMultiError(errors) + } + return nil } +// NodeTemplateMultiError is an error wrapping multiple validation errors +// returned by NodeTemplate.ValidateAll() if the designated constraints aren't met. +type NodeTemplateMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeTemplateMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeTemplateMultiError) AllErrors() []error { return m } + // NodeTemplateValidationError is the validation error returned by // NodeTemplate.Validate if the designated constraints aren't met. type NodeTemplateValidationError struct { @@ -7155,13 +11666,27 @@ var _ interface { } = NodeTemplateValidationError{} // Validate checks the field values on ClusterModule with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ClusterModule) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterModule with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ClusterModuleMultiError, or +// nil if none found. +func (m *ClusterModule) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterModule) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for MasterModuleID // no validation rules for MasterModuleName @@ -7170,9 +11695,30 @@ func (m *ClusterModule) Validate() error { // no validation rules for WorkerModuleName + if len(errors) > 0 { + return ClusterModuleMultiError(errors) + } + return nil } +// ClusterModuleMultiError is an error wrapping multiple validation errors +// returned by ClusterModule.ValidateAll() if the designated constraints +// aren't met. +type ClusterModuleMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterModuleMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterModuleMultiError) AllErrors() []error { return m } + // ClusterModuleValidationError is the validation error returned by // ClusterModule.Validate if the designated constraints aren't met. type ClusterModuleValidationError struct { @@ -7228,12 +11774,27 @@ var _ interface { } = ClusterModuleValidationError{} // Validate checks the field values on ModuleInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ModuleInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ModuleInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ModuleInfoMultiError, or +// nil if none found. +func (m *ModuleInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ModuleInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScaleOutModuleID // no validation rules for ScaleInModuleID @@ -7246,9 +11807,29 @@ func (m *ModuleInfo) Validate() error { // no validation rules for ScaleInModuleName + if len(errors) > 0 { + return ModuleInfoMultiError(errors) + } + return nil } +// ModuleInfoMultiError is an error wrapping multiple validation errors +// returned by ModuleInfo.ValidateAll() if the designated constraints aren't met. +type ModuleInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ModuleInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ModuleInfoMultiError) AllErrors() []error { return m } + // ModuleInfoValidationError is the validation error returned by // ModuleInfo.Validate if the designated constraints aren't met. type ModuleInfoValidationError struct { @@ -7304,20 +11885,54 @@ var _ interface { } = ModuleInfoValidationError{} // Validate checks the field values on RunTimeInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *RunTimeInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RunTimeInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in RunTimeInfoMultiError, or +// nil if none found. +func (m *RunTimeInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *RunTimeInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ContainerRuntime // no validation rules for RuntimeVersion + if len(errors) > 0 { + return RunTimeInfoMultiError(errors) + } + return nil } +// RunTimeInfoMultiError is an error wrapping multiple validation errors +// returned by RunTimeInfo.ValidateAll() if the designated constraints aren't met. +type RunTimeInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RunTimeInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RunTimeInfoMultiError) AllErrors() []error { return m } + // RunTimeInfoValidationError is the validation error returned by // RunTimeInfo.Validate if the designated constraints aren't met. type RunTimeInfoValidationError struct { @@ -7374,31 +11989,57 @@ var _ interface { // Validate checks the field values on CreateNodeTemplateRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNodeTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNodeTemplateRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateNodeTemplateRequestMultiError, or nil if none found. +func (m *CreateNodeTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNodeTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetProjectID()); l < 1 || l > 2048 { - return CreateNodeTemplateRequestValidationError{ + err := CreateNodeTemplateRequestValidationError{ field: "ProjectID", reason: "value length must be between 1 and 2048 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateNodeTemplateRequest_ProjectID_Pattern.MatchString(m.GetProjectID()) { - return CreateNodeTemplateRequestValidationError{ + err := CreateNodeTemplateRequestValidationError{ field: "ProjectID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetName()) < 1 { - return CreateNodeTemplateRequestValidationError{ + err := CreateNodeTemplateRequestValidationError{ field: "Name", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Desc @@ -7408,7 +12049,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -7431,7 +12091,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -7447,7 +12126,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { // no validation rules for PreStartUserScript - if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleOutExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "ScaleOutExtraAddons", @@ -7457,7 +12155,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "ScaleInExtraAddons", @@ -7470,13 +12187,36 @@ func (m *CreateNodeTemplateRequest) Validate() error { // no validation rules for NodeOS if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 1024 { - return CreateNodeTemplateRequestValidationError{ + err := CreateNodeTemplateRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRuntime()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "Runtime", @@ -7486,7 +12226,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "Module", @@ -7496,7 +12255,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInPreScript()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInPreScript()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInPreScript", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInPreScript", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInPreScript()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "ScaleInPreScript", @@ -7506,7 +12284,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInPostScript()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInPostScript()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInPostScript", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInPostScript", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInPostScript()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "ScaleInPostScript", @@ -7516,7 +12313,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Annotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Annotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "Annotations", @@ -7526,9 +12342,30 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } + if len(errors) > 0 { + return CreateNodeTemplateRequestMultiError(errors) + } + return nil } +// CreateNodeTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by CreateNodeTemplateRequest.ValidateAll() if the +// designated constraints aren't met. +type CreateNodeTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNodeTemplateRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateNodeTemplateRequestMultiError) AllErrors() []error { return m } + // CreateNodeTemplateRequestValidationError is the validation error returned by // CreateNodeTemplateRequest.Validate if the designated constraints aren't met. type CreateNodeTemplateRequestValidationError struct { @@ -7589,19 +12426,52 @@ var _CreateNodeTemplateRequest_ProjectID_Pattern = regexp.MustCompile("^[0-9a-zA // Validate checks the field values on CreateNodeTemplateResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNodeTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNodeTemplateResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateNodeTemplateResponseMultiError, or nil if none found. +func (m *CreateNodeTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNodeTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateResponseValidationError{ field: "WebAnnotations", @@ -7611,9 +12481,30 @@ func (m *CreateNodeTemplateResponse) Validate() error { } } + if len(errors) > 0 { + return CreateNodeTemplateResponseMultiError(errors) + } + return nil } +// CreateNodeTemplateResponseMultiError is an error wrapping multiple +// validation errors returned by CreateNodeTemplateResponse.ValidateAll() if +// the designated constraints aren't met. +type CreateNodeTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNodeTemplateResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateNodeTemplateResponseMultiError) AllErrors() []error { return m } + // CreateNodeTemplateResponseValidationError is the validation error returned // by CreateNodeTemplateResponse.Validate if the designated constraints aren't met. type CreateNodeTemplateResponseValidationError struct { @@ -7672,12 +12563,26 @@ var _ interface { // Validate checks the field values on UpdateNodeTemplateRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeTemplateRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeTemplateRequestMultiError, or nil if none found. +func (m *UpdateNodeTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for NodeTemplateID @@ -7691,7 +12596,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -7709,7 +12633,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { // no validation rules for UserScript - if v, ok := interface{}(m.GetUnSchedulable()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetUnSchedulable()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "UnSchedulable", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "UnSchedulable", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUnSchedulable()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "UnSchedulable", @@ -7722,7 +12665,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -7738,7 +12700,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { // no validation rules for PreStartUserScript - if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleOutExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "ScaleOutExtraAddons", @@ -7748,7 +12729,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "ScaleInExtraAddons", @@ -7761,13 +12761,36 @@ func (m *UpdateNodeTemplateRequest) Validate() error { // no validation rules for NodeOS if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 1024 { - return UpdateNodeTemplateRequestValidationError{ + err := UpdateNodeTemplateRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRuntime()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "Runtime", @@ -7777,7 +12800,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "Module", @@ -7787,7 +12829,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInPreScript()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInPreScript()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInPreScript", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInPreScript", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInPreScript()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "ScaleInPreScript", @@ -7797,7 +12858,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInPostScript()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInPostScript()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInPostScript", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInPostScript", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInPostScript()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "ScaleInPostScript", @@ -7807,7 +12887,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Annotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Annotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "Annotations", @@ -7817,9 +12916,30 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeTemplateRequestMultiError(errors) + } + return nil } +// UpdateNodeTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeTemplateRequest.ValidateAll() if the +// designated constraints aren't met. +type UpdateNodeTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeTemplateRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeTemplateRequestMultiError) AllErrors() []error { return m } + // UpdateNodeTemplateRequestValidationError is the validation error returned by // UpdateNodeTemplateRequest.Validate if the designated constraints aren't met. type UpdateNodeTemplateRequestValidationError struct { @@ -7878,19 +12998,52 @@ var _ interface { // Validate checks the field values on UpdateNodeTemplateResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeTemplateResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeTemplateResponseMultiError, or nil if none found. +func (m *UpdateNodeTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateResponseValidationError{ field: "WebAnnotations", @@ -7900,9 +13053,30 @@ func (m *UpdateNodeTemplateResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeTemplateResponseMultiError(errors) + } + return nil } +// UpdateNodeTemplateResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateNodeTemplateResponse.ValidateAll() if +// the designated constraints aren't met. +type UpdateNodeTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeTemplateResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeTemplateResponseMultiError) AllErrors() []error { return m } + // UpdateNodeTemplateResponseValidationError is the validation error returned // by UpdateNodeTemplateResponse.Validate if the designated constraints aren't met. type UpdateNodeTemplateResponseValidationError struct { @@ -7961,19 +13135,54 @@ var _ interface { // Validate checks the field values on DeleteNodeTemplateRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodeTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodeTemplateRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteNodeTemplateRequestMultiError, or nil if none found. +func (m *DeleteNodeTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodeTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for NodeTemplateID + if len(errors) > 0 { + return DeleteNodeTemplateRequestMultiError(errors) + } + return nil } +// DeleteNodeTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by DeleteNodeTemplateRequest.ValidateAll() if the +// designated constraints aren't met. +type DeleteNodeTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodeTemplateRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteNodeTemplateRequestMultiError) AllErrors() []error { return m } + // DeleteNodeTemplateRequestValidationError is the validation error returned by // DeleteNodeTemplateRequest.Validate if the designated constraints aren't met. type DeleteNodeTemplateRequestValidationError struct { @@ -8032,19 +13241,52 @@ var _ interface { // Validate checks the field values on DeleteNodeTemplateResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodeTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodeTemplateResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteNodeTemplateResponseMultiError, or nil if none found. +func (m *DeleteNodeTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodeTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodeTemplateResponseValidationError{ field: "WebAnnotations", @@ -8054,9 +13296,30 @@ func (m *DeleteNodeTemplateResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteNodeTemplateResponseMultiError(errors) + } + return nil } +// DeleteNodeTemplateResponseMultiError is an error wrapping multiple +// validation errors returned by DeleteNodeTemplateResponse.ValidateAll() if +// the designated constraints aren't met. +type DeleteNodeTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodeTemplateResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteNodeTemplateResponseMultiError) AllErrors() []error { return m } + // DeleteNodeTemplateResponseValidationError is the validation error returned // by DeleteNodeTemplateResponse.Validate if the designated constraints aren't met. type DeleteNodeTemplateResponseValidationError struct { @@ -8115,19 +13378,54 @@ var _ interface { // Validate checks the field values on GetNodeTemplateRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeTemplateRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetNodeTemplateRequestMultiError, or nil if none found. +func (m *GetNodeTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for NodeTemplateID + if len(errors) > 0 { + return GetNodeTemplateRequestMultiError(errors) + } + return nil } +// GetNodeTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by GetNodeTemplateRequest.ValidateAll() if the designated +// constraints aren't met. +type GetNodeTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeTemplateRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetNodeTemplateRequestMultiError) AllErrors() []error { return m } + // GetNodeTemplateRequestValidationError is the validation error returned by // GetNodeTemplateRequest.Validate if the designated constraints aren't met. type GetNodeTemplateRequestValidationError struct { @@ -8186,19 +13484,52 @@ var _ interface { // Validate checks the field values on GetNodeTemplateResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeTemplateResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetNodeTemplateResponseMultiError, or nil if none found. +func (m *GetNodeTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeTemplateResponseValidationError{ field: "Data", @@ -8208,7 +13539,26 @@ func (m *GetNodeTemplateResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeTemplateResponseValidationError{ field: "WebAnnotations", @@ -8218,9 +13568,30 @@ func (m *GetNodeTemplateResponse) Validate() error { } } + if len(errors) > 0 { + return GetNodeTemplateResponseMultiError(errors) + } + return nil } +// GetNodeTemplateResponseMultiError is an error wrapping multiple validation +// errors returned by GetNodeTemplateResponse.ValidateAll() if the designated +// constraints aren't met. +type GetNodeTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeTemplateResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetNodeTemplateResponseMultiError) AllErrors() []error { return m } + // GetNodeTemplateResponseValidationError is the validation error returned by // GetNodeTemplateResponse.Validate if the designated constraints aren't met. type GetNodeTemplateResponseValidationError struct { @@ -8279,19 +13650,54 @@ var _ interface { // Validate checks the field values on ListNodeTemplateRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodeTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodeTemplateRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodeTemplateRequestMultiError, or nil if none found. +func (m *ListNodeTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodeTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for NodeTemplateID + if len(errors) > 0 { + return ListNodeTemplateRequestMultiError(errors) + } + return nil } +// ListNodeTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by ListNodeTemplateRequest.ValidateAll() if the designated +// constraints aren't met. +type ListNodeTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodeTemplateRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodeTemplateRequestMultiError) AllErrors() []error { return m } + // ListNodeTemplateRequestValidationError is the validation error returned by // ListNodeTemplateRequest.Validate if the designated constraints aren't met. type ListNodeTemplateRequestValidationError struct { @@ -8350,12 +13756,26 @@ var _ interface { // Validate checks the field values on ListNodeTemplateResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodeTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodeTemplateResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodeTemplateResponseMultiError, or nil if none found. +func (m *ListNodeTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodeTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -8365,7 +13785,26 @@ func (m *ListNodeTemplateResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodeTemplateResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodeTemplateResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodeTemplateResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -8377,9 +13816,30 @@ func (m *ListNodeTemplateResponse) Validate() error { } + if len(errors) > 0 { + return ListNodeTemplateResponseMultiError(errors) + } + return nil } +// ListNodeTemplateResponseMultiError is an error wrapping multiple validation +// errors returned by ListNodeTemplateResponse.ValidateAll() if the designated +// constraints aren't met. +type ListNodeTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodeTemplateResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodeTemplateResponseMultiError) AllErrors() []error { return m } + // ListNodeTemplateResponseValidationError is the validation error returned by // ListNodeTemplateResponse.Validate if the designated constraints aren't met. type ListNodeTemplateResponseValidationError struct { @@ -8437,12 +13897,26 @@ var _ interface { } = ListNodeTemplateResponseValidationError{} // Validate checks the field values on Project with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Project) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Project with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in ProjectMultiError, or nil if none found. +func (m *Project) ValidateAll() error { + return m.validate(true) +} + +func (m *Project) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for Name @@ -8481,30 +13955,79 @@ func (m *Project) Validate() error { // no validation rules for IsSecret - for key, val := range m.GetCredentials() { - _ = val - - // no validation rules for Credentials[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ProjectValidationError{ - field: fmt.Sprintf("Credentials[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetCredentials())) + i := 0 + for key := range m.GetCredentials() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetCredentials()[key] + _ = val + + // no validation rules for Credentials[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ProjectValidationError{ + field: fmt.Sprintf("Credentials[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ProjectValidationError{ + field: fmt.Sprintf("Credentials[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ProjectValidationError{ + field: fmt.Sprintf("Credentials[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } // no validation rules for CreatTime // no validation rules for UpdateTime + if len(errors) > 0 { + return ProjectMultiError(errors) + } + return nil } +// ProjectMultiError is an error wrapping multiple validation errors returned +// by Project.ValidateAll() if the designated constraints aren't met. +type ProjectMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ProjectMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ProjectMultiError) AllErrors() []error { return m } + // ProjectValidationError is the validation error returned by Project.Validate // if the designated constraints aren't met. type ProjectValidationError struct { @@ -8560,21 +14083,39 @@ var _ interface { } = ProjectValidationError{} // Validate checks the field values on Task with the rules defined in the proto -// definition for this message. If any rules are violated, an error is returned. +// definition for this message. If any rules are violated, the first error +// encountered is returned, or nil if there are no violations. func (m *Task) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Task with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in TaskMultiError, or nil if none found. +func (m *Task) ValidateAll() error { + return m.validate(true) +} + +func (m *Task) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for TaskID // no validation rules for TaskType if _, ok := _Task_Status_InLookup[m.GetStatus()]; !ok { - return TaskValidationError{ + err := TaskValidationError{ field: "Status", reason: "value must be in list [INITIALIZING RUNNING SUCCESS FAILURE TIMEOUT FORCETERMINATE]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Message @@ -8587,21 +14128,50 @@ func (m *Task) Validate() error { // no validation rules for CurrentStep - for key, val := range m.GetSteps() { - _ = val - - // no validation rules for Steps[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TaskValidationError{ - field: fmt.Sprintf("Steps[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetSteps())) + i := 0 + for key := range m.GetSteps() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetSteps()[key] + _ = val + + // no validation rules for Steps[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, TaskValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, TaskValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TaskValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } // no validation rules for ClusterID @@ -8622,9 +14192,29 @@ func (m *Task) Validate() error { // no validation rules for NodeGroupID + if len(errors) > 0 { + return TaskMultiError(errors) + } + return nil } +// TaskMultiError is an error wrapping multiple validation errors returned by +// Task.ValidateAll() if the designated constraints aren't met. +type TaskMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TaskMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TaskMultiError) AllErrors() []error { return m } + // TaskValidationError is the validation error returned by Task.Validate if the // designated constraints aren't met. type TaskValidationError struct { @@ -8689,12 +14279,26 @@ var _Task_Status_InLookup = map[string]struct{}{ } // Validate checks the field values on Step with the rules defined in the proto -// definition for this message. If any rules are violated, an error is returned. +// definition for this message. If any rules are violated, the first error +// encountered is returned, or nil if there are no violations. func (m *Step) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Step with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in StepMultiError, or nil if none found. +func (m *Step) ValidateAll() error { + return m.validate(true) +} + +func (m *Step) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for System @@ -8712,10 +14316,14 @@ func (m *Step) Validate() error { // no validation rules for ExecutionTime if _, ok := _Step_Status_InLookup[m.GetStatus()]; !ok { - return StepValidationError{ + err := StepValidationError{ field: "Status", reason: "value must be in list [NOTSTARTED RUNNING SUCCESS FAILURE TIMEOUT FORCETERMINATE]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Message @@ -8732,9 +14340,29 @@ func (m *Step) Validate() error { // no validation rules for AllowSkip + if len(errors) > 0 { + return StepMultiError(errors) + } + return nil } +// StepMultiError is an error wrapping multiple validation errors returned by +// Step.ValidateAll() if the designated constraints aren't met. +type StepMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m StepMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m StepMultiError) AllErrors() []error { return m } + // StepValidationError is the validation error returned by Step.Validate if the // designated constraints aren't met. type StepValidationError struct { @@ -8799,12 +14427,26 @@ var _Step_Status_InLookup = map[string]struct{}{ } // Validate checks the field values on TkeCidr with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *TkeCidr) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TkeCidr with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in TkeCidrMultiError, or nil if none found. +func (m *TkeCidr) ValidateAll() error { + return m.validate(true) +} + +func (m *TkeCidr) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for VPC // no validation rules for CIDR @@ -8819,9 +14461,29 @@ func (m *TkeCidr) Validate() error { // no validation rules for UpdateTime + if len(errors) > 0 { + return TkeCidrMultiError(errors) + } + return nil } +// TkeCidrMultiError is an error wrapping multiple validation errors returned +// by TkeCidr.ValidateAll() if the designated constraints aren't met. +type TkeCidrMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TkeCidrMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TkeCidrMultiError) AllErrors() []error { return m } + // TkeCidrValidationError is the validation error returned by TkeCidr.Validate // if the designated constraints aren't met. type TkeCidrValidationError struct { @@ -8877,13 +14539,27 @@ var _ interface { } = TkeCidrValidationError{} // Validate checks the field values on TkeCidrCount with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *TkeCidrCount) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TkeCidrCount with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in TkeCidrCountMultiError, or +// nil if none found. +func (m *TkeCidrCount) ValidateAll() error { + return m.validate(true) +} + +func (m *TkeCidrCount) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Count // no validation rules for VPC @@ -8892,9 +14568,29 @@ func (m *TkeCidrCount) Validate() error { // no validation rules for Status + if len(errors) > 0 { + return TkeCidrCountMultiError(errors) + } + return nil } +// TkeCidrCountMultiError is an error wrapping multiple validation errors +// returned by TkeCidrCount.ValidateAll() if the designated constraints aren't met. +type TkeCidrCountMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TkeCidrCountMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TkeCidrCountMultiError) AllErrors() []error { return m } + // TkeCidrCountValidationError is the validation error returned by // TkeCidrCount.Validate if the designated constraints aren't met. type TkeCidrCountValidationError struct { @@ -8950,151 +14646,279 @@ var _ interface { } = TkeCidrCountValidationError{} // Validate checks the field values on CreateClusterReq with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CreateClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateClusterReqMultiError, or nil if none found. +func (m *CreateClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID if l := utf8.RuneCountInString(m.GetClusterName()); l < 1 || l > 1024 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "ClusterName", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProvider()) > 32 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Provider", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetRegion()); l < 1 || l > 100 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Region", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateClusterReq_Region_Pattern.MatchString(m.GetRegion()) { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetVpcID()) > 32 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "VpcID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 100 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "ProjectID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateClusterReq_ProjectID_Pattern.MatchString(m.GetProjectID()) { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "ProjectID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetBusinessID()) > 100 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "BusinessID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateClusterReq_BusinessID_Pattern.MatchString(m.GetBusinessID()) { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "BusinessID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateClusterReq_Environment_InLookup[m.GetEnvironment()]; !ok { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Environment", reason: "value must be in list [stag debug prod]", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateClusterReq_EngineType_InLookup[m.GetEngineType()]; !ok { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "EngineType", reason: "value must be in list [k8s mesos]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsExclusive if _, ok := _CreateClusterReq_ClusterType_InLookup[m.GetClusterType()]; !ok { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "ClusterType", reason: "value must be in list [federation single]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for FederationClusterID if len(m.GetLabels()) > 20 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Labels", reason: "value must contain no more than 20 pair(s)", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for OnlyCreateInfo - for key, val := range m.GetBcsAddons() { - _ = val - - // no validation rules for BcsAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CreateClusterReqValidationError{ - field: fmt.Sprintf("BcsAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetBcsAddons())) + i := 0 + for key := range m.GetBcsAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetBcsAddons()[key] + _ = val + + // no validation rules for BcsAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraAddons() { - _ = val - - // no validation rules for ExtraAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CreateClusterReqValidationError{ - field: fmt.Sprintf("ExtraAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetExtraAddons())) + i := 0 + for key := range m.GetExtraAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraAddons()[key] + _ = val + + // no validation rules for ExtraAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } // no validation rules for CloudID @@ -9102,10 +14926,14 @@ func (m *CreateClusterReq) Validate() error { // no validation rules for ManageType if m.GetNetworkSettings() == nil { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "NetworkSettings", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } if a := m.GetNetworkSettings(); a != nil { @@ -9113,17 +14941,40 @@ func (m *CreateClusterReq) Validate() error { } if m.GetClusterBasicSettings() == nil { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "ClusterBasicSettings", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } if a := m.GetClusterBasicSettings(); a != nil { } - if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterAdvanceSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterReqValidationError{ field: "ClusterAdvanceSettings", @@ -9133,7 +14984,26 @@ func (m *CreateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterReqValidationError{ field: "NodeSettings", @@ -9154,7 +15024,26 @@ func (m *CreateClusterReq) Validate() error { for idx, item := range m.GetInstances() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("Instances[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("Instances[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterReqValidationError{ field: fmt.Sprintf("Instances[%v]", idx), @@ -9184,9 +15073,30 @@ func (m *CreateClusterReq) Validate() error { // no validation rules for NodeTemplateID + if len(errors) > 0 { + return CreateClusterReqMultiError(errors) + } + return nil } +// CreateClusterReqMultiError is an error wrapping multiple validation errors +// returned by CreateClusterReq.ValidateAll() if the designated constraints +// aren't met. +type CreateClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateClusterReqMultiError) AllErrors() []error { return m } + // CreateClusterReqValidationError is the validation error returned by // CreateClusterReq.Validate if the designated constraints aren't met. type CreateClusterReqValidationError struct { @@ -9264,20 +15174,53 @@ var _CreateClusterReq_ClusterType_InLookup = map[string]struct{}{ } // Validate checks the field values on CreateClusterResp with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CreateClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateClusterRespMultiError, or nil if none found. +func (m *CreateClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterRespValidationError{ field: "Data", @@ -9287,7 +15230,26 @@ func (m *CreateClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterRespValidationError{ field: "Task", @@ -9297,7 +15259,26 @@ func (m *CreateClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterRespValidationError{ field: "WebAnnotations", @@ -9307,9 +15288,30 @@ func (m *CreateClusterResp) Validate() error { } } + if len(errors) > 0 { + return CreateClusterRespMultiError(errors) + } + return nil } +// CreateClusterRespMultiError is an error wrapping multiple validation errors +// returned by CreateClusterResp.ValidateAll() if the designated constraints +// aren't met. +type CreateClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateClusterRespMultiError) AllErrors() []error { return m } + // CreateClusterRespValidationError is the validation error returned by // CreateClusterResp.Validate if the designated constraints aren't met. type CreateClusterRespValidationError struct { @@ -9368,34 +15370,79 @@ var _ interface { // Validate checks the field values on AddSubnetToClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *AddSubnetToClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AddSubnetToClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// AddSubnetToClusterReqMultiError, or nil if none found. +func (m *AddSubnetToClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *AddSubnetToClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return AddSubnetToClusterReqValidationError{ + err := AddSubnetToClusterReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return AddSubnetToClusterReqValidationError{ + err := AddSubnetToClusterReqValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_AddSubnetToClusterReq_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return AddSubnetToClusterReqValidationError{ + err := AddSubnetToClusterReqValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetSubnet()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSubnet()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddSubnetToClusterReqValidationError{ + field: "Subnet", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddSubnetToClusterReqValidationError{ + field: "Subnet", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSubnet()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return AddSubnetToClusterReqValidationError{ field: "Subnet", @@ -9407,9 +15454,30 @@ func (m *AddSubnetToClusterReq) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return AddSubnetToClusterReqMultiError(errors) + } + return nil } +// AddSubnetToClusterReqMultiError is an error wrapping multiple validation +// errors returned by AddSubnetToClusterReq.ValidateAll() if the designated +// constraints aren't met. +type AddSubnetToClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AddSubnetToClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AddSubnetToClusterReqMultiError) AllErrors() []error { return m } + // AddSubnetToClusterReqValidationError is the validation error returned by // AddSubnetToClusterReq.Validate if the designated constraints aren't met. type AddSubnetToClusterReqValidationError struct { @@ -9470,19 +15538,52 @@ var _AddSubnetToClusterReq_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-] // Validate checks the field values on AddSubnetToClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *AddSubnetToClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AddSubnetToClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// AddSubnetToClusterRespMultiError, or nil if none found. +func (m *AddSubnetToClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *AddSubnetToClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddSubnetToClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddSubnetToClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return AddSubnetToClusterRespValidationError{ field: "WebAnnotations", @@ -9492,9 +15593,30 @@ func (m *AddSubnetToClusterResp) Validate() error { } } + if len(errors) > 0 { + return AddSubnetToClusterRespMultiError(errors) + } + return nil } +// AddSubnetToClusterRespMultiError is an error wrapping multiple validation +// errors returned by AddSubnetToClusterResp.ValidateAll() if the designated +// constraints aren't met. +type AddSubnetToClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AddSubnetToClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AddSubnetToClusterRespMultiError) AllErrors() []error { return m } + // AddSubnetToClusterRespValidationError is the validation error returned by // AddSubnetToClusterResp.Validate if the designated constraints aren't met. type AddSubnetToClusterRespValidationError struct { @@ -9553,126 +15675,219 @@ var _ interface { // Validate checks the field values on CreateVirtualClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateVirtualClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateVirtualClusterReq with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateVirtualClusterReqMultiError, or nil if none found. +func (m *CreateVirtualClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateVirtualClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID if l := utf8.RuneCountInString(m.GetClusterName()); l < 1 || l > 1024 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "ClusterName", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProvider()) > 32 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Provider", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetRegion()); l < 1 || l > 100 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Region", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateVirtualClusterReq_Region_Pattern.MatchString(m.GetRegion()) { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetVpcID()) > 32 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "VpcID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 100 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "ProjectID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateVirtualClusterReq_ProjectID_Pattern.MatchString(m.GetProjectID()) { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "ProjectID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetBusinessID()) > 100 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "BusinessID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateVirtualClusterReq_BusinessID_Pattern.MatchString(m.GetBusinessID()) { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "BusinessID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateVirtualClusterReq_Environment_InLookup[m.GetEnvironment()]; !ok { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Environment", reason: "value must be in list [stag debug prod]", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateVirtualClusterReq_EngineType_InLookup[m.GetEngineType()]; !ok { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "EngineType", reason: "value must be in list [k8s mesos]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsExclusive if _, ok := _CreateVirtualClusterReq_ClusterType_InLookup[m.GetClusterType()]; !ok { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "ClusterType", reason: "value must be in list [federation single virtual]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for HostClusterID if _, ok := _CreateVirtualClusterReq_HostClusterNetwork_InLookup[m.GetHostClusterNetwork()]; !ok { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "HostClusterNetwork", reason: "value must be in list [devnet idc ]", } + if !all { + return err + } + errors = append(errors, err) } if len(m.GetLabels()) > 20 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Labels", reason: "value must contain no more than 20 pair(s)", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for OnlyCreateInfo - if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "NetworkSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "NetworkSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterReqValidationError{ field: "NetworkSettings", @@ -9682,7 +15897,26 @@ func (m *CreateVirtualClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterBasicSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterReqValidationError{ field: "ClusterBasicSettings", @@ -9692,7 +15926,26 @@ func (m *CreateVirtualClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterAdvanceSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterReqValidationError{ field: "ClusterAdvanceSettings", @@ -9702,7 +15955,26 @@ func (m *CreateVirtualClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterReqValidationError{ field: "NodeSettings", @@ -9716,7 +15988,26 @@ func (m *CreateVirtualClusterReq) Validate() error { // no validation rules for Description - if v, ok := interface{}(m.GetNs()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNs()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "Ns", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "Ns", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNs()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterReqValidationError{ field: "Ns", @@ -9728,9 +16019,30 @@ func (m *CreateVirtualClusterReq) Validate() error { // no validation rules for ProjectCode + if len(errors) > 0 { + return CreateVirtualClusterReqMultiError(errors) + } + return nil } +// CreateVirtualClusterReqMultiError is an error wrapping multiple validation +// errors returned by CreateVirtualClusterReq.ValidateAll() if the designated +// constraints aren't met. +type CreateVirtualClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateVirtualClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateVirtualClusterReqMultiError) AllErrors() []error { return m } + // CreateVirtualClusterReqValidationError is the validation error returned by // CreateVirtualClusterReq.Validate if the designated constraints aren't met. type CreateVirtualClusterReqValidationError struct { @@ -9817,20 +16129,53 @@ var _CreateVirtualClusterReq_HostClusterNetwork_InLookup = map[string]struct{}{ } // Validate checks the field values on NamespaceInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NamespaceInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NamespaceInfo with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NamespaceInfoMultiError, or +// nil if none found. +func (m *NamespaceInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *NamespaceInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for Labels // no validation rules for Annotations - if v, ok := interface{}(m.GetQuota()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetQuota()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NamespaceInfoValidationError{ + field: "Quota", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NamespaceInfoValidationError{ + field: "Quota", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetQuota()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NamespaceInfoValidationError{ field: "Quota", @@ -9840,9 +16185,30 @@ func (m *NamespaceInfo) Validate() error { } } + if len(errors) > 0 { + return NamespaceInfoMultiError(errors) + } + return nil } +// NamespaceInfoMultiError is an error wrapping multiple validation errors +// returned by NamespaceInfo.ValidateAll() if the designated constraints +// aren't met. +type NamespaceInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NamespaceInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NamespaceInfoMultiError) AllErrors() []error { return m } + // NamespaceInfoValidationError is the validation error returned by // NamespaceInfo.Validate if the designated constraints aren't met. type NamespaceInfoValidationError struct { @@ -9898,13 +16264,27 @@ var _ interface { } = NamespaceInfoValidationError{} // Validate checks the field values on NamespaceQuota with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NamespaceQuota) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NamespaceQuota with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NamespaceQuotaMultiError, +// or nil if none found. +func (m *NamespaceQuota) ValidateAll() error { + return m.validate(true) +} + +func (m *NamespaceQuota) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CpuRequests // no validation rules for CpuLimits @@ -9913,9 +16293,30 @@ func (m *NamespaceQuota) Validate() error { // no validation rules for MemoryLimits + if len(errors) > 0 { + return NamespaceQuotaMultiError(errors) + } + return nil } +// NamespaceQuotaMultiError is an error wrapping multiple validation errors +// returned by NamespaceQuota.ValidateAll() if the designated constraints +// aren't met. +type NamespaceQuotaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NamespaceQuotaMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NamespaceQuotaMultiError) AllErrors() []error { return m } + // NamespaceQuotaValidationError is the validation error returned by // NamespaceQuota.Validate if the designated constraints aren't met. type NamespaceQuotaValidationError struct { @@ -9972,19 +16373,52 @@ var _ interface { // Validate checks the field values on CreateVirtualClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateVirtualClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateVirtualClusterResp with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateVirtualClusterRespMultiError, or nil if none found. +func (m *CreateVirtualClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateVirtualClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterRespValidationError{ field: "Data", @@ -9994,7 +16428,26 @@ func (m *CreateVirtualClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterRespValidationError{ field: "Task", @@ -10004,7 +16457,26 @@ func (m *CreateVirtualClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterRespValidationError{ field: "WebAnnotations", @@ -10014,9 +16486,30 @@ func (m *CreateVirtualClusterResp) Validate() error { } } + if len(errors) > 0 { + return CreateVirtualClusterRespMultiError(errors) + } + return nil } +// CreateVirtualClusterRespMultiError is an error wrapping multiple validation +// errors returned by CreateVirtualClusterResp.ValidateAll() if the designated +// constraints aren't met. +type CreateVirtualClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateVirtualClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateVirtualClusterRespMultiError) AllErrors() []error { return m } + // CreateVirtualClusterRespValidationError is the validation error returned by // CreateVirtualClusterResp.Validate if the designated constraints aren't met. type CreateVirtualClusterRespValidationError struct { @@ -10074,23 +16567,62 @@ var _ interface { } = CreateVirtualClusterRespValidationError{} // Validate checks the field values on KubeConfigReq with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *KubeConfigReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KubeConfigReq with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in KubeConfigReqMultiError, or +// nil if none found. +func (m *KubeConfigReq) ValidateAll() error { + return m.validate(true) +} + +func (m *KubeConfigReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetKubeConfig()) < 1 { - return KubeConfigReqValidationError{ + err := KubeConfigReqValidationError{ field: "KubeConfig", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return KubeConfigReqMultiError(errors) } return nil } +// KubeConfigReqMultiError is an error wrapping multiple validation errors +// returned by KubeConfigReq.ValidateAll() if the designated constraints +// aren't met. +type KubeConfigReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KubeConfigReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m KubeConfigReqMultiError) AllErrors() []error { return m } + // KubeConfigReqValidationError is the validation error returned by // KubeConfigReq.Validate if the designated constraints aren't met. type KubeConfigReqValidationError struct { @@ -10147,47 +16679,100 @@ var _ interface { // Validate checks the field values on KubeConfigConnectReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *KubeConfigConnectReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KubeConfigConnectReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// KubeConfigConnectReqMultiError, or nil if none found. +func (m *KubeConfigConnectReq) ValidateAll() error { + return m.validate(true) +} + +func (m *KubeConfigConnectReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID // no validation rules for IsExtranet if l := utf8.RuneCountInString(m.GetCloudID()); l < 1 || l > 1024 { - return KubeConfigConnectReqValidationError{ + err := KubeConfigConnectReqValidationError{ field: "CloudID", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetAccountID()) > 1024 { - return KubeConfigConnectReqValidationError{ + err := KubeConfigConnectReqValidationError{ field: "AccountID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) > 100 { - return KubeConfigConnectReqValidationError{ + err := KubeConfigConnectReqValidationError{ field: "Region", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_KubeConfigConnectReq_Region_Pattern.MatchString(m.GetRegion()) { - return KubeConfigConnectReqValidationError{ + err := KubeConfigConnectReqValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + // no validation rules for ResourceGroupName + + if len(errors) > 0 { + return KubeConfigConnectReqMultiError(errors) } return nil } +// KubeConfigConnectReqMultiError is an error wrapping multiple validation +// errors returned by KubeConfigConnectReq.ValidateAll() if the designated +// constraints aren't met. +type KubeConfigConnectReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KubeConfigConnectReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m KubeConfigConnectReqMultiError) AllErrors() []error { return m } + // KubeConfigConnectReqValidationError is the validation error returned by // KubeConfigConnectReq.Validate if the designated constraints aren't met. type KubeConfigConnectReqValidationError struct { @@ -10247,22 +16832,57 @@ var _ interface { var _KubeConfigConnectReq_Region_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on KubeConfigResp with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *KubeConfigResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KubeConfigResp with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in KubeConfigRespMultiError, +// or nil if none found. +func (m *KubeConfigResp) ValidateAll() error { + return m.validate(true) +} + +func (m *KubeConfigResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return KubeConfigRespMultiError(errors) + } + return nil } +// KubeConfigRespMultiError is an error wrapping multiple validation errors +// returned by KubeConfigResp.ValidateAll() if the designated constraints +// aren't met. +type KubeConfigRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KubeConfigRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m KubeConfigRespMultiError) AllErrors() []error { return m } + // KubeConfigRespValidationError is the validation error returned by // KubeConfigResp.Validate if the designated constraints aren't met. type KubeConfigRespValidationError struct { @@ -10319,21 +16939,56 @@ var _ interface { // Validate checks the field values on KubeConfigConnectResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *KubeConfigConnectResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KubeConfigConnectResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// KubeConfigConnectRespMultiError, or nil if none found. +func (m *KubeConfigConnectResp) ValidateAll() error { + return m.validate(true) +} + +func (m *KubeConfigConnectResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return KubeConfigConnectRespMultiError(errors) + } + return nil } +// KubeConfigConnectRespMultiError is an error wrapping multiple validation +// errors returned by KubeConfigConnectResp.ValidateAll() if the designated +// constraints aren't met. +type KubeConfigConnectRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KubeConfigConnectRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m KubeConfigConnectRespMultiError) AllErrors() []error { return m } + // KubeConfigConnectRespValidationError is the validation error returned by // KubeConfigConnectResp.Validate if the designated constraints aren't met. type KubeConfigConnectRespValidationError struct { @@ -10391,22 +17046,57 @@ var _ interface { } = KubeConfigConnectRespValidationError{} // Validate checks the field values on ImportCloudMode with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ImportCloudMode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ImportCloudMode with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ImportCloudModeMultiError, or nil if none found. +func (m *ImportCloudMode) ValidateAll() error { + return m.validate(true) +} + +func (m *ImportCloudMode) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for KubeConfig // no validation rules for Inter + if len(errors) > 0 { + return ImportCloudModeMultiError(errors) + } + return nil } +// ImportCloudModeMultiError is an error wrapping multiple validation errors +// returned by ImportCloudMode.ValidateAll() if the designated constraints +// aren't met. +type ImportCloudModeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ImportCloudModeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ImportCloudModeMultiError) AllErrors() []error { return m } + // ImportCloudModeValidationError is the validation error returned by // ImportCloudMode.Validate if the designated constraints aren't met. type ImportCloudModeValidationError struct { @@ -10462,88 +17152,161 @@ var _ interface { } = ImportCloudModeValidationError{} // Validate checks the field values on ImportClusterReq with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ImportClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ImportClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ImportClusterReqMultiError, or nil if none found. +func (m *ImportClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ImportClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID if l := utf8.RuneCountInString(m.GetClusterName()); l < 1 || l > 1024 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "ClusterName", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Description if l := utf8.RuneCountInString(m.GetProvider()); l < 1 || l > 1024 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Provider", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) > 100 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Region", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_ImportClusterReq_Region_Pattern.MatchString(m.GetRegion()) { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetProjectID()); l < 1 || l > 100 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "ProjectID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_ImportClusterReq_ProjectID_Pattern.MatchString(m.GetProjectID()) { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "ProjectID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetBusinessID()); l < 1 || l > 100 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "BusinessID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_ImportClusterReq_BusinessID_Pattern.MatchString(m.GetBusinessID()) { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "BusinessID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _ImportClusterReq_Environment_InLookup[m.GetEnvironment()]; !ok { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Environment", reason: "value must be in list [stag debug prod]", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _ImportClusterReq_EngineType_InLookup[m.GetEngineType()]; !ok { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "EngineType", reason: "value must be in list [k8s mesos ]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetIsExclusive()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetIsExclusive()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ImportClusterReqValidationError{ + field: "IsExclusive", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ImportClusterReqValidationError{ + field: "IsExclusive", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetIsExclusive()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ImportClusterReqValidationError{ field: "IsExclusive", @@ -10554,31 +17317,47 @@ func (m *ImportClusterReq) Validate() error { } if _, ok := _ImportClusterReq_ClusterType_InLookup[m.GetClusterType()]; !ok { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "ClusterType", reason: "value must be in list [federation single ]", } + if !all { + return err + } + errors = append(errors, err) } if len(m.GetLabels()) > 20 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Labels", reason: "value must contain no more than 20 pair(s)", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetCreator()); l < 1 || l > 1024 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Creator", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if m.GetCloudMode() == nil { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "CloudMode", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } if a := m.GetCloudMode(); a != nil { @@ -10598,22 +17377,51 @@ func (m *ImportClusterReq) Validate() error { // no validation rules for IsShared if utf8.RuneCountInString(m.GetVersion()) > 1024 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Version", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetAccountID()) > 1024 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "AccountID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ImportClusterReqMultiError(errors) } return nil } +// ImportClusterReqMultiError is an error wrapping multiple validation errors +// returned by ImportClusterReq.ValidateAll() if the designated constraints +// aren't met. +type ImportClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ImportClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ImportClusterReqMultiError) AllErrors() []error { return m } + // ImportClusterReqValidationError is the validation error returned by // ImportClusterReq.Validate if the designated constraints aren't met. type ImportClusterReqValidationError struct { @@ -10693,20 +17501,53 @@ var _ImportClusterReq_ClusterType_InLookup = map[string]struct{}{ } // Validate checks the field values on ImportClusterResp with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ImportClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ImportClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ImportClusterRespMultiError, or nil if none found. +func (m *ImportClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *ImportClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ImportClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ImportClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ImportClusterRespValidationError{ field: "Data", @@ -10716,9 +17557,30 @@ func (m *ImportClusterResp) Validate() error { } } + if len(errors) > 0 { + return ImportClusterRespMultiError(errors) + } + return nil } +// ImportClusterRespMultiError is an error wrapping multiple validation errors +// returned by ImportClusterResp.ValidateAll() if the designated constraints +// aren't met. +type ImportClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ImportClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ImportClusterRespMultiError) AllErrors() []error { return m } + // ImportClusterRespValidationError is the validation error returned by // ImportClusterResp.Validate if the designated constraints aren't met. type ImportClusterRespValidationError struct { @@ -10777,40 +17639,87 @@ var _ interface { // Validate checks the field values on DeleteVirtualClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteVirtualClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteVirtualClusterReq with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteVirtualClusterReqMultiError, or nil if none found. +func (m *DeleteVirtualClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteVirtualClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return DeleteVirtualClusterReqValidationError{ + err := DeleteVirtualClusterReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return DeleteVirtualClusterReqValidationError{ + err := DeleteVirtualClusterReqValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteVirtualClusterReq_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return DeleteVirtualClusterReqValidationError{ + err := DeleteVirtualClusterReqValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for OnlyDeleteInfo // no validation rules for Operator + if len(errors) > 0 { + return DeleteVirtualClusterReqMultiError(errors) + } + return nil } +// DeleteVirtualClusterReqMultiError is an error wrapping multiple validation +// errors returned by DeleteVirtualClusterReq.ValidateAll() if the designated +// constraints aren't met. +type DeleteVirtualClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteVirtualClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteVirtualClusterReqMultiError) AllErrors() []error { return m } + // DeleteVirtualClusterReqValidationError is the validation error returned by // DeleteVirtualClusterReq.Validate if the designated constraints aren't met. type DeleteVirtualClusterReqValidationError struct { @@ -10871,19 +17780,52 @@ var _DeleteVirtualClusterReq_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z // Validate checks the field values on DeleteVirtualClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteVirtualClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteVirtualClusterResp with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteVirtualClusterRespMultiError, or nil if none found. +func (m *DeleteVirtualClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteVirtualClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteVirtualClusterRespValidationError{ field: "Data", @@ -10893,7 +17835,26 @@ func (m *DeleteVirtualClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteVirtualClusterRespValidationError{ field: "Task", @@ -10903,7 +17864,26 @@ func (m *DeleteVirtualClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteVirtualClusterRespValidationError{ field: "WebAnnotations", @@ -10913,9 +17893,30 @@ func (m *DeleteVirtualClusterResp) Validate() error { } } + if len(errors) > 0 { + return DeleteVirtualClusterRespMultiError(errors) + } + return nil } +// DeleteVirtualClusterRespMultiError is an error wrapping multiple validation +// errors returned by DeleteVirtualClusterResp.ValidateAll() if the designated +// constraints aren't met. +type DeleteVirtualClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteVirtualClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteVirtualClusterRespMultiError) AllErrors() []error { return m } + // DeleteVirtualClusterRespValidationError is the validation error returned by // DeleteVirtualClusterResp.Validate if the designated constraints aren't met. type DeleteVirtualClusterRespValidationError struct { @@ -10974,34 +17975,79 @@ var _ interface { // Validate checks the field values on UpdateVirtualClusterQuotaReq with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateVirtualClusterQuotaReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateVirtualClusterQuotaReq with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateVirtualClusterQuotaReqMultiError, or nil if none found. +func (m *UpdateVirtualClusterQuotaReq) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateVirtualClusterQuotaReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return UpdateVirtualClusterQuotaReqValidationError{ + err := UpdateVirtualClusterQuotaReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return UpdateVirtualClusterQuotaReqValidationError{ + err := UpdateVirtualClusterQuotaReqValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateVirtualClusterQuotaReq_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return UpdateVirtualClusterQuotaReqValidationError{ + err := UpdateVirtualClusterQuotaReqValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetQuota()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetQuota()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateVirtualClusterQuotaReqValidationError{ + field: "Quota", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateVirtualClusterQuotaReqValidationError{ + field: "Quota", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetQuota()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateVirtualClusterQuotaReqValidationError{ field: "Quota", @@ -11012,15 +18058,40 @@ func (m *UpdateVirtualClusterQuotaReq) Validate() error { } if utf8.RuneCountInString(m.GetUpdater()) > 1024 { - return UpdateVirtualClusterQuotaReqValidationError{ + err := UpdateVirtualClusterQuotaReqValidationError{ field: "Updater", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateVirtualClusterQuotaReqMultiError(errors) } return nil } +// UpdateVirtualClusterQuotaReqMultiError is an error wrapping multiple +// validation errors returned by UpdateVirtualClusterQuotaReq.ValidateAll() if +// the designated constraints aren't met. +type UpdateVirtualClusterQuotaReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateVirtualClusterQuotaReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateVirtualClusterQuotaReqMultiError) AllErrors() []error { return m } + // UpdateVirtualClusterQuotaReqValidationError is the validation error returned // by UpdateVirtualClusterQuotaReq.Validate if the designated constraints // aren't met. @@ -11082,19 +18153,52 @@ var _UpdateVirtualClusterQuotaReq_ClusterID_Pattern = regexp.MustCompile("^[0-9a // Validate checks the field values on UpdateVirtualClusterQuotaResp with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateVirtualClusterQuotaResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateVirtualClusterQuotaResp with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateVirtualClusterQuotaRespMultiError, or nil if none found. +func (m *UpdateVirtualClusterQuotaResp) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateVirtualClusterQuotaResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateVirtualClusterQuotaRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateVirtualClusterQuotaRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateVirtualClusterQuotaRespValidationError{ field: "Data", @@ -11104,9 +18208,30 @@ func (m *UpdateVirtualClusterQuotaResp) Validate() error { } } + if len(errors) > 0 { + return UpdateVirtualClusterQuotaRespMultiError(errors) + } + return nil } +// UpdateVirtualClusterQuotaRespMultiError is an error wrapping multiple +// validation errors returned by UpdateVirtualClusterQuotaResp.ValidateAll() +// if the designated constraints aren't met. +type UpdateVirtualClusterQuotaRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateVirtualClusterQuotaRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateVirtualClusterQuotaRespMultiError) AllErrors() []error { return m } + // UpdateVirtualClusterQuotaRespValidationError is the validation error // returned by UpdateVirtualClusterQuotaResp.Validate if the designated // constraints aren't met. @@ -11165,32 +18290,58 @@ var _ interface { } = UpdateVirtualClusterQuotaRespValidationError{} // Validate checks the field values on DeleteClusterReq with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *DeleteClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteClusterReqMultiError, or nil if none found. +func (m *DeleteClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return DeleteClusterReqValidationError{ + err := DeleteClusterReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return DeleteClusterReqValidationError{ + err := DeleteClusterReqValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteClusterReq_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return DeleteClusterReqValidationError{ + err := DeleteClusterReqValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsForced @@ -11203,9 +18354,30 @@ func (m *DeleteClusterReq) Validate() error { // no validation rules for DeleteClusterRecord + if len(errors) > 0 { + return DeleteClusterReqMultiError(errors) + } + return nil } +// DeleteClusterReqMultiError is an error wrapping multiple validation errors +// returned by DeleteClusterReq.ValidateAll() if the designated constraints +// aren't met. +type DeleteClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteClusterReqMultiError) AllErrors() []error { return m } + // DeleteClusterReqValidationError is the validation error returned by // DeleteClusterReq.Validate if the designated constraints aren't met. type DeleteClusterReqValidationError struct { @@ -11263,20 +18435,53 @@ var _ interface { var _DeleteClusterReq_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on DeleteClusterResp with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *DeleteClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteClusterRespMultiError, or nil if none found. +func (m *DeleteClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteClusterRespValidationError{ field: "Data", @@ -11286,7 +18491,26 @@ func (m *DeleteClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteClusterRespValidationError{ field: "Task", @@ -11296,7 +18520,26 @@ func (m *DeleteClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteClusterRespValidationError{ field: "WebAnnotations", @@ -11306,9 +18549,30 @@ func (m *DeleteClusterResp) Validate() error { } } + if len(errors) > 0 { + return DeleteClusterRespMultiError(errors) + } + return nil } +// DeleteClusterRespMultiError is an error wrapping multiple validation errors +// returned by DeleteClusterResp.ValidateAll() if the designated constraints +// aren't met. +type DeleteClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteClusterRespMultiError) AllErrors() []error { return m } + // DeleteClusterRespValidationError is the validation error returned by // DeleteClusterResp.Validate if the designated constraints aren't met. type DeleteClusterRespValidationError struct { @@ -11366,57 +18630,110 @@ var _ interface { } = DeleteClusterRespValidationError{} // Validate checks the field values on UpdateClusterReq with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *UpdateClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateClusterReqMultiError, or nil if none found. +func (m *UpdateClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetClusterID()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "ClusterID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ClusterName if utf8.RuneCountInString(m.GetProvider()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "Provider", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region if utf8.RuneCountInString(m.GetVpcID()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "VpcID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "ProjectID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetBusinessID()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "BusinessID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Environment // no validation rules for EngineType - if v, ok := interface{}(m.GetIsExclusive()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetIsExclusive()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsExclusive", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsExclusive", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetIsExclusive()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "IsExclusive", @@ -11431,65 +18748,154 @@ func (m *UpdateClusterReq) Validate() error { // no validation rules for FederationClusterID if len(m.GetLabels()) > 20 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "Labels", reason: "value must contain no more than 20 pair(s)", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetUpdater()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "Updater", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _UpdateClusterReq_Status_InLookup[m.GetStatus()]; !ok { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "Status", reason: "value must be in list [CREATING RUNNING DELETING FAILURE INITIALIZATION DELETED ]", } - } - - for key, val := range m.GetBcsAddons() { - _ = val - - // no validation rules for BcsAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return UpdateClusterReqValidationError{ - field: fmt.Sprintf("BcsAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + if !all { + return err + } + errors = append(errors, err) + } + + { + sorted_keys := make([]string, len(m.GetBcsAddons())) + i := 0 + for key := range m.GetBcsAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetBcsAddons()[key] + _ = val + + // no validation rules for BcsAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraAddons() { - _ = val - - // no validation rules for ExtraAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return UpdateClusterReqValidationError{ - field: fmt.Sprintf("ExtraAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetExtraAddons())) + i := 0 + for key := range m.GetExtraAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraAddons()[key] + _ = val + + // no validation rules for ExtraAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } // no validation rules for SystemID // no validation rules for ManageType - if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "NetworkSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "NetworkSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "NetworkSettings", @@ -11499,7 +18905,26 @@ func (m *UpdateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterBasicSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "ClusterBasicSettings", @@ -11509,7 +18934,26 @@ func (m *UpdateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterAdvanceSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "ClusterAdvanceSettings", @@ -11519,7 +18963,26 @@ func (m *UpdateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "NodeSettings", @@ -11537,7 +19000,26 @@ func (m *UpdateClusterReq) Validate() error { // no validation rules for ExtraClusterID - if v, ok := interface{}(m.GetIsCommonCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetIsCommonCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsCommonCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsCommonCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetIsCommonCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "IsCommonCluster", @@ -11547,7 +19029,26 @@ func (m *UpdateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetDescription()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDescription()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "Description", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "Description", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDescription()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "Description", @@ -11559,7 +19060,26 @@ func (m *UpdateClusterReq) Validate() error { // no validation rules for ClusterCategory - if v, ok := interface{}(m.GetIsShared()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetIsShared()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsShared", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsShared", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetIsShared()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "IsShared", @@ -11572,19 +19092,44 @@ func (m *UpdateClusterReq) Validate() error { // no validation rules for CreateTime if utf8.RuneCountInString(m.GetCreator()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "Creator", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ImportCategory // no validation rules for CloudAccountID + if len(errors) > 0 { + return UpdateClusterReqMultiError(errors) + } + return nil } +// UpdateClusterReqMultiError is an error wrapping multiple validation errors +// returned by UpdateClusterReq.ValidateAll() if the designated constraints +// aren't met. +type UpdateClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateClusterReqMultiError) AllErrors() []error { return m } + // UpdateClusterReqValidationError is the validation error returned by // UpdateClusterReq.Validate if the designated constraints aren't met. type UpdateClusterReqValidationError struct { @@ -11650,20 +19195,53 @@ var _UpdateClusterReq_Status_InLookup = map[string]struct{}{ } // Validate checks the field values on UpdateClusterResp with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *UpdateClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateClusterRespMultiError, or nil if none found. +func (m *UpdateClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterRespValidationError{ field: "Data", @@ -11673,7 +19251,26 @@ func (m *UpdateClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterRespValidationError{ field: "WebAnnotations", @@ -11683,9 +19280,30 @@ func (m *UpdateClusterResp) Validate() error { } } + if len(errors) > 0 { + return UpdateClusterRespMultiError(errors) + } + return nil } +// UpdateClusterRespMultiError is an error wrapping multiple validation errors +// returned by UpdateClusterResp.ValidateAll() if the designated constraints +// aren't met. +type UpdateClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateClusterRespMultiError) AllErrors() []error { return m } + // UpdateClusterRespValidationError is the validation error returned by // UpdateClusterResp.Validate if the designated constraints aren't met. type UpdateClusterRespValidationError struct { @@ -11744,24 +19362,63 @@ var _ interface { // Validate checks the field values on RetryCreateClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *RetryCreateClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RetryCreateClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// RetryCreateClusterReqMultiError, or nil if none found. +func (m *RetryCreateClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *RetryCreateClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID if l := utf8.RuneCountInString(m.GetOperator()); l < 1 || l > 100 { - return RetryCreateClusterReqValidationError{ + err := RetryCreateClusterReqValidationError{ field: "Operator", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return RetryCreateClusterReqMultiError(errors) } return nil } +// RetryCreateClusterReqMultiError is an error wrapping multiple validation +// errors returned by RetryCreateClusterReq.ValidateAll() if the designated +// constraints aren't met. +type RetryCreateClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RetryCreateClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RetryCreateClusterReqMultiError) AllErrors() []error { return m } + // RetryCreateClusterReqValidationError is the validation error returned by // RetryCreateClusterReq.Validate if the designated constraints aren't met. type RetryCreateClusterReqValidationError struct { @@ -11820,19 +19477,52 @@ var _ interface { // Validate checks the field values on RetryCreateClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *RetryCreateClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RetryCreateClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// RetryCreateClusterRespMultiError, or nil if none found. +func (m *RetryCreateClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *RetryCreateClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RetryCreateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RetryCreateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RetryCreateClusterRespValidationError{ field: "Data", @@ -11842,7 +19532,26 @@ func (m *RetryCreateClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RetryCreateClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RetryCreateClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RetryCreateClusterRespValidationError{ field: "Task", @@ -11852,9 +19561,30 @@ func (m *RetryCreateClusterResp) Validate() error { } } + if len(errors) > 0 { + return RetryCreateClusterRespMultiError(errors) + } + return nil } +// RetryCreateClusterRespMultiError is an error wrapping multiple validation +// errors returned by RetryCreateClusterResp.ValidateAll() if the designated +// constraints aren't met. +type RetryCreateClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RetryCreateClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RetryCreateClusterRespMultiError) AllErrors() []error { return m } + // RetryCreateClusterRespValidationError is the validation error returned by // RetryCreateClusterResp.Validate if the designated constraints aren't met. type RetryCreateClusterRespValidationError struct { @@ -11912,39 +19642,86 @@ var _ interface { } = RetryCreateClusterRespValidationError{} // Validate checks the field values on GetClusterReq with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *GetClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetClusterReq with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in GetClusterReqMultiError, or +// nil if none found. +func (m *GetClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *GetClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return GetClusterReqValidationError{ + err := GetClusterReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return GetClusterReqValidationError{ + err := GetClusterReqValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_GetClusterReq_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return GetClusterReqValidationError{ + err := GetClusterReqValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for CloudInfo + if len(errors) > 0 { + return GetClusterReqMultiError(errors) + } + return nil } +// GetClusterReqMultiError is an error wrapping multiple validation errors +// returned by GetClusterReq.ValidateAll() if the designated constraints +// aren't met. +type GetClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetClusterReqMultiError) AllErrors() []error { return m } + // GetClusterReqValidationError is the validation error returned by // GetClusterReq.Validate if the designated constraints aren't met. type GetClusterReqValidationError struct { @@ -12002,20 +19779,53 @@ var _ interface { var _GetClusterReq_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on GetClusterResp with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *GetClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetClusterResp with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in GetClusterRespMultiError, +// or nil if none found. +func (m *GetClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *GetClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetClusterRespValidationError{ field: "Data", @@ -12025,7 +19835,26 @@ func (m *GetClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetExtra()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetExtra()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "Extra", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "Extra", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetExtra()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetClusterRespValidationError{ field: "Extra", @@ -12035,7 +19864,26 @@ func (m *GetClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetClusterRespValidationError{ field: "WebAnnotations", @@ -12045,9 +19893,30 @@ func (m *GetClusterResp) Validate() error { } } + if len(errors) > 0 { + return GetClusterRespMultiError(errors) + } + return nil } +// GetClusterRespMultiError is an error wrapping multiple validation errors +// returned by GetClusterResp.ValidateAll() if the designated constraints +// aren't met. +type GetClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetClusterRespMultiError) AllErrors() []error { return m } + // GetClusterRespValidationError is the validation error returned by // GetClusterResp.Validate if the designated constraints aren't met. type GetClusterRespValidationError struct { @@ -12103,18 +19972,53 @@ var _ interface { } = GetClusterRespValidationError{} // Validate checks the field values on ExtraClusterInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ExtraClusterInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ExtraClusterInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ExtraClusterInfoMultiError, or nil if none found. +func (m *ExtraClusterInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ExtraClusterInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProviderType + if len(errors) > 0 { + return ExtraClusterInfoMultiError(errors) + } + return nil } +// ExtraClusterInfoMultiError is an error wrapping multiple validation errors +// returned by ExtraClusterInfo.ValidateAll() if the designated constraints +// aren't met. +type ExtraClusterInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ExtraClusterInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ExtraClusterInfoMultiError) AllErrors() []error { return m } + // ExtraClusterInfoValidationError is the validation error returned by // ExtraClusterInfo.Validate if the designated constraints aren't met. type ExtraClusterInfoValidationError struct { @@ -12170,16 +20074,51 @@ var _ interface { } = ExtraClusterInfoValidationError{} // Validate checks the field values on CheckNodesRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CheckNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CheckNodesRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CheckNodesRequestMultiError, or nil if none found. +func (m *CheckNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CheckNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return CheckNodesRequestMultiError(errors) + } + return nil } +// CheckNodesRequestMultiError is an error wrapping multiple validation errors +// returned by CheckNodesRequest.ValidateAll() if the designated constraints +// aren't met. +type CheckNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CheckNodesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CheckNodesRequestMultiError) AllErrors() []error { return m } + // CheckNodesRequestValidationError is the validation error returned by // CheckNodesRequest.Validate if the designated constraints aren't met. type CheckNodesRequestValidationError struct { @@ -12238,38 +20177,102 @@ var _ interface { // Validate checks the field values on CheckNodesResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CheckNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CheckNodesResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CheckNodesResponseMultiError, or nil if none found. +func (m *CheckNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CheckNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - for key, val := range m.GetData() { - _ = val - - // no validation rules for Data[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CheckNodesResponseValidationError{ - field: fmt.Sprintf("Data[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetData())) + i := 0 + for key := range m.GetData() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetData()[key] + _ = val + + // no validation rules for Data[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CheckNodesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CheckNodesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CheckNodesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } + } + } + if len(errors) > 0 { + return CheckNodesResponseMultiError(errors) } return nil } +// CheckNodesResponseMultiError is an error wrapping multiple validation errors +// returned by CheckNodesResponse.ValidateAll() if the designated constraints +// aren't met. +type CheckNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CheckNodesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CheckNodesResponseMultiError) AllErrors() []error { return m } + // CheckNodesResponseValidationError is the validation error returned by // CheckNodesResponse.Validate if the designated constraints aren't met. type CheckNodesResponseValidationError struct { @@ -12327,21 +20330,56 @@ var _ interface { } = CheckNodesResponseValidationError{} // Validate checks the field values on NodeResult with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeResult) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeResult with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeResultMultiError, or +// nil if none found. +func (m *NodeResult) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeResult) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsExist // no validation rules for ClusterID // no validation rules for ClusterName + if len(errors) > 0 { + return NodeResultMultiError(errors) + } + return nil } +// NodeResultMultiError is an error wrapping multiple validation errors +// returned by NodeResult.ValidateAll() if the designated constraints aren't met. +type NodeResultMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeResultMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeResultMultiError) AllErrors() []error { return m } + // NodeResultValidationError is the validation error returned by // NodeResult.Validate if the designated constraints aren't met. type NodeResultValidationError struct { @@ -12398,22 +20436,61 @@ var _ interface { // Validate checks the field values on UnCordonNodeRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UnCordonNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UnCordonNodeRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UnCordonNodeRequestMultiError, or nil if none found. +func (m *UnCordonNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UnCordonNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetClusterID()) < 1 { - return UnCordonNodeRequestValidationError{ + err := UnCordonNodeRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UnCordonNodeRequestMultiError(errors) } return nil } +// UnCordonNodeRequestMultiError is an error wrapping multiple validation +// errors returned by UnCordonNodeRequest.ValidateAll() if the designated +// constraints aren't met. +type UnCordonNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UnCordonNodeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UnCordonNodeRequestMultiError) AllErrors() []error { return m } + // UnCordonNodeRequestValidationError is the validation error returned by // UnCordonNodeRequest.Validate if the designated constraints aren't met. type UnCordonNodeRequestValidationError struct { @@ -12472,19 +20549,52 @@ var _ interface { // Validate checks the field values on UnCordonNodeResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UnCordonNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UnCordonNodeResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UnCordonNodeResponseMultiError, or nil if none found. +func (m *UnCordonNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UnCordonNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UnCordonNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UnCordonNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UnCordonNodeResponseValidationError{ field: "Data", @@ -12494,9 +20604,30 @@ func (m *UnCordonNodeResponse) Validate() error { } } + if len(errors) > 0 { + return UnCordonNodeResponseMultiError(errors) + } + return nil } +// UnCordonNodeResponseMultiError is an error wrapping multiple validation +// errors returned by UnCordonNodeResponse.ValidateAll() if the designated +// constraints aren't met. +type UnCordonNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UnCordonNodeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UnCordonNodeResponseMultiError) AllErrors() []error { return m } + // UnCordonNodeResponseValidationError is the validation error returned by // UnCordonNodeResponse.Validate if the designated constraints aren't met. type UnCordonNodeResponseValidationError struct { @@ -12554,23 +20685,62 @@ var _ interface { } = UnCordonNodeResponseValidationError{} // Validate checks the field values on CordonNodeRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CordonNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CordonNodeRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CordonNodeRequestMultiError, or nil if none found. +func (m *CordonNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CordonNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetClusterID()) < 1 { - return CordonNodeRequestValidationError{ + err := CordonNodeRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return CordonNodeRequestMultiError(errors) } return nil } +// CordonNodeRequestMultiError is an error wrapping multiple validation errors +// returned by CordonNodeRequest.ValidateAll() if the designated constraints +// aren't met. +type CordonNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CordonNodeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CordonNodeRequestMultiError) AllErrors() []error { return m } + // CordonNodeRequestValidationError is the validation error returned by // CordonNodeRequest.Validate if the designated constraints aren't met. type CordonNodeRequestValidationError struct { @@ -12629,19 +20799,52 @@ var _ interface { // Validate checks the field values on CordonNodeResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CordonNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CordonNodeResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CordonNodeResponseMultiError, or nil if none found. +func (m *CordonNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CordonNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CordonNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CordonNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CordonNodeResponseValidationError{ field: "Data", @@ -12651,9 +20854,30 @@ func (m *CordonNodeResponse) Validate() error { } } + if len(errors) > 0 { + return CordonNodeResponseMultiError(errors) + } + return nil } +// CordonNodeResponseMultiError is an error wrapping multiple validation errors +// returned by CordonNodeResponse.ValidateAll() if the designated constraints +// aren't met. +type CordonNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CordonNodeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CordonNodeResponseMultiError) AllErrors() []error { return m } + // CordonNodeResponseValidationError is the validation error returned by // CordonNodeResponse.Validate if the designated constraints aren't met. type CordonNodeResponseValidationError struct { @@ -12711,25 +20935,47 @@ var _ interface { } = CordonNodeResponseValidationError{} // Validate checks the field values on UpdateNodeRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeRequestMultiError, or nil if none found. +func (m *UpdateNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := len(m.GetInnerIPs()); l < 1 || l > 100 { - return UpdateNodeRequestValidationError{ + err := UpdateNodeRequestValidationError{ field: "InnerIPs", reason: "value must contain between 1 and 100 items, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _UpdateNodeRequest_Status_InLookup[m.GetStatus()]; !ok { - return UpdateNodeRequestValidationError{ + err := UpdateNodeRequestValidationError{ field: "Status", reason: "value must be in list [INITIALIZATION RUNNING DELETING ADD-FAILURE REMOVE-FAILURE]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for NodeGroupID @@ -12737,15 +20983,40 @@ func (m *UpdateNodeRequest) Validate() error { // no validation rules for ClusterID if len(m.GetUpdater()) < 1 { - return UpdateNodeRequestValidationError{ + err := UpdateNodeRequestValidationError{ field: "Updater", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateNodeRequestMultiError(errors) } return nil } +// UpdateNodeRequestMultiError is an error wrapping multiple validation errors +// returned by UpdateNodeRequest.ValidateAll() if the designated constraints +// aren't met. +type UpdateNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeRequestMultiError) AllErrors() []error { return m } + // UpdateNodeRequestValidationError is the validation error returned by // UpdateNodeRequest.Validate if the designated constraints aren't met. type UpdateNodeRequestValidationError struct { @@ -12812,19 +21083,52 @@ var _UpdateNodeRequest_Status_InLookup = map[string]struct{}{ // Validate checks the field values on UpdateNodeResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeResponseMultiError, or nil if none found. +func (m *UpdateNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeResponseValidationError{ field: "Data", @@ -12834,9 +21138,30 @@ func (m *UpdateNodeResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeResponseMultiError(errors) + } + return nil } +// UpdateNodeResponseMultiError is an error wrapping multiple validation errors +// returned by UpdateNodeResponse.ValidateAll() if the designated constraints +// aren't met. +type UpdateNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeResponseMultiError) AllErrors() []error { return m } + // UpdateNodeResponseValidationError is the validation error returned by // UpdateNodeResponse.Validate if the designated constraints aren't met. type UpdateNodeResponseValidationError struct { @@ -12894,15 +21219,50 @@ var _ interface { } = UpdateNodeResponseValidationError{} // Validate checks the field values on NodeStatus with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeStatus) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeStatus with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeStatusMultiError, or +// nil if none found. +func (m *NodeStatus) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeStatus) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return NodeStatusMultiError(errors) + } + return nil } +// NodeStatusMultiError is an error wrapping multiple validation errors +// returned by NodeStatus.ValidateAll() if the designated constraints aren't met. +type NodeStatusMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeStatusMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeStatusMultiError) AllErrors() []error { return m } + // NodeStatusValidationError is the validation error returned by // NodeStatus.Validate if the designated constraints aren't met. type NodeStatusValidationError struct { @@ -12959,15 +21319,48 @@ var _ interface { // Validate checks the field values on UpdateClusterModuleRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateClusterModuleRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateClusterModuleRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateClusterModuleRequestMultiError, or nil if none found. +func (m *UpdateClusterModuleRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateClusterModuleRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterModuleRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterModuleRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterModuleRequestValidationError{ field: "Module", @@ -12978,15 +21371,40 @@ func (m *UpdateClusterModuleRequest) Validate() error { } if len(m.GetOperator()) < 1 { - return UpdateClusterModuleRequestValidationError{ + err := UpdateClusterModuleRequestValidationError{ field: "Operator", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateClusterModuleRequestMultiError(errors) } return nil } +// UpdateClusterModuleRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateClusterModuleRequest.ValidateAll() if +// the designated constraints aren't met. +type UpdateClusterModuleRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateClusterModuleRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateClusterModuleRequestMultiError) AllErrors() []error { return m } + // UpdateClusterModuleRequestValidationError is the validation error returned // by UpdateClusterModuleRequest.Validate if the designated constraints aren't met. type UpdateClusterModuleRequestValidationError struct { @@ -13045,19 +21463,52 @@ var _ interface { // Validate checks the field values on UpdateClusterModuleResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateClusterModuleResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateClusterModuleResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateClusterModuleResponseMultiError, or nil if none found. +func (m *UpdateClusterModuleResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateClusterModuleResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterModuleResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterModuleResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterModuleResponseValidationError{ field: "Data", @@ -13067,9 +21518,30 @@ func (m *UpdateClusterModuleResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateClusterModuleResponseMultiError(errors) + } + return nil } +// UpdateClusterModuleResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateClusterModuleResponse.ValidateAll() if +// the designated constraints aren't met. +type UpdateClusterModuleResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateClusterModuleResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateClusterModuleResponseMultiError) AllErrors() []error { return m } + // UpdateClusterModuleResponseValidationError is the validation error returned // by UpdateClusterModuleResponse.Validate if the designated constraints // aren't met. @@ -13129,23 +21601,60 @@ var _ interface { // Validate checks the field values on RecordNodeInfoRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *RecordNodeInfoRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RecordNodeInfoRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// RecordNodeInfoRequestMultiError, or nil if none found. +func (m *RecordNodeInfoRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *RecordNodeInfoRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := len(m.GetNodes()); l < 1 || l > 1000 { - return RecordNodeInfoRequestValidationError{ + err := RecordNodeInfoRequestValidationError{ field: "Nodes", reason: "value must contain between 1 and 1000 items, inclusive", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetNodes() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RecordNodeInfoRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RecordNodeInfoRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RecordNodeInfoRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), @@ -13157,9 +21666,30 @@ func (m *RecordNodeInfoRequest) Validate() error { } + if len(errors) > 0 { + return RecordNodeInfoRequestMultiError(errors) + } + return nil } +// RecordNodeInfoRequestMultiError is an error wrapping multiple validation +// errors returned by RecordNodeInfoRequest.ValidateAll() if the designated +// constraints aren't met. +type RecordNodeInfoRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RecordNodeInfoRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RecordNodeInfoRequestMultiError) AllErrors() []error { return m } + // RecordNodeInfoRequestValidationError is the validation error returned by // RecordNodeInfoRequest.Validate if the designated constraints aren't met. type RecordNodeInfoRequestValidationError struct { @@ -13217,25 +21747,64 @@ var _ interface { } = RecordNodeInfoRequestValidationError{} // Validate checks the field values on GetNodeRequest with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *GetNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeRequest with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in GetNodeRequestMultiError, +// or nil if none found. +func (m *GetNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if ip := net.ParseIP(m.GetInnerIP()); ip == nil || ip.To4() == nil { - return GetNodeRequestValidationError{ + err := GetNodeRequestValidationError{ field: "InnerIP", reason: "value must be a valid IPv4 address", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ShowPwd + if len(errors) > 0 { + return GetNodeRequestMultiError(errors) + } + return nil } +// GetNodeRequestMultiError is an error wrapping multiple validation errors +// returned by GetNodeRequest.ValidateAll() if the designated constraints +// aren't met. +type GetNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetNodeRequestMultiError) AllErrors() []error { return m } + // GetNodeRequestValidationError is the validation error returned by // GetNodeRequest.Validate if the designated constraints aren't met. type GetNodeRequestValidationError struct { @@ -13291,13 +21860,27 @@ var _ interface { } = GetNodeRequestValidationError{} // Validate checks the field values on GetNodeResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *GetNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetNodeResponseMultiError, or nil if none found. +func (m *GetNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -13307,7 +21890,26 @@ func (m *GetNodeResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -13319,9 +21921,30 @@ func (m *GetNodeResponse) Validate() error { } + if len(errors) > 0 { + return GetNodeResponseMultiError(errors) + } + return nil } +// GetNodeResponseMultiError is an error wrapping multiple validation errors +// returned by GetNodeResponse.ValidateAll() if the designated constraints +// aren't met. +type GetNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetNodeResponseMultiError) AllErrors() []error { return m } + // GetNodeResponseValidationError is the validation error returned by // GetNodeResponse.Validate if the designated constraints aren't met. type GetNodeResponseValidationError struct { @@ -13378,22 +22001,61 @@ var _ interface { // Validate checks the field values on GetNodeInfoRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeInfoRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeInfoRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetNodeInfoRequestMultiError, or nil if none found. +func (m *GetNodeInfoRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeInfoRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if ip := net.ParseIP(m.GetInnerIP()); ip == nil || ip.To4() == nil { - return GetNodeInfoRequestValidationError{ + err := GetNodeInfoRequestValidationError{ field: "InnerIP", reason: "value must be a valid IPv4 address", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetNodeInfoRequestMultiError(errors) } return nil } +// GetNodeInfoRequestMultiError is an error wrapping multiple validation errors +// returned by GetNodeInfoRequest.ValidateAll() if the designated constraints +// aren't met. +type GetNodeInfoRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeInfoRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetNodeInfoRequestMultiError) AllErrors() []error { return m } + // GetNodeInfoRequestValidationError is the validation error returned by // GetNodeInfoRequest.Validate if the designated constraints aren't met. type GetNodeInfoRequestValidationError struct { @@ -13452,19 +22114,52 @@ var _ interface { // Validate checks the field values on GetNodeInfoResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeInfoResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeInfoResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetNodeInfoResponseMultiError, or nil if none found. +func (m *GetNodeInfoResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeInfoResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeInfoResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeInfoResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeInfoResponseValidationError{ field: "Data", @@ -13474,9 +22169,30 @@ func (m *GetNodeInfoResponse) Validate() error { } } + if len(errors) > 0 { + return GetNodeInfoResponseMultiError(errors) + } + return nil } +// GetNodeInfoResponseMultiError is an error wrapping multiple validation +// errors returned by GetNodeInfoResponse.ValidateAll() if the designated +// constraints aren't met. +type GetNodeInfoResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeInfoResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetNodeInfoResponseMultiError) AllErrors() []error { return m } + // GetNodeInfoResponseValidationError is the validation error returned by // GetNodeInfoResponse.Validate if the designated constraints aren't met. type GetNodeInfoResponseValidationError struct { @@ -13534,12 +22250,27 @@ var _ interface { } = GetNodeInfoResponseValidationError{} // Validate checks the field values on NodeConfig with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeConfig) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeConfig with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeConfigMultiError, or +// nil if none found. +func (m *NodeConfig) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeConfig) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for InstanceType // no validation rules for CPU @@ -13548,9 +22279,29 @@ func (m *NodeConfig) Validate() error { // no validation rules for GPU + if len(errors) > 0 { + return NodeConfigMultiError(errors) + } + return nil } +// NodeConfigMultiError is an error wrapping multiple validation errors +// returned by NodeConfig.ValidateAll() if the designated constraints aren't met. +type NodeConfigMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeConfigMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeConfigMultiError) AllErrors() []error { return m } + // NodeConfigValidationError is the validation error returned by // NodeConfig.Validate if the designated constraints aren't met. type NodeConfigValidationError struct { @@ -13606,12 +22357,27 @@ var _ interface { } = NodeConfigValidationError{} // Validate checks the field values on NodeInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeInfoMultiError, or nil +// if none found. +func (m *NodeInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeName // no validation rules for NodeType @@ -13630,7 +22396,26 @@ func (m *NodeInfo) Validate() error { // no validation rules for Status - if v, ok := interface{}(m.GetInstanceConfig()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetInstanceConfig()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "InstanceConfig", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "InstanceConfig", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetInstanceConfig()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeInfoValidationError{ field: "InstanceConfig", @@ -13640,7 +22425,26 @@ func (m *NodeInfo) Validate() error { } } - if v, ok := interface{}(m.GetZoneInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetZoneInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "ZoneInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "ZoneInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetZoneInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeInfoValidationError{ field: "ZoneInfo", @@ -13650,7 +22454,26 @@ func (m *NodeInfo) Validate() error { } } - if v, ok := interface{}(m.GetGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "Group", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "Group", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeInfoValidationError{ field: "Group", @@ -13660,7 +22483,26 @@ func (m *NodeInfo) Validate() error { } } - if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeInfoValidationError{ field: "NodeTemplate", @@ -13670,9 +22512,29 @@ func (m *NodeInfo) Validate() error { } } + if len(errors) > 0 { + return NodeInfoMultiError(errors) + } + return nil } +// NodeInfoMultiError is an error wrapping multiple validation errors returned +// by NodeInfo.ValidateAll() if the designated constraints aren't met. +type NodeInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeInfoMultiError) AllErrors() []error { return m } + // NodeInfoValidationError is the validation error returned by // NodeInfo.Validate if the designated constraints aren't met. type NodeInfoValidationError struct { @@ -13729,17 +22591,52 @@ var _ interface { // Validate checks the field values on ListCommonClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCommonClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCommonClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCommonClusterReqMultiError, or nil if none found. +func (m *ListCommonClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCommonClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ShowVCluster + if len(errors) > 0 { + return ListCommonClusterReqMultiError(errors) + } + return nil } +// ListCommonClusterReqMultiError is an error wrapping multiple validation +// errors returned by ListCommonClusterReq.ValidateAll() if the designated +// constraints aren't met. +type ListCommonClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCommonClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCommonClusterReqMultiError) AllErrors() []error { return m } + // ListCommonClusterReqValidationError is the validation error returned by // ListCommonClusterReq.Validate if the designated constraints aren't met. type ListCommonClusterReqValidationError struct { @@ -13798,12 +22695,26 @@ var _ interface { // Validate checks the field values on ListCommonClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCommonClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCommonClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCommonClusterRespMultiError, or nil if none found. +func (m *ListCommonClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCommonClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -13813,7 +22724,26 @@ func (m *ListCommonClusterResp) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCommonClusterRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCommonClusterRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCommonClusterRespValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -13825,7 +22755,26 @@ func (m *ListCommonClusterResp) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCommonClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCommonClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCommonClusterRespValidationError{ field: "WebAnnotations", @@ -13835,9 +22784,30 @@ func (m *ListCommonClusterResp) Validate() error { } } + if len(errors) > 0 { + return ListCommonClusterRespMultiError(errors) + } + return nil } +// ListCommonClusterRespMultiError is an error wrapping multiple validation +// errors returned by ListCommonClusterResp.ValidateAll() if the designated +// constraints aren't met. +type ListCommonClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCommonClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCommonClusterRespMultiError) AllErrors() []error { return m } + // ListCommonClusterRespValidationError is the validation error returned by // ListCommonClusterResp.Validate if the designated constraints aren't met. type ListCommonClusterRespValidationError struct { @@ -13896,38 +22866,85 @@ var _ interface { // Validate checks the field values on ListProjectClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListProjectClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListProjectClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListProjectClusterReqMultiError, or nil if none found. +func (m *ListProjectClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ListProjectClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetProjectID()) > 100 { - return ListProjectClusterReqValidationError{ + err := ListProjectClusterReqValidationError{ field: "ProjectID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) > 100 { - return ListProjectClusterReqValidationError{ + err := ListProjectClusterReqValidationError{ field: "Region", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProvider()) > 32 { - return ListProjectClusterReqValidationError{ + err := ListProjectClusterReqValidationError{ field: "Provider", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Operator + if len(errors) > 0 { + return ListProjectClusterReqMultiError(errors) + } + return nil } +// ListProjectClusterReqMultiError is an error wrapping multiple validation +// errors returned by ListProjectClusterReq.ValidateAll() if the designated +// constraints aren't met. +type ListProjectClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListProjectClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListProjectClusterReqMultiError) AllErrors() []error { return m } + // ListProjectClusterReqValidationError is the validation error returned by // ListProjectClusterReq.Validate if the designated constraints aren't met. type ListProjectClusterReqValidationError struct { @@ -13986,12 +23003,26 @@ var _ interface { // Validate checks the field values on ListProjectClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListProjectClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListProjectClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListProjectClusterRespMultiError, or nil if none found. +func (m *ListProjectClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *ListProjectClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -14001,7 +23032,26 @@ func (m *ListProjectClusterResp) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListProjectClusterRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListProjectClusterRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListProjectClusterRespValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -14013,24 +23063,72 @@ func (m *ListProjectClusterResp) Validate() error { } - for key, val := range m.GetClusterExtraInfo() { - _ = val + { + sorted_keys := make([]string, len(m.GetClusterExtraInfo())) + i := 0 + for key := range m.GetClusterExtraInfo() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetClusterExtraInfo()[key] + _ = val + + // no validation rules for ClusterExtraInfo[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListProjectClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListProjectClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListProjectClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for ClusterExtraInfo[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListProjectClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return ListProjectClusterRespValidationError{ - field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + errors = append(errors, ListProjectClusterRespValidationError{ + field: "WebAnnotations", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListProjectClusterRespValidationError{ field: "WebAnnotations", @@ -14040,9 +23138,30 @@ func (m *ListProjectClusterResp) Validate() error { } } + if len(errors) > 0 { + return ListProjectClusterRespMultiError(errors) + } + return nil } +// ListProjectClusterRespMultiError is an error wrapping multiple validation +// errors returned by ListProjectClusterResp.ValidateAll() if the designated +// constraints aren't met. +type ListProjectClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListProjectClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListProjectClusterRespMultiError) AllErrors() []error { return m } + // ListProjectClusterRespValidationError is the validation error returned by // ListProjectClusterResp.Validate if the designated constraints aren't met. type ListProjectClusterRespValidationError struct { @@ -14100,53 +23219,91 @@ var _ interface { } = ListProjectClusterRespValidationError{} // Validate checks the field values on ListClusterReq with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ListClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterReq with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ListClusterReqMultiError, +// or nil if none found. +func (m *ListClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetClusterName()) > 100 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "ClusterName", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProvider()) > 32 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "Provider", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) > 100 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "Region", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetVpcID()) > 32 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "VpcID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 100 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "ProjectID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetBusinessID()) > 100 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "BusinessID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Environment @@ -14160,33 +23317,49 @@ func (m *ListClusterReq) Validate() error { // no validation rules for FederationClusterID if _, ok := _ListClusterReq_Status_InLookup[m.GetStatus()]; !ok { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "Status", reason: "value must be in list [CREATING RUNNING DELETING FALURE INITIALIZATION DELETED ]", } + if !all { + return err + } + errors = append(errors, err) } if m.GetOffset() < 0 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "Offset", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetLimit() > 1000 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "Limit", reason: "value must be less than or equal to 1000", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Operator if utf8.RuneCountInString(m.GetSystemID()) > 100 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "SystemID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ExtraClusterID @@ -14195,9 +23368,30 @@ func (m *ListClusterReq) Validate() error { // no validation rules for ClusterID + if len(errors) > 0 { + return ListClusterReqMultiError(errors) + } + return nil } +// ListClusterReqMultiError is an error wrapping multiple validation errors +// returned by ListClusterReq.ValidateAll() if the designated constraints +// aren't met. +type ListClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListClusterReqMultiError) AllErrors() []error { return m } + // ListClusterReqValidationError is the validation error returned by // ListClusterReq.Validate if the designated constraints aren't met. type ListClusterReqValidationError struct { @@ -14263,13 +23457,27 @@ var _ListClusterReq_Status_InLookup = map[string]struct{}{ } // Validate checks the field values on ListClusterResp with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ListClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListClusterRespMultiError, or nil if none found. +func (m *ListClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -14279,7 +23487,26 @@ func (m *ListClusterResp) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListClusterRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListClusterRespValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -14291,24 +23518,72 @@ func (m *ListClusterResp) Validate() error { } - for key, val := range m.GetClusterExtraInfo() { - _ = val + { + sorted_keys := make([]string, len(m.GetClusterExtraInfo())) + i := 0 + for key := range m.GetClusterExtraInfo() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetClusterExtraInfo()[key] + _ = val + + // no validation rules for ClusterExtraInfo[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for ClusterExtraInfo[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return ListClusterRespValidationError{ - field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + errors = append(errors, ListClusterRespValidationError{ + field: "WebAnnotations", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListClusterRespValidationError{ field: "WebAnnotations", @@ -14318,9 +23593,30 @@ func (m *ListClusterResp) Validate() error { } } + if len(errors) > 0 { + return ListClusterRespMultiError(errors) + } + return nil } +// ListClusterRespMultiError is an error wrapping multiple validation errors +// returned by ListClusterResp.ValidateAll() if the designated constraints +// aren't met. +type ListClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListClusterRespMultiError) AllErrors() []error { return m } + // ListClusterRespValidationError is the validation error returned by // ListClusterResp.Validate if the designated constraints aren't met. type ListClusterRespValidationError struct { @@ -14376,21 +23672,56 @@ var _ interface { } = ListClusterRespValidationError{} // Validate checks the field values on ExtraInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ExtraInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ExtraInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ExtraInfoMultiError, or nil +// if none found. +func (m *ExtraInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ExtraInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CanDeleted // no validation rules for ProviderType // no validation rules for AutoScale + if len(errors) > 0 { + return ExtraInfoMultiError(errors) + } + return nil } +// ExtraInfoMultiError is an error wrapping multiple validation errors returned +// by ExtraInfo.ValidateAll() if the designated constraints aren't met. +type ExtraInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ExtraInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ExtraInfoMultiError) AllErrors() []error { return m } + // ExtraInfoValidationError is the validation error returned by // ExtraInfo.Validate if the designated constraints aren't met. type ExtraInfoValidationError struct { @@ -14446,33 +23777,97 @@ var _ interface { } = ExtraInfoValidationError{} // Validate checks the field values on WebAnnotations with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *WebAnnotations) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on WebAnnotations with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in WebAnnotationsMultiError, +// or nil if none found. +func (m *WebAnnotations) ValidateAll() error { + return m.validate(true) +} + +func (m *WebAnnotations) validate(all bool) error { if m == nil { return nil } - for key, val := range m.GetPerms() { - _ = val + var errors []error - // no validation rules for Perms[key] + { + sorted_keys := make([]string, len(m.GetPerms())) + i := 0 + for key := range m.GetPerms() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetPerms()[key] + _ = val - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return WebAnnotationsValidationError{ - field: fmt.Sprintf("Perms[%v]", key), - reason: "embedded message failed validation", - cause: err, + // no validation rules for Perms[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, WebAnnotationsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, WebAnnotationsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return WebAnnotationsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } + } + } + if len(errors) > 0 { + return WebAnnotationsMultiError(errors) } return nil } +// WebAnnotationsMultiError is an error wrapping multiple validation errors +// returned by WebAnnotations.ValidateAll() if the designated constraints +// aren't met. +type WebAnnotationsMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m WebAnnotationsMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m WebAnnotationsMultiError) AllErrors() []error { return m } + // WebAnnotationsValidationError is the validation error returned by // WebAnnotations.Validate if the designated constraints aren't met. type WebAnnotationsValidationError struct { @@ -14528,14 +23923,47 @@ var _ interface { } = WebAnnotationsValidationError{} // Validate checks the field values on WebAnnotationsV2 with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *WebAnnotationsV2) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on WebAnnotationsV2 with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// WebAnnotationsV2MultiError, or nil if none found. +func (m *WebAnnotationsV2) ValidateAll() error { + return m.validate(true) +} + +func (m *WebAnnotationsV2) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetPerms()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetPerms()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, WebAnnotationsV2ValidationError{ + field: "Perms", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, WebAnnotationsV2ValidationError{ + field: "Perms", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetPerms()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return WebAnnotationsV2ValidationError{ field: "Perms", @@ -14545,9 +23973,30 @@ func (m *WebAnnotationsV2) Validate() error { } } + if len(errors) > 0 { + return WebAnnotationsV2MultiError(errors) + } + return nil } +// WebAnnotationsV2MultiError is an error wrapping multiple validation errors +// returned by WebAnnotationsV2.ValidateAll() if the designated constraints +// aren't met. +type WebAnnotationsV2MultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m WebAnnotationsV2MultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m WebAnnotationsV2MultiError) AllErrors() []error { return m } + // WebAnnotationsV2ValidationError is the validation error returned by // WebAnnotationsV2.Validate if the designated constraints aren't met. type WebAnnotationsV2ValidationError struct { @@ -14604,38 +24053,68 @@ var _ interface { // Validate checks the field values on ListNodesInClusterRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodesInClusterRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodesInClusterRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodesInClusterRequestMultiError, or nil if none found. +func (m *ListNodesInClusterRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodesInClusterRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) > 100 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "Region", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetVpcID()) > 32 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "VpcID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetNodeGroupID()) > 100 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "NodeGroupID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for InstanceType @@ -14643,24 +24122,53 @@ func (m *ListNodesInClusterRequest) Validate() error { // no validation rules for Status if m.GetOffset() < 0 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "Offset", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetLimit() > 1000 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "Limit", reason: "value must be less than or equal to 1000", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ShowPwd + if len(errors) > 0 { + return ListNodesInClusterRequestMultiError(errors) + } + return nil } +// ListNodesInClusterRequestMultiError is an error wrapping multiple validation +// errors returned by ListNodesInClusterRequest.ValidateAll() if the +// designated constraints aren't met. +type ListNodesInClusterRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodesInClusterRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodesInClusterRequestMultiError) AllErrors() []error { return m } + // ListNodesInClusterRequestValidationError is the validation error returned by // ListNodesInClusterRequest.Validate if the designated constraints aren't met. type ListNodesInClusterRequestValidationError struct { @@ -14719,12 +24227,26 @@ var _ interface { // Validate checks the field values on ListNodesInClusterResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodesInClusterResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodesInClusterResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodesInClusterResponseMultiError, or nil if none found. +func (m *ListNodesInClusterResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodesInClusterResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -14734,7 +24256,26 @@ func (m *ListNodesInClusterResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInClusterResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInClusterResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodesInClusterResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -14746,7 +24287,26 @@ func (m *ListNodesInClusterResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInClusterResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInClusterResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodesInClusterResponseValidationError{ field: "WebAnnotations", @@ -14756,9 +24316,30 @@ func (m *ListNodesInClusterResponse) Validate() error { } } + if len(errors) > 0 { + return ListNodesInClusterResponseMultiError(errors) + } + return nil } +// ListNodesInClusterResponseMultiError is an error wrapping multiple +// validation errors returned by ListNodesInClusterResponse.ValidateAll() if +// the designated constraints aren't met. +type ListNodesInClusterResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodesInClusterResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodesInClusterResponseMultiError) AllErrors() []error { return m } + // ListNodesInClusterResponseValidationError is the validation error returned // by ListNodesInClusterResponse.Validate if the designated constraints aren't met. type ListNodesInClusterResponseValidationError struct { @@ -14816,13 +24397,27 @@ var _ interface { } = ListNodesInClusterResponseValidationError{} // Validate checks the field values on ClusterNode with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ClusterNode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterNode with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ClusterNodeMultiError, or +// nil if none found. +func (m *ClusterNode) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterNode) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeID // no validation rules for InnerIP @@ -14858,7 +24453,26 @@ func (m *ClusterNode) Validate() error { for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterNodeValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterNodeValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterNodeValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -14896,9 +24510,29 @@ func (m *ClusterNode) Validate() error { // no validation rules for FailedReason + if len(errors) > 0 { + return ClusterNodeMultiError(errors) + } + return nil } +// ClusterNodeMultiError is an error wrapping multiple validation errors +// returned by ClusterNode.ValidateAll() if the designated constraints aren't met. +type ClusterNodeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterNodeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterNodeMultiError) AllErrors() []error { return m } + // ClusterNodeValidationError is the validation error returned by // ClusterNode.Validate if the designated constraints aren't met. type ClusterNodeValidationError struct { @@ -14955,22 +24589,61 @@ var _ interface { // Validate checks the field values on ListMastersInClusterRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListMastersInClusterRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListMastersInClusterRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListMastersInClusterRequestMultiError, or nil if none found. +func (m *ListMastersInClusterRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListMastersInClusterRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return ListMastersInClusterRequestValidationError{ + err := ListMastersInClusterRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListMastersInClusterRequestMultiError(errors) } return nil } +// ListMastersInClusterRequestMultiError is an error wrapping multiple +// validation errors returned by ListMastersInClusterRequest.ValidateAll() if +// the designated constraints aren't met. +type ListMastersInClusterRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListMastersInClusterRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListMastersInClusterRequestMultiError) AllErrors() []error { return m } + // ListMastersInClusterRequestValidationError is the validation error returned // by ListMastersInClusterRequest.Validate if the designated constraints // aren't met. @@ -15030,12 +24703,26 @@ var _ interface { // Validate checks the field values on ListMastersInClusterResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListMastersInClusterResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListMastersInClusterResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListMastersInClusterResponseMultiError, or nil if none found. +func (m *ListMastersInClusterResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListMastersInClusterResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -15045,7 +24732,26 @@ func (m *ListMastersInClusterResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListMastersInClusterResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListMastersInClusterResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListMastersInClusterResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -15057,7 +24763,26 @@ func (m *ListMastersInClusterResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListMastersInClusterResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListMastersInClusterResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListMastersInClusterResponseValidationError{ field: "WebAnnotations", @@ -15067,9 +24792,30 @@ func (m *ListMastersInClusterResponse) Validate() error { } } + if len(errors) > 0 { + return ListMastersInClusterResponseMultiError(errors) + } + return nil } +// ListMastersInClusterResponseMultiError is an error wrapping multiple +// validation errors returned by ListMastersInClusterResponse.ValidateAll() if +// the designated constraints aren't met. +type ListMastersInClusterResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListMastersInClusterResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListMastersInClusterResponseMultiError) AllErrors() []error { return m } + // ListMastersInClusterResponseValidationError is the validation error returned // by ListMastersInClusterResponse.Validate if the designated constraints // aren't met. @@ -15129,22 +24875,61 @@ var _ interface { // Validate checks the field values on GetClusterCredentialReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetClusterCredentialReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetClusterCredentialReq with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetClusterCredentialReqMultiError, or nil if none found. +func (m *GetClusterCredentialReq) ValidateAll() error { + return m.validate(true) +} + +func (m *GetClusterCredentialReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetServerKey()); l < 1 || l > 100 { - return GetClusterCredentialReqValidationError{ + err := GetClusterCredentialReqValidationError{ field: "ServerKey", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetClusterCredentialReqMultiError(errors) } return nil } +// GetClusterCredentialReqMultiError is an error wrapping multiple validation +// errors returned by GetClusterCredentialReq.ValidateAll() if the designated +// constraints aren't met. +type GetClusterCredentialReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetClusterCredentialReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetClusterCredentialReqMultiError) AllErrors() []error { return m } + // GetClusterCredentialReqValidationError is the validation error returned by // GetClusterCredentialReq.Validate if the designated constraints aren't met. type GetClusterCredentialReqValidationError struct { @@ -15203,19 +24988,52 @@ var _ interface { // Validate checks the field values on GetClusterCredentialResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetClusterCredentialResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetClusterCredentialResp with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetClusterCredentialRespMultiError, or nil if none found. +func (m *GetClusterCredentialResp) ValidateAll() error { + return m.validate(true) +} + +func (m *GetClusterCredentialResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetClusterCredentialRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetClusterCredentialRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetClusterCredentialRespValidationError{ field: "Data", @@ -15225,9 +25043,30 @@ func (m *GetClusterCredentialResp) Validate() error { } } + if len(errors) > 0 { + return GetClusterCredentialRespMultiError(errors) + } + return nil } +// GetClusterCredentialRespMultiError is an error wrapping multiple validation +// errors returned by GetClusterCredentialResp.ValidateAll() if the designated +// constraints aren't met. +type GetClusterCredentialRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetClusterCredentialRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetClusterCredentialRespMultiError) AllErrors() []error { return m } + // GetClusterCredentialRespValidationError is the validation error returned by // GetClusterCredentialResp.Validate if the designated constraints aren't met. type GetClusterCredentialRespValidationError struct { @@ -15286,78 +25125,149 @@ var _ interface { // Validate checks the field values on UpdateClusterCredentialReq with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateClusterCredentialReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateClusterCredentialReq with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateClusterCredentialReqMultiError, or nil if none found. +func (m *UpdateClusterCredentialReq) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateClusterCredentialReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetServerKey()); l < 1 || l > 100 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ServerKey", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetClientModule()); l < 1 || l > 100 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ClientModule", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetServerAddress()); l < 1 || l > 2048 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ServerAddress", reason: "value length must be between 1 and 2048 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetCaCertData()) > 4096 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "CaCertData", reason: "value length must be at most 4096 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetUserToken()) > 2048 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "UserToken", reason: "value length must be at most 2048 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClusterDomain()) > 2048 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ClusterDomain", reason: "value length must be at most 2048 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClientCert()) > 4096 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ClientCert", reason: "value length must be at most 4096 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClientKey()) > 4096 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ClientKey", reason: "value length must be at most 4096 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateClusterCredentialReqMultiError(errors) } return nil } +// UpdateClusterCredentialReqMultiError is an error wrapping multiple +// validation errors returned by UpdateClusterCredentialReq.ValidateAll() if +// the designated constraints aren't met. +type UpdateClusterCredentialReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateClusterCredentialReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateClusterCredentialReqMultiError) AllErrors() []error { return m } + // UpdateClusterCredentialReqValidationError is the validation error returned // by UpdateClusterCredentialReq.Validate if the designated constraints aren't met. type UpdateClusterCredentialReqValidationError struct { @@ -15416,21 +25326,56 @@ var _ interface { // Validate checks the field values on UpdateClusterCredentialResp with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateClusterCredentialResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateClusterCredentialResp with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateClusterCredentialRespMultiError, or nil if none found. +func (m *UpdateClusterCredentialResp) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateClusterCredentialResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return UpdateClusterCredentialRespMultiError(errors) + } + return nil } +// UpdateClusterCredentialRespMultiError is an error wrapping multiple +// validation errors returned by UpdateClusterCredentialResp.ValidateAll() if +// the designated constraints aren't met. +type UpdateClusterCredentialRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateClusterCredentialRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateClusterCredentialRespMultiError) AllErrors() []error { return m } + // UpdateClusterCredentialRespValidationError is the validation error returned // by UpdateClusterCredentialResp.Validate if the designated constraints // aren't met. @@ -15490,22 +25435,61 @@ var _ interface { // Validate checks the field values on DeleteClusterCredentialReq with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteClusterCredentialReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteClusterCredentialReq with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteClusterCredentialReqMultiError, or nil if none found. +func (m *DeleteClusterCredentialReq) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteClusterCredentialReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetServerKey()); l < 2 || l > 100 { - return DeleteClusterCredentialReqValidationError{ + err := DeleteClusterCredentialReqValidationError{ field: "ServerKey", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DeleteClusterCredentialReqMultiError(errors) } return nil } +// DeleteClusterCredentialReqMultiError is an error wrapping multiple +// validation errors returned by DeleteClusterCredentialReq.ValidateAll() if +// the designated constraints aren't met. +type DeleteClusterCredentialReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteClusterCredentialReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteClusterCredentialReqMultiError) AllErrors() []error { return m } + // DeleteClusterCredentialReqValidationError is the validation error returned // by DeleteClusterCredentialReq.Validate if the designated constraints aren't met. type DeleteClusterCredentialReqValidationError struct { @@ -15564,21 +25548,56 @@ var _ interface { // Validate checks the field values on DeleteClusterCredentialResp with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteClusterCredentialResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteClusterCredentialResp with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteClusterCredentialRespMultiError, or nil if none found. +func (m *DeleteClusterCredentialResp) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteClusterCredentialResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return DeleteClusterCredentialRespMultiError(errors) + } + return nil } +// DeleteClusterCredentialRespMultiError is an error wrapping multiple +// validation errors returned by DeleteClusterCredentialResp.ValidateAll() if +// the designated constraints aren't met. +type DeleteClusterCredentialRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteClusterCredentialRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteClusterCredentialRespMultiError) AllErrors() []error { return m } + // DeleteClusterCredentialRespValidationError is the validation error returned // by DeleteClusterCredentialResp.Validate if the designated constraints // aren't met. @@ -15638,57 +25657,116 @@ var _ interface { // Validate checks the field values on ListClusterCredentialReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListClusterCredentialReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterCredentialReq with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListClusterCredentialReqMultiError, or nil if none found. +func (m *ListClusterCredentialReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterCredentialReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetServerKey()) > 100 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "ServerKey", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClientMode()) > 100 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "ClientMode", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetConnectMode()) > 100 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "ConnectMode", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if m.GetOffset() < 0 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "Offset", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetLimit() > 1000 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "Limit", reason: "value must be less than or equal to 1000", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListClusterCredentialReqMultiError(errors) } return nil } +// ListClusterCredentialReqMultiError is an error wrapping multiple validation +// errors returned by ListClusterCredentialReq.ValidateAll() if the designated +// constraints aren't met. +type ListClusterCredentialReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterCredentialReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListClusterCredentialReqMultiError) AllErrors() []error { return m } + // ListClusterCredentialReqValidationError is the validation error returned by // ListClusterCredentialReq.Validate if the designated constraints aren't met. type ListClusterCredentialReqValidationError struct { @@ -15747,12 +25825,26 @@ var _ interface { // Validate checks the field values on ListClusterCredentialResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListClusterCredentialResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterCredentialResp with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListClusterCredentialRespMultiError, or nil if none found. +func (m *ListClusterCredentialResp) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterCredentialResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -15762,7 +25854,26 @@ func (m *ListClusterCredentialResp) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterCredentialRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListClusterCredentialRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListClusterCredentialRespValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -15774,9 +25885,30 @@ func (m *ListClusterCredentialResp) Validate() error { } + if len(errors) > 0 { + return ListClusterCredentialRespMultiError(errors) + } + return nil } +// ListClusterCredentialRespMultiError is an error wrapping multiple validation +// errors returned by ListClusterCredentialResp.ValidateAll() if the +// designated constraints aren't met. +type ListClusterCredentialRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterCredentialRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListClusterCredentialRespMultiError) AllErrors() []error { return m } + // ListClusterCredentialRespValidationError is the validation error returned by // ListClusterCredentialResp.Validate if the designated constraints aren't met. type ListClusterCredentialRespValidationError struct { @@ -15835,15 +25967,50 @@ var _ interface { // Validate checks the field values on InitFederationClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *InitFederationClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InitFederationClusterReq with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// InitFederationClusterReqMultiError, or nil if none found. +func (m *InitFederationClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *InitFederationClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return InitFederationClusterReqMultiError(errors) + } + return nil } +// InitFederationClusterReqMultiError is an error wrapping multiple validation +// errors returned by InitFederationClusterReq.ValidateAll() if the designated +// constraints aren't met. +type InitFederationClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InitFederationClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m InitFederationClusterReqMultiError) AllErrors() []error { return m } + // InitFederationClusterReqValidationError is the validation error returned by // InitFederationClusterReq.Validate if the designated constraints aren't met. type InitFederationClusterReqValidationError struct { @@ -15902,15 +26069,50 @@ var _ interface { // Validate checks the field values on InitFederationClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *InitFederationClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InitFederationClusterResp with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// InitFederationClusterRespMultiError, or nil if none found. +func (m *InitFederationClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *InitFederationClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return InitFederationClusterRespMultiError(errors) + } + return nil } +// InitFederationClusterRespMultiError is an error wrapping multiple validation +// errors returned by InitFederationClusterResp.ValidateAll() if the +// designated constraints aren't met. +type InitFederationClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InitFederationClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m InitFederationClusterRespMultiError) AllErrors() []error { return m } + // InitFederationClusterRespValidationError is the validation error returned by // InitFederationClusterResp.Validate if the designated constraints aren't met. type InitFederationClusterRespValidationError struct { @@ -15969,19 +26171,54 @@ var _ interface { // Validate checks the field values on AddFederatedClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *AddFederatedClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AddFederatedClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// AddFederatedClusterReqMultiError, or nil if none found. +func (m *AddFederatedClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *AddFederatedClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for FederationClusterID // no validation rules for ClusterID + if len(errors) > 0 { + return AddFederatedClusterReqMultiError(errors) + } + return nil } +// AddFederatedClusterReqMultiError is an error wrapping multiple validation +// errors returned by AddFederatedClusterReq.ValidateAll() if the designated +// constraints aren't met. +type AddFederatedClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AddFederatedClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AddFederatedClusterReqMultiError) AllErrors() []error { return m } + // AddFederatedClusterReqValidationError is the validation error returned by // AddFederatedClusterReq.Validate if the designated constraints aren't met. type AddFederatedClusterReqValidationError struct { @@ -16040,21 +26277,56 @@ var _ interface { // Validate checks the field values on AddFederatedClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *AddFederatedClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AddFederatedClusterResp with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// AddFederatedClusterRespMultiError, or nil if none found. +func (m *AddFederatedClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *AddFederatedClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return AddFederatedClusterRespMultiError(errors) + } + return nil } +// AddFederatedClusterRespMultiError is an error wrapping multiple validation +// errors returned by AddFederatedClusterResp.ValidateAll() if the designated +// constraints aren't met. +type AddFederatedClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AddFederatedClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AddFederatedClusterRespMultiError) AllErrors() []error { return m } + // AddFederatedClusterRespValidationError is the validation error returned by // AddFederatedClusterResp.Validate if the designated constraints aren't met. type AddFederatedClusterRespValidationError struct { @@ -16113,70 +26385,173 @@ var _ interface { // Validate checks the field values on CreateCloudRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateCloudRequestMultiError, or nil if none found. +func (m *CreateCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 20 { - return CreateCloudRequestValidationError{ + err := CreateCloudRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return CreateCloudRequestValidationError{ + err := CreateCloudRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetName()); l < 2 || l > 64 { - return CreateCloudRequestValidationError{ + err := CreateCloudRequestValidationError{ field: "Name", reason: "value length must be between 2 and 64 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Editable - for key, val := range m.GetOpsPlugins() { - _ = val - - // no validation rules for OpsPlugins[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CreateCloudRequestValidationError{ - field: fmt.Sprintf("OpsPlugins[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetOpsPlugins())) + i := 0 + for key := range m.GetOpsPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetOpsPlugins()[key] + _ = val + + // no validation rules for OpsPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraPlugins() { - _ = val + { + sorted_keys := make([]string, len(m.GetExtraPlugins())) + i := 0 + for key := range m.GetExtraPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraPlugins()[key] + _ = val + + // no validation rules for ExtraPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for ExtraPlugins[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudCredential()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "CloudCredential", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return CreateCloudRequestValidationError{ - field: fmt.Sprintf("ExtraPlugins[%v]", key), + errors = append(errors, CreateCloudRequestValidationError{ + field: "CloudCredential", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "CloudCredential", @@ -16186,7 +26561,26 @@ func (m *CreateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetOsManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "OsManagement", @@ -16196,7 +26590,26 @@ func (m *CreateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "ClusterManagement", @@ -16206,7 +26619,26 @@ func (m *CreateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeGroupManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "NodeGroupManagement", @@ -16217,10 +26649,14 @@ func (m *CreateCloudRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateCloudRequestValidationError{ + err := CreateCloudRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for CloudProvider @@ -16233,7 +26669,26 @@ func (m *CreateCloudRequest) Validate() error { // no validation rules for Enable - if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "NetworkInfo", @@ -16243,7 +26698,26 @@ func (m *CreateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetConfInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "ConfInfo", @@ -16255,9 +26729,30 @@ func (m *CreateCloudRequest) Validate() error { // no validation rules for PlatformInfo + if len(errors) > 0 { + return CreateCloudRequestMultiError(errors) + } + return nil } +// CreateCloudRequestMultiError is an error wrapping multiple validation errors +// returned by CreateCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type CreateCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateCloudRequestMultiError) AllErrors() []error { return m } + // CreateCloudRequestValidationError is the validation error returned by // CreateCloudRequest.Validate if the designated constraints aren't met. type CreateCloudRequestValidationError struct { @@ -16318,21 +26813,56 @@ var _CreateCloudRequest_CloudID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on CreateCloudResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateCloudResponseMultiError, or nil if none found. +func (m *CreateCloudResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return CreateCloudResponseMultiError(errors) + } + return nil } +// CreateCloudResponseMultiError is an error wrapping multiple validation +// errors returned by CreateCloudResponse.ValidateAll() if the designated +// constraints aren't met. +type CreateCloudResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateCloudResponseMultiError) AllErrors() []error { return m } + // CreateCloudResponseValidationError is the validation error returned by // CreateCloudResponse.Validate if the designated constraints aren't met. type CreateCloudResponseValidationError struct { @@ -16391,63 +26921,162 @@ var _ interface { // Validate checks the field values on UpdateCloudRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateCloudRequestMultiError, or nil if none found. +func (m *UpdateCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) > 1024 { - return UpdateCloudRequestValidationError{ + err := UpdateCloudRequestValidationError{ field: "CloudID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetName()) > 1024 { - return UpdateCloudRequestValidationError{ + err := UpdateCloudRequestValidationError{ field: "Name", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Editable - for key, val := range m.GetOpsPlugins() { - _ = val - - // no validation rules for OpsPlugins[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return UpdateCloudRequestValidationError{ - field: fmt.Sprintf("OpsPlugins[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetOpsPlugins())) + i := 0 + for key := range m.GetOpsPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetOpsPlugins()[key] + _ = val + + // no validation rules for OpsPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraPlugins() { - _ = val + { + sorted_keys := make([]string, len(m.GetExtraPlugins())) + i := 0 + for key := range m.GetExtraPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraPlugins()[key] + _ = val + + // no validation rules for ExtraPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for ExtraPlugins[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudCredential()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "CloudCredential", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return UpdateCloudRequestValidationError{ - field: fmt.Sprintf("ExtraPlugins[%v]", key), + errors = append(errors, UpdateCloudRequestValidationError{ + field: "CloudCredential", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "CloudCredential", @@ -16457,7 +27086,26 @@ func (m *UpdateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetOsManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "OsManagement", @@ -16467,7 +27115,26 @@ func (m *UpdateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "ClusterManagement", @@ -16477,7 +27144,26 @@ func (m *UpdateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeGroupManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "NodeGroupManagement", @@ -16488,10 +27174,14 @@ func (m *UpdateCloudRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 1024 { - return UpdateCloudRequestValidationError{ + err := UpdateCloudRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for CloudProvider @@ -16504,7 +27194,26 @@ func (m *UpdateCloudRequest) Validate() error { // no validation rules for Enable - if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "NetworkInfo", @@ -16514,7 +27223,26 @@ func (m *UpdateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetConfInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "ConfInfo", @@ -16526,9 +27254,30 @@ func (m *UpdateCloudRequest) Validate() error { // no validation rules for PlatformInfo + if len(errors) > 0 { + return UpdateCloudRequestMultiError(errors) + } + return nil } +// UpdateCloudRequestMultiError is an error wrapping multiple validation errors +// returned by UpdateCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type UpdateCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateCloudRequestMultiError) AllErrors() []error { return m } + // UpdateCloudRequestValidationError is the validation error returned by // UpdateCloudRequest.Validate if the designated constraints aren't met. type UpdateCloudRequestValidationError struct { @@ -16587,19 +27336,52 @@ var _ interface { // Validate checks the field values on UpdateCloudResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateCloudResponseMultiError, or nil if none found. +func (m *UpdateCloudResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudResponseValidationError{ field: "Data", @@ -16609,9 +27391,30 @@ func (m *UpdateCloudResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateCloudResponseMultiError(errors) + } + return nil } +// UpdateCloudResponseMultiError is an error wrapping multiple validation +// errors returned by UpdateCloudResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateCloudResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateCloudResponseMultiError) AllErrors() []error { return m } + // UpdateCloudResponseValidationError is the validation error returned by // UpdateCloudResponse.Validate if the designated constraints aren't met. type UpdateCloudResponseValidationError struct { @@ -16670,31 +27473,74 @@ var _ interface { // Validate checks the field values on DeleteCloudRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteCloudRequestMultiError, or nil if none found. +func (m *DeleteCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 20 { - return DeleteCloudRequestValidationError{ + err := DeleteCloudRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteCloudRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return DeleteCloudRequestValidationError{ + err := DeleteCloudRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsForce + if len(errors) > 0 { + return DeleteCloudRequestMultiError(errors) + } + return nil } +// DeleteCloudRequestMultiError is an error wrapping multiple validation errors +// returned by DeleteCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type DeleteCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteCloudRequestMultiError) AllErrors() []error { return m } + // DeleteCloudRequestValidationError is the validation error returned by // DeleteCloudRequest.Validate if the designated constraints aren't met. type DeleteCloudRequestValidationError struct { @@ -16755,19 +27601,52 @@ var _DeleteCloudRequest_CloudID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on DeleteCloudResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteCloudResponseMultiError, or nil if none found. +func (m *DeleteCloudResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteCloudResponseValidationError{ field: "Data", @@ -16777,9 +27656,30 @@ func (m *DeleteCloudResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteCloudResponseMultiError(errors) + } + return nil } +// DeleteCloudResponseMultiError is an error wrapping multiple validation +// errors returned by DeleteCloudResponse.ValidateAll() if the designated +// constraints aren't met. +type DeleteCloudResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteCloudResponseMultiError) AllErrors() []error { return m } + // DeleteCloudResponseValidationError is the validation error returned by // DeleteCloudResponse.Validate if the designated constraints aren't met. type DeleteCloudResponseValidationError struct { @@ -16837,30 +27737,73 @@ var _ interface { } = DeleteCloudResponseValidationError{} // Validate checks the field values on GetCloudRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *GetCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetCloudRequestMultiError, or nil if none found. +func (m *GetCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 20 { - return GetCloudRequestValidationError{ + err := GetCloudRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_GetCloudRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return GetCloudRequestValidationError{ + err := GetCloudRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetCloudRequestMultiError(errors) } return nil } +// GetCloudRequestMultiError is an error wrapping multiple validation errors +// returned by GetCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type GetCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudRequestMultiError) AllErrors() []error { return m } + // GetCloudRequestValidationError is the validation error returned by // GetCloudRequest.Validate if the designated constraints aren't met. type GetCloudRequestValidationError struct { @@ -16918,20 +27861,53 @@ var _ interface { var _GetCloudRequest_CloudID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on GetCloudResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *GetCloudResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetCloudResponseMultiError, or nil if none found. +func (m *GetCloudResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetCloudResponseValidationError{ field: "Data", @@ -16941,9 +27917,30 @@ func (m *GetCloudResponse) Validate() error { } } + if len(errors) > 0 { + return GetCloudResponseMultiError(errors) + } + return nil } +// GetCloudResponseMultiError is an error wrapping multiple validation errors +// returned by GetCloudResponse.ValidateAll() if the designated constraints +// aren't met. +type GetCloudResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudResponseMultiError) AllErrors() []error { return m } + // GetCloudResponseValidationError is the validation error returned by // GetCloudResponse.Validate if the designated constraints aren't met. type GetCloudResponseValidationError struct { @@ -16999,18 +27996,36 @@ var _ interface { } = GetCloudResponseValidationError{} // Validate checks the field values on ListCloudRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ListCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudRequestMultiError, or nil if none found. +func (m *ListCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) > 20 { - return ListCloudRequestValidationError{ + err := ListCloudRequestValidationError{ field: "CloudID", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Name @@ -17023,9 +28038,30 @@ func (m *ListCloudRequest) Validate() error { // no validation rules for CloudProvider + if len(errors) > 0 { + return ListCloudRequestMultiError(errors) + } + return nil } +// ListCloudRequestMultiError is an error wrapping multiple validation errors +// returned by ListCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type ListCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudRequestMultiError) AllErrors() []error { return m } + // ListCloudRequestValidationError is the validation error returned by // ListCloudRequest.Validate if the designated constraints aren't met. type ListCloudRequestValidationError struct { @@ -17081,13 +28117,27 @@ var _ interface { } = ListCloudRequestValidationError{} // Validate checks the field values on ListCloudResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ListCloudResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudResponseMultiError, or nil if none found. +func (m *ListCloudResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -17097,7 +28147,26 @@ func (m *ListCloudResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -17109,9 +28178,30 @@ func (m *ListCloudResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudResponseMultiError(errors) + } + return nil } +// ListCloudResponseMultiError is an error wrapping multiple validation errors +// returned by ListCloudResponse.ValidateAll() if the designated constraints +// aren't met. +type ListCloudResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudResponseMultiError) AllErrors() []error { return m } + // ListCloudResponseValidationError is the validation error returned by // ListCloudResponse.Validate if the designated constraints aren't met. type ListCloudResponseValidationError struct { @@ -17170,64 +28260,125 @@ var _ interface { // Validate checks the field values on CreateNodeGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNodeGroupRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateNodeGroupRequestMultiError, or nil if none found. +func (m *CreateNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetName()); l < 1 || l > 255 { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "Name", reason: "value length must be between 1 and 255 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateNodeGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetRegion()); l < 1 || l > 32 { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "Region", reason: "value length must be between 1 and 32 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateNodeGroupRequest_Region_Pattern.MatchString(m.GetRegion()) { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for EnableAutoscale if m.GetAutoScaling() == nil { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "AutoScaling", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAutoScaling()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupRequestValidationError{ field: "AutoScaling", @@ -17238,13 +28389,36 @@ func (m *CreateNodeGroupRequest) Validate() error { } if m.GetLaunchTemplate() == nil { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "LaunchTemplate", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetLaunchTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupRequestValidationError{ field: "LaunchTemplate", @@ -17261,17 +28435,40 @@ func (m *CreateNodeGroupRequest) Validate() error { // no validation rules for NodeOS if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider // no validation rules for ConsumerID - if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupRequestValidationError{ field: "NodeTemplate", @@ -17289,7 +28486,26 @@ func (m *CreateNodeGroupRequest) Validate() error { // no validation rules for CloudAreaName - if v, ok := interface{}(m.GetExtra()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetExtra()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "Extra", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "Extra", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetExtra()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupRequestValidationError{ field: "Extra", @@ -17301,9 +28517,30 @@ func (m *CreateNodeGroupRequest) Validate() error { // no validation rules for OnlyCreateInfo + if len(errors) > 0 { + return CreateNodeGroupRequestMultiError(errors) + } + return nil } +// CreateNodeGroupRequestMultiError is an error wrapping multiple validation +// errors returned by CreateNodeGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type CreateNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNodeGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateNodeGroupRequestMultiError) AllErrors() []error { return m } + // CreateNodeGroupRequestValidationError is the validation error returned by // CreateNodeGroupRequest.Validate if the designated constraints aren't met. type CreateNodeGroupRequestValidationError struct { @@ -17365,20 +28602,55 @@ var _CreateNodeGroupRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z- var _CreateNodeGroupRequest_Region_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on GroupExtraInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *GroupExtraInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GroupExtraInfo with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in GroupExtraInfoMultiError, +// or nil if none found. +func (m *GroupExtraInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *GroupExtraInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Provider // no validation rules for PoolID + if len(errors) > 0 { + return GroupExtraInfoMultiError(errors) + } + return nil } +// GroupExtraInfoMultiError is an error wrapping multiple validation errors +// returned by GroupExtraInfo.ValidateAll() if the designated constraints +// aren't met. +type GroupExtraInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GroupExtraInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GroupExtraInfoMultiError) AllErrors() []error { return m } + // GroupExtraInfoValidationError is the validation error returned by // GroupExtraInfo.Validate if the designated constraints aren't met. type GroupExtraInfoValidationError struct { @@ -17435,19 +28707,52 @@ var _ interface { // Validate checks the field values on CreateNodeGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNodeGroupResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateNodeGroupResponseMultiError, or nil if none found. +func (m *CreateNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupResponseValidationError{ field: "Data", @@ -17457,7 +28762,26 @@ func (m *CreateNodeGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupResponseValidationError{ field: "WebAnnotations", @@ -17467,9 +28791,30 @@ func (m *CreateNodeGroupResponse) Validate() error { } } + if len(errors) > 0 { + return CreateNodeGroupResponseMultiError(errors) + } + return nil } +// CreateNodeGroupResponseMultiError is an error wrapping multiple validation +// errors returned by CreateNodeGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type CreateNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNodeGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateNodeGroupResponseMultiError) AllErrors() []error { return m } + // CreateNodeGroupResponseValidationError is the validation error returned by // CreateNodeGroupResponse.Validate if the designated constraints aren't met. type CreateNodeGroupResponseValidationError struct { @@ -17528,13 +28873,46 @@ var _ interface { // Validate checks the field values on CreateNodeGroupResponseData with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNodeGroupResponseData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNodeGroupResponseData with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateNodeGroupResponseDataMultiError, or nil if none found. +func (m *CreateNodeGroupResponseData) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNodeGroupResponseData) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetNodeGroup()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupResponseDataValidationError{ + field: "NodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupResponseDataValidationError{ + field: "NodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupResponseDataValidationError{ field: "NodeGroup", @@ -17544,7 +28922,26 @@ func (m *CreateNodeGroupResponseData) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupResponseDataValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupResponseDataValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupResponseDataValidationError{ field: "Task", @@ -17554,9 +28951,30 @@ func (m *CreateNodeGroupResponseData) Validate() error { } } + if len(errors) > 0 { + return CreateNodeGroupResponseDataMultiError(errors) + } + return nil } +// CreateNodeGroupResponseDataMultiError is an error wrapping multiple +// validation errors returned by CreateNodeGroupResponseData.ValidateAll() if +// the designated constraints aren't met. +type CreateNodeGroupResponseDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNodeGroupResponseDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateNodeGroupResponseDataMultiError) AllErrors() []error { return m } + // CreateNodeGroupResponseDataValidationError is the validation error returned // by CreateNodeGroupResponseData.Validate if the designated constraints // aren't met. @@ -17616,45 +29034,94 @@ var _ interface { // Validate checks the field values on UpdateNodeGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeGroupRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeGroupRequestMultiError, or nil if none found. +func (m *UpdateNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetNodeGroupID()) > 20 { - return UpdateNodeGroupRequestValidationError{ + err := UpdateNodeGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return UpdateNodeGroupRequestValidationError{ + err := UpdateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return UpdateNodeGroupRequestValidationError{ + err := UpdateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateNodeGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return UpdateNodeGroupRequestValidationError{ + err := UpdateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Name // no validation rules for Region - if v, ok := interface{}(m.GetEnableAutoscale()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetEnableAutoscale()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "EnableAutoscale", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "EnableAutoscale", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEnableAutoscale()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "EnableAutoscale", @@ -17664,7 +29131,26 @@ func (m *UpdateNodeGroupRequest) Validate() error { } } - if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAutoScaling()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "AutoScaling", @@ -17674,7 +29160,26 @@ func (m *UpdateNodeGroupRequest) Validate() error { } } - if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetLaunchTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "LaunchTemplate", @@ -17684,7 +29189,26 @@ func (m *UpdateNodeGroupRequest) Validate() error { } } - if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "NodeTemplate", @@ -17703,10 +29227,14 @@ func (m *UpdateNodeGroupRequest) Validate() error { // no validation rules for NodeOS if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 20 { - return UpdateNodeGroupRequestValidationError{ + err := UpdateNodeGroupRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider @@ -17715,7 +29243,26 @@ func (m *UpdateNodeGroupRequest) Validate() error { // no validation rules for Desc - if v, ok := interface{}(m.GetBkCloudID()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetBkCloudID()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "BkCloudID", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "BkCloudID", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetBkCloudID()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "BkCloudID", @@ -17725,7 +29272,26 @@ func (m *UpdateNodeGroupRequest) Validate() error { } } - if v, ok := interface{}(m.GetCloudAreaName()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudAreaName()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "CloudAreaName", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "CloudAreaName", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCloudAreaName()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "CloudAreaName", @@ -17739,9 +29305,30 @@ func (m *UpdateNodeGroupRequest) Validate() error { // no validation rules for ExtraInfo + if len(errors) > 0 { + return UpdateNodeGroupRequestMultiError(errors) + } + return nil } +// UpdateNodeGroupRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeGroupRequestMultiError) AllErrors() []error { return m } + // UpdateNodeGroupRequestValidationError is the validation error returned by // UpdateNodeGroupRequest.Validate if the designated constraints aren't met. type UpdateNodeGroupRequestValidationError struct { @@ -17802,19 +29389,52 @@ var _UpdateNodeGroupRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z- // Validate checks the field values on UpdateNodeGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeGroupResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeGroupResponseMultiError, or nil if none found. +func (m *UpdateNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupResponseValidationError{ field: "Data", @@ -17824,7 +29444,26 @@ func (m *UpdateNodeGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupResponseValidationError{ field: "WebAnnotations", @@ -17834,9 +29473,30 @@ func (m *UpdateNodeGroupResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeGroupResponseMultiError(errors) + } + return nil } +// UpdateNodeGroupResponseMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeGroupResponseMultiError) AllErrors() []error { return m } + // UpdateNodeGroupResponseValidationError is the validation error returned by // UpdateNodeGroupResponse.Validate if the designated constraints aren't met. type UpdateNodeGroupResponseValidationError struct { @@ -17895,24 +29555,46 @@ var _ interface { // Validate checks the field values on DeleteNodeGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodeGroupRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteNodeGroupRequestMultiError, or nil if none found. +func (m *DeleteNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return DeleteNodeGroupRequestValidationError{ + err := DeleteNodeGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteNodeGroupRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return DeleteNodeGroupRequestValidationError{ + err := DeleteNodeGroupRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsForce @@ -17922,17 +29604,42 @@ func (m *DeleteNodeGroupRequest) Validate() error { // no validation rules for KeepNodesInstance if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 100 { - return DeleteNodeGroupRequestValidationError{ + err := DeleteNodeGroupRequestValidationError{ field: "Operator", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for OnlyDeleteInfo + if len(errors) > 0 { + return DeleteNodeGroupRequestMultiError(errors) + } + return nil } +// DeleteNodeGroupRequestMultiError is an error wrapping multiple validation +// errors returned by DeleteNodeGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type DeleteNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodeGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteNodeGroupRequestMultiError) AllErrors() []error { return m } + // DeleteNodeGroupRequestValidationError is the validation error returned by // DeleteNodeGroupRequest.Validate if the designated constraints aren't met. type DeleteNodeGroupRequestValidationError struct { @@ -17993,19 +29700,52 @@ var _DeleteNodeGroupRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0-9a-zA- // Validate checks the field values on DeleteNodeGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodeGroupResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteNodeGroupResponseMultiError, or nil if none found. +func (m *DeleteNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodeGroupResponseValidationError{ field: "Data", @@ -18015,7 +29755,26 @@ func (m *DeleteNodeGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodeGroupResponseValidationError{ field: "WebAnnotations", @@ -18025,9 +29784,30 @@ func (m *DeleteNodeGroupResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteNodeGroupResponseMultiError(errors) + } + return nil } +// DeleteNodeGroupResponseMultiError is an error wrapping multiple validation +// errors returned by DeleteNodeGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type DeleteNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodeGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteNodeGroupResponseMultiError) AllErrors() []error { return m } + // DeleteNodeGroupResponseValidationError is the validation error returned by // DeleteNodeGroupResponse.Validate if the designated constraints aren't met. type DeleteNodeGroupResponseValidationError struct { @@ -18086,13 +29866,46 @@ var _ interface { // Validate checks the field values on DeleteNodeGroupResponseData with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodeGroupResponseData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodeGroupResponseData with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteNodeGroupResponseDataMultiError, or nil if none found. +func (m *DeleteNodeGroupResponseData) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodeGroupResponseData) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetNodeGroup()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodeGroupResponseDataValidationError{ + field: "NodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodeGroupResponseDataValidationError{ + field: "NodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodeGroupResponseDataValidationError{ field: "NodeGroup", @@ -18102,7 +29915,26 @@ func (m *DeleteNodeGroupResponseData) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodeGroupResponseDataValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodeGroupResponseDataValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodeGroupResponseDataValidationError{ field: "Task", @@ -18112,9 +29944,30 @@ func (m *DeleteNodeGroupResponseData) Validate() error { } } + if len(errors) > 0 { + return DeleteNodeGroupResponseDataMultiError(errors) + } + return nil } +// DeleteNodeGroupResponseDataMultiError is an error wrapping multiple +// validation errors returned by DeleteNodeGroupResponseData.ValidateAll() if +// the designated constraints aren't met. +type DeleteNodeGroupResponseDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodeGroupResponseDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteNodeGroupResponseDataMultiError) AllErrors() []error { return m } + // DeleteNodeGroupResponseDataValidationError is the validation error returned // by DeleteNodeGroupResponseData.Validate if the designated constraints // aren't met. @@ -18174,29 +30027,72 @@ var _ interface { // Validate checks the field values on GetNodeGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeGroupRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetNodeGroupRequestMultiError, or nil if none found. +func (m *GetNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return GetNodeGroupRequestValidationError{ + err := GetNodeGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_GetNodeGroupRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return GetNodeGroupRequestValidationError{ + err := GetNodeGroupRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetNodeGroupRequestMultiError(errors) } return nil } +// GetNodeGroupRequestMultiError is an error wrapping multiple validation +// errors returned by GetNodeGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type GetNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetNodeGroupRequestMultiError) AllErrors() []error { return m } + // GetNodeGroupRequestValidationError is the validation error returned by // GetNodeGroupRequest.Validate if the designated constraints aren't met. type GetNodeGroupRequestValidationError struct { @@ -18257,19 +30153,52 @@ var _GetNodeGroupRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-] // Validate checks the field values on GetNodeGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeGroupResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetNodeGroupResponseMultiError, or nil if none found. +func (m *GetNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeGroupResponseValidationError{ field: "Data", @@ -18279,7 +30208,26 @@ func (m *GetNodeGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeGroupResponseValidationError{ field: "WebAnnotations", @@ -18289,9 +30237,30 @@ func (m *GetNodeGroupResponse) Validate() error { } } + if len(errors) > 0 { + return GetNodeGroupResponseMultiError(errors) + } + return nil } +// GetNodeGroupResponseMultiError is an error wrapping multiple validation +// errors returned by GetNodeGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type GetNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetNodeGroupResponseMultiError) AllErrors() []error { return m } + // GetNodeGroupResponseValidationError is the validation error returned by // GetNodeGroupResponse.Validate if the designated constraints aren't met. type GetNodeGroupResponseValidationError struct { @@ -18350,38 +30319,85 @@ var _ interface { // Validate checks the field values on ListClusterNodeGroupRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListClusterNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterNodeGroupRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListClusterNodeGroupRequestMultiError, or nil if none found. +func (m *ListClusterNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return ListClusterNodeGroupRequestValidationError{ + err := ListClusterNodeGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return ListClusterNodeGroupRequestValidationError{ + err := ListClusterNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_ListClusterNodeGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return ListClusterNodeGroupRequestValidationError{ + err := ListClusterNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for EnableFilter + if len(errors) > 0 { + return ListClusterNodeGroupRequestMultiError(errors) + } + return nil } +// ListClusterNodeGroupRequestMultiError is an error wrapping multiple +// validation errors returned by ListClusterNodeGroupRequest.ValidateAll() if +// the designated constraints aren't met. +type ListClusterNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterNodeGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListClusterNodeGroupRequestMultiError) AllErrors() []error { return m } + // ListClusterNodeGroupRequestValidationError is the validation error returned // by ListClusterNodeGroupRequest.Validate if the designated constraints // aren't met. @@ -18443,12 +30459,26 @@ var _ListClusterNodeGroupRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a- // Validate checks the field values on ListClusterNodeGroupResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListClusterNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterNodeGroupResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListClusterNodeGroupResponseMultiError, or nil if none found. +func (m *ListClusterNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -18458,7 +30488,26 @@ func (m *ListClusterNodeGroupResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterNodeGroupResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListClusterNodeGroupResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListClusterNodeGroupResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -18470,7 +30519,26 @@ func (m *ListClusterNodeGroupResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListClusterNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListClusterNodeGroupResponseValidationError{ field: "WebAnnotations", @@ -18480,9 +30548,30 @@ func (m *ListClusterNodeGroupResponse) Validate() error { } } + if len(errors) > 0 { + return ListClusterNodeGroupResponseMultiError(errors) + } + return nil } +// ListClusterNodeGroupResponseMultiError is an error wrapping multiple +// validation errors returned by ListClusterNodeGroupResponse.ValidateAll() if +// the designated constraints aren't met. +type ListClusterNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterNodeGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListClusterNodeGroupResponseMultiError) AllErrors() []error { return m } + // ListClusterNodeGroupResponseValidationError is the validation error returned // by ListClusterNodeGroupResponse.Validate if the designated constraints // aren't met. @@ -18542,12 +30631,26 @@ var _ interface { // Validate checks the field values on ListNodeGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodeGroupRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodeGroupRequestMultiError, or nil if none found. +func (m *ListNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for ClusterID @@ -18556,9 +30659,30 @@ func (m *ListNodeGroupRequest) Validate() error { // no validation rules for ProjectID + if len(errors) > 0 { + return ListNodeGroupRequestMultiError(errors) + } + return nil } +// ListNodeGroupRequestMultiError is an error wrapping multiple validation +// errors returned by ListNodeGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type ListNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodeGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodeGroupRequestMultiError) AllErrors() []error { return m } + // ListNodeGroupRequestValidationError is the validation error returned by // ListNodeGroupRequest.Validate if the designated constraints aren't met. type ListNodeGroupRequestValidationError struct { @@ -18617,12 +30741,26 @@ var _ interface { // Validate checks the field values on ListNodeGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodeGroupResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodeGroupResponseMultiError, or nil if none found. +func (m *ListNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -18632,7 +30770,26 @@ func (m *ListNodeGroupResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodeGroupResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodeGroupResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodeGroupResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -18644,9 +30801,30 @@ func (m *ListNodeGroupResponse) Validate() error { } + if len(errors) > 0 { + return ListNodeGroupResponseMultiError(errors) + } + return nil } +// ListNodeGroupResponseMultiError is an error wrapping multiple validation +// errors returned by ListNodeGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type ListNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodeGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodeGroupResponseMultiError) AllErrors() []error { return m } + // ListNodeGroupResponseValidationError is the validation error returned by // ListNodeGroupResponse.Validate if the designated constraints aren't met. type ListNodeGroupResponseValidationError struct { @@ -18704,39 +30882,69 @@ var _ interface { } = ListNodeGroupResponseValidationError{} // Validate checks the field values on AddNodesRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *AddNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AddNodesRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// AddNodesRequestMultiError, or nil if none found. +func (m *AddNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *AddNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_AddNodesRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if len(m.GetNodes()) < 1 { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: "Nodes", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } _AddNodesRequest_Nodes_Unique := make(map[string]struct{}, len(m.GetNodes())) @@ -18745,10 +30953,14 @@ func (m *AddNodesRequest) Validate() error { _, _ = idx, item if _, exists := _AddNodesRequest_Nodes_Unique[item]; exists { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), reason: "repeated value must contain unique items", } + if !all { + return err + } + errors = append(errors, err) } else { _AddNodesRequest_Nodes_Unique[item] = struct{}{} } @@ -18763,17 +30975,40 @@ func (m *AddNodesRequest) Validate() error { // no validation rules for OnlyCreateInfo if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 20 { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: "Operator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for NodeTemplateID // no validation rules for IsExternalNode - if v, ok := interface{}(m.GetLogin()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetLogin()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddNodesRequestValidationError{ + field: "Login", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddNodesRequestValidationError{ + field: "Login", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLogin()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return AddNodesRequestValidationError{ field: "Login", @@ -18783,9 +31018,30 @@ func (m *AddNodesRequest) Validate() error { } } + if len(errors) > 0 { + return AddNodesRequestMultiError(errors) + } + return nil } +// AddNodesRequestMultiError is an error wrapping multiple validation errors +// returned by AddNodesRequest.ValidateAll() if the designated constraints +// aren't met. +type AddNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AddNodesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AddNodesRequestMultiError) AllErrors() []error { return m } + // AddNodesRequestValidationError is the validation error returned by // AddNodesRequest.Validate if the designated constraints aren't met. type AddNodesRequestValidationError struct { @@ -18843,20 +31099,53 @@ var _ interface { var _AddNodesRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on AddNodesResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *AddNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AddNodesResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// AddNodesResponseMultiError, or nil if none found. +func (m *AddNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *AddNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return AddNodesResponseValidationError{ field: "Data", @@ -18866,7 +31155,26 @@ func (m *AddNodesResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return AddNodesResponseValidationError{ field: "WebAnnotations", @@ -18876,9 +31184,30 @@ func (m *AddNodesResponse) Validate() error { } } + if len(errors) > 0 { + return AddNodesResponseMultiError(errors) + } + return nil } +// AddNodesResponseMultiError is an error wrapping multiple validation errors +// returned by AddNodesResponse.ValidateAll() if the designated constraints +// aren't met. +type AddNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AddNodesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AddNodesResponseMultiError) AllErrors() []error { return m } + // AddNodesResponseValidationError is the validation error returned by // AddNodesResponse.Validate if the designated constraints aren't met. type AddNodesResponseValidationError struct { @@ -18935,31 +31264,57 @@ var _ interface { // Validate checks the field values on BatchDeleteClusterNodesRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *BatchDeleteClusterNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on BatchDeleteClusterNodesRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// BatchDeleteClusterNodesRequestMultiError, or nil if none found. +func (m *BatchDeleteClusterNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *BatchDeleteClusterNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return BatchDeleteClusterNodesRequestValidationError{ + err := BatchDeleteClusterNodesRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return BatchDeleteClusterNodesRequestValidationError{ + err := BatchDeleteClusterNodesRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_BatchDeleteClusterNodesRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return BatchDeleteClusterNodesRequestValidationError{ + err := BatchDeleteClusterNodesRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for NodeIPs @@ -18967,17 +31322,42 @@ func (m *BatchDeleteClusterNodesRequest) Validate() error { // no validation rules for VirtualNodeIDs if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 20 { - return BatchDeleteClusterNodesRequestValidationError{ + err := BatchDeleteClusterNodesRequestValidationError{ field: "Operator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for DeleteMode + if len(errors) > 0 { + return BatchDeleteClusterNodesRequestMultiError(errors) + } + return nil } +// BatchDeleteClusterNodesRequestMultiError is an error wrapping multiple +// validation errors returned by BatchDeleteClusterNodesRequest.ValidateAll() +// if the designated constraints aren't met. +type BatchDeleteClusterNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m BatchDeleteClusterNodesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m BatchDeleteClusterNodesRequestMultiError) AllErrors() []error { return m } + // BatchDeleteClusterNodesRequestValidationError is the validation error // returned by BatchDeleteClusterNodesRequest.Validate if the designated // constraints aren't met. @@ -19039,12 +31419,26 @@ var _BatchDeleteClusterNodesRequest_ClusterID_Pattern = regexp.MustCompile("^[0- // Validate checks the field values on BatchDeleteClusterNodesResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *BatchDeleteClusterNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on BatchDeleteClusterNodesResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// BatchDeleteClusterNodesResponseMultiError, or nil if none found. +func (m *BatchDeleteClusterNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *BatchDeleteClusterNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -19054,7 +31448,26 @@ func (m *BatchDeleteClusterNodesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, BatchDeleteClusterNodesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, BatchDeleteClusterNodesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return BatchDeleteClusterNodesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -19066,7 +31479,26 @@ func (m *BatchDeleteClusterNodesResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, BatchDeleteClusterNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, BatchDeleteClusterNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return BatchDeleteClusterNodesResponseValidationError{ field: "WebAnnotations", @@ -19076,9 +31508,30 @@ func (m *BatchDeleteClusterNodesResponse) Validate() error { } } + if len(errors) > 0 { + return BatchDeleteClusterNodesResponseMultiError(errors) + } + return nil } +// BatchDeleteClusterNodesResponseMultiError is an error wrapping multiple +// validation errors returned by BatchDeleteClusterNodesResponse.ValidateAll() +// if the designated constraints aren't met. +type BatchDeleteClusterNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m BatchDeleteClusterNodesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m BatchDeleteClusterNodesResponseMultiError) AllErrors() []error { return m } + // BatchDeleteClusterNodesResponseValidationError is the validation error // returned by BatchDeleteClusterNodesResponse.Validate if the designated // constraints aren't met. @@ -19137,13 +31590,27 @@ var _ interface { } = BatchDeleteClusterNodesResponseValidationError{} // Validate checks the field values on BatchNodesStatus with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *BatchNodesStatus) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on BatchNodesStatus with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// BatchNodesStatusMultiError, or nil if none found. +func (m *BatchNodesStatus) ValidateAll() error { + return m.validate(true) +} + +func (m *BatchNodesStatus) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Success // no validation rules for Message @@ -19154,9 +31621,30 @@ func (m *BatchNodesStatus) Validate() error { // no validation rules for NodeGroupType + if len(errors) > 0 { + return BatchNodesStatusMultiError(errors) + } + return nil } +// BatchNodesStatusMultiError is an error wrapping multiple validation errors +// returned by BatchNodesStatus.ValidateAll() if the designated constraints +// aren't met. +type BatchNodesStatusMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m BatchNodesStatusMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m BatchNodesStatusMultiError) AllErrors() []error { return m } + // BatchNodesStatusValidationError is the validation error returned by // BatchNodesStatus.Validate if the designated constraints aren't met. type BatchNodesStatusValidationError struct { @@ -19213,38 +31701,68 @@ var _ interface { // Validate checks the field values on DeleteNodesRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodesRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteNodesRequestMultiError, or nil if none found. +func (m *DeleteNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return DeleteNodesRequestValidationError{ + err := DeleteNodesRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return DeleteNodesRequestValidationError{ + err := DeleteNodesRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteNodesRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return DeleteNodesRequestValidationError{ + err := DeleteNodesRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetNodes()) < 1 { - return DeleteNodesRequestValidationError{ + err := DeleteNodesRequestValidationError{ field: "Nodes", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for DeleteMode @@ -19252,10 +31770,14 @@ func (m *DeleteNodesRequest) Validate() error { // no validation rules for IsForce if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 20 { - return DeleteNodesRequestValidationError{ + err := DeleteNodesRequestValidationError{ field: "Operator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for OnlyDeleteInfo @@ -19266,9 +31788,30 @@ func (m *DeleteNodesRequest) Validate() error { // no validation rules for IsExternalNode + if len(errors) > 0 { + return DeleteNodesRequestMultiError(errors) + } + return nil } +// DeleteNodesRequestMultiError is an error wrapping multiple validation errors +// returned by DeleteNodesRequest.ValidateAll() if the designated constraints +// aren't met. +type DeleteNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteNodesRequestMultiError) AllErrors() []error { return m } + // DeleteNodesRequestValidationError is the validation error returned by // DeleteNodesRequest.Validate if the designated constraints aren't met. type DeleteNodesRequestValidationError struct { @@ -19329,19 +31872,52 @@ var _DeleteNodesRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$" // Validate checks the field values on DeleteNodesResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodesResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteNodesResponseMultiError, or nil if none found. +func (m *DeleteNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodesResponseValidationError{ field: "Data", @@ -19351,7 +31927,26 @@ func (m *DeleteNodesResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodesResponseValidationError{ field: "WebAnnotations", @@ -19361,9 +31956,30 @@ func (m *DeleteNodesResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteNodesResponseMultiError(errors) + } + return nil } +// DeleteNodesResponseMultiError is an error wrapping multiple validation +// errors returned by DeleteNodesResponse.ValidateAll() if the designated +// constraints aren't met. +type DeleteNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteNodesResponseMultiError) AllErrors() []error { return m } + // DeleteNodesResponseValidationError is the validation error returned by // DeleteNodesResponse.Validate if the designated constraints aren't met. type DeleteNodesResponseValidationError struct { @@ -19422,38 +32038,68 @@ var _ interface { // Validate checks the field values on MoveNodesToGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *MoveNodesToGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MoveNodesToGroupRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// MoveNodesToGroupRequestMultiError, or nil if none found. +func (m *MoveNodesToGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *MoveNodesToGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 5 || l > 100 { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_MoveNodesToGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := len(m.GetNodes()); l < 1 || l > 100 { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "Nodes", reason: "value must contain between 1 and 100 items, inclusive", } + if !all { + return err + } + errors = append(errors, err) } _MoveNodesToGroupRequest_Nodes_Unique := make(map[string]struct{}, len(m.GetNodes())) @@ -19462,10 +32108,14 @@ func (m *MoveNodesToGroupRequest) Validate() error { _, _ = idx, item if _, exists := _MoveNodesToGroupRequest_Nodes_Unique[item]; exists { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), reason: "repeated value must contain unique items", } + if !all { + return err + } + errors = append(errors, err) } else { _MoveNodesToGroupRequest_Nodes_Unique[item] = struct{}{} } @@ -19474,22 +32124,51 @@ func (m *MoveNodesToGroupRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_MoveNodesToGroupRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return MoveNodesToGroupRequestMultiError(errors) } return nil } +// MoveNodesToGroupRequestMultiError is an error wrapping multiple validation +// errors returned by MoveNodesToGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type MoveNodesToGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MoveNodesToGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m MoveNodesToGroupRequestMultiError) AllErrors() []error { return m } + // MoveNodesToGroupRequestValidationError is the validation error returned by // MoveNodesToGroupRequest.Validate if the designated constraints aren't met. type MoveNodesToGroupRequestValidationError struct { @@ -19552,19 +32231,52 @@ var _MoveNodesToGroupRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0-9a-zA // Validate checks the field values on MoveNodesToGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *MoveNodesToGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MoveNodesToGroupResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// MoveNodesToGroupResponseMultiError, or nil if none found. +func (m *MoveNodesToGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *MoveNodesToGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, MoveNodesToGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, MoveNodesToGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return MoveNodesToGroupResponseValidationError{ field: "Data", @@ -19574,7 +32286,26 @@ func (m *MoveNodesToGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, MoveNodesToGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, MoveNodesToGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return MoveNodesToGroupResponseValidationError{ field: "WebAnnotations", @@ -19584,9 +32315,30 @@ func (m *MoveNodesToGroupResponse) Validate() error { } } + if len(errors) > 0 { + return MoveNodesToGroupResponseMultiError(errors) + } + return nil } +// MoveNodesToGroupResponseMultiError is an error wrapping multiple validation +// errors returned by MoveNodesToGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type MoveNodesToGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MoveNodesToGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m MoveNodesToGroupResponseMultiError) AllErrors() []error { return m } + // MoveNodesToGroupResponseValidationError is the validation error returned by // MoveNodesToGroupResponse.Validate if the designated constraints aren't met. type MoveNodesToGroupResponseValidationError struct { @@ -19645,38 +32397,68 @@ var _ interface { // Validate checks the field values on RemoveNodesFromGroupRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *RemoveNodesFromGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RemoveNodesFromGroupRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// RemoveNodesFromGroupRequestMultiError, or nil if none found. +func (m *RemoveNodesFromGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *RemoveNodesFromGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 5 || l > 100 { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_RemoveNodesFromGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := len(m.GetNodes()); l < 1 || l > 100 { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "Nodes", reason: "value must contain between 1 and 100 items, inclusive", } + if !all { + return err + } + errors = append(errors, err) } _RemoveNodesFromGroupRequest_Nodes_Unique := make(map[string]struct{}, len(m.GetNodes())) @@ -19685,10 +32467,14 @@ func (m *RemoveNodesFromGroupRequest) Validate() error { _, _ = idx, item if _, exists := _RemoveNodesFromGroupRequest_Nodes_Unique[item]; exists { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), reason: "repeated value must contain unique items", } + if !all { + return err + } + errors = append(errors, err) } else { _RemoveNodesFromGroupRequest_Nodes_Unique[item] = struct{}{} } @@ -19697,22 +32483,51 @@ func (m *RemoveNodesFromGroupRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_RemoveNodesFromGroupRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return RemoveNodesFromGroupRequestMultiError(errors) } return nil } +// RemoveNodesFromGroupRequestMultiError is an error wrapping multiple +// validation errors returned by RemoveNodesFromGroupRequest.ValidateAll() if +// the designated constraints aren't met. +type RemoveNodesFromGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RemoveNodesFromGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RemoveNodesFromGroupRequestMultiError) AllErrors() []error { return m } + // RemoveNodesFromGroupRequestValidationError is the validation error returned // by RemoveNodesFromGroupRequest.Validate if the designated constraints // aren't met. @@ -19776,19 +32591,52 @@ var _RemoveNodesFromGroupRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0-9 // Validate checks the field values on RemoveNodesFromGroupResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *RemoveNodesFromGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RemoveNodesFromGroupResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// RemoveNodesFromGroupResponseMultiError, or nil if none found. +func (m *RemoveNodesFromGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *RemoveNodesFromGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RemoveNodesFromGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RemoveNodesFromGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RemoveNodesFromGroupResponseValidationError{ field: "Data", @@ -19798,7 +32646,26 @@ func (m *RemoveNodesFromGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RemoveNodesFromGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RemoveNodesFromGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RemoveNodesFromGroupResponseValidationError{ field: "WebAnnotations", @@ -19808,9 +32675,30 @@ func (m *RemoveNodesFromGroupResponse) Validate() error { } } + if len(errors) > 0 { + return RemoveNodesFromGroupResponseMultiError(errors) + } + return nil } +// RemoveNodesFromGroupResponseMultiError is an error wrapping multiple +// validation errors returned by RemoveNodesFromGroupResponse.ValidateAll() if +// the designated constraints aren't met. +type RemoveNodesFromGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RemoveNodesFromGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RemoveNodesFromGroupResponseMultiError) AllErrors() []error { return m } + // RemoveNodesFromGroupResponseValidationError is the validation error returned // by RemoveNodesFromGroupResponse.Validate if the designated constraints // aren't met. @@ -19870,38 +32758,68 @@ var _ interface { // Validate checks the field values on CleanNodesInGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CleanNodesInGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CleanNodesInGroupRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CleanNodesInGroupRequestMultiError, or nil if none found. +func (m *CleanNodesInGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CleanNodesInGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 5 || l > 100 { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_CleanNodesInGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := len(m.GetNodes()); l < 1 || l > 100 { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "Nodes", reason: "value must contain between 1 and 100 items, inclusive", } + if !all { + return err + } + errors = append(errors, err) } _CleanNodesInGroupRequest_Nodes_Unique := make(map[string]struct{}, len(m.GetNodes())) @@ -19910,10 +32828,14 @@ func (m *CleanNodesInGroupRequest) Validate() error { _, _ = idx, item if _, exists := _CleanNodesInGroupRequest_Nodes_Unique[item]; exists { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), reason: "repeated value must contain unique items", } + if !all { + return err + } + errors = append(errors, err) } else { _CleanNodesInGroupRequest_Nodes_Unique[item] = struct{}{} } @@ -19922,29 +32844,62 @@ func (m *CleanNodesInGroupRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CleanNodesInGroupRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 20 { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "Operator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return CleanNodesInGroupRequestMultiError(errors) } return nil } +// CleanNodesInGroupRequestMultiError is an error wrapping multiple validation +// errors returned by CleanNodesInGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type CleanNodesInGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CleanNodesInGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CleanNodesInGroupRequestMultiError) AllErrors() []error { return m } + // CleanNodesInGroupRequestValidationError is the validation error returned by // CleanNodesInGroupRequest.Validate if the designated constraints aren't met. type CleanNodesInGroupRequestValidationError struct { @@ -20007,19 +32962,52 @@ var _CleanNodesInGroupRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0-9a-z // Validate checks the field values on CleanNodesInGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CleanNodesInGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CleanNodesInGroupResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CleanNodesInGroupResponseMultiError, or nil if none found. +func (m *CleanNodesInGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CleanNodesInGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CleanNodesInGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CleanNodesInGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CleanNodesInGroupResponseValidationError{ field: "Data", @@ -20029,7 +33017,26 @@ func (m *CleanNodesInGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CleanNodesInGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CleanNodesInGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CleanNodesInGroupResponseValidationError{ field: "WebAnnotations", @@ -20039,9 +33046,30 @@ func (m *CleanNodesInGroupResponse) Validate() error { } } + if len(errors) > 0 { + return CleanNodesInGroupResponseMultiError(errors) + } + return nil } +// CleanNodesInGroupResponseMultiError is an error wrapping multiple validation +// errors returned by CleanNodesInGroupResponse.ValidateAll() if the +// designated constraints aren't met. +type CleanNodesInGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CleanNodesInGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CleanNodesInGroupResponseMultiError) AllErrors() []error { return m } + // CleanNodesInGroupResponseValidationError is the validation error returned by // CleanNodesInGroupResponse.Validate if the designated constraints aren't met. type CleanNodesInGroupResponseValidationError struct { @@ -20100,64 +33128,127 @@ var _ interface { // Validate checks the field values on CleanNodesInGroupV2Request with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CleanNodesInGroupV2Request) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CleanNodesInGroupV2Request with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CleanNodesInGroupV2RequestMultiError, or nil if none found. +func (m *CleanNodesInGroupV2Request) ValidateAll() error { + return m.validate(true) +} + +func (m *CleanNodesInGroupV2Request) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 5 || l > 100 { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "ClusterID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_CleanNodesInGroupV2Request_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetNodes()) < 1 { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "Nodes", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CleanNodesInGroupV2Request_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 20 { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "Operator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return CleanNodesInGroupV2RequestMultiError(errors) } return nil } +// CleanNodesInGroupV2RequestMultiError is an error wrapping multiple +// validation errors returned by CleanNodesInGroupV2Request.ValidateAll() if +// the designated constraints aren't met. +type CleanNodesInGroupV2RequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CleanNodesInGroupV2RequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CleanNodesInGroupV2RequestMultiError) AllErrors() []error { return m } + // CleanNodesInGroupV2RequestValidationError is the validation error returned // by CleanNodesInGroupV2Request.Validate if the designated constraints aren't met. type CleanNodesInGroupV2RequestValidationError struct { @@ -20220,19 +33311,52 @@ var _CleanNodesInGroupV2Request_NodeGroupID_Pattern = regexp.MustCompile("^[0-9a // Validate checks the field values on CleanNodesInGroupV2Response with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CleanNodesInGroupV2Response) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CleanNodesInGroupV2Response with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CleanNodesInGroupV2ResponseMultiError, or nil if none found. +func (m *CleanNodesInGroupV2Response) ValidateAll() error { + return m.validate(true) +} + +func (m *CleanNodesInGroupV2Response) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CleanNodesInGroupV2ResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CleanNodesInGroupV2ResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CleanNodesInGroupV2ResponseValidationError{ field: "Data", @@ -20242,7 +33366,26 @@ func (m *CleanNodesInGroupV2Response) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CleanNodesInGroupV2ResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CleanNodesInGroupV2ResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CleanNodesInGroupV2ResponseValidationError{ field: "WebAnnotations", @@ -20252,9 +33395,30 @@ func (m *CleanNodesInGroupV2Response) Validate() error { } } + if len(errors) > 0 { + return CleanNodesInGroupV2ResponseMultiError(errors) + } + return nil } +// CleanNodesInGroupV2ResponseMultiError is an error wrapping multiple +// validation errors returned by CleanNodesInGroupV2Response.ValidateAll() if +// the designated constraints aren't met. +type CleanNodesInGroupV2ResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CleanNodesInGroupV2ResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CleanNodesInGroupV2ResponseMultiError) AllErrors() []error { return m } + // CleanNodesInGroupV2ResponseValidationError is the validation error returned // by CleanNodesInGroupV2Response.Validate if the designated constraints // aren't met. @@ -20314,31 +33478,74 @@ var _ interface { // Validate checks the field values on ListNodesInGroupV2Request with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodesInGroupV2Request) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodesInGroupV2Request with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodesInGroupV2RequestMultiError, or nil if none found. +func (m *ListNodesInGroupV2Request) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodesInGroupV2Request) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return ListNodesInGroupV2RequestValidationError{ + err := ListNodesInGroupV2RequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_ListNodesInGroupV2Request_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return ListNodesInGroupV2RequestValidationError{ + err := ListNodesInGroupV2RequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Output + if len(errors) > 0 { + return ListNodesInGroupV2RequestMultiError(errors) + } + return nil } +// ListNodesInGroupV2RequestMultiError is an error wrapping multiple validation +// errors returned by ListNodesInGroupV2Request.ValidateAll() if the +// designated constraints aren't met. +type ListNodesInGroupV2RequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodesInGroupV2RequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodesInGroupV2RequestMultiError) AllErrors() []error { return m } + // ListNodesInGroupV2RequestValidationError is the validation error returned by // ListNodesInGroupV2Request.Validate if the designated constraints aren't met. type ListNodesInGroupV2RequestValidationError struct { @@ -20399,12 +33606,26 @@ var _ListNodesInGroupV2Request_NodeGroupID_Pattern = regexp.MustCompile("^[0-9a- // Validate checks the field values on ListNodesInGroupV2Response with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodesInGroupV2Response) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodesInGroupV2Response with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodesInGroupV2ResponseMultiError, or nil if none found. +func (m *ListNodesInGroupV2Response) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodesInGroupV2Response) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -20414,7 +33635,26 @@ func (m *ListNodesInGroupV2Response) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInGroupV2ResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInGroupV2ResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodesInGroupV2ResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -20426,7 +33666,26 @@ func (m *ListNodesInGroupV2Response) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInGroupV2ResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInGroupV2ResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodesInGroupV2ResponseValidationError{ field: "WebAnnotations", @@ -20436,9 +33695,30 @@ func (m *ListNodesInGroupV2Response) Validate() error { } } + if len(errors) > 0 { + return ListNodesInGroupV2ResponseMultiError(errors) + } + return nil } +// ListNodesInGroupV2ResponseMultiError is an error wrapping multiple +// validation errors returned by ListNodesInGroupV2Response.ValidateAll() if +// the designated constraints aren't met. +type ListNodesInGroupV2ResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodesInGroupV2ResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodesInGroupV2ResponseMultiError) AllErrors() []error { return m } + // ListNodesInGroupV2ResponseValidationError is the validation error returned // by ListNodesInGroupV2Response.Validate if the designated constraints aren't met. type ListNodesInGroupV2ResponseValidationError struct { @@ -20496,13 +33776,27 @@ var _ interface { } = ListNodesInGroupV2ResponseValidationError{} // Validate checks the field values on NodeGroupNode with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeGroupNode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeGroupNode with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeGroupNodeMultiError, or +// nil if none found. +func (m *NodeGroupNode) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeGroupNode) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeID // no validation rules for InnerIP @@ -20537,9 +33831,30 @@ func (m *NodeGroupNode) Validate() error { // no validation rules for UnSchedulable + if len(errors) > 0 { + return NodeGroupNodeMultiError(errors) + } + return nil } +// NodeGroupNodeMultiError is an error wrapping multiple validation errors +// returned by NodeGroupNode.ValidateAll() if the designated constraints +// aren't met. +type NodeGroupNodeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeGroupNodeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeGroupNodeMultiError) AllErrors() []error { return m } + // NodeGroupNodeValidationError is the validation error returned by // NodeGroupNode.Validate if the designated constraints aren't met. type NodeGroupNodeValidationError struct { @@ -20596,12 +33911,26 @@ var _ interface { // Validate checks the field values on ListNodesInGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodesInGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodesInGroupResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodesInGroupResponseMultiError, or nil if none found. +func (m *ListNodesInGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodesInGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -20611,7 +33940,26 @@ func (m *ListNodesInGroupResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInGroupResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInGroupResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodesInGroupResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -20623,7 +33971,26 @@ func (m *ListNodesInGroupResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodesInGroupResponseValidationError{ field: "WebAnnotations", @@ -20633,9 +34000,30 @@ func (m *ListNodesInGroupResponse) Validate() error { } } + if len(errors) > 0 { + return ListNodesInGroupResponseMultiError(errors) + } + return nil } +// ListNodesInGroupResponseMultiError is an error wrapping multiple validation +// errors returned by ListNodesInGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type ListNodesInGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodesInGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodesInGroupResponseMultiError) AllErrors() []error { return m } + // ListNodesInGroupResponseValidationError is the validation error returned by // ListNodesInGroupResponse.Validate if the designated constraints aren't met. type ListNodesInGroupResponseValidationError struct { @@ -20694,50 +34082,105 @@ var _ interface { // Validate checks the field values on UpdateGroupMinMaxSizeRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupMinMaxSizeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupMinMaxSizeRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateGroupMinMaxSizeRequestMultiError, or nil if none found. +func (m *UpdateGroupMinMaxSizeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupMinMaxSizeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 5 || l > 100 { - return UpdateGroupMinMaxSizeRequestValidationError{ + err := UpdateGroupMinMaxSizeRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateGroupMinMaxSizeRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return UpdateGroupMinMaxSizeRequestValidationError{ + err := UpdateGroupMinMaxSizeRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if m.GetMinSize() < 0 { - return UpdateGroupMinMaxSizeRequestValidationError{ + err := UpdateGroupMinMaxSizeRequestValidationError{ field: "MinSize", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetMaxSize() < 0 { - return UpdateGroupMinMaxSizeRequestValidationError{ + err := UpdateGroupMinMaxSizeRequestValidationError{ field: "MaxSize", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetOperator()); l < 1 || l > 100 { - return UpdateGroupMinMaxSizeRequestValidationError{ + err := UpdateGroupMinMaxSizeRequestValidationError{ field: "Operator", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateGroupMinMaxSizeRequestMultiError(errors) } return nil } +// UpdateGroupMinMaxSizeRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupMinMaxSizeRequest.ValidateAll() if +// the designated constraints aren't met. +type UpdateGroupMinMaxSizeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupMinMaxSizeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateGroupMinMaxSizeRequestMultiError) AllErrors() []error { return m } + // UpdateGroupMinMaxSizeRequestValidationError is the validation error returned // by UpdateGroupMinMaxSizeRequest.Validate if the designated constraints // aren't met. @@ -20799,19 +34242,52 @@ var _UpdateGroupMinMaxSizeRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0- // Validate checks the field values on UpdateGroupMinMaxSizeResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupMinMaxSizeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupMinMaxSizeResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateGroupMinMaxSizeResponseMultiError, or nil if none found. +func (m *UpdateGroupMinMaxSizeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupMinMaxSizeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateGroupMinMaxSizeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateGroupMinMaxSizeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateGroupMinMaxSizeResponseValidationError{ field: "WebAnnotations", @@ -20821,9 +34297,30 @@ func (m *UpdateGroupMinMaxSizeResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateGroupMinMaxSizeResponseMultiError(errors) + } + return nil } +// UpdateGroupMinMaxSizeResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupMinMaxSizeResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupMinMaxSizeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupMinMaxSizeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateGroupMinMaxSizeResponseMultiError) AllErrors() []error { return m } + // UpdateGroupMinMaxSizeResponseValidationError is the validation error // returned by UpdateGroupMinMaxSizeResponse.Validate if the designated // constraints aren't met. @@ -20883,38 +34380,85 @@ var _ interface { // Validate checks the field values on UpdateGroupDesiredSizeRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupDesiredSizeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupDesiredSizeRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateGroupDesiredSizeRequestMultiError, or nil if none found. +func (m *UpdateGroupDesiredSizeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupDesiredSizeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 5 || l > 100 { - return UpdateGroupDesiredSizeRequestValidationError{ + err := UpdateGroupDesiredSizeRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateGroupDesiredSizeRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return UpdateGroupDesiredSizeRequestValidationError{ + err := UpdateGroupDesiredSizeRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for DesiredSize if utf8.RuneCountInString(m.GetOperator()) > 100 { - return UpdateGroupDesiredSizeRequestValidationError{ + err := UpdateGroupDesiredSizeRequestValidationError{ field: "Operator", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateGroupDesiredSizeRequestMultiError(errors) } return nil } +// UpdateGroupDesiredSizeRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupDesiredSizeRequest.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupDesiredSizeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupDesiredSizeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateGroupDesiredSizeRequestMultiError) AllErrors() []error { return m } + // UpdateGroupDesiredSizeRequestValidationError is the validation error // returned by UpdateGroupDesiredSizeRequest.Validate if the designated // constraints aren't met. @@ -20976,19 +34520,52 @@ var _UpdateGroupDesiredSizeRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0 // Validate checks the field values on UpdateGroupDesiredSizeResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupDesiredSizeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupDesiredSizeResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateGroupDesiredSizeResponseMultiError, or nil if none found. +func (m *UpdateGroupDesiredSizeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupDesiredSizeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateGroupDesiredSizeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateGroupDesiredSizeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateGroupDesiredSizeResponseValidationError{ field: "WebAnnotations", @@ -20998,9 +34575,30 @@ func (m *UpdateGroupDesiredSizeResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateGroupDesiredSizeResponseMultiError(errors) + } + return nil } +// UpdateGroupDesiredSizeResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupDesiredSizeResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupDesiredSizeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupDesiredSizeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateGroupDesiredSizeResponseMultiError) AllErrors() []error { return m } + // UpdateGroupDesiredSizeResponseValidationError is the validation error // returned by UpdateGroupDesiredSizeResponse.Validate if the designated // constraints aren't met. @@ -21060,40 +34658,87 @@ var _ interface { // Validate checks the field values on UpdateGroupDesiredNodeRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupDesiredNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupDesiredNodeRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateGroupDesiredNodeRequestMultiError, or nil if none found. +func (m *UpdateGroupDesiredNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupDesiredNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 5 || l > 100 { - return UpdateGroupDesiredNodeRequestValidationError{ + err := UpdateGroupDesiredNodeRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateGroupDesiredNodeRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return UpdateGroupDesiredNodeRequestValidationError{ + err := UpdateGroupDesiredNodeRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for DesiredNode if utf8.RuneCountInString(m.GetOperator()) > 100 { - return UpdateGroupDesiredNodeRequestValidationError{ + err := UpdateGroupDesiredNodeRequestValidationError{ field: "Operator", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Manual + if len(errors) > 0 { + return UpdateGroupDesiredNodeRequestMultiError(errors) + } + return nil } +// UpdateGroupDesiredNodeRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupDesiredNodeRequest.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupDesiredNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupDesiredNodeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateGroupDesiredNodeRequestMultiError) AllErrors() []error { return m } + // UpdateGroupDesiredNodeRequestValidationError is the validation error // returned by UpdateGroupDesiredNodeRequest.Validate if the designated // constraints aren't met. @@ -21155,19 +34800,52 @@ var _UpdateGroupDesiredNodeRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0 // Validate checks the field values on UpdateGroupDesiredNodeResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupDesiredNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupDesiredNodeResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateGroupDesiredNodeResponseMultiError, or nil if none found. +func (m *UpdateGroupDesiredNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupDesiredNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateGroupDesiredNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateGroupDesiredNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateGroupDesiredNodeResponseValidationError{ field: "Data", @@ -21177,7 +34855,26 @@ func (m *UpdateGroupDesiredNodeResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateGroupDesiredNodeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateGroupDesiredNodeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateGroupDesiredNodeResponseValidationError{ field: "WebAnnotations", @@ -21187,9 +34884,30 @@ func (m *UpdateGroupDesiredNodeResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateGroupDesiredNodeResponseMultiError(errors) + } + return nil } +// UpdateGroupDesiredNodeResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupDesiredNodeResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupDesiredNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupDesiredNodeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateGroupDesiredNodeResponseMultiError) AllErrors() []error { return m } + // UpdateGroupDesiredNodeResponseValidationError is the validation error // returned by UpdateGroupDesiredNodeResponse.Validate if the designated // constraints aren't met. @@ -21249,29 +34967,72 @@ var _ interface { // Validate checks the field values on EnableNodeGroupAutoScaleRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *EnableNodeGroupAutoScaleRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on EnableNodeGroupAutoScaleRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// EnableNodeGroupAutoScaleRequestMultiError, or nil if none found. +func (m *EnableNodeGroupAutoScaleRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *EnableNodeGroupAutoScaleRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 5 || l > 100 { - return EnableNodeGroupAutoScaleRequestValidationError{ + err := EnableNodeGroupAutoScaleRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_EnableNodeGroupAutoScaleRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return EnableNodeGroupAutoScaleRequestValidationError{ + err := EnableNodeGroupAutoScaleRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return EnableNodeGroupAutoScaleRequestMultiError(errors) } return nil } +// EnableNodeGroupAutoScaleRequestMultiError is an error wrapping multiple +// validation errors returned by EnableNodeGroupAutoScaleRequest.ValidateAll() +// if the designated constraints aren't met. +type EnableNodeGroupAutoScaleRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m EnableNodeGroupAutoScaleRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m EnableNodeGroupAutoScaleRequestMultiError) AllErrors() []error { return m } + // EnableNodeGroupAutoScaleRequestValidationError is the validation error // returned by EnableNodeGroupAutoScaleRequest.Validate if the designated // constraints aren't met. @@ -21333,19 +35094,53 @@ var _EnableNodeGroupAutoScaleRequest_NodeGroupID_Pattern = regexp.MustCompile("^ // Validate checks the field values on EnableNodeGroupAutoScaleResponse with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *EnableNodeGroupAutoScaleResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on EnableNodeGroupAutoScaleResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// EnableNodeGroupAutoScaleResponseMultiError, or nil if none found. +func (m *EnableNodeGroupAutoScaleResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *EnableNodeGroupAutoScaleResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, EnableNodeGroupAutoScaleResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, EnableNodeGroupAutoScaleResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return EnableNodeGroupAutoScaleResponseValidationError{ field: "WebAnnotations", @@ -21355,9 +35150,31 @@ func (m *EnableNodeGroupAutoScaleResponse) Validate() error { } } + if len(errors) > 0 { + return EnableNodeGroupAutoScaleResponseMultiError(errors) + } + return nil } +// EnableNodeGroupAutoScaleResponseMultiError is an error wrapping multiple +// validation errors returned by +// EnableNodeGroupAutoScaleResponse.ValidateAll() if the designated +// constraints aren't met. +type EnableNodeGroupAutoScaleResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m EnableNodeGroupAutoScaleResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m EnableNodeGroupAutoScaleResponseMultiError) AllErrors() []error { return m } + // EnableNodeGroupAutoScaleResponseValidationError is the validation error // returned by EnableNodeGroupAutoScaleResponse.Validate if the designated // constraints aren't met. @@ -21417,29 +35234,74 @@ var _ interface { // Validate checks the field values on DisableNodeGroupAutoScaleRequest with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *DisableNodeGroupAutoScaleRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DisableNodeGroupAutoScaleRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// DisableNodeGroupAutoScaleRequestMultiError, or nil if none found. +func (m *DisableNodeGroupAutoScaleRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DisableNodeGroupAutoScaleRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 5 || l > 100 { - return DisableNodeGroupAutoScaleRequestValidationError{ + err := DisableNodeGroupAutoScaleRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DisableNodeGroupAutoScaleRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return DisableNodeGroupAutoScaleRequestValidationError{ + err := DisableNodeGroupAutoScaleRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DisableNodeGroupAutoScaleRequestMultiError(errors) } return nil } +// DisableNodeGroupAutoScaleRequestMultiError is an error wrapping multiple +// validation errors returned by +// DisableNodeGroupAutoScaleRequest.ValidateAll() if the designated +// constraints aren't met. +type DisableNodeGroupAutoScaleRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DisableNodeGroupAutoScaleRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DisableNodeGroupAutoScaleRequestMultiError) AllErrors() []error { return m } + // DisableNodeGroupAutoScaleRequestValidationError is the validation error // returned by DisableNodeGroupAutoScaleRequest.Validate if the designated // constraints aren't met. @@ -21501,19 +35363,53 @@ var _DisableNodeGroupAutoScaleRequest_NodeGroupID_Pattern = regexp.MustCompile(" // Validate checks the field values on DisableNodeGroupAutoScaleResponse with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *DisableNodeGroupAutoScaleResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DisableNodeGroupAutoScaleResponse +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// DisableNodeGroupAutoScaleResponseMultiError, or nil if none found. +func (m *DisableNodeGroupAutoScaleResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DisableNodeGroupAutoScaleResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DisableNodeGroupAutoScaleResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DisableNodeGroupAutoScaleResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DisableNodeGroupAutoScaleResponseValidationError{ field: "WebAnnotations", @@ -21523,9 +35419,31 @@ func (m *DisableNodeGroupAutoScaleResponse) Validate() error { } } + if len(errors) > 0 { + return DisableNodeGroupAutoScaleResponseMultiError(errors) + } + return nil } +// DisableNodeGroupAutoScaleResponseMultiError is an error wrapping multiple +// validation errors returned by +// DisableNodeGroupAutoScaleResponse.ValidateAll() if the designated +// constraints aren't met. +type DisableNodeGroupAutoScaleResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DisableNodeGroupAutoScaleResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DisableNodeGroupAutoScaleResponseMultiError) AllErrors() []error { return m } + // DisableNodeGroupAutoScaleResponseValidationError is the validation error // returned by DisableNodeGroupAutoScaleResponse.Validate if the designated // constraints aren't met. @@ -21584,20 +35502,38 @@ var _ interface { } = DisableNodeGroupAutoScaleResponseValidationError{} // Validate checks the field values on CreateTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CreateTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateTaskRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateTaskRequestMultiError, or nil if none found. +func (m *CreateTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for TaskType if _, ok := _CreateTaskRequest_Status_InLookup[m.GetStatus()]; !ok { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "Status", reason: "value must be in list [INITIALIZING RUNNING SUCCESS FAILED TIMEOUT]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Message @@ -21611,83 +35547,165 @@ func (m *CreateTaskRequest) Validate() error { // no validation rules for CurrentStep if len(m.GetStepSequence()) < 1 { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "StepSequence", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } if l := len(m.GetSteps()); l < 1 || l > 20 { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "Steps", reason: "value must contain between 1 and 20 pairs, inclusive", } - } - - for key, val := range m.GetSteps() { - _ = val - - // no validation rules for Steps[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CreateTaskRequestValidationError{ - field: fmt.Sprintf("Steps[%v]", key), - reason: "embedded message failed validation", - cause: err, + if !all { + return err + } + errors = append(errors, err) + } + + { + sorted_keys := make([]string, len(m.GetSteps())) + i := 0 + for key := range m.GetSteps() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetSteps()[key] + _ = val + + // no validation rules for Steps[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateTaskRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetProjectID()); l < 2 || l > 32 { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "ProjectID", reason: "value length must be between 2 and 32 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateTaskRequest_ProjectID_Pattern.MatchString(m.GetProjectID()) { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "ProjectID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for LastUpdate + if len(errors) > 0 { + return CreateTaskRequestMultiError(errors) + } + return nil } +// CreateTaskRequestMultiError is an error wrapping multiple validation errors +// returned by CreateTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type CreateTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateTaskRequestMultiError) AllErrors() []error { return m } + // CreateTaskRequestValidationError is the validation error returned by // CreateTaskRequest.Validate if the designated constraints aren't met. type CreateTaskRequestValidationError struct { @@ -21758,19 +35776,52 @@ var _CreateTaskRequest_ProjectID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on CreateTaskResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateTaskResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateTaskResponseMultiError, or nil if none found. +func (m *CreateTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateTaskResponseValidationError{ field: "Data", @@ -21780,9 +35831,30 @@ func (m *CreateTaskResponse) Validate() error { } } + if len(errors) > 0 { + return CreateTaskResponseMultiError(errors) + } + return nil } +// CreateTaskResponseMultiError is an error wrapping multiple validation errors +// returned by CreateTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type CreateTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateTaskResponseMultiError) AllErrors() []error { return m } + // CreateTaskResponseValidationError is the validation error returned by // CreateTaskResponse.Validate if the designated constraints aren't met. type CreateTaskResponseValidationError struct { @@ -21840,37 +35912,84 @@ var _ interface { } = CreateTaskResponseValidationError{} // Validate checks the field values on RetryTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *RetryTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RetryTaskRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// RetryTaskRequestMultiError, or nil if none found. +func (m *RetryTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *RetryTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetTaskID()); l < 2 || l > 1024 { - return RetryTaskRequestValidationError{ + err := RetryTaskRequestValidationError{ field: "TaskID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_RetryTaskRequest_TaskID_Pattern.MatchString(m.GetTaskID()) { - return RetryTaskRequestValidationError{ + err := RetryTaskRequestValidationError{ field: "TaskID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 1024 { - return RetryTaskRequestValidationError{ + err := RetryTaskRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return RetryTaskRequestMultiError(errors) } return nil } +// RetryTaskRequestMultiError is an error wrapping multiple validation errors +// returned by RetryTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type RetryTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RetryTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RetryTaskRequestMultiError) AllErrors() []error { return m } + // RetryTaskRequestValidationError is the validation error returned by // RetryTaskRequest.Validate if the designated constraints aren't met. type RetryTaskRequestValidationError struct { @@ -21928,20 +36047,53 @@ var _ interface { var _RetryTaskRequest_TaskID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on RetryTaskResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *RetryTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RetryTaskResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// RetryTaskResponseMultiError, or nil if none found. +func (m *RetryTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *RetryTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RetryTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RetryTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RetryTaskResponseValidationError{ field: "Data", @@ -21951,9 +36103,30 @@ func (m *RetryTaskResponse) Validate() error { } } + if len(errors) > 0 { + return RetryTaskResponseMultiError(errors) + } + return nil } +// RetryTaskResponseMultiError is an error wrapping multiple validation errors +// returned by RetryTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type RetryTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RetryTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RetryTaskResponseMultiError) AllErrors() []error { return m } + // RetryTaskResponseValidationError is the validation error returned by // RetryTaskResponse.Validate if the designated constraints aren't met. type RetryTaskResponseValidationError struct { @@ -22011,37 +36184,84 @@ var _ interface { } = RetryTaskResponseValidationError{} // Validate checks the field values on SkipTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *SkipTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SkipTaskRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// SkipTaskRequestMultiError, or nil if none found. +func (m *SkipTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *SkipTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetTaskID()); l < 2 || l > 1024 { - return SkipTaskRequestValidationError{ + err := SkipTaskRequestValidationError{ field: "TaskID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_SkipTaskRequest_TaskID_Pattern.MatchString(m.GetTaskID()) { - return SkipTaskRequestValidationError{ + err := SkipTaskRequestValidationError{ field: "TaskID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 1024 { - return SkipTaskRequestValidationError{ + err := SkipTaskRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return SkipTaskRequestMultiError(errors) } return nil } +// SkipTaskRequestMultiError is an error wrapping multiple validation errors +// returned by SkipTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type SkipTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SkipTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SkipTaskRequestMultiError) AllErrors() []error { return m } + // SkipTaskRequestValidationError is the validation error returned by // SkipTaskRequest.Validate if the designated constraints aren't met. type SkipTaskRequestValidationError struct { @@ -22099,20 +36319,53 @@ var _ interface { var _SkipTaskRequest_TaskID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on SkipTaskResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *SkipTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SkipTaskResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// SkipTaskResponseMultiError, or nil if none found. +func (m *SkipTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *SkipTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SkipTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SkipTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SkipTaskResponseValidationError{ field: "Data", @@ -22122,9 +36375,30 @@ func (m *SkipTaskResponse) Validate() error { } } + if len(errors) > 0 { + return SkipTaskResponseMultiError(errors) + } + return nil } +// SkipTaskResponseMultiError is an error wrapping multiple validation errors +// returned by SkipTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type SkipTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SkipTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SkipTaskResponseMultiError) AllErrors() []error { return m } + // SkipTaskResponseValidationError is the validation error returned by // SkipTaskResponse.Validate if the designated constraints aren't met. type SkipTaskResponseValidationError struct { @@ -22180,32 +36454,58 @@ var _ interface { } = SkipTaskResponseValidationError{} // Validate checks the field values on UpdateTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *UpdateTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateTaskRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateTaskRequestMultiError, or nil if none found. +func (m *UpdateTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetTaskID()); l < 2 || l > 36 { - return UpdateTaskRequestValidationError{ + err := UpdateTaskRequestValidationError{ field: "TaskID", reason: "value length must be between 2 and 36 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateTaskRequest_TaskID_Pattern.MatchString(m.GetTaskID()) { - return UpdateTaskRequestValidationError{ + err := UpdateTaskRequestValidationError{ field: "TaskID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _UpdateTaskRequest_Status_InLookup[m.GetStatus()]; !ok { - return UpdateTaskRequestValidationError{ + err := UpdateTaskRequestValidationError{ field: "Status", reason: "value must be in list [INITIALIZING RUNNING SUCCESS FAILURE TIMEOUT]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Message @@ -22217,39 +36517,97 @@ func (m *UpdateTaskRequest) Validate() error { // no validation rules for CurrentStep if l := len(m.GetSteps()); l < 1 || l > 20 { - return UpdateTaskRequestValidationError{ + err := UpdateTaskRequestValidationError{ field: "Steps", reason: "value must contain between 1 and 20 pairs, inclusive", } - } - - for key, val := range m.GetSteps() { - _ = val - - // no validation rules for Steps[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return UpdateTaskRequestValidationError{ - field: fmt.Sprintf("Steps[%v]", key), - reason: "embedded message failed validation", - cause: err, + if !all { + return err + } + errors = append(errors, err) + } + + { + sorted_keys := make([]string, len(m.GetSteps())) + i := 0 + for key := range m.GetSteps() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetSteps()[key] + _ = val + + // no validation rules for Steps[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 20 { - return UpdateTaskRequestValidationError{ + err := UpdateTaskRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateTaskRequestMultiError(errors) } return nil } +// UpdateTaskRequestMultiError is an error wrapping multiple validation errors +// returned by UpdateTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type UpdateTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateTaskRequestMultiError) AllErrors() []error { return m } + // UpdateTaskRequestValidationError is the validation error returned by // UpdateTaskRequest.Validate if the designated constraints aren't met. type UpdateTaskRequestValidationError struct { @@ -22318,19 +36676,52 @@ var _UpdateTaskRequest_Status_InLookup = map[string]struct{}{ // Validate checks the field values on UpdateTaskResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateTaskResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateTaskResponseMultiError, or nil if none found. +func (m *UpdateTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateTaskResponseValidationError{ field: "Data", @@ -22340,9 +36731,30 @@ func (m *UpdateTaskResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateTaskResponseMultiError(errors) + } + return nil } +// UpdateTaskResponseMultiError is an error wrapping multiple validation errors +// returned by UpdateTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type UpdateTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateTaskResponseMultiError) AllErrors() []error { return m } + // UpdateTaskResponseValidationError is the validation error returned by // UpdateTaskResponse.Validate if the designated constraints aren't met. type UpdateTaskResponseValidationError struct { @@ -22400,32 +36812,75 @@ var _ interface { } = UpdateTaskResponseValidationError{} // Validate checks the field values on DeleteTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *DeleteTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteTaskRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteTaskRequestMultiError, or nil if none found. +func (m *DeleteTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetTaskID()); l < 2 || l > 36 { - return DeleteTaskRequestValidationError{ + err := DeleteTaskRequestValidationError{ field: "TaskID", reason: "value length must be between 2 and 36 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteTaskRequest_TaskID_Pattern.MatchString(m.GetTaskID()) { - return DeleteTaskRequestValidationError{ + err := DeleteTaskRequestValidationError{ field: "TaskID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsForce + if len(errors) > 0 { + return DeleteTaskRequestMultiError(errors) + } + return nil } +// DeleteTaskRequestMultiError is an error wrapping multiple validation errors +// returned by DeleteTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type DeleteTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteTaskRequestMultiError) AllErrors() []error { return m } + // DeleteTaskRequestValidationError is the validation error returned by // DeleteTaskRequest.Validate if the designated constraints aren't met. type DeleteTaskRequestValidationError struct { @@ -22486,19 +36941,52 @@ var _DeleteTaskRequest_TaskID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on DeleteTaskResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteTaskResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteTaskResponseMultiError, or nil if none found. +func (m *DeleteTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteTaskResponseValidationError{ field: "Data", @@ -22508,9 +36996,30 @@ func (m *DeleteTaskResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteTaskResponseMultiError(errors) + } + return nil } +// DeleteTaskResponseMultiError is an error wrapping multiple validation errors +// returned by DeleteTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type DeleteTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteTaskResponseMultiError) AllErrors() []error { return m } + // DeleteTaskResponseValidationError is the validation error returned by // DeleteTaskResponse.Validate if the designated constraints aren't met. type DeleteTaskResponseValidationError struct { @@ -22568,30 +37077,73 @@ var _ interface { } = DeleteTaskResponseValidationError{} // Validate checks the field values on GetTaskRequest with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *GetTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTaskRequest with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in GetTaskRequestMultiError, +// or nil if none found. +func (m *GetTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetTaskID()); l < 2 || l > 36 { - return GetTaskRequestValidationError{ + err := GetTaskRequestValidationError{ field: "TaskID", reason: "value length must be between 2 and 36 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_GetTaskRequest_TaskID_Pattern.MatchString(m.GetTaskID()) { - return GetTaskRequestValidationError{ + err := GetTaskRequestValidationError{ field: "TaskID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetTaskRequestMultiError(errors) } return nil } +// GetTaskRequestMultiError is an error wrapping multiple validation errors +// returned by GetTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type GetTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTaskRequestMultiError) AllErrors() []error { return m } + // GetTaskRequestValidationError is the validation error returned by // GetTaskRequest.Validate if the designated constraints aren't met. type GetTaskRequestValidationError struct { @@ -22649,20 +37201,53 @@ var _ interface { var _GetTaskRequest_TaskID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on GetTaskResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *GetTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTaskResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetTaskResponseMultiError, or nil if none found. +func (m *GetTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTaskResponseValidationError{ field: "Data", @@ -22672,9 +37257,30 @@ func (m *GetTaskResponse) Validate() error { } } + if len(errors) > 0 { + return GetTaskResponseMultiError(errors) + } + return nil } +// GetTaskResponseMultiError is an error wrapping multiple validation errors +// returned by GetTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type GetTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTaskResponseMultiError) AllErrors() []error { return m } + // GetTaskResponseValidationError is the validation error returned by // GetTaskResponse.Validate if the designated constraints aren't met. type GetTaskResponseValidationError struct { @@ -22730,39 +37336,69 @@ var _ interface { } = GetTaskResponseValidationError{} // Validate checks the field values on ListTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ListTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListTaskRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListTaskRequestMultiError, or nil if none found. +func (m *ListTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return ListTaskRequestValidationError{ + err := ListTaskRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 32 { - return ListTaskRequestValidationError{ + err := ListTaskRequestValidationError{ field: "ProjectID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetCreator()) > 20 { - return ListTaskRequestValidationError{ + err := ListTaskRequestValidationError{ field: "Creator", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetUpdater()) > 20 { - return ListTaskRequestValidationError{ + err := ListTaskRequestValidationError{ field: "Updater", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for TaskType @@ -22773,9 +37409,30 @@ func (m *ListTaskRequest) Validate() error { // no validation rules for NodeGroupID + if len(errors) > 0 { + return ListTaskRequestMultiError(errors) + } + return nil } +// ListTaskRequestMultiError is an error wrapping multiple validation errors +// returned by ListTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type ListTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListTaskRequestMultiError) AllErrors() []error { return m } + // ListTaskRequestValidationError is the validation error returned by // ListTaskRequest.Validate if the designated constraints aren't met. type ListTaskRequestValidationError struct { @@ -22831,13 +37488,27 @@ var _ interface { } = ListTaskRequestValidationError{} // Validate checks the field values on ListTaskResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ListTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListTaskResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListTaskResponseMultiError, or nil if none found. +func (m *ListTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -22847,7 +37518,26 @@ func (m *ListTaskResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListTaskResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListTaskResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListTaskResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -22859,7 +37549,26 @@ func (m *ListTaskResponse) Validate() error { } - if v, ok := interface{}(m.GetLatestTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetLatestTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListTaskResponseValidationError{ + field: "LatestTask", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListTaskResponseValidationError{ + field: "LatestTask", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLatestTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListTaskResponseValidationError{ field: "LatestTask", @@ -22869,9 +37578,30 @@ func (m *ListTaskResponse) Validate() error { } } + if len(errors) > 0 { + return ListTaskResponseMultiError(errors) + } + return nil } +// ListTaskResponseMultiError is an error wrapping multiple validation errors +// returned by ListTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type ListTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListTaskResponseMultiError) AllErrors() []error { return m } + // ListTaskResponseValidationError is the validation error returned by // ListTaskResponse.Validate if the designated constraints aren't met. type ListTaskResponseValidationError struct { @@ -22928,12 +37658,26 @@ var _ interface { // Validate checks the field values on CreateAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateAutoScalingOptionRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// CreateAutoScalingOptionRequestMultiError, or nil if none found. +func (m *CreateAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsScaleDownEnable // no validation rules for Expander @@ -22961,31 +37705,47 @@ func (m *CreateAutoScalingOptionRequest) Validate() error { // no validation rules for UnregisteredNodeRemovalTime if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return CreateAutoScalingOptionRequestValidationError{ + err := CreateAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return CreateAutoScalingOptionRequestValidationError{ + err := CreateAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateAutoScalingOptionRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return CreateAutoScalingOptionRequestValidationError{ + err := CreateAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateAutoScalingOptionRequestValidationError{ + err := CreateAutoScalingOptionRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider @@ -23000,7 +37760,26 @@ func (m *CreateAutoScalingOptionRequest) Validate() error { // no validation rules for MaxNodeProvisionTime - if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleUpFromZero()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateAutoScalingOptionRequestValidationError{ field: "ScaleUpFromZero", @@ -23014,7 +37793,26 @@ func (m *CreateAutoScalingOptionRequest) Validate() error { // no validation rules for ScaleDownDelayAfterDelete - if v, ok := interface{}(m.GetScaleDownDelayAfterFailure()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleDownDelayAfterFailure()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateAutoScalingOptionRequestValidationError{ + field: "ScaleDownDelayAfterFailure", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateAutoScalingOptionRequestValidationError{ + field: "ScaleDownDelayAfterFailure", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleDownDelayAfterFailure()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterFailure", @@ -23030,9 +37828,30 @@ func (m *CreateAutoScalingOptionRequest) Validate() error { // no validation rules for BufferResourceMemRatio + if len(errors) > 0 { + return CreateAutoScalingOptionRequestMultiError(errors) + } + return nil } +// CreateAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by CreateAutoScalingOptionRequest.ValidateAll() +// if the designated constraints aren't met. +type CreateAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateAutoScalingOptionRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // CreateAutoScalingOptionRequestValidationError is the validation error // returned by CreateAutoScalingOptionRequest.Validate if the designated // constraints aren't met. @@ -23094,19 +37913,52 @@ var _CreateAutoScalingOptionRequest_ClusterID_Pattern = regexp.MustCompile("^[0- // Validate checks the field values on CreateAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateAutoScalingOptionResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// CreateAutoScalingOptionResponseMultiError, or nil if none found. +func (m *CreateAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateAutoScalingOptionResponseValidationError{ field: "Data", @@ -23116,9 +37968,30 @@ func (m *CreateAutoScalingOptionResponse) Validate() error { } } + if len(errors) > 0 { + return CreateAutoScalingOptionResponseMultiError(errors) + } + return nil } +// CreateAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by CreateAutoScalingOptionResponse.ValidateAll() +// if the designated constraints aren't met. +type CreateAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateAutoScalingOptionResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // CreateAutoScalingOptionResponseValidationError is the validation error // returned by CreateAutoScalingOptionResponse.Validate if the designated // constraints aren't met. @@ -23178,50 +38051,103 @@ var _ interface { // Validate checks the field values on UpdateAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateAutoScalingOptionRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateAutoScalingOptionRequestMultiError, or nil if none found. +func (m *UpdateAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsScaleDownEnable if _, ok := _UpdateAutoScalingOptionRequest_Expander_InLookup[m.GetExpander()]; !ok { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "Expander", reason: "value must be in list [random least-waste most-pods priority]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxEmptyBulkDelete(); val < 1 || val > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "MaxEmptyBulkDelete", reason: "value must be inside range [1, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownDelay(); val < 60 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownDelay", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUnneededTime(); val < 60 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownUnneededTime", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUtilizationThreahold(); val < 0 || val > 80 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownUtilizationThreahold", reason: "value must be inside range [0, 80]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetSkipNodesWithLocalStorage()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSkipNodesWithLocalStorage()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "SkipNodesWithLocalStorage", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "SkipNodesWithLocalStorage", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSkipNodesWithLocalStorage()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "SkipNodesWithLocalStorage", @@ -23231,7 +38157,26 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { } } - if v, ok := interface{}(m.GetSkipNodesWithSystemPods()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSkipNodesWithSystemPods()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "SkipNodesWithSystemPods", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "SkipNodesWithSystemPods", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSkipNodesWithSystemPods()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "SkipNodesWithSystemPods", @@ -23241,7 +38186,26 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { } } - if v, ok := interface{}(m.GetIgnoreDaemonSetsUtilization()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetIgnoreDaemonSetsUtilization()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "IgnoreDaemonSetsUtilization", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "IgnoreDaemonSetsUtilization", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetIgnoreDaemonSetsUtilization()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "IgnoreDaemonSetsUtilization", @@ -23252,47 +38216,71 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { } if val := m.GetOkTotalUnreadyCount(); val < 0 || val > 320000 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "OkTotalUnreadyCount", reason: "value must be inside range [0, 320000]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxTotalUnreadyPercentage(); val < 0 || val > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "MaxTotalUnreadyPercentage", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUnreadyTime(); val < 1200 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownUnreadyTime", reason: "value must be inside range [1200, 86400]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for UnregisteredNodeRemovalTime if utf8.RuneCountInString(m.GetProjectID()) > 32 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ProjectID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 20 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider @@ -23302,36 +38290,71 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { if wrapper := m.GetBufferResourceRatio(); wrapper != nil { if val := wrapper.GetValue(); val < 0 || val > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "BufferResourceRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } } if val := m.GetMaxGracefulTerminationSec(); val < 60 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "MaxGracefulTerminationSec", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScanInterval(); val < 5 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScanInterval", reason: "value must be inside range [5, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxNodeProvisionTime(); val < 900 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "MaxNodeProvisionTime", reason: "value must be inside range [900, 86400]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleUpFromZero()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "ScaleUpFromZero", @@ -23342,45 +38365,84 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { } if val := m.GetScaleDownDelayAfterAdd(); val < 1200 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterAdd", reason: "value must be inside range [1200, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownDelayAfterDelete(); val < 0 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterDelete", reason: "value must be inside range [0, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if wrapper := m.GetScaleDownDelayAfterFailure(); wrapper != nil { if val := wrapper.GetValue(); val < 60 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterFailure", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } } if val := m.GetBufferResourceCpuRatio(); val < 0 || val > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "BufferResourceCpuRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetBufferResourceMemRatio(); val < 0 || val > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "BufferResourceMemRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "Module", @@ -23390,7 +38452,26 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { } } - if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebhook()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "Webhook", @@ -23402,7 +38483,26 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { // no validation rules for OnlyUpdateInfo - if v, ok := interface{}(m.GetExpendablePodsPriorityCutoff()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetExpendablePodsPriorityCutoff()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "ExpendablePodsPriorityCutoff", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "ExpendablePodsPriorityCutoff", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetExpendablePodsPriorityCutoff()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "ExpendablePodsPriorityCutoff", @@ -23415,17 +38515,42 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { if wrapper := m.GetNewPodScaleUpDelay(); wrapper != nil { if wrapper.GetValue() < 0 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "NewPodScaleUpDelay", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } } + if len(errors) > 0 { + return UpdateAutoScalingOptionRequestMultiError(errors) + } + return nil } +// UpdateAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateAutoScalingOptionRequest.ValidateAll() +// if the designated constraints aren't met. +type UpdateAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateAutoScalingOptionRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // UpdateAutoScalingOptionRequestValidationError is the validation error // returned by UpdateAutoScalingOptionRequest.Validate if the designated // constraints aren't met. @@ -23492,19 +38617,52 @@ var _UpdateAutoScalingOptionRequest_Expander_InLookup = map[string]struct{}{ // Validate checks the field values on UpdateAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateAutoScalingOptionResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateAutoScalingOptionResponseMultiError, or nil if none found. +func (m *UpdateAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionResponseValidationError{ field: "Data", @@ -23514,7 +38672,26 @@ func (m *UpdateAutoScalingOptionResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionResponseValidationError{ field: "WebAnnotations", @@ -23524,9 +38701,30 @@ func (m *UpdateAutoScalingOptionResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateAutoScalingOptionResponseMultiError(errors) + } + return nil } +// UpdateAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateAutoScalingOptionResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateAutoScalingOptionResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // UpdateAutoScalingOptionResponseValidationError is the validation error // returned by UpdateAutoScalingOptionResponse.Validate if the designated // constraints aren't met. @@ -23586,24 +38784,65 @@ var _ interface { // Validate checks the field values on UpdateAsOptionDeviceProviderRequest with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *UpdateAsOptionDeviceProviderRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateAsOptionDeviceProviderRequest +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// UpdateAsOptionDeviceProviderRequestMultiError, or nil if none found. +func (m *UpdateAsOptionDeviceProviderRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateAsOptionDeviceProviderRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return UpdateAsOptionDeviceProviderRequestValidationError{ + err := UpdateAsOptionDeviceProviderRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider + if len(errors) > 0 { + return UpdateAsOptionDeviceProviderRequestMultiError(errors) + } + return nil } +// UpdateAsOptionDeviceProviderRequestMultiError is an error wrapping multiple +// validation errors returned by +// UpdateAsOptionDeviceProviderRequest.ValidateAll() if the designated +// constraints aren't met. +type UpdateAsOptionDeviceProviderRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateAsOptionDeviceProviderRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateAsOptionDeviceProviderRequestMultiError) AllErrors() []error { return m } + // UpdateAsOptionDeviceProviderRequestValidationError is the validation error // returned by UpdateAsOptionDeviceProviderRequest.Validate if the designated // constraints aren't met. @@ -23663,21 +38902,58 @@ var _ interface { // Validate checks the field values on UpdateAsOptionDeviceProviderResponse // with the rules defined in the proto definition for this message. If any -// rules are violated, an error is returned. +// rules are violated, the first error encountered is returned, or nil if +// there are no violations. func (m *UpdateAsOptionDeviceProviderResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateAsOptionDeviceProviderResponse +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// UpdateAsOptionDeviceProviderResponseMultiError, or nil if none found. +func (m *UpdateAsOptionDeviceProviderResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateAsOptionDeviceProviderResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return UpdateAsOptionDeviceProviderResponseMultiError(errors) + } + return nil } +// UpdateAsOptionDeviceProviderResponseMultiError is an error wrapping multiple +// validation errors returned by +// UpdateAsOptionDeviceProviderResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateAsOptionDeviceProviderResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateAsOptionDeviceProviderResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateAsOptionDeviceProviderResponseMultiError) AllErrors() []error { return m } + // UpdateAsOptionDeviceProviderResponseValidationError is the validation error // returned by UpdateAsOptionDeviceProviderResponse.Validate if the designated // constraints aren't met. @@ -23737,47 +39013,81 @@ var _ interface { // Validate checks the field values on SyncAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *SyncAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SyncAutoScalingOptionRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// SyncAutoScalingOptionRequestMultiError, or nil if none found. +func (m *SyncAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *SyncAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsScaleDownEnable if _, ok := _SyncAutoScalingOptionRequest_Expander_InLookup[m.GetExpander()]; !ok { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "Expander", reason: "value must be in list [random least-waste most-pods priority]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxEmptyBulkDelete(); val < 1 || val > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxEmptyBulkDelete", reason: "value must be inside range [1, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownDelay(); val < 60 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownDelay", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUnneededTime(); val < 60 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownUnneededTime", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUtilizationThreahold(); val < 0 || val > 80 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownUtilizationThreahold", reason: "value must be inside range [0, 80]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for SkipNodesWithLocalStorage @@ -23787,85 +39097,148 @@ func (m *SyncAutoScalingOptionRequest) Validate() error { // no validation rules for IgnoreDaemonSetsUtilization if val := m.GetOkTotalUnreadyCount(); val < 0 || val > 320000 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "OkTotalUnreadyCount", reason: "value must be inside range [0, 320000]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxTotalUnreadyPercentage(); val < 0 || val > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxTotalUnreadyPercentage", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUnreadyTime(); val < 1200 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownUnreadyTime", reason: "value must be inside range [1200, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 20 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ScaleDownGpuUtilizationThreshold if val := m.GetBufferResourceRatio(); val < 0 || val > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "BufferResourceRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxGracefulTerminationSec(); val < 60 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxGracefulTerminationSec", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScanInterval(); val < 5 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScanInterval", reason: "value must be inside range [5, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxNodeProvisionTime(); val < 900 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxNodeProvisionTime", reason: "value must be inside range [900, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxNodeStartupTime(); val < 900 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxNodeStartupTime", reason: "value must be inside range [900, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxNodeStartScheduleTime(); val < 900 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxNodeStartScheduleTime", reason: "value must be inside range [900, 86400]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleUpFromZero()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SyncAutoScalingOptionRequestValidationError{ field: "ScaleUpFromZero", @@ -23876,45 +39249,84 @@ func (m *SyncAutoScalingOptionRequest) Validate() error { } if val := m.GetScaleDownDelayAfterAdd(); val < 1200 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterAdd", reason: "value must be inside range [1200, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownDelayAfterDelete(); val < 0 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterDelete", reason: "value must be inside range [0, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if wrapper := m.GetScaleDownDelayAfterFailure(); wrapper != nil { if val := wrapper.GetValue(); val < 60 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterFailure", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } } if val := m.GetBufferResourceCpuRatio(); val < 0 || val > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "BufferResourceCpuRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetBufferResourceMemRatio(); val < 0 || val > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "BufferResourceMemRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebhook()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SyncAutoScalingOptionRequestValidationError{ field: "Webhook", @@ -23924,7 +39336,26 @@ func (m *SyncAutoScalingOptionRequest) Validate() error { } } - if v, ok := interface{}(m.GetExpendablePodsPriorityCutoff()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetExpendablePodsPriorityCutoff()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "ExpendablePodsPriorityCutoff", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "ExpendablePodsPriorityCutoff", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetExpendablePodsPriorityCutoff()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SyncAutoScalingOptionRequestValidationError{ field: "ExpendablePodsPriorityCutoff", @@ -23937,17 +39368,42 @@ func (m *SyncAutoScalingOptionRequest) Validate() error { if wrapper := m.GetNewPodScaleUpDelay(); wrapper != nil { if wrapper.GetValue() < 0 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "NewPodScaleUpDelay", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } } + if len(errors) > 0 { + return SyncAutoScalingOptionRequestMultiError(errors) + } + return nil } +// SyncAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by SyncAutoScalingOptionRequest.ValidateAll() if +// the designated constraints aren't met. +type SyncAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SyncAutoScalingOptionRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SyncAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // SyncAutoScalingOptionRequestValidationError is the validation error returned // by SyncAutoScalingOptionRequest.Validate if the designated constraints // aren't met. @@ -24014,19 +39470,52 @@ var _SyncAutoScalingOptionRequest_Expander_InLookup = map[string]struct{}{ // Validate checks the field values on SyncAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *SyncAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SyncAutoScalingOptionResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// SyncAutoScalingOptionResponseMultiError, or nil if none found. +func (m *SyncAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *SyncAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SyncAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SyncAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SyncAutoScalingOptionResponseValidationError{ field: "Data", @@ -24036,7 +39525,26 @@ func (m *SyncAutoScalingOptionResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SyncAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SyncAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SyncAutoScalingOptionResponseValidationError{ field: "WebAnnotations", @@ -24046,9 +39554,30 @@ func (m *SyncAutoScalingOptionResponse) Validate() error { } } + if len(errors) > 0 { + return SyncAutoScalingOptionResponseMultiError(errors) + } + return nil } +// SyncAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by SyncAutoScalingOptionResponse.ValidateAll() +// if the designated constraints aren't met. +type SyncAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SyncAutoScalingOptionResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SyncAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // SyncAutoScalingOptionResponseValidationError is the validation error // returned by SyncAutoScalingOptionResponse.Validate if the designated // constraints aren't met. @@ -24108,38 +39637,85 @@ var _ interface { // Validate checks the field values on DeleteAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteAutoScalingOptionRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// DeleteAutoScalingOptionRequestMultiError, or nil if none found. +func (m *DeleteAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return DeleteAutoScalingOptionRequestValidationError{ + err := DeleteAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return DeleteAutoScalingOptionRequestValidationError{ + err := DeleteAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteAutoScalingOptionRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return DeleteAutoScalingOptionRequestValidationError{ + err := DeleteAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsForce + if len(errors) > 0 { + return DeleteAutoScalingOptionRequestMultiError(errors) + } + return nil } +// DeleteAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by DeleteAutoScalingOptionRequest.ValidateAll() +// if the designated constraints aren't met. +type DeleteAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteAutoScalingOptionRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // DeleteAutoScalingOptionRequestValidationError is the validation error // returned by DeleteAutoScalingOptionRequest.Validate if the designated // constraints aren't met. @@ -24201,19 +39777,52 @@ var _DeleteAutoScalingOptionRequest_ClusterID_Pattern = regexp.MustCompile("^[0- // Validate checks the field values on DeleteAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteAutoScalingOptionResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// DeleteAutoScalingOptionResponseMultiError, or nil if none found. +func (m *DeleteAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteAutoScalingOptionResponseValidationError{ field: "Data", @@ -24223,7 +39832,26 @@ func (m *DeleteAutoScalingOptionResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteAutoScalingOptionResponseValidationError{ field: "WebAnnotations", @@ -24233,9 +39861,30 @@ func (m *DeleteAutoScalingOptionResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteAutoScalingOptionResponseMultiError(errors) + } + return nil } +// DeleteAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by DeleteAutoScalingOptionResponse.ValidateAll() +// if the designated constraints aren't met. +type DeleteAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteAutoScalingOptionResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // DeleteAutoScalingOptionResponseValidationError is the validation error // returned by DeleteAutoScalingOptionResponse.Validate if the designated // constraints aren't met. @@ -24295,38 +39944,85 @@ var _ interface { // Validate checks the field values on GetAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetAutoScalingOptionRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetAutoScalingOptionRequestMultiError, or nil if none found. +func (m *GetAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return GetAutoScalingOptionRequestValidationError{ + err := GetAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return GetAutoScalingOptionRequestValidationError{ + err := GetAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_GetAutoScalingOptionRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return GetAutoScalingOptionRequestValidationError{ + err := GetAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider + if len(errors) > 0 { + return GetAutoScalingOptionRequestMultiError(errors) + } + return nil } +// GetAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by GetAutoScalingOptionRequest.ValidateAll() if +// the designated constraints aren't met. +type GetAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetAutoScalingOptionRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // GetAutoScalingOptionRequestValidationError is the validation error returned // by GetAutoScalingOptionRequest.Validate if the designated constraints // aren't met. @@ -24388,19 +40084,52 @@ var _GetAutoScalingOptionRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a- // Validate checks the field values on GetAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetAutoScalingOptionResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetAutoScalingOptionResponseMultiError, or nil if none found. +func (m *GetAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetAutoScalingOptionResponseValidationError{ field: "Data", @@ -24410,7 +40139,26 @@ func (m *GetAutoScalingOptionResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetAutoScalingOptionResponseValidationError{ field: "WebAnnotations", @@ -24420,9 +40168,30 @@ func (m *GetAutoScalingOptionResponse) Validate() error { } } + if len(errors) > 0 { + return GetAutoScalingOptionResponseMultiError(errors) + } + return nil } +// GetAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by GetAutoScalingOptionResponse.ValidateAll() if +// the designated constraints aren't met. +type GetAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetAutoScalingOptionResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // GetAutoScalingOptionResponseValidationError is the validation error returned // by GetAutoScalingOptionResponse.Validate if the designated constraints // aren't met. @@ -24482,43 +40251,94 @@ var _ interface { // Validate checks the field values on ListAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListAutoScalingOptionRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListAutoScalingOptionRequestMultiError, or nil if none found. +func (m *ListAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return ListAutoScalingOptionRequestValidationError{ + err := ListAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 32 { - return ListAutoScalingOptionRequestValidationError{ + err := ListAutoScalingOptionRequestValidationError{ field: "ProjectID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetCreator()) > 20 { - return ListAutoScalingOptionRequestValidationError{ + err := ListAutoScalingOptionRequestValidationError{ field: "Creator", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetUpdater()) > 20 { - return ListAutoScalingOptionRequestValidationError{ + err := ListAutoScalingOptionRequestValidationError{ field: "Updater", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListAutoScalingOptionRequestMultiError(errors) } return nil } +// ListAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by ListAutoScalingOptionRequest.ValidateAll() if +// the designated constraints aren't met. +type ListAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListAutoScalingOptionRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // ListAutoScalingOptionRequestValidationError is the validation error returned // by ListAutoScalingOptionRequest.Validate if the designated constraints // aren't met. @@ -24578,12 +40398,26 @@ var _ interface { // Validate checks the field values on ListAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListAutoScalingOptionResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListAutoScalingOptionResponseMultiError, or nil if none found. +func (m *ListAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -24593,7 +40427,26 @@ func (m *ListAutoScalingOptionResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListAutoScalingOptionResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListAutoScalingOptionResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListAutoScalingOptionResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -24605,9 +40458,30 @@ func (m *ListAutoScalingOptionResponse) Validate() error { } + if len(errors) > 0 { + return ListAutoScalingOptionResponseMultiError(errors) + } + return nil } +// ListAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by ListAutoScalingOptionResponse.ValidateAll() +// if the designated constraints aren't met. +type ListAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListAutoScalingOptionResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // ListAutoScalingOptionResponseValidationError is the validation error // returned by ListAutoScalingOptionResponse.Validate if the designated // constraints aren't met. @@ -24667,33 +40541,76 @@ var _ interface { // Validate checks the field values on UpdateAutoScalingStatusRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateAutoScalingStatusRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateAutoScalingStatusRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateAutoScalingStatusRequestMultiError, or nil if none found. +func (m *UpdateAutoScalingStatusRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateAutoScalingStatusRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Enable if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return UpdateAutoScalingStatusRequestValidationError{ + err := UpdateAutoScalingStatusRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 20 { - return UpdateAutoScalingStatusRequestValidationError{ + err := UpdateAutoScalingStatusRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider + if len(errors) > 0 { + return UpdateAutoScalingStatusRequestMultiError(errors) + } + return nil } +// UpdateAutoScalingStatusRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateAutoScalingStatusRequest.ValidateAll() +// if the designated constraints aren't met. +type UpdateAutoScalingStatusRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateAutoScalingStatusRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateAutoScalingStatusRequestMultiError) AllErrors() []error { return m } + // UpdateAutoScalingStatusRequestValidationError is the validation error // returned by UpdateAutoScalingStatusRequest.Validate if the designated // constraints aren't met. @@ -24753,19 +40670,52 @@ var _ interface { // Validate checks the field values on UpdateAutoScalingStatusResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateAutoScalingStatusResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateAutoScalingStatusResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateAutoScalingStatusResponseMultiError, or nil if none found. +func (m *UpdateAutoScalingStatusResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateAutoScalingStatusResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingStatusResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingStatusResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingStatusResponseValidationError{ field: "Data", @@ -24775,7 +40725,26 @@ func (m *UpdateAutoScalingStatusResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingStatusResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingStatusResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingStatusResponseValidationError{ field: "WebAnnotations", @@ -24785,9 +40754,30 @@ func (m *UpdateAutoScalingStatusResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateAutoScalingStatusResponseMultiError(errors) + } + return nil } +// UpdateAutoScalingStatusResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateAutoScalingStatusResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateAutoScalingStatusResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateAutoScalingStatusResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateAutoScalingStatusResponseMultiError) AllErrors() []error { return m } + // UpdateAutoScalingStatusResponseValidationError is the validation error // returned by UpdateAutoScalingStatusResponse.Validate if the designated // constraints aren't met. @@ -24845,22 +40835,422 @@ var _ interface { ErrorName() string } = UpdateAutoScalingStatusResponseValidationError{} +// Validate checks the field values on ResourceGroupInfo with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *ResourceGroupInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ResourceGroupInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ResourceGroupInfoMultiError, or nil if none found. +func (m *ResourceGroupInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ResourceGroupInfo) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Name + + // no validation rules for Region + + // no validation rules for ProvisioningState + + if len(errors) > 0 { + return ResourceGroupInfoMultiError(errors) + } + + return nil +} + +// ResourceGroupInfoMultiError is an error wrapping multiple validation errors +// returned by ResourceGroupInfo.ValidateAll() if the designated constraints +// aren't met. +type ResourceGroupInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ResourceGroupInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ResourceGroupInfoMultiError) AllErrors() []error { return m } + +// ResourceGroupInfoValidationError is the validation error returned by +// ResourceGroupInfo.Validate if the designated constraints aren't met. +type ResourceGroupInfoValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ResourceGroupInfoValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ResourceGroupInfoValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ResourceGroupInfoValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ResourceGroupInfoValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ResourceGroupInfoValidationError) ErrorName() string { + return "ResourceGroupInfoValidationError" +} + +// Error satisfies the builtin error interface +func (e ResourceGroupInfoValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sResourceGroupInfo.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ResourceGroupInfoValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ResourceGroupInfoValidationError{} + +// Validate checks the field values on GetResourceGroupsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetResourceGroupsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetResourceGroupsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetResourceGroupsRequestMultiError, or nil if none found. +func (m *GetResourceGroupsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetResourceGroupsRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetCloudID()) < 2 { + err := GetResourceGroupsRequestValidationError{ + field: "CloudID", + reason: "value length must be at least 2 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + // no validation rules for AccountID + + if len(errors) > 0 { + return GetResourceGroupsRequestMultiError(errors) + } + + return nil +} + +// GetResourceGroupsRequestMultiError is an error wrapping multiple validation +// errors returned by GetResourceGroupsRequest.ValidateAll() if the designated +// constraints aren't met. +type GetResourceGroupsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetResourceGroupsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetResourceGroupsRequestMultiError) AllErrors() []error { return m } + +// GetResourceGroupsRequestValidationError is the validation error returned by +// GetResourceGroupsRequest.Validate if the designated constraints aren't met. +type GetResourceGroupsRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetResourceGroupsRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetResourceGroupsRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetResourceGroupsRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetResourceGroupsRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetResourceGroupsRequestValidationError) ErrorName() string { + return "GetResourceGroupsRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e GetResourceGroupsRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetResourceGroupsRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetResourceGroupsRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetResourceGroupsRequestValidationError{} + +// Validate checks the field values on GetResourceGroupsResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetResourceGroupsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetResourceGroupsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetResourceGroupsResponseMultiError, or nil if none found. +func (m *GetResourceGroupsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetResourceGroupsResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Code + + // no validation rules for Message + + // no validation rules for Result + + for idx, item := range m.GetData() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetResourceGroupsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetResourceGroupsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetResourceGroupsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return GetResourceGroupsResponseMultiError(errors) + } + + return nil +} + +// GetResourceGroupsResponseMultiError is an error wrapping multiple validation +// errors returned by GetResourceGroupsResponse.ValidateAll() if the +// designated constraints aren't met. +type GetResourceGroupsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetResourceGroupsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetResourceGroupsResponseMultiError) AllErrors() []error { return m } + +// GetResourceGroupsResponseValidationError is the validation error returned by +// GetResourceGroupsResponse.Validate if the designated constraints aren't met. +type GetResourceGroupsResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetResourceGroupsResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetResourceGroupsResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetResourceGroupsResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetResourceGroupsResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetResourceGroupsResponseValidationError) ErrorName() string { + return "GetResourceGroupsResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e GetResourceGroupsResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetResourceGroupsResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetResourceGroupsResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetResourceGroupsResponseValidationError{} + // Validate checks the field values on RegionInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *RegionInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RegionInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in RegionInfoMultiError, or +// nil if none found. +func (m *RegionInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *RegionInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Region // no validation rules for RegionName // no validation rules for RegionState + if len(errors) > 0 { + return RegionInfoMultiError(errors) + } + return nil } +// RegionInfoMultiError is an error wrapping multiple validation errors +// returned by RegionInfo.ValidateAll() if the designated constraints aren't met. +type RegionInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RegionInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RegionInfoMultiError) AllErrors() []error { return m } + // RegionInfoValidationError is the validation error returned by // RegionInfo.Validate if the designated constraints aren't met. type RegionInfoValidationError struct { @@ -24917,24 +41307,63 @@ var _ interface { // Validate checks the field values on GetCloudRegionsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudRegionsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudRegionsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetCloudRegionsRequestMultiError, or nil if none found. +func (m *GetCloudRegionsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudRegionsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return GetCloudRegionsRequestValidationError{ + err := GetCloudRegionsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountID + if len(errors) > 0 { + return GetCloudRegionsRequestMultiError(errors) + } + return nil } +// GetCloudRegionsRequestMultiError is an error wrapping multiple validation +// errors returned by GetCloudRegionsRequest.ValidateAll() if the designated +// constraints aren't met. +type GetCloudRegionsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudRegionsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudRegionsRequestMultiError) AllErrors() []error { return m } + // GetCloudRegionsRequestValidationError is the validation error returned by // GetCloudRegionsRequest.Validate if the designated constraints aren't met. type GetCloudRegionsRequestValidationError struct { @@ -24993,12 +41422,26 @@ var _ interface { // Validate checks the field values on GetCloudRegionsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudRegionsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudRegionsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetCloudRegionsResponseMultiError, or nil if none found. +func (m *GetCloudRegionsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudRegionsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -25008,7 +41451,26 @@ func (m *GetCloudRegionsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetCloudRegionsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetCloudRegionsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetCloudRegionsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -25020,9 +41482,30 @@ func (m *GetCloudRegionsResponse) Validate() error { } + if len(errors) > 0 { + return GetCloudRegionsResponseMultiError(errors) + } + return nil } +// GetCloudRegionsResponseMultiError is an error wrapping multiple validation +// errors returned by GetCloudRegionsResponse.ValidateAll() if the designated +// constraints aren't met. +type GetCloudRegionsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudRegionsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudRegionsResponseMultiError) AllErrors() []error { return m } + // GetCloudRegionsResponseValidationError is the validation error returned by // GetCloudRegionsResponse.Validate if the designated constraints aren't met. type GetCloudRegionsResponseValidationError struct { @@ -25080,12 +41563,27 @@ var _ interface { } = GetCloudRegionsResponseValidationError{} // Validate checks the field values on ZoneInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ZoneInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ZoneInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ZoneInfoMultiError, or nil +// if none found. +func (m *ZoneInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ZoneInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ZoneID // no validation rules for Zone @@ -25096,9 +41594,29 @@ func (m *ZoneInfo) Validate() error { // no validation rules for SubnetNum + if len(errors) > 0 { + return ZoneInfoMultiError(errors) + } + return nil } +// ZoneInfoMultiError is an error wrapping multiple validation errors returned +// by ZoneInfo.ValidateAll() if the designated constraints aren't met. +type ZoneInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ZoneInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ZoneInfoMultiError) AllErrors() []error { return m } + // ZoneInfoValidationError is the validation error returned by // ZoneInfo.Validate if the designated constraints aren't met. type ZoneInfoValidationError struct { @@ -25154,13 +41672,27 @@ var _ interface { } = ZoneInfoValidationError{} // Validate checks the field values on CloudClusterInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CloudClusterInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudClusterInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CloudClusterInfoMultiError, or nil if none found. +func (m *CloudClusterInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudClusterInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID // no validation rules for ClusterName @@ -25179,9 +41711,30 @@ func (m *CloudClusterInfo) Validate() error { // no validation rules for ClusterLevel + if len(errors) > 0 { + return CloudClusterInfoMultiError(errors) + } + return nil } +// CloudClusterInfoMultiError is an error wrapping multiple validation errors +// returned by CloudClusterInfo.ValidateAll() if the designated constraints +// aren't met. +type CloudClusterInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudClusterInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudClusterInfoMultiError) AllErrors() []error { return m } + // CloudClusterInfoValidationError is the validation error returned by // CloudClusterInfo.Validate if the designated constraints aren't met. type CloudClusterInfoValidationError struct { @@ -25238,36 +41791,83 @@ var _ interface { // Validate checks the field values on ListCloudRegionClusterRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudRegionClusterRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRegionClusterRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListCloudRegionClusterRequestMultiError, or nil if none found. +func (m *ListCloudRegionClusterRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRegionClusterRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudRegionClusterRequestValidationError{ + err := ListCloudRegionClusterRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) < 2 { - return ListCloudRegionClusterRequestValidationError{ + err := ListCloudRegionClusterRequestValidationError{ field: "Region", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetAccountID()) < 2 { - return ListCloudRegionClusterRequestValidationError{ + err := ListCloudRegionClusterRequestValidationError{ field: "AccountID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListCloudRegionClusterRequestMultiError(errors) } return nil } +// ListCloudRegionClusterRequestMultiError is an error wrapping multiple +// validation errors returned by ListCloudRegionClusterRequest.ValidateAll() +// if the designated constraints aren't met. +type ListCloudRegionClusterRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRegionClusterRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudRegionClusterRequestMultiError) AllErrors() []error { return m } + // ListCloudRegionClusterRequestValidationError is the validation error // returned by ListCloudRegionClusterRequest.Validate if the designated // constraints aren't met. @@ -25327,12 +41927,26 @@ var _ interface { // Validate checks the field values on ListCloudRegionClusterResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudRegionClusterResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRegionClusterResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListCloudRegionClusterResponseMultiError, or nil if none found. +func (m *ListCloudRegionClusterResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRegionClusterResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -25342,7 +41956,26 @@ func (m *ListCloudRegionClusterResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudRegionClusterResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudRegionClusterResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudRegionClusterResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -25354,9 +41987,30 @@ func (m *ListCloudRegionClusterResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudRegionClusterResponseMultiError(errors) + } + return nil } +// ListCloudRegionClusterResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudRegionClusterResponse.ValidateAll() +// if the designated constraints aren't met. +type ListCloudRegionClusterResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRegionClusterResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudRegionClusterResponseMultiError) AllErrors() []error { return m } + // ListCloudRegionClusterResponseValidationError is the validation error // returned by ListCloudRegionClusterResponse.Validate if the designated // constraints aren't met. @@ -25416,17 +42070,35 @@ var _ interface { // Validate checks the field values on GetCloudRegionZonesRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudRegionZonesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudRegionZonesRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetCloudRegionZonesRequestMultiError, or nil if none found. +func (m *GetCloudRegionZonesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudRegionZonesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return GetCloudRegionZonesRequestValidationError{ + err := GetCloudRegionZonesRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -25437,9 +42109,30 @@ func (m *GetCloudRegionZonesRequest) Validate() error { // no validation rules for State + if len(errors) > 0 { + return GetCloudRegionZonesRequestMultiError(errors) + } + return nil } +// GetCloudRegionZonesRequestMultiError is an error wrapping multiple +// validation errors returned by GetCloudRegionZonesRequest.ValidateAll() if +// the designated constraints aren't met. +type GetCloudRegionZonesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudRegionZonesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudRegionZonesRequestMultiError) AllErrors() []error { return m } + // GetCloudRegionZonesRequestValidationError is the validation error returned // by GetCloudRegionZonesRequest.Validate if the designated constraints aren't met. type GetCloudRegionZonesRequestValidationError struct { @@ -25498,12 +42191,26 @@ var _ interface { // Validate checks the field values on GetCloudRegionZonesResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudRegionZonesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudRegionZonesResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetCloudRegionZonesResponseMultiError, or nil if none found. +func (m *GetCloudRegionZonesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudRegionZonesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -25513,7 +42220,26 @@ func (m *GetCloudRegionZonesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetCloudRegionZonesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetCloudRegionZonesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetCloudRegionZonesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -25525,9 +42251,30 @@ func (m *GetCloudRegionZonesResponse) Validate() error { } + if len(errors) > 0 { + return GetCloudRegionZonesResponseMultiError(errors) + } + return nil } +// GetCloudRegionZonesResponseMultiError is an error wrapping multiple +// validation errors returned by GetCloudRegionZonesResponse.ValidateAll() if +// the designated constraints aren't met. +type GetCloudRegionZonesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudRegionZonesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudRegionZonesResponseMultiError) AllErrors() []error { return m } + // GetCloudRegionZonesResponseValidationError is the validation error returned // by GetCloudRegionZonesResponse.Validate if the designated constraints // aren't met. @@ -25586,13 +42333,27 @@ var _ interface { } = GetCloudRegionZonesResponseValidationError{} // Validate checks the field values on OperationLog with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *OperationLog) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OperationLog with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in OperationLogMultiError, or +// nil if none found. +func (m *OperationLog) ValidateAll() error { + return m.validate(true) +} + +func (m *OperationLog) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ResourceType // no validation rules for ResourceID @@ -25609,9 +42370,29 @@ func (m *OperationLog) Validate() error { // no validation rules for ProjectID + if len(errors) > 0 { + return OperationLogMultiError(errors) + } + return nil } +// OperationLogMultiError is an error wrapping multiple validation errors +// returned by OperationLog.ValidateAll() if the designated constraints aren't met. +type OperationLogMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OperationLogMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OperationLogMultiError) AllErrors() []error { return m } + // OperationLogValidationError is the validation error returned by // OperationLog.Validate if the designated constraints aren't met. type OperationLogValidationError struct { @@ -25667,13 +42448,27 @@ var _ interface { } = OperationLogValidationError{} // Validate checks the field values on TaskOperationLog with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *TaskOperationLog) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TaskOperationLog with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// TaskOperationLogMultiError, or nil if none found. +func (m *TaskOperationLog) ValidateAll() error { + return m.validate(true) +} + +func (m *TaskOperationLog) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ResourceType // no validation rules for ResourceID @@ -25694,9 +42489,30 @@ func (m *TaskOperationLog) Validate() error { // no validation rules for TaskType + if len(errors) > 0 { + return TaskOperationLogMultiError(errors) + } + return nil } +// TaskOperationLogMultiError is an error wrapping multiple validation errors +// returned by TaskOperationLog.ValidateAll() if the designated constraints +// aren't met. +type TaskOperationLogMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TaskOperationLogMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TaskOperationLogMultiError) AllErrors() []error { return m } + // TaskOperationLogValidationError is the validation error returned by // TaskOperationLog.Validate if the designated constraints aren't met. type TaskOperationLogValidationError struct { @@ -25753,17 +42569,35 @@ var _ interface { // Validate checks the field values on ListCloudInstanceTypeRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudInstanceTypeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudInstanceTypeRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudInstanceTypeRequestMultiError, or nil if none found. +func (m *ListCloudInstanceTypeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudInstanceTypeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudInstanceTypeRequestValidationError{ + err := ListCloudInstanceTypeRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -25771,17 +42605,25 @@ func (m *ListCloudInstanceTypeRequest) Validate() error { // no validation rules for AccountID if utf8.RuneCountInString(m.GetZone()) > 32 { - return ListCloudInstanceTypeRequestValidationError{ + err := ListCloudInstanceTypeRequestValidationError{ field: "Zone", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetNodeFamily()) > 32 { - return ListCloudInstanceTypeRequestValidationError{ + err := ListCloudInstanceTypeRequestValidationError{ field: "NodeFamily", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Cpu @@ -25793,15 +42635,40 @@ func (m *ListCloudInstanceTypeRequest) Validate() error { // no validation rules for Provider if _, ok := _ListCloudInstanceTypeRequest_ResourceType_InLookup[m.GetResourceType()]; !ok { - return ListCloudInstanceTypeRequestValidationError{ + err := ListCloudInstanceTypeRequestValidationError{ field: "ResourceType", reason: "value must be in list [ online offline]", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListCloudInstanceTypeRequestMultiError(errors) } return nil } +// ListCloudInstanceTypeRequestMultiError is an error wrapping multiple +// validation errors returned by ListCloudInstanceTypeRequest.ValidateAll() if +// the designated constraints aren't met. +type ListCloudInstanceTypeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudInstanceTypeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudInstanceTypeRequestMultiError) AllErrors() []error { return m } + // ListCloudInstanceTypeRequestValidationError is the validation error returned // by ListCloudInstanceTypeRequest.Validate if the designated constraints // aren't met. @@ -25867,12 +42734,26 @@ var _ListCloudInstanceTypeRequest_ResourceType_InLookup = map[string]struct{}{ // Validate checks the field values on ListCloudInstanceTypeResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudInstanceTypeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudInstanceTypeResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListCloudInstanceTypeResponseMultiError, or nil if none found. +func (m *ListCloudInstanceTypeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudInstanceTypeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -25882,7 +42763,26 @@ func (m *ListCloudInstanceTypeResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudInstanceTypeResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudInstanceTypeResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudInstanceTypeResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -25894,9 +42794,30 @@ func (m *ListCloudInstanceTypeResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudInstanceTypeResponseMultiError(errors) + } + return nil } +// ListCloudInstanceTypeResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudInstanceTypeResponse.ValidateAll() +// if the designated constraints aren't met. +type ListCloudInstanceTypeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudInstanceTypeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudInstanceTypeResponseMultiError) AllErrors() []error { return m } + // ListCloudInstanceTypeResponseValidationError is the validation error // returned by ListCloudInstanceTypeResponse.Validate if the designated // constraints aren't met. @@ -25955,13 +42876,27 @@ var _ interface { } = ListCloudInstanceTypeResponseValidationError{} // Validate checks the field values on InstanceType with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *InstanceType) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InstanceType with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in InstanceTypeMultiError, or +// nil if none found. +func (m *InstanceType) ValidateAll() error { + return m.validate(true) +} + +func (m *InstanceType) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeType // no validation rules for TypeName @@ -25982,7 +42917,26 @@ func (m *InstanceType) Validate() error { // no validation rules for ResourcePoolID - if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSystemDisk()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTypeValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTypeValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTypeValidationError{ field: "SystemDisk", @@ -25995,7 +42949,26 @@ func (m *InstanceType) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTypeValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTypeValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTypeValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -26007,9 +42980,29 @@ func (m *InstanceType) Validate() error { } + if len(errors) > 0 { + return InstanceTypeMultiError(errors) + } + return nil } +// InstanceTypeMultiError is an error wrapping multiple validation errors +// returned by InstanceType.ValidateAll() if the designated constraints aren't met. +type InstanceTypeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InstanceTypeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m InstanceTypeMultiError) AllErrors() []error { return m } + // InstanceTypeValidationError is the validation error returned by // InstanceType.Validate if the designated constraints aren't met. type InstanceTypeValidationError struct { @@ -26066,31 +43059,58 @@ var _ interface { // Validate checks the field values on GetMasterSuggestedMachinesRequest with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *GetMasterSuggestedMachinesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetMasterSuggestedMachinesRequest +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// GetMasterSuggestedMachinesRequestMultiError, or nil if none found. +func (m *GetMasterSuggestedMachinesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetMasterSuggestedMachinesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return GetMasterSuggestedMachinesRequestValidationError{ + err := GetMasterSuggestedMachinesRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) < 2 { - return GetMasterSuggestedMachinesRequestValidationError{ + err := GetMasterSuggestedMachinesRequestValidationError{ field: "Region", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _GetMasterSuggestedMachinesRequest_Level_InLookup[m.GetLevel()]; !ok { - return GetMasterSuggestedMachinesRequestValidationError{ + err := GetMasterSuggestedMachinesRequestValidationError{ field: "Level", reason: "value must be in list [L100 L500 L1000 L2000]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountID @@ -26103,9 +43123,31 @@ func (m *GetMasterSuggestedMachinesRequest) Validate() error { // no validation rules for Zones + if len(errors) > 0 { + return GetMasterSuggestedMachinesRequestMultiError(errors) + } + return nil } +// GetMasterSuggestedMachinesRequestMultiError is an error wrapping multiple +// validation errors returned by +// GetMasterSuggestedMachinesRequest.ValidateAll() if the designated +// constraints aren't met. +type GetMasterSuggestedMachinesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetMasterSuggestedMachinesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetMasterSuggestedMachinesRequestMultiError) AllErrors() []error { return m } + // GetMasterSuggestedMachinesRequestValidationError is the validation error // returned by GetMasterSuggestedMachinesRequest.Validate if the designated // constraints aren't met. @@ -26172,12 +43214,27 @@ var _GetMasterSuggestedMachinesRequest_Level_InLookup = map[string]struct{}{ // Validate checks the field values on GetMasterSuggestedMachinesResponse with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *GetMasterSuggestedMachinesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetMasterSuggestedMachinesResponse +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// GetMasterSuggestedMachinesResponseMultiError, or nil if none found. +func (m *GetMasterSuggestedMachinesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetMasterSuggestedMachinesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -26187,7 +43244,26 @@ func (m *GetMasterSuggestedMachinesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetMasterSuggestedMachinesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetMasterSuggestedMachinesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetMasterSuggestedMachinesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -26199,9 +43275,31 @@ func (m *GetMasterSuggestedMachinesResponse) Validate() error { } + if len(errors) > 0 { + return GetMasterSuggestedMachinesResponseMultiError(errors) + } + return nil } +// GetMasterSuggestedMachinesResponseMultiError is an error wrapping multiple +// validation errors returned by +// GetMasterSuggestedMachinesResponse.ValidateAll() if the designated +// constraints aren't met. +type GetMasterSuggestedMachinesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetMasterSuggestedMachinesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetMasterSuggestedMachinesResponseMultiError) AllErrors() []error { return m } + // GetMasterSuggestedMachinesResponseValidationError is the validation error // returned by GetMasterSuggestedMachinesResponse.Validate if the designated // constraints aren't met. @@ -26261,17 +43359,35 @@ var _ interface { // Validate checks the field values on ListCloudInstancesRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudInstancesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudInstancesRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudInstancesRequestMultiError, or nil if none found. +func (m *ListCloudInstancesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudInstancesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudInstancesRequestValidationError{ + err := ListCloudInstancesRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -26279,15 +43395,40 @@ func (m *ListCloudInstancesRequest) Validate() error { // no validation rules for AccountID if utf8.RuneCountInString(m.GetIpList()) < 1 { - return ListCloudInstancesRequestValidationError{ + err := ListCloudInstancesRequestValidationError{ field: "IpList", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListCloudInstancesRequestMultiError(errors) } return nil } +// ListCloudInstancesRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudInstancesRequest.ValidateAll() if the +// designated constraints aren't met. +type ListCloudInstancesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudInstancesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudInstancesRequestMultiError) AllErrors() []error { return m } + // ListCloudInstancesRequestValidationError is the validation error returned by // ListCloudInstancesRequest.Validate if the designated constraints aren't met. type ListCloudInstancesRequestValidationError struct { @@ -26346,12 +43487,26 @@ var _ interface { // Validate checks the field values on ListCloudInstancesResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudInstancesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudInstancesResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudInstancesResponseMultiError, or nil if none found. +func (m *ListCloudInstancesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudInstancesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -26361,7 +43516,26 @@ func (m *ListCloudInstancesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudInstancesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudInstancesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudInstancesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -26373,9 +43547,30 @@ func (m *ListCloudInstancesResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudInstancesResponseMultiError(errors) + } + return nil } +// ListCloudInstancesResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudInstancesResponse.ValidateAll() if +// the designated constraints aren't met. +type ListCloudInstancesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudInstancesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudInstancesResponseMultiError) AllErrors() []error { return m } + // ListCloudInstancesResponseValidationError is the validation error returned // by ListCloudInstancesResponse.Validate if the designated constraints aren't met. type ListCloudInstancesResponseValidationError struct { @@ -26433,12 +43628,27 @@ var _ interface { } = ListCloudInstancesResponseValidationError{} // Validate checks the field values on CloudNode with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudNode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudNode with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudNodeMultiError, or nil +// if none found. +func (m *CloudNode) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudNode) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeID // no validation rules for InnerIP @@ -26465,9 +43675,29 @@ func (m *CloudNode) Validate() error { // no validation rules for CloudRegionNode + if len(errors) > 0 { + return CloudNodeMultiError(errors) + } + return nil } +// CloudNodeMultiError is an error wrapping multiple validation errors returned +// by CloudNode.ValidateAll() if the designated constraints aren't met. +type CloudNodeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudNodeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudNodeMultiError) AllErrors() []error { return m } + // CloudNodeValidationError is the validation error returned by // CloudNode.Validate if the designated constraints aren't met. type CloudNodeValidationError struct { @@ -26524,26 +43754,65 @@ var _ interface { // Validate checks the field values on GetCloudAccountTypeRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudAccountTypeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudAccountTypeRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetCloudAccountTypeRequestMultiError, or nil if none found. +func (m *GetCloudAccountTypeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudAccountTypeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return GetCloudAccountTypeRequestValidationError{ + err := GetCloudAccountTypeRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region // no validation rules for AccountID + if len(errors) > 0 { + return GetCloudAccountTypeRequestMultiError(errors) + } + return nil } +// GetCloudAccountTypeRequestMultiError is an error wrapping multiple +// validation errors returned by GetCloudAccountTypeRequest.ValidateAll() if +// the designated constraints aren't met. +type GetCloudAccountTypeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudAccountTypeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudAccountTypeRequestMultiError) AllErrors() []error { return m } + // GetCloudAccountTypeRequestValidationError is the validation error returned // by GetCloudAccountTypeRequest.Validate if the designated constraints aren't met. type GetCloudAccountTypeRequestValidationError struct { @@ -26602,19 +43871,52 @@ var _ interface { // Validate checks the field values on GetCloudAccountTypeResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudAccountTypeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudAccountTypeResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetCloudAccountTypeResponseMultiError, or nil if none found. +func (m *GetCloudAccountTypeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudAccountTypeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetCloudAccountTypeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetCloudAccountTypeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetCloudAccountTypeResponseValidationError{ field: "Data", @@ -26624,9 +43926,30 @@ func (m *GetCloudAccountTypeResponse) Validate() error { } } + if len(errors) > 0 { + return GetCloudAccountTypeResponseMultiError(errors) + } + return nil } +// GetCloudAccountTypeResponseMultiError is an error wrapping multiple +// validation errors returned by GetCloudAccountTypeResponse.ValidateAll() if +// the designated constraints aren't met. +type GetCloudAccountTypeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudAccountTypeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudAccountTypeResponseMultiError) AllErrors() []error { return m } + // GetCloudAccountTypeResponseValidationError is the validation error returned // by GetCloudAccountTypeResponse.Validate if the designated constraints // aren't met. @@ -26685,18 +44008,53 @@ var _ interface { } = GetCloudAccountTypeResponseValidationError{} // Validate checks the field values on CloudAccountType with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CloudAccountType) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudAccountType with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CloudAccountTypeMultiError, or nil if none found. +func (m *CloudAccountType) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudAccountType) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Type + if len(errors) > 0 { + return CloudAccountTypeMultiError(errors) + } + return nil } +// CloudAccountTypeMultiError is an error wrapping multiple validation errors +// returned by CloudAccountType.ValidateAll() if the designated constraints +// aren't met. +type CloudAccountTypeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudAccountTypeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudAccountTypeMultiError) AllErrors() []error { return m } + // CloudAccountTypeValidationError is the validation error returned by // CloudAccountType.Validate if the designated constraints aren't met. type CloudAccountTypeValidationError struct { @@ -26753,31 +44111,76 @@ var _ interface { // Validate checks the field values on GetCloudBandwidthPackagesRequest with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *GetCloudBandwidthPackagesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudBandwidthPackagesRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetCloudBandwidthPackagesRequestMultiError, or nil if none found. +func (m *GetCloudBandwidthPackagesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudBandwidthPackagesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 1 { - return GetCloudBandwidthPackagesRequestValidationError{ + err := GetCloudBandwidthPackagesRequestValidationError{ field: "CloudID", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) < 1 { - return GetCloudBandwidthPackagesRequestValidationError{ + err := GetCloudBandwidthPackagesRequestValidationError{ field: "Region", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountID + if len(errors) > 0 { + return GetCloudBandwidthPackagesRequestMultiError(errors) + } + return nil } +// GetCloudBandwidthPackagesRequestMultiError is an error wrapping multiple +// validation errors returned by +// GetCloudBandwidthPackagesRequest.ValidateAll() if the designated +// constraints aren't met. +type GetCloudBandwidthPackagesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudBandwidthPackagesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudBandwidthPackagesRequestMultiError) AllErrors() []error { return m } + // GetCloudBandwidthPackagesRequestValidationError is the validation error // returned by GetCloudBandwidthPackagesRequest.Validate if the designated // constraints aren't met. @@ -26837,12 +44240,27 @@ var _ interface { // Validate checks the field values on GetCloudBandwidthPackagesResponse with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *GetCloudBandwidthPackagesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudBandwidthPackagesResponse +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// GetCloudBandwidthPackagesResponseMultiError, or nil if none found. +func (m *GetCloudBandwidthPackagesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudBandwidthPackagesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -26852,7 +44270,26 @@ func (m *GetCloudBandwidthPackagesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetCloudBandwidthPackagesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetCloudBandwidthPackagesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetCloudBandwidthPackagesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -26864,9 +44301,31 @@ func (m *GetCloudBandwidthPackagesResponse) Validate() error { } + if len(errors) > 0 { + return GetCloudBandwidthPackagesResponseMultiError(errors) + } + return nil } +// GetCloudBandwidthPackagesResponseMultiError is an error wrapping multiple +// validation errors returned by +// GetCloudBandwidthPackagesResponse.ValidateAll() if the designated +// constraints aren't met. +type GetCloudBandwidthPackagesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudBandwidthPackagesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudBandwidthPackagesResponseMultiError) AllErrors() []error { return m } + // GetCloudBandwidthPackagesResponseValidationError is the validation error // returned by GetCloudBandwidthPackagesResponse.Validate if the designated // constraints aren't met. @@ -26926,12 +44385,26 @@ var _ interface { // Validate checks the field values on BandwidthPackageInfo with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *BandwidthPackageInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on BandwidthPackageInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// BandwidthPackageInfoMultiError, or nil if none found. +func (m *BandwidthPackageInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *BandwidthPackageInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Id // no validation rules for Name @@ -26942,9 +44415,30 @@ func (m *BandwidthPackageInfo) Validate() error { // no validation rules for Bandwidth + if len(errors) > 0 { + return BandwidthPackageInfoMultiError(errors) + } + return nil } +// BandwidthPackageInfoMultiError is an error wrapping multiple validation +// errors returned by BandwidthPackageInfo.ValidateAll() if the designated +// constraints aren't met. +type BandwidthPackageInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m BandwidthPackageInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m BandwidthPackageInfoMultiError) AllErrors() []error { return m } + // BandwidthPackageInfoValidationError is the validation error returned by // BandwidthPackageInfo.Validate if the designated constraints aren't met. type BandwidthPackageInfoValidationError struct { @@ -27003,17 +44497,35 @@ var _ interface { // Validate checks the field values on ListCloudOsImageRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudOsImageRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudOsImageRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudOsImageRequestMultiError, or nil if none found. +func (m *ListCloudOsImageRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudOsImageRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudOsImageRequestValidationError{ + err := ListCloudOsImageRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -27024,9 +44536,30 @@ func (m *ListCloudOsImageRequest) Validate() error { // no validation rules for ProjectID + if len(errors) > 0 { + return ListCloudOsImageRequestMultiError(errors) + } + return nil } +// ListCloudOsImageRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudOsImageRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudOsImageRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudOsImageRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudOsImageRequestMultiError) AllErrors() []error { return m } + // ListCloudOsImageRequestValidationError is the validation error returned by // ListCloudOsImageRequest.Validate if the designated constraints aren't met. type ListCloudOsImageRequestValidationError struct { @@ -27085,12 +44618,26 @@ var _ interface { // Validate checks the field values on ListCloudOsImageResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudOsImageResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudOsImageResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudOsImageResponseMultiError, or nil if none found. +func (m *ListCloudOsImageResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudOsImageResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -27100,7 +44647,26 @@ func (m *ListCloudOsImageResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudOsImageResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudOsImageResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudOsImageResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -27112,9 +44678,30 @@ func (m *ListCloudOsImageResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudOsImageResponseMultiError(errors) + } + return nil } +// ListCloudOsImageResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudOsImageResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudOsImageResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudOsImageResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudOsImageResponseMultiError) AllErrors() []error { return m } + // ListCloudOsImageResponseValidationError is the validation error returned by // ListCloudOsImageResponse.Validate if the designated constraints aren't met. type ListCloudOsImageResponseValidationError struct { @@ -27172,12 +44759,26 @@ var _ interface { } = ListCloudOsImageResponseValidationError{} // Validate checks the field values on OsImage with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *OsImage) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OsImage with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in OsImageMultiError, or nil if none found. +func (m *OsImage) ValidateAll() error { + return m.validate(true) +} + +func (m *OsImage) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ImageID // no validation rules for Alias @@ -27197,7 +44798,26 @@ func (m *OsImage) Validate() error { for idx, item := range m.GetClusters() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, OsImageValidationError{ + field: fmt.Sprintf("Clusters[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, OsImageValidationError{ + field: fmt.Sprintf("Clusters[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return OsImageValidationError{ field: fmt.Sprintf("Clusters[%v]", idx), @@ -27209,9 +44829,29 @@ func (m *OsImage) Validate() error { } + if len(errors) > 0 { + return OsImageMultiError(errors) + } + return nil } +// OsImageMultiError is an error wrapping multiple validation errors returned +// by OsImage.ValidateAll() if the designated constraints aren't met. +type OsImageMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OsImageMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OsImageMultiError) AllErrors() []error { return m } + // OsImageValidationError is the validation error returned by OsImage.Validate // if the designated constraints aren't met. type OsImageValidationError struct { @@ -27267,20 +44907,54 @@ var _ interface { } = OsImageValidationError{} // Validate checks the field values on ClusterInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ClusterInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ClusterInfoMultiError, or +// nil if none found. +func (m *ClusterInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterName // no validation rules for ClusterID + if len(errors) > 0 { + return ClusterInfoMultiError(errors) + } + return nil } +// ClusterInfoMultiError is an error wrapping multiple validation errors +// returned by ClusterInfo.ValidateAll() if the designated constraints aren't met. +type ClusterInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterInfoMultiError) AllErrors() []error { return m } + // ClusterInfoValidationError is the validation error returned by // ClusterInfo.Validate if the designated constraints aren't met. type ClusterInfoValidationError struct { @@ -27337,26 +45011,65 @@ var _ interface { // Validate checks the field values on ListCloudProjectsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudProjectsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudProjectsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudProjectsRequestMultiError, or nil if none found. +func (m *ListCloudProjectsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudProjectsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudProjectsRequestValidationError{ + err := ListCloudProjectsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region // no validation rules for AccountID + if len(errors) > 0 { + return ListCloudProjectsRequestMultiError(errors) + } + return nil } +// ListCloudProjectsRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudProjectsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudProjectsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudProjectsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudProjectsRequestMultiError) AllErrors() []error { return m } + // ListCloudProjectsRequestValidationError is the validation error returned by // ListCloudProjectsRequest.Validate if the designated constraints aren't met. type ListCloudProjectsRequestValidationError struct { @@ -27415,12 +45128,26 @@ var _ interface { // Validate checks the field values on ListCloudProjectsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudProjectsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudProjectsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudProjectsResponseMultiError, or nil if none found. +func (m *ListCloudProjectsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudProjectsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -27430,7 +45157,26 @@ func (m *ListCloudProjectsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudProjectsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudProjectsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudProjectsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -27442,9 +45188,30 @@ func (m *ListCloudProjectsResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudProjectsResponseMultiError(errors) + } + return nil } +// ListCloudProjectsResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudProjectsResponse.ValidateAll() if the +// designated constraints aren't met. +type ListCloudProjectsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudProjectsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudProjectsResponseMultiError) AllErrors() []error { return m } + // ListCloudProjectsResponseValidationError is the validation error returned by // ListCloudProjectsResponse.Validate if the designated constraints aren't met. type ListCloudProjectsResponseValidationError struct { @@ -27502,20 +45269,54 @@ var _ interface { } = ListCloudProjectsResponseValidationError{} // Validate checks the field values on CloudProject with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudProject) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudProject with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudProjectMultiError, or +// nil if none found. +func (m *CloudProject) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudProject) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for ProjectName + if len(errors) > 0 { + return CloudProjectMultiError(errors) + } + return nil } +// CloudProjectMultiError is an error wrapping multiple validation errors +// returned by CloudProject.ValidateAll() if the designated constraints aren't met. +type CloudProjectMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudProjectMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudProjectMultiError) AllErrors() []error { return m } + // CloudProjectValidationError is the validation error returned by // CloudProject.Validate if the designated constraints aren't met. type CloudProjectValidationError struct { @@ -27572,17 +45373,35 @@ var _ interface { // Validate checks the field values on ListCloudVpcsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudVpcsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudVpcsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudVpcsRequestMultiError, or nil if none found. +func (m *ListCloudVpcsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudVpcsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudVpcsRequestValidationError{ + err := ListCloudVpcsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -27591,9 +45410,32 @@ func (m *ListCloudVpcsRequest) Validate() error { // no validation rules for VpcID + // no validation rules for ResourceGroupName + + if len(errors) > 0 { + return ListCloudVpcsRequestMultiError(errors) + } + return nil } +// ListCloudVpcsRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudVpcsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudVpcsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudVpcsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudVpcsRequestMultiError) AllErrors() []error { return m } + // ListCloudVpcsRequestValidationError is the validation error returned by // ListCloudVpcsRequest.Validate if the designated constraints aren't met. type ListCloudVpcsRequestValidationError struct { @@ -27652,12 +45494,26 @@ var _ interface { // Validate checks the field values on ListCloudVpcsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudVpcsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudVpcsResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudVpcsResponseMultiError, or nil if none found. +func (m *ListCloudVpcsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudVpcsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -27667,7 +45523,26 @@ func (m *ListCloudVpcsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudVpcsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudVpcsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudVpcsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -27679,9 +45554,30 @@ func (m *ListCloudVpcsResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudVpcsResponseMultiError(errors) + } + return nil } +// ListCloudVpcsResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudVpcsResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudVpcsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudVpcsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudVpcsResponseMultiError) AllErrors() []error { return m } + // ListCloudVpcsResponseValidationError is the validation error returned by // ListCloudVpcsResponse.Validate if the designated constraints aren't met. type ListCloudVpcsResponseValidationError struct { @@ -27739,12 +45635,27 @@ var _ interface { } = ListCloudVpcsResponseValidationError{} // Validate checks the field values on CloudVpc with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudVpc) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudVpc with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudVpcMultiError, or nil +// if none found. +func (m *CloudVpc) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudVpc) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for VpcId @@ -27756,7 +45667,26 @@ func (m *CloudVpc) Validate() error { for idx, item := range m.GetCidrs() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudVpcValidationError{ + field: fmt.Sprintf("Cidrs[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudVpcValidationError{ + field: fmt.Sprintf("Cidrs[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudVpcValidationError{ field: fmt.Sprintf("Cidrs[%v]", idx), @@ -27770,9 +45700,29 @@ func (m *CloudVpc) Validate() error { // no validation rules for AllocateIpNum + if len(errors) > 0 { + return CloudVpcMultiError(errors) + } + return nil } +// CloudVpcMultiError is an error wrapping multiple validation errors returned +// by CloudVpc.ValidateAll() if the designated constraints aren't met. +type CloudVpcMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudVpcMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudVpcMultiError) AllErrors() []error { return m } + // CloudVpcValidationError is the validation error returned by // CloudVpc.Validate if the designated constraints aren't met. type CloudVpcValidationError struct { @@ -27828,20 +45778,55 @@ var _ interface { } = CloudVpcValidationError{} // Validate checks the field values on AssistantCidr with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *AssistantCidr) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AssistantCidr with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in AssistantCidrMultiError, or +// nil if none found. +func (m *AssistantCidr) ValidateAll() error { + return m.validate(true) +} + +func (m *AssistantCidr) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Cidr // no validation rules for CidrType + if len(errors) > 0 { + return AssistantCidrMultiError(errors) + } + return nil } +// AssistantCidrMultiError is an error wrapping multiple validation errors +// returned by AssistantCidr.ValidateAll() if the designated constraints +// aren't met. +type AssistantCidrMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AssistantCidrMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AssistantCidrMultiError) AllErrors() []error { return m } + // AssistantCidrValidationError is the validation error returned by // AssistantCidr.Validate if the designated constraints aren't met. type AssistantCidrValidationError struct { @@ -27898,26 +45883,48 @@ var _ interface { // Validate checks the field values on ListCloudSubnetsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudSubnetsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudSubnetsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudSubnetsRequestMultiError, or nil if none found. +func (m *ListCloudSubnetsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudSubnetsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudSubnetsRequestValidationError{ + err := ListCloudSubnetsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region if utf8.RuneCountInString(m.GetAccountID()) < 2 { - return ListCloudSubnetsRequestValidationError{ + err := ListCloudSubnetsRequestValidationError{ field: "AccountID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for VpcID @@ -27928,9 +45935,32 @@ func (m *ListCloudSubnetsRequest) Validate() error { // no validation rules for InjectCluster + // no validation rules for ResourceGroupName + + if len(errors) > 0 { + return ListCloudSubnetsRequestMultiError(errors) + } + return nil } +// ListCloudSubnetsRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudSubnetsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudSubnetsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudSubnetsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudSubnetsRequestMultiError) AllErrors() []error { return m } + // ListCloudSubnetsRequestValidationError is the validation error returned by // ListCloudSubnetsRequest.Validate if the designated constraints aren't met. type ListCloudSubnetsRequestValidationError struct { @@ -27989,12 +46019,26 @@ var _ interface { // Validate checks the field values on ListCloudSubnetsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudSubnetsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudSubnetsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudSubnetsResponseMultiError, or nil if none found. +func (m *ListCloudSubnetsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudSubnetsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -28004,7 +46048,26 @@ func (m *ListCloudSubnetsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudSubnetsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudSubnetsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudSubnetsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -28016,9 +46079,30 @@ func (m *ListCloudSubnetsResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudSubnetsResponseMultiError(errors) + } + return nil } +// ListCloudSubnetsResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudSubnetsResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudSubnetsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudSubnetsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudSubnetsResponseMultiError) AllErrors() []error { return m } + // ListCloudSubnetsResponseValidationError is the validation error returned by // ListCloudSubnetsResponse.Validate if the designated constraints aren't met. type ListCloudSubnetsResponseValidationError struct { @@ -28076,12 +46160,26 @@ var _ interface { } = ListCloudSubnetsResponseValidationError{} // Validate checks the field values on Subnet with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Subnet) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Subnet with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in SubnetMultiError, or nil if none found. +func (m *Subnet) ValidateAll() error { + return m.validate(true) +} + +func (m *Subnet) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for VpcID // no validation rules for SubnetID @@ -28098,7 +46196,26 @@ func (m *Subnet) Validate() error { // no validation rules for ZoneName - if v, ok := interface{}(m.GetCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SubnetValidationError{ + field: "Cluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SubnetValidationError{ + field: "Cluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SubnetValidationError{ field: "Cluster", @@ -28108,9 +46225,29 @@ func (m *Subnet) Validate() error { } } + if len(errors) > 0 { + return SubnetMultiError(errors) + } + return nil } +// SubnetMultiError is an error wrapping multiple validation errors returned by +// Subnet.ValidateAll() if the designated constraints aren't met. +type SubnetMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SubnetMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SubnetMultiError) AllErrors() []error { return m } + // SubnetValidationError is the validation error returned by Subnet.Validate if // the designated constraints aren't met. type SubnetValidationError struct { @@ -28167,17 +46304,35 @@ var _ interface { // Validate checks the field values on CheckCidrConflictFromVpcRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CheckCidrConflictFromVpcRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CheckCidrConflictFromVpcRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// CheckCidrConflictFromVpcRequestMultiError, or nil if none found. +func (m *CheckCidrConflictFromVpcRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CheckCidrConflictFromVpcRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return CheckCidrConflictFromVpcRequestValidationError{ + err := CheckCidrConflictFromVpcRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for VpcId @@ -28185,17 +46340,42 @@ func (m *CheckCidrConflictFromVpcRequest) Validate() error { // no validation rules for Cidr if utf8.RuneCountInString(m.GetRegion()) < 2 { - return CheckCidrConflictFromVpcRequestValidationError{ + err := CheckCidrConflictFromVpcRequestValidationError{ field: "Region", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountID + if len(errors) > 0 { + return CheckCidrConflictFromVpcRequestMultiError(errors) + } + return nil } +// CheckCidrConflictFromVpcRequestMultiError is an error wrapping multiple +// validation errors returned by CheckCidrConflictFromVpcRequest.ValidateAll() +// if the designated constraints aren't met. +type CheckCidrConflictFromVpcRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CheckCidrConflictFromVpcRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CheckCidrConflictFromVpcRequestMultiError) AllErrors() []error { return m } + // CheckCidrConflictFromVpcRequestValidationError is the validation error // returned by CheckCidrConflictFromVpcRequest.Validate if the designated // constraints aren't met. @@ -28255,19 +46435,53 @@ var _ interface { // Validate checks the field values on CheckCidrConflictFromVpcResponse with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *CheckCidrConflictFromVpcResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CheckCidrConflictFromVpcResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// CheckCidrConflictFromVpcResponseMultiError, or nil if none found. +func (m *CheckCidrConflictFromVpcResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CheckCidrConflictFromVpcResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CheckCidrConflictFromVpcResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CheckCidrConflictFromVpcResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CheckCidrConflictFromVpcResponseValidationError{ field: "Data", @@ -28277,9 +46491,31 @@ func (m *CheckCidrConflictFromVpcResponse) Validate() error { } } + if len(errors) > 0 { + return CheckCidrConflictFromVpcResponseMultiError(errors) + } + return nil } +// CheckCidrConflictFromVpcResponseMultiError is an error wrapping multiple +// validation errors returned by +// CheckCidrConflictFromVpcResponse.ValidateAll() if the designated +// constraints aren't met. +type CheckCidrConflictFromVpcResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CheckCidrConflictFromVpcResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CheckCidrConflictFromVpcResponseMultiError) AllErrors() []error { return m } + // CheckCidrConflictFromVpcResponseValidationError is the validation error // returned by CheckCidrConflictFromVpcResponse.Validate if the designated // constraints aren't met. @@ -28338,16 +46574,50 @@ var _ interface { } = CheckCidrConflictFromVpcResponseValidationError{} // Validate checks the field values on ConflictInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ConflictInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ConflictInfo with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ConflictInfoMultiError, or +// nil if none found. +func (m *ConflictInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ConflictInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return ConflictInfoMultiError(errors) + } + return nil } +// ConflictInfoMultiError is an error wrapping multiple validation errors +// returned by ConflictInfo.ValidateAll() if the designated constraints aren't met. +type ConflictInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ConflictInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ConflictInfoMultiError) AllErrors() []error { return m } + // ConflictInfoValidationError is the validation error returned by // ConflictInfo.Validate if the designated constraints aren't met. type ConflictInfoValidationError struct { @@ -28404,26 +46674,67 @@ var _ interface { // Validate checks the field values on ListCloudSecurityGroupsRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudSecurityGroupsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudSecurityGroupsRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListCloudSecurityGroupsRequestMultiError, or nil if none found. +func (m *ListCloudSecurityGroupsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudSecurityGroupsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudSecurityGroupsRequestValidationError{ + err := ListCloudSecurityGroupsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region // no validation rules for AccountID + // no validation rules for ResourceGroupName + + if len(errors) > 0 { + return ListCloudSecurityGroupsRequestMultiError(errors) + } + return nil } +// ListCloudSecurityGroupsRequestMultiError is an error wrapping multiple +// validation errors returned by ListCloudSecurityGroupsRequest.ValidateAll() +// if the designated constraints aren't met. +type ListCloudSecurityGroupsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudSecurityGroupsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudSecurityGroupsRequestMultiError) AllErrors() []error { return m } + // ListCloudSecurityGroupsRequestValidationError is the validation error // returned by ListCloudSecurityGroupsRequest.Validate if the designated // constraints aren't met. @@ -28483,12 +46794,26 @@ var _ interface { // Validate checks the field values on ListCloudSecurityGroupsResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudSecurityGroupsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudSecurityGroupsResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListCloudSecurityGroupsResponseMultiError, or nil if none found. +func (m *ListCloudSecurityGroupsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudSecurityGroupsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -28498,7 +46823,26 @@ func (m *ListCloudSecurityGroupsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudSecurityGroupsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudSecurityGroupsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudSecurityGroupsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -28510,9 +46854,30 @@ func (m *ListCloudSecurityGroupsResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudSecurityGroupsResponseMultiError(errors) + } + return nil } +// ListCloudSecurityGroupsResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudSecurityGroupsResponse.ValidateAll() +// if the designated constraints aren't met. +type ListCloudSecurityGroupsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudSecurityGroupsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudSecurityGroupsResponseMultiError) AllErrors() []error { return m } + // ListCloudSecurityGroupsResponseValidationError is the validation error // returned by ListCloudSecurityGroupsResponse.Validate if the designated // constraints aren't met. @@ -28572,26 +46937,67 @@ var _ interface { // Validate checks the field values on ListKeyPairsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListKeyPairsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListKeyPairsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListKeyPairsRequestMultiError, or nil if none found. +func (m *ListKeyPairsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListKeyPairsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListKeyPairsRequestValidationError{ + err := ListKeyPairsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region // no validation rules for AccountID + // no validation rules for ResourceGroupName + + if len(errors) > 0 { + return ListKeyPairsRequestMultiError(errors) + } + return nil } +// ListKeyPairsRequestMultiError is an error wrapping multiple validation +// errors returned by ListKeyPairsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListKeyPairsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListKeyPairsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListKeyPairsRequestMultiError) AllErrors() []error { return m } + // ListKeyPairsRequestValidationError is the validation error returned by // ListKeyPairsRequest.Validate if the designated constraints aren't met. type ListKeyPairsRequestValidationError struct { @@ -28650,12 +47056,26 @@ var _ interface { // Validate checks the field values on ListKeyPairsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListKeyPairsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListKeyPairsResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListKeyPairsResponseMultiError, or nil if none found. +func (m *ListKeyPairsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListKeyPairsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -28665,7 +47085,26 @@ func (m *ListKeyPairsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListKeyPairsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListKeyPairsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListKeyPairsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -28677,9 +47116,30 @@ func (m *ListKeyPairsResponse) Validate() error { } + if len(errors) > 0 { + return ListKeyPairsResponseMultiError(errors) + } + return nil } +// ListKeyPairsResponseMultiError is an error wrapping multiple validation +// errors returned by ListKeyPairsResponse.ValidateAll() if the designated +// constraints aren't met. +type ListKeyPairsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListKeyPairsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListKeyPairsResponseMultiError) AllErrors() []error { return m } + // ListKeyPairsResponseValidationError is the validation error returned by // ListKeyPairsResponse.Validate if the designated constraints aren't met. type ListKeyPairsResponseValidationError struct { @@ -28737,21 +47197,55 @@ var _ interface { } = ListKeyPairsResponseValidationError{} // Validate checks the field values on KeyPair with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *KeyPair) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KeyPair with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in KeyPairMultiError, or nil if none found. +func (m *KeyPair) ValidateAll() error { + return m.validate(true) +} + +func (m *KeyPair) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for KeyID // no validation rules for KeyName // no validation rules for Description + if len(errors) > 0 { + return KeyPairMultiError(errors) + } + return nil } +// KeyPairMultiError is an error wrapping multiple validation errors returned +// by KeyPair.ValidateAll() if the designated constraints aren't met. +type KeyPairMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KeyPairMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m KeyPairMultiError) AllErrors() []error { return m } + // KeyPairValidationError is the validation error returned by KeyPair.Validate // if the designated constraints aren't met. type KeyPairValidationError struct { @@ -28808,47 +47302,81 @@ var _ interface { // Validate checks the field values on ListOperationLogsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListOperationLogsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListOperationLogsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListOperationLogsRequestMultiError, or nil if none found. +func (m *ListOperationLogsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListOperationLogsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if _, ok := _ListOperationLogsRequest_ResourceType_InLookup[m.GetResourceType()]; !ok { - return ListOperationLogsRequestValidationError{ + err := ListOperationLogsRequestValidationError{ field: "ResourceType", reason: "value must be in list [cluster autoscalingoption cloud cloudvpc nodegroup task]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ResourceID if m.GetStartTime() <= 0 { - return ListOperationLogsRequestValidationError{ + err := ListOperationLogsRequestValidationError{ field: "StartTime", reason: "value must be greater than 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetEndTime() <= 0 { - return ListOperationLogsRequestValidationError{ + err := ListOperationLogsRequestValidationError{ field: "EndTime", reason: "value must be greater than 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetLimit() <= 0 { - return ListOperationLogsRequestValidationError{ + err := ListOperationLogsRequestValidationError{ field: "Limit", reason: "value must be greater than 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetPage() <= 0 { - return ListOperationLogsRequestValidationError{ + err := ListOperationLogsRequestValidationError{ field: "Page", reason: "value must be greater than 0", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Simple @@ -28867,9 +47395,30 @@ func (m *ListOperationLogsRequest) Validate() error { // no validation rules for IpList + if len(errors) > 0 { + return ListOperationLogsRequestMultiError(errors) + } + return nil } +// ListOperationLogsRequestMultiError is an error wrapping multiple validation +// errors returned by ListOperationLogsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListOperationLogsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListOperationLogsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListOperationLogsRequestMultiError) AllErrors() []error { return m } + // ListOperationLogsRequestValidationError is the validation error returned by // ListOperationLogsRequest.Validate if the designated constraints aren't met. type ListOperationLogsRequestValidationError struct { @@ -28937,19 +47486,52 @@ var _ListOperationLogsRequest_ResourceType_InLookup = map[string]struct{}{ // Validate checks the field values on ListOperationLogsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListOperationLogsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListOperationLogsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListOperationLogsResponseMultiError, or nil if none found. +func (m *ListOperationLogsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListOperationLogsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListOperationLogsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListOperationLogsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListOperationLogsResponseValidationError{ field: "Data", @@ -28959,9 +47541,30 @@ func (m *ListOperationLogsResponse) Validate() error { } } + if len(errors) > 0 { + return ListOperationLogsResponseMultiError(errors) + } + return nil } +// ListOperationLogsResponseMultiError is an error wrapping multiple validation +// errors returned by ListOperationLogsResponse.ValidateAll() if the +// designated constraints aren't met. +type ListOperationLogsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListOperationLogsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListOperationLogsResponseMultiError) AllErrors() []error { return m } + // ListOperationLogsResponseValidationError is the validation error returned by // ListOperationLogsResponse.Validate if the designated constraints aren't met. type ListOperationLogsResponseValidationError struct { @@ -29020,18 +47623,51 @@ var _ interface { // Validate checks the field values on ListOperationLogsResponseData with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListOperationLogsResponseData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListOperationLogsResponseData with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListOperationLogsResponseDataMultiError, or nil if none found. +func (m *ListOperationLogsResponseData) ValidateAll() error { + return m.validate(true) +} + +func (m *ListOperationLogsResponseData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Count for idx, item := range m.GetResults() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListOperationLogsResponseDataValidationError{ + field: fmt.Sprintf("Results[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListOperationLogsResponseDataValidationError{ + field: fmt.Sprintf("Results[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListOperationLogsResponseDataValidationError{ field: fmt.Sprintf("Results[%v]", idx), @@ -29043,9 +47679,30 @@ func (m *ListOperationLogsResponseData) Validate() error { } + if len(errors) > 0 { + return ListOperationLogsResponseDataMultiError(errors) + } + return nil } +// ListOperationLogsResponseDataMultiError is an error wrapping multiple +// validation errors returned by ListOperationLogsResponseData.ValidateAll() +// if the designated constraints aren't met. +type ListOperationLogsResponseDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListOperationLogsResponseDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListOperationLogsResponseDataMultiError) AllErrors() []error { return m } + // ListOperationLogsResponseDataValidationError is the validation error // returned by ListOperationLogsResponseData.Validate if the designated // constraints aren't met. @@ -29105,12 +47762,26 @@ var _ interface { // Validate checks the field values on OperationLogDetail with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *OperationLogDetail) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OperationLogDetail with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// OperationLogDetailMultiError, or nil if none found. +func (m *OperationLogDetail) ValidateAll() error { + return m.validate(true) +} + +func (m *OperationLogDetail) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ResourceType // no validation rules for ResourceID @@ -29123,7 +47794,26 @@ func (m *OperationLogDetail) Validate() error { // no validation rules for CreateTime - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, OperationLogDetailValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, OperationLogDetailValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return OperationLogDetailValidationError{ field: "Task", @@ -29137,9 +47827,30 @@ func (m *OperationLogDetail) Validate() error { // no validation rules for Status + if len(errors) > 0 { + return OperationLogDetailMultiError(errors) + } + return nil } +// OperationLogDetailMultiError is an error wrapping multiple validation errors +// returned by OperationLogDetail.ValidateAll() if the designated constraints +// aren't met. +type OperationLogDetailMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OperationLogDetailMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OperationLogDetailMultiError) AllErrors() []error { return m } + // OperationLogDetailValidationError is the validation error returned by // OperationLogDetail.Validate if the designated constraints aren't met. type OperationLogDetailValidationError struct { @@ -29197,22 +47908,57 @@ var _ interface { } = OperationLogDetailValidationError{} // Validate checks the field values on SecurityGroup with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *SecurityGroup) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SecurityGroup with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in SecurityGroupMultiError, or +// nil if none found. +func (m *SecurityGroup) ValidateAll() error { + return m.validate(true) +} + +func (m *SecurityGroup) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for SecurityGroupID // no validation rules for SecurityGroupName // no validation rules for Description + if len(errors) > 0 { + return SecurityGroupMultiError(errors) + } + return nil } +// SecurityGroupMultiError is an error wrapping multiple validation errors +// returned by SecurityGroup.ValidateAll() if the designated constraints +// aren't met. +type SecurityGroupMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SecurityGroupMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SecurityGroupMultiError) AllErrors() []error { return m } + // SecurityGroupValidationError is the validation error returned by // SecurityGroup.Validate if the designated constraints aren't met. type SecurityGroupValidationError struct { @@ -29269,16 +48015,49 @@ var _ interface { // Validate checks the field values on NodeOperationStatus with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *NodeOperationStatus) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeOperationStatus with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// NodeOperationStatusMultiError, or nil if none found. +func (m *NodeOperationStatus) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeOperationStatus) validate(all bool) error { if m == nil { return nil } + var errors []error + for idx, item := range m.GetFail() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeOperationStatusValidationError{ + field: fmt.Sprintf("Fail[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeOperationStatusValidationError{ + field: fmt.Sprintf("Fail[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeOperationStatusValidationError{ field: fmt.Sprintf("Fail[%v]", idx), @@ -29293,7 +48072,26 @@ func (m *NodeOperationStatus) Validate() error { for idx, item := range m.GetSuccess() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeOperationStatusValidationError{ + field: fmt.Sprintf("Success[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeOperationStatusValidationError{ + field: fmt.Sprintf("Success[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeOperationStatusValidationError{ field: fmt.Sprintf("Success[%v]", idx), @@ -29305,9 +48103,30 @@ func (m *NodeOperationStatus) Validate() error { } + if len(errors) > 0 { + return NodeOperationStatusMultiError(errors) + } + return nil } +// NodeOperationStatusMultiError is an error wrapping multiple validation +// errors returned by NodeOperationStatus.ValidateAll() if the designated +// constraints aren't met. +type NodeOperationStatusMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeOperationStatusMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeOperationStatusMultiError) AllErrors() []error { return m } + // NodeOperationStatusValidationError is the validation error returned by // NodeOperationStatus.Validate if the designated constraints aren't met. type NodeOperationStatusValidationError struct { @@ -29366,19 +48185,54 @@ var _ interface { // Validate checks the field values on NodeOperationStatusInfo with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *NodeOperationStatusInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeOperationStatusInfo with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// NodeOperationStatusInfoMultiError, or nil if none found. +func (m *NodeOperationStatusInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeOperationStatusInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeName // no validation rules for Message + if len(errors) > 0 { + return NodeOperationStatusInfoMultiError(errors) + } + return nil } +// NodeOperationStatusInfoMultiError is an error wrapping multiple validation +// errors returned by NodeOperationStatusInfo.ValidateAll() if the designated +// constraints aren't met. +type NodeOperationStatusInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeOperationStatusInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeOperationStatusInfoMultiError) AllErrors() []error { return m } + // NodeOperationStatusInfoValidationError is the validation error returned by // NodeOperationStatusInfo.Validate if the designated constraints aren't met. type NodeOperationStatusInfoValidationError struct { @@ -29436,18 +48290,36 @@ var _ interface { } = NodeOperationStatusInfoValidationError{} // Validate checks the field values on DrainNodeRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *DrainNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DrainNodeRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DrainNodeRequestMultiError, or nil if none found. +func (m *DrainNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DrainNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetClusterID()) < 1 { - return DrainNodeRequestValidationError{ + err := DrainNodeRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Force @@ -29470,9 +48342,30 @@ func (m *DrainNodeRequest) Validate() error { // no validation rules for DryRun + if len(errors) > 0 { + return DrainNodeRequestMultiError(errors) + } + return nil } +// DrainNodeRequestMultiError is an error wrapping multiple validation errors +// returned by DrainNodeRequest.ValidateAll() if the designated constraints +// aren't met. +type DrainNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DrainNodeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DrainNodeRequestMultiError) AllErrors() []error { return m } + // DrainNodeRequestValidationError is the validation error returned by // DrainNodeRequest.Validate if the designated constraints aren't met. type DrainNodeRequestValidationError struct { @@ -29528,20 +48421,53 @@ var _ interface { } = DrainNodeRequestValidationError{} // Validate checks the field values on DrainNodeResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *DrainNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DrainNodeResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DrainNodeResponseMultiError, or nil if none found. +func (m *DrainNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DrainNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DrainNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DrainNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DrainNodeResponseValidationError{ field: "Data", @@ -29551,9 +48477,30 @@ func (m *DrainNodeResponse) Validate() error { } } + if len(errors) > 0 { + return DrainNodeResponseMultiError(errors) + } + return nil } +// DrainNodeResponseMultiError is an error wrapping multiple validation errors +// returned by DrainNodeResponse.ValidateAll() if the designated constraints +// aren't met. +type DrainNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DrainNodeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DrainNodeResponseMultiError) AllErrors() []error { return m } + // DrainNodeResponseValidationError is the validation error returned by // DrainNodeResponse.Validate if the designated constraints aren't met. type DrainNodeResponseValidationError struct { @@ -29611,25 +48558,64 @@ var _ interface { } = DrainNodeResponseValidationError{} // Validate checks the field values on NodeAnnotation with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeAnnotation) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeAnnotation with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeAnnotationMultiError, +// or nil if none found. +func (m *NodeAnnotation) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeAnnotation) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetNodeName()) < 1 { - return NodeAnnotationValidationError{ + err := NodeAnnotationValidationError{ field: "NodeName", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Annotations + if len(errors) > 0 { + return NodeAnnotationMultiError(errors) + } + return nil } +// NodeAnnotationMultiError is an error wrapping multiple validation errors +// returned by NodeAnnotation.ValidateAll() if the designated constraints +// aren't met. +type NodeAnnotationMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeAnnotationMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeAnnotationMultiError) AllErrors() []error { return m } + // NodeAnnotationValidationError is the validation error returned by // NodeAnnotation.Validate if the designated constraints aren't met. type NodeAnnotationValidationError struct { @@ -29686,23 +48672,60 @@ var _ interface { // Validate checks the field values on UpdateNodeAnnotationsRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeAnnotationsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeAnnotationsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeAnnotationsRequestMultiError, or nil if none found. +func (m *UpdateNodeAnnotationsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeAnnotationsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetClusterID()) < 1 { - return UpdateNodeAnnotationsRequestValidationError{ + err := UpdateNodeAnnotationsRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetNodes() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeAnnotationsRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeAnnotationsRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeAnnotationsRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), @@ -29714,9 +48737,30 @@ func (m *UpdateNodeAnnotationsRequest) Validate() error { } + if len(errors) > 0 { + return UpdateNodeAnnotationsRequestMultiError(errors) + } + return nil } +// UpdateNodeAnnotationsRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateNodeAnnotationsRequest.ValidateAll() if +// the designated constraints aren't met. +type UpdateNodeAnnotationsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeAnnotationsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeAnnotationsRequestMultiError) AllErrors() []error { return m } + // UpdateNodeAnnotationsRequestValidationError is the validation error returned // by UpdateNodeAnnotationsRequest.Validate if the designated constraints // aren't met. @@ -29776,19 +48820,52 @@ var _ interface { // Validate checks the field values on UpdateNodeAnnotationsResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeAnnotationsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeAnnotationsResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateNodeAnnotationsResponseMultiError, or nil if none found. +func (m *UpdateNodeAnnotationsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeAnnotationsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeAnnotationsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeAnnotationsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeAnnotationsResponseValidationError{ field: "Data", @@ -29798,9 +48875,30 @@ func (m *UpdateNodeAnnotationsResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeAnnotationsResponseMultiError(errors) + } + return nil } +// UpdateNodeAnnotationsResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateNodeAnnotationsResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateNodeAnnotationsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeAnnotationsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeAnnotationsResponseMultiError) AllErrors() []error { return m } + // UpdateNodeAnnotationsResponseValidationError is the validation error // returned by UpdateNodeAnnotationsResponse.Validate if the designated // constraints aren't met. @@ -29859,24 +48957,63 @@ var _ interface { } = UpdateNodeAnnotationsResponseValidationError{} // Validate checks the field values on NodeLabel with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeLabel) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeLabel with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeLabelMultiError, or nil +// if none found. +func (m *NodeLabel) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeLabel) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetNodeName()) < 1 { - return NodeLabelValidationError{ + err := NodeLabelValidationError{ field: "NodeName", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Labels + if len(errors) > 0 { + return NodeLabelMultiError(errors) + } + return nil } +// NodeLabelMultiError is an error wrapping multiple validation errors returned +// by NodeLabel.ValidateAll() if the designated constraints aren't met. +type NodeLabelMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeLabelMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeLabelMultiError) AllErrors() []error { return m } + // NodeLabelValidationError is the validation error returned by // NodeLabel.Validate if the designated constraints aren't met. type NodeLabelValidationError struct { @@ -29933,16 +49070,49 @@ var _ interface { // Validate checks the field values on UpdateNodeLabelsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeLabelsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeLabelsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeLabelsRequestMultiError, or nil if none found. +func (m *UpdateNodeLabelsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeLabelsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + for idx, item := range m.GetNodes() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeLabelsRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeLabelsRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeLabelsRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), @@ -29955,15 +49125,40 @@ func (m *UpdateNodeLabelsRequest) Validate() error { } if len(m.GetClusterID()) < 1 { - return UpdateNodeLabelsRequestValidationError{ + err := UpdateNodeLabelsRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateNodeLabelsRequestMultiError(errors) } return nil } +// UpdateNodeLabelsRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeLabelsRequest.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeLabelsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeLabelsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeLabelsRequestMultiError) AllErrors() []error { return m } + // UpdateNodeLabelsRequestValidationError is the validation error returned by // UpdateNodeLabelsRequest.Validate if the designated constraints aren't met. type UpdateNodeLabelsRequestValidationError struct { @@ -30022,19 +49217,52 @@ var _ interface { // Validate checks the field values on UpdateNodeLabelsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeLabelsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeLabelsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeLabelsResponseMultiError, or nil if none found. +func (m *UpdateNodeLabelsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeLabelsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeLabelsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeLabelsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeLabelsResponseValidationError{ field: "Data", @@ -30044,9 +49272,30 @@ func (m *UpdateNodeLabelsResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeLabelsResponseMultiError(errors) + } + return nil } +// UpdateNodeLabelsResponseMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeLabelsResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeLabelsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeLabelsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeLabelsResponseMultiError) AllErrors() []error { return m } + // UpdateNodeLabelsResponseValidationError is the validation error returned by // UpdateNodeLabelsResponse.Validate if the designated constraints aren't met. type UpdateNodeLabelsResponseValidationError struct { @@ -30104,23 +49353,61 @@ var _ interface { } = UpdateNodeLabelsResponseValidationError{} // Validate checks the field values on NodeTaint with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeTaint) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeTaint with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeTaintMultiError, or nil +// if none found. +func (m *NodeTaint) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeTaint) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetNodeName()) < 1 { - return NodeTaintValidationError{ + err := NodeTaintValidationError{ field: "NodeName", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTaintValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTaintValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTaintValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -30132,9 +49419,29 @@ func (m *NodeTaint) Validate() error { } + if len(errors) > 0 { + return NodeTaintMultiError(errors) + } + return nil } +// NodeTaintMultiError is an error wrapping multiple validation errors returned +// by NodeTaint.ValidateAll() if the designated constraints aren't met. +type NodeTaintMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeTaintMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeTaintMultiError) AllErrors() []error { return m } + // NodeTaintValidationError is the validation error returned by // NodeTaint.Validate if the designated constraints aren't met. type NodeTaintValidationError struct { @@ -30191,16 +49498,49 @@ var _ interface { // Validate checks the field values on UpdateNodeTaintsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeTaintsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeTaintsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeTaintsRequestMultiError, or nil if none found. +func (m *UpdateNodeTaintsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeTaintsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + for idx, item := range m.GetNodes() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTaintsRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTaintsRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTaintsRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), @@ -30213,15 +49553,40 @@ func (m *UpdateNodeTaintsRequest) Validate() error { } if len(m.GetClusterID()) < 1 { - return UpdateNodeTaintsRequestValidationError{ + err := UpdateNodeTaintsRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateNodeTaintsRequestMultiError(errors) } return nil } +// UpdateNodeTaintsRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeTaintsRequest.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeTaintsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeTaintsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeTaintsRequestMultiError) AllErrors() []error { return m } + // UpdateNodeTaintsRequestValidationError is the validation error returned by // UpdateNodeTaintsRequest.Validate if the designated constraints aren't met. type UpdateNodeTaintsRequestValidationError struct { @@ -30280,19 +49645,52 @@ var _ interface { // Validate checks the field values on UpdateNodeTaintsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeTaintsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeTaintsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeTaintsResponseMultiError, or nil if none found. +func (m *UpdateNodeTaintsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeTaintsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTaintsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTaintsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTaintsResponseValidationError{ field: "Data", @@ -30302,9 +49700,30 @@ func (m *UpdateNodeTaintsResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeTaintsResponseMultiError(errors) + } + return nil } +// UpdateNodeTaintsResponseMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeTaintsResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeTaintsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeTaintsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeTaintsResponseMultiError) AllErrors() []error { return m } + // UpdateNodeTaintsResponseValidationError is the validation error returned by // UpdateNodeTaintsResponse.Validate if the designated constraints aren't met. type UpdateNodeTaintsResponseValidationError struct { @@ -30362,16 +49781,51 @@ var _ interface { } = UpdateNodeTaintsResponseValidationError{} // Validate checks the field values on HealthRequest with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *HealthRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HealthRequest with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in HealthRequestMultiError, or +// nil if none found. +func (m *HealthRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *HealthRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return HealthRequestMultiError(errors) + } + return nil } +// HealthRequestMultiError is an error wrapping multiple validation errors +// returned by HealthRequest.ValidateAll() if the designated constraints +// aren't met. +type HealthRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HealthRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m HealthRequestMultiError) AllErrors() []error { return m } + // HealthRequestValidationError is the validation error returned by // HealthRequest.Validate if the designated constraints aren't met. type HealthRequestValidationError struct { @@ -30427,22 +49881,57 @@ var _ interface { } = HealthRequestValidationError{} // Validate checks the field values on HealthResponse with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *HealthResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HealthResponse with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in HealthResponseMultiError, +// or nil if none found. +func (m *HealthResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *HealthResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Available + if len(errors) > 0 { + return HealthResponseMultiError(errors) + } + return nil } +// HealthResponseMultiError is an error wrapping multiple validation errors +// returned by HealthResponse.ValidateAll() if the designated constraints +// aren't met. +type HealthResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HealthResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m HealthResponseMultiError) AllErrors() []error { return m } + // HealthResponseValidationError is the validation error returned by // HealthResponse.Validate if the designated constraints aren't met. type HealthResponseValidationError struct { @@ -30499,17 +49988,52 @@ var _ interface { // Validate checks the field values on ListResourceSchemaRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListResourceSchemaRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListResourceSchemaRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListResourceSchemaRequestMultiError, or nil if none found. +func (m *ListResourceSchemaRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListResourceSchemaRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID + if len(errors) > 0 { + return ListResourceSchemaRequestMultiError(errors) + } + return nil } +// ListResourceSchemaRequestMultiError is an error wrapping multiple validation +// errors returned by ListResourceSchemaRequest.ValidateAll() if the +// designated constraints aren't met. +type ListResourceSchemaRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListResourceSchemaRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListResourceSchemaRequestMultiError) AllErrors() []error { return m } + // ListResourceSchemaRequestValidationError is the validation error returned by // ListResourceSchemaRequest.Validate if the designated constraints aren't met. type ListResourceSchemaRequestValidationError struct { @@ -30568,19 +50092,54 @@ var _ interface { // Validate checks the field values on GetResourceSchemaRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetResourceSchemaRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetResourceSchemaRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetResourceSchemaRequestMultiError, or nil if none found. +func (m *GetResourceSchemaRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetResourceSchemaRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Name + if len(errors) > 0 { + return GetResourceSchemaRequestMultiError(errors) + } + return nil } +// GetResourceSchemaRequestMultiError is an error wrapping multiple validation +// errors returned by GetResourceSchemaRequest.ValidateAll() if the designated +// constraints aren't met. +type GetResourceSchemaRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetResourceSchemaRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetResourceSchemaRequestMultiError) AllErrors() []error { return m } + // GetResourceSchemaRequestValidationError is the validation error returned by // GetResourceSchemaRequest.Validate if the designated constraints aren't met. type GetResourceSchemaRequestValidationError struct { @@ -30639,12 +50198,26 @@ var _ interface { // Validate checks the field values on QueryPermByActionIDReqData with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *QueryPermByActionIDReqData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on QueryPermByActionIDReqData with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// QueryPermByActionIDReqDataMultiError, or nil if none found. +func (m *QueryPermByActionIDReqData) ValidateAll() error { + return m.validate(true) +} + +func (m *QueryPermByActionIDReqData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectId // no validation rules for ClusterId @@ -30656,15 +50229,40 @@ func (m *QueryPermByActionIDReqData) Validate() error { // no validation rules for AccountId if utf8.RuneCountInString(m.GetOperator()) < 1 { - return QueryPermByActionIDReqDataValidationError{ + err := QueryPermByActionIDReqDataValidationError{ field: "Operator", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return QueryPermByActionIDReqDataMultiError(errors) } return nil } +// QueryPermByActionIDReqDataMultiError is an error wrapping multiple +// validation errors returned by QueryPermByActionIDReqData.ValidateAll() if +// the designated constraints aren't met. +type QueryPermByActionIDReqDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m QueryPermByActionIDReqDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m QueryPermByActionIDReqDataMultiError) AllErrors() []error { return m } + // QueryPermByActionIDReqDataValidationError is the validation error returned // by QueryPermByActionIDReqData.Validate if the designated constraints aren't met. type QueryPermByActionIDReqDataValidationError struct { @@ -30723,15 +50321,48 @@ var _ interface { // Validate checks the field values on QueryPermByActionIDRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *QueryPermByActionIDRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on QueryPermByActionIDRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// QueryPermByActionIDRequestMultiError, or nil if none found. +func (m *QueryPermByActionIDRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *QueryPermByActionIDRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ActionID - if v, ok := interface{}(m.GetPermCtx()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetPermCtx()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, QueryPermByActionIDRequestValidationError{ + field: "PermCtx", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, QueryPermByActionIDRequestValidationError{ + field: "PermCtx", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetPermCtx()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return QueryPermByActionIDRequestValidationError{ field: "PermCtx", @@ -30741,9 +50372,30 @@ func (m *QueryPermByActionIDRequest) Validate() error { } } + if len(errors) > 0 { + return QueryPermByActionIDRequestMultiError(errors) + } + return nil } +// QueryPermByActionIDRequestMultiError is an error wrapping multiple +// validation errors returned by QueryPermByActionIDRequest.ValidateAll() if +// the designated constraints aren't met. +type QueryPermByActionIDRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m QueryPermByActionIDRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m QueryPermByActionIDRequestMultiError) AllErrors() []error { return m } + // QueryPermByActionIDRequestValidationError is the validation error returned // by QueryPermByActionIDRequest.Validate if the designated constraints aren't met. type QueryPermByActionIDRequestValidationError struct { @@ -30801,32 +50453,95 @@ var _ interface { } = QueryPermByActionIDRequestValidationError{} // Validate checks the field values on Perms with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Perms) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Perms with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in PermsMultiError, or nil if none found. +func (m *Perms) ValidateAll() error { + return m.validate(true) +} + +func (m *Perms) validate(all bool) error { if m == nil { return nil } - for key, val := range m.GetPerms() { - _ = val + var errors []error - // no validation rules for Perms[key] + { + sorted_keys := make([]string, len(m.GetPerms())) + i := 0 + for key := range m.GetPerms() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetPerms()[key] + _ = val - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return PermsValidationError{ - field: fmt.Sprintf("Perms[%v]", key), - reason: "embedded message failed validation", - cause: err, + // no validation rules for Perms[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, PermsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, PermsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PermsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } + } + } + if len(errors) > 0 { + return PermsMultiError(errors) } return nil } +// PermsMultiError is an error wrapping multiple validation errors returned by +// Perms.ValidateAll() if the designated constraints aren't met. +type PermsMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m PermsMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m PermsMultiError) AllErrors() []error { return m } + // PermsValidationError is the validation error returned by Perms.Validate if // the designated constraints aren't met. type PermsValidationError struct { @@ -30883,15 +50598,48 @@ var _ interface { // Validate checks the field values on QueryPermByActionIDResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *QueryPermByActionIDResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on QueryPermByActionIDResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// QueryPermByActionIDResponseMultiError, or nil if none found. +func (m *QueryPermByActionIDResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *QueryPermByActionIDResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, QueryPermByActionIDResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, QueryPermByActionIDResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return QueryPermByActionIDResponseValidationError{ field: "Data", @@ -30901,9 +50649,30 @@ func (m *QueryPermByActionIDResponse) Validate() error { } } + if len(errors) > 0 { + return QueryPermByActionIDResponseMultiError(errors) + } + return nil } +// QueryPermByActionIDResponseMultiError is an error wrapping multiple +// validation errors returned by QueryPermByActionIDResponse.ValidateAll() if +// the designated constraints aren't met. +type QueryPermByActionIDResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m QueryPermByActionIDResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m QueryPermByActionIDResponseMultiError) AllErrors() []error { return m } + // QueryPermByActionIDResponseValidationError is the validation error returned // by QueryPermByActionIDResponse.Validate if the designated constraints // aren't met. @@ -30962,19 +50731,53 @@ var _ interface { } = QueryPermByActionIDResponseValidationError{} // Validate checks the field values on CommonResp with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CommonResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CommonResp with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CommonRespMultiError, or +// nil if none found. +func (m *CommonResp) ValidateAll() error { + return m.validate(true) +} + +func (m *CommonResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CommonRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CommonRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CommonRespValidationError{ field: "Data", @@ -30984,9 +50787,29 @@ func (m *CommonResp) Validate() error { } } + if len(errors) > 0 { + return CommonRespMultiError(errors) + } + return nil } +// CommonRespMultiError is an error wrapping multiple validation errors +// returned by CommonResp.ValidateAll() if the designated constraints aren't met. +type CommonRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CommonRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CommonRespMultiError) AllErrors() []error { return m } + // CommonRespValidationError is the validation error returned by // CommonResp.Validate if the designated constraints aren't met. type CommonRespValidationError struct { @@ -31042,20 +50865,53 @@ var _ interface { } = CommonRespValidationError{} // Validate checks the field values on CommonListResp with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CommonListResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CommonListResp with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CommonListRespMultiError, +// or nil if none found. +func (m *CommonListResp) ValidateAll() error { + return m.validate(true) +} + +func (m *CommonListResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CommonListRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CommonListRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CommonListRespValidationError{ field: "Data", @@ -31065,9 +50921,30 @@ func (m *CommonListResp) Validate() error { } } + if len(errors) > 0 { + return CommonListRespMultiError(errors) + } + return nil } +// CommonListRespMultiError is an error wrapping multiple validation errors +// returned by CommonListResp.ValidateAll() if the designated constraints +// aren't met. +type CommonListRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CommonListRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CommonListRespMultiError) AllErrors() []error { return m } + // CommonListRespValidationError is the validation error returned by // CommonListResp.Validate if the designated constraints aren't met. type CommonListRespValidationError struct { @@ -31124,15 +51001,50 @@ var _ interface { // Validate checks the field values on ListBKCloudRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListBKCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListBKCloudRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListBKCloudRequestMultiError, or nil if none found. +func (m *ListBKCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListBKCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return ListBKCloudRequestMultiError(errors) + } + return nil } +// ListBKCloudRequestMultiError is an error wrapping multiple validation errors +// returned by ListBKCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type ListBKCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListBKCloudRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListBKCloudRequestMultiError) AllErrors() []error { return m } + // ListBKCloudRequestValidationError is the validation error returned by // ListBKCloudRequest.Validate if the designated constraints aren't met. type ListBKCloudRequestValidationError struct { @@ -31191,29 +51103,70 @@ var _ interface { // Validate checks the field values on ListCCTopologyRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCCTopologyRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCCTopologyRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCCTopologyRequestMultiError, or nil if none found. +func (m *ListCCTopologyRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCCTopologyRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return ListCCTopologyRequestValidationError{ + err := ListCCTopologyRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_ListCCTopologyRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return ListCCTopologyRequestValidationError{ + err := ListCCTopologyRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for BizID - if v, ok := interface{}(m.GetFilterInter()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetFilterInter()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCCTopologyRequestValidationError{ + field: "FilterInter", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCCTopologyRequestValidationError{ + field: "FilterInter", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetFilterInter()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCCTopologyRequestValidationError{ field: "FilterInter", @@ -31223,9 +51176,30 @@ func (m *ListCCTopologyRequest) Validate() error { } } + if len(errors) > 0 { + return ListCCTopologyRequestMultiError(errors) + } + return nil } +// ListCCTopologyRequestMultiError is an error wrapping multiple validation +// errors returned by ListCCTopologyRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCCTopologyRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCCTopologyRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCCTopologyRequestMultiError) AllErrors() []error { return m } + // ListCCTopologyRequestValidationError is the validation error returned by // ListCCTopologyRequest.Validate if the designated constraints aren't met. type ListCCTopologyRequestValidationError struct { @@ -31286,33 +51260,76 @@ var _ListCCTopologyRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-] // Validate checks the field values on GetBkSopsTemplateListRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBkSopsTemplateListRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBkSopsTemplateListRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetBkSopsTemplateListRequestMultiError, or nil if none found. +func (m *GetBkSopsTemplateListRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBkSopsTemplateListRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for BusinessID // no validation rules for Operator if _, ok := _GetBkSopsTemplateListRequest_TemplateSource_InLookup[m.GetTemplateSource()]; !ok { - return GetBkSopsTemplateListRequestValidationError{ + err := GetBkSopsTemplateListRequestValidationError{ field: "TemplateSource", reason: "value must be in list [business common ]", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _GetBkSopsTemplateListRequest_Scope_InLookup[m.GetScope()]; !ok { - return GetBkSopsTemplateListRequestValidationError{ + err := GetBkSopsTemplateListRequestValidationError{ field: "Scope", reason: "value must be in list [cmdb_biz project ]", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetBkSopsTemplateListRequestMultiError(errors) } return nil } +// GetBkSopsTemplateListRequestMultiError is an error wrapping multiple +// validation errors returned by GetBkSopsTemplateListRequest.ValidateAll() if +// the designated constraints aren't met. +type GetBkSopsTemplateListRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBkSopsTemplateListRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetBkSopsTemplateListRequestMultiError) AllErrors() []error { return m } + // GetBkSopsTemplateListRequestValidationError is the validation error returned // by GetBkSopsTemplateListRequest.Validate if the designated constraints // aren't met. @@ -31384,12 +51401,26 @@ var _GetBkSopsTemplateListRequest_Scope_InLookup = map[string]struct{}{ // Validate checks the field values on GetBkSopsTemplateListResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBkSopsTemplateListResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBkSopsTemplateListResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetBkSopsTemplateListResponseMultiError, or nil if none found. +func (m *GetBkSopsTemplateListResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBkSopsTemplateListResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -31397,7 +51428,26 @@ func (m *GetBkSopsTemplateListResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetBkSopsTemplateListResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetBkSopsTemplateListResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetBkSopsTemplateListResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -31409,9 +51459,30 @@ func (m *GetBkSopsTemplateListResponse) Validate() error { } + if len(errors) > 0 { + return GetBkSopsTemplateListResponseMultiError(errors) + } + return nil } +// GetBkSopsTemplateListResponseMultiError is an error wrapping multiple +// validation errors returned by GetBkSopsTemplateListResponse.ValidateAll() +// if the designated constraints aren't met. +type GetBkSopsTemplateListResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBkSopsTemplateListResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetBkSopsTemplateListResponseMultiError) AllErrors() []error { return m } + // GetBkSopsTemplateListResponseValidationError is the validation error // returned by GetBkSopsTemplateListResponse.Validate if the designated // constraints aren't met. @@ -31470,13 +51541,27 @@ var _ interface { } = GetBkSopsTemplateListResponseValidationError{} // Validate checks the field values on TemplateInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *TemplateInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TemplateInfo with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in TemplateInfoMultiError, or +// nil if none found. +func (m *TemplateInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *TemplateInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for TemplateName // no validation rules for TemplateID @@ -31491,9 +51576,29 @@ func (m *TemplateInfo) Validate() error { // no validation rules for ProjectID + if len(errors) > 0 { + return TemplateInfoMultiError(errors) + } + return nil } +// TemplateInfoMultiError is an error wrapping multiple validation errors +// returned by TemplateInfo.ValidateAll() if the designated constraints aren't met. +type TemplateInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TemplateInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TemplateInfoMultiError) AllErrors() []error { return m } + // TemplateInfoValidationError is the validation error returned by // TemplateInfo.Validate if the designated constraints aren't met. type TemplateInfoValidationError struct { @@ -31550,12 +51655,26 @@ var _ interface { // Validate checks the field values on GetBkSopsTemplateInfoRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBkSopsTemplateInfoRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBkSopsTemplateInfoRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetBkSopsTemplateInfoRequestMultiError, or nil if none found. +func (m *GetBkSopsTemplateInfoRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBkSopsTemplateInfoRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for BusinessID // no validation rules for TemplateID @@ -31563,22 +51682,51 @@ func (m *GetBkSopsTemplateInfoRequest) Validate() error { // no validation rules for Operator if _, ok := _GetBkSopsTemplateInfoRequest_TemplateSource_InLookup[m.GetTemplateSource()]; !ok { - return GetBkSopsTemplateInfoRequestValidationError{ + err := GetBkSopsTemplateInfoRequestValidationError{ field: "TemplateSource", reason: "value must be in list [business common ]", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _GetBkSopsTemplateInfoRequest_Scope_InLookup[m.GetScope()]; !ok { - return GetBkSopsTemplateInfoRequestValidationError{ + err := GetBkSopsTemplateInfoRequestValidationError{ field: "Scope", reason: "value must be in list [cmdb_biz project ]", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetBkSopsTemplateInfoRequestMultiError(errors) } return nil } +// GetBkSopsTemplateInfoRequestMultiError is an error wrapping multiple +// validation errors returned by GetBkSopsTemplateInfoRequest.ValidateAll() if +// the designated constraints aren't met. +type GetBkSopsTemplateInfoRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBkSopsTemplateInfoRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetBkSopsTemplateInfoRequestMultiError) AllErrors() []error { return m } + // GetBkSopsTemplateInfoRequestValidationError is the validation error returned // by GetBkSopsTemplateInfoRequest.Validate if the designated constraints // aren't met. @@ -31650,17 +51798,50 @@ var _GetBkSopsTemplateInfoRequest_Scope_InLookup = map[string]struct{}{ // Validate checks the field values on GetBkSopsTemplateInfoResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBkSopsTemplateInfoResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBkSopsTemplateInfoResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetBkSopsTemplateInfoResponseMultiError, or nil if none found. +func (m *GetBkSopsTemplateInfoResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBkSopsTemplateInfoResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetBkSopsTemplateInfoResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetBkSopsTemplateInfoResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetBkSopsTemplateInfoResponseValidationError{ field: "Data", @@ -31670,9 +51851,30 @@ func (m *GetBkSopsTemplateInfoResponse) Validate() error { } } + if len(errors) > 0 { + return GetBkSopsTemplateInfoResponseMultiError(errors) + } + return nil } +// GetBkSopsTemplateInfoResponseMultiError is an error wrapping multiple +// validation errors returned by GetBkSopsTemplateInfoResponse.ValidateAll() +// if the designated constraints aren't met. +type GetBkSopsTemplateInfoResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBkSopsTemplateInfoResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetBkSopsTemplateInfoResponseMultiError) AllErrors() []error { return m } + // GetBkSopsTemplateInfoResponseValidationError is the validation error // returned by GetBkSopsTemplateInfoResponse.Validate if the designated // constraints aren't met. @@ -31732,18 +51934,51 @@ var _ interface { // Validate checks the field values on TemplateDetailInfo with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *TemplateDetailInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TemplateDetailInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// TemplateDetailInfoMultiError, or nil if none found. +func (m *TemplateDetailInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *TemplateDetailInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for TemplateUrl for idx, item := range m.GetValues() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, TemplateDetailInfoValidationError{ + field: fmt.Sprintf("Values[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, TemplateDetailInfoValidationError{ + field: fmt.Sprintf("Values[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return TemplateDetailInfoValidationError{ field: fmt.Sprintf("Values[%v]", idx), @@ -31755,9 +51990,30 @@ func (m *TemplateDetailInfo) Validate() error { } + if len(errors) > 0 { + return TemplateDetailInfoMultiError(errors) + } + return nil } +// TemplateDetailInfoMultiError is an error wrapping multiple validation errors +// returned by TemplateDetailInfo.ValidateAll() if the designated constraints +// aren't met. +type TemplateDetailInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TemplateDetailInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TemplateDetailInfoMultiError) AllErrors() []error { return m } + // TemplateDetailInfoValidationError is the validation error returned by // TemplateDetailInfo.Validate if the designated constraints aren't met. type TemplateDetailInfoValidationError struct { @@ -31815,13 +52071,27 @@ var _ interface { } = TemplateDetailInfoValidationError{} // Validate checks the field values on ConstantValue with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ConstantValue) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ConstantValue with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ConstantValueMultiError, or +// nil if none found. +func (m *ConstantValue) ValidateAll() error { + return m.validate(true) +} + +func (m *ConstantValue) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Key // no validation rules for Name @@ -31830,9 +52100,30 @@ func (m *ConstantValue) Validate() error { // no validation rules for Desc + if len(errors) > 0 { + return ConstantValueMultiError(errors) + } + return nil } +// ConstantValueMultiError is an error wrapping multiple validation errors +// returned by ConstantValue.ValidateAll() if the designated constraints +// aren't met. +type ConstantValueMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ConstantValueMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ConstantValueMultiError) AllErrors() []error { return m } + // ConstantValueValidationError is the validation error returned by // ConstantValue.Validate if the designated constraints aren't met. type ConstantValueValidationError struct { @@ -31889,19 +52180,54 @@ var _ interface { // Validate checks the field values on GetInnerTemplateValuesRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetInnerTemplateValuesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetInnerTemplateValuesRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetInnerTemplateValuesRequestMultiError, or nil if none found. +func (m *GetInnerTemplateValuesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetInnerTemplateValuesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID // no validation rules for Operator + if len(errors) > 0 { + return GetInnerTemplateValuesRequestMultiError(errors) + } + return nil } +// GetInnerTemplateValuesRequestMultiError is an error wrapping multiple +// validation errors returned by GetInnerTemplateValuesRequest.ValidateAll() +// if the designated constraints aren't met. +type GetInnerTemplateValuesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetInnerTemplateValuesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetInnerTemplateValuesRequestMultiError) AllErrors() []error { return m } + // GetInnerTemplateValuesRequestValidationError is the validation error // returned by GetInnerTemplateValuesRequest.Validate if the designated // constraints aren't met. @@ -31961,12 +52287,26 @@ var _ interface { // Validate checks the field values on GetInnerTemplateValuesResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetInnerTemplateValuesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetInnerTemplateValuesResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetInnerTemplateValuesResponseMultiError, or nil if none found. +func (m *GetInnerTemplateValuesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetInnerTemplateValuesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -31974,7 +52314,26 @@ func (m *GetInnerTemplateValuesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetInnerTemplateValuesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetInnerTemplateValuesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetInnerTemplateValuesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -31986,9 +52345,30 @@ func (m *GetInnerTemplateValuesResponse) Validate() error { } + if len(errors) > 0 { + return GetInnerTemplateValuesResponseMultiError(errors) + } + return nil } +// GetInnerTemplateValuesResponseMultiError is an error wrapping multiple +// validation errors returned by GetInnerTemplateValuesResponse.ValidateAll() +// if the designated constraints aren't met. +type GetInnerTemplateValuesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetInnerTemplateValuesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetInnerTemplateValuesResponseMultiError) AllErrors() []error { return m } + // GetInnerTemplateValuesResponseValidationError is the validation error // returned by GetInnerTemplateValuesResponse.Validate if the designated // constraints aren't met. @@ -32047,13 +52427,27 @@ var _ interface { } = GetInnerTemplateValuesResponseValidationError{} // Validate checks the field values on TemplateValue with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *TemplateValue) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TemplateValue with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in TemplateValueMultiError, or +// nil if none found. +func (m *TemplateValue) ValidateAll() error { + return m.validate(true) +} + +func (m *TemplateValue) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for Desc @@ -32064,9 +52458,30 @@ func (m *TemplateValue) Validate() error { // no validation rules for Value + if len(errors) > 0 { + return TemplateValueMultiError(errors) + } + return nil } +// TemplateValueMultiError is an error wrapping multiple validation errors +// returned by TemplateValue.ValidateAll() if the designated constraints +// aren't met. +type TemplateValueMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TemplateValueMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TemplateValueMultiError) AllErrors() []error { return m } + // TemplateValueValidationError is the validation error returned by // TemplateValue.Validate if the designated constraints aren't met. type TemplateValueValidationError struct { @@ -32123,45 +52538,96 @@ var _ interface { // Validate checks the field values on DebugBkSopsTaskRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DebugBkSopsTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DebugBkSopsTaskRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DebugBkSopsTaskRequestMultiError, or nil if none found. +func (m *DebugBkSopsTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DebugBkSopsTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetBusinessID()) < 1 { - return DebugBkSopsTaskRequestValidationError{ + err := DebugBkSopsTaskRequestValidationError{ field: "BusinessID", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetTemplateID()) < 1 { - return DebugBkSopsTaskRequestValidationError{ + err := DebugBkSopsTaskRequestValidationError{ field: "TemplateID", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetOperator()) < 1 { - return DebugBkSopsTaskRequestValidationError{ + err := DebugBkSopsTaskRequestValidationError{ field: "Operator", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _DebugBkSopsTaskRequest_TemplateSource_InLookup[m.GetTemplateSource()]; !ok { - return DebugBkSopsTaskRequestValidationError{ + err := DebugBkSopsTaskRequestValidationError{ field: "TemplateSource", reason: "value must be in list [business common ]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Constant + if len(errors) > 0 { + return DebugBkSopsTaskRequestMultiError(errors) + } + return nil } +// DebugBkSopsTaskRequestMultiError is an error wrapping multiple validation +// errors returned by DebugBkSopsTaskRequest.ValidateAll() if the designated +// constraints aren't met. +type DebugBkSopsTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DebugBkSopsTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DebugBkSopsTaskRequestMultiError) AllErrors() []error { return m } + // DebugBkSopsTaskRequestValidationError is the validation error returned by // DebugBkSopsTaskRequest.Validate if the designated constraints aren't met. type DebugBkSopsTaskRequestValidationError struct { @@ -32226,17 +52692,50 @@ var _DebugBkSopsTaskRequest_TemplateSource_InLookup = map[string]struct{}{ // Validate checks the field values on DebugBkSopsTaskResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DebugBkSopsTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DebugBkSopsTaskResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DebugBkSopsTaskResponseMultiError, or nil if none found. +func (m *DebugBkSopsTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DebugBkSopsTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DebugBkSopsTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DebugBkSopsTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DebugBkSopsTaskResponseValidationError{ field: "Data", @@ -32246,9 +52745,30 @@ func (m *DebugBkSopsTaskResponse) Validate() error { } } + if len(errors) > 0 { + return DebugBkSopsTaskResponseMultiError(errors) + } + return nil } +// DebugBkSopsTaskResponseMultiError is an error wrapping multiple validation +// errors returned by DebugBkSopsTaskResponse.ValidateAll() if the designated +// constraints aren't met. +type DebugBkSopsTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DebugBkSopsTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DebugBkSopsTaskResponseMultiError) AllErrors() []error { return m } + // DebugBkSopsTaskResponseValidationError is the validation error returned by // DebugBkSopsTaskResponse.Validate if the designated constraints aren't met. type DebugBkSopsTaskResponseValidationError struct { @@ -32307,13 +52827,46 @@ var _ interface { // Validate checks the field values on DebugBkSopsTaskInfo with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DebugBkSopsTaskInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DebugBkSopsTaskInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DebugBkSopsTaskInfoMultiError, or nil if none found. +func (m *DebugBkSopsTaskInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *DebugBkSopsTaskInfo) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DebugBkSopsTaskInfoValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DebugBkSopsTaskInfoValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DebugBkSopsTaskInfoValidationError{ field: "Task", @@ -32323,9 +52876,30 @@ func (m *DebugBkSopsTaskInfo) Validate() error { } } + if len(errors) > 0 { + return DebugBkSopsTaskInfoMultiError(errors) + } + return nil } +// DebugBkSopsTaskInfoMultiError is an error wrapping multiple validation +// errors returned by DebugBkSopsTaskInfo.ValidateAll() if the designated +// constraints aren't met. +type DebugBkSopsTaskInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DebugBkSopsTaskInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DebugBkSopsTaskInfoMultiError) AllErrors() []error { return m } + // DebugBkSopsTaskInfoValidationError is the validation error returned by // DebugBkSopsTaskInfo.Validate if the designated constraints aren't met. type DebugBkSopsTaskInfoValidationError struct { @@ -32383,13 +52957,27 @@ var _ interface { } = DebugBkSopsTaskInfoValidationError{} // Validate checks the field values on CloudModuleFlag with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CloudModuleFlag) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudModuleFlag with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CloudModuleFlagMultiError, or nil if none found. +func (m *CloudModuleFlag) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudModuleFlag) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Version @@ -32414,7 +53002,26 @@ func (m *CloudModuleFlag) Validate() error { // no validation rules for FlagType - if v, ok := interface{}(m.GetRegex()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRegex()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudModuleFlagValidationError{ + field: "Regex", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudModuleFlagValidationError{ + field: "Regex", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRegex()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudModuleFlagValidationError{ field: "Regex", @@ -32424,7 +53031,26 @@ func (m *CloudModuleFlag) Validate() error { } } - if v, ok := interface{}(m.GetRange()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRange()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudModuleFlagValidationError{ + field: "Range", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudModuleFlagValidationError{ + field: "Range", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRange()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudModuleFlagValidationError{ field: "Range", @@ -32436,9 +53062,30 @@ func (m *CloudModuleFlag) Validate() error { // no validation rules for NetworkType + if len(errors) > 0 { + return CloudModuleFlagMultiError(errors) + } + return nil } +// CloudModuleFlagMultiError is an error wrapping multiple validation errors +// returned by CloudModuleFlag.ValidateAll() if the designated constraints +// aren't met. +type CloudModuleFlagMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudModuleFlagMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudModuleFlagMultiError) AllErrors() []error { return m } + // CloudModuleFlagValidationError is the validation error returned by // CloudModuleFlag.Validate if the designated constraints aren't met. type CloudModuleFlagValidationError struct { @@ -32494,19 +53141,53 @@ var _ interface { } = CloudModuleFlagValidationError{} // Validate checks the field values on FlagInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *FlagInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on FlagInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in FlagInfoMultiError, or nil +// if none found. +func (m *FlagInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *FlagInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for FlagName // no validation rules for FlagDesc // no validation rules for DefaultValue - if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetEnable()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return FlagInfoValidationError{ field: "Enable", @@ -32518,7 +53199,26 @@ func (m *FlagInfo) Validate() error { // no validation rules for FlagType - if v, ok := interface{}(m.GetRegex()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRegex()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Regex", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Regex", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRegex()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return FlagInfoValidationError{ field: "Regex", @@ -32528,7 +53228,26 @@ func (m *FlagInfo) Validate() error { } } - if v, ok := interface{}(m.GetRange()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRange()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Range", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Range", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRange()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return FlagInfoValidationError{ field: "Range", @@ -32540,9 +53259,29 @@ func (m *FlagInfo) Validate() error { // no validation rules for NetworkType + if len(errors) > 0 { + return FlagInfoMultiError(errors) + } + return nil } +// FlagInfoMultiError is an error wrapping multiple validation errors returned +// by FlagInfo.ValidateAll() if the designated constraints aren't met. +type FlagInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m FlagInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m FlagInfoMultiError) AllErrors() []error { return m } + // FlagInfoValidationError is the validation error returned by // FlagInfo.Validate if the designated constraints aren't met. type FlagInfoValidationError struct { @@ -32598,19 +53337,54 @@ var _ interface { } = FlagInfoValidationError{} // Validate checks the field values on ValueRegex with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ValueRegex) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ValueRegex with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ValueRegexMultiError, or +// nil if none found. +func (m *ValueRegex) ValidateAll() error { + return m.validate(true) +} + +func (m *ValueRegex) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Validator // no validation rules for Message + if len(errors) > 0 { + return ValueRegexMultiError(errors) + } + return nil } +// ValueRegexMultiError is an error wrapping multiple validation errors +// returned by ValueRegex.ValidateAll() if the designated constraints aren't met. +type ValueRegexMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ValueRegexMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ValueRegexMultiError) AllErrors() []error { return m } + // ValueRegexValidationError is the validation error returned by // ValueRegex.Validate if the designated constraints aren't met. type ValueRegexValidationError struct { @@ -32666,20 +53440,54 @@ var _ interface { } = ValueRegexValidationError{} // Validate checks the field values on NumberRange with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NumberRange) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NumberRange with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NumberRangeMultiError, or +// nil if none found. +func (m *NumberRange) ValidateAll() error { + return m.validate(true) +} + +func (m *NumberRange) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Min // no validation rules for Max + if len(errors) > 0 { + return NumberRangeMultiError(errors) + } + return nil } +// NumberRangeMultiError is an error wrapping multiple validation errors +// returned by NumberRange.ValidateAll() if the designated constraints aren't met. +type NumberRangeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NumberRangeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NumberRangeMultiError) AllErrors() []error { return m } + // NumberRangeValidationError is the validation error returned by // NumberRange.Validate if the designated constraints aren't met. type NumberRangeValidationError struct { @@ -32736,34 +53544,75 @@ var _ interface { // Validate checks the field values on CreateCloudModuleFlagRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudModuleFlagRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudModuleFlagRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateCloudModuleFlagRequestMultiError, or nil if none found. +func (m *CreateCloudModuleFlagRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudModuleFlagRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Version if utf8.RuneCountInString(m.GetModuleID()) < 1 { - return CreateCloudModuleFlagRequestValidationError{ + err := CreateCloudModuleFlagRequestValidationError{ field: "ModuleID", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if len(m.GetFlagList()) < 1 { - return CreateCloudModuleFlagRequestValidationError{ + err := CreateCloudModuleFlagRequestValidationError{ field: "FlagList", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetFlagList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudModuleFlagRequestValidationError{ + field: fmt.Sprintf("FlagList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudModuleFlagRequestValidationError{ + field: fmt.Sprintf("FlagList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudModuleFlagRequestValidationError{ field: fmt.Sprintf("FlagList[%v]", idx), @@ -32777,9 +53626,30 @@ func (m *CreateCloudModuleFlagRequest) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return CreateCloudModuleFlagRequestMultiError(errors) + } + return nil } +// CreateCloudModuleFlagRequestMultiError is an error wrapping multiple +// validation errors returned by CreateCloudModuleFlagRequest.ValidateAll() if +// the designated constraints aren't met. +type CreateCloudModuleFlagRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudModuleFlagRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateCloudModuleFlagRequestMultiError) AllErrors() []error { return m } + // CreateCloudModuleFlagRequestValidationError is the validation error returned // by CreateCloudModuleFlagRequest.Validate if the designated constraints // aren't met. @@ -32839,19 +53709,54 @@ var _ interface { // Validate checks the field values on CreateCloudModuleFlagResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudModuleFlagResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudModuleFlagResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// CreateCloudModuleFlagResponseMultiError, or nil if none found. +func (m *CreateCloudModuleFlagResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudModuleFlagResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message + if len(errors) > 0 { + return CreateCloudModuleFlagResponseMultiError(errors) + } + return nil } +// CreateCloudModuleFlagResponseMultiError is an error wrapping multiple +// validation errors returned by CreateCloudModuleFlagResponse.ValidateAll() +// if the designated constraints aren't met. +type CreateCloudModuleFlagResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudModuleFlagResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateCloudModuleFlagResponseMultiError) AllErrors() []error { return m } + // CreateCloudModuleFlagResponseValidationError is the validation error // returned by CreateCloudModuleFlagResponse.Validate if the designated // constraints aren't met. @@ -32911,12 +53816,26 @@ var _ interface { // Validate checks the field values on UpdateCloudModuleFlagRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudModuleFlagRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudModuleFlagRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateCloudModuleFlagRequestMultiError, or nil if none found. +func (m *UpdateCloudModuleFlagRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudModuleFlagRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Version @@ -32924,16 +53843,39 @@ func (m *UpdateCloudModuleFlagRequest) Validate() error { // no validation rules for ModuleID if len(m.GetFlagList()) < 1 { - return UpdateCloudModuleFlagRequestValidationError{ + err := UpdateCloudModuleFlagRequestValidationError{ field: "FlagList", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetFlagList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudModuleFlagRequestValidationError{ + field: fmt.Sprintf("FlagList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudModuleFlagRequestValidationError{ + field: fmt.Sprintf("FlagList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudModuleFlagRequestValidationError{ field: fmt.Sprintf("FlagList[%v]", idx), @@ -32947,9 +53889,30 @@ func (m *UpdateCloudModuleFlagRequest) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return UpdateCloudModuleFlagRequestMultiError(errors) + } + return nil } +// UpdateCloudModuleFlagRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateCloudModuleFlagRequest.ValidateAll() if +// the designated constraints aren't met. +type UpdateCloudModuleFlagRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudModuleFlagRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateCloudModuleFlagRequestMultiError) AllErrors() []error { return m } + // UpdateCloudModuleFlagRequestValidationError is the validation error returned // by UpdateCloudModuleFlagRequest.Validate if the designated constraints // aren't met. @@ -33009,19 +53972,54 @@ var _ interface { // Validate checks the field values on UpdateCloudModuleFlagResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudModuleFlagResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudModuleFlagResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateCloudModuleFlagResponseMultiError, or nil if none found. +func (m *UpdateCloudModuleFlagResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudModuleFlagResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message + if len(errors) > 0 { + return UpdateCloudModuleFlagResponseMultiError(errors) + } + return nil } +// UpdateCloudModuleFlagResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateCloudModuleFlagResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateCloudModuleFlagResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudModuleFlagResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateCloudModuleFlagResponseMultiError) AllErrors() []error { return m } + // UpdateCloudModuleFlagResponseValidationError is the validation error // returned by UpdateCloudModuleFlagResponse.Validate if the designated // constraints aren't met. @@ -33081,12 +54079,26 @@ var _ interface { // Validate checks the field values on DeleteCloudModuleFlagRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudModuleFlagRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudModuleFlagRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteCloudModuleFlagRequestMultiError, or nil if none found. +func (m *DeleteCloudModuleFlagRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudModuleFlagRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Version @@ -33095,9 +54107,30 @@ func (m *DeleteCloudModuleFlagRequest) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return DeleteCloudModuleFlagRequestMultiError(errors) + } + return nil } +// DeleteCloudModuleFlagRequestMultiError is an error wrapping multiple +// validation errors returned by DeleteCloudModuleFlagRequest.ValidateAll() if +// the designated constraints aren't met. +type DeleteCloudModuleFlagRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudModuleFlagRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteCloudModuleFlagRequestMultiError) AllErrors() []error { return m } + // DeleteCloudModuleFlagRequestValidationError is the validation error returned // by DeleteCloudModuleFlagRequest.Validate if the designated constraints // aren't met. @@ -33157,19 +54190,54 @@ var _ interface { // Validate checks the field values on DeleteCloudModuleFlagResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudModuleFlagResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudModuleFlagResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// DeleteCloudModuleFlagResponseMultiError, or nil if none found. +func (m *DeleteCloudModuleFlagResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudModuleFlagResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message + if len(errors) > 0 { + return DeleteCloudModuleFlagResponseMultiError(errors) + } + return nil } +// DeleteCloudModuleFlagResponseMultiError is an error wrapping multiple +// validation errors returned by DeleteCloudModuleFlagResponse.ValidateAll() +// if the designated constraints aren't met. +type DeleteCloudModuleFlagResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudModuleFlagResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteCloudModuleFlagResponseMultiError) AllErrors() []error { return m } + // DeleteCloudModuleFlagResponseValidationError is the validation error // returned by DeleteCloudModuleFlagResponse.Validate if the designated // constraints aren't met. @@ -33229,12 +54297,26 @@ var _ interface { // Validate checks the field values on ListCloudModuleFlagRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudModuleFlagRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudModuleFlagRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudModuleFlagRequestMultiError, or nil if none found. +func (m *ListCloudModuleFlagRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudModuleFlagRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Version @@ -33243,9 +54325,30 @@ func (m *ListCloudModuleFlagRequest) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return ListCloudModuleFlagRequestMultiError(errors) + } + return nil } +// ListCloudModuleFlagRequestMultiError is an error wrapping multiple +// validation errors returned by ListCloudModuleFlagRequest.ValidateAll() if +// the designated constraints aren't met. +type ListCloudModuleFlagRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudModuleFlagRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudModuleFlagRequestMultiError) AllErrors() []error { return m } + // ListCloudModuleFlagRequestValidationError is the validation error returned // by ListCloudModuleFlagRequest.Validate if the designated constraints aren't met. type ListCloudModuleFlagRequestValidationError struct { @@ -33304,12 +54407,26 @@ var _ interface { // Validate checks the field values on ListCloudModuleFlagResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudModuleFlagResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudModuleFlagResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudModuleFlagResponseMultiError, or nil if none found. +func (m *ListCloudModuleFlagResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudModuleFlagResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -33317,7 +54434,26 @@ func (m *ListCloudModuleFlagResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudModuleFlagResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudModuleFlagResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudModuleFlagResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -33329,9 +54465,30 @@ func (m *ListCloudModuleFlagResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudModuleFlagResponseMultiError(errors) + } + return nil } +// ListCloudModuleFlagResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudModuleFlagResponse.ValidateAll() if +// the designated constraints aren't met. +type ListCloudModuleFlagResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudModuleFlagResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudModuleFlagResponseMultiError) AllErrors() []error { return m } + // ListCloudModuleFlagResponseValidationError is the validation error returned // by ListCloudModuleFlagResponse.Validate if the designated constraints // aren't met. @@ -33391,19 +54548,54 @@ var _ interface { // Validate checks the field values on GetExternalNodeScriptRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetExternalNodeScriptRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetExternalNodeScriptRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetExternalNodeScriptRequestMultiError, or nil if none found. +func (m *GetExternalNodeScriptRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetExternalNodeScriptRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeGroupID // no validation rules for Operator + if len(errors) > 0 { + return GetExternalNodeScriptRequestMultiError(errors) + } + return nil } +// GetExternalNodeScriptRequestMultiError is an error wrapping multiple +// validation errors returned by GetExternalNodeScriptRequest.ValidateAll() if +// the designated constraints aren't met. +type GetExternalNodeScriptRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetExternalNodeScriptRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetExternalNodeScriptRequestMultiError) AllErrors() []error { return m } + // GetExternalNodeScriptRequestValidationError is the validation error returned // by GetExternalNodeScriptRequest.Validate if the designated constraints // aren't met. @@ -33463,12 +54655,26 @@ var _ interface { // Validate checks the field values on GetExternalNodeScriptResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetExternalNodeScriptResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetExternalNodeScriptResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetExternalNodeScriptResponseMultiError, or nil if none found. +func (m *GetExternalNodeScriptResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetExternalNodeScriptResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -33477,7 +54683,26 @@ func (m *GetExternalNodeScriptResponse) Validate() error { // no validation rules for Data - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetExternalNodeScriptResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetExternalNodeScriptResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetExternalNodeScriptResponseValidationError{ field: "WebAnnotations", @@ -33487,9 +54712,30 @@ func (m *GetExternalNodeScriptResponse) Validate() error { } } + if len(errors) > 0 { + return GetExternalNodeScriptResponseMultiError(errors) + } + return nil } +// GetExternalNodeScriptResponseMultiError is an error wrapping multiple +// validation errors returned by GetExternalNodeScriptResponse.ValidateAll() +// if the designated constraints aren't met. +type GetExternalNodeScriptResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetExternalNodeScriptResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetExternalNodeScriptResponseMultiError) AllErrors() []error { return m } + // GetExternalNodeScriptResponseValidationError is the validation error // returned by GetExternalNodeScriptResponse.Validate if the designated // constraints aren't met. @@ -33548,17 +54794,52 @@ var _ interface { } = GetExternalNodeScriptResponseValidationError{} // Validate checks the field values on MapStruct with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *MapStruct) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MapStruct with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in MapStructMultiError, or nil +// if none found. +func (m *MapStruct) ValidateAll() error { + return m.validate(true) +} + +func (m *MapStruct) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Values + if len(errors) > 0 { + return MapStructMultiError(errors) + } + return nil } +// MapStructMultiError is an error wrapping multiple validation errors returned +// by MapStruct.ValidateAll() if the designated constraints aren't met. +type MapStructMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MapStructMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m MapStructMultiError) AllErrors() []error { return m } + // MapStructValidationError is the validation error returned by // MapStruct.Validate if the designated constraints aren't met. type MapStructValidationError struct { @@ -33615,19 +54896,54 @@ var _ interface { // Validate checks the field values on GetBatchCustomSettingRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBatchCustomSettingRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBatchCustomSettingRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetBatchCustomSettingRequestMultiError, or nil if none found. +func (m *GetBatchCustomSettingRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBatchCustomSettingRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId + if len(errors) > 0 { + return GetBatchCustomSettingRequestMultiError(errors) + } + return nil } +// GetBatchCustomSettingRequestMultiError is an error wrapping multiple +// validation errors returned by GetBatchCustomSettingRequest.ValidateAll() if +// the designated constraints aren't met. +type GetBatchCustomSettingRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBatchCustomSettingRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetBatchCustomSettingRequestMultiError) AllErrors() []error { return m } + // GetBatchCustomSettingRequestValidationError is the validation error returned // by GetBatchCustomSettingRequest.Validate if the designated constraints // aren't met. @@ -33687,12 +55003,26 @@ var _ interface { // Validate checks the field values on GetBatchCustomSettingResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBatchCustomSettingResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBatchCustomSettingResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetBatchCustomSettingResponseMultiError, or nil if none found. +func (m *GetBatchCustomSettingResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBatchCustomSettingResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -33701,7 +55031,26 @@ func (m *GetBatchCustomSettingResponse) Validate() error { // no validation rules for RequestId - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetBatchCustomSettingResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetBatchCustomSettingResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetBatchCustomSettingResponseValidationError{ field: "Data", @@ -33711,9 +55060,30 @@ func (m *GetBatchCustomSettingResponse) Validate() error { } } + if len(errors) > 0 { + return GetBatchCustomSettingResponseMultiError(errors) + } + return nil } +// GetBatchCustomSettingResponseMultiError is an error wrapping multiple +// validation errors returned by GetBatchCustomSettingResponse.ValidateAll() +// if the designated constraints aren't met. +type GetBatchCustomSettingResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBatchCustomSettingResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetBatchCustomSettingResponseMultiError) AllErrors() []error { return m } + // GetBatchCustomSettingResponseValidationError is the validation error // returned by GetBatchCustomSettingResponse.Validate if the designated // constraints aren't met. @@ -33772,19 +55142,54 @@ var _ interface { } = GetBatchCustomSettingResponseValidationError{} // Validate checks the field values on ScopeInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ScopeInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ScopeInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ScopeInfoMultiError, or nil +// if none found. +func (m *ScopeInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ScopeInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId + if len(errors) > 0 { + return ScopeInfoMultiError(errors) + } + return nil } +// ScopeInfoMultiError is an error wrapping multiple validation errors returned +// by ScopeInfo.ValidateAll() if the designated constraints aren't met. +type ScopeInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ScopeInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ScopeInfoMultiError) AllErrors() []error { return m } + // ScopeInfoValidationError is the validation error returned by // ScopeInfo.Validate if the designated constraints aren't met. type ScopeInfoValidationError struct { @@ -33841,12 +55246,26 @@ var _ interface { // Validate checks the field values on GetBizTopologyHostRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBizTopologyHostRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBizTopologyHostRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetBizTopologyHostRequestMultiError, or nil if none found. +func (m *GetBizTopologyHostRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBizTopologyHostRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId @@ -33856,7 +55275,26 @@ func (m *GetBizTopologyHostRequest) Validate() error { for idx, item := range m.GetScopeList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetBizTopologyHostRequestValidationError{ + field: fmt.Sprintf("ScopeList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetBizTopologyHostRequestValidationError{ + field: fmt.Sprintf("ScopeList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetBizTopologyHostRequestValidationError{ field: fmt.Sprintf("ScopeList[%v]", idx), @@ -33868,9 +55306,30 @@ func (m *GetBizTopologyHostRequest) Validate() error { } + if len(errors) > 0 { + return GetBizTopologyHostRequestMultiError(errors) + } + return nil } +// GetBizTopologyHostRequestMultiError is an error wrapping multiple validation +// errors returned by GetBizTopologyHostRequest.ValidateAll() if the +// designated constraints aren't met. +type GetBizTopologyHostRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBizTopologyHostRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetBizTopologyHostRequestMultiError) AllErrors() []error { return m } + // GetBizTopologyHostRequestValidationError is the validation error returned by // GetBizTopologyHostRequest.Validate if the designated constraints aren't met. type GetBizTopologyHostRequestValidationError struct { @@ -33929,12 +55388,26 @@ var _ interface { // Validate checks the field values on GetBizTopologyHostResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBizTopologyHostResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBizTopologyHostResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetBizTopologyHostResponseMultiError, or nil if none found. +func (m *GetBizTopologyHostResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBizTopologyHostResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -33943,7 +55416,26 @@ func (m *GetBizTopologyHostResponse) Validate() error { // no validation rules for RequestId - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetBizTopologyHostResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetBizTopologyHostResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetBizTopologyHostResponseValidationError{ field: "Data", @@ -33953,9 +55445,30 @@ func (m *GetBizTopologyHostResponse) Validate() error { } } + if len(errors) > 0 { + return GetBizTopologyHostResponseMultiError(errors) + } + return nil } +// GetBizTopologyHostResponseMultiError is an error wrapping multiple +// validation errors returned by GetBizTopologyHostResponse.ValidateAll() if +// the designated constraints aren't met. +type GetBizTopologyHostResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBizTopologyHostResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetBizTopologyHostResponseMultiError) AllErrors() []error { return m } + // GetBizTopologyHostResponseValidationError is the validation error returned // by GetBizTopologyHostResponse.Validate if the designated constraints aren't met. type GetBizTopologyHostResponseValidationError struct { @@ -34013,19 +55526,54 @@ var _ interface { } = GetBizTopologyHostResponseValidationError{} // Validate checks the field values on NodeData with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeData with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeDataMultiError, or nil +// if none found. +func (m *NodeData) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ObjectId // no validation rules for InstanceId + if len(errors) > 0 { + return NodeDataMultiError(errors) + } + return nil } +// NodeDataMultiError is an error wrapping multiple validation errors returned +// by NodeData.ValidateAll() if the designated constraints aren't met. +type NodeDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeDataMultiError) AllErrors() []error { return m } + // NodeDataValidationError is the validation error returned by // NodeData.Validate if the designated constraints aren't met. type NodeDataValidationError struct { @@ -34082,27 +55630,64 @@ var _ interface { // Validate checks the field values on GetTopologyNodesRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyNodesRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetTopologyNodesRequestMultiError, or nil if none found. +func (m *GetTopologyNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId if len(m.GetNodeList()) < 1 { - return GetTopologyNodesRequestValidationError{ + err := GetTopologyNodesRequestValidationError{ field: "NodeList", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetNodeList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyNodesRequestValidationError{ + field: fmt.Sprintf("NodeList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyNodesRequestValidationError{ + field: fmt.Sprintf("NodeList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyNodesRequestValidationError{ field: fmt.Sprintf("NodeList[%v]", idx), @@ -34116,7 +55701,26 @@ func (m *GetTopologyNodesRequest) Validate() error { // no validation rules for SearchContent - if v, ok := interface{}(m.GetAlive()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAlive()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyNodesRequestValidationError{ + field: "Alive", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyNodesRequestValidationError{ + field: "Alive", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAlive()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyNodesRequestValidationError{ field: "Alive", @@ -34130,9 +55734,30 @@ func (m *GetTopologyNodesRequest) Validate() error { // no validation rules for PageSize + if len(errors) > 0 { + return GetTopologyNodesRequestMultiError(errors) + } + return nil } +// GetTopologyNodesRequestMultiError is an error wrapping multiple validation +// errors returned by GetTopologyNodesRequest.ValidateAll() if the designated +// constraints aren't met. +type GetTopologyNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyNodesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTopologyNodesRequestMultiError) AllErrors() []error { return m } + // GetTopologyNodesRequestValidationError is the validation error returned by // GetTopologyNodesRequest.Validate if the designated constraints aren't met. type GetTopologyNodesRequestValidationError struct { @@ -34191,12 +55816,26 @@ var _ interface { // Validate checks the field values on GetTopologyNodesResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyNodesResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetTopologyNodesResponseMultiError, or nil if none found. +func (m *GetTopologyNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -34205,7 +55844,26 @@ func (m *GetTopologyNodesResponse) Validate() error { // no validation rules for RequestId - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyNodesResponseValidationError{ field: "Data", @@ -34215,9 +55873,30 @@ func (m *GetTopologyNodesResponse) Validate() error { } } + if len(errors) > 0 { + return GetTopologyNodesResponseMultiError(errors) + } + return nil } +// GetTopologyNodesResponseMultiError is an error wrapping multiple validation +// errors returned by GetTopologyNodesResponse.ValidateAll() if the designated +// constraints aren't met. +type GetTopologyNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyNodesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTopologyNodesResponseMultiError) AllErrors() []error { return m } + // GetTopologyNodesResponseValidationError is the validation error returned by // GetTopologyNodesResponse.Validate if the designated constraints aren't met. type GetTopologyNodesResponseValidationError struct { @@ -34276,12 +55955,26 @@ var _ interface { // Validate checks the field values on GetTopologyNodesData with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyNodesData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyNodesData with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetTopologyNodesDataMultiError, or nil if none found. +func (m *GetTopologyNodesData) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyNodesData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Start // no validation rules for PageSize @@ -34291,7 +55984,26 @@ func (m *GetTopologyNodesData) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyNodesDataValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyNodesDataValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyNodesDataValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -34303,9 +56015,30 @@ func (m *GetTopologyNodesData) Validate() error { } + if len(errors) > 0 { + return GetTopologyNodesDataMultiError(errors) + } + return nil } +// GetTopologyNodesDataMultiError is an error wrapping multiple validation +// errors returned by GetTopologyNodesData.ValidateAll() if the designated +// constraints aren't met. +type GetTopologyNodesDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyNodesDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTopologyNodesDataMultiError) AllErrors() []error { return m } + // GetTopologyNodesDataValidationError is the validation error returned by // GetTopologyNodesData.Validate if the designated constraints aren't met. type GetTopologyNodesDataValidationError struct { @@ -34363,12 +56096,27 @@ var _ interface { } = GetTopologyNodesDataValidationError{} // Validate checks the field values on HostData with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *HostData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HostData with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in HostDataMultiError, or nil +// if none found. +func (m *HostData) ValidateAll() error { + return m.validate(true) +} + +func (m *HostData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for HostId // no validation rules for Ip @@ -34381,7 +56129,26 @@ func (m *HostData) Validate() error { // no validation rules for OsName - if v, ok := interface{}(m.GetCloudArea()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudArea()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, HostDataValidationError{ + field: "CloudArea", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, HostDataValidationError{ + field: "CloudArea", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCloudArea()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return HostDataValidationError{ field: "CloudArea", @@ -34391,9 +56158,29 @@ func (m *HostData) Validate() error { } } + if len(errors) > 0 { + return HostDataMultiError(errors) + } + return nil } +// HostDataMultiError is an error wrapping multiple validation errors returned +// by HostData.ValidateAll() if the designated constraints aren't met. +type HostDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HostDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m HostDataMultiError) AllErrors() []error { return m } + // HostDataValidationError is the validation error returned by // HostData.Validate if the designated constraints aren't met. type HostDataValidationError struct { @@ -34449,20 +56236,55 @@ var _ interface { } = HostDataValidationError{} // Validate checks the field values on HostCloudArea with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *HostCloudArea) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HostCloudArea with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in HostCloudAreaMultiError, or +// nil if none found. +func (m *HostCloudArea) ValidateAll() error { + return m.validate(true) +} + +func (m *HostCloudArea) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Id // no validation rules for Name + if len(errors) > 0 { + return HostCloudAreaMultiError(errors) + } + return nil } +// HostCloudAreaMultiError is an error wrapping multiple validation errors +// returned by HostCloudArea.ValidateAll() if the designated constraints +// aren't met. +type HostCloudAreaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HostCloudAreaMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m HostCloudAreaMultiError) AllErrors() []error { return m } + // HostCloudAreaValidationError is the validation error returned by // HostCloudArea.Validate if the designated constraints aren't met. type HostCloudAreaValidationError struct { @@ -34519,27 +56341,64 @@ var _ interface { // Validate checks the field values on GetTopologyHostIdsNodesRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyHostIdsNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyHostIdsNodesRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetTopologyHostIdsNodesRequestMultiError, or nil if none found. +func (m *GetTopologyHostIdsNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyHostIdsNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId if len(m.GetNodeList()) < 1 { - return GetTopologyHostIdsNodesRequestValidationError{ + err := GetTopologyHostIdsNodesRequestValidationError{ field: "NodeList", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetNodeList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesRequestValidationError{ + field: fmt.Sprintf("NodeList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesRequestValidationError{ + field: fmt.Sprintf("NodeList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyHostIdsNodesRequestValidationError{ field: fmt.Sprintf("NodeList[%v]", idx), @@ -34553,7 +56412,26 @@ func (m *GetTopologyHostIdsNodesRequest) Validate() error { // no validation rules for SearchContent - if v, ok := interface{}(m.GetAlive()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAlive()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesRequestValidationError{ + field: "Alive", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesRequestValidationError{ + field: "Alive", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAlive()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyHostIdsNodesRequestValidationError{ field: "Alive", @@ -34567,9 +56445,30 @@ func (m *GetTopologyHostIdsNodesRequest) Validate() error { // no validation rules for PageSize + if len(errors) > 0 { + return GetTopologyHostIdsNodesRequestMultiError(errors) + } + return nil } +// GetTopologyHostIdsNodesRequestMultiError is an error wrapping multiple +// validation errors returned by GetTopologyHostIdsNodesRequest.ValidateAll() +// if the designated constraints aren't met. +type GetTopologyHostIdsNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyHostIdsNodesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTopologyHostIdsNodesRequestMultiError) AllErrors() []error { return m } + // GetTopologyHostIdsNodesRequestValidationError is the validation error // returned by GetTopologyHostIdsNodesRequest.Validate if the designated // constraints aren't met. @@ -34629,12 +56528,26 @@ var _ interface { // Validate checks the field values on GetTopologyHostIdsNodesResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyHostIdsNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyHostIdsNodesResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetTopologyHostIdsNodesResponseMultiError, or nil if none found. +func (m *GetTopologyHostIdsNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyHostIdsNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -34643,7 +56556,26 @@ func (m *GetTopologyHostIdsNodesResponse) Validate() error { // no validation rules for RequestId - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyHostIdsNodesResponseValidationError{ field: "Data", @@ -34653,9 +56585,30 @@ func (m *GetTopologyHostIdsNodesResponse) Validate() error { } } + if len(errors) > 0 { + return GetTopologyHostIdsNodesResponseMultiError(errors) + } + return nil } +// GetTopologyHostIdsNodesResponseMultiError is an error wrapping multiple +// validation errors returned by GetTopologyHostIdsNodesResponse.ValidateAll() +// if the designated constraints aren't met. +type GetTopologyHostIdsNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyHostIdsNodesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTopologyHostIdsNodesResponseMultiError) AllErrors() []error { return m } + // GetTopologyHostIdsNodesResponseValidationError is the validation error // returned by GetTopologyHostIdsNodesResponse.Validate if the designated // constraints aren't met. @@ -34715,12 +56668,26 @@ var _ interface { // Validate checks the field values on GetTopologyHostIdsNodesData with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyHostIdsNodesData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyHostIdsNodesData with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetTopologyHostIdsNodesDataMultiError, or nil if none found. +func (m *GetTopologyHostIdsNodesData) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyHostIdsNodesData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Start // no validation rules for PageSize @@ -34730,7 +56697,26 @@ func (m *GetTopologyHostIdsNodesData) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesDataValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesDataValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyHostIdsNodesDataValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -34742,9 +56728,30 @@ func (m *GetTopologyHostIdsNodesData) Validate() error { } + if len(errors) > 0 { + return GetTopologyHostIdsNodesDataMultiError(errors) + } + return nil } +// GetTopologyHostIdsNodesDataMultiError is an error wrapping multiple +// validation errors returned by GetTopologyHostIdsNodesData.ValidateAll() if +// the designated constraints aren't met. +type GetTopologyHostIdsNodesDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyHostIdsNodesDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTopologyHostIdsNodesDataMultiError) AllErrors() []error { return m } + // GetTopologyHostIdsNodesDataValidationError is the validation error returned // by GetTopologyHostIdsNodesData.Validate if the designated constraints // aren't met. @@ -34803,16 +56810,49 @@ var _ interface { } = GetTopologyHostIdsNodesDataValidationError{} // Validate checks the field values on HostIDsNodeData with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *HostIDsNodeData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HostIDsNodeData with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// HostIDsNodeDataMultiError, or nil if none found. +func (m *HostIDsNodeData) ValidateAll() error { + return m.validate(true) +} + +func (m *HostIDsNodeData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for HostId - if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetMeta()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, HostIDsNodeDataValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, HostIDsNodeDataValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return HostIDsNodeDataValidationError{ field: "Meta", @@ -34822,9 +56862,30 @@ func (m *HostIDsNodeData) Validate() error { } } + if len(errors) > 0 { + return HostIDsNodeDataMultiError(errors) + } + return nil } +// HostIDsNodeDataMultiError is an error wrapping multiple validation errors +// returned by HostIDsNodeData.ValidateAll() if the designated constraints +// aren't met. +type HostIDsNodeDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HostIDsNodeDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m HostIDsNodeDataMultiError) AllErrors() []error { return m } + // HostIDsNodeDataValidationError is the validation error returned by // HostIDsNodeData.Validate if the designated constraints aren't met. type HostIDsNodeDataValidationError struct { @@ -34880,21 +56941,55 @@ var _ interface { } = HostIDsNodeDataValidationError{} // Validate checks the field values on Meta with the rules defined in the proto -// definition for this message. If any rules are violated, an error is returned. +// definition for this message. If any rules are violated, the first error +// encountered is returned, or nil if there are no violations. func (m *Meta) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Meta with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in MetaMultiError, or nil if none found. +func (m *Meta) ValidateAll() error { + return m.validate(true) +} + +func (m *Meta) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId // no validation rules for BkBizId + if len(errors) > 0 { + return MetaMultiError(errors) + } + return nil } +// MetaMultiError is an error wrapping multiple validation errors returned by +// Meta.ValidateAll() if the designated constraints aren't met. +type MetaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MetaMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m MetaMultiError) AllErrors() []error { return m } + // MetaValidationError is the validation error returned by Meta.Validate if the // designated constraints aren't met. type MetaValidationError struct { @@ -34951,12 +57046,26 @@ var _ interface { // Validate checks the field values on GetHostsDetailsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetHostsDetailsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetHostsDetailsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetHostsDetailsRequestMultiError, or nil if none found. +func (m *GetHostsDetailsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetHostsDetailsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId @@ -34964,7 +57073,26 @@ func (m *GetHostsDetailsRequest) Validate() error { for idx, item := range m.GetHostList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetHostsDetailsRequestValidationError{ + field: fmt.Sprintf("HostList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetHostsDetailsRequestValidationError{ + field: fmt.Sprintf("HostList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetHostsDetailsRequestValidationError{ field: fmt.Sprintf("HostList[%v]", idx), @@ -34976,9 +57104,30 @@ func (m *GetHostsDetailsRequest) Validate() error { } + if len(errors) > 0 { + return GetHostsDetailsRequestMultiError(errors) + } + return nil } +// GetHostsDetailsRequestMultiError is an error wrapping multiple validation +// errors returned by GetHostsDetailsRequest.ValidateAll() if the designated +// constraints aren't met. +type GetHostsDetailsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetHostsDetailsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetHostsDetailsRequestMultiError) AllErrors() []error { return m } + // GetHostsDetailsRequestValidationError is the validation error returned by // GetHostsDetailsRequest.Validate if the designated constraints aren't met. type GetHostsDetailsRequestValidationError struct { @@ -35037,12 +57186,26 @@ var _ interface { // Validate checks the field values on GetHostsDetailsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetHostsDetailsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetHostsDetailsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetHostsDetailsResponseMultiError, or nil if none found. +func (m *GetHostsDetailsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetHostsDetailsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -35054,7 +57217,26 @@ func (m *GetHostsDetailsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetHostsDetailsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetHostsDetailsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetHostsDetailsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -35066,9 +57248,30 @@ func (m *GetHostsDetailsResponse) Validate() error { } + if len(errors) > 0 { + return GetHostsDetailsResponseMultiError(errors) + } + return nil } +// GetHostsDetailsResponseMultiError is an error wrapping multiple validation +// errors returned by GetHostsDetailsResponse.ValidateAll() if the designated +// constraints aren't met. +type GetHostsDetailsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetHostsDetailsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetHostsDetailsResponseMultiError) AllErrors() []error { return m } + // GetHostsDetailsResponseValidationError is the validation error returned by // GetHostsDetailsResponse.Validate if the designated constraints aren't met. type GetHostsDetailsResponseValidationError struct { @@ -35126,13 +57329,27 @@ var _ interface { } = GetHostsDetailsResponseValidationError{} // Validate checks the field values on HostDataWithMeta with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *HostDataWithMeta) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HostDataWithMeta with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// HostDataWithMetaMultiError, or nil if none found. +func (m *HostDataWithMeta) ValidateAll() error { + return m.validate(true) +} + +func (m *HostDataWithMeta) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for HostId // no validation rules for Ip @@ -35145,7 +57362,26 @@ func (m *HostDataWithMeta) Validate() error { // no validation rules for OsName - if v, ok := interface{}(m.GetCloudArea()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudArea()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, HostDataWithMetaValidationError{ + field: "CloudArea", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, HostDataWithMetaValidationError{ + field: "CloudArea", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCloudArea()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return HostDataWithMetaValidationError{ field: "CloudArea", @@ -35155,7 +57391,26 @@ func (m *HostDataWithMeta) Validate() error { } } - if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetMeta()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, HostDataWithMetaValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, HostDataWithMetaValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return HostDataWithMetaValidationError{ field: "Meta", @@ -35165,9 +57420,30 @@ func (m *HostDataWithMeta) Validate() error { } } + if len(errors) > 0 { + return HostDataWithMetaMultiError(errors) + } + return nil } +// HostDataWithMetaMultiError is an error wrapping multiple validation errors +// returned by HostDataWithMeta.ValidateAll() if the designated constraints +// aren't met. +type HostDataWithMetaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HostDataWithMetaMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m HostDataWithMetaMultiError) AllErrors() []error { return m } + // HostDataWithMetaValidationError is the validation error returned by // HostDataWithMeta.Validate if the designated constraints aren't met. type HostDataWithMetaValidationError struct { @@ -35224,19 +57500,54 @@ var _ interface { // Validate checks the field values on GetScopeHostCheckRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetScopeHostCheckRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetScopeHostCheckRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetScopeHostCheckRequestMultiError, or nil if none found. +func (m *GetScopeHostCheckRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetScopeHostCheckRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId + if len(errors) > 0 { + return GetScopeHostCheckRequestMultiError(errors) + } + return nil } +// GetScopeHostCheckRequestMultiError is an error wrapping multiple validation +// errors returned by GetScopeHostCheckRequest.ValidateAll() if the designated +// constraints aren't met. +type GetScopeHostCheckRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetScopeHostCheckRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetScopeHostCheckRequestMultiError) AllErrors() []error { return m } + // GetScopeHostCheckRequestValidationError is the validation error returned by // GetScopeHostCheckRequest.Validate if the designated constraints aren't met. type GetScopeHostCheckRequestValidationError struct { @@ -35295,12 +57606,26 @@ var _ interface { // Validate checks the field values on GetScopeHostCheckResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetScopeHostCheckResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetScopeHostCheckResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetScopeHostCheckResponseMultiError, or nil if none found. +func (m *GetScopeHostCheckResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetScopeHostCheckResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -35312,7 +57637,26 @@ func (m *GetScopeHostCheckResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetScopeHostCheckResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetScopeHostCheckResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetScopeHostCheckResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -35324,9 +57668,30 @@ func (m *GetScopeHostCheckResponse) Validate() error { } + if len(errors) > 0 { + return GetScopeHostCheckResponseMultiError(errors) + } + return nil } +// GetScopeHostCheckResponseMultiError is an error wrapping multiple validation +// errors returned by GetScopeHostCheckResponse.ValidateAll() if the +// designated constraints aren't met. +type GetScopeHostCheckResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetScopeHostCheckResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetScopeHostCheckResponseMultiError) AllErrors() []error { return m } + // GetScopeHostCheckResponseValidationError is the validation error returned by // GetScopeHostCheckResponse.Validate if the designated constraints aren't met. type GetScopeHostCheckResponseValidationError struct { diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.proto b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.proto index 4b7fb680bb..8d5300b241 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.proto +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.proto @@ -999,6 +999,15 @@ service ClusterManager { } // Cloud Resource management + rpc GetResourceGroups(GetResourceGroupsRequest) returns (GetResourceGroupsResponse) { + option (google.api.http) = { + get : "/clustermanager/v1/clouds/{cloudID}/resourcegroups" + }; + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { + description : "查询resource groups列表" + summary : "查询resource groups列表" + }; + } rpc GetCloudRegions(GetCloudRegionsRequest) returns (GetCloudRegionsResponse) { option (google.api.http) = { get : "/clustermanager/v1/clouds/{cloudID}/regions" @@ -5274,6 +5283,10 @@ message KubeConfigConnectReq { title : "region", description : "集群所在地域" },(validate.rules).string = {max_len : 100, pattern : "^[0-9a-zA-Z-]+$"}]; + string resourceGroupName = 6 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "resourceGroupName", + description : "AKS集群所属resource group" + }]; } message KubeConfigResp { @@ -10166,6 +10179,72 @@ message UpdateAutoScalingStatusResponse { }]; } +message ResourceGroupInfo { + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + json_schema : { + title : "ResourceGroupInfo" + description : "resource group信息" + } + }; + + string name = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "name", + description : "resource group名称" + }]; + string region = 2[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "region", + description : "地域信息" + }]; + string provisioningState = 3 [ (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "provisioningState", + description : "resource group状态" + }]; +} + +message GetResourceGroupsRequest { + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + json_schema : { + title : "GetResourceGroupsRequest" + description : "获取resource groups列表请求" + } + }; + + string cloudID = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "cloudID", + description : "云信息" + },(validate.rules).string = {min_len : 2}]; + string accountID = 2 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "accountID", + description : "云凭证ID" + }]; +} + +message GetResourceGroupsResponse { + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + json_schema : { + title : "GetResourceGroupsResponse" + description : "获取resource groups列表" + } + }; + + uint32 code = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "code", + description : "返回错误码" + }]; + string message = 2[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "message", + description : "返回错误信息" + }]; + bool result = 3 [ (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "result", + description : "返回结果" + }]; + repeated ResourceGroupInfo data = 4 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "data", + description : "获取到的信息" + }]; +} + message RegionInfo { option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { json_schema : { @@ -11090,6 +11169,10 @@ message ListCloudVpcsRequest { title: "vpcID", description: "过滤查询指定vpc的信息" }]; + string resourceGroupName = 5[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "resourceGroupName", + description: "Azure Cloud中Vpc所属的resource group名称" + }]; } message ListCloudVpcsResponse { @@ -11170,6 +11253,10 @@ message ListCloudSubnetsRequest { title: "injectCluster", description: "是否注入子网所属集群信息" }]; + string resourceGroupName = 8[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "resourceGroupName", + description: "Azure Cloud中subnet所属resource group名称" + }]; } message ListCloudSubnetsResponse { @@ -11326,6 +11413,10 @@ message ListCloudSecurityGroupsRequest { title : "accountID", description : "云凭证ID(非必传,兼容社区版和内部版)" }]; + string resourceGroupName = 4 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "resourceGroupName", + description : "Azure中的resource group名称" + }]; } message ListCloudSecurityGroupsResponse { @@ -11375,6 +11466,10 @@ message ListKeyPairsRequest { title : "accountID", description : "云凭证ID(非必传,兼容社区版和内部版)" }]; + string resourceGroupName = 4 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "resourceGroupName", + description : "Azure中的resource group名称" + }]; } message ListKeyPairsResponse { diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.swagger.json b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.swagger.json index d10e3de9b2..348b15ac21 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.swagger.json +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.swagger.json @@ -28,7 +28,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -79,7 +79,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -113,7 +113,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -165,7 +165,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -199,7 +199,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -237,7 +237,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -256,8 +256,7 @@ "description": "isForce. 强制删除AutoScalingOption信息,即使未正常执行完成,也会进入终止。对于自定义cluster-autoscaler安装的场景下,是需要清理已部署的CA模块。", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -276,7 +275,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -317,7 +316,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -365,7 +364,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -406,7 +405,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -447,7 +446,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -501,7 +500,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -562,7 +561,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -596,7 +595,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -636,7 +635,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -662,8 +661,7 @@ "description": "editable. 对于SaaS层面该信息是否可编辑,BCS默认提供的预定义信息不可编译", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "creator", @@ -703,7 +701,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -737,7 +735,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -771,7 +769,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -802,7 +800,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -820,8 +818,7 @@ "name": "isForce", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -840,7 +837,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -881,7 +878,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -914,7 +911,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -966,7 +963,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1005,7 +1002,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1046,7 +1043,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1087,7 +1084,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1125,7 +1122,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1173,7 +1170,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1220,7 +1217,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1267,7 +1264,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1314,7 +1311,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1340,8 +1337,7 @@ "description": "isExtranet. 默认false 获取内网,是否获取外网访问的kubeconfig", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "accountID", @@ -1356,6 +1352,13 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "resourceGroupName", + "description": "resourceGroupName. AKS集群所属resource group", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -1376,7 +1379,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1430,7 +1433,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1528,7 +1531,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1555,6 +1558,13 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "resourceGroupName", + "description": "resourceGroupName. Azure中的resource group名称", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -1575,7 +1585,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1636,7 +1646,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1683,7 +1693,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1723,7 +1733,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1794,6 +1804,46 @@ ] } }, + "/clustermanager/v1/clouds/{cloudID}/resourcegroups": { + "get": { + "summary": "查询resource groups列表", + "description": "查询resource groups列表", + "operationId": "ClusterManager_GetResourceGroups", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/clustermanagerGetResourceGroupsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/runtimeError" + } + } + }, + "parameters": [ + { + "name": "cloudID", + "description": "云信息", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "accountID", + "description": "accountID. 云凭证ID", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "ClusterManager" + ] + } + }, "/clustermanager/v1/clouds/{cloudID}/securitygroups": { "get": { "summary": "查询安全组列表", @@ -1807,7 +1857,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1834,6 +1884,13 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "resourceGroupName", + "description": "resourceGroupName. Azure中的resource group名称", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -1854,7 +1911,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1908,8 +1965,14 @@ "description": "injectCluster. 是否注入子网所属集群信息", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" + }, + { + "name": "resourceGroupName", + "description": "resourceGroupName. Azure Cloud中subnet所属resource group名称", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -1930,7 +1993,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1978,7 +2041,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2041,7 +2104,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2104,7 +2167,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2159,7 +2222,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2193,6 +2256,13 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "resourceGroupName", + "description": "resourceGroupName. Azure Cloud中Vpc所属的resource group名称", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -2213,7 +2283,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2274,7 +2344,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2335,7 +2405,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2394,7 +2464,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2428,7 +2498,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2466,7 +2536,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2514,7 +2584,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2582,8 +2652,7 @@ "description": "isExclusive. 是否为业务独占集群", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "clusterType", @@ -2648,8 +2717,7 @@ "description": "isCommonCluster. 是否为公共集群,默认false", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "clusterID", @@ -2675,7 +2743,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2709,7 +2777,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2743,7 +2811,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2762,8 +2830,7 @@ "description": "cloudInfo. 集群关联的云集群信息, 默认从数据库获取数据", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -2782,7 +2849,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2801,8 +2868,7 @@ "description": "isForced. 是否强制删除,默认false。强制删除会一并删除clustermanager管理的资源,例如节点,节点池等。强制删除周期较长,清理工作会进入长后台任务运行,集群信息不会立刻被清空,而是处于删除状态。", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "instanceDeleteMode", @@ -2816,8 +2882,7 @@ "description": "onlyDeleteInfo. 默认为false。设置为true时,仅删除cluster-manager所记录的信息,不会触发任何自动化流程。该参数可以与isForced同时协同工作。", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "operator", @@ -2831,8 +2896,7 @@ "description": "deleteClusterRecord. 管理员操作, 设置true时仅删除集群数据库记录", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -2851,7 +2915,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2892,7 +2956,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2918,8 +2982,7 @@ "description": "filterInter. 是否屏蔽空闲机池", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -2940,7 +3003,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2973,7 +3036,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3043,8 +3106,7 @@ "description": "showPwd. 节点密码是否展示(默认不展示)", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -3063,7 +3125,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3096,8 +3158,7 @@ "description": "isForce. 不管节点处于任何状态都强制删除,例如可能刚初始化,NotReady等", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "operator", @@ -3111,8 +3172,7 @@ "description": "onlyDeleteInfo. 默认为false。设置为true时,仅删除cluster-manager所记录的信息,不会触发任何自动化流程.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "nodeTemplateID", @@ -3133,8 +3193,7 @@ "description": "是否是第三方节点(IDC节点). 下架第三方节点需置为true, 且必须关联nodeGroupID", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -3153,7 +3212,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3194,7 +3253,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3235,7 +3294,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3305,7 +3364,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3336,7 +3395,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3367,7 +3426,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3408,7 +3467,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3449,7 +3508,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3468,8 +3527,7 @@ "description": "enableFilter. enableFilter为true时, 输出结果按照是否开启弹性伸缩排序(开启的排序在后面)", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -3490,7 +3548,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3551,7 +3609,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3592,7 +3650,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3616,7 +3674,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3650,7 +3708,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3682,7 +3740,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3716,7 +3774,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3750,7 +3808,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3784,7 +3842,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3818,7 +3876,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3852,7 +3910,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3886,7 +3944,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3920,7 +3978,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3954,7 +4012,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3973,8 +4031,7 @@ "description": "showPwd. 节点密码是否展示(默认不展示)", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -3995,7 +4052,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4028,7 +4085,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4080,7 +4137,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4114,7 +4171,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4145,7 +4202,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4164,24 +4221,21 @@ "description": "isForce. 强制删除,包括清理节点池管理的机器。外部资源删除转入后台删除长任务对列,默认会返回Task信息方便确认进度。", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "reserveNodesInCluster", "description": "reserveNodesInCluster. 保留节点在集群中,仅删除节点池,解除节点与节点池关联。当且仅当强制删除时生效。", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "keepNodesInstance", "description": "keepNodesInstance. 节点从集群移除,清理资源,但不销毁机器,保留机器运行。当且仅当强制删除时生效。", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "operator", @@ -4195,8 +4249,7 @@ "description": "onlyDeleteInfo. onlyDeleteInfo仅删除数据,不执行流程", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -4215,7 +4268,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4256,7 +4309,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4297,7 +4350,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4338,7 +4391,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4379,7 +4432,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4420,7 +4473,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4461,7 +4514,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4502,7 +4555,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4533,7 +4586,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4572,7 +4625,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4613,7 +4666,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4653,7 +4706,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4677,7 +4730,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4735,16 +4788,14 @@ "description": "simple. 只展示 operationLogs 信息", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "taskIDNull", "description": "taskIDNull. 默认false,过滤taskID为空的场景; 当为true时,不过滤taskID为空的", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "clusterID", @@ -4779,8 +4830,7 @@ "description": "v2. 是否使用v2的查询版本", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "ipList", @@ -4808,7 +4858,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4849,7 +4899,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4903,7 +4953,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4941,7 +4991,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4982,7 +5032,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5020,7 +5070,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5058,7 +5108,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5106,7 +5156,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5139,7 +5189,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5179,7 +5229,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5191,8 +5241,7 @@ "description": "showVCluster. 展示vcluster集群的host共享集群(默认全部展示)", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -5213,7 +5262,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5293,7 +5342,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5327,7 +5376,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5358,7 +5407,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5377,8 +5426,7 @@ "description": "isForce. 强制删除Task信息,即使未正常执行完成,也会进入终止。", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -5397,7 +5445,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5438,7 +5486,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5479,7 +5527,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5520,7 +5568,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5554,7 +5602,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5573,8 +5621,7 @@ "description": "onlyDeleteInfo. 默认为false。设置为true时,仅删除cluster-manager所记录的信息,不会触发任何自动化流程。该参数可以与isForced同时协同工作。", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "operator", @@ -5602,7 +5649,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5643,7 +5690,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5676,7 +5723,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5724,7 +5771,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5772,7 +5819,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5820,7 +5867,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5868,7 +5915,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5916,7 +5963,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5964,7 +6011,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -6018,7 +6065,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -6122,7 +6169,9 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "具体行为流程动作定义", + "title": "plugins" } }, "description": "记录各模块功能自动化行为模板, 对接job系统, 完成自定义操作; 针对不同云的不同操作模版参数需自定义针对大部分操作,仅需要前置动作或后置动作即可. 可自由扩展", @@ -6165,7 +6214,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -6206,7 +6254,6 @@ }, "onlyCreateInfo": { "type": "boolean", - "format": "boolean", "description": "仅写入节点信息,默认是false。仅写入节点信息时,会通过cluster所属cloudprovider查询节点信息,并设置为RUNNING。", "title": "onlyCreateInfo" }, @@ -6222,7 +6269,6 @@ }, "isExternalNode": { "type": "boolean", - "format": "boolean", "description": "上架第三方节点需置为true, 且必须关联nodeGroupID", "title": "是否是第三方节点(IDC节点)" }, @@ -6255,7 +6301,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -6319,7 +6364,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -6419,7 +6463,6 @@ }, "replaceUnhealthy": { "type": "boolean", - "format": "boolean", "description": "开启监控不健康节点替换服务,默认false。连续1分钟ping不通则视为不健康!", "title": "replaceUnhealthy" }, @@ -6438,7 +6481,6 @@ }, "autoUpgrade": { "type": "boolean", - "format": "boolean", "description": "开启自动升级GKE版本功能,如果集群为发布版本,则强制开启", "title": "autoUpgrade" } @@ -6462,11 +6504,12 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "bksops模板默认通用参数,实际调用时根据实际行为可覆盖或定制化", + "title": "params" }, "allowSkipWhenFailed": { "type": "boolean", - "format": "boolean", "description": "allowSkipWhenFailed插件执行失败时是否允许跳过, 默认不允许跳过", "title": "allowSkipWhenFailed" } @@ -6511,7 +6554,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -6546,8 +6588,7 @@ } }, "success": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "message": { "type": "string" @@ -6579,7 +6620,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -6630,7 +6670,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -6638,7 +6677,9 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerNodeResult" - } + }, + "description": "返回node检查结果,key是IP", + "title": "data" } }, "description": "返回节点状态", @@ -6700,7 +6741,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -6734,7 +6774,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -6767,7 +6806,6 @@ }, "editable": { "type": "boolean", - "format": "boolean", "description": "对于SaaS层面该信息是否可编辑,BCS默认提供的预定义信息不可编译", "title": "editable" }, @@ -6775,13 +6813,17 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "通过标准运维实现的扩展流程或者插件", + "title": "opsPlugins" }, "extraPlugins": { "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "额外扩展流程,用于自定义扩展,该部分允许用户编辑", + "title": "extraPlugins" }, "cloudCredential": { "$ref": "#/definitions/clustermanagerCredential", @@ -6862,7 +6904,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "平台不同云的配置信息", + "title": "platformInfo" } }, "description": "云信息,多云管理下用于定义共享信息,BCS默认地提供蓝鲸云预定义,腾讯云预定义信息", @@ -6903,7 +6947,6 @@ }, "enable": { "type": "boolean", - "format": "boolean", "description": "cloud账号是否启用,默认是启用的", "title": "enable" }, @@ -7029,7 +7072,6 @@ "properties": { "cloudInternalEnable": { "type": "boolean", - "format": "boolean", "description": "cloud是否开启内部配置", "title": "cloudInternalEnable" }, @@ -7045,19 +7087,16 @@ }, "disableCreateCluster": { "type": "boolean", - "format": "boolean", "description": "cloud是否关闭创建集群特性", "title": "disableCreateCluster" }, "disableImportCluster": { "type": "boolean", - "format": "boolean", "description": "cloud是否关闭导入集群特性", "title": "disableImportCluster" }, "disableNodeGroup": { "type": "boolean", - "format": "boolean", "description": "cloud是否关闭节点池特性", "title": "disableNodeGroup" }, @@ -7090,7 +7129,6 @@ }, "autoFormatAndMount": { "type": "boolean", - "format": "boolean", "description": "是否自动化格式盘并挂载", "title": "autoFormatAndMount" }, @@ -7142,7 +7180,6 @@ }, "enable": { "type": "boolean", - "format": "boolean", "description": "是否启用该参数", "title": "enable" }, @@ -7282,7 +7319,6 @@ }, "cloudRegionNode": { "type": "boolean", - "format": "boolean", "description": "是否是该云的某个地域节点", "title": "cloudRegionNode" } @@ -7534,7 +7570,6 @@ }, "isExclusive": { "type": "boolean", - "format": "boolean", "description": "是否业务独占集群,默认为false", "title": "isExclusive" }, @@ -7547,7 +7582,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "集群标签", + "title": "labels" }, "creator": { "type": "string", @@ -7564,13 +7601,17 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "创建集群时进行BCS内置插件安装,该信息会索引云上默认配置信息进行对比与补充,Addons默认在集群正常初始化之后进行调用。", + "title": "bcsAddons" }, "extraAddons": { "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "创建集群时额外扩展传递的信息,该部分为预留二方/三方/服务商扩展使用,Addons默认在集群状态正常之后进行调用与安装。", + "title": "extraAddons" }, "systemID": { "type": "string", @@ -7586,7 +7627,9 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerNode" - } + }, + "description": "集群master IP列表", + "title": "master" }, "networkSettings": { "$ref": "#/definitions/clustermanagerNetworkSetting", @@ -7625,7 +7668,6 @@ }, "autoGenerateMasterNodes": { "type": "boolean", - "format": "boolean", "description": "创建集群是否使用已存在节点, 默认false, 即使用已经存在的节点, 从创建集群参数中获取", "title": "autoGenerateMasterNodes" }, @@ -7641,7 +7683,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "存储集群扩展信息, 例如esb_url/webhook_image/priviledge_image等扩展信息或者是针对不同云特性开关", + "title": "extraInfo" }, "moduleID": { "type": "string", @@ -7655,7 +7699,6 @@ }, "isCommonCluster": { "type": "boolean", - "format": "boolean", "description": "是否为公共集群,默认false(废弃)", "title": "isCommonCluster" }, @@ -7671,7 +7714,6 @@ }, "is_shared": { "type": "boolean", - "format": "boolean", "description": "是否为共享集群,默认false", "title": "is_shared" }, @@ -7704,7 +7746,6 @@ "properties": { "IPVS": { "type": "boolean", - "format": "boolean", "description": "Kubernetes集群IPVS特性,默认为false", "title": "IPVS" }, @@ -7722,7 +7763,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "配置各模块自定义参数,预定义的key为KubeAPIServer,KubeController,Etcd,KubeScheduler。value为各模块进程启动参数,多个参数之间使用;间隔,例如Etcd: node-data-dir=/data/bcs/lib/etcd;", + "title": "extraArgs" }, "networkType": { "type": "string", @@ -7731,19 +7774,16 @@ }, "deletionProtection": { "type": "boolean", - "format": "boolean", "description": "是否启用集群删除保护", "title": "deletionProtection" }, "auditEnabled": { "type": "boolean", - "format": "boolean", "description": "是否开启审计开关", "title": "auditEnabled" }, "enableHa": { "type": "boolean", - "format": "boolean", "description": "自建集群是否开启高可用", "title": "enableHa" }, @@ -7759,7 +7799,6 @@ "properties": { "isScaleDownEnable": { "type": "boolean", - "format": "boolean", "description": "scale-down-enabled,是否允许缩容节点", "title": "isScaleDownEnable" }, @@ -7794,19 +7833,16 @@ }, "skipNodesWithLocalStorage": { "type": "boolean", - "format": "boolean", "description": "忽略有本地存储的节点,默认为false", "title": "skipNodesWithLocalStorage" }, "skipNodesWithSystemPods": { "type": "boolean", - "format": "boolean", "description": "忽略kube-system NS下非DaemonSet管理的Pod的节点,默认false", "title": "skipNodesWithSystemPods" }, "ignoreDaemonSetsUtilization": { "type": "boolean", - "format": "boolean", "description": "忽略DaemonSet的资源计算", "title": "ignoreDaemonSetsUtilization" }, @@ -7871,7 +7907,6 @@ }, "enableAutoscale": { "type": "boolean", - "format": "boolean", "description": "是否开启自动扩缩容,开启后会在该集群部署 ClusterAutoScaling 组件,默认为 false", "title": "enableAutoscale" }, @@ -7901,7 +7936,6 @@ }, "scaleUpFromZero": { "type": "boolean", - "format": "boolean", "description": "scale-up-from-zero,允许自动扩容(没有 ready 节点时)", "title": "scaleUpFromZero" }, @@ -7998,7 +8032,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "集群相关tag信息,用于集群管理标签信息注入. 可自定义设置, 可根据不同云实现业务定制tags(例如:可根据businessID绑定业务信息)", + "title": "clusterTags" }, "versionName": { "type": "string", @@ -8017,7 +8053,6 @@ }, "isAutoUpgradeClusterLevel": { "type": "boolean", - "format": "boolean", "description": "是否开启自动变配集群等级,针对托管集群生效", "title": "isAutoUpgradeClusterLevel" }, @@ -8038,7 +8073,6 @@ "properties": { "isExtranet": { "type": "boolean", - "format": "boolean", "description": "isExtranet集群内外网访问(true外网访问 false内网访问, 默认false)", "title": "isExtranet" }, @@ -8270,7 +8304,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "节点标签信息", + "title": "labels" }, "taints": { "type": "array", @@ -8332,7 +8368,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "节点注解信息", + "title": "annotations" }, "zoneName": { "type": "string", @@ -8369,7 +8407,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -8401,7 +8438,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -8487,7 +8523,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -8509,7 +8544,6 @@ "properties": { "isScaleDownEnable": { "type": "boolean", - "format": "boolean", "description": "scale-down-enabled,是否允许缩容节点", "title": "isScaleDownEnable" }, @@ -8544,19 +8578,16 @@ }, "skipNodesWithLocalStorage": { "type": "boolean", - "format": "boolean", "description": "忽略有本地存储的节点,默认为false", "title": "skipNodesWithLocalStorage" }, "skipNodesWithSystemPods": { "type": "boolean", - "format": "boolean", "description": "忽略kube-system NS下非DaemonSet管理的Pod的节点,默认false", "title": "skipNodesWithSystemPods" }, "ignoreDaemonSetsUtilization": { "type": "boolean", - "format": "boolean", "description": "忽略DaemonSet的资源计算,默认false", "title": "ignoreDaemonSetsUtilization" }, @@ -8601,7 +8632,6 @@ }, "enableAutoscale": { "type": "boolean", - "format": "boolean", "description": "是否开启自动扩缩容,开启后会在该集群部署 ClusterAutoScaling 组件,默认为 false", "title": "enableAutoscale" }, @@ -8631,7 +8661,6 @@ }, "scaleUpFromZero": { "type": "boolean", - "format": "boolean", "description": "scale-up-from-zero,允许自动扩容(没有 ready 节点时)", "title": "scaleUpFromZero" }, @@ -8696,7 +8725,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -8730,7 +8758,6 @@ }, "enable": { "type": "boolean", - "format": "boolean", "description": "cloud云账号是否开启,默认开启", "title": "enable" }, @@ -8770,7 +8797,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -8859,7 +8885,6 @@ }, "editable": { "type": "boolean", - "format": "boolean", "description": "对于SaaS层面该信息是否可编辑,BCS默认提供的预定义信息不可编译", "title": "editable" }, @@ -8867,13 +8892,17 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "通过标准运维实现的扩展流程或者插件", + "title": "opsPlugins" }, "extraPlugins": { "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "额外扩展流程,用于自定义扩展,该部分允许用户编辑", + "title": "extraPlugins" }, "cloudCredential": { "$ref": "#/definitions/clustermanagerCredential", @@ -8939,7 +8968,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "平台不同云的配置信息", + "title": "platformInfo" } }, "description": "创建cloud请求", @@ -8967,7 +8998,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -9059,7 +9089,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -9115,7 +9144,6 @@ }, "isExclusive": { "type": "boolean", - "format": "boolean", "description": "是否为业务独占集群", "title": "isExclusive" }, @@ -9133,7 +9161,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "集群的labels,用于携带额外的信息,最大不得超过20个", + "title": "labels" }, "creator": { "type": "string", @@ -9142,7 +9172,6 @@ }, "onlyCreateInfo": { "type": "boolean", - "format": "boolean", "description": "仅创建集群信息,不进行真实集群创建,默认为false", "title": "onlyCreateInfo" }, @@ -9150,13 +9179,17 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "创建集群时进行BCS内置插件安装,该信息会索引云上默认配置信息进行对比与补充,如果填写错误直接报错", + "title": "bcsAddons" }, "extraAddons": { "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "创建集群时额外扩展传递的信息,该部分为预留二方/三方/服务商扩展使用,如果填错直接报错", + "title": "extraAddons" }, "cloudID": { "type": "string", @@ -9206,7 +9239,6 @@ }, "systemReinstall": { "type": "boolean", - "format": "boolean", "description": "是否重装master节点的系统,机器被托管情况下有效", "title": "systemReinstall" }, @@ -9222,7 +9254,6 @@ }, "autoGenerateMasterNodes": { "type": "boolean", - "format": "boolean", "description": "创建集群Master节点来源, 默认false表示使用已有节点; 为true时, 需要生成master instance", "title": "autoGenerateMasterNodes" }, @@ -9238,7 +9269,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "存储集群扩展信息, 例如esb_url/webhook_image/priviledge_image等扩展信息", + "title": "extraInfo" }, "moduleID": { "type": "string", @@ -9252,7 +9285,6 @@ }, "isCommonCluster": { "type": "boolean", - "format": "boolean", "description": "是否为公共集群,默认false(废弃)", "title": "isCommonCluster" }, @@ -9268,7 +9300,6 @@ }, "is_shared": { "type": "boolean", - "format": "boolean", "description": "是否为共享集群,默认false", "title": "is_shared" }, @@ -9315,7 +9346,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -9363,7 +9393,6 @@ }, "enableAutoscale": { "type": "boolean", - "format": "boolean", "description": "是否开启弹性伸缩,默认false", "title": "enableAutoscale" }, @@ -9381,13 +9410,17 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化label信息", + "title": "labels" }, "taints": { "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化的污点信息(废弃)", + "title": "taints" }, "nodeOS": { "type": "string", @@ -9418,7 +9451,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化的资源标签信息", + "title": "tags" }, "nodeGroupType": { "type": "string", @@ -9443,7 +9478,6 @@ }, "onlyCreateInfo": { "type": "boolean", - "format": "boolean", "description": "onlyCreateInfo仅录入数据,不执行流程", "title": "onlyCreateInfo" } @@ -9476,7 +9510,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -9529,7 +9562,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化label信息", + "title": "labels" }, "taints": { "type": "array", @@ -9572,7 +9607,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "配置各模块自定义参数,预定义的key为kubeletvalue为各模块进程启动参数,多个参数之间使用;间隔,例如Kubelet: root-dir=/var/lib/kubelet;", + "title": "extraArgs" }, "preStartUserScript": { "type": "string", @@ -9649,7 +9686,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -9711,7 +9747,9 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerStep" - } + }, + "description": "任务详细步骤信息,主要用于信息确认,异常时", + "title": "steps" }, "clusterID": { "type": "string", @@ -9761,7 +9799,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -9820,7 +9857,6 @@ }, "isExclusive": { "type": "boolean", - "format": "boolean", "description": "是否为业务独占集群", "title": "isExclusive" }, @@ -9843,7 +9879,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "集群的labels,用于携带额外的信息,最大不得超过20个", + "title": "labels" }, "creator": { "type": "string", @@ -9852,7 +9890,6 @@ }, "onlyCreateInfo": { "type": "boolean", - "format": "boolean", "description": "仅创建集群信息,不进行真实集群创建,默认为false", "title": "onlyCreateInfo" }, @@ -9888,7 +9925,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "存储集群扩展信息, 例如esb_url/webhook_image/priviledge_image等扩展信息", + "title": "extraInfo" }, "description": { "type": "string", @@ -9938,7 +9977,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10051,7 +10089,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "标准运维任务的全局变量参数", + "title": "constant" } }, "description": "调试标准运维任务请求参数", @@ -10106,7 +10146,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10138,7 +10177,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -10182,7 +10220,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10209,7 +10246,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10236,7 +10272,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -10265,7 +10300,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10308,7 +10342,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10355,7 +10388,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10382,7 +10414,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10420,7 +10451,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10447,7 +10477,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10505,7 +10534,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10543,24 +10571,21 @@ "title": "nodes" }, "force": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "gracePeriodSeconds": { "type": "integer", "format": "int32" }, "ignoreAllDaemonSets": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "timeout": { "type": "integer", "format": "int64" }, "deleteLocalData": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "selector": { "type": "string" @@ -10569,16 +10594,14 @@ "type": "string" }, "disableEviction": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "skipWaitForDeleteTimeoutSeconds": { "type": "integer", "format": "int64" }, "dryRun": { - "type": "boolean", - "format": "boolean" + "type": "boolean" } } }, @@ -10598,7 +10621,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10640,7 +10662,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10681,7 +10702,6 @@ "properties": { "canDeleted": { "type": "boolean", - "format": "boolean", "description": "集群列表的集群是否能够删除(集群无所属node节点时才允许删除)", "title": "canDeleted" }, @@ -10692,7 +10712,6 @@ }, "autoScale": { "type": "boolean", - "format": "boolean", "description": "集群是否支持弹性伸缩, 在云支持弹性伸缩的前提下, 某些类型集群支持弹性伸缩", "title": "autoScale" } @@ -10714,7 +10733,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10772,7 +10790,6 @@ }, "success": { "type": "boolean", - "format": "boolean", "description": "是否成功", "title": "success" }, @@ -10808,7 +10825,6 @@ }, "allScope": { "type": "boolean", - "format": "boolean", "description": "是否获取所有资源范围的拓扑结构,默认为false", "title": "allScope" }, @@ -10835,7 +10851,6 @@ }, "success": { "type": "boolean", - "format": "boolean", "description": "是否成功", "title": "success" }, @@ -10932,7 +10947,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10965,7 +10979,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11001,7 +11014,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11033,7 +11045,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11065,7 +11076,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11099,7 +11109,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11133,7 +11142,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11177,7 +11185,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11235,7 +11242,6 @@ }, "success": { "type": "boolean", - "format": "boolean", "description": "是否成功", "title": "success" }, @@ -11305,7 +11311,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11341,7 +11346,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11380,7 +11384,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11414,7 +11417,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11451,7 +11453,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11473,6 +11474,37 @@ "message" ] }, + "clustermanagerGetResourceGroupsResponse": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int64", + "description": "返回错误码", + "title": "code" + }, + "message": { + "type": "string", + "description": "返回错误信息", + "title": "message" + }, + "result": { + "type": "boolean", + "description": "返回结果", + "title": "result" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/clustermanagerResourceGroupInfo" + }, + "description": "获取到的信息", + "title": "data" + } + }, + "description": "获取resource groups列表", + "title": "GetResourceGroupsResponse" + }, "clustermanagerGetScopeHostCheckRequest": { "type": "object", "properties": { @@ -11525,7 +11557,6 @@ }, "success": { "type": "boolean", - "format": "boolean", "description": "是否成功", "title": "success" }, @@ -11565,7 +11596,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11665,7 +11695,6 @@ }, "success": { "type": "boolean", - "format": "boolean", "description": "是否成功", "title": "success" }, @@ -11768,7 +11797,6 @@ }, "success": { "type": "boolean", - "format": "boolean", "description": "是否成功", "title": "success" }, @@ -11805,7 +11833,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11982,7 +12009,6 @@ }, "inter": { "type": "boolean", - "format": "boolean", "description": "默认外网方式导入, 为true时候以内网方式导入. 该字段仅对云导入生效", "title": "inter" } @@ -12040,7 +12066,6 @@ }, "isExclusive": { "type": "boolean", - "format": "boolean", "description": "是否为业务独占集群,默认为true", "title": "isExclusive" }, @@ -12053,7 +12078,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "集群的labels,用于携带额外的信息,最大不得超过20个", + "title": "labels" }, "creator": { "type": "string", @@ -12079,7 +12106,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "存储集群扩展信息, 例如esb_url/webhook_image/priviledge_image等扩展信息", + "title": "extraInfo" }, "extraClusterID": { "type": "string", @@ -12093,7 +12122,6 @@ }, "is_shared": { "type": "boolean", - "format": "boolean", "description": "是否为共享集群,默认false", "title": "is_shared" }, @@ -12138,7 +12166,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12268,13 +12295,11 @@ }, "isSecurityService": { "type": "boolean", - "format": "boolean", "description": "新实例启动时的是否开启云安全, 选填 qcloud默认开启", "title": "isSecurityService" }, "isMonitorService": { "type": "boolean", - "format": "boolean", "description": "新实例启动时的是否开启云监控, 选填 默认开启", "title": "isMonitorService" }, @@ -12416,7 +12441,6 @@ }, "publicIPAssigned": { "type": "boolean", - "format": "boolean", "description": "是否分配公网IP。默认为false。", "title": "publicIPAssigned" }, @@ -12486,7 +12510,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -12530,7 +12553,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -12627,13 +12649,11 @@ }, "isSecurityService": { "type": "boolean", - "format": "boolean", "description": "新实例启动时的是否开启云安全, 选填 yunti默认关闭", "title": "isSecurityService" }, "isMonitorService": { "type": "boolean", - "format": "boolean", "description": "新实例启动时的是否开启云监控, 选填 默认开启", "title": "isMonitorService" }, @@ -12651,7 +12671,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "节点通过selector的匹配策略,目前仅用作第三方节点匹配", + "title": "selector" }, "keyPair": { "$ref": "#/definitions/clustermanagerKeyInfo", @@ -12682,7 +12704,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12718,7 +12739,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12754,7 +12774,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12795,7 +12814,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12831,7 +12849,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12897,7 +12914,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12933,7 +12949,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12969,7 +12984,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13001,7 +13015,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13037,7 +13050,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13073,7 +13085,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13109,7 +13120,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13145,7 +13155,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13181,7 +13190,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13217,7 +13225,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13254,7 +13261,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13295,7 +13301,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13311,7 +13316,9 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerExtraInfo" - } + }, + "description": "集群其他标识信息,cluster结构之外的数据获取", + "title": "clusterExtraInfo" }, "web_annotations": { "$ref": "#/definitions/clustermanagerWebAnnotations", @@ -13343,7 +13350,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13385,7 +13391,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13421,7 +13426,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13463,7 +13467,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13499,7 +13502,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13535,7 +13537,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13577,7 +13578,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13618,7 +13618,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13659,7 +13658,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13705,7 +13703,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13721,7 +13718,9 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerExtraInfo" - } + }, + "description": "集群其他标识信息,cluster结构之外的数据获取", + "title": "clusterExtraInfo" }, "web_annotations": { "$ref": "#/definitions/clustermanagerWebAnnotationsV2", @@ -13753,7 +13752,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13823,7 +13821,6 @@ }, "all": { "type": "boolean", - "format": "boolean", "description": "all操作所有的账号迁移", "title": "all" } @@ -13850,7 +13847,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -13937,7 +13933,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13971,13 +13966,17 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "命名空间标签", + "title": "labels" }, "annotations": { "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "命名空间注解", + "title": "annotations" }, "quota": { "$ref": "#/definitions/clustermanagerNamespaceQuota", @@ -14030,7 +14029,6 @@ }, "enableVPCCni": { "type": "boolean", - "format": "boolean", "description": "enableVPCCni是否开启VPC-CNI网络模式(使能vpc-cni模式时,新增流程开启)", "title": "enableVPCCni" }, @@ -14049,7 +14047,6 @@ }, "isStaticIpMode": { "type": "boolean", - "format": "boolean", "description": "集群VPC-CNI模式是否为非固定IP,默认: FALSE 非固定IP", "title": "isNonStaticIpMode" }, @@ -14250,7 +14247,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "节点注解信息", + "title": "annotations" } } }, @@ -14319,7 +14318,6 @@ }, "enableAutoscale": { "type": "boolean", - "format": "boolean", "description": "是否开启弹性伸缩,默认false", "title": "enableAutoscale" }, @@ -14337,13 +14335,17 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化label信息", + "title": "labels" }, "taints": { "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化的污点信息", + "title": "taints" }, "nodeOS": { "type": "string", @@ -14396,7 +14398,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化的资源标签信息", + "title": "tags" }, "nodeGroupType": { "type": "string", @@ -14412,7 +14416,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "节点池扩展信,存储资源池类型等信息", + "title": "extraInfo" } }, "description": "节点组,对蓝鲸、腾讯云、AWS弹性伸缩能力封装", @@ -14644,7 +14650,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "节点标签信息", + "title": "labels" } } }, @@ -14701,7 +14709,6 @@ "properties": { "isExist": { "type": "boolean", - "format": "boolean", "description": "节点是否存在集群中", "title": "isExist" }, @@ -14740,13 +14747,17 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "节点通用的labels设置", + "title": "labels" }, "extraArgs": { "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "配置各模块自定义参数,预定义的key为kubeletvalue为各模块进程启动参数,多个参数之间使用;间隔,例如Kubelet: root-dir=/var/lib/kubelet;", + "title": "extraArgs" }, "taints": { "type": "array", @@ -14842,7 +14853,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化label信息", + "title": "labels" }, "taints": { "type": "array", @@ -14885,7 +14898,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "配置各模块自定义参数,预定义的key为kubeletvalue为各模块进程启动参数,多个参数之间使用;间隔,例如Kubelet: root-dir=/var/lib/kubelet;", + "title": "extraArgs" }, "preStartUserScript": { "type": "string", @@ -14958,7 +14973,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "节点annotation设置", + "title": "annotations" }, "maxPodsPerNode": { "type": "integer", @@ -14968,19 +14985,16 @@ }, "skipSystemInit": { "type": "boolean", - "format": "boolean", "description": "是否跳过执行系统初始化, 默认执行", "title": "skipSystemInit" }, "allowSkipScaleOutWhenFailed": { "type": "boolean", - "format": "boolean", "description": "扩容失败时是否允许跳过流程, 默认不允许跳过", "title": "allowSkipScaleOutWhenFailed" }, "allowSkipScaleInWhenFailed": { "type": "boolean", - "format": "boolean", "description": "缩容失败时是否允许跳过流程, 默认不允许跳过", "title": "skipSystemInit" } @@ -15032,7 +15046,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "云上默认置入的区域信息,key是字符串,values是中文说明", + "title": "regions" } }, "description": "用于记录一些固定的系统信息,用于帮助OS层面信息展示", @@ -15327,7 +15343,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -15345,6 +15360,28 @@ "description": "节点组移除节点返回,确认节点移除是否成功", "title": "RemoveNodesFromGroupResponse" }, + "clustermanagerResourceGroupInfo": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "resource group名称", + "title": "name" + }, + "region": { + "type": "string", + "description": "地域信息", + "title": "region" + }, + "provisioningState": { + "type": "string", + "description": "resource group状态", + "title": "provisioningState" + } + }, + "description": "resource group信息", + "title": "ResourceGroupInfo" + }, "clustermanagerRetryCreateClusterReq": { "type": "object", "properties": { @@ -15381,7 +15418,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -15441,7 +15477,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -15538,7 +15573,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -15571,7 +15605,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "步骤定义的参数,key、value对", + "title": "params" }, "retry": { "type": "integer", @@ -15622,7 +15658,6 @@ }, "skipOnFailed": { "type": "boolean", - "format": "boolean", "description": "失败时自动跳过某步骤,由用户设置。当设置失败跳过时,系统自动跳过当前失败步骤,执行后续流程", "title": "skipOnFailed" }, @@ -15633,7 +15668,6 @@ }, "allowSkip": { "type": "boolean", - "format": "boolean", "description": "标识该步骤失败时候是否允许用户手动跳过。当为true失败时候允许用户手动跳过, 为false失败时用户仅能通过重试解决", "title": "allowSkip" } @@ -15717,7 +15751,6 @@ "properties": { "isScaleDownEnable": { "type": "boolean", - "format": "boolean", "description": "scale-down-enabled,是否允许缩容节点", "title": "isScaleDownEnable" }, @@ -15752,19 +15785,16 @@ }, "skipNodesWithLocalStorage": { "type": "boolean", - "format": "boolean", "description": "忽略有本地存储的节点,默认为true", "title": "skipNodesWithLocalStorage" }, "skipNodesWithSystemPods": { "type": "boolean", - "format": "boolean", "description": "忽略kube-system NS下非DaemonSet管理的Pod的节点,默认true", "title": "skipNodesWithSystemPods" }, "ignoreDaemonSetsUtilization": { "type": "boolean", - "format": "boolean", "description": "忽略DaemonSet的资源计算, 默认为true", "title": "ignoreDaemonSetsUtilization" }, @@ -15840,7 +15870,6 @@ }, "scaleUpFromZero": { "type": "boolean", - "format": "boolean", "description": "scale-up-from-zero,允许自动扩容(没有 ready 节点时)", "title": "scaleUpFromZero" }, @@ -15915,7 +15944,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -16008,7 +16036,9 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerStep" - } + }, + "description": "任务详细步骤信息,主要用于信息确认,异常时", + "title": "steps" }, "clusterID": { "type": "string", @@ -16037,7 +16067,6 @@ }, "forceTerminate": { "type": "boolean", - "format": "boolean", "description": "任务设置为强制终止,用于流程控制", "title": "forceTerminate" }, @@ -16045,7 +16074,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "公共参数,便于跨Step完成信息传递", + "title": "commonParams" }, "taskName": { "type": "string", @@ -16202,7 +16233,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -16256,7 +16286,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -16267,7 +16296,6 @@ "properties": { "isScaleDownEnable": { "type": "boolean", - "format": "boolean", "description": "scale-down-enabled,是否允许缩容节点", "title": "isScaleDownEnable" }, @@ -16302,19 +16330,16 @@ }, "skipNodesWithLocalStorage": { "type": "boolean", - "format": "boolean", "description": "忽略有本地存储的节点,默认为false", "title": "skipNodesWithLocalStorage" }, "skipNodesWithSystemPods": { "type": "boolean", - "format": "boolean", "description": "忽略kube-system NS下非DaemonSet管理的Pod的节点,默认false", "title": "skipNodesWithSystemPods" }, "ignoreDaemonSetsUtilization": { "type": "boolean", - "format": "boolean", "description": "忽略DaemonSet的资源计算", "title": "ignoreDaemonSetsUtilization" }, @@ -16394,7 +16419,6 @@ }, "scaleUpFromZero": { "type": "boolean", - "format": "boolean", "description": "scale-up-from-zero,允许自动扩容(没有 ready 节点时)", "title": "scaleUpFromZero" }, @@ -16440,7 +16464,6 @@ }, "onlyUpdateInfo": { "type": "boolean", - "format": "boolean", "description": "仅更新CA组件配置参数信息,不触发流程", "title": "onlyUpdateInfo" }, @@ -16481,7 +16504,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -16502,7 +16524,6 @@ "properties": { "enable": { "type": "boolean", - "format": "boolean", "description": "是否开启集群扩缩容", "title": "enable" }, @@ -16539,7 +16560,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -16580,7 +16600,6 @@ }, "enable": { "type": "boolean", - "format": "boolean", "description": "cloud云账号是否开启,默认开启", "title": "enable" }, @@ -16624,7 +16643,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -16708,7 +16726,6 @@ }, "editable": { "type": "boolean", - "format": "boolean", "description": "对于SaaS层面该信息是否可编辑,BCS默认提供的预定义信息不可编译", "title": "editable" }, @@ -16716,13 +16733,17 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "通过标准运维实现的扩展流程或者插件", + "title": "opsPlugins" }, "extraPlugins": { "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "额外扩展流程,用于自定义扩展,该部分允许用户编辑", + "title": "extraPlugins" }, "cloudCredential": { "$ref": "#/definitions/clustermanagerCredential", @@ -16788,7 +16809,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "平台不同云的配置信息", + "title": "platformInfo" } }, "description": "创建项目请求", @@ -16814,7 +16837,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -16904,7 +16926,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -16991,7 +17012,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -17046,7 +17066,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -17113,7 +17132,6 @@ }, "isExclusive": { "type": "boolean", - "format": "boolean", "description": "是否为业务独占集群", "title": "isExclusive" }, @@ -17131,7 +17149,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "集群的labels,用于携带额外的信息,最大不得超过20个", + "title": "labels" }, "updater": { "type": "string", @@ -17147,13 +17167,17 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "创建集群时进行BCS内置插件安装,该信息会索引云上默认配置信息进行对比与补充,如果填写错误直接报错", + "title": "bcsAddons" }, "extraAddons": { "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "创建集群时额外扩展传递的信息,该部分为预留二方/三方/服务商扩展使用,如果填错直接报错", + "title": "extraAddons" }, "systemID": { "type": "string", @@ -17202,7 +17226,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "存储集群扩展信息, 例如esb_url/webhook_image/priviledge_image等扩展信息", + "title": "ExtraInfo" }, "moduleID": { "type": "string", @@ -17216,7 +17242,6 @@ }, "isCommonCluster": { "type": "boolean", - "format": "boolean", "description": "是否为公共集群,默认false", "title": "isCommonCluster" }, @@ -17232,7 +17257,6 @@ }, "is_shared": { "type": "boolean", - "format": "boolean", "description": "是否为共享集群,默认false", "title": "is_shared" }, @@ -17279,7 +17303,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -17322,7 +17345,6 @@ }, "manual": { "type": "boolean", - "format": "boolean", "description": "手动扩容操作,用户手动扩容操作不做数据回退清理,展示具体的步骤,支持用户重试", "title": "manual" } @@ -17351,7 +17373,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -17412,7 +17433,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -17473,7 +17493,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -17520,7 +17539,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -17562,7 +17580,6 @@ }, "enableAutoscale": { "type": "boolean", - "format": "boolean", "description": "是否开启弹性伸缩,默认false", "title": "enableAutoscale" }, @@ -17585,19 +17602,25 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化label信息", + "title": "labels" }, "taints": { "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化的污点信息", + "title": "taints" }, "tags": { "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化的资源标签信息", + "title": "tags" }, "nodeOS": { "type": "string", @@ -17637,7 +17660,6 @@ }, "onlyUpdateInfo": { "type": "boolean", - "format": "boolean", "description": "onlyUpdateInfo仅更新数据,不执行流程", "title": "onlyUpdateInfo" }, @@ -17645,7 +17667,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "节点池扩展息", + "title": "extraInfo" } }, "description": "更新NodeGroup请求", @@ -17667,7 +17691,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -17717,7 +17740,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -17788,7 +17810,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -17839,7 +17860,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -17883,7 +17903,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化label信息", + "title": "labels" }, "taints": { "type": "array", @@ -17926,7 +17948,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "配置各模块自定义参数,预定义的key为kubeletvalue为各模块进程启动参数,多个参数之间使用;间隔,例如Kubelet: root-dir=/var/lib/kubelet;", + "title": "extraArgs" }, "preStartUserScript": { "type": "string", @@ -18003,7 +18027,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -18052,7 +18075,9 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerStep" - } + }, + "description": "任务详细步骤信息,主要用于信息确认,异常时", + "title": "steps" }, "updater": { "type": "string", @@ -18083,7 +18108,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -18136,7 +18160,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -18213,7 +18236,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -18308,8 +18330,7 @@ "type": "string" }, "enable": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "flagType": { "type": "string" diff --git a/bcs-services/bcs-cluster-manager/go.mod b/bcs-services/bcs-cluster-manager/go.mod index fe58340031..bca026b5ec 100644 --- a/bcs-services/bcs-cluster-manager/go.mod +++ b/bcs-services/bcs-cluster-manager/go.mod @@ -16,18 +16,14 @@ replace ( ) require ( - github.com/Azure/azure-sdk-for-go v67.1.0+incompatible - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.2.0 - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute v1.0.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice v1.0.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0 - github.com/Azure/go-autorest/autorest v0.11.18 - github.com/Azure/go-autorest/autorest/adal v0.9.13 github.com/RichardKnop/machinery/v2 v2.0.11 github.com/Tencent/bk-bcs/bcs-common v0.0.0-20230707084844-155f32c8f606 github.com/Tencent/bk-bcs/bcs-common/common/encryptv2 v0.0.0-20230908045126-c9d09981a9c5 - github.com/Tencent/bk-bcs/bcs-common/pkg/i18n v0.0.0-20230908142111-fef103db0120 github.com/Tencent/bk-bcs/bcs-services/pkg v0.0.0-20230908014411-0783f4d68dd5 github.com/avast/retry-go v2.7.0+incompatible github.com/coreos/etcd v3.3.25+incompatible @@ -68,7 +64,10 @@ require ( ) require ( - github.com/Tencent/bk-bcs/bcs-common/pkg/audit v0.0.0-20231220140029-0ddd09e1b55e + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions v1.3.0 + github.com/Tencent/bk-bcs/bcs-common/pkg/audit v0.0.0-20240131080851-5006e27e0a5d + github.com/Tencent/bk-bcs/bcs-common/pkg/i18n v0.0.0-20230908142111-fef103db0120 github.com/apparentlymart/go-cidr v1.1.0 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 @@ -82,15 +81,9 @@ require ( require ( cloud.google.com/go v0.81.0 // indirect cloud.google.com/go/pubsub v1.10.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect - github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect - github.com/Azure/go-autorest/autorest/to v0.2.0 // indirect - github.com/Azure/go-autorest/autorest/validation v0.1.0 // indirect - github.com/Azure/go-autorest/logger v0.2.1 // indirect - github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v0.7.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 // indirect github.com/BurntSushi/toml v1.1.0 // indirect github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd // indirect github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895 // indirect @@ -118,7 +111,6 @@ require ( github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/felixge/httpsnoop v1.0.3 // indirect - github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/go-errors/errors v1.0.1 // indirect github.com/go-logr/logr v1.2.4 // indirect @@ -134,6 +126,7 @@ require ( github.com/go-stack/stack v1.8.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect + github.com/golang-jwt/jwt/v5 v5.0.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.4 // indirect github.com/gomodule/redigo v2.0.0+incompatible // indirect @@ -175,7 +168,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect - github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect + github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/common v0.28.0 // indirect @@ -206,14 +199,14 @@ require ( go.uber.org/goleak v1.1.12 // indirect go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.19.0 // indirect - golang.org/x/crypto v0.7.0 // indirect + golang.org/x/crypto v0.14.0 // indirect golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect golang.org/x/mod v0.8.0 // indirect - golang.org/x/net v0.10.0 // indirect + golang.org/x/net v0.17.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.8.0 // indirect - golang.org/x/term v0.6.0 // indirect - golang.org/x/text v0.9.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/term v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect google.golang.org/appengine v1.6.7 // indirect gopkg.in/inf.v0 v0.9.1 // indirect diff --git a/bcs-services/bcs-cluster-manager/internal/actions/cloudresource/instance.go b/bcs-services/bcs-cluster-manager/internal/actions/cloudresource/instance.go index 172b632c7c..c13f88a07b 100644 --- a/bcs-services/bcs-cluster-manager/internal/actions/cloudresource/instance.go +++ b/bcs-services/bcs-cluster-manager/internal/actions/cloudresource/instance.go @@ -305,7 +305,10 @@ func (la *ListKeyPairsAction) listKeyPairs() error { cmOption.Region = la.req.Region // get key list - keys, err := nodeMgr.ListKeyPairs(cmOption) + keys, err := nodeMgr.ListKeyPairs(&cloudprovider.ListNetworksOption{ + CommonOption: *cmOption, + ResourceGroupName: la.req.ResourceGroupName, + }) if err != nil { return err } diff --git a/bcs-services/bcs-cluster-manager/internal/actions/cloudresource/resourcegroup.go b/bcs-services/bcs-cluster-manager/internal/actions/cloudresource/resourcegroup.go new file mode 100644 index 0000000000..8c791dd814 --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/actions/cloudresource/resourcegroup.go @@ -0,0 +1,128 @@ +/* + * 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 cloudresource + +import ( + "context" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + + cmproto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/actions" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/common" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/store" +) + +// GetResourceGroupsAction action for get resource groups +type GetResourceGroupsAction struct { + ctx context.Context + model store.ClusterManagerModel + + cloud *cmproto.Cloud + account *cmproto.CloudAccount + req *cmproto.GetResourceGroupsRequest + resp *cmproto.GetResourceGroupsResponse + resourceGroupList []*cmproto.ResourceGroupInfo +} + +// NewGetResourceGroupsAction create list action for resource groups +func NewGetResourceGroupsAction(model store.ClusterManagerModel) *GetResourceGroupsAction { + return &GetResourceGroupsAction{ + model: model, + } +} + +func (ga *GetResourceGroupsAction) listResourceGroups() error { + nodeMgr, err := cloudprovider.GetNodeMgr(ga.cloud.CloudProvider) + if err != nil { + return err + } + + resourceGroupList, err := nodeMgr.GetResourceGroups(&cloudprovider.CommonOption{ + Account: func() *cmproto.Account { + if ga.account != nil { + return ga.account.Account + } + return nil + }(), + }) + if err != nil { + return err + } + + ga.resourceGroupList = resourceGroupList + return nil +} + +func (ga *GetResourceGroupsAction) setResp(code uint32, msg string) { + ga.resp.Code = code + ga.resp.Message = msg + ga.resp.Result = (code == common.BcsErrClusterManagerSuccess) + ga.resp.Data = ga.resourceGroupList +} + +func (ga *GetResourceGroupsAction) validate() error { + err := ga.req.Validate() + if err != nil { + return err + } + + err = ga.getRelativeData() + if err != nil { + return err + } + + return nil +} + +func (ga *GetResourceGroupsAction) getRelativeData() error { + cloud, err := actions.GetCloudByCloudID(ga.model, ga.req.CloudID) + if err != nil { + return err + } + ga.cloud = cloud + + if ga.req.GetAccountID() != "" { + account, errLocal := ga.model.GetCloudAccount(ga.ctx, ga.req.CloudID, ga.req.AccountID, false) + if errLocal != nil { + return errLocal + } + + ga.account = account + } + + return nil +} + +// Handle handle list resource groups +func (ga *GetResourceGroupsAction) Handle( + ctx context.Context, req *cmproto.GetResourceGroupsRequest, resp *cmproto.GetResourceGroupsResponse) { + if req == nil || resp == nil { + blog.Errorf("get resource group list failed, req or resp is empty") + return + } + ga.ctx = ctx + ga.req = req + ga.resp = resp + + if err := ga.validate(); err != nil { + ga.setResp(common.BcsErrClusterManagerInvalidParameter, err.Error()) + return + } + if err := ga.listResourceGroups(); err != nil { + ga.setResp(common.BcsErrClusterManagerDBOperation, err.Error()) + return + } + ga.setResp(common.BcsErrClusterManagerSuccess, common.BcsErrClusterManagerSuccessStr) +} diff --git a/bcs-services/bcs-cluster-manager/internal/actions/cloudvpc/securitygroups.go b/bcs-services/bcs-cluster-manager/internal/actions/cloudvpc/securitygroups.go index 004ea3a761..e7aa5ae210 100644 --- a/bcs-services/bcs-cluster-manager/internal/actions/cloudvpc/securitygroups.go +++ b/bcs-services/bcs-cluster-manager/internal/actions/cloudvpc/securitygroups.go @@ -117,7 +117,10 @@ func (la *ListSecurityGroupsAction) listCloudSecurityGroups() error { cmOption.Region = la.req.Region // get sgs list - sgs, err := vpcMgr.ListSecurityGroups(cmOption) + sgs, err := vpcMgr.ListSecurityGroups(&cloudprovider.ListNetworksOption{ + CommonOption: *cmOption, + ResourceGroupName: la.req.ResourceGroupName, + }) if err != nil { return err } diff --git a/bcs-services/bcs-cluster-manager/internal/actions/cloudvpc/subnets.go b/bcs-services/bcs-cluster-manager/internal/actions/cloudvpc/subnets.go index b77aadf907..8429bbba2f 100644 --- a/bcs-services/bcs-cluster-manager/internal/actions/cloudvpc/subnets.go +++ b/bcs-services/bcs-cluster-manager/internal/actions/cloudvpc/subnets.go @@ -132,7 +132,10 @@ func (la *ListSubnetsAction) ListCloudSubnets() error { } // get subnet list - subnets, err := vpcMgr.ListSubnets(la.req.VpcID, la.req.Zone, cmOption) + subnets, err := vpcMgr.ListSubnets(la.req.VpcID, la.req.Zone, &cloudprovider.ListNetworksOption{ + CommonOption: *cmOption, + ResourceGroupName: la.req.ResourceGroupName, + }) if err != nil { return err } diff --git a/bcs-services/bcs-cluster-manager/internal/actions/cloudvpc/vpc.go b/bcs-services/bcs-cluster-manager/internal/actions/cloudvpc/vpc.go index b5f5ec4de5..65d9399344 100644 --- a/bcs-services/bcs-cluster-manager/internal/actions/cloudvpc/vpc.go +++ b/bcs-services/bcs-cluster-manager/internal/actions/cloudvpc/vpc.go @@ -115,7 +115,10 @@ func (la *ListCloudVpcsAction) ListCloudVpcs() error { cmOption.Region = la.req.Region // get vpc list - vpcs, err := vpcMgr.ListVpcs(la.req.VpcID, cmOption) + vpcs, err := vpcMgr.ListVpcs(la.req.VpcID, &cloudprovider.ListNetworksOption{ + CommonOption: *cmOption, + ResourceGroupName: la.req.ResourceGroupName, + }) if err != nil { return err } diff --git a/bcs-services/bcs-cluster-manager/internal/actions/cluster/import.go b/bcs-services/bcs-cluster-manager/internal/actions/cluster/import.go index 7fac6b4db9..8664993ce9 100644 --- a/bcs-services/bcs-cluster-manager/internal/actions/cluster/import.go +++ b/bcs-services/bcs-cluster-manager/internal/actions/cluster/import.go @@ -597,7 +597,10 @@ func (ka *CheckKubeConnectAction) Handle(ctx context.Context, req *cmproto.KubeC } ok, err := provider.CheckClusterEndpointStatus(req.ClusterID, req.IsExtranet, - &cloudprovider.CheckEndpointStatusOption{CommonOption: *cmOption}) + &cloudprovider.CheckEndpointStatusOption{ + CommonOption: *cmOption, + ResourceGroupName: req.ResourceGroupName, + }) if err != nil { ka.setResp(common.BcsErrClusterManagerCheckKubeConnErr, err.Error()) return diff --git a/bcs-services/bcs-cluster-manager/internal/auth/preset.go b/bcs-services/bcs-cluster-manager/internal/auth/preset.go index 2223a73f20..97d5bce905 100644 --- a/bcs-services/bcs-cluster-manager/internal/auth/preset.go +++ b/bcs-services/bcs-cluster-manager/internal/auth/preset.go @@ -85,6 +85,7 @@ var NoAuthMethod = []string{ "ClusterManager.ListKeypairs", "ClusterManager.ListCloudProjects", "ClusterManager.ListCloudVpcs", + "ClusterManager.GetResourceGroups", "ClusterManager.ListOperationLogs", "ClusterManager.ListResourceSchema", diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/aks.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/aks.go index a57cd4a17d..39a8c3c849 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/aks.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/aks.go @@ -34,9 +34,13 @@ type AksServiceImpl struct { poolClient *armcontainerservice.AgentPoolsClient setClient *armcompute.VirtualMachineScaleSetsClient vmClient *armcompute.VirtualMachineScaleSetVMsClient + vmSizeClient *armcompute.VirtualMachineSizesClient + vmImageClient *armcompute.VirtualMachineImagesClient vnetClient *armnetwork.VirtualNetworksClient + subnetClient *armnetwork.SubnetsClient clustersClient *armcontainerservice.ManagedClustersClient securityGroupsClient *armnetwork.SecurityGroupsClient + sshPubKeyClient *armcompute.SSHPublicKeysClient } // NewAksServiceImplWithCommonOption 从 CommonOption 创建 AksService @@ -94,6 +98,14 @@ func NewAKsServiceImpl(subscriptionID, tenantID, clientID, clientSecret, resourc if err != nil { return nil, errors.Wrapf(err, "failed to create vmScaleSetVMs client,SubscriptionID:%s", subscriptionID) } + vmSizeClient, err := armcompute.NewVirtualMachineSizesClient(subscriptionID, cred, nil) + if err != nil { + return nil, errors.Wrapf(err, "failed to create VMSize client,SubscriptionID:%s", subscriptionID) + } + vmimageClient, err := armcompute.NewVirtualMachineImagesClient(subscriptionID, cred, nil) + if err != nil { + return nil, errors.Wrapf(err, "failed to create VMImages client,SubscriptionID:%s", subscriptionID) + } netClient, err := armnetwork.NewInterfacesClient(subscriptionID, cred, nil) if err != nil { return nil, errors.Wrapf(err, "failed to create networkInterfaces client,SubscriptionID:%s", subscriptionID) @@ -107,22 +119,36 @@ func NewAKsServiceImpl(subscriptionID, tenantID, clientID, clientSecret, resourc return nil, errors.Wrapf(err, "failed to create virtual networks client,SubscriptionID:%s", subscriptionID) } + subnetClient, err := armnetwork.NewSubnetsClient(subscriptionID, cred, nil) + if err != nil { + return nil, errors.Wrapf(err, "failed to create subnets client,SubscriptionID:%s", + subscriptionID) + } securityGroupsClient, err := armnetwork.NewSecurityGroupsClient(subscriptionID, cred, nil) if err != nil { return nil, errors.Wrapf(err, "failed to create security groups client,SubscriptionID:%s", subscriptionID) } + sshPubKeyClient, err := armcompute.NewSSHPublicKeysClient(subscriptionID, cred, nil) + if err != nil { + return nil, errors.Wrapf(err, "failed to create ssh public keys client,SubscriptionID:%s", + subscriptionID) + } return &AksServiceImpl{ resourcesGroup: resourceGroupName, vmClient: vmClient, + vmSizeClient: vmSizeClient, + vmImageClient: vmimageClient, setClient: setClient, netClient: netClient, poolClient: poolClient, clustersClient: clustersClient, resourceClient: resourceClient, vnetClient: vnetClient, + subnetClient: subnetClient, securityGroupsClient: securityGroupsClient, + sshPubKeyClient: sshPubKeyClient, }, nil } @@ -302,3 +328,68 @@ func (aks *AksServiceImpl) GetClusterMonitorUserCredWithName( } return credentials.Kubeconfigs, nil } + +// ListVMSize 获取VM机型(ListVMSize) +// +// location - 区域名称 +func (aks *AksServiceImpl) ListVMSize(ctx context.Context, location string) ([]*armcompute.VirtualMachineSize, error) { + pager := aks.vmSizeClient.NewListPager(location, nil) + result := make([]*armcompute.VirtualMachineSize, 0) + for pager.More() { + next, err := pager.NextPage(ctx) + if err != nil { + return nil, errors.Wrapf(err, "failed to advance page") + } + result = append(result, next.Value...) + } + + return result, nil +} + +// ListOsImage 获取VM操作系统镜像(ListOsImage) +// +// location - 区域名称 +// +// publisher - OS发行商 +// +// offer - OS提供商. +func (aks *AksServiceImpl) ListOsImage(ctx context.Context, location, publisher, offer string, + options *armcompute.VirtualMachineImagesClientListSKUsOptions) ([]*armcompute.VirtualMachineImageResource, error) { + images, err := aks.vmImageClient.ListSKUs(ctx, location, publisher, offer, options) + if err != nil { + return nil, errors.Wrapf(err, "failed to finish the request") + } + + return images.VirtualMachineImageResourceArray, nil +} + +// ListSSHPublicKeys 获取SSH public keys +func (aks *AksServiceImpl) ListSSHPublicKeys(ctx context.Context, resourceGroupName string) ( + []*armcompute.SSHPublicKeyResource, error) { + pager := aks.sshPubKeyClient.NewListByResourceGroupPager(resourceGroupName, nil) + result := make([]*armcompute.SSHPublicKeyResource, 0) + for pager.More() { + next, err := pager.NextPage(ctx) + if err != nil { + return nil, errors.Wrapf(err, "failed to advance page") + } + result = append(result, next.Value...) + } + + return result, nil +} + +// ListSSHPublicKeysAll 获取订阅下所有SSH public keys +func (aks *AksServiceImpl) ListSSHPublicKeysAll(ctx context.Context) ([]*armcompute.SSHPublicKeyResource, error) { + pager := aks.sshPubKeyClient.NewListBySubscriptionPager(nil) + result := make([]*armcompute.SSHPublicKeyResource, 0) + for pager.More() { + next, err := pager.NextPage(ctx) + if err != nil { + return nil, errors.Wrapf(err, "failed to advance page") + } + result = append(result, next.Value...) + } + + return result, nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/authorizer.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/authorizer.go index e9ef268e8d..c2b01c4b97 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/authorizer.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/authorizer.go @@ -14,26 +14,9 @@ package api import ( "github.com/Azure/azure-sdk-for-go/sdk/azidentity" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/adal" - "github.com/Azure/go-autorest/autorest/azure" "github.com/pkg/errors" ) -// getAuthorizer get azure authorizer -func getAuthorizer(tenantID, clientID, clientSecret string) (autorest.Authorizer, error) { - oauthConfig, err := adal.NewOAuthConfig(azure.PublicCloud.ActiveDirectoryEndpoint, tenantID) - if err != nil { - return nil, err - } - spToken, err := adal.NewServicePrincipalToken(*oauthConfig, clientID, clientSecret, - azure.PublicCloud.ResourceManagerEndpoint) - if err != nil { - return nil, err - } - return autorest.NewBearerAuthorizer(spToken), nil -} - // getClientCredential crate azure SDK authorizer func getClientCredential(tenantID, clientID, clientSecret string) (*azidentity.ClientSecretCredential, error) { credential, err := azidentity.NewClientSecretCredential(tenantID, clientID, clientSecret, diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/convert.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/convert.go index b04895dd72..f269a27a0f 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/convert.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/convert.go @@ -14,6 +14,8 @@ package api import ( "context" + "encoding/json" + "fmt" "time" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute" @@ -22,6 +24,7 @@ import ( proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/common" ) /* @@ -58,6 +61,16 @@ func (aks *AksServiceImpl) toPoolPreCheck(group *proto.NodeGroup, pool *armconta if group.NodeTemplate == nil { return cloudprovider.ErrNodeGroupNodeTemplateLost } + + // kubelet配置 + if kubeletConfStr, ok := group.NodeTemplate.ExtraArgs[common.Kubelet]; ok { + kubeletConf := &armcontainerservice.KubeletConfig{} + err := json.Unmarshal([]byte(kubeletConfStr), kubeletConf) + if err != nil { + return fmt.Errorf("get nodeGroup[%s] kubelet config failed, %v", group.NodeGroupID, err) + } + } + // 机型检查 ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second) defer cancel() diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/interface.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/interface.go index 7b10389251..30b5fca891 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/interface.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/interface.go @@ -359,6 +359,25 @@ type SetInstanceService interface { // CheckInstanceType 检查机型是否存在 CheckInstanceType(ctx context.Context, location, instanceType string) (bool, error) + + // ListVMSize 获取VM机型(ListVMSize) + // + // location - 区域名称 + ListVMSize(ctx context.Context, location string) ([]*armcompute.VirtualMachineSize, error) + + // ListOsImage 获取VM操作系统镜像(ListOsImage) + // + // location - 区域名称 + // + // publisher - OS发行商 + // + // offer - OS提供商. + ListOsImage(ctx context.Context, location, publisher, offer string, + options *armcompute.VirtualMachineImagesClientListSKUsOptions) ( + []*armcompute.VirtualMachineImageResource, error) + + // ListSSHPublicKeys 获取SSH public keys + ListSSHPublicKeys(ctx context.Context, resourceGroupName string) ([]*armcompute.SSHPublicKeyResource, error) } // NetworkInterfaceService 网络接口(Network Interface) @@ -388,6 +407,22 @@ type NetworkInterfaceService interface { // nodeResourceGroup - 基础结构资源组(AutoScalingGroup.autoScalingName/Cluster.ExtraInfo["nodeResourceGroup"]). ListVirtualNetwork(ctx context.Context, nodeResourceGroup string) ([]*armnetwork.VirtualNetwork, error) + // ListSubnets 虚拟子网列表 + // + // nodeResourceGroup - 基础结构资源组(AutoScalingGroup.autoScalingName/Cluster.ExtraInfo["nodeResourceGroup"]). + ListSubnets(ctx context.Context, nodeResourceGroup, vpcName string) ([]*armnetwork.Subnet, error) + + // GetSubnet 虚拟子网 + // + // nodeResourceGroup - 基础结构资源组(AutoScalingGroup.autoScalingName/Cluster.ExtraInfo["nodeResourceGroup"]). + GetSubnet(ctx context.Context, nodeResourceGroup, vpcName, subnetName string) (*armnetwork.Subnet, error) + + // UpdateSubnet 创建或更新虚拟子网 + // + // nodeResourceGroup - 基础结构资源组(AutoScalingGroup.autoScalingName/Cluster.ExtraInfo["nodeResourceGroup"]). + UpdateSubnet(ctx context.Context, nodeResourceGroup, vpcName, subnetName string, + subnet armnetwork.Subnet) (*armnetwork.Subnet, error) + // GetNetworkSecurityGroups 查询安全组 // // nodeResourceGroup - 基础结构资源组(AutoScalingGroup.autoScalingName/Cluster.ExtraInfo["nodeResourceGroup"]). @@ -396,6 +431,7 @@ type NetworkInterfaceService interface { GetNetworkSecurityGroups(ctx context.Context, nodeResourceGroup, networkSecurityGroupName string) ( *armnetwork.SecurityGroup, error) + ListNetworkSecurityGroups(ctx context.Context, nodeResourceGroup string) ([]*armnetwork.SecurityGroup, error) // ListSetInterfaceAndReturn 查询set中vm的网卡 // // nodeResourceGroup - 基础结构资源组(AutoScalingGroup.autoScalingName/Cluster.ExtraInfo["nodeResourceGroup"]). diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/nic.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/nic.go index 097d91270d..da5a9e2b3c 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/nic.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/nic.go @@ -14,6 +14,7 @@ package api import ( "context" + "fmt" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork" "github.com/pkg/errors" @@ -73,6 +74,60 @@ func (aks *AksServiceImpl) ListVirtualNetwork(ctx context.Context, nodeResourceG return resp, nil } +// ListSubnets 虚拟子网列表 +// +// nodeResourceGroup - 基础结构资源组(AutoScalingGroup.autoScalingName/Cluster.ExtraInfo["nodeResourceGroup"]). +func (aks *AksServiceImpl) ListSubnets(ctx context.Context, nodeResourceGroup, vpcName string) ( + []*armnetwork.Subnet, error) { + if nodeResourceGroup == "" || vpcName == "" { + return nil, fmt.Errorf("nodeResourceGroup or vpcName cannot be empty") + } + resp := make([]*armnetwork.Subnet, 0) + page := aks.subnetClient.NewListPager(nodeResourceGroup, vpcName, nil) + for page.More() { + nextPage, err := page.NextPage(ctx) + if err != nil { + return nil, errors.Wrapf(err, "failed to finish the request") + } + resp = append(resp, nextPage.Value...) + } + return resp, nil +} + +// GetSubnet 虚拟子网 +// +// nodeResourceGroup - 基础结构资源组(AutoScalingGroup.autoScalingName/Cluster.ExtraInfo["nodeResourceGroup"]). +func (aks *AksServiceImpl) GetSubnet(ctx context.Context, nodeResourceGroup, vpcName, subnetName string) ( + *armnetwork.Subnet, error) { + if nodeResourceGroup == "" || vpcName == "" || subnetName == "" { + return nil, fmt.Errorf("nodeResourceGroup or vpcName or subnetName cannot be empty") + } + resp, err := aks.subnetClient.Get(ctx, nodeResourceGroup, vpcName, subnetName, nil) + if err != nil { + return nil, errors.Wrapf(err, "failed to finish the request") + } + return &resp.Subnet, nil +} + +// UpdateSubnet 创建或更新虚拟子网 +// +// nodeResourceGroup - 基础结构资源组(AutoScalingGroup.autoScalingName/Cluster.ExtraInfo["nodeResourceGroup"]). +func (aks *AksServiceImpl) UpdateSubnet(ctx context.Context, nodeResourceGroup, vpcName, subnetName string, + subnet armnetwork.Subnet) (*armnetwork.Subnet, error) { + if nodeResourceGroup == "" || vpcName == "" || subnetName == "" { + return nil, fmt.Errorf("nodeResourceGroup or vpcName or subnetName cannot be empty") + } + poller, err := aks.subnetClient.BeginCreateOrUpdate(ctx, nodeResourceGroup, vpcName, subnetName, subnet, nil) + if err != nil { + return nil, errors.Wrapf(err, "failed to finish the request") + } + resp, err := poller.PollUntilDone(ctx, pollFrequency1) + if err != nil { + return nil, errors.Wrapf(err, "failed to pull the result") + } + return &resp.Subnet, nil +} + // GetNetworkSecurityGroups 查询安全组 // // nodeResourceGroup - 基础结构资源组(AutoScalingGroup.autoScalingName/Cluster.ExtraInfo["nodeResourceGroup"]). @@ -87,6 +142,40 @@ func (aks *AksServiceImpl) GetNetworkSecurityGroups(ctx context.Context, nodeRes return &resp.SecurityGroup, nil } +// ListNetworkSecurityGroups 安全组列表 +// +// nodeResourceGroup - 基础结构资源组(AutoScalingGroup.autoScalingName/Cluster.ExtraInfo["nodeResourceGroup"]). +func (aks *AksServiceImpl) ListNetworkSecurityGroups(ctx context.Context, nodeResourceGroup string) ( + []*armnetwork.SecurityGroup, error) { + pager := aks.securityGroupsClient.NewListPager(nodeResourceGroup, nil) + result := make([]*armnetwork.SecurityGroup, 0) + for pager.More() { + next, err := pager.NextPage(ctx) + if err != nil { + return nil, errors.Wrapf(err, "failed to advance page") + } + result = append(result, next.Value...) + } + + return result, nil +} + +// ListNetworkSecurityGroupsAll 全量安全组列表 +func (aks *AksServiceImpl) ListNetworkSecurityGroupsAll(ctx context.Context) ( + []*armnetwork.SecurityGroup, error) { + pager := aks.securityGroupsClient.NewListAllPager(nil) + result := make([]*armnetwork.SecurityGroup, 0) + for pager.More() { + next, err := pager.NextPage(ctx) + if err != nil { + return nil, errors.Wrapf(err, "failed to advance page") + } + result = append(result, next.Value...) + } + + return result, nil +} + // ListSetInterfaceAndReturn 查询set中vm的网卡 // // nodeResourceGroup - 基础结构资源组(AutoScalingGroup.autoScalingName/Cluster.ExtraInfo["nodeResourceGroup"]). diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/resource_group.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/resource_group.go new file mode 100644 index 0000000000..bf38dd89e1 --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/resource_group.go @@ -0,0 +1,85 @@ +/* + * 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 api + +import ( + "context" + "fmt" + + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources" + "github.com/pkg/errors" + + proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" +) + +// ResourceGroupsClient defines the interface for azure subscription client +type ResourceGroupsClient struct { + subscriptionID string + groupClient *armresources.ResourceGroupsClient +} + +// NewResourceGroupsClient create azure api resource group client +func NewResourceGroupsClient(opt *cloudprovider.CommonOption) (*ResourceGroupsClient, error) { + if opt == nil || opt.Account == nil { + return nil, cloudprovider.ErrCloudCredentialLost + } + if len(opt.Account.SubscriptionID) == 0 || len(opt.Account.TenantID) == 0 || + len(opt.Account.ClientID) == 0 || len(opt.Account.ClientSecret) == 0 { + return nil, cloudprovider.ErrCloudCredentialLost + } + + // get Authorizer + cred, err := getClientCredential(opt.Account.TenantID, opt.Account.ClientID, opt.Account.ClientSecret) + if err != nil { + return nil, fmt.Errorf("get authorizer error: %v", err) + } + clientFactory, err := armresources.NewClientFactory(opt.Account.SubscriptionID, cred, nil) + if err != nil { + return nil, fmt.Errorf("create client factory error: %v", err) + } + + return &ResourceGroupsClient{ + subscriptionID: opt.Account.SubscriptionID, + groupClient: clientFactory.NewResourceGroupsClient(), + }, nil +} + +// ListResourceGroups get azure resource groups list +func (group *ResourceGroupsClient) ListResourceGroups(ctx context.Context) ([]*proto.ResourceGroupInfo, error) { + pager := group.groupClient.NewListPager(nil) + result := make([]*armresources.ResourceGroup, 0) + for pager.More() { + next, err := pager.NextPage(ctx) + if err != nil { + return nil, errors.Wrapf(err, "failed to list locations") + } + result = append(result, next.Value...) + } + + groupsInfo := make([]*proto.ResourceGroupInfo, 0) + for _, g := range result { + groupsInfo = append(groupsInfo, &proto.ResourceGroupInfo{ + Name: *g.Name, + Region: *g.Location, + ProvisioningState: func() string { + if g.Properties != nil && g.Properties.ProvisioningState != nil { + return *g.Properties.ProvisioningState + } + return "" + }(), + }) + } + + return groupsInfo, nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/sub.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/sub.go index 530ddb953c..ff911f5a0f 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/sub.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/sub.go @@ -16,7 +16,8 @@ import ( "context" "fmt" - "github.com/Azure/azure-sdk-for-go/services/subscription/mgmt/2020-09-01/subscription" // nolint + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions" + "github.com/pkg/errors" proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" @@ -26,7 +27,7 @@ import ( type SubClient struct { resourceGroupName string subscriptionID string - subClient subscription.SubscriptionsClient + subClient *armsubscriptions.Client } // NewAMClient create azure api management client @@ -35,45 +36,75 @@ func NewAMClient(opt *cloudprovider.CommonOption) (*SubClient, error) { return nil, cloudprovider.ErrCloudCredentialLost } if len(opt.Account.SubscriptionID) == 0 || len(opt.Account.TenantID) == 0 || - len(opt.Account.ClientID) == 0 || len(opt.Account.ClientSecret) == 0 || len(opt.Account.ResourceGroupName) == 0 { + len(opt.Account.ClientID) == 0 || len(opt.Account.ClientSecret) == 0 { return nil, cloudprovider.ErrCloudCredentialLost } // get Authorizer - authorizer, err := getAuthorizer(opt.Account.TenantID, opt.Account.ClientID, opt.Account.ClientSecret) + cred, err := getClientCredential(opt.Account.TenantID, opt.Account.ClientID, opt.Account.ClientSecret) if err != nil { return nil, fmt.Errorf("get authorizer error: %v", err) } + clientFactory, err := armsubscriptions.NewClientFactory(cred, nil) + if err != nil { + return nil, fmt.Errorf("create client factory error: %v", err) + } - // new subscriptions client - subClient := subscription.NewSubscriptionsClient() - subClient.Authorizer = authorizer return &SubClient{ resourceGroupName: opt.Account.ResourceGroupName, subscriptionID: opt.Account.SubscriptionID, - subClient: subClient, + subClient: clientFactory.NewClient(), }, nil } // ListLocations list locations func (sub *SubClient) ListLocations(ctx context.Context) ([]*proto.RegionInfo, error) { - locations, err := sub.subClient.ListLocations(ctx, sub.subscriptionID) - if err != nil { - return nil, fmt.Errorf("list locations error: %v", err) - } - - if locations.Value == nil { - return nil, nil + pager := sub.subClient.NewListLocationsPager(sub.subscriptionID, nil) + result := make([]*armsubscriptions.Location, 0) + for pager.More() { + next, err := pager.NextPage(ctx) + if err != nil { + return nil, errors.Wrapf(err, "failed to list locations") + } + result = append(result, next.Value...) } - result := make([]*proto.RegionInfo, 0) - for _, v := range *locations.Value { + regions := make([]*proto.RegionInfo, 0) + for _, v := range result { if v.Name != nil && v.DisplayName != nil { - result = append(result, &proto.RegionInfo{ + regions = append(regions, &proto.RegionInfo{ Region: *v.Name, RegionName: *v.DisplayName, }) } } - return result, nil + return regions, nil +} + +// ListAvailabilityZones list availability zones +func (sub *SubClient) ListAvailabilityZones(ctx context.Context, location string) ([]*proto.ZoneInfo, error) { + pager := sub.subClient.NewListLocationsPager(sub.subscriptionID, nil) + result := make([]*armsubscriptions.Location, 0) + for pager.More() { + next, err := pager.NextPage(ctx) + if err != nil { + return nil, errors.Wrapf(err, "failed to list zones") + } + result = append(result, next.Value...) + } + + zones := make([]*proto.ZoneInfo, 0) + for _, v := range result { + if *v.Name == location { + for _, z := range v.AvailabilityZoneMappings { + zones = append(zones, &proto.ZoneInfo{ + Zone: *z.LogicalZone, + ZoneName: *z.PhysicalZone, + }) + } + break + } + } + + return zones, nil } diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/types.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/types.go index 3dee393871..9510499246 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/types.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/types.go @@ -67,3 +67,12 @@ const ( NodeResourceGroup = "nodeResourceGroup" aksManagedPoolName = "aks-managed-poolName" ) + +// ImagePublishers for OS image publishers info +var ImagePublishers = map[string]string{ + "Canonical": "UbuntuServer", + "OpenLogic": "CentOS", + "RedHat": "RHEL", + "credativ": "Debian", + "SUSE": "SLES", +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/utils.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/utils.go index d4cc9fb809..0b06297c40 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/utils.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api/utils.go @@ -13,6 +13,8 @@ package api import ( + "context" + "encoding/base64" "fmt" "net" "regexp" @@ -23,6 +25,7 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork" + "github.com/Tencent/bk-bcs/bcs-common/common/blog" proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud/api" @@ -56,18 +59,24 @@ func (c *nodeGroupToPool) convert() { // 设置机型 properties.VMSize = to.Ptr(c.group.LaunchTemplate.InstanceType) // 当前节点池为手动扩缩容模式,不可以指定最大、最小节点数!!! - //// 设置最大节点数 - // b.pool.MaxCount = to.Ptr(int32(ng.AutoScaling.MaxSize)) - //// 设置最小节点数 - // b.pool.MinCount = to.Ptr(int32(ng.AutoScaling.MinSize)) + // 设置最大节点数 + // properties.MaxCount = to.Ptr(int32(c.group.AutoScaling.MaxSize)) + // 设置最小节点数 + // properties.MinCount = to.Ptr(int32(c.group.AutoScaling.MinSize)) // 设置节点池大小 properties.Count = to.Ptr(int32(c.group.AutoScaling.DesiredSize)) // 设置节点池为用户模式 properties.Mode = to.Ptr(armcontainerservice.AgentPoolModeUser) // 设置Azure节点池的弹性伸缩 properties.EnableAutoScaling = to.Ptr(false) + // 是否分配公网IP + if c.group.LaunchTemplate.InternetAccess != nil { + properties.EnableNodePublicIP = to.Ptr(c.group.LaunchTemplate.InternetAccess.PublicIPAssigned) + + } // 以下为可选参数 + // 设置tags c.setTags() // 设置labels @@ -76,8 +85,8 @@ func (c *nodeGroupToPool) convert() { c.setTaints() // 设置每一个节点的最大pod数量 c.setMaxPods() - // 设置操作系统类型 - c.setOSType() + // 设置系统和机型 + c.setOSAndInstanceType() // 设置节点系统盘类型 c.setOSDiskType() // 设置节点系统盘大小 @@ -114,23 +123,23 @@ func (c *nodeGroupToPool) setScalingMode() { // setOSDiskType 设置系统盘类型 func (c *nodeGroupToPool) setOSDiskType() { - //// 默认 使用托管类型(Managed) - // c.pool.Properties.OSDiskType = to.Ptr(armcontainerservice.OSDiskTypeManaged) - // lc := c.group.LaunchTemplate - // if lc.SystemDisk == nil || len(lc.SystemDisk.DiskType) == 0 { - // return - // } - // found := false - // for _, osDiskType := range armcontainerservice.PossibleOSDiskTypeValues() { - // if string(osDiskType) == lc.SystemDisk.DiskType { - // found = true - // break - // } - // } - // if !found { - // return - // } - // c.pool.Properties.OSDiskType = to.Ptr(armcontainerservice.OSDiskType(lc.SystemDisk.DiskType)) + // 默认 使用托管类型(Managed) + c.pool.Properties.OSDiskType = to.Ptr(armcontainerservice.OSDiskTypeManaged) + lc := c.group.LaunchTemplate + if lc.SystemDisk == nil || len(lc.SystemDisk.DiskType) == 0 { + return + } + found := false + for _, osDiskType := range armcontainerservice.PossibleOSDiskTypeValues() { + if string(osDiskType) == lc.SystemDisk.DiskType { + found = true + break + } + } + if !found { + return + } + c.pool.Properties.OSDiskType = to.Ptr(armcontainerservice.OSDiskType(lc.SystemDisk.DiskType)) } // setOSDiskSizeGB 设置系统盘大小 @@ -141,26 +150,34 @@ func (c *nodeGroupToPool) setOSDiskSizeGB() { // 16至63核 - 512G // 64+核 - 1024G // Azure节点系统盘 默认为128GB - // sysDisk := c.group.LaunchTemplate.SystemDisk - // if sysDisk == nil || len(sysDisk.DiskSize) == 0 { - // return - // } - //// 自定义节点系统盘 大小 - // size, err := strconv.ParseInt(sysDisk.DiskSize, 10, 32) - // if err != nil { - // return - // } - // c.pool.Properties.OSDiskSizeGB = to.Ptr(int32(size)) + sysDisk := c.group.LaunchTemplate.SystemDisk + if sysDisk == nil || len(sysDisk.DiskSize) == 0 { + return + } + // 自定义节点系统盘 大小 + size, err := strconv.ParseInt(sysDisk.DiskSize, 10, 32) + if err != nil { + return + } + c.pool.Properties.OSDiskSizeGB = to.Ptr(int32(size)) } -// setOSType 设置系统类型 -func (c *nodeGroupToPool) setOSType() { +// setOSAndInstanceType 设置系统和机型 +func (c *nodeGroupToPool) setOSAndInstanceType() { nodeOS := c.group.NodeOS - // 默认为linux + // 默认系统类型为linux c.pool.Properties.OSType = to.Ptr(armcontainerservice.OSTypeLinux) if strings.Contains(nodeOS, winTypeOS) { c.pool.Properties.OSType = to.Ptr(armcontainerservice.OSTypeWindows) } + // 默认OS为Ubuntu + c.pool.Properties.OSSKU = to.Ptr(armcontainerservice.OSSKUUbuntu) + if c.group.LaunchTemplate != nil && c.group.LaunchTemplate.ImageInfo != nil { + c.pool.Properties.OSSKU = to.Ptr(armcontainerservice.OSSKU(c.group.LaunchTemplate.ImageInfo.ImageName)) + } + if c.group.LaunchTemplate != nil { + c.pool.Properties.VMSize = to.Ptr(c.group.LaunchTemplate.InstanceType) + } } // setOrchestratorVersion 设置k8s版本 @@ -177,16 +194,11 @@ func (c *nodeGroupToPool) setOrchestratorVersion() { // nolint // setMaxPods 设置每一个节点的最大pod数量 func (c *nodeGroupToPool) setMaxPods() { - extra := c.group.NodeTemplate.ExtraArgs - if extra == nil { - // Azure默认 maxPods=110(个) - return - } // 根据解析参数获得 - c.pool.Properties.MaxPods = to.Ptr(c.getMaxPods(extra)) + c.pool.Properties.MaxPods = to.Ptr(int32(c.group.NodeTemplate.MaxPodsPerNode)) // 默认为250个 if *c.pool.Properties.MaxPods == 0 { - c.pool.Properties.MaxPods = to.Ptr[int32](250) + c.pool.Properties.MaxPods = to.Ptr(int32(250)) } } @@ -554,28 +566,16 @@ func (c *setToNodeGroup) convert() { c.setAutoScalingID() // 设置asg name c.setAutoScalingName() - // 设置VpcID - c.setVpcID() - // 设置subnet id - c.setSubnetIDs() // 系统盘 c.setSystemDisk() // 数据盘 c.setDataDisks() - // 用户数据 - c.setUserData() // 设置可用性区域 c.setZones() // 设置用户名 c.setUsername() } -// setSubnetIDs 设置subnet id(子网id) -func (c *setToNodeGroup) setSubnetIDs() { - asg := c.group.AutoScaling - asg.SubnetIDs = ParseSetReturnSubnetIDs(c.set) -} - // setLaunchConfigureName 设置lc name func (c *setToNodeGroup) setLaunchConfigureName() { // nolint // lc := c.group.LaunchTemplate @@ -603,7 +603,7 @@ func (c *setToNodeGroup) setAutoScalingID() { // setAutoScalingName 设置asg name func (c *setToNodeGroup) setAutoScalingName() { asg := c.group.AutoScaling - asg.AutoScalingName = regexpSetNodeGroupResourcesName(c.set) + asg.AutoScalingName = RegexpSetNodeGroupResourcesName(c.set) } // setZones 设置可用性区域 @@ -626,15 +626,6 @@ func (c *setToNodeGroup) setRegion() { } } -// 设置VpcID -func (c *setToNodeGroup) setVpcID() { - asg := c.group.AutoScaling - vpcIDs := ParseSetReturnSubnetNames(c.set) - if len(vpcIDs) >= 1 { - asg.VpcID = vpcIDs[0] - } -} - // setSystemDisk 系统盘 func (c *setToNodeGroup) setSystemDisk() { lc := c.group.LaunchTemplate @@ -684,16 +675,6 @@ func (c *setToNodeGroup) setDataDisks() { } } -// setUserData 用户数据 -func (c *setToNodeGroup) setUserData() { - lc := c.group.LaunchTemplate - // VirtualMachineScaleSet.properties.virtualMachineProfile.userData(用户数据) - userData := c.set.Properties.VirtualMachineProfile.UserData - if userData != nil && len(*userData) != 0 { - lc.UserData = *userData - } -} - // setUsername 设置用户名 func (c *setToNodeGroup) setUsername() { if c.set.Properties == nil || c.set.Properties.VirtualMachineProfile == nil || @@ -946,6 +927,59 @@ func (c *nodeToVm) setLocation() { } } +// SetVmSetNetWork 设置虚拟规模集网络 +func SetVmSetNetWork(ctx context.Context, client AksService, group *proto.NodeGroup, + set *armcompute.VirtualMachineScaleSet) error { + vpcID := group.AutoScaling.VpcID + subnets := group.AutoScaling.SubnetIDs + if len(vpcID) == 0 || len(subnets) == 0 { + return fmt.Errorf("SetVmSetNetWork vpcID or subnetID can not be empty") + } + + defaultVpcIDs := ParseSetReturnSubnetNames(set) + defaultSubnets := ParseSetReturnSubnetIDs(set) + ipConfigs := set.Properties.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations[0].Properties. + IPConfigurations + + if len(defaultVpcIDs) == 0 || len(defaultSubnets) == 0 || len(ipConfigs) == 0 { + return fmt.Errorf("SetVmSetNetWork vpcID, subnetID or ipConfigs for scaleset %s is empty", *set.Name) + } + + defaultSubnetID := ipConfigs[0].Properties.Subnet.ID + newSubnetID := to.Ptr(strings.ReplaceAll( + strings.ReplaceAll(*defaultSubnetID, defaultVpcIDs[0], vpcID), defaultSubnets[0], subnets[0])) + + // 设置子网 + for k := range ipConfigs { + ipConfigs[k].Properties.Subnet.ID = newSubnetID + } + + if len(group.LaunchTemplate.SecurityGroupIDs) == 0 { + return fmt.Errorf("SetVmSetNetWork security group can not be empty") + } + + subnetDetail, err := client.GetSubnet(ctx, group.AutoScaling.AutoScalingName, vpcID, subnets[0]) + if err != nil { + blog.Errorf("SetVmSetNetWork GetSubnet %s failed, %v", subnets[0], err) + return err + } + + // 设置网络安全组 + idx := strings.LastIndex(*subnetDetail.Properties.NetworkSecurityGroup.ID, "/") + oldSg := (*subnetDetail.Properties.NetworkSecurityGroup.ID)[idx+1:] + newSgID := strings.ReplaceAll(*subnetDetail.Properties.NetworkSecurityGroup.ID, + oldSg, group.LaunchTemplate.SecurityGroupIDs[0]) + subnetDetail.Properties.NetworkSecurityGroup.ID = to.Ptr(newSgID) + + _, err = client.UpdateSubnet(ctx, group.AutoScaling.AutoScalingName, vpcID, subnets[0], *subnetDetail) + if err != nil { + blog.Errorf("SetVmSetNetWork UpdateSubnet security group failed, %v", err) + return err + } + + return nil +} + // SetVmSetPasswd 创建节点池时,调用本方法,用于设置虚拟规模集的密码 func SetVmSetPasswd(group *proto.NodeGroup, set *armcompute.VirtualMachineScaleSet) { if group == nil || set == nil || group.LaunchTemplate == nil { @@ -972,6 +1006,87 @@ func SetVmSetPasswd(group *proto.NodeGroup, set *armcompute.VirtualMachineScaleS set.Properties.VirtualMachineProfile.OSProfile.LinuxConfiguration.DisablePasswordAuthentication = to.Ptr(false) } +// SetVmSetSSHPublicKey 创建节点池时,调用本方法,用于设置虚拟规模集SSH免密登录公钥 +func SetVmSetSSHPublicKey(group *proto.NodeGroup, set *armcompute.VirtualMachineScaleSet) { + if group == nil || set == nil || group.LaunchTemplate == nil { + return + } + lc := group.LaunchTemplate + if lc == nil || lc.KeyPair == nil || len(lc.KeyPair.KeyPublic) == 0 { + return + } + if set.Properties == nil { + set.Properties = new(armcompute.VirtualMachineScaleSetProperties) + } + if set.Properties.VirtualMachineProfile == nil { + set.Properties.VirtualMachineProfile = new(armcompute.VirtualMachineScaleSetVMProfile) + } + if set.Properties.VirtualMachineProfile.OSProfile == nil { + set.Properties.VirtualMachineProfile.OSProfile = new(armcompute.VirtualMachineScaleSetOSProfile) + } + osProfile := set.Properties.VirtualMachineProfile.OSProfile + adminName := osProfile.AdminUsername + if osProfile.LinuxConfiguration == nil { + osProfile.LinuxConfiguration = new(armcompute.LinuxConfiguration) + } + if osProfile.LinuxConfiguration.SSH == nil { + osProfile.LinuxConfiguration.SSH = new(armcompute.SSHConfiguration) + } + osProfile.LinuxConfiguration.SSH.PublicKeys = make([]*armcompute.SSHPublicKey, 0) + // 设置SSH免密登录公钥 + dePublicKey, _ := base64.StdEncoding.DecodeString(lc.KeyPair.KeyPublic) + osProfile.LinuxConfiguration.SSH.PublicKeys = append(osProfile.LinuxConfiguration.SSH.PublicKeys, + &armcompute.SSHPublicKey{ + KeyData: to.Ptr(string(dePublicKey)), + Path: to.Ptr(fmt.Sprintf("/home/%s/.ssh/authorized_keys", *adminName)), + }) +} + +// SetVmSetCustomScript 创建节点池时,调用本方法,用于设置虚拟规模集用户脚本 +func SetVmSetCustomScript(group *proto.NodeGroup, set *armcompute.VirtualMachineScaleSet) { + + if set.Properties == nil { + set.Properties = new(armcompute.VirtualMachineScaleSetProperties) + } + if set.Properties.VirtualMachineProfile == nil { + set.Properties.VirtualMachineProfile = new(armcompute.VirtualMachineScaleSetVMProfile) + } + if set.Properties.VirtualMachineProfile.ExtensionProfile == nil { + set.Properties.VirtualMachineProfile.ExtensionProfile = new(armcompute.VirtualMachineScaleSetExtensionProfile) + } + if set.Properties.VirtualMachineProfile.ExtensionProfile.Extensions == nil { + set.Properties.VirtualMachineProfile.ExtensionProfile.Extensions = + make([]*armcompute.VirtualMachineScaleSetExtension, 0) + } + + exist := false + for _, e := range set.Properties.VirtualMachineProfile.ExtensionProfile.Extensions { + if *e.Properties.Type == "CustomScript" { + e.Properties.Settings = map[string]interface{}{ + "script": group.NodeTemplate.PreStartUserScript, + } + exist = true + break + } + } + if !exist { + set.Properties.VirtualMachineProfile.ExtensionProfile.Extensions = + append(set.Properties.VirtualMachineProfile.ExtensionProfile.Extensions, + &armcompute.VirtualMachineScaleSetExtension{ + Name: to.Ptr("vmssCSEBCS"), + Properties: &armcompute.VirtualMachineScaleSetExtensionProperties{ + AutoUpgradeMinorVersion: to.Ptr(true), + Publisher: to.Ptr("Microsoft.Azure.Extensions"), + Settings: map[string]interface{}{ + "script": group.NodeTemplate.PreStartUserScript, + }, + Type: to.Ptr("CustomScript"), + TypeHandlerVersion: to.Ptr("2.0"), + }, + }) + } +} + // BuySystemDisk 购买系统盘 func BuySystemDisk(group *proto.NodeGroup, set *armcompute.VirtualMachineScaleSet) { lc := group.LaunchTemplate @@ -1060,7 +1175,7 @@ func setUltraSSD(set *armcompute.VirtualMachineScaleSet) { // ParseSetReturnNgResourcesName 解析 VMSSs 资源名称(ParseSetReturnNodeGroupResourcesName) func ParseSetReturnNgResourcesName(set *armcompute.VirtualMachineScaleSet) string { - return regexpSetNodeGroupResourcesName(set) + return RegexpSetNodeGroupResourcesName(set) } // ParseSetReturnSubnetNames 解析 VMSSs subnet name(私有网络名称) @@ -1099,8 +1214,8 @@ func checkInterfaceConfigNameEmpty(vm *armcompute.VirtualMachineScaleSetVM) (str return *interfaceConfig[0].Name, true } -// regexpSetNodeGroupResourcesName 通过正则解析 VMSSs resources name -func regexpSetNodeGroupResourcesName(set *armcompute.VirtualMachineScaleSet) string { +// RegexpSetNodeGroupResourcesName 通过正则解析 VMSSs resources name +func RegexpSetNodeGroupResourcesName(set *armcompute.VirtualMachineScaleSet) string { if set == nil || set.Identity == nil { return "" } @@ -1336,6 +1451,17 @@ func VmIDToNodeID(vm *armcompute.VirtualMachineScaleSetVM) string { return fmt.Sprintf("%s/%s/%s", *vm.Name, *vm.InstanceID, nodeGroupResource) } +// SetUserData 设置用户数据 +func SetUserData(group *proto.NodeGroup, set *armcompute.VirtualMachineScaleSet) { + if group.LaunchTemplate == nil || len(group.LaunchTemplate.UserData) == 0 { + return + } + if set == nil || set.Properties == nil || set.Properties.VirtualMachineProfile == nil { + return + } + set.Properties.VirtualMachineProfile.UserData = to.Ptr(group.LaunchTemplate.UserData) +} + // SetImageReferenceNull 镜像引用-暂时置空处理,若不置空会导致无法更新set func SetImageReferenceNull(set *armcompute.VirtualMachineScaleSet) { if set == nil || set.Properties == nil || set.Properties.VirtualMachineProfile == nil { diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/cloud.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/cloud.go index 07d5a88845..67076e94bc 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/cloud.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/cloud.go @@ -61,11 +61,11 @@ func (c *CloudInfoManager) SyncClusterCloudInfo(cls *proto.Cluster, } cls.SystemID = *cluster.Name // cluster cloud basic setting - clusterBasicSettingByQCloud(cls, cluster) + clusterBasicSettingByAzure(cls, cluster) // cluster cloud network setting - err = clusterNetworkSettingByQCloud(cls, cluster) + err = clusterNetworkSettingByAzure(cls, cluster) if err != nil { - blog.Errorf("SyncClusterCloudInfo clusterNetworkSettingByQCloud failed: %v", err) + blog.Errorf("SyncClusterCloudInfo clusterNetworkSettingByAzure failed: %v", err) } return nil @@ -94,7 +94,7 @@ func getCloudCluster(opt *cloudprovider.SyncClusterCloudInfoOption) (*armcontain return mc, nil } -func clusterBasicSettingByQCloud(cls *proto.Cluster, cluster *armcontainerservice.ManagedCluster) { +func clusterBasicSettingByAzure(cls *proto.Cluster, cluster *armcontainerservice.ManagedCluster) { clusterOs := "" if len(cluster.Properties.AgentPoolProfiles) > 0 { p := cluster.Properties.AgentPoolProfiles @@ -107,16 +107,20 @@ func clusterBasicSettingByQCloud(cls *proto.Cluster, cluster *armcontainerservic } } -func clusterNetworkSettingByQCloud(cls *proto.Cluster, cluster *armcontainerservice.ManagedCluster) error { // nolint +func clusterNetworkSettingByAzure(cls *proto.Cluster, cluster *armcontainerservice.ManagedCluster) error { // nolint cidrs := cluster.Properties.NetworkProfile.PodCidrs podCidrs := make([]string, len(cidrs)) for i := range cidrs { podCidrs[i] = *cidrs[i] } cls.NetworkSettings = &proto.NetworkSetting{ - ClusterIPv4CIDR: *cluster.Properties.NetworkProfile.PodCidr, ServiceIPv4CIDR: *cluster.Properties.NetworkProfile.ServiceCidr, MultiClusterCIDR: podCidrs, } + // 有时cluster不会返回pod cidr + if cluster.Properties.NetworkProfile.PodCidr != nil { + cls.NetworkSettings.ClusterIPv4CIDR = *cluster.Properties.NetworkProfile.PodCidr + } + return nil } diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/cluster.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/cluster.go index eee260bd2c..623dfe1429 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/cluster.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/cluster.go @@ -23,6 +23,7 @@ import ( proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/utils" ) var clusterMgr sync.Once @@ -84,7 +85,7 @@ func (c *Cluster) DeleteCluster(cls *proto.Cluster, opt *cloudprovider.DeleteClu // GetCluster get kubenretes cluster detail information according cloudprovider func (c *Cluster) GetCluster(cloudID string, opt *cloudprovider.GetClusterOption) (*proto.Cluster, error) { - return nil, cloudprovider.ErrCloudNotImplemented + return opt.Cluster, nil } // ListCluster get cloud cluster list by region @@ -137,7 +138,7 @@ func (c *Cluster) DeleteNodesFromCluster( // CheckClusterCidrAvailable check cluster CIDR nodesNum when add nodes func (c *Cluster) CheckClusterCidrAvailable( cls *proto.Cluster, opt *cloudprovider.CheckClusterCIDROption) (bool, error) { - return false, cloudprovider.ErrCloudNotImplemented + return true, nil } // EnableExternalNodeSupport enable cluster support external node @@ -147,7 +148,17 @@ func (c *Cluster) EnableExternalNodeSupport(cls *proto.Cluster, opt *cloudprovid // ListOsImage list image os func (c *Cluster) ListOsImage(provider string, opt *cloudprovider.CommonOption) ([]*proto.OsImage, error) { - return nil, cloudprovider.ErrCloudNotImplemented + if opt == nil || opt.Account == nil { + return nil, cloudprovider.ErrCloudCredentialLost + } + account := opt.Account + if len(account.SubscriptionID) == 0 || len(account.TenantID) == 0 || + len(account.ClientID) == 0 || len(account.ClientSecret) == 0 || + len(account.ResourceGroupName) == 0 { + return nil, fmt.Errorf("azure ListOsImage lost authoration") + } + + return utils.AKSImageOsList, nil } // AddSubnetsToCluster add subnets to cluster @@ -170,7 +181,25 @@ func (c *Cluster) ListProjects(opt *cloudprovider.CommonOption) ([]*proto.CloudP // CheckClusterEndpointStatus check cluster endpoint status func (c *Cluster) CheckClusterEndpointStatus(clusterID string, isExtranet bool, opt *cloudprovider.CheckEndpointStatusOption) (bool, error) { - return false, cloudprovider.ErrCloudNotImplemented + cli, err := api.NewAksServiceImplWithCommonOption(&opt.CommonOption) + if err != nil { + return false, fmt.Errorf("CheckClusterEndpointStatus create aks client failed, %v", err) + } + + credentials, err := cli.GetClusterAdminCredentialsWithName(context.Background(), opt.ResourceGroupName, clusterID) + if err != nil { + return false, fmt.Errorf("CheckClusterEndpointStatus GetClusterAdminCredentialsWithName failed, %v", err) + } + if len(credentials) == 0 { + return false, fmt.Errorf("credentials not found") + } + + _, err = cloudprovider.GetCRDByKubeConfig(string(credentials[0].Value)) + if err != nil { + return false, err + } + + return true, nil } // AppendCloudNodeInfo append cloud node detailed info diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/node.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/node.go index ea2e3de687..e6f4bf67f4 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/node.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/node.go @@ -15,6 +15,7 @@ package azure import ( "context" "fmt" + "strconv" "sync" proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" @@ -65,13 +66,69 @@ func (n *NodeManager) GetCloudRegions(opt *cloudprovider.CommonOption) ([]*proto // GetZoneList get zoneList by region func (n *NodeManager) GetZoneList(opt *cloudprovider.GetZoneListOption) ([]*proto.ZoneInfo, error) { - return nil, cloudprovider.ErrCloudNotImplemented + client, err := api.NewAMClient(&opt.CommonOption) + if err != nil { + return nil, fmt.Errorf("create azure client failed, err %s", err.Error()) + } + zones, err := client.ListAvailabilityZones(context.Background(), opt.Region) + if err != nil { + return nil, fmt.Errorf("list zones failed, err %s", err.Error()) + } + return zones, nil } // ListNodeInstanceType list node type by zone and node family func (n *NodeManager) ListNodeInstanceType(info cloudprovider.InstanceInfo, opt *cloudprovider.CommonOption) ( []*proto.InstanceType, error) { - return nil, cloudprovider.ErrCloudNotImplemented + cli, err := api.NewAksServiceImplWithCommonOption(opt) + if err != nil { + return nil, fmt.Errorf("ListNodeInstanceType create aks client failed, %v", err) + } + + resources, err := cli.ListResourceByLocation(context.Background(), opt.Region) + if err != nil { + return nil, fmt.Errorf("ListNodeInstanceType ListResourceByLocation failed, %v", err) + } + + instanceTypes := make([]*proto.InstanceType, 0) + for _, v := range resources { + var cpu, mem, gpu int + if *v.ResourceType == "virtualMachines" { + for _, c := range v.Capabilities { + if *c.Name == "vCPUs" { + cpu, _ = strconv.Atoi(*c.Value) + } + if *c.Name == "MemoryGB" { + mem, _ = strconv.Atoi(*c.Value) + } + if *c.Name == "GPUs" { + gpu, _ = strconv.Atoi(*c.Value) + } + } + + if cpu == 0 || mem == 0 { + continue + } + + zones := make([]string, 0) + if len(v.LocationInfo) != 0 { + for _, z := range v.LocationInfo[0].Zones { + zones = append(zones, *z) + } + } + + instanceTypes = append(instanceTypes, &proto.InstanceType{ + TypeName: *v.Name, + NodeFamily: *v.Family, + Cpu: uint32(cpu), + Memory: uint32(mem), + Gpu: uint32(gpu), + Zones: zones, + }) + } + } + + return instanceTypes, nil } // ListOsImage get osimage list @@ -90,6 +147,36 @@ func (n *NodeManager) ListExternalNodesByIP(ips []string, opt *cloudprovider.Lis } // ListKeyPairs keyPairs list -func (n *NodeManager) ListKeyPairs(opt *cloudprovider.CommonOption) ([]*proto.KeyPair, error) { - return nil, cloudprovider.ErrCloudNotImplemented +func (n *NodeManager) ListKeyPairs(opt *cloudprovider.ListNetworksOption) ([]*proto.KeyPair, error) { + cli, err := api.NewAksServiceImplWithCommonOption(&opt.CommonOption) + if err != nil { + return nil, fmt.Errorf("ListKeyPairs create aks client failed, %v", err) + } + + result, err := cli.ListSSHPublicKeys(context.Background(), opt.ResourceGroupName) + if err != nil { + return nil, fmt.Errorf("ListSSHPublicKeys failed, %v", err) + } + + keys := make([]*proto.KeyPair, 0) + for _, v := range result { + keys = append(keys, &proto.KeyPair{KeyName: *v.Name}) + } + + return keys, nil +} + +// GetResourceGroups resource groups list +func (n *NodeManager) GetResourceGroups(opt *cloudprovider.CommonOption) ([]*proto.ResourceGroupInfo, error) { + client, err := api.NewResourceGroupsClient(opt) + if err != nil { + return nil, fmt.Errorf("create azure client failed, err %s", err.Error()) + } + + groups, err := client.ListResourceGroups(context.Background()) + if err != nil { + return nil, fmt.Errorf("list regions failed, err %s", err.Error()) + } + + return groups, nil } diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/nodegroup.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/nodegroup.go index cd97a1f887..80a62ff243 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/nodegroup.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/nodegroup.go @@ -23,6 +23,7 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice" "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/Tencent/bk-bcs/bcs-common/pkg/odm/operator" "github.com/pkg/errors" proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" @@ -30,6 +31,7 @@ import ( "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/common" + storeopt "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/store/options" ) // errors @@ -244,59 +246,36 @@ func (ng *NodeGroup) UpdateDesiredNodes(desired uint32, group *proto.NodeGroup, if group == nil || opt == nil || opt.Cluster == nil || opt.Cloud == nil { return nil, fmt.Errorf("invalid request") } - if err = ng.scaleUpPreCheck(opt.Cluster.ClusterID, opt.Cloud.CloudID, group.NodeGroupID); err != nil { // 扩容前置检查 - return nil, errors.Wrapf(err, "nodeGroupID: %s unable to sacle up", group.NodeGroupID) - } - // scaling nodes with desired, first get all node for status filtering - // check if nodes are already in cluster - goodNodes, err := cloudprovider.ListNodesInClusterNodePool(opt.Cluster.ClusterID, group.NodeGroupID) - if err != nil { - return nil, errors.Wrapf(err, "cloudprovider aks get NodeGroup %s all Nodes failed", group.NodeGroupID) - } + taskType := cloudprovider.GetTaskType(opt.Cloud.CloudProvider, cloudprovider.UpdateNodeGroupDesiredNode) - // check incoming nodes - inComingNodes, err := cloudprovider.GetNodesNumWhenApplyInstanceTask( - opt.Cluster.ClusterID, - group.NodeGroupID, - cloudprovider.GetTaskType(opt.Cloud.CloudProvider, cloudprovider.UpdateNodeGroupDesiredNode), - cloudprovider.TaskStatusRunning, - []string{cloudprovider.GetTaskType(opt.Cloud.CloudProvider, cloudprovider.ApplyInstanceMachinesTask)}, - ) + cond := operator.NewLeafCondition(operator.Eq, operator.M{ + "clusterid": opt.Cluster.ClusterID, + "tasktype": taskType, + "nodegroupid": group.NodeGroupID, + "status": cloudprovider.TaskStatusRunning, + }) + taskList, err := cloudprovider.GetStorageModel().ListTask(context.Background(), cond, &storeopt.ListOption{}) if err != nil { - return nil, errors.Wrapf(err, "UpdateDesiredNodes GetNodesNumWhenApplyInstanceTask failed") + blog.Errorf("UpdateDesiredNodes failed: %v", err) + return nil, err } - if inComingNodes > 0 { - return nil, errors.Wrapf(nodePoolScaleUpErr, "nodeGroupID: %s is scale up, incoming nodes %d", - group.NodeGroupID, inComingNodes) + if len(taskList) != 0 { + return nil, fmt.Errorf("there are %d tasks still running for %s", len(taskList), taskType) } - // cluster current node - current := len(goodNodes) + inComingNodes - nodeNames := make([]string, 0) - for _, node := range goodNodes { - nodeNames = append(nodeNames, node.InnerIP) - } - blog.Infof("NodeGroup %s has total nodes %d, current capable nodes %d, current incoming nodes %d, details %v", - group.NodeGroupID, len(goodNodes), current, inComingNodes, nodeNames) + needScaleOutNodes := desired - group.GetAutoScaling().GetDesiredSize() - if current >= int(desired) { - blog.Infof("NodeGroup %s current capable nodes %d larger than desired %d nodes, nothing to do", - group.NodeGroupID, current, desired) - res = &cloudprovider.ScalingResponse{ - ScalingUp: 0, - CapableNodes: nodeNames, - } - err = fmt.Errorf("NodeGroup %s UpdateDesiredNodes nodes %d larger than desired %d nodes", - group.NodeGroupID, current, desired) - return res, err + blog.Infof("cluster[%s] nodeGroup[%s] current nodes[%d] desired nodes[%d] needNodes[%s]", + group.ClusterID, group.NodeGroupID, group.GetAutoScaling().GetDesiredSize(), desired, needScaleOutNodes) + + if desired <= group.GetAutoScaling().GetDesiredSize() { + return nil, fmt.Errorf("NodeGroup %s current nodes %d larger than or equel to desired %d nodes", + group.Name, group.GetAutoScaling().GetDesiredSize(), desired) } - // current scale nodeNum - scalingUp := int(desired) - current return &cloudprovider.ScalingResponse{ - ScalingUp: uint32(scalingUp), - CapableNodes: nodeNames, + ScalingUp: needScaleOutNodes, }, nil } @@ -497,32 +476,6 @@ func (ng *NodeGroup) updateVMSSProperties(client api.AksService, group *proto.No return nil } -// scaleUpPreCheck 扩容前置检查 -func (ng *NodeGroup) scaleUpPreCheck(clusterID, cloudID, nodeGroupID string) error { - info, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ - ClusterID: clusterID, - CloudID: cloudID, - NodeGroupID: nodeGroupID, - }) - if err != nil { - return errors.Wrapf(err, "call GetClusterDependBasicInfo failed") - } - - client, err := api.NewAksServiceImplWithCommonOption(info.CmOption) - if err != nil { - return errors.Wrapf(err, "new azure client failed") - } - - ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second) - defer cancel() - pool, err := client.GetPoolAndReturn(ctx, info.Cluster.SystemID, info.NodeGroup.CloudNodeGroupID) - if err != nil { - return errors.Wrapf(err, "call GetPoolAndReturn failed") - } - - return checkPoolState(pool) -} - // checkPoolState 更新前,检查节点池的状态 // 如果节点池正在 "更新中" 或 "扩容中",将无法对其进行操作 func checkPoolState(pool *armcontainerservice.AgentPool) error { diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/tasks/createNodeGroup.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/tasks/createNodeGroup.go index 3f6675cf86..0c16e6aaad 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/tasks/createNodeGroup.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/tasks/createNodeGroup.go @@ -78,7 +78,7 @@ func CreateCloudNodeGroupTask(taskID string, stepName string) error { return retErr } - // 设置节点密码、购买系统盘、数据盘 + // 设置节点密码、购买系统盘、数据盘等 if err = setVmSets(ctx, dependInfo); err != nil { blog.Errorf("CreateCloudNodeGroupTask[%s]: call setVmSets[%s] api in task %s step %s failed, %s", taskID, nodeGroupID, taskID, stepName, err.Error()) @@ -270,20 +270,34 @@ func setVmSets(rootCtx context.Context, info *cloudprovider.CloudDependBasicInfo cluster.ClusterID, group.CloudNodeGroupID) } - // 设置虚拟规模密码 - if len(lc.InitLoginUsername) != 0 && len(lc.InitLoginPassword) != 0 { - api.SetVmSetPasswd(group, set) - } - // 买系统盘 - if lc.SystemDisk != nil { - api.BuySystemDisk(group, set) + group.AutoScaling.AutoScalingName = api.RegexpSetNodeGroupResourcesName(set) + // 设置虚拟规模集网络 + err = api.SetVmSetNetWork(ctx, client, group, set) + if err != nil { + return errors.Wrapf(err, "createAgentPool[%s]: call SetVmSetNetWork[%s][%s] falied", taskID, + cluster.ClusterID, group.CloudNodeGroupID) } + // 设置虚拟规模密码 + api.SetVmSetPasswd(group, set) + // 设置虚拟规模SSH免密登录公钥 + api.SetVmSetSSHPublicKey(group, set) + + // 已经创建了系统盘, 无需再购买 + // if lc.SystemDisk != nil { + // api.BuySystemDisk(group, set) + // } + // 买数据盘 if len(lc.DataDisks) != 0 { api.BuyDataDisk(group, set) } + // 用户数据 + api.SetUserData(group, set) api.SetImageReferenceNull(set) + // 设置自定义脚本会导致VM加入集群失败!!! + // api.SetVmSetCustomScript(group, set) + ctx, cancel = context.WithTimeout(rootCtx, 5*time.Minute) defer cancel() vmSet, err := client.UpdateSetWithName(ctx, set, nodeGroupResource, *set.Name) // 设置节点密码 或 购买数据盘、系统盘 @@ -411,25 +425,12 @@ func cloudDataToNodeGroup(rootCtx context.Context, pool *armcontainerservice.Age _ = client.SetToNodeGroup(set, group) _ = client.AgentPoolToNodeGroup(pool, group) syncSku(rootCtx, client, group) - syncSecurityGroups(rootCtx, client, group) setModuleInfo(group, cluster.BusinessID) group.ClusterID = cluster.ClusterID // 镜像信息/dockerGraphPath节点运行时/runtime(运行时版本信息,RunTimeInfo) return nil } -func syncSecurityGroups(ctx context.Context, client api.AksService, group *proto.NodeGroup) { - virtualNetworks, err := client.GetVirtualNetworks(ctx, group.AutoScaling.AutoScalingName, group.AutoScaling.VpcID) - if err != nil { - return - } - securityGroups := api.ParseSecurityGroupsInVpc(virtualNetworks) - if len(securityGroups) == 0 { - return - } - group.LaunchTemplate.SecurityGroupIDs = securityGroups -} - func syncSku(rootCtx context.Context, client api.AksService, group *proto.NodeGroup) { // wait node group state to normal ctx, cancel := context.WithTimeout(rootCtx, 30*time.Second) diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/tasks/importCluster.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/tasks/importCluster.go index 31a64c9d0a..f50e99db9e 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/tasks/importCluster.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/tasks/importCluster.go @@ -16,12 +16,14 @@ import ( "context" "encoding/base64" "fmt" + "strings" "time" "github.com/Tencent/bk-bcs/bcs-common/common/blog" "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/clusterops" @@ -184,6 +186,21 @@ func importClusterInstances(data *cloudprovider.CloudDependBasicInfo) error { return fmt.Errorf("list nodes failed, %s", err.Error()) } + // get container runtime info here + if len(nodes.Items) > 0 { + crv := strings.Split(nodes.Items[0].Status.NodeInfo.ContainerRuntimeVersion, "://") + if len(crv) == 2 { + data.Cluster.ClusterAdvanceSettings = &proto.ClusterAdvanceSetting{ + ContainerRuntime: crv[0], + RuntimeVersion: crv[1], + } + err = cloudprovider.GetStorageModel().UpdateCluster(context.Background(), data.Cluster) + if err != nil { + blog.Errorf("importClusterInstances update cluster[%s] failed: %v", data.Cluster.ClusterName, err) + } + } + } + err = importClusterNodesToCM(context.Background(), nodes.Items, data.Cluster.ClusterID) if err != nil { return err diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/tasks/updateDesiredNodes.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/tasks/updateDesiredNodes.go index 47bd5ae7b6..13768dbecd 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/tasks/updateDesiredNodes.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/tasks/updateDesiredNodes.go @@ -27,14 +27,18 @@ import ( "github.com/Tencent/bk-bcs/bcs-common/pkg/odm/operator" "github.com/avast/retry-go" "github.com/pkg/errors" + corev1 "k8s.io/api/core/v1" proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/utils" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/clusterops" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/common" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/options" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/remote/loop" storeopt "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/store/options" + cmutils "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/utils" ) // ApplyInstanceMachinesTask 扩容节点 - update desired nodes task @@ -465,71 +469,67 @@ func checkClusterInstanceStatus(rootCtx context.Context, info *cloudprovider.Clo addFailureNodes = make([]string, 0) asg = info.NodeGroup.AutoScaling taskID = cloudprovider.GetTaskIDFromContext(rootCtx) - ctx, cancel = context.WithTimeout(rootCtx, 2*time.Minute) + ctx, cancel = context.WithTimeout(context.TODO(), 5*time.Minute) instanceList []*armcompute.VirtualMachineScaleSetVM ) defer cancel() + k8sOperator := clusterops.NewK8SOperator(options.GetGlobalCMOptions(), cloudprovider.GetStorageModel()) client, err := api.NewAksServiceImplWithCommonOption(info.CmOption) // new client if err != nil { return nil, nil, errors.Wrapf(err, "checkClusterInstanceStatus[%s] new client failed", taskID) } - err = loop.LoopDoFunc(ctx, func() error { // wait all nodes to be ready + // wait all nodes to be ready + errLoop := loop.LoopDoFunc(ctx, func() error { + running := make([]string, 0) + nodes, err2 := k8sOperator.ListClusterNodes(context.Background(), info.Cluster.ClusterID) + if err2 != nil { + blog.Errorf("checkClusterInstanceStatus[%s] cluster[%s] failed: %v", taskID, info.Cluster.ClusterID, err) + return nil + } + + var k8sNodeMap = make(map[string]*corev1.Node, 0) + for i := range nodes { + k8sNodeMap[nodes[i].Name] = nodes[i] + } + instanceList, err = client.ListInstanceByIDAndReturn(ctx, asg.AutoScalingName, asg.AutoScalingID, instanceIDs) if err != nil { return errors.Wrapf(err, "checkClusterInstanceStatus[%s] ListInstanceByIDAndReturn failed", taskID) } - index := 0 - running, failure := make([]string, 0), make([]string, 0) for _, vm := range instanceList { id := api.VmIDToNodeID(vm) - state := *vm.Properties.ProvisioningState - blog.Infof("checkClusterInstanceStatus[%s] instance[%s] status[%s]", taskID, id, state) - switch state { - case api.NormalState: - running = append(running, id) - index++ - default: - failure = append(failure, id) - index++ + if n, ok := k8sNodeMap[*vm.Properties.OSProfile.ComputerName]; ok { + if ok && cmutils.CheckNodeIfReady(n) { + blog.Infof("checkClusterInstanceStatus[%s] node[%s] ready", taskID, id) + running = append(running, id) + } } } - if index == len(instanceIDs) { + + blog.Infof("checkClusterInstanceStatus[%s] ready nodes[%+v]", taskID, running) + if len(running) == len(instanceIDs) { addSuccessNodes = running - addFailureNodes = failure return loop.EndLoop } + return nil - }, loop.LoopInterval(10*time.Second)) - if err != nil && !errors.Is(err, context.DeadlineExceeded) { // other error - return nil, nil, errors.Wrapf(err, "checkClusterInstanceStatus[%s] ListInstanceByIDAndReturn failed", taskID) + }, loop.LoopInterval(30*time.Second)) + // other error + if errLoop != nil && !errors.Is(errLoop, context.DeadlineExceeded) { + blog.Errorf("checkClusterInstanceStatus[%s] check nodes status failed: %v", taskID, errLoop) + return nil, nil, errLoop } - if errors.Is(err, context.DeadlineExceeded) { // timeout error - running, failure := make([]string, 0), make([]string, 0) - ctx, cancel = context.WithTimeout(rootCtx, 2*time.Minute) - defer cancel() - instanceList, err = client.ListInstanceByIDAndReturn(ctx, asg.AutoScalingName, asg.AutoScalingID, instanceIDs) + // timeout error + if errors.Is(errLoop, context.DeadlineExceeded) { + addSuccessNodes, addFailureNodes, err = getVmStatus(k8sOperator, info, client, instanceIDs, taskID) if err != nil { - return nil, nil, errors.Wrapf(err, - "checkClusterInstanceStatus[%s] call ListInstanceByIDAndReturn failed", taskID) - } - for _, ins := range instanceList { - id := api.VmIDToNodeID(ins) - state := *ins.Properties.ProvisioningState - blog.Infof("checkClusterInstanceStatus[%s] instance[%s] status[%s]", taskID, id, state) - switch state { - case api.NormalState: - running = append(running, id) - default: - failure = append(failure, id) - } + return nil, nil, err } - addSuccessNodes = running - addFailureNodes = failure } - blog.Infof("checkClusterInstanceStatus[%s] success[%s] failure[%s]", taskID, addSuccessNodes, addFailureNodes) + blog.Infof("checkClusterInstanceStatus[%s] success[%v] failure[%v]", taskID, addSuccessNodes, addFailureNodes) for _, n := range addFailureNodes { // set cluster node status err = cloudprovider.UpdateNodeStatusByInstanceID(n, common.StatusAddNodesFailed) @@ -540,3 +540,36 @@ func checkClusterInstanceStatus(rootCtx context.Context, info *cloudprovider.Clo return addSuccessNodes, addFailureNodes, nil } + +func getVmStatus(k8sOperator *clusterops.K8SOperator, info *cloudprovider.CloudDependBasicInfo, + client api.AksService, instanceIDs []string, taskID string) ( + []string, []string, error) { + running, failure := make([]string, 0), make([]string, 0) + nodes, err := k8sOperator.ListClusterNodes(context.Background(), info.Cluster.ClusterID) // nolint + if err != nil { + blog.Errorf("checkClusterInstanceStatus[%s] cluster[%s] failed: %v", taskID, info.Cluster.ClusterID, err) + return nil, nil, err + } + + var k8sNodeMap = make(map[string]*corev1.Node, 0) + for i := range nodes { + k8sNodeMap[nodes[i].Name] = nodes[i] + } + instanceList, err := client.ListInstanceByIDAndReturn(context.Background(), info.NodeGroup.AutoScaling.AutoScalingName, + info.NodeGroup.AutoScaling.AutoScalingID, instanceIDs) + if err != nil { + return nil, nil, errors.Wrapf(err, "checkClusterInstanceStatus[%s] ListInstanceByIDAndReturn failed", taskID) + } + + for _, ins := range instanceList { + id := api.VmIDToNodeID(ins) + n, ok := k8sNodeMap[*ins.Properties.OSProfile.ComputerName] + if ok && cmutils.CheckNodeIfReady(n) { + running = append(running, id) + } else { + failure = append(failure, id) + } + } + + return running, failure, nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/validate.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/validate.go index 89a5d29e85..e4badb4b50 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/validate.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/validate.go @@ -45,7 +45,16 @@ func (c *CloudValidate) CreateClusterValidate(req *proto.CreateClusterReq, opt * // CreateCloudAccountValidate create cloud account validate func (c *CloudValidate) CreateCloudAccountValidate(account *proto.Account) error { - return cloudprovider.ErrCloudNotImplemented + nm := &NodeManager{} + + _, err := nm.GetCloudRegions(&cloudprovider.CommonOption{ + Account: account, + }) + if err != nil { + return fmt.Errorf("%s CreateCloudAccountValidate failed, %v", cloudName, err) + } + + return nil } // ImportClusterValidate check importCluster operation @@ -161,20 +170,29 @@ func (c *CloudValidate) ListCloudSubnetsValidate(req *proto.ListCloudSubnetsRequ return fmt.Errorf("%s ListCloudSubnetsValidate request lost valid crendential info", cloudName) } - if len(req.Region) == 0 { - return fmt.Errorf("%s ListCloudSubnetsValidate request lost valid region info", cloudName) - } if len(req.VpcID) == 0 { return fmt.Errorf("%s ListCloudSubnetsValidate request lost valid vpcID info", cloudName) } + if len(req.ResourceGroupName) == 0 { + return fmt.Errorf("%s ListCloudSubnetsValidate request lost resourceGroupName info", cloudName) + } + return nil } // ListCloudVpcsValidate xxx func (c *CloudValidate) ListCloudVpcsValidate(req *proto.ListCloudVpcsRequest, account *proto.Account) error { - return cloudprovider.ErrCloudNotImplemented + if c == nil { + return fmt.Errorf("%s ListCloudVpcsValidate request is empty", cloudName) + } + + if len(req.ResourceGroupName) == 0 { + return fmt.Errorf("%s ListCloudVpcsValidate request lost resourceGroupName info", cloudName) + } + + return nil } // ListSecurityGroupsValidate xxx @@ -190,8 +208,8 @@ func (c *CloudValidate) ListSecurityGroupsValidate( return fmt.Errorf("%s ListSecurityGroupsValidate request lost valid crendential info", cloudName) } - if len(req.Region) == 0 { - return fmt.Errorf("%s ListSecurityGroupsValidate request lost valid region info", cloudName) + if len(req.ResourceGroupName) == 0 { + return fmt.Errorf("%s ListSecurityGroupsValidate request lost valid resourceGroupName info", cloudName) } return nil @@ -199,8 +217,8 @@ func (c *CloudValidate) ListSecurityGroupsValidate( // ListKeyPairsValidate list key pairs validate func (c *CloudValidate) ListKeyPairsValidate(req *proto.ListKeyPairsRequest, account *proto.Account) error { - if len(req.Region) == 0 { - return fmt.Errorf("%s ListKeyPairsValidate request lost valid region info", cloudName) + if len(req.ResourceGroupName) == 0 { + return fmt.Errorf("%s ListKeyPairsValidate request lost valid resourceGroupName info", cloudName) } return nil @@ -264,5 +282,19 @@ func (c *CloudValidate) DeleteNodesFromClusterValidate( // CreateNodeGroupValidate xxx func (c *CloudValidate) CreateNodeGroupValidate( req *proto.CreateNodeGroupRequest, opt *cloudprovider.CommonOption) error { - return cloudprovider.ErrCloudNotImplemented + // call cloud interface to check cluster + if c == nil || req == nil { + return fmt.Errorf("%s ImportClusterValidate request is empty", cloudName) + } + + if opt == nil || opt.Account == nil { + return fmt.Errorf("%s ImportClusterValidate options is empty", cloudName) + } + + if len(opt.Account.SubscriptionID) == 0 || len(opt.Account.TenantID) == 0 || len(opt.Account.ClientID) == 0 || + len(opt.Account.ClientSecret) == 0 || len(opt.Region) == 0 { + return fmt.Errorf("%s ImportClusterValidate opt lost valid crendential info", cloudName) + } + + return nil } diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/vpc.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/vpc.go new file mode 100644 index 0000000000..3510438586 --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/vpc.go @@ -0,0 +1,144 @@ +/* + * 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 azure + +import ( + "context" + "fmt" + "strings" + "sync" + "time" + + proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/azure/api" +) + +var vpcMgr sync.Once + +func init() { + vpcMgr.Do(func() { + // init VPC manager + cloudprovider.InitVPCManager(cloudName, &VPCManager{}) + }) +} + +// VPCManager is the manager for VPC +type VPCManager struct{} + +// ListVpcs list vpcs +func (vm *VPCManager) ListVpcs(vpcID string, opt *cloudprovider.ListNetworksOption) ([]*proto.CloudVpc, error) { + client, err := api.NewAksServiceImplWithCommonOption(&opt.CommonOption) + if err != nil { + return nil, fmt.Errorf("ListVpcs create AksService failed, %v", err) + } + + ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second) + defer cancel() + + vn, err := client.ListVirtualNetwork(ctx, opt.ResourceGroupName) + if err != nil { + return nil, fmt.Errorf("ListVpcs ListVirtualNetwork failed, err %s", err.Error()) + } + + result := make([]*proto.CloudVpc, 0) + for _, v := range vn { + if vpcID != "" && *v.Name != vpcID { + continue + } + + vpc := &proto.CloudVpc{ + Name: *v.Name, + VpcId: *v.Name, + } + if v.Properties != nil && v.Properties.AddressSpace != nil && + len(v.Properties.AddressSpace.AddressPrefixes) > 0 { + if !strings.Contains(*v.Properties.AddressSpace.AddressPrefixes[0], ":") { + vpc.Ipv4Cidr = *v.Properties.AddressSpace.AddressPrefixes[0] + } else { + vpc.Ipv6Cidr = *v.Properties.AddressSpace.AddressPrefixes[0] + } + } + result = append(result, vpc) + } + + return result, nil +} + +// ListSubnets list vpc subnets +func (vm *VPCManager) ListSubnets(vpcID, zone string, opt *cloudprovider.ListNetworksOption) ([]*proto.Subnet, error) { + client, err := api.NewAksServiceImplWithCommonOption(&opt.CommonOption) + if err != nil { + return nil, fmt.Errorf("ListSubnets create AksService failed, %v", err) + } + + ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second) + defer cancel() + + subnets, err := client.ListSubnets(ctx, opt.ResourceGroupName, vpcID) + if err != nil { + return nil, fmt.Errorf("ListSubnets failed, err %s", err.Error()) + } + + result := make([]*proto.Subnet, 0) + for _, v := range subnets { + var cidr string + if v.Properties != nil && v.Properties.AddressPrefix != nil { + cidr = *v.Properties.AddressPrefix + + } + result = append(result, &proto.Subnet{ + VpcID: vpcID, + SubnetID: *v.Name, + SubnetName: *v.Name, + CidrRange: cidr, + }) + } + return result, nil +} + +// ListSecurityGroups list security groups +func (vm *VPCManager) ListSecurityGroups(opt *cloudprovider.ListNetworksOption) ([]*proto.SecurityGroup, error) { + cli, err := api.NewAksServiceImplWithCommonOption(&opt.CommonOption) + if err != nil { + return nil, fmt.Errorf("ListKeyPairs create aks client failed, %v", err) + } + + result, err := cli.ListNetworkSecurityGroups(context.Background(), opt.ResourceGroupName) + if err != nil { + return nil, fmt.Errorf("ListSSHPublicKeys failed, %v", err) + } + + groups := make([]*proto.SecurityGroup, 0) + for _, v := range result { + groups = append(groups, &proto.SecurityGroup{SecurityGroupName: *v.Name}) + } + + return groups, nil +} + +// GetCloudNetworkAccountType 查询用户网络类型 +func (vm *VPCManager) GetCloudNetworkAccountType(opt *cloudprovider.CommonOption) (*proto.CloudAccountType, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// ListBandwidthPacks list bandWidthPacks +func (vm *VPCManager) ListBandwidthPacks(opt *cloudprovider.CommonOption) ([]*proto.BandwidthPackageInfo, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// CheckConflictInVpcCidr check cidr if conflict with vpc cidrs +func (vm *VPCManager) CheckConflictInVpcCidr(vpcID string, cidr string, + opt *cloudprovider.CommonOption) ([]string, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/blueking/api/node.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/blueking/api/node.go index e17cb3e048..597a33bbfa 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/blueking/api/node.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/blueking/api/node.go @@ -137,6 +137,11 @@ func (nm *NodeManager) ListExternalNodesByIP(ips []string, opt *cloudprovider.Li } // ListKeyPairs keyPairs list -func (nm *NodeManager) ListKeyPairs(opt *cloudprovider.CommonOption) ([]*proto.KeyPair, error) { +func (nm *NodeManager) ListKeyPairs(opt *cloudprovider.ListNetworksOption) ([]*proto.KeyPair, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// GetResourceGroups resource groups list +func (nm *NodeManager) GetResourceGroups(opt *cloudprovider.CommonOption) ([]*proto.ResourceGroupInfo, error) { return nil, cloudprovider.ErrCloudNotImplemented } diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/auth.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/auth.go index f0dd1f5800..bde9bcb761 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/auth.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/auth.go @@ -23,7 +23,7 @@ import ( "github.com/Tencent/bk-bcs/bcs-common/common/blog" "golang.org/x/oauth2" "golang.org/x/oauth2/google" - "google.golang.org/api/container/v1" + container "google.golang.org/api/container/v1" "k8s.io/client-go/rest" ) diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/compute.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/compute.go index be80b62d77..e4366a3795 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/compute.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/compute.go @@ -20,7 +20,7 @@ import ( "github.com/Tencent/bk-bcs/bcs-common/common/blog" "golang.org/x/oauth2" - "google.golang.org/api/compute/v1" + compute "google.golang.org/api/compute/v1" "google.golang.org/api/option" proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/container.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/container.go index 923ff9895f..3c4550218a 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/container.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/container.go @@ -19,7 +19,7 @@ import ( "github.com/Tencent/bk-bcs/bcs-common/common/blog" "golang.org/x/oauth2" - "google.golang.org/api/container/v1" + container "google.golang.org/api/container/v1" "google.golang.org/api/option" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/node.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/node.go index e1a83288d9..7f570f5636 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/node.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/node.go @@ -21,7 +21,7 @@ import ( "sync" "github.com/Tencent/bk-bcs/bcs-common/common/blog" - "google.golang.org/api/compute/v1" + compute "google.golang.org/api/compute/v1" proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" @@ -199,7 +199,12 @@ func (n *NodeManager) ListNodesByInstanceID(ids []string, opt *cloudprovider.Lis } // ListKeyPairs keyPairs list -func (n *NodeManager) ListKeyPairs(opt *cloudprovider.CommonOption) ([]*proto.KeyPair, error) { +func (n *NodeManager) ListKeyPairs(opt *cloudprovider.ListNetworksOption) ([]*proto.KeyPair, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// GetResourceGroups resource groups list +func (n *NodeManager) GetResourceGroups(opt *cloudprovider.CommonOption) ([]*proto.ResourceGroupInfo, error) { return nil, cloudprovider.ErrCloudNotImplemented } diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/utils.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/utils.go index c4232b10c6..5cac0b688f 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/utils.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/utils.go @@ -22,8 +22,8 @@ import ( "github.com/Tencent/bk-bcs/bcs-common/common/blog" "golang.org/x/oauth2" "golang.org/x/oauth2/google" - "google.golang.org/api/compute/v1" - "google.golang.org/api/container/v1" + compute "google.golang.org/api/compute/v1" + container "google.golang.org/api/container/v1" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd/api" diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/vpc.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/vpc.go index 947904eee3..6fe268fa84 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/vpc.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/vpc.go @@ -35,30 +35,30 @@ func init() { type VPCManager struct{} // ListVpcs list vpcs -func (vm *VPCManager) ListVpcs(vpcID string, opt *cloudprovider.CommonOption) ([]*proto.CloudVpc, error) { +func (vm *VPCManager) ListVpcs(vpcID string, opt *cloudprovider.ListNetworksOption) ([]*proto.CloudVpc, error) { return nil, cloudprovider.ErrCloudNotImplemented } // ListSubnets list vpc subnets -func (vm *VPCManager) ListSubnets(vpcID, zone string, opt *cloudprovider.CommonOption) ([]*proto.Subnet, error) { +func (vm *VPCManager) ListSubnets(vpcID, zone string, opt *cloudprovider.ListNetworksOption) ([]*proto.Subnet, error) { locationList := strings.Split(opt.Region, "-") if len(locationList) == 3 { opt.Region = strings.Join(locationList[:2], "-") } - client, err := NewComputeServiceClient(opt) + client, err := NewComputeServiceClient(&opt.CommonOption) if err != nil { return nil, fmt.Errorf("create google client failed, err %s", err.Error()) } subnets, err := client.ListSubnetworks(context.Background(), opt.Region) if err != nil { - return nil, fmt.Errorf("list regions failed, err %s", err.Error()) + return nil, fmt.Errorf("list subnets failed, err %s", err.Error()) } result := make([]*proto.Subnet, 0) for _, v := range subnets.Items { networkInfo := strings.Split(v.Network, "/") - if vpcID != networkInfo[len(networkInfo)-1] { + if vpcID != "" && vpcID != networkInfo[len(networkInfo)-1] { continue } regionInfo := strings.Split(v.Region, "/") @@ -75,7 +75,7 @@ func (vm *VPCManager) ListSubnets(vpcID, zone string, opt *cloudprovider.CommonO } // ListSecurityGroups list security groups -func (vm *VPCManager) ListSecurityGroups(opt *cloudprovider.CommonOption) ([]*proto.SecurityGroup, error) { +func (vm *VPCManager) ListSecurityGroups(opt *cloudprovider.ListNetworksOption) ([]*proto.SecurityGroup, error) { return nil, cloudprovider.ErrCloudNotImplemented } diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/cloud.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/cloud.go index 6ba387f981..b8bc77c3c0 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/cloud.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/cloud.go @@ -19,7 +19,7 @@ import ( "strings" "sync" - "google.golang.org/api/container/v1" + container "google.golang.org/api/container/v1" cmproto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/nodegroup.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/nodegroup.go index 07d0d919c3..b57d9291d6 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/nodegroup.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/nodegroup.go @@ -19,7 +19,7 @@ import ( "github.com/Tencent/bk-bcs/bcs-common/common/blog" "github.com/Tencent/bk-bcs/bcs-common/pkg/odm/operator" - "google.golang.org/api/compute/v1" + compute "google.golang.org/api/compute/v1" proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" @@ -216,8 +216,9 @@ func (ng *NodeGroup) UpdateDesiredNodes(desired uint32, group *proto.NodeGroup, blog.Infof("cluster[%s] nodeGroup[%s] current nodes[%d] desired nodes[%d] needNodes[%s]", group.ClusterID, group.NodeGroupID, group.GetAutoScaling().GetDesiredSize(), desired, needScaleOutNodes) - if needScaleOutNodes <= 0 { - return nil, fmt.Errorf("current nodeCount gt desired nodeCount") + if desired <= group.GetAutoScaling().GetDesiredSize() { + return nil, fmt.Errorf("NodeGroup %s current nodes %d larger than or equel to desired %d nodes", + group.Name, group.GetAutoScaling().GetDesiredSize(), desired) } return &cloudprovider.ScalingResponse{ diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/tasks/cleanNodesInGroup.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/tasks/cleanNodesInGroup.go index 53fc782cf3..baae9a481e 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/tasks/cleanNodesInGroup.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/tasks/cleanNodesInGroup.go @@ -21,7 +21,7 @@ import ( "github.com/Tencent/bk-bcs/bcs-common/common/blog" "github.com/avast/retry-go" - "google.golang.org/api/compute/v1" + compute "google.golang.org/api/compute/v1" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api" diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/tasks/createNodeGroup.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/tasks/createNodeGroup.go index 17edad101a..8f39298e05 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/tasks/createNodeGroup.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/tasks/createNodeGroup.go @@ -20,8 +20,8 @@ import ( "time" "github.com/Tencent/bk-bcs/bcs-common/common/blog" - "google.golang.org/api/compute/v1" - "google.golang.org/api/container/v1" + compute "google.golang.org/api/compute/v1" + container "google.golang.org/api/container/v1" proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/tasks/utils.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/tasks/utils.go index 9ca204fd94..89e27eb634 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/tasks/utils.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/tasks/utils.go @@ -18,7 +18,7 @@ import ( "time" "github.com/Tencent/bk-bcs/bcs-common/common/blog" - "google.golang.org/api/container/v1" + container "google.golang.org/api/container/v1" cmproto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/interface.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/interface.go index eb2c39bd6d..319a035c4b 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/interface.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/interface.go @@ -231,7 +231,9 @@ type NodeManager interface { // ListOsImage get osimage list ListOsImage(provider string, opt *CommonOption) ([]*proto.OsImage, error) // ListKeyPairs list ssh keyPairs - ListKeyPairs(opt *CommonOption) ([]*proto.KeyPair, error) + ListKeyPairs(opt *ListNetworksOption) ([]*proto.KeyPair, error) + // GetResourceGroups resource groups list + GetResourceGroups(opt *CommonOption) ([]*proto.ResourceGroupInfo, error) } // CloudValidateManager validate interface for check cloud resourceInfo @@ -371,11 +373,11 @@ type NodeGroupManager interface { // VPCManager cloud interface for vpc management type VPCManager interface { // ListVpcs list cloud vpcs - ListVpcs(vpcID string, opt *CommonOption) ([]*proto.CloudVpc, error) + ListVpcs(vpcID string, opt *ListNetworksOption) ([]*proto.CloudVpc, error) // ListSubnets list vpc's subnets - ListSubnets(vpcID string, zone string, opt *CommonOption) ([]*proto.Subnet, error) + ListSubnets(vpcID string, zone string, opt *ListNetworksOption) ([]*proto.Subnet, error) // ListSecurityGroups list security groups - ListSecurityGroups(opt *CommonOption) ([]*proto.SecurityGroup, error) + ListSecurityGroups(opt *ListNetworksOption) ([]*proto.SecurityGroup, error) // GetCloudNetworkAccountType get cloud account type GetCloudNetworkAccountType(opt *CommonOption) (*proto.CloudAccountType, error) // ListBandwidthPacks list bandWidthPacks diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/options.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/options.go index 0906719c67..27c4118328 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/options.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/options.go @@ -368,6 +368,12 @@ type CreateNodeGroupOption struct { OnlyData bool } +// ListNetworksOption create list vpcs option +type ListNetworksOption struct { + CommonOption + ResourceGroupName string +} + // ResourcePoolData xxx type ResourcePoolData struct { Provider string @@ -494,6 +500,7 @@ type UpdateScalingOption struct { // CheckEndpointStatusOption check cluster endpoint status option type CheckEndpointStatusOption struct { CommonOption + ResourceGroupName string } // AddSubnetsToClusterOption add subnet to cluster option diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud-public/clustermgr.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud-public/clustermgr.go index ad76f37bfd..1a41180eec 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud-public/clustermgr.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud-public/clustermgr.go @@ -875,7 +875,7 @@ func getZoneSubnets(vpcId string, opt cloudprovider.CommonOption) ([]string, map ) vpcCli := &VPCManager{} - subnets, err := vpcCli.ListSubnets(vpcId, "", &opt) + subnets, err := vpcCli.ListSubnets(vpcId, "", &cloudprovider.ListNetworksOption{CommonOption: opt}) if err != nil { blog.Errorf("getZoneSubnets ListSubnets failed: %v", err) return nil, nil, err diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud-public/nodemgr.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud-public/nodemgr.go index f08c93262b..267aa5d694 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud-public/nodemgr.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud-public/nodemgr.go @@ -370,8 +370,8 @@ func (nm *NodeManager) DescribeKeyPairsByID(keyIDs []string, } // ListKeyPairs describe all ssh keyPairs https://cloud.tencent.com/document/product/213/15699 -func (nm *NodeManager) ListKeyPairs(opt *cloudprovider.CommonOption) ([]*proto.KeyPair, error) { - client, err := api.GetCVMClient(opt) +func (nm *NodeManager) ListKeyPairs(opt *cloudprovider.ListNetworksOption) ([]*proto.KeyPair, error) { + client, err := api.GetCVMClient(&opt.CommonOption) if err != nil { blog.Errorf("create CVM client when ListKeyPairs failed: %v", err) return nil, err @@ -399,6 +399,11 @@ func (nm *NodeManager) ListKeyPairs(opt *cloudprovider.CommonOption) ([]*proto.K return keyPairs, nil } +// GetResourceGroups resource groups list +func (nm *NodeManager) GetResourceGroups(opt *cloudprovider.CommonOption) ([]*proto.ResourceGroupInfo, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + // ListOsImage list image os func (nm *NodeManager) ListOsImage(provider string, opt *cloudprovider.CommonOption) ([]*proto.OsImage, error) { os := make([]*proto.OsImage, 0) diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud-public/vpcmgr.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud-public/vpcmgr.go index 8c8ed2cadb..989604403a 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud-public/vpcmgr.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud-public/vpcmgr.go @@ -38,8 +38,8 @@ func init() { type VPCManager struct{} // ListVpcs list vpcs -func (c *VPCManager) ListVpcs(vpcID string, opt *cloudprovider.CommonOption) ([]*proto.CloudVpc, error) { - vpcCli, err := api.NewVPCClient(opt) +func (c *VPCManager) ListVpcs(vpcID string, opt *cloudprovider.ListNetworksOption) ([]*proto.CloudVpc, error) { + vpcCli, err := api.NewVPCClient(&opt.CommonOption) if err != nil { blog.Errorf("create VPC client when failed: %v", err) return nil, err @@ -77,7 +77,7 @@ func (c *VPCManager) ListVpcs(vpcID string, opt *cloudprovider.CommonOption) ([] result = append(result, cloudVpc) // get ip number - freeIPNets, err := business.GetFreeIPNets(opt, vpcID) + freeIPNets, err := business.GetFreeIPNets(&opt.CommonOption, vpcID) if err != nil { blog.Errorf("vpc GetFreeIPNets failed: %v", err) continue @@ -97,9 +97,9 @@ func (c *VPCManager) ListVpcs(vpcID string, opt *cloudprovider.CommonOption) ([] } // ListSubnets list vpc subnets -func (c *VPCManager) ListSubnets(vpcID, zone string, opt *cloudprovider.CommonOption) ([]*proto.Subnet, error) { +func (c *VPCManager) ListSubnets(vpcID, zone string, opt *cloudprovider.ListNetworksOption) ([]*proto.Subnet, error) { blog.Infof("ListSubnets input: vpcID/%s", vpcID) - vpcCli, err := api.NewVPCClient(opt) + vpcCli, err := api.NewVPCClient(&opt.CommonOption) if err != nil { blog.Errorf("create VPC client when failed: %v", err) return nil, err @@ -131,8 +131,8 @@ func (c *VPCManager) ListSubnets(vpcID, zone string, opt *cloudprovider.CommonOp } // ListSecurityGroups list security groups -func (c *VPCManager) ListSecurityGroups(opt *cloudprovider.CommonOption) ([]*proto.SecurityGroup, error) { - vpcCli, err := api.NewVPCClient(opt) +func (c *VPCManager) ListSecurityGroups(opt *cloudprovider.ListNetworksOption) ([]*proto.SecurityGroup, error) { + vpcCli, err := api.NewVPCClient(&opt.CommonOption) if err != nil { blog.Errorf("create VPC client when failed: %v", err) return nil, err diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud/nodemgr.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud/nodemgr.go index 63fa1022be..6e1a9c9b0e 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud/nodemgr.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud/nodemgr.go @@ -410,8 +410,8 @@ func (nm *NodeManager) DescribeKeyPairsByID(keyIDs []string, } // ListKeyPairs describe all ssh keyPairs https://cloud.tencent.com/document/product/213/15699 -func (nm *NodeManager) ListKeyPairs(opt *cloudprovider.CommonOption) ([]*proto.KeyPair, error) { - client, err := api.GetCVMClient(opt) +func (nm *NodeManager) ListKeyPairs(opt *cloudprovider.ListNetworksOption) ([]*proto.KeyPair, error) { + client, err := api.GetCVMClient(&opt.CommonOption) if err != nil { blog.Errorf("create CVM client when ListKeyPairs failed: %v", err) return nil, err @@ -439,6 +439,11 @@ func (nm *NodeManager) ListKeyPairs(opt *cloudprovider.CommonOption) ([]*proto.K return keyPairs, nil } +// GetResourceGroups resource groups list +func (nm *NodeManager) GetResourceGroups(opt *cloudprovider.CommonOption) ([]*proto.ResourceGroupInfo, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + // ListOsImage list image os func (nm *NodeManager) ListOsImage(provider string, opt *cloudprovider.CommonOption) ([]*proto.OsImage, error) { os := make([]*proto.OsImage, 0) diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud/vpcmgr.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud/vpcmgr.go index b70d278e55..c3c0d6d751 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud/vpcmgr.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud/vpcmgr.go @@ -36,8 +36,8 @@ func init() { type VPCManager struct{} // ListVpcs list vpcs -func (c *VPCManager) ListVpcs(vpcID string, opt *cloudprovider.CommonOption) ([]*proto.CloudVpc, error) { - vpcCli, err := api.NewVPCClient(opt) +func (c *VPCManager) ListVpcs(vpcID string, opt *cloudprovider.ListNetworksOption) ([]*proto.CloudVpc, error) { + vpcCli, err := api.NewVPCClient(&opt.CommonOption) if err != nil { blog.Errorf("create VPC client when failed: %v", err) return nil, err @@ -77,9 +77,9 @@ func (c *VPCManager) ListVpcs(vpcID string, opt *cloudprovider.CommonOption) ([] } // ListSubnets list vpc subnets -func (c *VPCManager) ListSubnets(vpcID, zone string, opt *cloudprovider.CommonOption) ([]*proto.Subnet, error) { +func (c *VPCManager) ListSubnets(vpcID, zone string, opt *cloudprovider.ListNetworksOption) ([]*proto.Subnet, error) { blog.Infof("ListSubnets input: vpcID/%s", vpcID) - vpcCli, err := api.NewVPCClient(opt) + vpcCli, err := api.NewVPCClient(&opt.CommonOption) if err != nil { blog.Errorf("create VPC client when failed: %v", err) return nil, err @@ -111,8 +111,8 @@ func (c *VPCManager) ListSubnets(vpcID, zone string, opt *cloudprovider.CommonOp } // ListSecurityGroups list security groups -func (c *VPCManager) ListSecurityGroups(opt *cloudprovider.CommonOption) ([]*proto.SecurityGroup, error) { - vpcCli, err := api.NewVPCClient(opt) +func (c *VPCManager) ListSecurityGroups(opt *cloudprovider.ListNetworksOption) ([]*proto.SecurityGroup, error) { + vpcCli, err := api.NewVPCClient(&opt.CommonOption) if err != nil { blog.Errorf("create VPC client when failed: %v", err) return nil, err diff --git a/bcs-services/bcs-cluster-manager/internal/handler/resource.go b/bcs-services/bcs-cluster-manager/internal/handler/resource.go index 10077dd8a5..39285240f0 100644 --- a/bcs-services/bcs-cluster-manager/internal/handler/resource.go +++ b/bcs-services/bcs-cluster-manager/internal/handler/resource.go @@ -24,6 +24,23 @@ import ( "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/metrics" ) +// GetResourceGroups implements interface cmproto.ClusterManagerServer +func (cm *ClusterManager) GetResourceGroups(ctx context.Context, + req *cmproto.GetResourceGroupsRequest, resp *cmproto.GetResourceGroupsResponse) error { + reqID, err := requestIDFromContext(ctx) + if err != nil { + return err + } + start := time.Now() + ga := cloudresource.NewGetResourceGroupsAction(cm.model) + ga.Handle(ctx, req, resp) + metrics.ReportAPIRequestMetric("GetResourceGroups", "grpc", strconv.Itoa(int(resp.Code)), start) + blog.Infof("reqID: %s, action: GetResourceGroups, req %v, resp.Code %d, resp.Message %s, resp.Data %v", + reqID, req, resp.Code, resp.Message, resp.Data) + blog.V(5).Infof("reqID: %s, action: GetResourceGroups, req %v, resp %v", reqID, req, resp) + return nil +} + // GetCloudRegions implements interface cmproto.ClusterManagerServer func (cm *ClusterManager) GetCloudRegions(ctx context.Context, req *cmproto.GetCloudRegionsRequest, resp *cmproto.GetCloudRegionsResponse) error { diff --git a/bcs-services/bcs-cluster-manager/internal/taskserver/manager.go b/bcs-services/bcs-cluster-manager/internal/taskserver/manager.go index 4fbab3501a..7a7eedd297 100644 --- a/bcs-services/bcs-cluster-manager/internal/taskserver/manager.go +++ b/bcs-services/bcs-cluster-manager/internal/taskserver/manager.go @@ -19,7 +19,7 @@ import ( "sync" "time" - "github.com/RichardKnop/machinery/v2" + machinery "github.com/RichardKnop/machinery/v2" "github.com/RichardKnop/machinery/v2/backends/mongo" "github.com/RichardKnop/machinery/v2/brokers/amqp" "github.com/RichardKnop/machinery/v2/config" diff --git a/bcs-services/bcs-cluster-manager/internal/utils/imageOS.go b/bcs-services/bcs-cluster-manager/internal/utils/imageOS.go index 8cd9409d40..27a7f96b8d 100644 --- a/bcs-services/bcs-cluster-manager/internal/utils/imageOS.go +++ b/bcs-services/bcs-cluster-manager/internal/utils/imageOS.go @@ -169,3 +169,27 @@ var GkeImageOsList = []*proto.OsImage{ Provider: common.PublicImageProvider, }, } + +// AKSImageOsList gke default images +var AKSImageOsList = []*proto.OsImage{ + { + Alias: "", + Arch: "x86_64", + ImageID: "Ubuntu", + OsCustomizeType: "GENERAL", + OsName: "Ubuntu", + SeriesName: "", + Status: "NORMAL", + Provider: common.PublicImageProvider, + }, + { + Alias: "", + Arch: "x86_64", + ImageID: "AzureLinux", + OsCustomizeType: "GENERAL", + OsName: "AzureLinux", + SeriesName: "", + Status: "NORMAL", + Provider: common.PublicImageProvider, + }, +}