Browse Source

提交作业已完成 等待对接

pull/9/head
zw 2 years ago
parent
commit
907e3b2ac6
40 changed files with 2663 additions and 1613 deletions
  1. +19
    -0
      adaptor/PCM-CORE/api/etc/pcmcore-api.yaml
  2. +0
    -4
      adaptor/PCM-CORE/api/etc/slurmcore-api.yaml
  3. +17
    -1
      adaptor/PCM-CORE/api/internal/config/config.go
  4. +4
    -1
      adaptor/PCM-CORE/api/internal/handler/scheduletaskhandler.go
  5. +33
    -8
      adaptor/PCM-CORE/api/internal/logic/scheduletasklogic.go
  6. +16
    -1
      adaptor/PCM-CORE/api/internal/svc/servicecontext.go
  7. +5
    -3
      adaptor/PCM-CORE/api/internal/types/types.go
  8. +5
    -3
      adaptor/PCM-CORE/api/pcm-core.api
  9. +1
    -1
      adaptor/PCM-CORE/api/pcmcore.go
  10. +27
    -0
      adaptor/PCM-CORE/model/dictmodel.go
  11. +117
    -0
      adaptor/PCM-CORE/model/dictmodel_gen.go
  12. +27
    -0
      adaptor/PCM-CORE/model/taskmodel.go
  13. +124
    -0
      adaptor/PCM-CORE/model/taskmodel_gen.go
  14. +5
    -0
      adaptor/PCM-CORE/model/vars.go
  15. +1420
    -1252
      adaptor/PCM-HPC/PCM-AC/rpc/hpcAC/hpcAC.pb.go
  16. +1
    -1
      adaptor/PCM-HPC/PCM-AC/rpc/hpcAC/hpcAC_grpc.pb.go
  17. +2
    -1
      adaptor/PCM-HPC/PCM-AC/rpc/hpcacclient/hpcac.go
  18. +44
    -42
      adaptor/PCM-HPC/PCM-AC/rpc/internal/logic/getjobdetaillogic.go
  19. +2
    -2
      adaptor/PCM-HPC/PCM-AC/rpc/pb/hpcAC.proto
  20. +14
    -0
      adaptor/PCM-HPC/PCM-HPC-CORE/api/etc/hpccore.yaml
  21. +0
    -16
      adaptor/PCM-HPC/PCM-HPC-CORE/api/etc/hpccoreapi.yaml
  22. +3
    -5
      adaptor/PCM-HPC/PCM-HPC-CORE/api/hpccoreapi.go
  23. +6
    -0
      adaptor/PCM-HPC/PCM-HPC-CORE/mq/.gitignore
  24. +40
    -0
      adaptor/PCM-HPC/PCM-HPC-CORE/mq/etc/hpcCore.yaml
  25. +34
    -0
      adaptor/PCM-HPC/PCM-HPC-CORE/mq/hpcCore.go
  26. +24
    -0
      adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/config/config.go
  27. +22
    -0
      adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/listen/kqMqs.go
  28. +41
    -0
      adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/listen/listen.go
  29. +102
    -0
      adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/mqs/kq/ScheduleHpc.go
  30. +38
    -0
      adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/svc/serviceContext.go
  31. +264
    -255
      adaptor/PCM-HPC/PCM-HPC-CORE/rpc/hpcCore/pcm-hpc-core.pb.go
  32. +3
    -5
      adaptor/PCM-HPC/PCM-HPC-CORE/rpc/internal/logic/submitjoblogic.go
  33. +4
    -3
      adaptor/PCM-HPC/PCM-HPC-CORE/rpc/pb/pcm-hpc-core.proto
  34. +1
    -1
      adaptor/PCM-HPC/PCM-HPC-CORE/rpc/pcmhpccore.go
  35. +18
    -0
      common/constant/task.go
  36. +124
    -0
      common/message/message.go
  37. +28
    -0
      common/tool/convert.go
  38. +0
    -7
      common/tool/copier.go
  39. +6
    -1
      go.mod
  40. +22
    -0
      go.sum

+ 19
- 0
adaptor/PCM-CORE/api/etc/pcmcore-api.yaml View File

@@ -0,0 +1,19 @@
Name: slurmcore-api
Host: 0.0.0.0
Port: 8999

#pay success notify order-mq for kq(kafka pub sub)
ScheduleHpcConf:
Brokers:
- 10.101.15.161:9092
HpcTopic: Schedule-Hpc-Topic
CloudTopic: Schedule-Cloud-Topic

DB:
DataSource: root:uJpLd6u-J?HC1@(106.53.150.192:3306)/pcm

Redis:
Host: localhost:6379

Cache:
- Host: localhost:6379

+ 0
- 4
adaptor/PCM-CORE/api/etc/slurmcore-api.yaml View File

@@ -1,4 +0,0 @@
Name: slurmcore-api
Host: 0.0.0.0
Port: 8999
DataSourceName: root:uJpLd6u-J?HC1@(106.53.150.192:3306)/slurm

+ 17
- 1
adaptor/PCM-CORE/api/internal/config/config.go View File

@@ -1,7 +1,23 @@
package config

import "github.com/zeromicro/go-zero/rest"
import (
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/redis"
"github.com/zeromicro/go-zero/rest"
)

type Config struct {
rest.RestConf
ScheduleHpcConf KqConfig
DB struct {
DataSource string
}
Redis redis.RedisConf
Cache cache.CacheConf
}

type KqConfig struct {
Brokers []string
HpcTopic string
CloudTopic string
}

+ 4
- 1
adaptor/PCM-CORE/api/internal/handler/scheduletaskhandler.go View File

@@ -1,6 +1,7 @@
package handler

import (
"PCM/common/tool"
"net/http"

"PCM/adaptor/PCM-CORE/api/internal/logic"
@@ -16,7 +17,9 @@ func scheduleTaskHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
httpx.ErrorCtx(r.Context(), w, err)
return
}

// 解析yaml文件
_, fileHeader, err := r.FormFile("file")
err = tool.Yaml2struct(fileHeader, &req)
l := logic.NewScheduleTaskLogic(r.Context(), svcCtx)
resp, err := l.ScheduleTask(&req)
if err != nil {


+ 33
- 8
adaptor/PCM-CORE/api/internal/logic/scheduletasklogic.go View File

@@ -1,10 +1,14 @@
package logic

import (
"PCM/adaptor/PCM-CORE/model"
"PCM/adaptor/PCM-HPC/PCM-HPC-CORE/rpc/hpccoreclient"
"PCM/common/constant"
"PCM/common/tool"
"context"
"encoding/json"
appv1 "k8s.io/api/apps/v1"
"strconv"

"PCM/adaptor/PCM-CORE/api/internal/svc"
"PCM/adaptor/PCM-CORE/api/internal/types"
@@ -33,11 +37,37 @@ func NewScheduleTaskLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Sche
}

func (l *ScheduleTaskLogic) ScheduleTask(req *types.ScheduleTaskReq) (resp *types.ScheduleTaskResp, err error) {
task := model.Task{
Status: "pending",
Description: req.Description,
Name: req.Name,
}
switch req.Kind {
case "cloud":
cloudTask(req.Metadata)
case "slurm":
SlurmTask(req.Metadata)
task.Type = constant.TASK_TYPE_CLOUD
jsonStr, _ := json.Marshal(req.Metadata)
if err != nil {
return nil, err
}
l.svcCtx.ScheduleCloudClient.Push(string(jsonStr))
case "hpc":
task.Type = constant.TASK_TYPE_HPC
// 保存作业信息到数据库并获取id
result, err := l.svcCtx.TaskModel.Insert(l.ctx, &task)
if err != nil {
return nil, err
}
id, _ := result.LastInsertId()
l.svcCtx.RedisClient.Set(l.ctx, "taskStatus_"+strconv.FormatInt(id, 10), "pending", 0).Result()

// 解析结构体并转换成入参
var submitJobReq *hpccoreclient.SubmitJobReq
tool.Convert(req.Metadata, &submitJobReq)
submitJobReq.TaskId = id
byteArray, _ := json.Marshal(submitJobReq)
l.svcCtx.ScheduleHpcClient.Push(string(byteArray))
case "ai":
task.Type = constant.TASK_TYPE_AI
}

return resp, err
@@ -50,8 +80,3 @@ func cloudTask(metadata interface{}) {
json.Unmarshal(jsonStr, &deployment)
tool.HttpPost("localhost:8082/api/v1/deployments/create", deployment)
}

func SlurmTask(metadata interface{}) {
jsonStr, _ := json.Marshal(metadata)
tool.HttpPost("localhost:8899/submitJob", jsonStr)
}

+ 16
- 1
adaptor/PCM-CORE/api/internal/svc/servicecontext.go View File

@@ -2,14 +2,29 @@ package svc

import (
"PCM/adaptor/PCM-CORE/api/internal/config"
"PCM/adaptor/PCM-CORE/model"
"github.com/go-redis/redis/v8"
"github.com/zeromicro/go-queue/kq"
"github.com/zeromicro/go-zero/core/stores/sqlx"
)

type ServiceContext struct {
Config config.Config
Config config.Config
ScheduleHpcClient *kq.Pusher
RedisClient *redis.Client
ScheduleCloudClient *kq.Pusher
TaskModel model.TaskModel
}

func NewServiceContext(c config.Config) *ServiceContext {
sqlConn := sqlx.NewMysql(c.DB.DataSource)
return &ServiceContext{
Config: c,
RedisClient: redis.NewClient(&redis.Options{
Addr: c.Redis.Host,
}),
TaskModel: model.NewTaskModel(sqlConn, c.Cache),
ScheduleHpcClient: kq.NewPusher(c.ScheduleHpcConf.Brokers, c.ScheduleHpcConf.HpcTopic),
ScheduleCloudClient: kq.NewPusher(c.ScheduleHpcConf.Brokers, c.ScheduleHpcConf.CloudTopic),
}
}

+ 5
- 3
adaptor/PCM-CORE/api/internal/types/types.go View File

@@ -2,9 +2,11 @@
package types

type ScheduleTaskReq struct {
Operate string `yaml:"operate"`
Kind string `yaml:"kind"`
Metadata interface{} `yaml:"metadata"`
Operate string `yaml:"operate"`
Kind string `yaml:"kind"`
Name string `yaml:"name"`
Description string `yaml:"description"`
Metadata interface{} `yaml:"metadata"`
}

type ScheduleTaskResp struct {


+ 5
- 3
adaptor/PCM-CORE/api/pcm-core.api View File

@@ -9,9 +9,11 @@ info(

type (
scheduleTaskReq {
Operate string `yaml:"operate"`
Kind string `yaml:"kind"`
Metadata interface{} `yaml:"metadata"`
Operate string `yaml:"operate"`
Kind string `yaml:"kind"`
Name string `yaml:"name"`
Description string `yaml:"description"`
Metadata interface{} `yaml:"metadata"`
}
scheduleTaskResp {
Code int32 `json:"code"`


adaptor/PCM-CORE/api/slurmcore.go → adaptor/PCM-CORE/api/pcmcore.go View File

@@ -12,7 +12,7 @@ import (
"github.com/zeromicro/go-zero/rest"
)

var configFile = flag.String("f", "adaptor/PCM-CORE/api/etc/slurmcore-api.yaml", "the config file")
var configFile = flag.String("f", "adaptor/PCM-CORE/api/etc/pcmcore-api.yaml", "the config file")

func main() {
flag.Parse()

+ 27
- 0
adaptor/PCM-CORE/model/dictmodel.go View File

@@ -0,0 +1,27 @@
package model

import (
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlx"
)

var _ DictModel = (*customDictModel)(nil)

type (
// DictModel is an interface to be customized, add more methods here,
// and implement the added methods in customDictModel.
DictModel interface {
dictModel
}

customDictModel struct {
*defaultDictModel
}
)

// NewDictModel returns a model for the database table.
func NewDictModel(conn sqlx.SqlConn, c cache.CacheConf) DictModel {
return &customDictModel{
defaultDictModel: newDictModel(conn, c),
}
}

+ 117
- 0
adaptor/PCM-CORE/model/dictmodel_gen.go View File

@@ -0,0 +1,117 @@
// Code generated by goctl. DO NOT EDIT.

package model

import (
"context"
"database/sql"
"fmt"
"strings"

"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlc"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/core/stringx"
)

var (
dictFieldNames = builder.RawFieldNames(&Dict{})
dictRows = strings.Join(dictFieldNames, ",")
dictRowsExpectAutoSet = strings.Join(stringx.Remove(dictFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
dictRowsWithPlaceHolder = strings.Join(stringx.Remove(dictFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"

cachePcmDictIdPrefix = "cache:pcm:dict:id:"
)

type (
dictModel interface {
Insert(ctx context.Context, data *Dict) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*Dict, error)
Update(ctx context.Context, data *Dict) error
Delete(ctx context.Context, id int64) error
}

defaultDictModel struct {
sqlc.CachedConn
table string
}

Dict struct {
Id int64 `db:"id"` // id
DictName string `db:"dict_name"` // 字典名称
DictCode string `db:"dict_code"` // 字典编号
DictValue string `db:"dict_value"` // 字典值
Source string `db:"source"` // 来源
Description sql.NullString `db:"description"` // 描述
CreatedBy sql.NullInt64 `db:"created_by"` // 创建人
CreatedTime sql.NullTime `db:"created_time"` // 创建时间
UpdatedBy sql.NullInt64 `db:"updated_by"` // 更新人
UpdatedTime sql.NullTime `db:"updated_time"` // 更新时间
DeletedFlag int64 `db:"deleted_flag"` // 是否删除(0-否,1-是)
}
)

func newDictModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultDictModel {
return &defaultDictModel{
CachedConn: sqlc.NewConn(conn, c),
table: "`dict`",
}
}

func (m *defaultDictModel) Delete(ctx context.Context, id int64) error {
pcmDictIdKey := fmt.Sprintf("%s%v", cachePcmDictIdPrefix, id)
_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
return conn.ExecCtx(ctx, query, id)
}, pcmDictIdKey)
return err
}

func (m *defaultDictModel) FindOne(ctx context.Context, id int64) (*Dict, error) {
pcmDictIdKey := fmt.Sprintf("%s%v", cachePcmDictIdPrefix, id)
var resp Dict
err := m.QueryRowCtx(ctx, &resp, pcmDictIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", dictRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id)
})
switch err {
case nil:
return &resp, nil
case sqlc.ErrNotFound:
return nil, ErrNotFound
default:
return nil, err
}
}

func (m *defaultDictModel) Insert(ctx context.Context, data *Dict) (sql.Result, error) {
pcmDictIdKey := fmt.Sprintf("%s%v", cachePcmDictIdPrefix, data.Id)
ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, dictRowsExpectAutoSet)
return conn.ExecCtx(ctx, query, data.DictName, data.DictCode, data.DictValue, data.Source, data.Description, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag)
}, pcmDictIdKey)
return ret, err
}

func (m *defaultDictModel) Update(ctx context.Context, data *Dict) error {
pcmDictIdKey := fmt.Sprintf("%s%v", cachePcmDictIdPrefix, data.Id)
_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, dictRowsWithPlaceHolder)
return conn.ExecCtx(ctx, query, data.DictName, data.DictCode, data.DictValue, data.Source, data.Description, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag, data.Id)
}, pcmDictIdKey)
return err
}

func (m *defaultDictModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cachePcmDictIdPrefix, primary)
}

