// Code generated by protoc-gen-go. DO NOT EDIT.
// source: google/cloud/datalabeling/v1beta1/evaluation.proto

package datalabeling

import (
	fmt "fmt"
	math "math"

	proto "github.com/golang/protobuf/proto"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	_ "google.golang.org/genproto/googleapis/api/annotations"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Describes an evaluation between a machine learning model's predictions and
// ground truth labels. Created when an [EvaluationJob][google.cloud.datalabeling.v1beta1.EvaluationJob] runs successfully.
type Evaluation struct {
	// Output only. Resource name of an evaluation. The name has the following
	// format:
	//
	// "projects/<var>{project_id}</var>/datasets/<var>{dataset_id}</var>/evaluations/<var>{evaluation_id</var>}'
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Output only. Options used in the evaluation job that created this
	// evaluation.
	Config *EvaluationConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"`
	// Output only. Timestamp for when the evaluation job that created this
	// evaluation ran.
	EvaluationJobRunTime *timestamp.Timestamp `protobuf:"bytes,3,opt,name=evaluation_job_run_time,json=evaluationJobRunTime,proto3" json:"evaluation_job_run_time,omitempty"`
	// Output only. Timestamp for when this evaluation was created.
	CreateTime *timestamp.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
	// Output only. Metrics comparing predictions to ground truth labels.
	EvaluationMetrics *EvaluationMetrics `protobuf:"bytes,5,opt,name=evaluation_metrics,json=evaluationMetrics,proto3" json:"evaluation_metrics,omitempty"`
	// Output only. Type of task that the model version being evaluated performs,
	// as defined in the
	//
	// [evaluationJobConfig.inputConfig.annotationType][google.cloud.datalabeling.v1beta1.EvaluationJobConfig.input_config]
	// field of the evaluation job that created this evaluation.
	AnnotationType AnnotationType `protobuf:"varint,6,opt,name=annotation_type,json=annotationType,proto3,enum=google.cloud.datalabeling.v1beta1.AnnotationType" json:"annotation_type,omitempty"`
	// Output only. The number of items in the ground truth dataset that were used
	// for this evaluation. Only populated when the evaulation is for certain
	// AnnotationTypes.
	EvaluatedItemCount   int64    `protobuf:"varint,7,opt,name=evaluated_item_count,json=evaluatedItemCount,proto3" json:"evaluated_item_count,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Evaluation) Reset()         { *m = Evaluation{} }
func (m *Evaluation) String() string { return proto.CompactTextString(m) }
func (*Evaluation) ProtoMessage()    {}
func (*Evaluation) Descriptor() ([]byte, []int) {
	return fileDescriptor_9d8b95e8e98c043d, []int{0}
}

func (m *Evaluation) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Evaluation.Unmarshal(m, b)
}
func (m *Evaluation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Evaluation.Marshal(b, m, deterministic)
}
func (m *Evaluation) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Evaluation.Merge(m, src)
}
func (m *Evaluation) XXX_Size() int {
	return xxx_messageInfo_Evaluation.Size(m)
}
func (m *Evaluation) XXX_DiscardUnknown() {
	xxx_messageInfo_Evaluation.DiscardUnknown(m)
}

var xxx_messageInfo_Evaluation proto.InternalMessageInfo

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

func (m *Evaluation) GetConfig() *EvaluationConfig {
	if m != nil {
		return m.Config
	}
	return nil
}

func (m *Evaluation) GetEvaluationJobRunTime() *timestamp.Timestamp {
	if m != nil {
		return m.EvaluationJobRunTime
	}
	return nil
}

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

func (m *Evaluation) GetEvaluationMetrics() *EvaluationMetrics {
	if m != nil {
		return m.EvaluationMetrics
	}
	return nil
}

func (m *Evaluation) GetAnnotationType() AnnotationType {
	if m != nil {
		return m.AnnotationType
	}
	return AnnotationType_ANNOTATION_TYPE_UNSPECIFIED
}

func (m *Evaluation) GetEvaluatedItemCount() int64 {
	if m != nil {
		return m.EvaluatedItemCount
	}
	return 0
}

// Configuration details used for calculating evaluation metrics and creating an
// [Evaluation][google.cloud.datalabeling.v1beta1.Evaluation].
type EvaluationConfig struct {
	// Vertical specific options for general metrics.
	//
	// Types that are valid to be assigned to VerticalOption:
	//	*EvaluationConfig_BoundingBoxEvaluationOptions
	VerticalOption       isEvaluationConfig_VerticalOption `protobuf_oneof:"vertical_option"`
	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
	XXX_unrecognized     []byte                            `json:"-"`
	XXX_sizecache        int32                             `json:"-"`
}

func (m *EvaluationConfig) Reset()         { *m = EvaluationConfig{} }
func (m *EvaluationConfig) String() string { return proto.CompactTextString(m) }
func (*EvaluationConfig) ProtoMessage()    {}
func (*EvaluationConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_9d8b95e8e98c043d, []int{1}
}

func (m *EvaluationConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_EvaluationConfig.Unmarshal(m, b)
}
func (m *EvaluationConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_EvaluationConfig.Marshal(b, m, deterministic)
}
func (m *EvaluationConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_EvaluationConfig.Merge(m, src)
}
func (m *EvaluationConfig) XXX_Size() int {
	return xxx_messageInfo_EvaluationConfig.Size(m)
}
func (m *EvaluationConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_EvaluationConfig.DiscardUnknown(m)
}

var xxx_messageInfo_EvaluationConfig proto.InternalMessageInfo

type isEvaluationConfig_VerticalOption interface {
	isEvaluationConfig_VerticalOption()
}

type EvaluationConfig_BoundingBoxEvaluationOptions struct {
	BoundingBoxEvaluationOptions *BoundingBoxEvaluationOptions `protobuf:"bytes,1,opt,name=bounding_box_evaluation_options,json=boundingBoxEvaluationOptions,proto3,oneof"`
}

func (*EvaluationConfig_BoundingBoxEvaluationOptions) isEvaluationConfig_VerticalOption() {}

func (m *EvaluationConfig) GetVerticalOption() isEvaluationConfig_VerticalOption {
	if m != nil {
		return m.VerticalOption
	}
	return nil
}

func (m *EvaluationConfig) GetBoundingBoxEvaluationOptions() *BoundingBoxEvaluationOptions {
	if x, ok := m.GetVerticalOption().(*EvaluationConfig_BoundingBoxEvaluationOptions); ok {
		return x.BoundingBoxEvaluationOptions
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*EvaluationConfig) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*EvaluationConfig_BoundingBoxEvaluationOptions)(nil),
	}
}

// Options regarding evaluation between bounding boxes.
type BoundingBoxEvaluationOptions struct {
	// Minimum
	// [intersection-over-union
	//
	// (IOU)](/vision/automl/object-detection/docs/evaluate#intersection-over-union)
	// required for 2 bounding boxes to be considered a match. This must be a
	// number between 0 and 1.
	IouThreshold         float32  `protobuf:"fixed32,1,opt,name=iou_threshold,json=iouThreshold,proto3" json:"iou_threshold,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *BoundingBoxEvaluationOptions) Reset()         { *m = BoundingBoxEvaluationOptions{} }
func (m *BoundingBoxEvaluationOptions) String() string { return proto.CompactTextString(m) }
func (*BoundingBoxEvaluationOptions) ProtoMessage()    {}
func (*BoundingBoxEvaluationOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_9d8b95e8e98c043d, []int{2}
}

func (m *BoundingBoxEvaluationOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_BoundingBoxEvaluationOptions.Unmarshal(m, b)
}
func (m *BoundingBoxEvaluationOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_BoundingBoxEvaluationOptions.Marshal(b, m, deterministic)
}
func (m *BoundingBoxEvaluationOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_BoundingBoxEvaluationOptions.Merge(m, src)
}
func (m *BoundingBoxEvaluationOptions) XXX_Size() int {
	return xxx_messageInfo_BoundingBoxEvaluationOptions.Size(m)
}
func (m *BoundingBoxEvaluationOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_BoundingBoxEvaluationOptions.DiscardUnknown(m)
}

var xxx_messageInfo_BoundingBoxEvaluationOptions proto.InternalMessageInfo

func (m *BoundingBoxEvaluationOptions) GetIouThreshold() float32 {
	if m != nil {
		return m.IouThreshold
	}
	return 0
}

type EvaluationMetrics struct {
	// Common metrics covering most general cases.
	//
	// Types that are valid to be assigned to Metrics:
	//	*EvaluationMetrics_ClassificationMetrics
	//	*EvaluationMetrics_ObjectDetectionMetrics
	Metrics              isEvaluationMetrics_Metrics `protobuf_oneof:"metrics"`
	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
	XXX_unrecognized     []byte                      `json:"-"`
	XXX_sizecache        int32                       `json:"-"`
}

func (m *EvaluationMetrics) Reset()         { *m = EvaluationMetrics{} }
func (m *EvaluationMetrics) String() string { return proto.CompactTextString(m) }
func (*EvaluationMetrics) ProtoMessage()    {}
func (*EvaluationMetrics) Descriptor() ([]byte, []int) {
	return fileDescriptor_9d8b95e8e98c043d, []int{3}
}

func (m *EvaluationMetrics) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_EvaluationMetrics.Unmarshal(m, b)
}
func (m *EvaluationMetrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_EvaluationMetrics.Marshal(b, m, deterministic)
}
func (m *EvaluationMetrics) XXX_Merge(src proto.Message) {
	xxx_messageInfo_EvaluationMetrics.Merge(m, src)
}
func (m *EvaluationMetrics) XXX_Size() int {
	return xxx_messageInfo_EvaluationMetrics.Size(m)
}
func (m *EvaluationMetrics) XXX_DiscardUnknown() {
	xxx_messageInfo_EvaluationMetrics.DiscardUnknown(m)
}

var xxx_messageInfo_EvaluationMetrics proto.InternalMessageInfo

type isEvaluationMetrics_Metrics interface {
	isEvaluationMetrics_Metrics()
}

type EvaluationMetrics_ClassificationMetrics struct {
	ClassificationMetrics *ClassificationMetrics `protobuf:"bytes,1,opt,name=classification_metrics,json=classificationMetrics,proto3,oneof"`
}

type EvaluationMetrics_ObjectDetectionMetrics struct {
	ObjectDetectionMetrics *ObjectDetectionMetrics `protobuf:"bytes,2,opt,name=object_detection_metrics,json=objectDetectionMetrics,proto3,oneof"`
}

func (*EvaluationMetrics_ClassificationMetrics) isEvaluationMetrics_Metrics() {}

func (*EvaluationMetrics_ObjectDetectionMetrics) isEvaluationMetrics_Metrics() {}

func (m *EvaluationMetrics) GetMetrics() isEvaluationMetrics_Metrics {
	if m != nil {
		return m.Metrics
	}
	return nil
}

func (m *EvaluationMetrics) GetClassificationMetrics() *ClassificationMetrics {
	if x, ok := m.GetMetrics().(*EvaluationMetrics_ClassificationMetrics); ok {
		return x.ClassificationMetrics
	}
	return nil
}

func (m *EvaluationMetrics) GetObjectDetectionMetrics() *ObjectDetectionMetrics {
	if x, ok := m.GetMetrics().(*EvaluationMetrics_ObjectDetectionMetrics); ok {
		return x.ObjectDetectionMetrics
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*EvaluationMetrics) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*EvaluationMetrics_ClassificationMetrics)(nil),
		(*EvaluationMetrics_ObjectDetectionMetrics)(nil),
	}
}

