blob: fc3ed17cce75d82002a458e2cc1f3b3dc9e9371e [file] [log] [blame]
// Copyright 2021 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.27.1
// protoc v4.23.3
// source: testing.proto
package protocol
import (
context "context"
protocol "go.chromium.org/tast/core/framework/protocol"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
durationpb "google.golang.org/protobuf/types/known/durationpb"
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// EntityType represents a type of an entity.
type EntityType int32
const (
EntityType_TEST EntityType = 0
EntityType_FIXTURE EntityType = 1
)
// Enum value maps for EntityType.
var (
EntityType_name = map[int32]string{
0: "TEST",
1: "FIXTURE",
}
EntityType_value = map[string]int32{
"TEST": 0,
"FIXTURE": 1,
}
)
func (x EntityType) Enum() *EntityType {
p := new(EntityType)
*p = x
return p
}
func (x EntityType) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (EntityType) Descriptor() protoreflect.EnumDescriptor {
return file_testing_proto_enumTypes[0].Descriptor()
}
func (EntityType) Type() protoreflect.EnumType {
return &file_testing_proto_enumTypes[0]
}
func (x EntityType) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use EntityType.Descriptor instead.
func (EntityType) EnumDescriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{0}
}
// DownloadMode specifies a strategy to download external data files.
type DownloadMode int32
const (
// BATCH specifies that test bundles should download external data files
// in batch before running tests.
DownloadMode_BATCH DownloadMode = 0
// LAZY specifies that test bundles should download external data files
// as needed between tests.
DownloadMode_LAZY DownloadMode = 1
)
// Enum value maps for DownloadMode.
var (
DownloadMode_name = map[int32]string{
0: "BATCH",
1: "LAZY",
}
DownloadMode_value = map[string]int32{
"BATCH": 0,
"LAZY": 1,
}
)
func (x DownloadMode) Enum() *DownloadMode {
p := new(DownloadMode)
*p = x
return p
}
func (x DownloadMode) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (DownloadMode) Descriptor() protoreflect.EnumDescriptor {
return file_testing_proto_enumTypes[1].Descriptor()
}
func (DownloadMode) Type() protoreflect.EnumType {
return &file_testing_proto_enumTypes[1]
}
func (x DownloadMode) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use DownloadMode.Descriptor instead.
func (DownloadMode) EnumDescriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{1}
}
type StackStatus int32
const (
StackStatus_GREEN StackStatus = 0
StackStatus_RED StackStatus = 1
StackStatus_YELLOW StackStatus = 2
)
// Enum value maps for StackStatus.
var (
StackStatus_name = map[int32]string{
0: "GREEN",
1: "RED",
2: "YELLOW",
}
StackStatus_value = map[string]int32{
"GREEN": 0,
"RED": 1,
"YELLOW": 2,
}
)
func (x StackStatus) Enum() *StackStatus {
p := new(StackStatus)
*p = x
return p
}
func (x StackStatus) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (StackStatus) Descriptor() protoreflect.EnumDescriptor {
return file_testing_proto_enumTypes[2].Descriptor()
}
func (StackStatus) Type() protoreflect.EnumType {
return &file_testing_proto_enumTypes[2]
}
func (x StackStatus) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use StackStatus.Descriptor instead.
func (StackStatus) EnumDescriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{2}
}
type ListEntitiesRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Features *Features `protobuf:"bytes,1,opt,name=features,proto3" json:"features,omitempty"`
// Recursive specifies whether to list entities on target bundles recursively.
Recursive bool `protobuf:"varint,2,opt,name=recursive,proto3" json:"recursive,omitempty"`
}
func (x *ListEntitiesRequest) Reset() {
*x = ListEntitiesRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListEntitiesRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListEntitiesRequest) ProtoMessage() {}
func (x *ListEntitiesRequest) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ListEntitiesRequest.ProtoReflect.Descriptor instead.
func (*ListEntitiesRequest) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{0}
}
func (x *ListEntitiesRequest) GetFeatures() *Features {
if x != nil {
return x.Features
}
return nil
}
func (x *ListEntitiesRequest) GetRecursive() bool {
if x != nil {
return x.Recursive
}
return false
}
type ListEntitiesResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Entities is a list of entities available on the server. The order of
// entities is unspecified.
Entities []*ResolvedEntity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"`
}
func (x *ListEntitiesResponse) Reset() {
*x = ListEntitiesResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListEntitiesResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListEntitiesResponse) ProtoMessage() {}
func (x *ListEntitiesResponse) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ListEntitiesResponse.ProtoReflect.Descriptor instead.
func (*ListEntitiesResponse) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{1}
}
func (x *ListEntitiesResponse) GetEntities() []*ResolvedEntity {
if x != nil {
return x.Entities
}
return nil
}
type GlobalRuntimeVarsRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *GlobalRuntimeVarsRequest) Reset() {
*x = GlobalRuntimeVarsRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GlobalRuntimeVarsRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GlobalRuntimeVarsRequest) ProtoMessage() {}
func (x *GlobalRuntimeVarsRequest) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GlobalRuntimeVarsRequest.ProtoReflect.Descriptor instead.
func (*GlobalRuntimeVarsRequest) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{2}
}
type GlobalRuntimeVar struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
}
func (x *GlobalRuntimeVar) Reset() {
*x = GlobalRuntimeVar{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GlobalRuntimeVar) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GlobalRuntimeVar) ProtoMessage() {}
func (x *GlobalRuntimeVar) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GlobalRuntimeVar.ProtoReflect.Descriptor instead.
func (*GlobalRuntimeVar) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{3}
}
func (x *GlobalRuntimeVar) GetName() string {
if x != nil {
return x.Name
}
return ""
}
type GlobalRuntimeVarsResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Vars []*GlobalRuntimeVar `protobuf:"bytes,1,rep,name=vars,proto3" json:"vars,omitempty"`
}
func (x *GlobalRuntimeVarsResponse) Reset() {
*x = GlobalRuntimeVarsResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GlobalRuntimeVarsResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GlobalRuntimeVarsResponse) ProtoMessage() {}
func (x *GlobalRuntimeVarsResponse) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GlobalRuntimeVarsResponse.ProtoReflect.Descriptor instead.
func (*GlobalRuntimeVarsResponse) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{4}
}
func (x *GlobalRuntimeVarsResponse) GetVars() []*GlobalRuntimeVar {
if x != nil {
return x.Vars
}
return nil
}
type RunTestsRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Types that are assignable to Type:
//
// *RunTestsRequest_RunTestsInit
// *RunTestsRequest_StackOperationResponse
Type isRunTestsRequest_Type `protobuf_oneof:"type"`
}
func (x *RunTestsRequest) Reset() {
*x = RunTestsRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RunTestsRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RunTestsRequest) ProtoMessage() {}
func (x *RunTestsRequest) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RunTestsRequest.ProtoReflect.Descriptor instead.
func (*RunTestsRequest) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{5}
}
func (m *RunTestsRequest) GetType() isRunTestsRequest_Type {
if m != nil {
return m.Type
}
return nil
}
func (x *RunTestsRequest) GetRunTestsInit() *RunTestsInit {
if x, ok := x.GetType().(*RunTestsRequest_RunTestsInit); ok {
return x.RunTestsInit
}
return nil
}
func (x *RunTestsRequest) GetStackOperationResponse() *StackOperationResponse {
if x, ok := x.GetType().(*RunTestsRequest_StackOperationResponse); ok {
return x.StackOperationResponse
}
return nil
}
type isRunTestsRequest_Type interface {
isRunTestsRequest_Type()
}
type RunTestsRequest_RunTestsInit struct {
RunTestsInit *RunTestsInit `protobuf:"bytes,1,opt,name=run_tests_init,json=runTestsInit,proto3,oneof"`
}
type RunTestsRequest_StackOperationResponse struct {
StackOperationResponse *StackOperationResponse `protobuf:"bytes,3,opt,name=stack_operation_response,json=stackOperationResponse,proto3,oneof"`
}
func (*RunTestsRequest_RunTestsInit) isRunTestsRequest_Type() {}
func (*RunTestsRequest_StackOperationResponse) isRunTestsRequest_Type() {}
type RunTestsResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Types that are assignable to Type:
//
// *RunTestsResponse_RunLog
// *RunTestsResponse_EntityStart
// *RunTestsResponse_EntityLog
// *RunTestsResponse_EntityError
// *RunTestsResponse_EntityEnd
// *RunTestsResponse_EntityCopyEnd
// *RunTestsResponse_StackOperation
// *RunTestsResponse_Heartbeat
Type isRunTestsResponse_Type `protobuf_oneof:"type"`
}
func (x *RunTestsResponse) Reset() {
*x = RunTestsResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RunTestsResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RunTestsResponse) ProtoMessage() {}
func (x *RunTestsResponse) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RunTestsResponse.ProtoReflect.Descriptor instead.
func (*RunTestsResponse) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{6}
}
func (m *RunTestsResponse) GetType() isRunTestsResponse_Type {
if m != nil {
return m.Type
}
return nil
}
func (x *RunTestsResponse) GetRunLog() *RunLogEvent {
if x, ok := x.GetType().(*RunTestsResponse_RunLog); ok {
return x.RunLog
}
return nil
}
func (x *RunTestsResponse) GetEntityStart() *EntityStartEvent {
if x, ok := x.GetType().(*RunTestsResponse_EntityStart); ok {
return x.EntityStart
}
return nil
}
func (x *RunTestsResponse) GetEntityLog() *EntityLogEvent {
if x, ok := x.GetType().(*RunTestsResponse_EntityLog); ok {
return x.EntityLog
}
return nil
}
func (x *RunTestsResponse) GetEntityError() *EntityErrorEvent {
if x, ok := x.GetType().(*RunTestsResponse_EntityError); ok {
return x.EntityError
}
return nil
}
func (x *RunTestsResponse) GetEntityEnd() *EntityEndEvent {
if x, ok := x.GetType().(*RunTestsResponse_EntityEnd); ok {
return x.EntityEnd
}
return nil
}
func (x *RunTestsResponse) GetEntityCopyEnd() *EntityCopyEndEvent {
if x, ok := x.GetType().(*RunTestsResponse_EntityCopyEnd); ok {
return x.EntityCopyEnd
}
return nil
}
func (x *RunTestsResponse) GetStackOperation() *StackOperationRequest {
if x, ok := x.GetType().(*RunTestsResponse_StackOperation); ok {
return x.StackOperation
}
return nil
}
func (x *RunTestsResponse) GetHeartbeat() *HeartbeatEvent {
if x, ok := x.GetType().(*RunTestsResponse_Heartbeat); ok {
return x.Heartbeat
}
return nil
}
type isRunTestsResponse_Type interface {
isRunTestsResponse_Type()
}
type RunTestsResponse_RunLog struct {
RunLog *RunLogEvent `protobuf:"bytes,1,opt,name=run_log,json=runLog,proto3,oneof"`
}
type RunTestsResponse_EntityStart struct {
EntityStart *EntityStartEvent `protobuf:"bytes,2,opt,name=entity_start,json=entityStart,proto3,oneof"`
}
type RunTestsResponse_EntityLog struct {
EntityLog *EntityLogEvent `protobuf:"bytes,3,opt,name=entity_log,json=entityLog,proto3,oneof"`
}
type RunTestsResponse_EntityError struct {
EntityError *EntityErrorEvent `protobuf:"bytes,4,opt,name=entity_error,json=entityError,proto3,oneof"`
}
type RunTestsResponse_EntityEnd struct {
EntityEnd *EntityEndEvent `protobuf:"bytes,5,opt,name=entity_end,json=entityEnd,proto3,oneof"`
}
type RunTestsResponse_EntityCopyEnd struct {
EntityCopyEnd *EntityCopyEndEvent `protobuf:"bytes,8,opt,name=entity_copy_end,json=entityCopyEnd,proto3,oneof"`
}
type RunTestsResponse_StackOperation struct {
StackOperation *StackOperationRequest `protobuf:"bytes,6,opt,name=stack_operation,json=stackOperation,proto3,oneof"`
}
type RunTestsResponse_Heartbeat struct {
Heartbeat *HeartbeatEvent `protobuf:"bytes,7,opt,name=heartbeat,proto3,oneof"`
}
func (*RunTestsResponse_RunLog) isRunTestsResponse_Type() {}
func (*RunTestsResponse_EntityStart) isRunTestsResponse_Type() {}
func (*RunTestsResponse_EntityLog) isRunTestsResponse_Type() {}
func (*RunTestsResponse_EntityError) isRunTestsResponse_Type() {}
func (*RunTestsResponse_EntityEnd) isRunTestsResponse_Type() {}
func (*RunTestsResponse_EntityCopyEnd) isRunTestsResponse_Type() {}
func (*RunTestsResponse_StackOperation) isRunTestsResponse_Type() {}
func (*RunTestsResponse_Heartbeat) isRunTestsResponse_Type() {}
type GetDUTInfoRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// ExtraUseFlags lists USE flags that should be treated as being set in
// addition to the ones read from USEFlagsFile when computing the feature sets
// for GetDUTInfoResponse.
ExtraUseFlags []string `protobuf:"bytes,1,rep,name=extra_use_flags,json=extraUseFlags,proto3" json:"extra_use_flags,omitempty"`
// Features specifies whether to get software/hardware features of the DUT.
Features bool `protobuf:"varint,2,opt,name=features,proto3" json:"features,omitempty"`
}
func (x *GetDUTInfoRequest) Reset() {
*x = GetDUTInfoRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GetDUTInfoRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetDUTInfoRequest) ProtoMessage() {}
func (x *GetDUTInfoRequest) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GetDUTInfoRequest.ProtoReflect.Descriptor instead.
func (*GetDUTInfoRequest) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{7}
}
func (x *GetDUTInfoRequest) GetExtraUseFlags() []string {
if x != nil {
return x.ExtraUseFlags
}
return nil
}
func (x *GetDUTInfoRequest) GetFeatures() bool {
if x != nil {
return x.Features
}
return false
}
type GetDUTInfoResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
DutInfo *DUTInfo `protobuf:"bytes,1,opt,name=dut_info,json=dutInfo,proto3" json:"dut_info,omitempty"`
}
func (x *GetDUTInfoResponse) Reset() {
*x = GetDUTInfoResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GetDUTInfoResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetDUTInfoResponse) ProtoMessage() {}
func (x *GetDUTInfoResponse) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GetDUTInfoResponse.ProtoReflect.Descriptor instead.
func (*GetDUTInfoResponse) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{8}
}
func (x *GetDUTInfoResponse) GetDutInfo() *DUTInfo {
if x != nil {
return x.DutInfo
}
return nil
}
type GetSysInfoStateRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *GetSysInfoStateRequest) Reset() {
*x = GetSysInfoStateRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GetSysInfoStateRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetSysInfoStateRequest) ProtoMessage() {}
func (x *GetSysInfoStateRequest) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GetSysInfoStateRequest.ProtoReflect.Descriptor instead.
func (*GetSysInfoStateRequest) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{9}
}
type GetSysInfoStateResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// State contains the collected sysinfo state.
State *SysInfoState `protobuf:"bytes,1,opt,name=state,proto3" json:"state,omitempty"`
}
func (x *GetSysInfoStateResponse) Reset() {
*x = GetSysInfoStateResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GetSysInfoStateResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetSysInfoStateResponse) ProtoMessage() {}
func (x *GetSysInfoStateResponse) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GetSysInfoStateResponse.ProtoReflect.Descriptor instead.
func (*GetSysInfoStateResponse) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{10}
}
func (x *GetSysInfoStateResponse) GetState() *SysInfoState {
if x != nil {
return x.State
}
return nil
}
type CollectSysInfoRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// InitialState describes the pre-testing state of the DUT. It should be
// generated by the GetSysInfoState method executed before tests are run.
InitialState *SysInfoState `protobuf:"bytes,1,opt,name=initial_state,json=initialState,proto3" json:"initial_state,omitempty"`
}
func (x *CollectSysInfoRequest) Reset() {
*x = CollectSysInfoRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CollectSysInfoRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CollectSysInfoRequest) ProtoMessage() {}
func (x *CollectSysInfoRequest) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use CollectSysInfoRequest.ProtoReflect.Descriptor instead.
func (*CollectSysInfoRequest) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{11}
}
func (x *CollectSysInfoRequest) GetInitialState() *SysInfoState {
if x != nil {
return x.InitialState
}
return nil
}
type CollectSysInfoResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// LogDir is the directory which log files were copied to. The caller should
// delete it.
LogDir string `protobuf:"bytes,1,opt,name=log_dir,json=logDir,proto3" json:"log_dir,omitempty"`
// CrashDir is the directory which minidump crash files were copied to. The
// caller should delete it.
CrashDir string `protobuf:"bytes,2,opt,name=crash_dir,json=crashDir,proto3" json:"crash_dir,omitempty"`
}
func (x *CollectSysInfoResponse) Reset() {
*x = CollectSysInfoResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CollectSysInfoResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CollectSysInfoResponse) ProtoMessage() {}
func (x *CollectSysInfoResponse) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[12]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use CollectSysInfoResponse.ProtoReflect.Descriptor instead.
func (*CollectSysInfoResponse) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{12}
}
func (x *CollectSysInfoResponse) GetLogDir() string {
if x != nil {
return x.LogDir
}
return ""
}
func (x *CollectSysInfoResponse) GetCrashDir() string {
if x != nil {
return x.CrashDir
}
return ""
}
type DownloadPrivateBundlesRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// ServiceConfig contains information needed to connect to the service
// provided by infrastructure system.
ServiceConfig *ServiceConfig `protobuf:"bytes,1,opt,name=service_config,json=serviceConfig,proto3" json:"service_config,omitempty"`
// BuildArtifactsUrl is the URL of Google Cloud Storage directory, ending with
// a slash, containing build artifacts for the current ChromeOS image.
// If it is empty, DefaultBuildArtifactsURL in runner.Config is used.
BuildArtifactUrl string `protobuf:"bytes,2,opt,name=build_artifact_url,json=buildArtifactUrl,proto3" json:"build_artifact_url,omitempty"`
}
func (x *DownloadPrivateBundlesRequest) Reset() {
*x = DownloadPrivateBundlesRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DownloadPrivateBundlesRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DownloadPrivateBundlesRequest) ProtoMessage() {}
func (x *DownloadPrivateBundlesRequest) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[13]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DownloadPrivateBundlesRequest.ProtoReflect.Descriptor instead.
func (*DownloadPrivateBundlesRequest) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{13}
}
func (x *DownloadPrivateBundlesRequest) GetServiceConfig() *ServiceConfig {
if x != nil {
return x.ServiceConfig
}
return nil
}
func (x *DownloadPrivateBundlesRequest) GetBuildArtifactUrl() string {
if x != nil {
return x.BuildArtifactUrl
}
return ""
}
type DownloadPrivateBundlesResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *DownloadPrivateBundlesResponse) Reset() {
*x = DownloadPrivateBundlesResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DownloadPrivateBundlesResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DownloadPrivateBundlesResponse) ProtoMessage() {}
func (x *DownloadPrivateBundlesResponse) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[14]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DownloadPrivateBundlesResponse.ProtoReflect.Descriptor instead.
func (*DownloadPrivateBundlesResponse) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{14}
}
type StreamFileRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Name is the name of the file which the content will be streamed.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// Offset is where in the file that streaming should start.
// If the offset is negative, streaming will start at the end of file.
Offset int64 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"`
}
func (x *StreamFileRequest) Reset() {
*x = StreamFileRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *StreamFileRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StreamFileRequest) ProtoMessage() {}
func (x *StreamFileRequest) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[15]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StreamFileRequest.ProtoReflect.Descriptor instead.
func (*StreamFileRequest) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{15}
}
func (x *StreamFileRequest) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *StreamFileRequest) GetOffset() int64 {
if x != nil {
return x.Offset
}
return 0
}
type StreamFileResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Content is the latest content from the log file.
Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
// Offset is where the current file point to after reading the current data.
Offset int64 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"`
}
func (x *StreamFileResponse) Reset() {
*x = StreamFileResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *StreamFileResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StreamFileResponse) ProtoMessage() {}
func (x *StreamFileResponse) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[16]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StreamFileResponse.ProtoReflect.Descriptor instead.
func (*StreamFileResponse) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{16}
}
func (x *StreamFileResponse) GetData() []byte {
if x != nil {
return x.Data
}
return nil
}
func (x *StreamFileResponse) GetOffset() int64 {
if x != nil {
return x.Offset
}
return 0
}
// Entity describes an entity.
type Entity struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Type EntityType `protobuf:"varint,1,opt,name=type,proto3,enum=tast.core.EntityType" json:"type,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
Package string `protobuf:"bytes,3,opt,name=package,proto3" json:"package,omitempty"`
Attributes []string `protobuf:"bytes,4,rep,name=attributes,proto3" json:"attributes,omitempty"`
Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"`
Fixture string `protobuf:"bytes,6,opt,name=fixture,proto3" json:"fixture,omitempty"`
Dependencies *EntityDependencies `protobuf:"bytes,7,opt,name=dependencies,proto3" json:"dependencies,omitempty"`
Contacts *EntityContacts `protobuf:"bytes,8,opt,name=contacts,proto3" json:"contacts,omitempty"`
LegacyData *EntityLegacyData `protobuf:"bytes,9,opt,name=legacy_data,json=legacyData,proto3" json:"legacy_data,omitempty"`
SearchFlags []*StringPair `protobuf:"bytes,10,rep,name=search_flags,json=searchFlags,proto3" json:"search_flags,omitempty"`
TestBedDeps []string `protobuf:"bytes,11,rep,name=test_bed_deps,json=testBedDeps,proto3" json:"test_bed_deps,omitempty"`
Requirements []string `protobuf:"bytes,12,rep,name=requirements,proto3" json:"requirements,omitempty"`
BugComponent string `protobuf:"bytes,13,opt,name=bug_component,json=bugComponent,proto3" json:"bug_component,omitempty"`
LacrosStatus string `protobuf:"bytes,14,opt,name=lacros_status,json=lacrosStatus,proto3" json:"lacros_status,omitempty"`
}
func (x *Entity) Reset() {
*x = Entity{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Entity) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Entity) ProtoMessage() {}
func (x *Entity) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[17]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Entity.ProtoReflect.Descriptor instead.
func (*Entity) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{17}
}
func (x *Entity) GetType() EntityType {
if x != nil {
return x.Type
}
return EntityType_TEST
}
func (x *Entity) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *Entity) GetPackage() string {
if x != nil {
return x.Package
}
return ""
}
func (x *Entity) GetAttributes() []string {
if x != nil {
return x.Attributes
}
return nil
}
func (x *Entity) GetDescription() string {
if x != nil {
return x.Description
}
return ""
}
func (x *Entity) GetFixture() string {
if x != nil {
return x.Fixture
}
return ""
}
func (x *Entity) GetDependencies() *EntityDependencies {
if x != nil {
return x.Dependencies
}
return nil
}
func (x *Entity) GetContacts() *EntityContacts {
if x != nil {
return x.Contacts
}
return nil
}
func (x *Entity) GetLegacyData() *EntityLegacyData {
if x != nil {
return x.LegacyData
}
return nil
}
func (x *Entity) GetSearchFlags() []*StringPair {
if x != nil {
return x.SearchFlags
}
return nil
}
func (x *Entity) GetTestBedDeps() []string {
if x != nil {
return x.TestBedDeps
}
return nil
}
func (x *Entity) GetRequirements() []string {
if x != nil {
return x.Requirements
}
return nil
}
func (x *Entity) GetBugComponent() string {
if x != nil {
return x.BugComponent
}
return ""
}
func (x *Entity) GetLacrosStatus() string {
if x != nil {
return x.LacrosStatus
}
return ""
}
// EntityContacts contains contact information of an entity.
type EntityContacts struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Emails []string `protobuf:"bytes,1,rep,name=emails,proto3" json:"emails,omitempty"`
}
func (x *EntityContacts) Reset() {
*x = EntityContacts{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *EntityContacts) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*EntityContacts) ProtoMessage() {}
func (x *EntityContacts) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[18]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use EntityContacts.ProtoReflect.Descriptor instead.
func (*EntityContacts) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{18}
}
func (x *EntityContacts) GetEmails() []string {
if x != nil {
return x.Emails
}
return nil
}
// EntityDependencies describes dependencies of an entity that need to be
// evaluated before running it.
type EntityDependencies struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
DataFiles []string `protobuf:"bytes,1,rep,name=data_files,json=dataFiles,proto3" json:"data_files,omitempty"`
Services []string `protobuf:"bytes,2,rep,name=services,proto3" json:"services,omitempty"`
}
func (x *EntityDependencies) Reset() {
*x = EntityDependencies{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *EntityDependencies) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*EntityDependencies) ProtoMessage() {}
func (x *EntityDependencies) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[19]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use EntityDependencies.ProtoReflect.Descriptor instead.
func (*EntityDependencies) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{19}
}
func (x *EntityDependencies) GetDataFiles() []string {
if x != nil {
return x.DataFiles
}
return nil
}
func (x *EntityDependencies) GetServices() []string {
if x != nil {
return x.Services
}
return nil
}
// EntityLegacyData contains extra information of an entity.
// Fields in this message are considered legacy because test bundles need to
// send these fields to Tast CLI just because they are made available in
// results.json for compatibility reasons.
type EntityLegacyData struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Timeout *durationpb.Duration `protobuf:"bytes,1,opt,name=timeout,proto3" json:"timeout,omitempty"`
Variables []string `protobuf:"bytes,2,rep,name=variables,proto3" json:"variables,omitempty"`
VariableDeps []string `protobuf:"bytes,3,rep,name=variable_deps,json=variableDeps,proto3" json:"variable_deps,omitempty"`
SoftwareDeps []string `protobuf:"bytes,4,rep,name=software_deps,json=softwareDeps,proto3" json:"software_deps,omitempty"`
Bundle string `protobuf:"bytes,5,opt,name=bundle,proto3" json:"bundle,omitempty"`
}
func (x *EntityLegacyData) Reset() {
*x = EntityLegacyData{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *EntityLegacyData) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*EntityLegacyData) ProtoMessage() {}
func (x *EntityLegacyData) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[20]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use EntityLegacyData.ProtoReflect.Descriptor instead.
func (*EntityLegacyData) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{20}
}
func (x *EntityLegacyData) GetTimeout() *durationpb.Duration {
if x != nil {
return x.Timeout
}
return nil
}
func (x *EntityLegacyData) GetVariables() []string {
if x != nil {
return x.Variables
}
return nil
}
func (x *EntityLegacyData) GetVariableDeps() []string {
if x != nil {
return x.VariableDeps
}
return nil
}
func (x *EntityLegacyData) GetSoftwareDeps() []string {
if x != nil {
return x.SoftwareDeps
}
return nil
}
func (x *EntityLegacyData) GetBundle() string {
if x != nil {
return x.Bundle
}
return ""
}
type RunTestsInit struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
RunConfig *RunConfig `protobuf:"bytes,1,opt,name=run_config,json=runConfig,proto3" json:"run_config,omitempty"`
// Recursive specifies whether to run tests on target bundles recursively.
Recursive bool `protobuf:"varint,2,opt,name=recursive,proto3" json:"recursive,omitempty"`
// DebugPort is the port which the debugger for the test bundle will listen
// on. Note that this field is only used for test runners, and not bundles.
DebugPort uint32 `protobuf:"varint,10,opt,name=debug_port,json=debugPort,proto3" json:"debug_port,omitempty"`
}
func (x *RunTestsInit) Reset() {
*x = RunTestsInit{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RunTestsInit) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RunTestsInit) ProtoMessage() {}
func (x *RunTestsInit) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[21]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RunTestsInit.ProtoReflect.Descriptor instead.
func (*RunTestsInit) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{21}
}
func (x *RunTestsInit) GetRunConfig() *RunConfig {
if x != nil {
return x.RunConfig
}
return nil
}
func (x *RunTestsInit) GetRecursive() bool {
if x != nil {
return x.Recursive
}
return false
}
func (x *RunTestsInit) GetDebugPort() uint32 {
if x != nil {
return x.DebugPort
}
return 0
}
// RunConfig contains parameters needed to run tests in a test bundle.
type RunConfig struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Tests is a list of test names to be run. Wildcards are not allowed.
Tests []string `protobuf:"bytes,1,rep,name=tests,proto3" json:"tests,omitempty"`
Dirs *RunDirectories `protobuf:"bytes,2,opt,name=dirs,proto3" json:"dirs,omitempty"`
Features *Features `protobuf:"bytes,3,opt,name=features,proto3" json:"features,omitempty"`
ServiceConfig *ServiceConfig `protobuf:"bytes,4,opt,name=service_config,json=serviceConfig,proto3" json:"service_config,omitempty"`
DataFileConfig *DataFileConfig `protobuf:"bytes,5,opt,name=data_file_config,json=dataFileConfig,proto3" json:"data_file_config,omitempty"`
StartFixtureState *StartFixtureState `protobuf:"bytes,7,opt,name=start_fixture_state,json=startFixtureState,proto3" json:"start_fixture_state,omitempty"`
// HeartbeatInterval is the interval in seconds at which heartbeat messages
// are sent back periodically from runners (before running bundles) and
// bundles. If this value is not positive, heartbeat messages are not sent.
// TODO(crbug.com/1128259): Remove this field once we fully migrate to gRPC.
HeartbeatInterval *durationpb.Duration `protobuf:"bytes,8,opt,name=heartbeat_interval,json=heartbeatInterval,proto3" json:"heartbeat_interval,omitempty"`
// WaitUntilReady indicates that the test bundle's "ready" function (see
// ReadyFunc) should be executed before any tests are executed.
// TODO(crbug.com/1128259): Remove this field once we fully migrate to gRPC.
WaitUntilReady bool `protobuf:"varint,9,opt,name=wait_until_ready,json=waitUntilReady,proto3" json:"wait_until_ready,omitempty"`
// DebugPort is the port that the bundle will attach the debugger to.
DebugPort uint32 `protobuf:"varint,10,opt,name=debug_port,json=debugPort,proto3" json:"debug_port,omitempty"`
// SystemServiceTimeout is timeout for waiting for system services to be ready
// in seconds. (Default: 120 seconds)
SystemServicesTimeout *durationpb.Duration `protobuf:"bytes,11,opt,name=system_services_timeout,json=systemServicesTimeout,proto3" json:"system_services_timeout,omitempty"`
// Target specifies how the primary target bundle should run.
// This can be nil if no target bundle exists.
Target *RunTargetConfig `protobuf:"bytes,12,opt,name=target,proto3" json:"target,omitempty"`
// MsgTimeout is the duration that the client waits for.
// If no activity is seen even after that the connection is closed.
// (Default: 60 seconds)
MsgTimeout *durationpb.Duration `protobuf:"bytes,13,opt,name=msg_timeout,json=msgTimeout,proto3" json:"msg_timeout,omitempty"`
// MaxSysMsgLogSize is a maximum size of /var/log/messages that Tast will
// copy.
MaxSysMsgLogSize int64 `protobuf:"varint,14,opt,name=max_sys_msg_log_size,json=maxSysMsgLogSize,proto3" json:"max_sys_msg_log_size,omitempty"`
// WaitUntilReadyTimeout set a timeout for the entire ready.Wait function.
WaitUntilReadyTimeout *durationpb.Duration `protobuf:"bytes,15,opt,name=wait_until_ready_timeout,json=waitUntilReadyTimeout,proto3" json:"wait_until_ready_timeout,omitempty"`
}
func (x *RunConfig) Reset() {
*x = RunConfig{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RunConfig) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RunConfig) ProtoMessage() {}
func (x *RunConfig) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[22]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RunConfig.ProtoReflect.Descriptor instead.
func (*RunConfig) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{22}
}
func (x *RunConfig) GetTests() []string {
if x != nil {
return x.Tests
}
return nil
}
func (x *RunConfig) GetDirs() *RunDirectories {
if x != nil {
return x.Dirs
}
return nil
}
func (x *RunConfig) GetFeatures() *Features {
if x != nil {
return x.Features
}
return nil
}
func (x *RunConfig) GetServiceConfig() *ServiceConfig {
if x != nil {
return x.ServiceConfig
}
return nil
}
func (x *RunConfig) GetDataFileConfig() *DataFileConfig {
if x != nil {
return x.DataFileConfig
}
return nil
}
func (x *RunConfig) GetStartFixtureState() *StartFixtureState {
if x != nil {
return x.StartFixtureState
}
return nil
}
func (x *RunConfig) GetHeartbeatInterval() *durationpb.Duration {
if x != nil {
return x.HeartbeatInterval
}
return nil
}
func (x *RunConfig) GetWaitUntilReady() bool {
if x != nil {
return x.WaitUntilReady
}
return false
}
func (x *RunConfig) GetDebugPort() uint32 {
if x != nil {
return x.DebugPort
}
return 0
}
func (x *RunConfig) GetSystemServicesTimeout() *durationpb.Duration {
if x != nil {
return x.SystemServicesTimeout
}
return nil
}
func (x *RunConfig) GetTarget() *RunTargetConfig {
if x != nil {
return x.Target
}
return nil
}
func (x *RunConfig) GetMsgTimeout() *durationpb.Duration {
if x != nil {
return x.MsgTimeout
}
return nil
}
func (x *RunConfig) GetMaxSysMsgLogSize() int64 {
if x != nil {
return x.MaxSysMsgLogSize
}
return 0
}
func (x *RunConfig) GetWaitUntilReadyTimeout() *durationpb.Duration {
if x != nil {
return x.WaitUntilReadyTimeout
}
return nil
}
// RunTargetConfig contains parameters for the primary target bundle to run.
type RunTargetConfig struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Devservers correspnods to config.Devservers.
Devservers []string `protobuf:"bytes,1,rep,name=devservers,proto3" json:"devservers,omitempty"`
// Dirs contains directories local tests use.
Dirs *RunDirectories `protobuf:"bytes,2,opt,name=dirs,proto3" json:"dirs,omitempty"`
// DebugPort is the port that the bundle will attach the debugger to.
DebugPort uint32 `protobuf:"varint,3,opt,name=debug_port,json=debugPort,proto3" json:"debug_port,omitempty"`
// MaxTestFailures specifies maximum test failures allowed.
MaxTestFailures int32 `protobuf:"varint,4,opt,name=max_test_failures,json=maxTestFailures,proto3" json:"max_test_failures,omitempty"`
// Retries is the number of retries for failing tests.
Retries int32 `protobuf:"varint,5,opt,name=retries,proto3" json:"retries,omitempty"`
// Proxy if true indicates that the HTTP_PROXY, HTTPS_PROXY, and NO_PROXY
// environment variables (and their lowercase counterparts) should be
// forwarded to the DUT if set on the host.
Proxy bool `protobuf:"varint,6,opt,name=proxy,proto3" json:"proxy,omitempty"`
// TODO(crbug.com/1128259): Remove this field once we fully migrate to gRPC.
WaitUntilReady bool `protobuf:"varint,7,opt,name=wait_until_ready,json=waitUntilReady,proto3" json:"wait_until_ready,omitempty"`
// MsgTimeout is the duration that the client waits for.
// If no activity is seen even after that the connection is closed.
// (Default: 60 seconds)
MsgTimeout *durationpb.Duration `protobuf:"bytes,8,opt,name=msg_timeout,json=msgTimeout,proto3" json:"msg_timeout,omitempty"`
// SystemServiceTimeout is timeout for waiting for system services to be ready
// in seconds. (Default: 120 seconds)
SystemServicesTimeout *durationpb.Duration `protobuf:"bytes,9,opt,name=system_services_timeout,json=systemServicesTimeout,proto3" json:"system_services_timeout,omitempty"`
// WaitUntilReadyTimeout set a timeout for the entire ready.Wait function.
// (Default: 120 seconds)
WaitUntilReadyTimeout *durationpb.Duration `protobuf:"bytes,10,opt,name=wait_until_ready_timeout,json=waitUntilReadyTimeout,proto3" json:"wait_until_ready_timeout,omitempty"`
// SwarmingTaskID specifies the swarming task ID of the scheduled
// job that run Tast tests.
SwarmingTaskID string `protobuf:"bytes,11,opt,name=SwarmingTaskID,proto3" json:"SwarmingTaskID,omitempty"`
// BuildBucketID specifies the build bucket ID of the scheduled
// job that run Tast tests.
BuildBucketID string `protobuf:"bytes,12,opt,name=BuildBucketID,proto3" json:"BuildBucketID,omitempty"`
}
func (x *RunTargetConfig) Reset() {
*x = RunTargetConfig{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RunTargetConfig) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RunTargetConfig) ProtoMessage() {}
func (x *RunTargetConfig) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[23]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RunTargetConfig.ProtoReflect.Descriptor instead.
func (*RunTargetConfig) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{23}
}
func (x *RunTargetConfig) GetDevservers() []string {
if x != nil {
return x.Devservers
}
return nil
}
func (x *RunTargetConfig) GetDirs() *RunDirectories {
if x != nil {
return x.Dirs
}
return nil
}
func (x *RunTargetConfig) GetDebugPort() uint32 {
if x != nil {
return x.DebugPort
}
return 0
}
func (x *RunTargetConfig) GetMaxTestFailures() int32 {
if x != nil {
return x.MaxTestFailures
}
return 0
}
func (x *RunTargetConfig) GetRetries() int32 {
if x != nil {
return x.Retries
}
return 0
}
func (x *RunTargetConfig) GetProxy() bool {
if x != nil {
return x.Proxy
}
return false
}
func (x *RunTargetConfig) GetWaitUntilReady() bool {
if x != nil {
return x.WaitUntilReady
}
return false
}
func (x *RunTargetConfig) GetMsgTimeout() *durationpb.Duration {
if x != nil {
return x.MsgTimeout
}
return nil
}
func (x *RunTargetConfig) GetSystemServicesTimeout() *durationpb.Duration {
if x != nil {
return x.SystemServicesTimeout
}
return nil
}
func (x *RunTargetConfig) GetWaitUntilReadyTimeout() *durationpb.Duration {
if x != nil {
return x.WaitUntilReadyTimeout
}
return nil
}
func (x *RunTargetConfig) GetSwarmingTaskID() string {
if x != nil {
return x.SwarmingTaskID
}
return ""
}
func (x *RunTargetConfig) GetBuildBucketID() string {
if x != nil {
return x.BuildBucketID
}
return ""
}
// RunDirectories holds several directory paths important for running tests.
type RunDirectories struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// DataDir is the path to the directory containing test data files.
DataDir string `protobuf:"bytes,1,opt,name=data_dir,json=dataDir,proto3" json:"data_dir,omitempty"`
// OutDir is the path to the base directory under which tests should write
// output files.
OutDir string `protobuf:"bytes,2,opt,name=out_dir,json=outDir,proto3" json:"out_dir,omitempty"`
// TempDir is the path to the directory under which temporary files for tests
// are written.
TempDir string `protobuf:"bytes,3,opt,name=temp_dir,json=tempDir,proto3" json:"temp_dir,omitempty"`
}
func (x *RunDirectories) Reset() {
*x = RunDirectories{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RunDirectories) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RunDirectories) ProtoMessage() {}
func (x *RunDirectories) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[24]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RunDirectories.ProtoReflect.Descriptor instead.
func (*RunDirectories) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{24}
}
func (x *RunDirectories) GetDataDir() string {
if x != nil {
return x.DataDir
}
return ""
}
func (x *RunDirectories) GetOutDir() string {
if x != nil {
return x.OutDir
}
return ""
}
func (x *RunDirectories) GetTempDir() string {
if x != nil {
return x.TempDir
}
return ""
}
// ServiceConfig contains configurations of external services available to
// Tast framework and Tast tests.
type ServiceConfig struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Devservers is a list of devserver URLs (e.g. "https://1.2.3.4:5678").
// Devservers are used to download data files from Google Cloud Storage with
// cache. It is ignored if DUT Server is available.
Devservers []string `protobuf:"bytes,1,rep,name=devservers,proto3" json:"devservers,omitempty"`
// TlwServer is an address of a TLW server (e.g. "1.2.3.4:5678").
// When this is set, it takes precedence over Devservers.
// Note: Obsolete.
TlwServer string `protobuf:"bytes,2,opt,name=tlw_server,json=tlwServer,proto3" json:"tlw_server,omitempty"`
// TlwSelfName is a "DUT name" that identifies the current machine.
// It is empty for remote tests.
// Note: Obsolete.
TlwSelfName string `protobuf:"bytes,3,opt,name=tlw_self_name,json=tlwSelfName,proto3" json:"tlw_self_name,omitempty"`
// TlwPrimaryTargetName is a "DUT name" of the primary target.
// It is empty if a primary target doesn't exist.
// Note: Obsolete.
TlwPrimaryTargetName string `protobuf:"bytes,4,opt,name=tlw_primary_target_name,json=tlwPrimaryTargetName,proto3" json:"tlw_primary_target_name,omitempty"`
// DutServer is an address of a DUT server (e.g. "1.2.3.4:5678").
// When this is set, it takes precedence over Devservers.
DutServer string `protobuf:"bytes,5,opt,name=dut_server,json=dutServer,proto3" json:"dut_server,omitempty"`
// UseEphemeralDevserer instructs whether to use ephemeral devserver.
UseEphemeralDevservers bool `protobuf:"varint,6,opt,name=use_ephemeral_devservers,json=useEphemeralDevservers,proto3" json:"use_ephemeral_devservers,omitempty"`
// TastDir used to specify cache directory.
TastDir string `protobuf:"bytes,7,opt,name=tast_dir,json=tastDir,proto3" json:"tast_dir,omitempty"`
// ExtraAllowedBuckets specifies ephemeral devserver's allowed buckets.
ExtraAllowedBuckets []string `protobuf:"bytes,8,rep,name=extra_allowed_buckets,json=extraAllowedBuckets,proto3" json:"extra_allowed_buckets,omitempty"`
// SwarmingTaskID specifies the swarming task ID of the scheduled
// job that run Tast tests.
SwarmingTaskID string `protobuf:"bytes,9,opt,name=SwarmingTaskID,proto3" json:"SwarmingTaskID,omitempty"`
// BuildBucketID specifies the build bucket ID of the scheduled
// job that run Tast tests.
BuildBucketID string `protobuf:"bytes,10,opt,name=BuildBucketID,proto3" json:"BuildBucketID,omitempty"`
}
func (x *ServiceConfig) Reset() {
*x = ServiceConfig{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[25]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ServiceConfig) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ServiceConfig) ProtoMessage() {}
func (x *ServiceConfig) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[25]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ServiceConfig.ProtoReflect.Descriptor instead.
func (*ServiceConfig) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{25}
}
func (x *ServiceConfig) GetDevservers() []string {
if x != nil {
return x.Devservers
}
return nil
}
func (x *ServiceConfig) GetTlwServer() string {
if x != nil {
return x.TlwServer
}
return ""
}
func (x *ServiceConfig) GetTlwSelfName() string {
if x != nil {
return x.TlwSelfName
}
return ""
}
func (x *ServiceConfig) GetTlwPrimaryTargetName() string {
if x != nil {
return x.TlwPrimaryTargetName
}
return ""
}
func (x *ServiceConfig) GetDutServer() string {
if x != nil {
return x.DutServer
}
return ""
}
func (x *ServiceConfig) GetUseEphemeralDevservers() bool {
if x != nil {
return x.UseEphemeralDevservers
}
return false
}
func (x *ServiceConfig) GetTastDir() string {
if x != nil {
return x.TastDir
}
return ""
}
func (x *ServiceConfig) GetExtraAllowedBuckets() []string {
if x != nil {
return x.ExtraAllowedBuckets
}
return nil
}
func (x *ServiceConfig) GetSwarmingTaskID() string {
if x != nil {
return x.SwarmingTaskID
}
return ""
}
func (x *ServiceConfig) GetBuildBucketID() string {
if x != nil {
return x.BuildBucketID
}
return ""
}
// DataFileConfig contains configurations about data files.
type DataFileConfig struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
DownloadMode DownloadMode `protobuf:"varint,1,opt,name=download_mode,json=downloadMode,proto3,enum=tast.core.DownloadMode" json:"download_mode,omitempty"`
// BuildArtifactsUrl is the URL of Google Cloud Storage directory, ending with
// a slash, containing build artifacts for the current ChromeOS image.
BuildArtifactsUrl string `protobuf:"bytes,2,opt,name=build_artifacts_url,json=buildArtifactsUrl,proto3" json:"build_artifacts_url,omitempty"`
}
func (x *DataFileConfig) Reset() {
*x = DataFileConfig{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[26]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DataFileConfig) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DataFileConfig) ProtoMessage() {}
func (x *DataFileConfig) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[26]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DataFileConfig.ProtoReflect.Descriptor instead.
func (*DataFileConfig) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{26}
}
func (x *DataFileConfig) GetDownloadMode() DownloadMode {
if x != nil {
return x.DownloadMode
}
return DownloadMode_BATCH
}
func (x *DataFileConfig) GetBuildArtifactsUrl() string {
if x != nil {
return x.BuildArtifactsUrl
}
return ""
}
// StartFixtureState contains information of a start fixture.
type StartFixtureState struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Name is the name of a start fixture.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// Errors contains errors reported on dependent fixture setup. If it is not
// empty, all fixtures and tests should fail immediately.
Errors []*Error `protobuf:"bytes,2,rep,name=errors,proto3" json:"errors,omitempty"`
}
func (x *StartFixtureState) Reset() {
*x = StartFixtureState{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[27]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *StartFixtureState) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StartFixtureState) ProtoMessage() {}
func (x *StartFixtureState) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[27]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StartFixtureState.ProtoReflect.Descriptor instead.
func (*StartFixtureState) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{27}
}
func (x *StartFixtureState) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *StartFixtureState) GetErrors() []*Error {
if x != nil {
return x.Errors
}
return nil
}
// Error describes details of an error reported by an entity.
type Error struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Reason string `protobuf:"bytes,1,opt,name=reason,proto3" json:"reason,omitempty"`
Location *ErrorLocation `protobuf:"bytes,2,opt,name=location,proto3" json:"location,omitempty"`
}
func (x *Error) Reset() {
*x = Error{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[28]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Error) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Error) ProtoMessage() {}
func (x *Error) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[28]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Error.ProtoReflect.Descriptor instead.
func (*Error) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{28}
}
func (x *Error) GetReason() string {
if x != nil {
return x.Reason
}
return ""
}
func (x *Error) GetLocation() *ErrorLocation {
if x != nil {
return x.Location
}
return nil
}
// ErrorLocation represents a code location where an error was reported.
type ErrorLocation struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
File string `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"`
Line int64 `protobuf:"varint,2,opt,name=line,proto3" json:"line,omitempty"`
Stack string `protobuf:"bytes,3,opt,name=stack,proto3" json:"stack,omitempty"`
}
func (x *ErrorLocation) Reset() {
*x = ErrorLocation{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[29]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ErrorLocation) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ErrorLocation) ProtoMessage() {}
func (x *ErrorLocation) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[29]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ErrorLocation.ProtoReflect.Descriptor instead.
func (*ErrorLocation) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{29}
}
func (x *ErrorLocation) GetFile() string {
if x != nil {
return x.File
}
return ""
}
func (x *ErrorLocation) GetLine() int64 {
if x != nil {
return x.Line
}
return 0
}
func (x *ErrorLocation) GetStack() string {
if x != nil {
return x.Stack
}
return ""
}
// ResolvedEntity is similar to Entity, but contains additional fields computed
// from an original Entity and run time information.
type ResolvedEntity struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Entity *Entity `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"`
// Skips contains reasons why this test should be skipped. If it contains one
// or more reasons, the test should be skipped for unsatisfied dependencies.
// This field can be set only if the entity is a test.
Skip *Skip `protobuf:"bytes,2,opt,name=skip,proto3" json:"skip,omitempty"`
// Hops contains the number of remote connection hops from the current machine
// and the machine serving the entity.
// On the host machine, hops=0 means remote entities (on the host machine) and
// hops=1 means local entities (on the DUT).
Hops int32 `protobuf:"varint,3,opt,name=hops,proto3" json:"hops,omitempty"`
// StartFixtureName is the name of the fixture that needs to be set up
// externally in order to run this entity.
StartFixtureName string `protobuf:"bytes,4,opt,name=start_fixture_name,json=startFixtureName,proto3" json:"start_fixture_name,omitempty"`
}
func (x *ResolvedEntity) Reset() {
*x = ResolvedEntity{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[30]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ResolvedEntity) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ResolvedEntity) ProtoMessage() {}
func (x *ResolvedEntity) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[30]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ResolvedEntity.ProtoReflect.Descriptor instead.
func (*ResolvedEntity) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{30}
}
func (x *ResolvedEntity) GetEntity() *Entity {
if x != nil {
return x.Entity
}
return nil
}
func (x *ResolvedEntity) GetSkip() *Skip {
if x != nil {
return x.Skip
}
return nil
}
func (x *ResolvedEntity) GetHops() int32 {
if x != nil {
return x.Hops
}
return 0
}
func (x *ResolvedEntity) GetStartFixtureName() string {
if x != nil {
return x.StartFixtureName
}
return ""
}
// TimingLog is a protobuf presentation of a timing.Log.
type TimingLog struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Root *TimingStage `protobuf:"bytes,1,opt,name=root,proto3" json:"root,omitempty"`
}
func (x *TimingLog) Reset() {
*x = TimingLog{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[31]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TimingLog) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TimingLog) ProtoMessage() {}
func (x *TimingLog) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[31]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use TimingLog.ProtoReflect.Descriptor instead.
func (*TimingLog) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{31}
}
func (x *TimingLog) GetRoot() *TimingStage {
if x != nil {
return x.Root
}
return nil
}
// TimingStage is a protobuf presentation of a completed timing.Stage.
type TimingStage struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
StartTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
EndTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`
Children []*TimingStage `protobuf:"bytes,4,rep,name=children,proto3" json:"children,omitempty"`
}
func (x *TimingStage) Reset() {
*x = TimingStage{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[32]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TimingStage) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TimingStage) ProtoMessage() {}
func (x *TimingStage) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[32]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use TimingStage.ProtoReflect.Descriptor instead.
func (*TimingStage) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{32}
}
func (x *TimingStage) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *TimingStage) GetStartTime() *timestamppb.Timestamp {
if x != nil {
return x.StartTime
}
return nil
}
func (x *TimingStage) GetEndTime() *timestamppb.Timestamp {
if x != nil {
return x.EndTime
}
return nil
}
func (x *TimingStage) GetChildren() []*TimingStage {
if x != nil {
return x.Children
}
return nil
}
// RunLogEvent indicates that an informational log message not associated with
// an entity was produced.
type RunLogEvent struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Time *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"`
Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"`
Level LogLevel `protobuf:"varint,3,opt,name=level,proto3,enum=tast.core.LogLevel" json:"level,omitempty"`
}
func (x *RunLogEvent) Reset() {
*x = RunLogEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[33]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RunLogEvent) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RunLogEvent) ProtoMessage() {}
func (x *RunLogEvent) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[33]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RunLogEvent.ProtoReflect.Descriptor instead.
func (*RunLogEvent) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{33}
}
func (x *RunLogEvent) GetTime() *timestamppb.Timestamp {
if x != nil {
return x.Time
}
return nil
}
func (x *RunLogEvent) GetText() string {
if x != nil {
return x.Text
}
return ""
}
func (x *RunLogEvent) GetLevel() LogLevel {
if x != nil {
return x.Level
}
return LogLevel_LOGLEVEL_UNSPECIFIED
}
// EntityStartEvent marks the start of an entity run. EntityStartEvent is sent
// even if an entity is to be skipped.
type EntityStartEvent struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Time *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"`
Entity *Entity `protobuf:"bytes,2,opt,name=entity,proto3" json:"entity,omitempty"`
OutDir string `protobuf:"bytes,3,opt,name=out_dir,json=outDir,proto3" json:"out_dir,omitempty"`
}
func (x *EntityStartEvent) Reset() {
*x = EntityStartEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[34]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *EntityStartEvent) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*EntityStartEvent) ProtoMessage() {}
func (x *EntityStartEvent) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[34]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use EntityStartEvent.ProtoReflect.Descriptor instead.
func (*EntityStartEvent) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{34}
}
func (x *EntityStartEvent) GetTime() *timestamppb.Timestamp {
if x != nil {
return x.Time
}
return nil
}
func (x *EntityStartEvent) GetEntity() *Entity {
if x != nil {
return x.Entity
}
return nil
}
func (x *EntityStartEvent) GetOutDir() string {
if x != nil {
return x.OutDir
}
return ""
}
// EntityLogEvent indicates that an informational log message was produced by
// an entity.
type EntityLogEvent struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Time *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"`
EntityName string `protobuf:"bytes,2,opt,name=entity_name,json=entityName,proto3" json:"entity_name,omitempty"`
Text string `protobuf:"bytes,3,opt,name=text,proto3" json:"text,omitempty"`
Level LogLevel `protobuf:"varint,4,opt,name=level,proto3,enum=tast.core.LogLevel" json:"level,omitempty"`
}
func (x *EntityLogEvent) Reset() {
*x = EntityLogEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[35]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *EntityLogEvent) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*EntityLogEvent) ProtoMessage() {}
func (x *EntityLogEvent) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[35]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use EntityLogEvent.ProtoReflect.Descriptor instead.
func (*EntityLogEvent) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{35}
}
func (x *EntityLogEvent) GetTime() *timestamppb.Timestamp {
if x != nil {
return x.Time
}
return nil
}
func (x *EntityLogEvent) GetEntityName() string {
if x != nil {
return x.EntityName
}
return ""
}
func (x *EntityLogEvent) GetText() string {
if x != nil {
return x.Text
}
return ""
}
func (x *EntityLogEvent) GetLevel() LogLevel {
if x != nil {
return x.Level
}
return LogLevel_LOGLEVEL_UNSPECIFIED
}
// EntityErrorEvent indicates that an error was produced by an entity.
// A consumer should treat an entity as failed when it sees one or more errors
// reported for it.
type EntityErrorEvent struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Time *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"`
EntityName string `protobuf:"bytes,2,opt,name=entity_name,json=entityName,proto3" json:"entity_name,omitempty"`
Error *Error `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"`
}
func (x *EntityErrorEvent) Reset() {
*x = EntityErrorEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[36]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *EntityErrorEvent) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*EntityErrorEvent) ProtoMessage() {}
func (x *EntityErrorEvent) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[36]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use EntityErrorEvent.ProtoReflect.Descriptor instead.
func (*EntityErrorEvent) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{36}
}
func (x *EntityErrorEvent) GetTime() *timestamppb.Timestamp {
if x != nil {
return x.Time
}
return nil
}
func (x *EntityErrorEvent) GetEntityName() string {
if x != nil {
return x.EntityName
}
return ""
}
func (x *EntityErrorEvent) GetError() *Error {
if x != nil {
return x.Error
}
return nil
}
// EntityEndEvent marks the end of an entity run.
type EntityEndEvent struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Time *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"`
EntityName string `protobuf:"bytes,2,opt,name=entity_name,json=entityName,proto3" json:"entity_name,omitempty"`
Skip *Skip `protobuf:"bytes,3,opt,name=skip,proto3" json:"skip,omitempty"`
TimingLog *TimingLog `protobuf:"bytes,4,opt,name=timing_log,json=timingLog,proto3" json:"timing_log,omitempty"`
}
func (x *EntityEndEvent) Reset() {
*x = EntityEndEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[37]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *EntityEndEvent) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*EntityEndEvent) ProtoMessage() {}
func (x *EntityEndEvent) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[37]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use EntityEndEvent.ProtoReflect.Descriptor instead.
func (*EntityEndEvent) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{37}
}
func (x *EntityEndEvent) GetTime() *timestamppb.Timestamp {
if x != nil {
return x.Time
}
return nil
}
func (x *EntityEndEvent) GetEntityName() string {
if x != nil {
return x.EntityName
}
return ""
}
func (x *EntityEndEvent) GetSkip() *Skip {
if x != nil {
return x.Skip
}
return nil
}
func (x *EntityEndEvent) GetTimingLog() *TimingLog {
if x != nil {
return x.TimingLog
}
return nil
}
// EntityCopyEndEvent marks the end of an file copies after entity ends.
type EntityCopyEndEvent struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
EntityName string `protobuf:"bytes,1,opt,name=entity_name,json=entityName,proto3" json:"entity_name,omitempty"`
}
func (x *EntityCopyEndEvent) Reset() {
*x = EntityCopyEndEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[38]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *EntityCopyEndEvent) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*EntityCopyEndEvent) ProtoMessage() {}
func (x *EntityCopyEndEvent) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[38]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use EntityCopyEndEvent.ProtoReflect.Descriptor instead.
func (*EntityCopyEndEvent) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{38}
}
func (x *EntityCopyEndEvent) GetEntityName() string {
if x != nil {
return x.EntityName
}
return ""
}
// Skip describes the reasons why an entity is skipped.
type Skip struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Reasons []string `protobuf:"bytes,1,rep,name=reasons,proto3" json:"reasons,omitempty"`
}
func (x *Skip) Reset() {
*x = Skip{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[39]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Skip) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Skip) ProtoMessage() {}
func (x *Skip) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[39]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Skip.ProtoReflect.Descriptor instead.
func (*Skip) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{39}
}
func (x *Skip) GetReasons() []string {
if x != nil {
return x.Reasons
}
return nil
}
// DUTInfo holds DUT system information.
type DUTInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Features contains features available on the DUT.
Features *protocol.DUTFeatures `protobuf:"bytes,4,opt,name=features,proto3" json:"features,omitempty"`
// OsVersion contains the DUT's OS Version.
OsVersion string `protobuf:"bytes,2,opt,name=os_version,json=osVersion,proto3" json:"os_version,omitempty"`
// DefaultBuildArtifactsUrl specifies the default URL of the build artifacts.
DefaultBuildArtifactsUrl string `protobuf:"bytes,3,opt,name=default_build_artifacts_url,json=defaultBuildArtifactsUrl,proto3" json:"default_build_artifacts_url,omitempty"`
}
func (x *DUTInfo) Reset() {
*x = DUTInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[40]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DUTInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DUTInfo) ProtoMessage() {}
func (x *DUTInfo) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[40]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DUTInfo.ProtoReflect.Descriptor instead.
func (*DUTInfo) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{40}
}
func (x *DUTInfo) GetFeatures() *protocol.DUTFeatures {
if x != nil {
return x.Features
}
return nil
}
func (x *DUTInfo) GetOsVersion() string {
if x != nil {
return x.OsVersion
}
return ""
}
func (x *DUTInfo) GetDefaultBuildArtifactsUrl() string {
if x != nil {
return x.DefaultBuildArtifactsUrl
}
return ""
}
// SysInfoState contains the state of the DUT's system information.
type SysInfoState struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// LogInodeSizes maps from each log file's inode to its size in bytes.
LogInodeSizes map[uint64]int64 `protobuf:"bytes,1,rep,name=log_inode_sizes,json=logInodeSizes,proto3" json:"log_inode_sizes,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
// UnifiedLogCursor contains an opaque cursor pointing at the current tip of
// unified system logs.
UnifiedLogCursor string `protobuf:"bytes,2,opt,name=unified_log_cursor,json=unifiedLogCursor,proto3" json:"unified_log_cursor,omitempty"`
// CrashFilePaths contains absolute paths to crash files.
CrashFilePaths []string `protobuf:"bytes,3,rep,name=crash_file_paths,json=crashFilePaths,proto3" json:"crash_file_paths,omitempty"`
}
func (x *SysInfoState) Reset() {
*x = SysInfoState{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[41]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SysInfoState) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SysInfoState) ProtoMessage() {}
func (x *SysInfoState) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[41]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SysInfoState.ProtoReflect.Descriptor instead.
func (*SysInfoState) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{41}
}
func (x *SysInfoState) GetLogInodeSizes() map[uint64]int64 {
if x != nil {
return x.LogInodeSizes
}
return nil
}
func (x *SysInfoState) GetUnifiedLogCursor() string {
if x != nil {
return x.UnifiedLogCursor
}
return ""
}
func (x *SysInfoState) GetCrashFilePaths() []string {
if x != nil {
return x.CrashFilePaths
}
return nil
}
type StackOperationRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Types that are assignable to Type:
//
// *StackOperationRequest_Reset_
// *StackOperationRequest_PreTest
// *StackOperationRequest_PostTest
// *StackOperationRequest_Status
// *StackOperationRequest_SetDirty
// *StackOperationRequest_Errors
// *StackOperationRequest_Value
Type isStackOperationRequest_Type `protobuf_oneof:"type"`
}
func (x *StackOperationRequest) Reset() {
*x = StackOperationRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[42]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *StackOperationRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StackOperationRequest) ProtoMessage() {}
func (x *StackOperationRequest) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[42]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StackOperationRequest.ProtoReflect.Descriptor instead.
func (*StackOperationRequest) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{42}
}
func (m *StackOperationRequest) GetType() isStackOperationRequest_Type {
if m != nil {
return m.Type
}
return nil
}
func (x *StackOperationRequest) GetReset_() *StackReset {
if x, ok := x.GetType().(*StackOperationRequest_Reset_); ok {
return x.Reset_
}
return nil
}
func (x *StackOperationRequest) GetPreTest() *StackPreTest {
if x, ok := x.GetType().(*StackOperationRequest_PreTest); ok {
return x.PreTest
}
return nil
}
func (x *StackOperationRequest) GetPostTest() *StackPostTest {
if x, ok := x.GetType().(*StackOperationRequest_PostTest); ok {
return x.PostTest
}
return nil
}
func (x *StackOperationRequest) GetStatus() *StackGetStatus {
if x, ok := x.GetType().(*StackOperationRequest_Status); ok {
return x.Status
}
return nil
}
func (x *StackOperationRequest) GetSetDirty() *StackSetDirty {
if x, ok := x.GetType().(*StackOperationRequest_SetDirty); ok {
return x.SetDirty
}
return nil
}
func (x *StackOperationRequest) GetErrors() *StackGetErrors {
if x, ok := x.GetType().(*StackOperationRequest_Errors); ok {
return x.Errors
}
return nil
}
func (x *StackOperationRequest) GetValue() *StackValue {
if x, ok := x.GetType().(*StackOperationRequest_Value); ok {
return x.Value
}
return nil
}
type isStackOperationRequest_Type interface {
isStackOperationRequest_Type()
}
type StackOperationRequest_Reset_ struct {
Reset_ *StackReset `protobuf:"bytes,1,opt,name=reset,proto3,oneof"`
}
type StackOperationRequest_PreTest struct {
PreTest *StackPreTest `protobuf:"bytes,2,opt,name=pre_test,json=preTest,proto3,oneof"`
}
type StackOperationRequest_PostTest struct {
PostTest *StackPostTest `protobuf:"bytes,3,opt,name=post_test,json=postTest,proto3,oneof"`
}
type StackOperationRequest_Status struct {
Status *StackGetStatus `protobuf:"bytes,4,opt,name=status,proto3,oneof"`
}
type StackOperationRequest_SetDirty struct {
SetDirty *StackSetDirty `protobuf:"bytes,5,opt,name=set_dirty,json=setDirty,proto3,oneof"`
}
type StackOperationRequest_Errors struct {
Errors *StackGetErrors `protobuf:"bytes,6,opt,name=errors,proto3,oneof"`
}
type StackOperationRequest_Value struct {
Value *StackValue `protobuf:"bytes,7,opt,name=value,proto3,oneof"`
}
func (*StackOperationRequest_Reset_) isStackOperationRequest_Type() {}
func (*StackOperationRequest_PreTest) isStackOperationRequest_Type() {}
func (*StackOperationRequest_PostTest) isStackOperationRequest_Type() {}
func (*StackOperationRequest_Status) isStackOperationRequest_Type() {}
func (*StackOperationRequest_SetDirty) isStackOperationRequest_Type() {}
func (*StackOperationRequest_Errors) isStackOperationRequest_Type() {}
func (*StackOperationRequest_Value) isStackOperationRequest_Type() {}
type StackReset struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *StackReset) Reset() {
*x = StackReset{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[43]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *StackReset) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StackReset) ProtoMessage() {}
func (x *StackReset) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[43]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StackReset.ProtoReflect.Descriptor instead.
func (*StackReset) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{43}
}
type StackPreTest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Entity *Entity `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"`
HasError bool `protobuf:"varint,2,opt,name=has_error,json=hasError,proto3" json:"has_error,omitempty"`
}
func (x *StackPreTest) Reset() {
*x = StackPreTest{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[44]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *StackPreTest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StackPreTest) ProtoMessage() {}
func (x *StackPreTest) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[44]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StackPreTest.ProtoReflect.Descriptor instead.
func (*StackPreTest) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{44}
}
func (x *StackPreTest) GetEntity() *Entity {
if x != nil {
return x.Entity
}
return nil
}
func (x *StackPreTest) GetHasError() bool {
if x != nil {
return x.HasError
}
return false
}
type StackPostTest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Entity *Entity `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"`
HasError bool `protobuf:"varint,2,opt,name=has_error,json=hasError,proto3" json:"has_error,omitempty"`
}
func (x *StackPostTest) Reset() {
*x = StackPostTest{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[45]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *StackPostTest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StackPostTest) ProtoMessage() {}
func (x *StackPostTest) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[45]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StackPostTest.ProtoReflect.Descriptor instead.
func (*StackPostTest) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{45}
}
func (x *StackPostTest) GetEntity() *Entity {
if x != nil {
return x.Entity
}
return nil
}
func (x *StackPostTest) GetHasError() bool {
if x != nil {
return x.HasError
}
return false
}
type StackGetStatus struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *StackGetStatus) Reset() {
*x = StackGetStatus{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[46]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *StackGetStatus) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StackGetStatus) ProtoMessage() {}
func (x *StackGetStatus) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[46]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StackGetStatus.ProtoReflect.Descriptor instead.
func (*StackGetStatus) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{46}
}
type StackSetDirty struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Dirty bool `protobuf:"varint,1,opt,name=dirty,proto3" json:"dirty,omitempty"`
}
func (x *StackSetDirty) Reset() {
*x = StackSetDirty{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[47]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *StackSetDirty) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StackSetDirty) ProtoMessage() {}
func (x *StackSetDirty) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[47]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StackSetDirty.ProtoReflect.Descriptor instead.
func (*StackSetDirty) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{47}
}
func (x *StackSetDirty) GetDirty() bool {
if x != nil {
return x.Dirty
}
return false
}
type StackGetErrors struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *StackGetErrors) Reset() {
*x = StackGetErrors{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[48]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *StackGetErrors) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StackGetErrors) ProtoMessage() {}
func (x *StackGetErrors) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[48]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StackGetErrors.ProtoReflect.Descriptor instead.
func (*StackGetErrors) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{48}
}
type StackValue struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *StackValue) Reset() {
*x = StackValue{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[49]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *StackValue) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StackValue) ProtoMessage() {}
func (x *StackValue) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[49]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StackValue.ProtoReflect.Descriptor instead.
func (*StackValue) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{49}
}
type StackOperationResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// FatalError is an framework internal error happened during operation.
FatalError string `protobuf:"bytes,1,opt,name=fatal_error,json=fatalError,proto3" json:"fatal_error,omitempty"`
// Status is a response for StackGetStatus request.
// It's also populated in Reset's response.
Status StackStatus `protobuf:"varint,2,opt,name=status,proto3,enum=tast.core.StackStatus" json:"status,omitempty"`
// Errors is a response for StackGetErrors request.
Errors []*Error `protobuf:"bytes,3,rep,name=errors,proto3" json:"errors,omitempty"`
// TestHasError is a response for StackPreTest and StackPostTest request.
TestHasError bool `protobuf:"varint,4,opt,name=test_has_error,json=testHasError,proto3" json:"test_has_error,omitempty"`
// FixtValue is the serialized fixture value of the fixture in current stack.
FixtValue []byte `protobuf:"bytes,5,opt,name=fixt_value,json=fixtValue,proto3" json:"fixt_value,omitempty"`
}
func (x *StackOperationResponse) Reset() {
*x = StackOperationResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[50]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *StackOperationResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StackOperationResponse) ProtoMessage() {}
func (x *StackOperationResponse) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[50]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StackOperationResponse.ProtoReflect.Descriptor instead.
func (*StackOperationResponse) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{50}
}
func (x *StackOperationResponse) GetFatalError() string {
if x != nil {
return x.FatalError
}
return ""
}
func (x *StackOperationResponse) GetStatus() StackStatus {
if x != nil {
return x.Status
}
return StackStatus_GREEN
}
func (x *StackOperationResponse) GetErrors() []*Error {
if x != nil {
return x.Errors
}
return nil
}
func (x *StackOperationResponse) GetTestHasError() bool {
if x != nil {
return x.TestHasError
}
return false
}
func (x *StackOperationResponse) GetFixtValue() []byte {
if x != nil {
return x.FixtValue
}
return nil
}
type HeartbeatEvent struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Time *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"`
}
func (x *HeartbeatEvent) Reset() {
*x = HeartbeatEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[51]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *HeartbeatEvent) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*HeartbeatEvent) ProtoMessage() {}
func (x *HeartbeatEvent) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[51]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use HeartbeatEvent.ProtoReflect.Descriptor instead.
func (*HeartbeatEvent) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{51}
}
func (x *HeartbeatEvent) GetTime() *timestamppb.Timestamp {
if x != nil {
return x.Time
}
return nil
}
// A string key-value pair.
type StringPair struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Regex: ^[a-z][a-z0-9_]*(/[a-z][a-z0-9_]*)*$
// Max length: 64.
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
// Max length: 256.
Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
}
func (x *StringPair) Reset() {
*x = StringPair{}
if protoimpl.UnsafeEnabled {
mi := &file_testing_proto_msgTypes[52]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *StringPair) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StringPair) ProtoMessage() {}
func (x *StringPair) ProtoReflect() protoreflect.Message {
mi := &file_testing_proto_msgTypes[52]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StringPair.ProtoReflect.Descriptor instead.
func (*StringPair) Descriptor() ([]byte, []int) {
return file_testing_proto_rawDescGZIP(), []int{52}
}
func (x *StringPair) GetKey() string {
if x != nil {
return x.Key
}
return ""
}
func (x *StringPair) GetValue() string {
if x != nil {
return x.Value
}
return ""
}
var File_testing_proto protoreflect.FileDescriptor
var file_testing_proto_rawDesc = []byte{
0x0a, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
0x09, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65,
0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3e, 0x67, 0x6f, 0x2e,
0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x74, 0x61, 0x73,
0x74, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f, 0x72, 0x6b,
0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x64, 0x75, 0x74, 0x66, 0x65, 0x61,
0x74, 0x75, 0x72, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x66, 0x65, 0x61,
0x74, 0x75, 0x72, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d, 0x6c, 0x6f, 0x67,
0x67, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x64, 0x0a, 0x13, 0x4c, 0x69,
0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x12, 0x2f, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e,
0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72,
0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65,
0x22, 0x4d, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69,
0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x61, 0x73,
0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x45,
0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22,
0x1a, 0x0a, 0x18, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65,
0x56, 0x61, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x26, 0x0a, 0x10, 0x47,
0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x56, 0x61, 0x72, 0x12,
0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
0x61, 0x6d, 0x65, 0x22, 0x4c, 0x0a, 0x19, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, 0x75, 0x6e,
0x74, 0x69, 0x6d, 0x65, 0x56, 0x61, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x12, 0x2f, 0x0a, 0x04, 0x76, 0x61, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b,
0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61,
0x6c, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x56, 0x61, 0x72, 0x52, 0x04, 0x76, 0x61, 0x72,
0x73, 0x22, 0xbf, 0x01, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x73, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0e, 0x72, 0x75, 0x6e, 0x5f, 0x74, 0x65, 0x73,
0x74, 0x73, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x52, 0x75, 0x6e, 0x54, 0x65, 0x73,
0x74, 0x73, 0x49, 0x6e, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x75, 0x6e, 0x54, 0x65, 0x73,
0x74, 0x73, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x5d, 0x0a, 0x18, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f,
0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e,
0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x16, 0x73,
0x74, 0x61, 0x63, 0x6b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x4a, 0x04, 0x08,
0x02, 0x10, 0x03, 0x22, 0x9a, 0x04, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x5f,
0x6c, 0x6f, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x61, 0x73, 0x74,
0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x52, 0x75, 0x6e, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e,
0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x75, 0x6e, 0x4c, 0x6f, 0x67, 0x12, 0x40, 0x0a, 0x0c, 0x65,
0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x1b, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6e,
0x74, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00,
0x52, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x3a, 0x0a,
0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6c, 0x6f, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x19, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6e,
0x74, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09,
0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x67, 0x12, 0x40, 0x0a, 0x0c, 0x65, 0x6e, 0x74,
0x69, 0x74, 0x79, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x1b, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x69,
0x74, 0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b,
0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3a, 0x0a, 0x0a, 0x65,
0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x19, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x69,
0x74, 0x79, 0x45, 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x65, 0x6e,
0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x64, 0x12, 0x47, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74,
0x79, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x1d, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x74,
0x69, 0x74, 0x79, 0x43, 0x6f, 0x70, 0x79, 0x45, 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48,
0x00, 0x52, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x70, 0x79, 0x45, 0x6e, 0x64,
0x12, 0x4b, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x61, 0x73, 0x74,
0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4f, 0x70, 0x65, 0x72, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73,
0x74, 0x61, 0x63, 0x6b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a,
0x09, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x19, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x48, 0x65, 0x61,
0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x68,
0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65,
0x22, 0x57, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x44, 0x55, 0x54, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x75,
0x73, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d,
0x65, 0x78, 0x74, 0x72, 0x61, 0x55, 0x73, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x0a,
0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52,
0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x43, 0x0a, 0x12, 0x47, 0x65, 0x74,
0x44, 0x55, 0x54, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
0x2d, 0x0a, 0x08, 0x64, 0x75, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x12, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x55,
0x54, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x64, 0x75, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x18,
0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, 0x61, 0x74,
0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x48, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53,
0x79, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53,
0x79, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61,
0x74, 0x65, 0x22, 0x55, 0x0a, 0x15, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x53, 0x79, 0x73,
0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0d, 0x69,
0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53,
0x79, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x69, 0x6e, 0x69,
0x74, 0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x4e, 0x0a, 0x16, 0x43, 0x6f, 0x6c,
0x6c, 0x65, 0x63, 0x74, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6c, 0x6f, 0x67, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x67, 0x44, 0x69, 0x72, 0x12, 0x1b, 0x0a, 0x09,
0x63, 0x72, 0x61, 0x73, 0x68, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x08, 0x63, 0x72, 0x61, 0x73, 0x68, 0x44, 0x69, 0x72, 0x22, 0x8e, 0x01, 0x0a, 0x1d, 0x44, 0x6f,
0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e,
0x64, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0e, 0x73,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e,
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x73,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x0a, 0x12,
0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x75,
0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x41,
0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x55, 0x72, 0x6c, 0x22, 0x20, 0x0a, 0x1e, 0x44, 0x6f,
0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e,
0x64, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x0a, 0x11,
0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18,
0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x40, 0x0a,
0x12, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65,
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22,
0xc1, 0x04, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x79,
0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e,
0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52,
0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x63,
0x6b, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x63, 0x6b,
0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
0x74, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x78, 0x74, 0x75, 0x72, 0x65,
0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x78, 0x74, 0x75, 0x72, 0x65, 0x12,
0x41, 0x0a, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18,
0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72,
0x65, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e,
0x63, 0x69, 0x65, 0x73, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69,
0x65, 0x73, 0x12, 0x35, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x18, 0x08,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65,
0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x52,
0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x0b, 0x6c, 0x65, 0x67,
0x61, 0x63, 0x79, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,
0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74,
0x79, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x6c, 0x65, 0x67,
0x61, 0x63, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63,
0x68, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e,
0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
0x50, 0x61, 0x69, 0x72, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x6c, 0x61, 0x67,
0x73, 0x12, 0x22, 0x0a, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x64, 0x5f, 0x64, 0x65,
0x70, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x65, 0x73, 0x74, 0x42, 0x65,
0x64, 0x44, 0x65, 0x70, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x71,
0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x75, 0x67,
0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0c, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x23,
0x0a, 0x0d, 0x6c, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x53, 0x74, 0x61,
0x74, 0x75, 0x73, 0x22, 0x28, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e,
0x74, 0x61, 0x63, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x18,
0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x4f, 0x0a,
0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63,
0x69, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x66, 0x69, 0x6c, 0x65,
0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c,
0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02,
0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0xc7,
0x01, 0x0a, 0x10, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44,
0x61, 0x74, 0x61, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69,
0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x76, 0x61, 0x72,
0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62,
0x6c, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x76,
0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x70, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73,
0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03,
0x28, 0x09, 0x52, 0x0c, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x44, 0x65, 0x70, 0x73,
0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0x80, 0x01, 0x0a, 0x0c, 0x52, 0x75, 0x6e,
0x54, 0x65, 0x73, 0x74, 0x73, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x33, 0x0a, 0x0a, 0x72, 0x75, 0x6e,
0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e,
0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1c,
0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x1d, 0x0a, 0x0a,
0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x09, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xb5, 0x06, 0x0a, 0x09,
0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x65, 0x73,
0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x12,
0x2d, 0x0a, 0x04, 0x64, 0x69, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,
0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x52, 0x75, 0x6e, 0x44, 0x69, 0x72,
0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x04, 0x64, 0x69, 0x72, 0x73, 0x12, 0x2f,
0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x13, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61,
0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12,
0x3f, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63,
0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x12, 0x43, 0x0a, 0x10, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x61, 0x73,
0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x65, 0x43,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x65, 0x43,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4c, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x66,
0x69, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53,
0x74, 0x61, 0x72, 0x74, 0x46, 0x69, 0x78, 0x74, 0x75, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65,
0x52, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x46, 0x69, 0x78, 0x74, 0x75, 0x72, 0x65, 0x53, 0x74,
0x61, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x12, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74,
0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x68, 0x65, 0x61, 0x72,
0x74, 0x62, 0x65, 0x61, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x28, 0x0a,
0x10, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x64,
0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x77, 0x61, 0x69, 0x74, 0x55, 0x6e, 0x74,
0x69, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67,
0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x64, 0x65, 0x62,
0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x51, 0x0a, 0x17, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d,
0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75,
0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x52, 0x15, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
0x65, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x32, 0x0a, 0x06, 0x74, 0x61, 0x72,
0x67, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x61, 0x73, 0x74,
0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x52, 0x75, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x3a, 0x0a,
0x0b, 0x6d, 0x73, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0d, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d,
0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x2e, 0x0a, 0x14, 0x6d, 0x61, 0x78,
0x5f, 0x73, 0x79, 0x73, 0x5f, 0x6d, 0x73, 0x67, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x73, 0x69, 0x7a,
0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6d, 0x61, 0x78, 0x53, 0x79, 0x73, 0x4d,
0x73, 0x67, 0x4c, 0x6f, 0x67, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x52, 0x0a, 0x18, 0x77, 0x61, 0x69,
0x74, 0x5f, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x74, 0x69,
0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75,
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x77, 0x61, 0x69, 0x74, 0x55, 0x6e, 0x74, 0x69,
0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4a, 0x04, 0x08,
0x06, 0x10, 0x07, 0x22, 0xb6, 0x04, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65,
0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x73, 0x65,
0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76,
0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x04, 0x64, 0x69, 0x72, 0x73, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72,
0x65, 0x2e, 0x52, 0x75, 0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73,
0x52, 0x04, 0x64, 0x69, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f,
0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x64, 0x65, 0x62, 0x75,
0x67, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x65, 0x73,
0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05,
0x52, 0x0f, 0x6d, 0x61, 0x78, 0x54, 0x65, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65,
0x73, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01,
0x28, 0x05, 0x52, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70,
0x72, 0x6f, 0x78, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x78,
0x79, 0x12, 0x28, 0x0a, 0x10, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x5f,
0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x77, 0x61, 0x69,
0x74, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x3a, 0x0a, 0x0b, 0x6d,
0x73, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x73, 0x67,
0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x51, 0x0a, 0x17, 0x73, 0x79, 0x73, 0x74, 0x65,
0x6d, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f,
0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69,
0x63, 0x65, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x52, 0x0a, 0x18, 0x77, 0x61,
0x69, 0x74, 0x5f, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x74,
0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,
0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x77, 0x61, 0x69, 0x74, 0x55, 0x6e, 0x74,
0x69, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x26,
0x0a, 0x0e, 0x53, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x44,
0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x53, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67,
0x54, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x42,
0x75, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x42,
0x75, 0x69, 0x6c, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x22, 0x5f, 0x0a, 0x0e,
0x52, 0x75, 0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x19,
0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x07, 0x64, 0x61, 0x74, 0x61, 0x44, 0x69, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x6f, 0x75, 0x74,
0x5f, 0x64, 0x69, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x44,
0x69, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03,
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x65, 0x6d, 0x70, 0x44, 0x69, 0x72, 0x22, 0x9f, 0x03,
0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12,
0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20,
0x03, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12,
0x1d, 0x0a, 0x0a, 0x74, 0x6c, 0x77, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6c, 0x77, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x22,
0x0a, 0x0d, 0x74, 0x6c, 0x77, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x6c, 0x77, 0x53, 0x65, 0x6c, 0x66, 0x4e, 0x61,
0x6d, 0x65, 0x12, 0x35, 0x0a, 0x17, 0x74, 0x6c, 0x77, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72,
0x79, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20,
0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x6c, 0x77, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x54,
0x61, 0x72, 0x67, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x74,
0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64,
0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x5f,
0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x76, 0x73, 0x65, 0x72,
0x76, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x75, 0x73, 0x65, 0x45,
0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x44, 0x65, 0x76, 0x73, 0x65, 0x72, 0x76, 0x65,
0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x61, 0x73, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x07,
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x73, 0x74, 0x44, 0x69, 0x72, 0x12, 0x32, 0x0a,
0x15, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x62,
0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x65, 0x78,
0x74, 0x72, 0x61, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
0x73, 0x12, 0x26, 0x0a, 0x0e, 0x53, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73,
0x6b, 0x49, 0x44, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x53, 0x77, 0x61, 0x72, 0x6d,
0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x75, 0x69,
0x6c, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0d, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x22,
0x7e, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x12, 0x3c, 0x0a, 0x0d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x6f,
0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e,
0x63, 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64,
0x65, 0x52, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x12,
0x2e, 0x0a, 0x13, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
0x74, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x62, 0x75,
0x69, 0x6c, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x55, 0x72, 0x6c, 0x22,
0x51, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x74, 0x46, 0x69, 0x78, 0x74, 0x75, 0x72, 0x65, 0x53,
0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f,
0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e,
0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f,
0x72, 0x73, 0x22, 0x55, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x72,
0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61,
0x73, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72,
0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4d, 0x0a, 0x0d, 0x45, 0x72, 0x72,
0x6f, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69,
0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12,
0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6c, 0x69,
0x6e, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x22, 0xa2, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x73,
0x6f, 0x6c, 0x76, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x29, 0x0a, 0x06, 0x65,
0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x61,
0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x06,
0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x02,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65,
0x2e, 0x53, 0x6b, 0x69, 0x70, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x68,
0x6f, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x68, 0x6f, 0x70, 0x73, 0x12,
0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x66, 0x69, 0x78, 0x74, 0x75, 0x72, 0x65,
0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x74, 0x61,
0x72, 0x74, 0x46, 0x69, 0x78, 0x74, 0x75, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x37, 0x0a,
0x09, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x4c, 0x6f, 0x67, 0x12, 0x2a, 0x0a, 0x04, 0x72, 0x6f,
0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e,
0x63, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x67, 0x65,
0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x22, 0xc7, 0x01, 0x0a, 0x0b, 0x54, 0x69, 0x6d, 0x69, 0x6e,
0x67, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74,
0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72,
0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x08,
0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16,
0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x69, 0x6e,
0x67, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e,
0x22, 0x7c, 0x0a, 0x0b, 0x52, 0x75, 0x6e, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12,
0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12,
0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74,
0x65, 0x78, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01,
0x28, 0x0e, 0x32, 0x13, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c,
0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x86,
0x01, 0x0a, 0x10, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76,
0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74,
0x69, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e,
0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x17,
0x0a, 0x07, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
0x06, 0x6f, 0x75, 0x74, 0x44, 0x69, 0x72, 0x22, 0xa0, 0x01, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x69,
0x74, 0x79, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69,
0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73,
0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x6e,
0x74, 0x69, 0x74, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74,
0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12,
0x29, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13,
0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65,
0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x8b, 0x01, 0x0a, 0x10, 0x45,
0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12,
0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12,
0x1f, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65,
0x12, 0x26, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x10, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f,
0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xbb, 0x01, 0x0a, 0x0e, 0x45, 0x6e, 0x74,
0x69, 0x74, 0x79, 0x45, 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x74,
0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65,
0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x04,
0x73, 0x6b, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x61, 0x73,
0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x6b, 0x69, 0x70, 0x52, 0x04, 0x73, 0x6b, 0x69,
0x70, 0x12, 0x33, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x6f, 0x67, 0x18,
0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72,
0x65, 0x2e, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x4c, 0x6f, 0x67, 0x52, 0x09, 0x74, 0x69, 0x6d,
0x69, 0x6e, 0x67, 0x4c, 0x6f, 0x67, 0x22, 0x35, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79,
0x43, 0x6f, 0x70, 0x79, 0x45, 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b,
0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x0a,
0x04, 0x53, 0x6b, 0x69, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73,
0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x22,
0xa1, 0x01, 0x0a, 0x07, 0x44, 0x55, 0x54, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x32, 0x0a, 0x08, 0x66,
0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e,
0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x55, 0x54, 0x46, 0x65, 0x61,
0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12,
0x1d, 0x0a, 0x0a, 0x6f, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d,
0x0a, 0x1b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f,
0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20,
0x01, 0x28, 0x09, 0x52, 0x18, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x75, 0x69, 0x6c,
0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x55, 0x72, 0x6c, 0x4a, 0x04, 0x08,
0x01, 0x10, 0x02, 0x22, 0xfc, 0x01, 0x0a, 0x0c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x53,
0x74, 0x61, 0x74, 0x65, 0x12, 0x52, 0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x5f, 0x69, 0x6e, 0x6f, 0x64,
0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e,
0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x66,
0x6f, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x6f, 0x64, 0x65, 0x53,
0x69, 0x7a, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6c, 0x6f, 0x67, 0x49, 0x6e,
0x6f, 0x64, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x75, 0x6e, 0x69, 0x66,
0x69, 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x75, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x4c, 0x6f, 0x67,
0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x72, 0x61, 0x73, 0x68, 0x5f,
0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09,
0x52, 0x0e, 0x63, 0x72, 0x61, 0x73, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73,
0x1a, 0x40, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x7a, 0x65,
0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
0x38, 0x01, 0x22, 0x8f, 0x03, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4f, 0x70, 0x65, 0x72,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x05,
0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x61,
0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73,
0x65, 0x74, 0x48, 0x00, 0x52, 0x05, 0x72, 0x65, 0x73, 0x65, 0x74, 0x12, 0x34, 0x0a, 0x08, 0x70,
0x72, 0x65, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x50,
0x72, 0x65, 0x54, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, 0x65, 0x54, 0x65, 0x73,
0x74, 0x12, 0x37, 0x0a, 0x09, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65,
0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x48, 0x00,
0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74,
0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x61, 0x73,
0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x53,
0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
0x37, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53,
0x74, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x74, 0x44, 0x69, 0x72, 0x74, 0x79, 0x48, 0x00, 0x52, 0x08,
0x73, 0x65, 0x74, 0x44, 0x69, 0x72, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f,
0x72, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e,
0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x45, 0x72, 0x72,
0x6f, 0x72, 0x73, 0x48, 0x00, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x2d, 0x0a,
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74,
0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x56, 0x61,
0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04,
0x74, 0x79, 0x70, 0x65, 0x22, 0x0c, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73,
0x65, 0x74, 0x22, 0x56, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x50, 0x72, 0x65, 0x54, 0x65,
0x73, 0x74, 0x12, 0x29, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45,
0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a,
0x09, 0x68, 0x61, 0x73, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08,
0x52, 0x08, 0x68, 0x61, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x57, 0x0a, 0x0d, 0x53, 0x74,
0x61, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x06, 0x65,
0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x61,
0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x06,
0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x65, 0x72,
0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x45, 0x72,
0x72, 0x6f, 0x72, 0x22, 0x10, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x53,
0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x25, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x65,
0x74, 0x44, 0x69, 0x72, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x69, 0x72, 0x74, 0x79, 0x18,