func (m *defaultDictModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", dictRows, m.table)
return conn.QueryRowCtx(ctx, v, query, primary)
}

func (m *defaultDictModel) tableName() string {
return m.table
}

+ 27
- 0
adaptor/PCM-CORE/model/taskmodel.go View File

@@ -0,0 +1,27 @@
package model

import (
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlx"
)

var _ TaskModel = (*customTaskModel)(nil)

type (
// TaskModel is an interface to be customized, add more methods here,
// and implement the added methods in customTaskModel.
TaskModel interface {
taskModel
}

customTaskModel struct {
*defaultTaskModel
}
)

// NewTaskModel returns a model for the database table.
func NewTaskModel(conn sqlx.SqlConn, c cache.CacheConf) TaskModel {
return &customTaskModel{
defaultTaskModel: newTaskModel(conn, c),
}
}

+ 124
- 0
adaptor/PCM-CORE/model/taskmodel_gen.go View File

@@ -0,0 +1,124 @@
// Code generated by goctl. DO NOT EDIT.

package model

import (
"context"
"database/sql"
"fmt"
"strings"

"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlc"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/core/stringx"
)

var (
taskFieldNames = builder.RawFieldNames(&Task{})
taskRows = strings.Join(taskFieldNames, ",")
taskRowsExpectAutoSet = strings.Join(stringx.Remove(taskFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
taskRowsWithPlaceHolder = strings.Join(stringx.Remove(taskFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"

cachePcmTaskIdPrefix = "cache:pcm:task:id:"
)

type (
taskModel interface {
Insert(ctx context.Context, data *Task) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*Task, error)
Update(ctx context.Context, data *Task) error
Delete(ctx context.Context, id int64) error
}

defaultTaskModel struct {
sqlc.CachedConn
table string
}

Task struct {
Id int64 `db:"id"` // id
JobId string `db:"job_id"`
Description string `db:"description"` // 作业描述
Name string `db:"name"` // 作业名称
Type int64 `db:"type"` // 作业类型(1-云算、2-超算、3-智算)
Status string `db:"status"` // 作业状态
Strategy int64 `db:"strategy"` // 策略
SynergyStatus int64 `db:"synergy_status"` // 协同状态(0-未协同、1-已协同)
CardCount int64 `db:"card_count"` // 卡数
StartTime sql.NullTime `db:"start_time"` // 开始运行时间
EndTime sql.NullTime `db:"end_time"` // 结束运行时间
RunningTime int64 `db:"running_time"` // 已运行时间(单位秒)
Result string `db:"result"` // 作业结果
CreatedBy int64 `db:"created_by"` // 创建人
CreatedTime sql.NullTime `db:"created_time"` // 创建时间
UpdatedBy int64 `db:"updated_by"` // 更新人
UpdatedTime sql.NullTime `db:"updated_time"` // 更新时间
DeletedFlag int64 `db:"deleted_flag"` // 是否删除(0-否,1-是)
}
)

func newTaskModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultTaskModel {
return &defaultTaskModel{
CachedConn: sqlc.NewConn(conn, c),
table: "`task`",
}
}

func (m *defaultTaskModel) Delete(ctx context.Context, id int64) error {
pcmTaskIdKey := fmt.Sprintf("%s%v", cachePcmTaskIdPrefix, id)
_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
return conn.ExecCtx(ctx, query, id)
}, pcmTaskIdKey)
return err
}

func (m *defaultTaskModel) FindOne(ctx context.Context, id int64) (*Task, error) {
pcmTaskIdKey := fmt.Sprintf("%s%v", cachePcmTaskIdPrefix, id)
var resp Task
err := m.QueryRowCtx(ctx, &resp, pcmTaskIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", taskRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id)
})
switch err {
case nil:
return &resp, nil
case sqlc.ErrNotFound:
return nil, ErrNotFound
default:
return nil, err
}
}

func (m *defaultTaskModel) Insert(ctx context.Context, data *Task) (sql.Result, error) {
pcmTaskIdKey := fmt.Sprintf("%s%v", cachePcmTaskIdPrefix, data.Id)
ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, taskRowsExpectAutoSet)
return conn.ExecCtx(ctx, query, data.JobId, data.Description, data.Name, data.Type, data.Status, data.Strategy, data.SynergyStatus, data.CardCount, data.StartTime, data.EndTime, data.RunningTime, data.Result, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag)
}, pcmTaskIdKey)
return ret, err
}

func (m *defaultTaskModel) Update(ctx context.Context, data *Task) error {
pcmTaskIdKey := fmt.Sprintf("%s%v", cachePcmTaskIdPrefix, data.Id)
_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, taskRowsWithPlaceHolder)
return conn.ExecCtx(ctx, query, data.JobId, data.Description, data.Name, data.Type, data.Status, data.Strategy, data.SynergyStatus, data.CardCount, data.StartTime, data.EndTime, data.RunningTime, data.Result, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag, data.Id)
}, pcmTaskIdKey)
return err
}

func (m *defaultTaskModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cachePcmTaskIdPrefix, primary)
}

func (m *defaultTaskModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", taskRows, m.table)
return conn.QueryRowCtx(ctx, v, query, primary)
}

func (m *defaultTaskModel) tableName() string {
return m.table
}

+ 5
- 0
adaptor/PCM-CORE/model/vars.go View File

@@ -0,0 +1,5 @@
package model

import "github.com/zeromicro/go-zero/core/stores/sqlx"

var ErrNotFound = sqlx.ErrNotFound

+ 1420
- 1252
adaptor/PCM-HPC/PCM-AC/rpc/hpcAC/hpcAC.pb.go
File diff suppressed because it is too large
View File


+ 1
- 1
adaptor/PCM-HPC/PCM-AC/rpc/hpcAC/hpcAC_grpc.pb.go View File

@@ -1,7 +1,7 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.2.0
// - protoc v3.12.4
// - protoc v3.19.4
// source: hpcAC.proto

package hpcAC


+ 2
- 1
adaptor/PCM-HPC/PCM-AC/rpc/hpcacclient/hpcac.go View File