// Metrics calculated for a classification model.
type ClassificationMetrics struct {
	// Precision-recall curve based on ground truth labels, predicted labels, and
	// scores for the predicted labels.
	PrCurve *PrCurve `protobuf:"bytes,1,opt,name=pr_curve,json=prCurve,proto3" json:"pr_curve,omitempty"`
	// Confusion matrix of predicted labels vs. ground truth labels.
	ConfusionMatrix      *ConfusionMatrix `protobuf:"bytes,2,opt,name=confusion_matrix,json=confusionMatrix,proto3" json:"confusion_matrix,omitempty"`
	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
	XXX_unrecognized     []byte           `json:"-"`
	XXX_sizecache        int32            `json:"-"`
}

func (m *ClassificationMetrics) Reset()         { *m = ClassificationMetrics{} }
func (m *ClassificationMetrics) String() string { return proto.CompactTextString(m) }
func (*ClassificationMetrics) ProtoMessage()    {}
func (*ClassificationMetrics) Descriptor() ([]byte, []int) {
	return fileDescriptor_9d8b95e8e98c043d, []int{4}
}

func (m *ClassificationMetrics) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClassificationMetrics.Unmarshal(m, b)
}
func (m *ClassificationMetrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClassificationMetrics.Marshal(b, m, deterministic)
}
func (m *ClassificationMetrics) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClassificationMetrics.Merge(m, src)
}
func (m *ClassificationMetrics) XXX_Size() int {
	return xxx_messageInfo_ClassificationMetrics.Size(m)
}
func (m *ClassificationMetrics) XXX_DiscardUnknown() {
	xxx_messageInfo_ClassificationMetrics.DiscardUnknown(m)
}

