// Copyright 2020 The Chromium OS Authors. All rights reserved.
// 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.25.0-devel
// 	protoc        v3.6.1
// source: test/custom_results/graphics/software_config.proto

package graphics

import (
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// Software configuration of installed software on a device.
// Next Tag: 11
type SoftwareConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Global unique software configuration identifier.
	Id         *SoftwareConfigId    `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	CreateTime *timestamp.Timestamp `protobuf:"bytes,2,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
	// For nested systems, the software configuration of the host system.
	Parent        *SoftwareConfigId        `protobuf:"bytes,3,opt,name=parent,proto3" json:"parent,omitempty"`
	Packages      []*Package               `protobuf:"bytes,4,rep,name=packages,proto3" json:"packages,omitempty"`
	KernelRelease string                   `protobuf:"bytes,5,opt,name=kernel_release,json=kernelRelease,proto3" json:"kernel_release,omitempty"`
	KernelVersion string                   `protobuf:"bytes,6,opt,name=kernel_version,json=kernelVersion,proto3" json:"kernel_version,omitempty"`
	Chromeos      *SoftwareConfig_ChromeOS `protobuf:"bytes,7,opt,name=chromeos,proto3" json:"chromeos,omitempty"`
	Os            *SoftwareConfig_OS       `protobuf:"bytes,8,opt,name=os,proto3" json:"os,omitempty"`
	BiosVersion   string                   `protobuf:"bytes,9,opt,name=bios_version,json=biosVersion,proto3" json:"bios_version,omitempty"`
	EcVersion     string                   `protobuf:"bytes,10,opt,name=ec_version,json=ecVersion,proto3" json:"ec_version,omitempty"`
}

func (x *SoftwareConfig) Reset() {
	*x = SoftwareConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_test_custom_results_graphics_software_config_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SoftwareConfig) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SoftwareConfig) ProtoMessage() {}

func (x *SoftwareConfig) ProtoReflect() protoreflect.Message {
	mi := &file_test_custom_results_graphics_software_config_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 SoftwareConfig.ProtoReflect.Descriptor instead.
func (*SoftwareConfig) Descriptor() ([]byte, []int) {
	return file_test_custom_results_graphics_software_config_proto_rawDescGZIP(), []int{0}
}

func (x *SoftwareConfig) GetId() *SoftwareConfigId {
	if x != nil {
		return x.Id
	}
	return nil
}

func (x *SoftwareConfig) GetCreateTime() *timestamp.Timestamp {
	if x != nil {
		return x.CreateTime
	}
	return nil
}

func (x *SoftwareConfig) GetParent() *SoftwareConfigId {
	if x != nil {
		return x.Parent
	}
	return nil
}

func (x *SoftwareConfig) GetPackages() []*Package {
	if x != nil {
		return x.Packages
	}
	return nil
}

func (x *SoftwareConfig) GetKernelRelease() string {
	if x != nil {
		return x.KernelRelease
	}
	return ""
}

func (x *SoftwareConfig) GetKernelVersion() string {
	if x != nil {
		return x.KernelVersion
	}
	return ""
}

func (x *SoftwareConfig) GetChromeos() *SoftwareConfig_ChromeOS {
	if x != nil {
		return x.Chromeos
	}
	return nil
}

func (x *SoftwareConfig) GetOs() *SoftwareConfig_OS {
	if x != nil {
		return x.Os
	}
	return nil
}

func (x *SoftwareConfig) GetBiosVersion() string {
	if x != nil {
		return x.BiosVersion
	}
	return ""
}

func (x *SoftwareConfig) GetEcVersion() string {
	if x != nil {
		return x.EcVersion
	}
	return ""
}

type SoftwareConfig_ChromeOS struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Board           string `protobuf:"bytes,1,opt,name=board,proto3" json:"board,omitempty"`
	BranchNumber    uint32 `protobuf:"varint,2,opt,name=branch_number,json=branchNumber,proto3" json:"branch_number,omitempty"`
	BuilderPath     string `protobuf:"bytes,3,opt,name=builder_path,json=builderPath,proto3" json:"builder_path,omitempty"`
	BuildNumber     uint32 `protobuf:"varint,4,opt,name=build_number,json=buildNumber,proto3" json:"build_number,omitempty"`
	BuildType       string `protobuf:"bytes,5,opt,name=build_type,json=buildType,proto3" json:"build_type,omitempty"`
	ChromeMilestone uint32 `protobuf:"varint,6,opt,name=chrome_milestone,json=chromeMilestone,proto3" json:"chrome_milestone,omitempty"`
	Description     string `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"`
	Keyset          string `protobuf:"bytes,8,opt,name=keyset,proto3" json:"keyset,omitempty"`
	Name            string `protobuf:"bytes,9,opt,name=name,proto3" json:"name,omitempty"`
	PatchNumber     string `protobuf:"bytes,10,opt,name=patch_number,json=patchNumber,proto3" json:"patch_number,omitempty"`
	Track           string `protobuf:"bytes,11,opt,name=track,proto3" json:"track,omitempty"`
	Version         string `protobuf:"bytes,12,opt,name=version,proto3" json:"version,omitempty"`
}