@@ -22,10 +22,11 @@ type (
FileDataReq = hpcAC.FileDataReq
FileDataResp = hpcAC.FileDataResp
GetJobDetailResp = hpcAC.GetJobDetailResp
HistoryJob = hpcAC.HistoryJob
HistoryJobData = hpcAC.HistoryJobData
HistoryJobDetail = hpcAC.HistoryJobDetail
HistoryJobDetailReq = hpcAC.HistoryJobDetailReq
HistoryJobDetailResp = hpcAC.HistoryJobDetailResp
HistoryJobList = hpcAC.HistoryJobList
Job = hpcAC.Job
JobCore = hpcAC.JobCore
JobDetail = hpcAC.JobDetail


+ 44
- 42
adaptor/PCM-HPC/PCM-AC/rpc/internal/logic/getjobdetaillogic.go View File

@@ -1,15 +1,11 @@
package logic

import (
"context"
"encoding/json"
"io"
"net/http"
"time"

"PCM/adaptor/PCM-HPC/PCM-AC/rpc/hpcAC"
"PCM/adaptor/PCM-HPC/PCM-AC/rpc/internal/svc"
"PCM/adaptor/PCM-HPC/PCM-AC/rpc/internal/util"
"PCM/common/tool"
"context"

"github.com/zeromicro/go-zero/core/logx"
)
@@ -31,40 +27,46 @@ func NewGetJobDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetJ
// GetJobDetail get job detail
func (l *GetJobDetailLogic) GetJobDetail(in *hpcAC.JobDetailReq) (*hpcAC.GetJobDetailResp, error) {
// todo: add your logic here and delete this line
var resp hpcAC.GetJobDetailResp

jobDetailUrl := "/hpc/openapi/v2/jobs/"

jobId := in.JobId

token := util.GetToken()
c := http.Client{Timeout: time.Duration(3) * time.Second}

reqUrl, err := http.NewRequest("GET", "https://api01.hpccube.com:65106/"+jobDetailUrl+jobId, nil)

if err != nil {
return nil, err
}

reqUrl.Header.Add("token", token)

respUrl, err := c.Do(reqUrl)
if err != nil {
return nil, err
}

body, err := io.ReadAll(respUrl.Body)
if err != nil {
return nil, err
}

if err = json.Unmarshal(body, &resp); err != nil {
if resp.Code != "0" {
resp.Data = nil
} else {
return nil, err
}
}

return &resp, nil
//var resp hpcAC.GetJobDetailResp
//
//jobDetailUrl :=
//
//jobId := in.JobId
//
//token := util.GetToken()
//c := http.Client{Timeout: time.Duration(3) * time.Second}
//
//reqUrl, err := http.NewRequest("GET", "https://api01.hpccube.com:65106/"+jobDetailUrl+jobId, nil)
//
//if err != nil {
// return nil, err
//}
//
//reqUrl.Header.Add("token", token)
//
//respUrl, err := c.Do(reqUrl)
//if err != nil {
// return nil, err
//}
//
//body, err := io.ReadAll(respUrl.Body)
//if err != nil {
// return nil, err
//}
//
//if err = json.Unmarshal(body, &resp); err != nil {
// if resp.Code != "0" {
// resp.Data = nil
// } else {
// return nil, err
// }
//}
var resp *hpcAC.GetJobDetailResp
acHttpRequest := tool.GetACHttpRequest()
acHttpRequest.SetHeader(tool.ContentType, tool.ApplicationJson).
SetResult(&resp).
SetHeader("token", util.GetToken()).
Get("https://api01.hpccube.com:65106/hpc/openapi/v2/jobs/" + in.JobId)

return resp, nil
}

+ 2
- 2
adaptor/PCM-HPC/PCM-AC/rpc/pb/hpcAC.proto View File

@@ -127,7 +127,7 @@ message JobDetail{
string job_name = 14; // @gotags: copier:"JobName", json:"jobName"
string job_run_time = 15; // @gotags: copier:"JobRunTime", json:"jobRunTime"
string job_start_time = 16; // @gotags: copier:"JobStartTime", json:"jobStartTime"
string job_status = 17; // @gotags: copier:"JobStatus", json:"jobStatus"
string jobStatus = 17; // @gotags: copier:"JobStatus", json:"jobStatus"
string job_submit_time = 18; // @gotags: copier:"JobSubmitTime", json:"jobSubmitTime"
JobVncSessionInfo job_session_info = 19; // @gotags: copier:"JobVncSessionInfo", json:"jobVncSessionInfo"
string job_manager_id = 20; // @gotags: copier:"JobManagerId", json:"jobmanagerId"
@@ -155,7 +155,7 @@ message JobDetailReq{
message GetJobDetailResp{
string code = 1; // @gotags: copier:"Code", json:"code"
string msg = 2; // @gotags: copier:"Msg", json:"msg"
JobDetail data = 3; // @gotags: copier:"JobDetail", json:"data"
JobDetail data = 3; // @gotags: copier:"data", json:"data"
}
/******************Job Detail End*************************/



+ 14
- 0
adaptor/PCM-HPC/PCM-HPC-CORE/api/etc/hpccore.yaml View File

@@ -0,0 +1,14 @@
Name: hpccore.rpc
ListenOn: 0.0.0.0:2003

#rpc
ACRpcConf:
Endpoints:
- 127.0.0.1:2001
NonBlock: true

#rpc
THRpcConf:
Endpoints:
- 127.0.0.1:2002
NonBlock: true

+ 0
- 16
adaptor/PCM-HPC/PCM-HPC-CORE/api/etc/hpccoreapi.yaml View File

@@ -1,16 +0,0 @@
Name: hpcCoreApi
Host: 0.0.0.0
Port: 8999
DataSourceName: root:uJpLd6u-J?HC1@(106.53.150.192:3306)/slurm

#rpc
ACRpcConf:
Endpoints:
- 127.0.0.1:2001
NonBlock: true

#rpc
THRpcConf:
Endpoints:
- 127.0.0.1:2002
NonBlock: true

+ 3
- 5
adaptor/PCM-HPC/PCM-HPC-CORE/api/hpccoreapi.go View File

@@ -1,18 +1,16 @@
package main

import (
"flag"
"fmt"

"PCM/adaptor/PCM-HPC/PCM-HPC-CORE/api/internal/config"
"PCM/adaptor/PCM-HPC/PCM-HPC-CORE/api/internal/handler"
"PCM/adaptor/PCM-HPC/PCM-HPC-CORE/api/internal/svc"

"flag"
"fmt"
"github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/rest"
)

var configFile = flag.String("f", "adaptor/PCM-HPC/PCM-HPC-CORE/api/etc/hpccoreapi.yaml", "the config file")
var configFile = flag.String("f", "adaptor/PCM-HPC/PCM-HPC-CORE/api/etc/hpccore.yaml", "the config file")

func main() {
flag.Parse()


+ 6
- 0
adaptor/PCM-HPC/PCM-HPC-CORE/mq/.gitignore View File

@@ -0,0 +1,6 @@
#tmp
tmp
tmp/*




+ 40
- 0
adaptor/PCM-HPC/PCM-HPC-CORE/mq/etc/hpcCore.yaml View File

@@ -0,0 +1,40 @@
Name: hpc-core-mq
Host: 0.0.0.0
Port: 3001
Mode: dev


Log:
ServiceName: hpc-mq
Level: error

Redis:
Host: localhost:6379
Cache:
- Host: localhost:6379

#kq
KqConf:
Name: ScheduleHpc
Brokers:
- 10.101.15.161:9092
Group: Schedule-Hpc-group
Topic: Schedule-Hpc-Topic
Offset: first
Consumers: 1
Processors: 1

#rpc
HpcAcConf:
Endpoints:
- 127.0.0.1:2001
NonBlock: true

#rpc
HpcCoreConf:
Endpoints:
- 127.0.0.1:2003
NonBlock: true

DB:
DataSource: root:uJpLd6u-J?HC1@(106.53.150.192:3306)/pcm

+ 34
- 0
adaptor/PCM-HPC/PCM-HPC-CORE/mq/hpcCore.go View File

@@ -0,0 +1,34 @@
package main

import (
"PCM/adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/config"
"PCM/adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/listen"
"flag"

"github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/core/service"
)

var configFile = flag.String("f", "adaptor/PCM-HPC/PCM-HPC-CORE/mq/etc/hpcCore.yaml", "Specify the config file")

func main() {
flag.Parse()
var c config.Config

conf.MustLoad(*configFile, &c)

// log、prometheus、trace、metricsUrl.
if err := c.SetUp(); err != nil {
panic(err)
}

serviceGroup := service.NewServiceGroup()
defer serviceGroup.Stop()

for _, mq := range listen.Mqs(c) {
serviceGroup.Add(mq)
}

serviceGroup.Start()

}

+ 24
- 0
adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/config/config.go View File

@@ -0,0 +1,24 @@
package config

import (
"github.com/zeromicro/go-queue/kq"
"github.com/zeromicro/go-zero/core/service"
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/redis"
"github.com/zeromicro/go-zero/zrpc"
)

type Config struct {
service.ServiceConf

Redis redis.RedisConf
DB struct {
DataSource string
}
// kq : pub sub
KqConf kq.KqConf
Cache cache.CacheConf
// rpc
HpcAcConf zrpc.RpcClientConf
HpcCoreConf zrpc.RpcClientConf
}

+ 22
- 0
adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/listen/kqMqs.go View File

@@ -0,0 +1,22 @@
package listen

import (
"PCM/adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/config"
kqMq "PCM/adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/mqs/kq"
"PCM/adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/svc"
"context"

"github.com/zeromicro/go-queue/kq"
"github.com/zeromicro/go-zero/core/service"
)

// pub sub use kq (kafka)
func KqMqs(c config.Config, ctx context.Context, svcContext *svc.ServiceContext) []service.Service {

return []service.Service{
//Listening for changes in consumption flow status
kq.MustNewQueue(c.KqConf, kqMq.NewScheduleHpcMq(ctx, svcContext)),
//.....
}

}

+ 41
- 0
adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/listen/listen.go View File

@@ -0,0 +1,41 @@
package listen

import (
"PCM/adaptor/PCM-CORE/model"
"PCM/adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/config"
"PCM/adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/svc"
"context"
"github.com/go-redis/redis/v8"
"github.com/zeromicro/go-zero/core/service"
"github.com/zeromicro/go-zero/core/stores/sqlx"
)

// back to all consumers
func Mqs(c config.Config) []service.Service {

svcContext := svc.NewServiceContext(c)
// 启动定时任务
svcContext.Cron.Start()
// 同步字典数据到缓存中
ctx := context.Background()
// 初始化数据
initData(ctx, svcContext.SqlConn, svcContext.RedisClient)
var services []service.Service

//kq :pub sub
services = append(services, KqMqs(c, ctx, svcContext)...)

return services
}

func initData(ctx context.Context, sql sqlx.SqlConn, redisClient *redis.Client) {
// 查询出字典数据列表
var dictList []model.Dict
err := sql.QueryRows(&dictList, "select * from dict")
if err != nil {
return
}
for _, dict := range dictList {
redisClient.Set(ctx, dict.DictValue, dict.DictCode, 0)
}
}

+ 102
- 0
adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/mqs/kq/ScheduleHpc.go View File

@@ -0,0 +1,102 @@
package kq

import (
"PCM/adaptor/PCM-HPC/PCM-AC/rpc/hpcacclient"
"PCM/adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/svc"
"PCM/adaptor/PCM-HPC/PCM-HPC-CORE/rpc/hpccoreclient"
"PCM/common/tool"
"context"
"encoding/json"
"github.com/robfig/cron/v3"
"github.com/zeromicro/go-zero/core/logx"
"strings"
)

/*
*
Listening to the payment flow status change notification message queue
*/
type ScheduleHpcMq struct {
ctx context.Context
svcCtx *svc.ServiceContext
}

func NewScheduleHpcMq(ctx context.Context, svcCtx *svc.ServiceContext) *ScheduleHpcMq {
return &ScheduleHpcMq{
ctx: ctx,
svcCtx: svcCtx,
}
}

func (l *ScheduleHpcMq) Consume(_, val string) error {

var message hpccoreclient.SubmitJobReq
if err := json.Unmarshal([]byte(val), &message); err != nil {
logx.WithContext(l.ctx).Error("PaymentUpdateStatusMq->Consume Unmarshal err : %v , val : %s", err, val)
return err
}

if err := l.execService(message); err != nil {
logx.WithContext(l.ctx).Error("PaymentUpdateStatusMq->execService err : %v , val : %s , message:%+v", err, val, message)
return err
}

return nil
}

func (l *ScheduleHpcMq) execService(message hpccoreclient.SubmitJobReq) error {
// 提交作业到hpc-core
var submitJobReq *hpccoreclient.SubmitJobReq
tool.Convert(message, &submitJobReq)
job, _ := l.svcCtx.HpcCoreRpc.SubmitJob(l.ctx, submitJobReq)
// 启动定时任务查询作业状态
if job != nil {
go l.addTaskCron(job.Data, submitJobReq.TaskId)
}
return nil
}

func (l *ScheduleHpcMq) addTaskCron(jobId string, taskId int64) {
// 创建定时任务
entryId, err := l.addCron(jobId, taskId)
if err != nil {
return
}
// 将定时任务id缓存到redis 便于停止定时任务
l.svcCtx.RedisClient.Set(l.ctx, "taskCron_"+tool.Int64ToString(taskId), entryId, 0)
}

func (l *ScheduleHpcMq) addCron(jobId string, taskId int64) (string, error) {
entryID, err := l.svcCtx.Cron.AddFunc("0/9 * * * * ?", func() {
// 调用hpc-core获取job详细信息
req := hpcacclient.JobDetailReq{
JobId: jobId,
}
jobDetail, err := l.svcCtx.HpcAcRpc.GetJobDetail(l.ctx, &req)
if err != nil {
return
}
// 对比缓存中的数据
oldStatus, _ := l.svcCtx.RedisClient.Get(l.ctx, "taskStatus_"+tool.Int64ToString(taskId)).Result()
if !strings.EqualFold(oldStatus, jobDetail.Data.JobStatus) {
// job状态与之前不一致 修改redis和db中的数据
l.svcCtx.RedisClient.Set(l.ctx, "taskStatus_"+tool.Int64ToString(taskId), jobDetail.Data.JobStatus, 0)
l.svcCtx.SqlConn.Exec("update task set job_id = ? , status = ? where id = ?", jobId, jobDetail.Data.JobStatus, taskId)
}
// 判断作业是否结束
l.endTask(taskId, jobDetail.Data.JobStatus)
})
return tool.EntryIdToString(entryID), err
}

func (l *ScheduleHpcMq) endTask(taskId int64, currentStatus string) {
// 查询字典中作业状态枚举值
statusDict, _ := l.svcCtx.RedisClient.Get(l.ctx, currentStatus).Result()
if strings.EqualFold(statusDict, "suspended") || strings.EqualFold(statusDict, "completed") || strings.EqualFold(statusDict, "failed") {
// 停止定时任务,清除缓存数据
entryId, _ := l.svcCtx.RedisClient.Get(l.ctx, "taskCron_"+tool.Int64ToString(taskId)).Result()
l.svcCtx.Cron.Remove(cron.EntryID(tool.StringToInt(entryId)))
l.svcCtx.RedisClient.Del(l.ctx, "taskStatus_"+tool.Int64ToString(taskId))
l.svcCtx.RedisClient.Del(l.ctx, "taskCron_"+tool.Int64ToString(taskId))
}
}

+ 38
- 0
adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/svc/serviceContext.go View File

@@ -0,0 +1,38 @@
package svc

import (
"PCM/adaptor/PCM-CORE/model"
"PCM/adaptor/PCM-HPC/PCM-AC/rpc/hpcacclient"
"PCM/adaptor/PCM-HPC/PCM-HPC-CORE/mq/internal/config"
"PCM/adaptor/PCM-HPC/PCM-HPC-CORE/rpc/hpccoreclient"
"github.com/go-redis/redis/v8"
"github.com/robfig/cron/v3"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/zrpc"
)

type ServiceContext struct {
Config config.Config
HpcAcRpc hpcacclient.HpcAC
HpcCoreRpc hpccoreclient.HpcCore
Cron *cron.Cron
RedisClient *redis.Client
TaskModel model.TaskModel
DictModel model.DictModel
SqlConn sqlx.SqlConn
}

func NewServiceContext(c config.Config) *ServiceContext {
sqlConn := sqlx.NewMysql(c.DB.DataSource)
return &ServiceContext{
SqlConn: sqlx.NewMysql(c.DB.DataSource),
Cron: cron.New(cron.WithSeconds()),
RedisClient: redis.NewClient(&redis.Options{
Addr: c.Redis.Host,
}),
Config: c,
TaskModel: model.NewTaskModel(sqlConn, c.Cache),
HpcAcRpc: hpcacclient.NewHpcAC(zrpc.MustNewClient(c.HpcAcConf)),
HpcCoreRpc: hpccoreclient.NewHpcCore(zrpc.MustNewClient(c.HpcCoreConf)),
}
}

+ 264
- 255
adaptor/PCM-HPC/PCM-HPC-CORE/rpc/hpcCore/pcm-hpc-core.pb.go View File

@@ -25,9 +25,10 @@ type SubmitJobReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields

Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
ThReq *THSubmitJobReq `protobuf:"bytes,2,opt,name=thReq,proto3" json:"thReq,omitempty"`
AcReq *ACSubmitJobReq `protobuf:"bytes,3,opt,name=acReq,proto3" json:"acReq,omitempty"`
TaskId int64 `protobuf:"varint,1,opt,name=taskId,proto3" json:"taskId,omitempty"` // @gotags: copier:"TaskId"
Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
ThReq *THSubmitJobReq `protobuf:"bytes,3,opt,name=thReq,proto3" json:"thReq,omitempty"`
AcReq *ACSubmitJobReq `protobuf:"bytes,4,opt,name=acReq,proto3" json:"acReq,omitempty"`
}

func (x *SubmitJobReq) Reset() {
@@ -62,6 +63,13 @@ func (*SubmitJobReq) Descriptor() ([]byte, []int) {
return file_pcm_hpc_core_proto_rawDescGZIP(), []int{0}
}

func (x *SubmitJobReq) GetTaskId() int64 {
if x != nil {
return x.TaskId
}
return 0
}

func (x *SubmitJobReq) GetVersion() string {
if x != nil {
return x.Version
@@ -1378,260 +1386,261 @@ var File_pcm_hpc_core_proto protoreflect.FileDescriptor

var file_pcm_hpc_core_proto_rawDesc = []byte{
0x0a, 0x12, 0x70, 0x63, 0x6d, 0x2d, 0x68, 0x70, 0x63, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x88,
0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0xa0,
0x01, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x12,
0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x05, 0x74, 0x68, 0x52,
0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x2e, 0x54, 0x48, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52,
0x65, 0x71, 0x52, 0x05, 0x74, 0x68, 0x52, 0x65, 0x71, 0x12, 0x2e, 0x0a, 0x05, 0x61, 0x63, 0x52,
0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x2e, 0x41, 0x43, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52,
0x65, 0x71, 0x52, 0x05, 0x61, 0x63, 0x52, 0x65, 0x71, 0x22, 0x49, 0x0a, 0x0d, 0x53, 0x75, 0x62,
0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f,
0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10,
0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67,
0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
0x44, 0x61, 0x74, 0x61, 0x22, 0x8f, 0x14, 0x0a, 0x0e, 0x54, 0x48, 0x53, 0x75, 0x62, 0x6d, 0x69,
0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75,
0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e,
0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x74, 0x67, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x74, 0x67, 0x46, 0x72, 0x65, 0x71,
0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x03,
0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12,
0x26, 0x0a, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x5f, 0x70, 0x6f,
0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x52,
0x65, 0x73, 0x70, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x63,
0x5f, 0x73, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x61, 0x6c, 0x6c, 0x6f,
0x63, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x63, 0x18, 0x06, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x04, 0x61, 0x72, 0x67, 0x63, 0x12, 0x22, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x76,
0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x2e, 0x41, 0x72, 0x67, 0x76, 0x52, 0x04, 0x61, 0x72, 0x67, 0x76, 0x12, 0x1b, 0x0a, 0x09,
0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x69, 0x6e, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52,
0x08, 0x61, 0x72, 0x72, 0x61, 0x79, 0x49, 0x6e, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x65, 0x67,
0x69, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x62,
0x65, 0x67, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6b, 0x70, 0x74,
0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x0c, 0x63, 0x6b, 0x70, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x19, 0x0a,
0x08, 0x63, 0x6b, 0x70, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52,
0x07, 0x63, 0x6b, 0x70, 0x74, 0x44, 0x69, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d,
0x65, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65,
0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73,
0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x6f,
0x75, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x70, 0x75, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x18, 0x0e,
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x70, 0x75, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a,
0x0d, 0x63, 0x70, 0x75, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0f,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x70, 0x75, 0x42, 0x69, 0x6e, 0x64, 0x54, 0x79, 0x70,
0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x18,
0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63,
0x79, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x11, 0x20,
0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x0b,
0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x15, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x45, 0x6e, 0x76,
0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f,
0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x76, 0x5f, 0x73, 0x69, 0x7a,
0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x65, 0x6e, 0x76, 0x53, 0x69, 0x7a, 0x65,
0x12, 0x1b, 0x0a, 0x09, 0x65, 0x78, 0x63, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x14, 0x20,
0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1a, 0x0a,
0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52,
0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x72, 0x65,
0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x67, 0x72, 0x65, 0x73, 0x12, 0x19, 0x0a,
0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x6d, 0x65,
0x64, 0x69, 0x61, 0x74, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x69, 0x6d, 0x6d,
0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64,
0x18, 0x19, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x29, 0x0a,
0x11, 0x6b, 0x69, 0x6c, 0x6c, 0x5f, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x66, 0x61,
0x69, 0x6c, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6b, 0x69, 0x6c, 0x6c, 0x4f, 0x6e,
0x4e, 0x6f, 0x64, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x69, 0x63, 0x65,
0x6e, 0x73, 0x65, 0x73, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x69, 0x63, 0x65,
0x6e, 0x73, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x79, 0x70,
0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x79, 0x70,
0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x1d,
0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x69, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x12, 0x19,
0x0a, 0x08, 0x6d, 0x65, 0x6d, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09,
0x52, 0x07, 0x6d, 0x65, 0x6d, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x65, 0x6d,
0x5f, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x42, 0x69, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a,
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
0x65, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x21, 0x20, 0x01,
0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e,
0x69, 0x63, 0x65, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x65, 0x12,
0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x23, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x1b, 0x0a, 0x09,
0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x08, 0x6f, 0x70, 0x65, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x74, 0x68,
0x65, 0x72, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6f,
0x74, 0x68, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x6f, 0x76, 0x65, 0x72,
0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6f, 0x76,
0x65, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74,
0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72,
0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5f,
0x73, 0x69, 0x7a, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x6e,
0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74,
0x79, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74,
0x79, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x2a, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x71,
0x6f, 0x73, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x71, 0x6f, 0x73, 0x12, 0x1b, 0x0a,
0x09, 0x72, 0x65, 0x73, 0x70, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09,
0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65,
0x71, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72,
0x65, 0x71, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65,
0x75, 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x75,
0x65, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x30, 0x20,
0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73,
0x68, 0x61, 0x72, 0x65, 0x64, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x68, 0x61,
0x72, 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x73, 0x70, 0x61, 0x6e, 0x6b, 0x5f, 0x6a, 0x6f, 0x62,
0x5f, 0x65, 0x6e, 0x76, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x0f, 0x73, 0x70, 0x61, 0x6e, 0x6b, 0x4a, 0x6f, 0x62, 0x45, 0x6e, 0x76, 0x53, 0x69, 0x7a, 0x65,
0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x18, 0x33, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x44, 0x69, 0x73, 0x74, 0x12, 0x1d, 0x0a,
0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08,
0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07,
0x74, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f,
0x69, 0x64, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64,
0x12, 0x24, 0x0a, 0x0e, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x6e, 0x6f, 0x64,
0x65, 0x73, 0x18, 0x37, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x41, 0x6c,
0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x61, 0x72, 0x6e, 0x5f, 0x73,
0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x38, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x77, 0x61, 0x72,
0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x77, 0x61, 0x72, 0x6e, 0x5f,
0x74, 0x69, 0x6d, 0x65, 0x18, 0x39, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e,
0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x64, 0x69, 0x72,
0x18, 0x3a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x69, 0x72, 0x12,
0x22, 0x0a, 0x0d, 0x63, 0x70, 0x75, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x73, 0x6b,
0x18, 0x3b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x70, 0x75, 0x73, 0x50, 0x65, 0x72, 0x54,
0x61, 0x73, 0x6b, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x70, 0x75, 0x73, 0x18,
0x3c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x43, 0x70, 0x75, 0x73, 0x12, 0x19,
0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x70, 0x75, 0x73, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x07, 0x6d, 0x61, 0x78, 0x43, 0x70, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e,
0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6d, 0x69,
0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x6e, 0x6f,
0x64, 0x65, 0x73, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x4e, 0x6f,
0x64, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x70, 0x65,
0x72, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x40, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x62, 0x6f,
0x61, 0x72, 0x64, 0x73, 0x50, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73,
0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64,
0x18, 0x41, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50,
0x65, 0x72, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x6f, 0x63, 0x6b, 0x65,
0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x42, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x0e, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x4e, 0x6f, 0x64,
0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73,
0x6f, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x43, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x63, 0x6f, 0x72,
0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x74,
0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x18,
0x44, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x50, 0x65,
0x72, 0x43, 0x6f, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x5f,
0x70, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x45, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d,
0x6e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x50, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a,
0x11, 0x6e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x63, 0x6b,
0x65, 0x74, 0x18, 0x46, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x6e, 0x74, 0x61, 0x73, 0x6b, 0x73,
0x50, 0x65, 0x72, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x74, 0x61,
0x73, 0x6b, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x47, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x0d, 0x6e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x50, 0x65, 0x72, 0x43, 0x6f, 0x72,
0x65, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f,
0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x48, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6e, 0x74, 0x61,
0x73, 0x6b, 0x73, 0x50, 0x65, 0x72, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x70,
0x6e, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x70, 0x75, 0x73, 0x18, 0x49, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x09, 0x70, 0x6e, 0x4d, 0x69, 0x6e, 0x43, 0x70, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x70,
0x6e, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x4a, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x0b, 0x70, 0x6e, 0x4d, 0x69, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12,
0x25, 0x0a, 0x0f, 0x70, 0x6e, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x64, 0x69,
0x73, 0x6b, 0x18, 0x4b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x70, 0x6e, 0x4d, 0x69, 0x6e, 0x54,
0x6d, 0x70, 0x44, 0x69, 0x73, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74,
0x18, 0x4c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, 0x16,
0x0a, 0x06, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x18, 0x4d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06,
0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x5f, 0x73, 0x77,
0x69, 0x74, 0x63, 0x68, 0x18, 0x4e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x71, 0x53,
0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x74, 0x64, 0x5f, 0x65, 0x72, 0x72,
0x18, 0x4f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x45, 0x72, 0x72, 0x12, 0x15,
0x0a, 0x06, 0x73, 0x74, 0x64, 0x5f, 0x69, 0x6e, 0x18, 0x50, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
0x73, 0x74, 0x64, 0x49, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x74, 0x64, 0x5f, 0x6f, 0x75, 0x74,
0x18, 0x51, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x4f, 0x75, 0x74, 0x12, 0x20,
0x0a, 0x0b, 0x77, 0x61, 0x69, 0x74, 0x34, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x52, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x0b, 0x77, 0x61, 0x69, 0x74, 0x34, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68,
0x12, 0x14, 0x0a, 0x05, 0x77, 0x63, 0x6b, 0x65, 0x79, 0x18, 0x53, 0x20, 0x01, 0x28, 0x09, 0x52,
0x05, 0x77, 0x63, 0x6b, 0x65, 0x79, 0x22, 0x60, 0x0a, 0x0f, 0x54, 0x48, 0x53, 0x75, 0x62, 0x6d,
0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4d, 0x0a, 0x13, 0x73, 0x75, 0x62,
0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x6d, 0x73, 0x67,
0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x2e, 0x54, 0x48, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x11, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x22, 0x64, 0x0a, 0x13, 0x54, 0x48, 0x53, 0x75,
0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x12,
0x15, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x69,
0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x74, 0x65, 0x70, 0x49, 0x64, 0x12,
0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x1a,
0x0a, 0x04, 0x41, 0x72, 0x67, 0x76, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x76, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, 0x76, 0x22, 0x2f, 0x0a, 0x0b, 0x45, 0x6e,
0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x76,
0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xad, 0x01, 0x0a, 0x0e,
0x41, 0x43, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x12, 0x18,
0x0a, 0x07, 0x61, 0x70, 0x70, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x07, 0x61, 0x70, 0x70, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x6e,
0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x6e, 0x61,
0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x74, 0x72, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61,
0x67, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x73, 0x74, 0x72,
0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x44, 0x12, 0x3d, 0x0a, 0x0d,
0x6d, 0x61, 0x70, 0x41, 0x70, 0x70, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x4d,
0x61, 0x70, 0x41, 0x70, 0x70, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x6d, 0x61,
0x70, 0x41, 0x70, 0x70, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x4b, 0x0a, 0x0f, 0x41,
0x43, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12,
0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f,
0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x03, 0x4d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01,
0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0xeb, 0x04, 0x0a, 0x0d, 0x4d, 0x61, 0x70,
0x41, 0x70, 0x70, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0c, 0x47, 0x41,
0x50, 0x5f, 0x43, 0x4d, 0x44, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0a, 0x47, 0x41, 0x50, 0x43, 0x4d, 0x44, 0x46, 0x49, 0x4c, 0x45, 0x12, 0x1b, 0x0a, 0x09,
0x47, 0x41, 0x50, 0x5f, 0x4e, 0x4e, 0x4f, 0x44, 0x45, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x08, 0x47, 0x41, 0x50, 0x4e, 0x4e, 0x4f, 0x44, 0x45, 0x12, 0x26, 0x0a, 0x0f, 0x47, 0x41, 0x50,
0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x18, 0x03, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0d, 0x47, 0x41, 0x50, 0x4e, 0x4f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x49, 0x4e,
0x47, 0x12, 0x26, 0x0a, 0x0f, 0x47, 0x41, 0x50, 0x5f, 0x53, 0x55, 0x42, 0x4d, 0x49, 0x54, 0x5f,
0x54, 0x59, 0x50, 0x45, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x47, 0x41, 0x50, 0x53,
0x55, 0x42, 0x4d, 0x49, 0x54, 0x54, 0x59, 0x50, 0x45, 0x12, 0x20, 0x0a, 0x0c, 0x47, 0x41, 0x50,
0x5f, 0x4a, 0x4f, 0x42, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0a, 0x47, 0x41, 0x50, 0x4a, 0x4f, 0x42, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x20, 0x0a, 0x0c, 0x47,
0x41, 0x50, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x44, 0x49, 0x52, 0x18, 0x06, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0a, 0x47, 0x41, 0x50, 0x57, 0x4f, 0x52, 0x4b, 0x44, 0x49, 0x52, 0x12, 0x1b, 0x0a,
0x09, 0x47, 0x41, 0x50, 0x5f, 0x51, 0x55, 0x45, 0x55, 0x45, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
0x52, 0x08, 0x47, 0x41, 0x50, 0x51, 0x55, 0x45, 0x55, 0x45, 0x12, 0x1b, 0x0a, 0x09, 0x47, 0x41,
0x50, 0x5f, 0x4e, 0x50, 0x52, 0x4f, 0x43, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x47,
0x41, 0x50, 0x4e, 0x50, 0x52, 0x4f, 0x43, 0x12, 0x17, 0x0a, 0x07, 0x47, 0x41, 0x50, 0x5f, 0x50,
0x50, 0x4e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x47, 0x41, 0x50, 0x50, 0x50, 0x4e,
0x12, 0x19, 0x0a, 0x08, 0x47, 0x41, 0x50, 0x5f, 0x4e, 0x47, 0x50, 0x55, 0x18, 0x0a, 0x20, 0x01,
0x28, 0x09, 0x52, 0x07, 0x47, 0x41, 0x50, 0x4e, 0x47, 0x50, 0x55, 0x12, 0x19, 0x0a, 0x08, 0x47,
0x41, 0x50, 0x5f, 0x4e, 0x44, 0x43, 0x55, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47,
0x41, 0x50, 0x4e, 0x44, 0x43, 0x55, 0x12, 0x1e, 0x0a, 0x0b, 0x47, 0x41, 0x50, 0x5f, 0x4a, 0x4f,
0x42, 0x5f, 0x4d, 0x45, 0x4d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, 0x41, 0x50,
0x4a, 0x4f, 0x42, 0x4d, 0x45, 0x4d, 0x12, 0x22, 0x0a, 0x0d, 0x47, 0x41, 0x50, 0x5f, 0x57, 0x41,
0x4c, 0x4c, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x47,
0x41, 0x50, 0x57, 0x41, 0x4c, 0x4c, 0x54, 0x49, 0x4d, 0x45, 0x12, 0x23, 0x0a, 0x0d, 0x47, 0x41,
0x50, 0x5f, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x53, 0x49, 0x56, 0x45, 0x18, 0x0e, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0c, 0x47, 0x41, 0x50, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x53, 0x49, 0x56, 0x45, 0x12,
0x1f, 0x0a, 0x0b, 0x47, 0x41, 0x50, 0x5f, 0x41, 0x50, 0x50, 0x4e, 0x41, 0x4d, 0x45, 0x18, 0x0f,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x47, 0x41, 0x50, 0x41, 0x50, 0x50, 0x4e, 0x41, 0x4d, 0x45,
0x12, 0x22, 0x0a, 0x0d, 0x47, 0x41, 0x50, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x53, 0x55,
0x42, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x47, 0x41, 0x50, 0x4d, 0x55, 0x4c, 0x54,
0x49, 0x53, 0x55, 0x42, 0x12, 0x27, 0x0a, 0x10, 0x47, 0x41, 0x50, 0x5f, 0x53, 0x54, 0x44, 0x5f,
0x4f, 0x55, 0x54, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d,
0x47, 0x41, 0x50, 0x53, 0x54, 0x44, 0x4f, 0x55, 0x54, 0x46, 0x49, 0x4c, 0x45, 0x12, 0x27, 0x0a,
0x10, 0x47, 0x41, 0x50, 0x5f, 0x53, 0x54, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x5f, 0x46, 0x49, 0x4c,
0x45, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x47, 0x41, 0x50, 0x53, 0x54, 0x44, 0x45,
0x52, 0x52, 0x46, 0x49, 0x4c, 0x45, 0x32, 0x47, 0x0a, 0x07, 0x68, 0x70, 0x63, 0x43, 0x6f, 0x72,
0x65, 0x12, 0x3c, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x16,
0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69,
0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
0x6e, 0x12, 0x2e, 0x0a, 0x05, 0x74, 0x68, 0x52, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x18, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x48, 0x53, 0x75,
0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x52, 0x05, 0x74, 0x68, 0x52, 0x65,
0x71, 0x12, 0x2e, 0x0a, 0x05, 0x61, 0x63, 0x52, 0x65, 0x71, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x18, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x43, 0x53, 0x75,
0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x52, 0x05, 0x61, 0x63, 0x52, 0x65,
0x71, 0x22, 0x49, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65,
0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61,
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x8f, 0x14, 0x0a,
0x0e, 0x54, 0x48, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x12,
0x18, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63,
0x74, 0x67, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61,
0x63, 0x63, 0x74, 0x67, 0x46, 0x72, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x6c, 0x6c, 0x6f,
0x63, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x6c,
0x6c, 0x6f, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x63,
0x5f, 0x72, 0x65, 0x73, 0x70, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x52, 0x65, 0x73, 0x70, 0x50, 0x6f, 0x72, 0x74, 0x12,
0x1b, 0x0a, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x08, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04,
0x61, 0x72, 0x67, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x61, 0x72, 0x67, 0x63,
0x12, 0x22, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x76, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e,
0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x72, 0x67, 0x76, 0x52, 0x04,
0x61, 0x72, 0x67, 0x76, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x69, 0x6e,
0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x72, 0x72, 0x61, 0x79, 0x49, 0x6e,
0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18,
0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65,
0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6b, 0x70, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61,
0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x6b, 0x70, 0x74, 0x49, 0x6e, 0x74,
0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6b, 0x70, 0x74, 0x5f, 0x64, 0x69,
0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6b, 0x70, 0x74, 0x44, 0x69, 0x72,
0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28,
0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f,
0x6e, 0x74, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a,
0x63, 0x6f, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x70,
0x75, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x70,
0x75, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x70, 0x75, 0x5f, 0x62, 0x69, 0x6e,
0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x70,
0x75, 0x42, 0x69, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70,
0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64,
0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64,
0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64,
0x54, 0x69, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d,
0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74,
0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a,
0x08, 0x65, 0x6e, 0x76, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x07, 0x65, 0x6e, 0x76, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x78, 0x63, 0x5f,
0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x63,
0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65,
0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65,
0x73, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x72, 0x65, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52,
0x04, 0x67, 0x72, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69,
0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64,
0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x18, 0x18, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x09, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x12, 0x15,
0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05,
0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x11, 0x6b, 0x69, 0x6c, 0x6c, 0x5f, 0x6f, 0x6e,
0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x0e, 0x6b, 0x69, 0x6c, 0x6c, 0x4f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x46, 0x61, 0x69, 0x6c,
0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x1b, 0x20, 0x01,
0x28, 0x09, 0x52, 0x08, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09,
0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x08, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x69,
0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61,
0x69, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x65, 0x6d, 0x5f, 0x62, 0x69,
0x6e, 0x64, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x42, 0x69, 0x6e,
0x64, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x65, 0x6d, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x74, 0x79,
0x70, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x42, 0x69, 0x6e,
0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x20, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74,
0x77, 0x6f, 0x72, 0x6b, 0x18, 0x21, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77,
0x6f, 0x72, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63, 0x65, 0x18, 0x22, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x74,
0x61, 0x73, 0x6b, 0x73, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x54,
0x61, 0x73, 0x6b, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x6d, 0x6f, 0x64,
0x65, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x4d, 0x6f, 0x64,
0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18,
0x25, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74,
0x12, 0x1e, 0x0a, 0x0a, 0x6f, 0x76, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x26,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6f, 0x76, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20,
0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d,
0x0a, 0x0a, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x28, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a,
0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f,
0x66, 0x69, 0x6c, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66,
0x69, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x71, 0x6f, 0x73, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x09,
0x52, 0x03, 0x71, 0x6f, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x5f, 0x68, 0x6f,
0x73, 0x74, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x48, 0x6f,
0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18,
0x2d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x71, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12,
0x18, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x75, 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x73,
0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73,
0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x30, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x72,
0x69, 0x70, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x18, 0x31, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x73,
0x70, 0x61, 0x6e, 0x6b, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x65, 0x6e, 0x76, 0x5f, 0x73, 0x69, 0x7a,
0x65, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x73, 0x70, 0x61, 0x6e, 0x6b, 0x4a, 0x6f,
0x62, 0x45, 0x6e, 0x76, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b,
0x5f, 0x64, 0x69, 0x73, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x74, 0x61, 0x73,
0x6b, 0x44, 0x69, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6c, 0x69,
0x6d, 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x4c,
0x69, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x69, 0x6e,
0x18, 0x35, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x6e, 0x12,
0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x77, 0x61, 0x69, 0x74,
0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x37, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x41, 0x6c, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1f,
0x0a, 0x0b, 0x77, 0x61, 0x72, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x38, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x0a, 0x77, 0x61, 0x72, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12,
0x1b, 0x0a, 0x09, 0x77, 0x61, 0x72, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x39, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08,
0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x3a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
0x77, 0x6f, 0x72, 0x6b, 0x44, 0x69, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x70, 0x75, 0x73, 0x5f,
0x70, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b,
0x63, 0x70, 0x75, 0x73, 0x50, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x19, 0x0a, 0x08, 0x6d,
0x69, 0x6e, 0x5f, 0x63, 0x70, 0x75, 0x73, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6d,
0x69, 0x6e, 0x43, 0x70, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x70,
0x75, 0x73, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x43, 0x70, 0x75,
0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x3e,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1b,
0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x3f, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x62,
0x6f, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x40,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x50, 0x65, 0x72, 0x4e,
0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70,
0x65, 0x72, 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x41, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f,
0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x12,
0x28, 0x0a, 0x10, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6e,
0x6f, 0x64, 0x65, 0x18, 0x42, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x73, 0x6f, 0x63, 0x6b, 0x65,
0x74, 0x73, 0x50, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x72,
0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x43, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x0e, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x6f, 0x63,
0x6b, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x5f, 0x70,
0x65, 0x72, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x44, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x74,
0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x50, 0x65, 0x72, 0x43, 0x6f, 0x72, 0x65, 0x12, 0x26, 0x0a,
0x0f, 0x6e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x64, 0x65,
0x18, 0x45, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x50, 0x65,
0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x6e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x5f,
0x70, 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x46, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x0f, 0x6e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x50, 0x65, 0x72, 0x53, 0x6f, 0x63, 0x6b, 0x65,
0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f,
0x63, 0x6f, 0x72, 0x65, 0x18, 0x47, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6e, 0x74, 0x61, 0x73,
0x6b, 0x73, 0x50, 0x65, 0x72, 0x43, 0x6f, 0x72, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x74, 0x61,
0x73, 0x6b, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x48, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x50, 0x65, 0x72, 0x42, 0x6f,
0x61, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x70, 0x6e, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x70,
0x75, 0x73, 0x18, 0x49, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x6e, 0x4d, 0x69, 0x6e, 0x43,
0x70, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x6e, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x65,
0x6d, 0x6f, 0x72, 0x79, 0x18, 0x4a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x70, 0x6e, 0x4d, 0x69,
0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x25, 0x0a, 0x0f, 0x70, 0x6e, 0x5f, 0x6d, 0x69,
0x6e, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x18, 0x4b, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x0c, 0x70, 0x6e, 0x4d, 0x69, 0x6e, 0x54, 0x6d, 0x70, 0x44, 0x69, 0x73, 0x6b, 0x12, 0x16,
0x0a, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06,
0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65,
0x18, 0x4d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d,
0x0a, 0x0a, 0x72, 0x65, 0x71, 0x5f, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x4e, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x71, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x17, 0x0a,
0x07, 0x73, 0x74, 0x64, 0x5f, 0x65, 0x72, 0x72, 0x18, 0x4f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
0x73, 0x74, 0x64, 0x45, 0x72, 0x72, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x5f, 0x69, 0x6e,
0x18, 0x50, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x64, 0x49, 0x6e, 0x12, 0x17, 0x0a,
0x07, 0x73, 0x74, 0x64, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x51, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
0x73, 0x74, 0x64, 0x4f, 0x75, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x77, 0x61, 0x69, 0x74, 0x34, 0x73,
0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x52, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x77, 0x61, 0x69,
0x74, 0x34, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x63, 0x6b, 0x65,
0x79, 0x18, 0x53, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x77, 0x63, 0x6b, 0x65, 0x79, 0x22, 0x60,
0x0a, 0x0f, 0x54, 0x48, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73,
0x70, 0x12, 0x4d, 0x0a, 0x13, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d,
0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x48, 0x53, 0x75, 0x62, 0x6d,
0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x11, 0x73,
0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67,
0x22, 0x64, 0x0a, 0x13, 0x54, 0x48, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x15, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x5f, 0x69,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x17,
0x0a, 0x07, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x06, 0x73, 0x74, 0x65, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72,
0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x65, 0x72, 0x72,
0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x1a, 0x0a, 0x04, 0x41, 0x72, 0x67, 0x76, 0x12, 0x12,
0x0a, 0x04, 0x61, 0x72, 0x67, 0x76, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72,
0x67, 0x76, 0x22, 0x2f, 0x0a, 0x0b, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e,
0x74, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d,
0x65, 0x6e, 0x74, 0x22, 0xad, 0x01, 0x0a, 0x0e, 0x41, 0x43, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74,
0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x74, 0x79, 0x70,
0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x74, 0x79, 0x70, 0x65,
0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x74,
0x72, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20,
0x01, 0x28, 0x03, 0x52, 0x0f, 0x73, 0x74, 0x72, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67,
0x65, 0x72, 0x49, 0x44, 0x12, 0x3d, 0x0a, 0x0d, 0x6d, 0x61, 0x70, 0x41, 0x70, 0x70, 0x4a, 0x6f,
0x62, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x41, 0x70, 0x70, 0x4a, 0x6f, 0x62,
0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x41, 0x70, 0x70, 0x4a, 0x6f, 0x62, 0x49,
0x6e, 0x66, 0x6f, 0x22, 0x4b, 0x0a, 0x0f, 0x41, 0x43, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a,
0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73,
0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04,
0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61,
0x22, 0xeb, 0x04, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x41, 0x70, 0x70, 0x4a, 0x6f, 0x62, 0x49, 0x6e,
0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0c, 0x47, 0x41, 0x50, 0x5f, 0x43, 0x4d, 0x44, 0x5f, 0x46, 0x49,
0x4c, 0x45, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x47, 0x41, 0x50, 0x43, 0x4d, 0x44,
0x46, 0x49, 0x4c, 0x45, 0x12, 0x1b, 0x0a, 0x09, 0x47, 0x41, 0x50, 0x5f, 0x4e, 0x4e, 0x4f, 0x44,
0x45, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x47, 0x41, 0x50, 0x4e, 0x4e, 0x4f, 0x44,
0x45, 0x12, 0x26, 0x0a, 0x0f, 0x47, 0x41, 0x50, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54,
0x52, 0x49, 0x4e, 0x47, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x47, 0x41, 0x50, 0x4e,
0x4f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x12, 0x26, 0x0a, 0x0f, 0x47, 0x41, 0x50,
0x5f, 0x53, 0x55, 0x42, 0x4d, 0x49, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x18, 0x04, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0d, 0x47, 0x41, 0x50, 0x53, 0x55, 0x42, 0x4d, 0x49, 0x54, 0x54, 0x59, 0x50,
0x45, 0x12, 0x20, 0x0a, 0x0c, 0x47, 0x41, 0x50, 0x5f, 0x4a, 0x4f, 0x42, 0x5f, 0x4e, 0x41, 0x4d,
0x45, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x47, 0x41, 0x50, 0x4a, 0x4f, 0x42, 0x4e,
0x41, 0x4d, 0x45, 0x12, 0x20, 0x0a, 0x0c, 0x47, 0x41, 0x50, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x5f,
0x44, 0x49, 0x52, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x47, 0x41, 0x50, 0x57, 0x4f,
0x52, 0x4b, 0x44, 0x49, 0x52, 0x12, 0x1b, 0x0a, 0x09, 0x47, 0x41, 0x50, 0x5f, 0x51, 0x55, 0x45,
0x55, 0x45, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x47, 0x41, 0x50, 0x51, 0x55, 0x45,
0x55, 0x45, 0x12, 0x1b, 0x0a, 0x09, 0x47, 0x41, 0x50, 0x5f, 0x4e, 0x50, 0x52, 0x4f, 0x43, 0x18,
0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x47, 0x41, 0x50, 0x4e, 0x50, 0x52, 0x4f, 0x43, 0x12,
0x17, 0x0a, 0x07, 0x47, 0x41, 0x50, 0x5f, 0x50, 0x50, 0x4e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09,
0x52, 0x06, 0x47, 0x41, 0x50, 0x50, 0x50, 0x4e, 0x12, 0x19, 0x0a, 0x08, 0x47, 0x41, 0x50, 0x5f,
0x4e, 0x47, 0x50, 0x55, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x41, 0x50, 0x4e,
0x47, 0x50, 0x55, 0x12, 0x19, 0x0a, 0x08, 0x47, 0x41, 0x50, 0x5f, 0x4e, 0x44, 0x43, 0x55, 0x18,
0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x41, 0x50, 0x4e, 0x44, 0x43, 0x55, 0x12, 0x1e,
0x0a, 0x0b, 0x47, 0x41, 0x50, 0x5f, 0x4a, 0x4f, 0x42, 0x5f, 0x4d, 0x45, 0x4d, 0x18, 0x0c, 0x20,
0x01, 0x28, 0x09, 0x52, 0x09, 0x47, 0x41, 0x50, 0x4a, 0x4f, 0x42, 0x4d, 0x45, 0x4d, 0x12, 0x22,
0x0a, 0x0d, 0x47, 0x41, 0x50, 0x5f, 0x57, 0x41, 0x4c, 0x4c, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x18,
0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x47, 0x41, 0x50, 0x57, 0x41, 0x4c, 0x4c, 0x54, 0x49,
0x4d, 0x45, 0x12, 0x23, 0x0a, 0x0d, 0x47, 0x41, 0x50, 0x5f, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x53,
0x49, 0x56, 0x45, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x47, 0x41, 0x50, 0x45, 0x58,
0x43, 0x4c, 0x55, 0x53, 0x49, 0x56, 0x45, 0x12, 0x1f, 0x0a, 0x0b, 0x47, 0x41, 0x50, 0x5f, 0x41,
0x50, 0x50, 0x4e, 0x41, 0x4d, 0x45, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x47, 0x41,
0x50, 0x41, 0x50, 0x50, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x22, 0x0a, 0x0d, 0x47, 0x41, 0x50, 0x5f,
0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x53, 0x55, 0x42, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0b, 0x47, 0x41, 0x50, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x53, 0x55, 0x42, 0x12, 0x27, 0x0a, 0x10,
0x47, 0x41, 0x50, 0x5f, 0x53, 0x54, 0x44, 0x5f, 0x4f, 0x55, 0x54, 0x5f, 0x46, 0x49, 0x4c, 0x45,
0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x47, 0x41, 0x50, 0x53, 0x54, 0x44, 0x4f, 0x55,
0x54, 0x46, 0x49, 0x4c, 0x45, 0x12, 0x27, 0x0a, 0x10, 0x47, 0x41, 0x50, 0x5f, 0x53, 0x54, 0x44,
0x5f, 0x45, 0x52, 0x52, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0d, 0x47, 0x41, 0x50, 0x53, 0x54, 0x44, 0x45, 0x52, 0x52, 0x46, 0x49, 0x4c, 0x45, 0x32, 0x47,
0x0a, 0x07, 0x68, 0x70, 0x63, 0x43, 0x6f, 0x72, 0x65, 0x12, 0x3c, 0x0a, 0x09, 0x53, 0x75, 0x62,
0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x16, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x1a, 0x17,
0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74,
0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x42,
0x0a, 0x5a, 0x08, 0x2f, 0x68, 0x70, 0x63, 0x43, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x33,
0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0a, 0x5a, 0x08, 0x2f, 0x68, 0x70, 0x63, 0x43,
0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (


+ 3
- 5
adaptor/PCM-HPC/PCM-HPC-CORE/rpc/internal/logic/submitjoblogic.go View File

@@ -37,11 +37,9 @@ func (l *SubmitJobLogic) SubmitJob(in *hpcCore.SubmitJobReq) (resp *hpcCore.Subm
version := in.Version
switch version {
case "ac":
acReq := in.AcReq
req := &hpcAC.SubmitJobReq{}
err = copier.CopyWithOption(acReq, req, copier.Option{Converters: tool.Converters})
acResp, err := l.svcCtx.ACRpc.SubmitJob(l.ctx, req)

req := hpcAC.SubmitJobReq{}
tool.Convert(in.AcReq, &req)
acResp, err := l.svcCtx.ACRpc.SubmitJob(l.ctx, &req)
if err != nil {
return nil, errors.Wrapf(xerr.NewErrMsg("Failed to submit job to AC"), "Failed to submit job to Shuguang err : %v ,req:%+v", err, req)
}


+ 4
- 3
adaptor/PCM-HPC/PCM-HPC-CORE/rpc/pb/pcm-hpc-core.proto View File

@@ -4,9 +4,10 @@ package template;
option go_package = "/hpcCore";

message SubmitJobReq{
string version = 1;
THSubmitJobReq thReq = 2;
ACSubmitJobReq acReq = 3;
int64 taskId = 1;// @gotags: copier:"TaskId"
string version = 2;
THSubmitJobReq thReq = 3;
ACSubmitJobReq acReq = 4;
}

message SubmitJobResp{


+ 1
- 1
adaptor/PCM-HPC/PCM-HPC-CORE/rpc/pcmhpccore.go View File

@@ -16,7 +16,7 @@ import (
"google.golang.org/grpc/reflection"
)

var configFile = flag.String("f", "etc/pcmhpccore.yaml", "the config file")
var configFile = flag.String("f", "adaptor/PCM-HPC/PCM-HPC-CORE/api/etc/hpccore.yaml", "the config file")

func main() {
flag.Parse()


+ 18
- 0
common/constant/task.go View File

@@ -0,0 +1,18 @@
package constant

// 任务类型
const (
TASK_TYPE_CLOUD = 1
TASK_TYPE_HPC = 2
TASK_TYPE_AI = 3
)

// 任务状态
const (
TASK_STATUS_SAVED = 1
TASK_STATUS_INIT = 2
TASK_STATUS_RUNNING = 3
TASK_STATUS_FAILED = 4
TASK_STATUS_END = 5
TASK_STATUS_UNKNOW = 6
)

+ 124
- 0
common/message/message.go View File

@@ -0,0 +1,124 @@
// KqMessage
package message

// Hpc-ac
type HpcSubmitMessage struct {
TaskId int64 `json:"taskId"`
SlurmVersion string `json:"slurmVersion"`
Apptype string `json:"apptype,optional"`
Appname string `json:"appname,optional"`
StrJobManagerID int64 `json:"strJobManagerID,optional"`
MapAppJobInfo MapAppJobInfo `json:"mapAppJobInfo,optional"`
Account string `json:"account,optional"` //
Acctg_freq string `json:"acctg_freq,optional"`
Alloc_node string `json:"alloc_node,optional"`
Alloc_resp_port int32 `json:"alloc_resp_port,optional"`
Alloc_sid int32 `json:"alloc_sid,optional"`
Argc int32 `json:"argc,optional"`
Argv []Argv `json:"Argv,optional"`
Array_inx string `json:"array_inx,optional"`
Begin_time int64 `json:"begin_time,optional"`
Ckpt_interval int32 `json:"ckpt_interval,optional"`
Ckpt_dir string `json:"ckpt_dir,optional"`
Comment string `json:"comment,optional"`
Contiguous int32 `json:"contiguous,optional"`
Cpu_bind string `json:"cpu_bind,optional"`
Cpu_bind_type int32 `json:"cpu_bind_type,optional"`
Dependency string `json:"dependency,optional"`
End_time int64 `json:"end_time,optional"`
Environment []Environment `json:"Environment,optional"`
Env_size int32 `json:"env_size,optional"`
Exc_nodes string `json:"exc_nodes,optional"`
Features string `json:"features,optional"`
Gres string `json:"gres,optional"`
Group_id int32 `json:"group_id,optional"`
Immediate int32 `json:"immediate,optional"`
Job_id int32 `json:"job_id,optional"`
Kill_on_node_fail int32 `json:"kill_on_node_fail,optional"`
Licenses string `json:"licenses,optional"`
Mail_type int32 `json:"mail_type,optional"`
Mail_user string `json:"mail_user,optional"`
Mem_bind string `json:"mem_bind,optional"`
Mem_bind_type int32 `json:"mem_bind_type,optional"`
Name string `json:"name,optional"` //
Network string `json:"network,optional"`
Nice int32 `json:"nice,optional"`
Num_tasks int32 `json:"num_tasks,optional"`
Open_mode int32 `json:"open_mode,optional"`
Other_port int32 `json:"other_port,optional"`
Overcommit int32 `json:"overcommit,optional"`
Partition string `json:"partition,optional"`
Plane_size int32 `json:"plane_size,optional"`
Priority int32 `json:"priority,optional"`
Profile int32 `json:"profile,optional"`
Qos string `json:"qos,optional"`
Resp_host string `json:"resp_host,optional"`
Req_nodes string `json:"req_nodes,optional"`
Requeue int32 `json:"requeue,optional"`
Reservation string `json:"reservation,optional"`
Script string `json:"script,optional"` //
Shared int32 `json:"shared,optional"`
Spank_job_env_size int32 `json:"spank_job_env_size,optional"`
Task_dist int32 `json:"task_dist,optional"`
Time_limit int32 `json:"time_limit,optional"`
Time_min int32 `json:"time_min,optional"`
User_id int32 `json:"user_id,optional"` //
Wait_all_nodes int32 `json:"wait_all_nodes,optional"`
Warn_signal int32 `json:"warn_signal,optional"`
Warn_time int32 `json:"warn_time,optional"`
Work_dir string `json:"work_dir,optional"`
Cpus_per_task int32 `json:"cpus_per_task,optional"`
Min_cpus int32 `json:"min_cpus,optional"` //
Max_cpus int32 `json:"max_cpus,optional"`
Min_nodes int32 `json:"min_nodes,optional"`
Max_nodes int32 `json:"max_nodes,optional"`
Boards_per_node int32 `json:"boards_per_node,optional"`
Sockets_per_board int32 `json:"sockets_per_board,optional"`
Sockets_per_node int32 `json:"sockets_per_node,optional"`
Cores_per_socket int32 `json:"cores_per_socket,optional"`
Threads_per_core int32 `json:"threads_per_core,optional"`
Ntasks_per_node int32 `json:"ntasks_per_node,optional"`
Ntasks_per_socket int32 `json:"ntasks_per_socket,optional"`
Ntasks_per_core int32 `json:"ntasks_per_core,optional"`
Ntasks_per_board int32 `json:"ntasks_per_board,optional"`
Pn_min_cpus int32 `json:"pn_min_cpus,optional"`
Pn_min_memory int32 `json:"pn_min_memory,optional"`
Pn_min_tmp_disk int32 `json:"pn_min_tmp_disk,optional"`
Reboot int32 `json:"reboot,optional"`
Rotate int32 `json:"rotate,optional"`
Req_switch int32 `json:"req_switch,optional"`
Std_err string `json:"std_err,optional"`
Std_in string `json:"std_in,optional"`
Std_out string `json:"std_out,optional"`
Wait4switch int32 `json:"wait4switch,optional"`
Wckey string `json:"wckey,optional"`
}

type Argv struct {
Argv string `json:"argv,optional"`
}

type Environment struct {
Environment string `json:"environment,optional"`
}

type MapAppJobInfo struct {
GAP_CMD_FILE string `json:"GAP_CMD_FILE"` //命令行内容
GAP_NNODE string `json:"GAP_NNODE"` //节点个数(当指定该参数时,GAP_NODE_STRING必须为"")
GAP_NODE_STRING string `json:"GAP_NODE_STRING,optional"` //指定节点(当指定该参数时,GAP_NNODE必须为"")
GAP_SUBMIT_TYPE string `json:"GAP_SUBMIT_TYPE"` //cmd(命令行模式)
GAP_JOB_NAME string `json:"GAP_JOB_NAME"` //作业名称
GAP_WORK_DIR string `json:"GAP_WORK_DIR"` //工作路径
GAP_QUEUE string `json:"GAP_QUEUE"` //队列名称
GAP_NPROC string `json:"GAP_NPROC,optional"` //总核心数(GAP_NPROC和GAP_PPN选其一填写)
GAP_PPN string `json:"GAP_PPN,optional"` //CPU核心/节点(GAP_NPROC和GAP_PPN选其一填写)
GAP_NGPU string `json:"GAP_NGPU,optional"` //GPU卡数/节点
GAP_NDCU string `json:"GAP_NDCU,optional"` //DCU卡数/节点
GAP_JOB_MEM string `json:"GAP_JOB_MEM,optional"` //每个节点内存值,单位为MB/GB
GAP_WALL_TIME string `json:"GAP_WALL_TIME"` //最大运行时长(HH:MM:ss)
GAP_EXCLUSIVE string `json:"GAP_EXCLUSIVE,optional"` // 是否独占节点,1为独占,空为非独占
GAP_APPNAME string `json:"GAP_APPNAME"` //BASE(基础应用),支持填写具体的应用英文名称
GAP_MULTI_SUB string `json:"GAP_MULTI_SUB,optional"` //作业组长度,建议为小于等于50的正整数
GAP_STD_OUT_FILE string `json:"GAP_STD_OUT_FILE"` //工作路径/std.out.%j
GAP_STD_ERR_FILE string `json:"GAP_STD_ERR_FILE"` //工作路径/std.err.%j
}

+ 28
- 0
common/tool/convert.go View File

@@ -0,0 +1,28 @@
package tool

import (
"encoding/json"
"github.com/robfig/cron/v3"
"strconv"
)

// Convert 通过JSON赋值
func Convert(source interface{}, target interface{}) {
jsonByte, _ := json.Marshal(source)
json.Unmarshal(jsonByte, &target)
}

// Int64ToString int64转string
func Int64ToString(value int64) string {
return strconv.FormatInt(value, 10)
}

// EntryIdToString EntryID转string
func EntryIdToString(id cron.EntryID) string {
return strconv.Itoa(int(id))
}

func StringToInt(value string) int {
intValue, _ := strconv.Atoi(value)
return intValue
}

+ 0
- 7
common/tool/copier.go View File

@@ -1,7 +1,6 @@
package tool

import (
"encoding/json"
"github.com/jinzhu/copier"
"github.com/pkg/errors"
"strconv"
@@ -49,9 +48,3 @@ var Converters = []copier.TypeConverter{
},
},
}

// Convert 通过JSON赋值
func Convert(source interface{}, target interface{}) {
jsonByte, _ := json.Marshal(source)
json.Unmarshal(jsonByte, &target)
}

+ 6
- 1
go.mod View File

@@ -4,11 +4,14 @@ go 1.19

require (
github.com/bitly/go-simplejson v0.5.0
github.com/go-redis/redis/v8 v8.11.5
github.com/go-resty/resty/v2 v2.7.0
github.com/jinzhu/copier v0.3.5
github.com/pkg/errors v0.9.1
github.com/robfig/cron/v3 v3.0.1
github.com/shopspring/decimal v1.3.1
github.com/sony/sonyflake v1.1.0
github.com/zeromicro/go-queue v1.1.8
github.com/zeromicro/go-zero v1.4.4
google.golang.org/grpc v1.50.1
google.golang.org/protobuf v1.28.1
@@ -31,7 +34,6 @@ require (
github.com/felixge/fgprof v0.9.3 // indirect
github.com/go-logr/logr v1.2.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-redis/redis/v8 v8.11.5 // indirect
github.com/go-sql-driver/mysql v1.7.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang-jwt/jwt/v4 v4.4.3 // indirect
@@ -46,6 +48,7 @@ require (
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.15.9 // indirect
github.com/mattn/go-colorable v0.1.9 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
@@ -53,10 +56,12 @@ require (
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/openzipkin/zipkin-go v0.4.0 // indirect
github.com/pelletier/go-toml/v2 v2.0.6 // indirect
github.com/pierrec/lz4/v4 v4.1.15 // indirect
github.com/prometheus/client_golang v1.13.0 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common v0.37.0 // indirect
github.com/prometheus/procfs v0.8.0 // indirect
github.com/segmentio/kafka-go v0.4.38 // indirect
github.com/spaolacci/murmur3 v1.1.0 // indirect
go.etcd.io/etcd/api/v3 v3.5.5 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.5 // indirect


+ 22
- 0
go.sum View File

@@ -387,10 +387,12 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRF
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a h1:HbKu58rmZpUGpz5+4FfNmIU+FmZg2P3Xaj2v2bfNWmk=
github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
github.com/alicebob/miniredis/v2 v2.23.1/go.mod h1:84TWKZlxYkfgMucPBf5SOQBYJceZeQRFIaQgNMiCX6Q=
github.com/alicebob/miniredis/v2 v2.30.0 h1:uA3uhDbCxfO9+DI/DuGeAMr9qI+noVWwGPNTFuKID5M=
github.com/alicebob/miniredis/v2 v2.30.0/go.mod h1:84TWKZlxYkfgMucPBf5SOQBYJceZeQRFIaQgNMiCX6Q=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
github.com/beanstalkd/go-beanstalk v0.2.0/go.mod h1:/G8YTyChOtpOArwLTQPY1CHB+i212+av35bkPXXj56Y=
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
@@ -465,6 +467,7 @@ github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWo
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fullstorydev/grpcurl v1.8.7/go.mod h1:pVtM4qe3CMoLaIzYS8uvTuDj2jVYmXqMUkZeijnXp/E=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
@@ -638,6 +641,7 @@ github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+
github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ=
github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E=
github.com/jhump/protoreflect v1.12.0/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI=
github.com/jhump/protoreflect v1.14.0/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI=
github.com/jhump/protoreflect v1.14.1/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI=
github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg=
github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
@@ -660,6 +664,8 @@ github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY=
github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
@@ -732,6 +738,8 @@ github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0=
github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -769,9 +777,13 @@ github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0ua
github.com/rabbitmq/amqp091-go v1.1.0/go.mod h1:ogQDLSOACsLPsIq0NpbtiifNZi2YOz0VTJ0kHRghqbM=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/segmentio/kafka-go v0.4.38 h1:iQdOBbUSdfuYlFpvjuALgj7N6DrdPA0HfB4AhREOdtg=
github.com/segmentio/kafka-go v0.4.38/go.mod h1:ikyuGon/60MN/vXFgykf7Zm8P5Be49gJU6vezwjnnhU=
github.com/shirou/gopsutil v2.19.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
@@ -792,6 +804,7 @@ github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzu
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
@@ -816,6 +829,10 @@ github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+
github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM=
github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
github.com/xdg/scram v1.0.5 h1:TuS0RFmt5Is5qm9Tm2SoD89OPqe4IRiFtyFY4iwWXsw=
github.com/xdg/scram v1.0.5/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
github.com/xdg/stringprep v1.0.3 h1:cmL5Enob4W83ti/ZHuZLuKD/xqJfus4fVPwE+/BDm+4=
github.com/xdg/stringprep v1.0.3/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -825,6 +842,9 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64 h1:5mLPGnFdSsevFRFc9q3yYbBkB6tsm4aCwwQV/j1JQAQ=
github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
github.com/zeromicro/go-queue v1.1.8 h1:DSzOYh6tSr0Flw9FqnaBX2fxR0T3vgEwVNItobLwQgE=
github.com/zeromicro/go-queue v1.1.8/go.mod h1:sKF0fI9cKmqY/Y9Pr2aRnt3zllnPglBJ1yl4ByOEhiw=
github.com/zeromicro/go-zero v1.4.3/go.mod h1:UmDjuW7LHd9j7+nnnPBcXF0HLNmjJw6OjHPTlSp7X7Y=
github.com/zeromicro/go-zero v1.4.4 h1:J8M768EVFNtIQJ/GCEsoIQPanxbx2HHT0it7r69U76Y=
github.com/zeromicro/go-zero v1.4.4/go.mod h1:5WSUwtJm0bYdDZ69GlckigcT6D0EyAPbDaX3unbSY/4=
go.etcd.io/etcd/api/v3 v3.5.5 h1:BX4JIbQ7hl7+jL+g+2j5UAr0o1bctCm6/Ct+ArBGkf0=
@@ -890,6 +910,7 @@ golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210920023735-84f357641f63/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -981,6 +1002,7 @@ golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su
golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.0.0-20220706163947-c90051bbdb60/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=


Loading…
Cancel
Save