var xxx_messageInfo_ClassificationMetrics proto.InternalMessageInfo

func (m *ClassificationMetrics) GetPrCurve() *PrCurve {
	if m != nil {
		return m.PrCurve
	}
	return nil
}

func (m *ClassificationMetrics) GetConfusionMatrix() *ConfusionMatrix {
	if m != nil {
		return m.ConfusionMatrix
	}
	return nil
}

// Metrics calculated for an image object detection (bounding box) model.
type ObjectDetectionMetrics struct {
	// Precision-recall curve.
	PrCurve              *PrCurve `protobuf:"bytes,1,opt,name=pr_curve,json=prCurve,proto3" json:"pr_curve,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ObjectDetectionMetrics) Reset()         { *m = ObjectDetectionMetrics{} }
func (m *ObjectDetectionMetrics) String() string { return proto.CompactTextString(m) }
func (*ObjectDetectionMetrics) ProtoMessage()    {}
func (*ObjectDetectionMetrics) Descriptor() ([]byte, []int) {
	return fileDescriptor_9d8b95e8e98c043d, []int{5}
}

func (m *ObjectDetectionMetrics) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ObjectDetectionMetrics.Unmarshal(m, b)
}
func (m *ObjectDetectionMetrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ObjectDetectionMetrics.Marshal(b, m, deterministic)
}
func (m *ObjectDetectionMetrics) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ObjectDetectionMetrics.Merge(m, src)
}
func (m *ObjectDetectionMetrics) XXX_Size() int {
	return xxx_messageInfo_ObjectDetectionMetrics.Size(m)
}
func (m *ObjectDetectionMetrics) XXX_DiscardUnknown() {
	xxx_messageInfo_ObjectDetectionMetrics.DiscardUnknown(m)
}

var xxx_messageInfo_ObjectDetectionMetrics proto.InternalMessageInfo

func (m *ObjectDetectionMetrics) GetPrCurve() *PrCurve {
	if m != nil {
		return m.PrCurve
	}
	return nil
}

type PrCurve struct {
	// The annotation spec of the label for which the precision-recall curve
	// calculated. If this field is empty, that means the precision-recall curve
	// is an aggregate curve for all labels.
	AnnotationSpec *AnnotationSpec `protobuf:"bytes,1,opt,name=annotation_spec,json=annotationSpec,proto3" json:"annotation_spec,omitempty"`
	// Area under the precision-recall curve. Not to be confused with area under
	// a receiver operating characteristic (ROC) curve.
	AreaUnderCurve float32 `protobuf:"fixed32,2,opt,name=area_under_curve,json=areaUnderCurve,proto3" json:"area_under_curve,omitempty"`
	// Entries that make up the precision-recall graph. Each entry is a "point" on
	// the graph drawn for a different `confidence_threshold`.
	ConfidenceMetricsEntries []*PrCurve_ConfidenceMetricsEntry `protobuf:"bytes,3,rep,name=confidence_metrics_entries,json=confidenceMetricsEntries,proto3" json:"confidence_metrics_entries,omitempty"`
	// Mean average prcision of this curve.
	MeanAveragePrecision float32  `protobuf:"fixed32,4,opt,name=mean_average_precision,json=meanAveragePrecision,proto3" json:"mean_average_precision,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *PrCurve) Reset()         { *m = PrCurve{} }
func (m *PrCurve) String() string { return proto.CompactTextString(m) }
func (*PrCurve) ProtoMessage()    {}
func (*PrCurve) Descriptor() ([]byte, []int) {
	return fileDescriptor_9d8b95e8e98c043d, []int{6}
}

func (m *PrCurve) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_PrCurve.Unmarshal(m, b)
}
func (m *PrCurve) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_PrCurve.Marshal(b, m, deterministic)
}
func (m *PrCurve) XXX_Merge(src proto.Message) {
	xxx_messageInfo_PrCurve.Merge(m, src)
}
func (m *PrCurve) XXX_Size() int {
	return xxx_messageInfo_PrCurve.Size(m)
}
func (m *PrCurve) XXX_DiscardUnknown() {
	xxx_messageInfo_PrCurve.DiscardUnknown(m)
}