func (x *SoftwareConfig_ChromeOS) Reset() {
	*x = SoftwareConfig_ChromeOS{}
	if protoimpl.UnsafeEnabled {
		mi := &file_test_custom_results_graphics_software_config_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SoftwareConfig_ChromeOS) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SoftwareConfig_ChromeOS) ProtoMessage() {}

func (x *SoftwareConfig_ChromeOS) ProtoReflect() protoreflect.Message {
	mi := &file_test_custom_results_graphics_software_config_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 SoftwareConfig_ChromeOS.ProtoReflect.Descriptor instead.
func (*SoftwareConfig_ChromeOS) Descriptor() ([]byte, []int) {
	return file_test_custom_results_graphics_software_config_proto_rawDescGZIP(), []int{0, 0}
}

func (x *SoftwareConfig_ChromeOS) GetBoard() string {
	if x != nil {
		return x.Board
	}
	return ""
}

func (x *SoftwareConfig_ChromeOS) GetBranchNumber() uint32 {
	if x != nil {
		return x.BranchNumber
	}
	return 0
}

func (x *SoftwareConfig_ChromeOS) GetBuilderPath() string {
	if x != nil {
		return x.BuilderPath
	}
	return ""
}

func (x *SoftwareConfig_ChromeOS) GetBuildNumber() uint32 {
	if x != nil {
		return x.BuildNumber
	}
	return 0
}

func (x *SoftwareConfig_ChromeOS) GetBuildType() string {
	if x != nil {
		return x.BuildType
	}
	return ""
}

func (x *SoftwareConfig_ChromeOS) GetChromeMilestone() uint32 {
	if x != nil {
		return x.ChromeMilestone
	}
	return 0
}

func (x *SoftwareConfig_ChromeOS) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

func (x *SoftwareConfig_ChromeOS) GetKeyset() string {
	if x != nil {
		return x.Keyset
	}
	return ""
}

func (x *SoftwareConfig_ChromeOS) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *SoftwareConfig_ChromeOS) GetPatchNumber() string {
	if x != nil {
		return x.PatchNumber
	}
	return ""
}

func (x *SoftwareConfig_ChromeOS) GetTrack() string {
	if x != nil {
		return x.Track
	}
	return ""
}

func (x *SoftwareConfig_ChromeOS) GetVersion() string {
	if x != nil {
		return x.Version
	}
	return ""
}