var xxx_messageInfo_PrCurve proto.InternalMessageInfo

func (m *PrCurve) GetAnnotationSpec() *AnnotationSpec {
	if m != nil {
		return m.AnnotationSpec
	}
	return nil
}

func (m *PrCurve) GetAreaUnderCurve() float32 {
	if m != nil {
		return m.AreaUnderCurve
	}
	return 0
}

func (m *PrCurve) GetConfidenceMetricsEntries() []*PrCurve_ConfidenceMetricsEntry {
	if m != nil {
		return m.ConfidenceMetricsEntries
	}
	return nil
}

func (m *PrCurve) GetMeanAveragePrecision() float32 {
	if m != nil {
		return m.MeanAveragePrecision
	}
	return 0
}

type PrCurve_ConfidenceMetricsEntry struct {
	// Threshold used for this entry.
	//
	// For classification tasks, this is a classification threshold: a
	// predicted label is categorized as positive or negative (in the context of
	// this point on the PR curve) based on whether the label's score meets this
	// threshold.
	//
	// For image object detection (bounding box) tasks, this is the
	// [intersection-over-union
	//
	// (IOU)](/vision/automl/object-detection/docs/evaluate#intersection-over-union)
	// threshold for the context of this point on the PR curve.
	ConfidenceThreshold float32 `protobuf:"fixed32,1,opt,name=confidence_threshold,json=confidenceThreshold,proto3" json:"confidence_threshold,omitempty"`
	// Recall value.
	Recall float32 `protobuf:"fixed32,2,opt,name=recall,proto3" json:"recall,omitempty"`
	// Precision value.
	Precision float32 `protobuf:"fixed32,3,opt,name=precision,proto3" json:"precision,omitempty"`
	// Harmonic mean of recall and precision.
	F1Score float32 `protobuf:"fixed32,4,opt,name=f1_score,json=f1Score,proto3" json:"f1_score,omitempty"`
	// Recall value for entries with label that has highest score.
	RecallAt1 float32 `protobuf:"fixed32,5,opt,name=recall_at1,json=recallAt1,proto3" json:"recall_at1,omitempty"`
	// Precision value for entries with label that has highest score.
	PrecisionAt1 float32 `protobuf:"fixed32,6,opt,name=precision_at1,json=precisionAt1,proto3" json:"precision_at1,omitempty"`
	// The harmonic mean of [recall_at1][google.cloud.datalabeling.v1beta1.PrCurve.ConfidenceMetricsEntry.recall_at1] and [precision_at1][google.cloud.datalabeling.v1beta1.PrCurve.ConfidenceMetricsEntry.precision_at1].
	F1ScoreAt1 float32 `protobuf:"fixed32,7,opt,name=f1_score_at1,json=f1ScoreAt1,proto3" json:"f1_score_at1,omitempty"`
	// Recall value for entries with label that has highest 5 scores.
	RecallAt5 float32 `protobuf:"fixed32,8,opt,name=recall_at5,json=recallAt5,proto3" json:"recall_at5,omitempty"`
	// Precision value for entries with label that has highest 5 scores.
	PrecisionAt5 float32 `protobuf:"fixed32,9,opt,name=precision_at5,json=precisionAt5,proto3" json:"precision_at5,omitempty"`
	// The harmonic mean of [recall_at5][google.cloud.datalabeling.v1beta1.PrCurve.ConfidenceMetricsEntry.recall_at5] and [precision_at5][google.cloud.datalabeling.v1beta1.PrCurve.ConfidenceMetricsEntry.precision_at5].
	F1ScoreAt5           float32  `protobuf:"fixed32,10,opt,name=f1_score_at5,json=f1ScoreAt5,proto3" json:"f1_score_at5,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *PrCurve_ConfidenceMetricsEntry) Reset()         { *m = PrCurve_ConfidenceMetricsEntry{} }
func (m *PrCurve_ConfidenceMetricsEntry) String() string { return proto.CompactTextString(m) }
func (*PrCurve_ConfidenceMetricsEntry) ProtoMessage()    {}
func (*PrCurve_ConfidenceMetricsEntry) Descriptor() ([]byte, []int) {
	return fileDescriptor_9d8b95e8e98c043d, []int{6, 0}
}

func (m *PrCurve_ConfidenceMetricsEntry) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_PrCurve_ConfidenceMetricsEntry.Unmarshal(m, b)
}
func (m *PrCurve_ConfidenceMetricsEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_PrCurve_ConfidenceMetricsEntry.Marshal(b, m, deterministic)
}
func (m *PrCurve_ConfidenceMetricsEntry) XXX_Merge(src proto.Message) {
	xxx_messageInfo_PrCurve_ConfidenceMetricsEntry.Merge(m, src)
}
func (m *PrCurve_ConfidenceMetricsEntry) XXX_Size() int {
	return xxx_messageInfo_PrCurve_ConfidenceMetricsEntry.Size(m)
}
func (m *PrCurve_ConfidenceMetricsEntry) XXX_DiscardUnknown() {
	xxx_messageInfo_PrCurve_ConfidenceMetricsEntry.DiscardUnknown(m)
}

var xxx_messageInfo_PrCurve_ConfidenceMetricsEntry proto.InternalMessageInfo

func (m *PrCurve_ConfidenceMetricsEntry) GetConfidenceThreshold() float32 {
	if m != nil {
		return m.ConfidenceThreshold
	}
	return 0
}

func (m *PrCurve_ConfidenceMetricsEntry) GetRecall() float32 {
	if m != nil {
		return m.Recall
	}
	return 0
}

func (m *PrCurve_ConfidenceMetricsEntry) GetPrecision() float32 {
	if m != nil {
		return m.Precision
	}
	return 0
}

func (m *PrCurve_ConfidenceMetricsEntry) GetF1Score() float32 {
	if m != nil {
		return m.F1Score
	}
	return 0
}

func (m *PrCurve_ConfidenceMetricsEntry) GetRecallAt1() float32 {
	if m != nil {
		return m.RecallAt1
	}
	return 0
}

func (m *PrCurve_ConfidenceMetricsEntry) GetPrecisionAt1() float32 {
	if m != nil {
		return m.PrecisionAt1
	}
	return 0
}

func (m *PrCurve_ConfidenceMetricsEntry) GetF1ScoreAt1() float32 {
	if m != nil {
		return m.F1ScoreAt1
	}
	return 0
}

func (m *PrCurve_ConfidenceMetricsEntry) GetRecallAt5() float32 {
	if m != nil {
		return m.RecallAt5
	}
	return 0
}

func (m *PrCurve_ConfidenceMetricsEntry) GetPrecisionAt5() float32 {
	if m != nil {
		return m.PrecisionAt5
	}
	return 0
}

func (m *PrCurve_ConfidenceMetricsEntry) GetF1ScoreAt5() float32 {
	if m != nil {
		return m.F1ScoreAt5
	}
	return 0
}

// Confusion matrix of the model running the classification. Only applicable
// when the metrics entry aggregates multiple labels. Not applicable when the
// entry is for a single label.
type ConfusionMatrix struct {
	Row                  []*ConfusionMatrix_Row `protobuf:"bytes,1,rep,name=row,proto3" json:"row,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *ConfusionMatrix) Reset()         { *m = ConfusionMatrix{} }
func (m *ConfusionMatrix) String() string { return proto.CompactTextString(m) }
func (*ConfusionMatrix) ProtoMessage()    {}
func (*ConfusionMatrix) Descriptor() ([]byte, []int) {
	return fileDescriptor_9d8b95e8e98c043d, []int{7}
}

func (m *ConfusionMatrix) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ConfusionMatrix.Unmarshal(m, b)
}
func (m *ConfusionMatrix) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ConfusionMatrix.Marshal(b, m, deterministic)
}
func (m *ConfusionMatrix) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ConfusionMatrix.Merge(m, src)
}
func (m *ConfusionMatrix) XXX_Size() int {
	return xxx_messageInfo_ConfusionMatrix.Size(m)
}
func (m *ConfusionMatrix) XXX_DiscardUnknown() {
	xxx_messageInfo_ConfusionMatrix.DiscardUnknown(m)
}

var xxx_messageInfo_ConfusionMatrix proto.InternalMessageInfo

func (m *ConfusionMatrix) GetRow() []*ConfusionMatrix_Row {
	if m != nil {
		return m.Row
	}
	return nil
}

type ConfusionMatrix_ConfusionMatrixEntry struct {
	// The annotation spec of a predicted label.
	AnnotationSpec *AnnotationSpec `protobuf:"bytes,1,opt,name=annotation_spec,json=annotationSpec,proto3" json:"annotation_spec,omitempty"`
	// Number of items predicted to have this label. (The ground truth label for
	// these items is the `Row.annotationSpec` of this entry's parent.)
	ItemCount            int32    `protobuf:"varint,2,opt,name=item_count,json=itemCount,proto3" json:"item_count,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ConfusionMatrix_ConfusionMatrixEntry) Reset()         { *m = ConfusionMatrix_ConfusionMatrixEntry{} }
func (m *ConfusionMatrix_ConfusionMatrixEntry) String() string { return proto.CompactTextString(m) }
func (*ConfusionMatrix_ConfusionMatrixEntry) ProtoMessage()    {}
func (*ConfusionMatrix_ConfusionMatrixEntry) Descriptor() ([]byte, []int) {
	return fileDescriptor_9d8b95e8e98c043d, []int{7, 0}
}

func (m *ConfusionMatrix_ConfusionMatrixEntry) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ConfusionMatrix_ConfusionMatrixEntry.Unmarshal(m, b)
}
func (m *ConfusionMatrix_ConfusionMatrixEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ConfusionMatrix_ConfusionMatrixEntry.Marshal(b, m, deterministic)
}
func (m *ConfusionMatrix_ConfusionMatrixEntry) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ConfusionMatrix_ConfusionMatrixEntry.Merge(m, src)
}
func (m *ConfusionMatrix_ConfusionMatrixEntry) XXX_Size() int {
	return xxx_messageInfo_ConfusionMatrix_ConfusionMatrixEntry.Size(m)
}
func (m *ConfusionMatrix_ConfusionMatrixEntry) XXX_DiscardUnknown() {
	xxx_messageInfo_ConfusionMatrix_ConfusionMatrixEntry.DiscardUnknown(m)
}

var xxx_messageInfo_ConfusionMatrix_ConfusionMatrixEntry proto.InternalMessageInfo

func (m *ConfusionMatrix_ConfusionMatrixEntry) GetAnnotationSpec() *AnnotationSpec {
	if m != nil {
		return m.AnnotationSpec
	}
	return nil
}

func (m *ConfusionMatrix_ConfusionMatrixEntry) GetItemCount() int32 {
	if m != nil {
		return m.ItemCount
	}
	return 0
}

// A row in the confusion matrix. Each entry in this row has the same
// ground truth label.
type ConfusionMatrix_Row struct {
	// The annotation spec of the ground truth label for this row.
	AnnotationSpec *AnnotationSpec `protobuf:"bytes,1,opt,name=annotation_spec,json=annotationSpec,proto3" json:"annotation_spec,omitempty"`
	// A list of the confusion matrix entries. One entry for each possible
	// predicted label.
	Entries              []*ConfusionMatrix_ConfusionMatrixEntry `protobuf:"bytes,2,rep,name=entries,proto3" json:"entries,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
	XXX_unrecognized     []byte                                  `json:"-"`
	XXX_sizecache        int32                                   `json:"-"`
}