type SoftwareConfig_OS struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	BuildId    string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"`
	Codename   string `protobuf:"bytes,2,opt,name=codename,proto3" json:"codename,omitempty"`
	Id         string `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
	Name       string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
	PrettyName string `protobuf:"bytes,5,opt,name=pretty_name,json=prettyName,proto3" json:"pretty_name,omitempty"`
	VersionId  string `protobuf:"bytes,6,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"`
	Version    string `protobuf:"bytes,7,opt,name=version,proto3" json:"version,omitempty"`
}

func (x *SoftwareConfig_OS) Reset() {
	*x = SoftwareConfig_OS{}
	if protoimpl.UnsafeEnabled {
		mi := &file_test_custom_results_graphics_software_config_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SoftwareConfig_OS) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SoftwareConfig_OS) ProtoMessage() {}

func (x *SoftwareConfig_OS) ProtoReflect() protoreflect.Message {
	mi := &file_test_custom_results_graphics_software_config_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 SoftwareConfig_OS.ProtoReflect.Descriptor instead.
func (*SoftwareConfig_OS) Descriptor() ([]byte, []int) {
	return file_test_custom_results_graphics_software_config_proto_rawDescGZIP(), []int{0, 1}
}

func (x *SoftwareConfig_OS) GetBuildId() string {
	if x != nil {
		return x.BuildId
	}
	return ""
}

func (x *SoftwareConfig_OS) GetCodename() string {
	if x != nil {
		return x.Codename
	}
	return ""
}

func (x *SoftwareConfig_OS) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *SoftwareConfig_OS) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *SoftwareConfig_OS) GetPrettyName() string {
	if x != nil {
		return x.PrettyName
	}
	return ""
}

func (x *SoftwareConfig_OS) GetVersionId() string {
	if x != nil {
		return x.VersionId
	}
	return ""
}

func (x *SoftwareConfig_OS) GetVersion() string {
	if x != nil {
		return x.Version
	}
	return ""
}

var File_test_custom_results_graphics_software_config_proto protoreflect.FileDescriptor

var file_test_custom_results_graphics_software_config_proto_rawDesc = []byte{
	0x0a, 0x32, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65,
	0x73, 0x75, 0x6c, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2f, 0x73,
	0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1c, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f,
	0x6d, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69,
	0x63, 0x73, 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, 0x2a, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d,
	0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63,
	0x73, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
	0x35, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73,
	0x75, 0x6c, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2f, 0x73, 0x6f,
	0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf1, 0x08, 0x0a, 0x0e, 0x53, 0x6f, 0x66, 0x74, 0x77,
	0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3e, 0x0a, 0x02, 0x69, 0x64, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x63, 0x75, 0x73,
	0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x67, 0x72, 0x61, 0x70,
	0x68, 0x69, 0x63, 0x73, 0x2e, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65,
	0x61, 0x74, 0x65, 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, 0x0a, 0x63, 0x72, 0x65, 0x61,
	0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x63, 0x75,
	0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x67, 0x72, 0x61,
	0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x41,
	0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x25, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72,
	0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e,
	0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65,
	0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, 0x72, 0x65, 0x6c, 0x65,
	0x61, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6b, 0x65, 0x72, 0x6e, 0x65,
	0x6c, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6b, 0x65, 0x72, 0x6e,
	0x65, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x0d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
	0x51, 0x0a, 0x08, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x6f, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x35, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f,
	0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73,
	0x2e, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
	0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x4f, 0x53, 0x52, 0x08, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65,
	0x6f, 0x73, 0x12, 0x3f, 0x0a, 0x02, 0x6f, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f,
	0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73,
	0x75, 0x6c, 0x74, 0x73, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x53, 0x6f,
	0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x53, 0x52,
	0x02, 0x6f, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x69, 0x6f, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73,
	0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x69, 0x6f, 0x73, 0x56,
	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x63, 0x5f, 0x76, 0x65, 0x72,
	0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x63, 0x56, 0x65,
	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0xf6, 0x02, 0x0a, 0x08, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65,
	0x4f, 0x53, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x72, 0x61, 0x6e,
	0x63, 0x68, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52,
	0x0c, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x21, 0x0a,
	0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x50, 0x61, 0x74, 0x68,
	0x12, 0x21, 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
	0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4e, 0x75, 0x6d,
	0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x79, 0x70,
	0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x79,
	0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x5f, 0x6d, 0x69, 0x6c,
	0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x65, 0x4d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x12, 0x20, 0x0a,
	0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12,
	0x16, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x73, 0x65, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x06, 0x6b, 0x65, 0x79, 0x73, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
	0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70,
	0x61, 0x74, 0x63, 0x68, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x0b, 0x70, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x14,
	0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74,
	0x72, 0x61, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18,
	0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0xb9,
	0x01, 0x0a, 0x02, 0x4f, 0x53, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69,
	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64,
	0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02,
	0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04,
	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
	0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x74, 0x74, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x74, 0x74, 0x79, 0x4e, 0x61, 0x6d,
	0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18,
	0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64,
	0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x6f,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x63, 0x75, 0x73,
	0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x61, 0x70,
	0x68, 0x69, 0x63, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_test_custom_results_graphics_software_config_proto_rawDescOnce sync.Once
	file_test_custom_results_graphics_software_config_proto_rawDescData = file_test_custom_results_graphics_software_config_proto_rawDesc
)

func file_test_custom_results_graphics_software_config_proto_rawDescGZIP() []byte {
	file_test_custom_results_graphics_software_config_proto_rawDescOnce.Do(func() {
		file_test_custom_results_graphics_software_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_test_custom_results_graphics_software_config_proto_rawDescData)
	})
	return file_test_custom_results_graphics_software_config_proto_rawDescData
}

var file_test_custom_results_graphics_software_config_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
var file_test_custom_results_graphics_software_config_proto_goTypes = []interface{}{
	(*SoftwareConfig)(nil),          // 0: test.custom_results.graphics.SoftwareConfig
	(*SoftwareConfig_ChromeOS)(nil), // 1: test.custom_results.graphics.SoftwareConfig.ChromeOS
	(*SoftwareConfig_OS)(nil),       // 2: test.custom_results.graphics.SoftwareConfig.OS
	(*SoftwareConfigId)(nil),        // 3: test.custom_results.graphics.SoftwareConfigId
	(*timestamp.Timestamp)(nil),     // 4: google.protobuf.Timestamp
	(*Package)(nil),                 // 5: test.custom_results.graphics.Package
}
var file_test_custom_results_graphics_software_config_proto_depIdxs = []int32{
	3, // 0: test.custom_results.graphics.SoftwareConfig.id:type_name -> test.custom_results.graphics.SoftwareConfigId
	4, // 1: test.custom_results.graphics.SoftwareConfig.create_time:type_name -> google.protobuf.Timestamp
	3, // 2: test.custom_results.graphics.SoftwareConfig.parent:type_name -> test.custom_results.graphics.SoftwareConfigId
	5, // 3: test.custom_results.graphics.SoftwareConfig.packages:type_name -> test.custom_results.graphics.Package
	1, // 4: test.custom_results.graphics.SoftwareConfig.chromeos:type_name -> test.custom_results.graphics.SoftwareConfig.ChromeOS
	2, // 5: test.custom_results.graphics.SoftwareConfig.os:type_name -> test.custom_results.graphics.SoftwareConfig.OS
	6, // [6:6] is the sub-list for method output_type
	6, // [6:6] is the sub-list for method input_type
	6, // [6:6] is the sub-list for extension type_name
	6, // [6:6] is the sub-list for extension extendee
	0, // [0:6] is the sub-list for field type_name
}

func init() { file_test_custom_results_graphics_software_config_proto_init() }
func file_test_custom_results_graphics_software_config_proto_init() {
	if File_test_custom_results_graphics_software_config_proto != nil {
		return
	}
	file_test_custom_results_graphics_package_proto_init()
	file_test_custom_results_graphics_software_config_id_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_test_custom_results_graphics_software_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SoftwareConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_custom_results_graphics_software_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SoftwareConfig_ChromeOS); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_custom_results_graphics_software_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SoftwareConfig_OS); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_test_custom_results_graphics_software_config_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   3,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_test_custom_results_graphics_software_config_proto_goTypes,
		DependencyIndexes: file_test_custom_results_graphics_software_config_proto_depIdxs,
		MessageInfos:      file_test_custom_results_graphics_software_config_proto_msgTypes,
	}.Build()
	File_test_custom_results_graphics_software_config_proto = out.File
	file_test_custom_results_graphics_software_config_proto_rawDesc = nil
	file_test_custom_results_graphics_software_config_proto_goTypes = nil
	file_test_custom_results_graphics_software_config_proto_depIdxs = nil
}