func (m *ConfusionMatrix_Row) Reset()         { *m = ConfusionMatrix_Row{} }
func (m *ConfusionMatrix_Row) String() string { return proto.CompactTextString(m) }
func (*ConfusionMatrix_Row) ProtoMessage()    {}
func (*ConfusionMatrix_Row) Descriptor() ([]byte, []int) {
	return fileDescriptor_9d8b95e8e98c043d, []int{7, 1}
}

func (m *ConfusionMatrix_Row) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ConfusionMatrix_Row.Unmarshal(m, b)
}
func (m *ConfusionMatrix_Row) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ConfusionMatrix_Row.Marshal(b, m, deterministic)
}
func (m *ConfusionMatrix_Row) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ConfusionMatrix_Row.Merge(m, src)
}
func (m *ConfusionMatrix_Row) XXX_Size() int {
	return xxx_messageInfo_ConfusionMatrix_Row.Size(m)
}
func (m *ConfusionMatrix_Row) XXX_DiscardUnknown() {
	xxx_messageInfo_ConfusionMatrix_Row.DiscardUnknown(m)
}

var xxx_messageInfo_ConfusionMatrix_Row proto.InternalMessageInfo

func (m *ConfusionMatrix_Row) GetAnnotationSpec() *AnnotationSpec {
	if m != nil {
		return m.AnnotationSpec
	}
	return nil
}

func (m *ConfusionMatrix_Row) GetEntries() []*ConfusionMatrix_ConfusionMatrixEntry {
	if m != nil {
		return m.Entries
	}
	return nil
}

func init() {
	proto.RegisterType((*Evaluation)(nil), "google.cloud.datalabeling.v1beta1.Evaluation")
	proto.RegisterType((*EvaluationConfig)(nil), "google.cloud.datalabeling.v1beta1.EvaluationConfig")
	proto.RegisterType((*BoundingBoxEvaluationOptions)(nil), "google.cloud.datalabeling.v1beta1.BoundingBoxEvaluationOptions")
	proto.RegisterType((*EvaluationMetrics)(nil), "google.cloud.datalabeling.v1beta1.EvaluationMetrics")
	proto.RegisterType((*ClassificationMetrics)(nil), "google.cloud.datalabeling.v1beta1.ClassificationMetrics")
	proto.RegisterType((*ObjectDetectionMetrics)(nil), "google.cloud.datalabeling.v1beta1.ObjectDetectionMetrics")
	proto.RegisterType((*PrCurve)(nil), "google.cloud.datalabeling.v1beta1.PrCurve")
	proto.RegisterType((*PrCurve_ConfidenceMetricsEntry)(nil), "google.cloud.datalabeling.v1beta1.PrCurve.ConfidenceMetricsEntry")
	proto.RegisterType((*ConfusionMatrix)(nil), "google.cloud.datalabeling.v1beta1.ConfusionMatrix")
	proto.RegisterType((*ConfusionMatrix_ConfusionMatrixEntry)(nil), "google.cloud.datalabeling.v1beta1.ConfusionMatrix.ConfusionMatrixEntry")
	proto.RegisterType((*ConfusionMatrix_Row)(nil), "google.cloud.datalabeling.v1beta1.ConfusionMatrix.Row")
}

func init() {
	proto.RegisterFile("google/cloud/datalabeling/v1beta1/evaluation.proto", fileDescriptor_9d8b95e8e98c043d)
}

var fileDescriptor_9d8b95e8e98c043d = []byte{
	// 1013 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x4f, 0x6f, 0x1b, 0x45,
	0x14, 0xef, 0xda, 0x4d, 0x1c, 0xbf, 0x94, 0xfc, 0x19, 0x52, 0xb3, 0xb5, 0x52, 0xd5, 0x18, 0x81,
	0x2c, 0x0e, 0x5e, 0xec, 0xd6, 0x08, 0x88, 0x04, 0x4a, 0x42, 0x44, 0x00, 0x45, 0x0d, 0xd3, 0x70,
	0xa9, 0x84, 0x56, 0xe3, 0xf1, 0x8b, 0xb3, 0x65, 0xbd, 0xb3, 0xcc, 0xce, 0x3a, 0x89, 0xaa, 0x88,
	0x6b, 0xaf, 0x7c, 0x13, 0xb8, 0x70, 0xe3, 0xc6, 0xd7, 0xe0, 0x8e, 0xf8, 0x14, 0x68, 0x67, 0x67,
	0xbd, 0x6b, 0xd7, 0x4a, 0x1c, 0x44, 0x6f, 0x33, 0xef, 0xcd, 0xef, 0xf7, 0x7b, 0xf3, 0xe6, 0xbd,
	0xb7, 0x0b, 0xdd, 0xa1, 0x10, 0x43, 0x1f, 0x1d, 0xee, 0x8b, 0x78, 0xe0, 0x0c, 0x98, 0x62, 0x3e,
	0xeb, 0xa3, 0xef, 0x05, 0x43, 0x67, 0xdc, 0xe9, 0xa3, 0x62, 0x1d, 0x07, 0xc7, 0xcc, 0x8f, 0x99,
	0xf2, 0x44, 0xd0, 0x0e, 0xa5, 0x50, 0x82, 0xbc, 0x9b, 0x62, 0xda, 0x1a, 0xd3, 0x2e, 0x62, 0xda,
	0x06, 0x53, 0xdf, 0x36, 0xb4, 0x2c, 0xf4, 0x1c, 0x16, 0x04, 0x42, 0x69, 0x7c, 0x94, 0x12, 0xd4,
	0x1f, 0x14, 0xbc, 0x12, 0x23, 0x11, 0x4b, 0x8e, 0xc6, 0xb5, 0x40, 0x3c, 0x39, 0x9f, 0xc1, 0xec,
	0xdc, 0x06, 0xe3, 0x46, 0x21, 0x72, 0x37, 0x42, 0x65, 0xc0, 0x8f, 0x0c, 0x58, 0xef, 0xfa, 0xf1,
	0xa9, 0xa3, 0xbc, 0x11, 0x46, 0x8a, 0x8d, 0xc2, 0xf4, 0x40, 0xf3, 0xaf, 0xbb, 0x00, 0x07, 0x93,
	0x14, 0x10, 0x02, 0x77, 0x03, 0x36, 0x42, 0xdb, 0x6a, 0x58, 0xad, 0x2a, 0xd5, 0x6b, 0xf2, 0x2d,
	0x2c, 0x73, 0x11, 0x9c, 0x7a, 0x43, 0xbb, 0xd4, 0xb0, 0x5a, 0xab, 0xdd, 0xc7, 0xed, 0x1b, 0x33,
	0xd4, 0xce, 0x29, 0xf7, 0x35, 0x94, 0x1a, 0x0a, 0xf2, 0x1d, 0xbc, 0x93, 0x67, 0xdc, 0x7d, 0x21,
	0xfa, 0xae, 0x8c, 0x03, 0x37, 0x89, 0xca, 0x2e, 0x6b, 0xf6, 0x7a, 0xc6, 0x9e, 0x85, 0xdc, 0x3e,
	0xc9, 0x42, 0xa6, 0x5b, 0x39, 0xf4, 0x1b, 0xd1, 0xa7, 0x71, 0x90, 0xb8, 0xc8, 0x0e, 0xac, 0x72,
	0x89, 0x4c, 0x61, 0x4a, 0x73, 0xf7, 0x46, 0x1a, 0x48, 0x8f, 0x6b, 0x30, 0x07, 0x52, 0x88, 0x67,
	0x84, 0x4a, 0x7a, 0x3c, 0xb2, 0x97, 0x34, 0xc7, 0x93, 0x5b, 0x5d, 0xf4, 0x28, 0xc5, 0xd2, 0x4d,
	0x9c, 0x35, 0x91, 0xe7, 0xb0, 0x5e, 0x78, 0x22, 0x75, 0x19, 0xa2, 0xbd, 0xdc, 0xb0, 0x5a, 0x6b,
	0xdd, 0xce, 0x02, 0x0a, 0xbb, 0x13, 0xe4, 0xc9, 0x65, 0x88, 0x74, 0x8d, 0x4d, 0xed, 0xc9, 0x47,
	0x90, 0x65, 0x05, 0x07, 0xae, 0xa7, 0x70, 0xe4, 0x72, 0x11, 0x07, 0xca, 0xae, 0x34, 0xac, 0x56,
	0x99, 0x92, 0x89, 0xef, 0x6b, 0x85, 0xa3, 0xfd, 0xc4, 0xf3, 0xd9, 0x8f, 0xff, 0xec, 0x9e, 0xc1,
	0x07, 0x53, 0x5a, 0x69, 0x14, 0x2c, 0xf4, 0xa2, 0x36, 0x17, 0x23, 0xa7, 0x50, 0x10, 0x9f, 0x87,
	0x52, 0xbc, 0x40, 0xae, 0x22, 0xe7, 0xa5, 0x59, 0x5d, 0xe9, 0x1a, 0x8c, 0x30, 0x31, 0x99, 0xd5,
	0x55, 0xa1, 0x8b, 0x22, 0xe7, 0x65, 0xbe, 0xb9, 0x6a, 0xfe, 0x6a, 0xc1, 0xc6, 0x6c, 0x31, 0x90,
	0x57, 0x16, 0x3c, 0xea, 0x8b, 0x38, 0x18, 0x78, 0xc1, 0xd0, 0xed, 0x8b, 0x0b, 0xb7, 0xf0, 0x04,
	0x22, 0xd4, 0x2c, 0xba, 0x02, 0x57, 0xbb, 0x5f, 0x2c, 0x90, 0xa0, 0x3d, 0xc3, 0xb4, 0x27, 0x2e,
	0x72, 0xa5, 0xa7, 0x29, 0xcd, 0xe1, 0x1d, 0xba, 0xdd, 0xbf, 0xc6, 0xbf, 0xb7, 0x09, 0xeb, 0x63,
	0x94, 0xca, 0xe3, 0xcc, 0x37, 0xd2, 0xcd, 0x7d, 0xd8, 0xbe, 0x8e, 0x92, 0xbc, 0x07, 0x6f, 0x79,
	0x22, 0x76, 0xd5, 0x99, 0xc4, 0xe8, 0x4c, 0xf8, 0x03, 0x1d, 0x6a, 0x89, 0xde, 0xf3, 0x44, 0x7c,
	0x92, 0xd9, 0x9a, 0xaf, 0x4a, 0xb0, 0xf9, 0x5a, 0x6d, 0x90, 0x9f, 0xa0, 0xc6, 0x7d, 0x16, 0x45,
	0xde, 0xa9, 0xc7, 0xa7, 0x2b, 0x2e, 0xbd, 0xee, 0x27, 0x0b, 0x5c, 0x77, 0x7f, 0x8a, 0xc0, 0x30,
	0x1f, 0xde, 0xa1, 0xf7, 0xf9, 0x3c, 0x07, 0x89, 0xc1, 0x16, 0xfd, 0xe4, 0xdd, 0xdc, 0x01, 0x2a,
	0xe4, 0x53, 0xa2, 0x69, 0x3f, 0x7f, 0xba, 0x80, 0xe8, 0x53, 0x4d, 0xf1, 0x65, 0xc6, 0x90, 0xab,
	0xd6, 0xc4, 0x5c, 0xcf, 0x5e, 0x15, 0x2a, 0x46, 0xa5, 0xf9, 0x87, 0x05, 0xf7, 0xe7, 0x06, 0x4d,
	0x0e, 0x60, 0x25, 0x94, 0x2e, 0x8f, 0xe5, 0x18, 0x4d, 0x02, 0x3e, 0x5c, 0x20, 0x96, 0x63, 0xb9,
	0x9f, 0x20, 0x68, 0x25, 0x4c, 0x17, 0xe4, 0x07, 0xd8, 0x48, 0xa6, 0x4b, 0x1c, 0xe9, 0xbb, 0x31,
	0x25, 0xbd, 0x0b, 0x73, 0xb5, 0xee, 0x22, 0xf9, 0xcc, 0xa0, 0x47, 0x1a, 0x49, 0xd7, 0xf9, 0xb4,
	0xa1, 0xe9, 0x42, 0x6d, 0xfe, 0xf5, 0xff, 0xa7, 0xf8, 0x9b, 0xbf, 0x2d, 0x41, 0xc5, 0x18, 0x67,
	0x46, 0x45, 0x32, 0xcd, 0x0d, 0xf3, 0xed, 0x46, 0xc5, 0xb3, 0x10, 0x79, 0x71, 0x54, 0x24, 0x7b,
	0xd2, 0x82, 0x0d, 0x26, 0x91, 0xb9, 0x71, 0x30, 0xc0, 0x2c, 0xec, 0x92, 0xae, 0xdd, 0xb5, 0xc4,
	0xfe, 0x7d, 0x62, 0x4e, 0xa3, 0xf8, 0x19, 0xea, 0x7a, 0x5e, 0x0f, 0x30, 0xe0, 0x98, 0x95, 0x8b,
	0x8b, 0x81, 0x92, 0x1e, 0x46, 0x76, 0xb9, 0x51, 0x6e, 0xad, 0x76, 0x77, 0x17, 0xbf, 0xaa, 0xce,
	0x71, 0x4a, 0x66, 0x52, 0x77, 0x10, 0x28, 0x79, 0x49, 0x6d, 0x3e, 0xcf, 0xee, 0x61, 0x44, 0x9e,
	0x40, 0x6d, 0x84, 0x2c, 0x70, 0xd9, 0x18, 0x25, 0x1b, 0xa2, 0x1b, 0x4a, 0xe4, 0x5e, 0xf2, 0x26,
	0x7a, 0xbc, 0x97, 0xe8, 0x56, 0xe2, 0xdd, 0x4d, 0x9d, 0xc7, 0x99, 0xaf, 0xfe, 0x77, 0x09, 0x6a,
	0xf3, 0xa5, 0x48, 0x07, 0xb6, 0x0a, 0x37, 0x9a, 0xed, 0xdd, 0xb7, 0x73, 0xdf, 0xa4, 0x85, 0x49,
	0x0d, 0x96, 0x25, 0x72, 0xe6, 0xfb, 0x26, 0x49, 0x66, 0x47, 0xb6, 0xa1, 0x9a, 0x87, 0x53, 0xd6,
	0xae, 0xdc, 0x40, 0x1e, 0xc0, 0xca, 0x69, 0xc7, 0x8d, 0xb8, 0x90, 0x68, 0x62, 0xad, 0x9c, 0x76,
	0x9e, 0x25, 0x5b, 0xf2, 0x10, 0x20, 0xa5, 0x70, 0x99, 0xea, 0xe8, 0x6f, 0x4c, 0x89, 0x56, 0x53,
	0xcb, 0xae, 0xea, 0x24, 0x73, 0x65, 0x42, 0xa3, 0x4f, 0x2c, 0xa7, 0x73, 0x65, 0x62, 0x4c, 0x0e,
	0x35, 0xe0, 0x5e, 0x46, 0xaf, 0xcf, 0x54, 0xf4, 0x19, 0x30, 0x12, 0xc9, 0x89, 0xa2, 0x4a, 0xcf,
	0x5e, 0x99, 0x56, 0xe9, 0xcd, 0xaa, 0xf4, 0xec, 0xea, 0x6b, 0x2a, 0xbd, 0x19, 0x95, 0x9e, 0x0d,
	0x33, 0x2a, 0xbd, 0xe6, 0xef, 0x65, 0x58, 0x9f, 0xe9, 0x1c, 0x72, 0x08, 0x65, 0x29, 0xce, 0x6d,
	0x4b, 0x97, 0xc7, 0xc7, 0xb7, 0x6f, 0xbd, 0x36, 0x15, 0xe7, 0x34, 0xa1, 0xa8, 0xff, 0x62, 0xc1,
	0xd6, 0x8c, 0x33, 0x7d, 0xc6, 0x37, 0xd9, 0x1e, 0x0f, 0x01, 0x0a, 0xdf, 0xcf, 0xe4, 0xcd, 0x97,
	0x68, 0xd5, 0xcb, 0x3e, 0x9b, 0xf5, 0x3f, 0x2d, 0x28, 0x53, 0x71, 0xfe, 0x46, 0x43, 0x60, 0x50,
	0xc9, 0x9a, 0xac, 0xa4, 0xb3, 0xf8, 0xd5, 0x7f, 0xc8, 0xe2, 0xbc, 0xc4, 0xd1, 0x8c, 0x77, 0xef,
	0x02, 0xde, 0xe7, 0x62, 0x74, 0x33, 0xed, 0xb1, 0xf5, 0xfc, 0xc8, 0x1c, 0x1a, 0x0a, 0x9f, 0x05,
	0xc3, 0xb6, 0x90, 0x43, 0x67, 0x88, 0x81, 0xfe, 0xa1, 0x72, 0xf2, 0x3f, 0x86, 0x6b, 0x7e, 0x4c,
	0x77, 0x8a, 0xc6, 0xfe, 0xb2, 0x46, 0x3e, 0xfe, 0x37, 0x00, 0x00, 0xff, 0xff, 0x31, 0x5d, 0x23,
	0xd3, 0x95, 0x0b, 0x00, 0x00,
}
